]> git.sur5r.net Git - i3/i3/commitdiff
Warp cursor when changing workspace.
authorValentin Voigt <mail@valentinvoigt.info>
Thu, 11 Aug 2011 19:57:22 +0000 (21:57 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Thu, 11 Aug 2011 20:13:50 +0000 (22:13 +0200)
include/xcb.h
src/workspace.c
src/xcb.c

index 13fafb0b9c72777ce34dd8e941b304c6c07af995..4d7eafa02cfed430b1a7919f5c12e78155c5a996 100644 (file)
@@ -152,4 +152,10 @@ void xcb_set_window_rect(xcb_connection_t *conn, xcb_window_t window, Rect r);
 
 bool xcb_reply_contains_atom(xcb_get_property_reply_t *prop, xcb_atom_t atom);
 
+/**
+ * Moves the mouse pointer into the middle of rect.
+ *
+ */
+void xcb_warp_pointer_rect(xcb_connection_t *conn, Rect *rect);
+
 #endif
index 2fe9630483029de25500239f1e6342f97b27efa0..5dd2535777155e470e5cb31f220580d67f6a5f9d 100644 (file)
@@ -217,10 +217,19 @@ void workspace_show(const char *num) {
         }
     }
 
+    /* Memorize current output */
+    Con *old_output = con_get_output(focused);
+
     con_focus(next);
     workspace->fullscreen_mode = CF_OUTPUT;
     LOG("focused now = %p / %s\n", focused, focused->name);
 
+    /* Set mouse pointer */
+    Con *new_output = con_get_output(focused);
+    if (old_output != new_output) {
+       xcb_warp_pointer_rect(conn, &next->rect);
+    }
+
     /* Update the EWMH hints */
     if (changed_num_workspaces)
         ewmh_update_workarea();
index 2c194013b09172d2fc784c11dfc3362569e053fe..a70f27fa670808da7d37740781792875808ebd4d 100644 (file)
--- a/src/xcb.c
+++ b/src/xcb.c
@@ -361,3 +361,13 @@ bool xcb_reply_contains_atom(xcb_get_property_reply_t *prop, xcb_atom_t atom) {
     return false;
 
 }
+
+/**
+ * Moves the mouse pointer into the middle of rect.
+ *
+ */
+void xcb_warp_pointer_rect(xcb_connection_t *conn, Rect *rect) {
+    xcb_warp_pointer(conn, XCB_NONE, root, 0, 0, 0, 0,
+        rect->x + (rect->width / 2),
+        rect->y + (rect->height / 2));
+}