← easystroke

Advanced, Ignore: move cursor upon press/release

6e266a0cb0f0ad1e5844b21193b5ea3c5f99ca5f · Thomas Jaeger · May 24, 2010 13:39

Some drivers might not emit motion events before press/release
events, so make sure the cursor position is up to date.

+10 −2 · 1 file changed

  • main.cc +10 −2
diff --git a/main.cc b/main.cc
index b9f731f..0a049b4 100644
--- a/main.cc
+++ b/main.cc
@@ -219,8 +219,10 @@ class IgnoreHandler : public Handler {
 public:
 	IgnoreHandler(RModifiers mods_) : mods(mods_) {}
 	virtual void press(guint b, RTriple e) {
-		if (current_dev->master)
+		if (current_dev->master) {
+			XTestFakeMotionEvent(dpy, DefaultScreen(dpy), e->x, e->y, 0);
 			XTestFakeButtonEvent(dpy, b, true, CurrentTime);
+		}
 	}
 	virtual void motion(RTriple e) {
 		if (current_dev->master)
@@ -228,8 +230,10 @@ public:
 	}
 	// TODO: Handle Proximity
 	virtual void release(guint b, RTriple e) {
-		if (current_dev->master)
+		if (current_dev->master) {
+			XTestFakeMotionEvent(dpy, DefaultScreen(dpy), e->x, e->y, 0);
 			XTestFakeButtonEvent(dpy, b, false, CurrentTime);
+		}
 		if (!xinput_pressed.size())
 			parent->replace_child(NULL);
 	}
@@ -513,6 +517,8 @@ public:
 		replay.reset();
 	}
 	virtual void press(guint b, RTriple e) {
+		if (current_dev->master)
+			XTestFakeMotionEvent(dpy, DefaultScreen(dpy), e->x, e->y, 0);
 		click_time = 0;
 		if (remap_to) {
 			fake_core_button(remap_to, false);
@@ -569,6 +575,8 @@ public:
 			XTestFakeMotionEvent(dpy, DefaultScreen(dpy), e->x, e->y, 0);
 	}
 	virtual void release(guint b, RTriple e) {
+		if (current_dev->master)
+			XTestFakeMotionEvent(dpy, DefaultScreen(dpy), e->x, e->y, 0);
 		if (remap_to) {
 			fake_core_button(remap_to, false);
 		}