summaryrefslogtreecommitdiff
path: root/play.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'play.cpp')
-rw-r--r--play.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/play.cpp b/play.cpp
index 509c058..0c0e759 100644
--- a/play.cpp
+++ b/play.cpp
@@ -32,6 +32,8 @@ Rect get_win_pos(Window win)
void play(const char *fn, Window win)
{
+ Window target_win = 0;
+
if (win == 0) {
fprintf (stderr, "play mode require a window to be specified\n");
exit(EXIT_FAILURE);
@@ -67,9 +69,11 @@ void play(const char *fn, Window win)
case XI_KeyRelease:
ev.type = KeyRelease;
keyboard:
+ if (rec.get_field(Record::Window, 0) != target_win)
+ break;
ev.xkey.x = rec.get_field(Record::X);
- ev.xkey.x_root = ev.xkey.x + rc.x;
ev.xkey.y = rec.get_field(Record::Y);
+ ev.xkey.x_root = ev.xkey.x + rc.x;
ev.xkey.y_root = ev.xkey.y + rc.y;
ev.xkey.state = rec.get_field(Record::State);
ev.xkey.keycode = rec.get_field(Record::Detail);
@@ -83,29 +87,37 @@ void play(const char *fn, Window win)
goto mouse;
case XI_ButtonRelease:
ev.type = ButtonRelease;
- goto mouse;
- case XI_Motion:
- ev.type = MotionNotify;
+ mouse:
+ if (rec.get_field(Record::Window, 0) != target_win)
+ break;
ev.xkey.x = rec.get_field(Record::X);
- ev.xkey.x_root = ev.xkey.x + rc.x;
ev.xkey.y = rec.get_field(Record::Y);
+ ev.xkey.x_root = ev.xkey.x + rc.x;
ev.xkey.y_root = ev.xkey.y + rc.y;
ev.xkey.state = rec.get_field(Record::State);
-// XSendEvent(dpy, win, False, 0, &ev);
- XWarpPointer(dpy, win, win, 0,0,0,0, ev.xkey.x, ev.xkey.y);
+ ev.xkey.keycode = rec.get_field(Record::Detail);
+ XSendEvent(dpy, win, False, 0, &ev);
+// XSendEvent(dpy, win, True, ButtonPressMask, &ev);
XFlush(dpy);
break;
- mouse:
+ case XI_Motion:
+ if (rec.get_field(Record::Window, 0) != target_win)
+ break;
+ ev.type = MotionNotify;
ev.xkey.x = rec.get_field(Record::X);
- ev.xkey.x_root = ev.xkey.x + rc.x;
ev.xkey.y = rec.get_field(Record::Y);
+ ev.xkey.x_root = ev.xkey.x + rc.x;
ev.xkey.y_root = ev.xkey.y + rc.y;
ev.xkey.state = rec.get_field(Record::State);
- ev.xkey.keycode = rec.get_field(Record::Detail);
- XSendEvent(dpy, win, False, 0, &ev);
-// XSendEvent(dpy, win, True, ButtonPressMask, &ev);
+// XSendEvent(dpy, win, False, 0, &ev);
+ XWarpPointer(dpy, win, win, 0,0,0,0, ev.xkey.x, ev.xkey.y);
XFlush(dpy);
break;
+ case Record::TargetWindow:
+ target_win = rec.get_field(Record::Window);
+ break;
+ case Record::WindowMove:
+ break;
default:
fprintf (stderr, "unknown type %u\n", rec.get_type());
exit(EXIT_FAILURE);