From 2b0f5c8f7cea4f1bfe9352c7dcc20aa0165d8626 Mon Sep 17 00:00:00 2001 From: Frediano Ziglio Date: Thu, 6 Aug 2015 16:01:42 +0100 Subject: Add additional informations to log Log window we are tracking. Log window position and movements. Signed-off-by: Frediano Ziglio --- rec.h | 3 ++- record.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/rec.h b/rec.h index 332cd6c..3406f02 100644 --- a/rec.h +++ b/rec.h @@ -4,7 +4,8 @@ inline void operator delete(void *p) { free(p); } class Record { public: - enum FieldsType { Nothing, X, Y, State, Detail, MAX_FIELD }; + enum FieldsType { Nothing, X, Y, State, Detail, Window, Width, Height, Keysym, MAX_FIELD }; + enum RecordType { WindowMove = 256, TargetWindow }; Record(unsigned _type, unsigned _time): fields_present(0), type(_type), time(_time) { diff --git a/record.cpp b/record.cpp index abdfb96..1ac3440 100644 --- a/record.cpp +++ b/record.cpp @@ -42,6 +42,7 @@ private: void handle_xinput(XGenericEventCookie *cookie); void handle_ConfigureNotify(XEvent *event); void handle_xev(XEvent *ev); + void record_move(); WriteRecordsFile file; bool has_focus, inside; @@ -57,6 +58,14 @@ DoRecord::DoRecord(Window _win, const char *fn): xev_init(win); xinput_init(dpy, win); + + /* mark which window we selected to record */ + Record r(Record::TargetWindow, get_record_time()); + r.set_field(Record::Window, win); + file.put(r); + + /* fake move to tell where mouse was */ + record_move(); } void @@ -85,6 +94,18 @@ DoRecord::go() signal(SIGTERM, SIG_DFL); } +void +DoRecord::record_move() +{ + Record r(Record::WindowMove, get_record_time()); + r.set_field(Record::X, rc.x); + r.set_field(Record::Y, rc.y); + r.set_field(Record::Width, rc.width); + r.set_field(Record::Height, rc.height); + r.set_field(Record::Window, win); + file.put(r); +} + void DoRecord::handle_xi_mouse(XIDeviceEvent* ev) { @@ -104,6 +125,7 @@ DoRecord::handle_xi_mouse(XIDeviceEvent* ev) r.set_field(Record::Y, mouse_y - rc.y); r.set_field(Record::State, ev->mods.effective); r.set_field(Record::Detail, ev->detail); + r.set_field(Record::Window, win); file.put(r); if (verbose == 1) @@ -118,6 +140,7 @@ DoRecord::handle_xi_keys(XIDeviceEvent* ev) r.set_field(Record::Y, ev->root_y - rc.y); r.set_field(Record::State, ev->mods.effective); r.set_field(Record::Detail, ev->detail); + r.set_field(Record::Window, win); file.put(r); } @@ -167,6 +190,7 @@ DoRecord::handle_ConfigureNotify(XEvent *event) rc.y = e->y; rc.width = e->width; rc.height = e->height; + record_move(); } } -- cgit v1.2.3