]> git.sur5r.net Git - i3/i3/blobdiff - src/x.c
Only warp pointer once during x_push_changes()
[i3/i3] / src / x.c
diff --git a/src/x.c b/src/x.c
index 6235cfbcb7f3fedb9348379560e1dcbacc1a07a0..30e6a1c48fa3d74c18093ecd8904a34f8a810d6a 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -12,6 +12,9 @@ xcb_window_t focused_id = XCB_NONE;
 static xcb_window_t *btt_stack;
 static int btt_stack_num;
 
+/* Stores coordinates to warp mouse pointer to if set */
+static Rect *warp_to;
+
 /*
  * Describes the X11 state we may modify (map state, position, window stack).
  * There is one entry per container. The state represents the current situation
@@ -862,6 +865,11 @@ void x_push_changes(Con *con) {
         focused_id = root;
     }
 
+    if (warp_to) {
+        xcb_warp_pointer_rect(conn, warp_to);
+        warp_to = NULL;
+    }
+
     xcb_flush(conn);
     DLOG("\n\n ENDING CHANGES\n\n");
 
@@ -937,3 +945,13 @@ void x_set_i3_atoms() {
     xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root, A_I3_CONFIG_PATH, A_UTF8_STRING, 8,
                         strlen(current_configpath), current_configpath);
 }
+
+/*
+ * Set warp_to coordinates.  This will trigger on the next call to
+ * x_push_changes().
+ *
+ */
+void x_set_warp_to(Rect *rect)
+{
+    warp_to = rect;
+}