]> git.sur5r.net Git - i3/i3/commitdiff
re-enable sending fake configure notifies
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 31 May 2010 21:00:36 +0000 (23:00 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 31 May 2010 21:00:36 +0000 (23:00 +0200)
include/xcb.h
src/x.c
src/xcb.c

index a7aeaf21b8d8df8ba54528312a8858e2936494e5..3f4b735cef73522ff4487fcd7996b89db7f6d0ba 100644 (file)
@@ -127,14 +127,12 @@ void xcb_draw_rect(xcb_connection_t *conn, xcb_drawable_t drawable,
  */
 void fake_configure_notify(xcb_connection_t *conn, Rect r, xcb_window_t window);
 
-#if 0
 /**
  * Generates a configure_notify_event with absolute coordinates (relative to
  * the X root window, not to the client’s frame) for the given client.
  *
  */
-void fake_absolute_configure_notify(xcb_connection_t *conn, Client *client);
-#endif
+void fake_absolute_configure_notify(Con *con);
 
 /**
  * Finds out which modifier mask is the one for numlock, as the user may
diff --git a/src/x.c b/src/x.c
index f73fc8463684f3d47fd1a48a3fe80e08b63dd6e7..5e0ce71c63165bad23343b060f3fde8243b77585 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -239,11 +239,13 @@ static void x_push_node(Con *con) {
         state->mapped = con->mapped;
     }
 
+    bool fake_notify = false;
     /* set new position if rect changed */
     if (memcmp(&(state->rect), &(con->rect), sizeof(Rect)) != 0) {
         LOG("setting rect (%d, %d, %d, %d)\n", con->rect.x, con->rect.y, con->rect.width, con->rect.height);
         xcb_set_window_rect(conn, con->frame, con->rect);
         memcpy(&(state->rect), &(con->rect), sizeof(Rect));
+        fake_notify = true;
     }
 
     /* dito, but for child windows */
@@ -252,6 +254,12 @@ static void x_push_node(Con *con) {
             con->window_rect.x, con->window_rect.y, con->window_rect.width, con->window_rect.height);
         xcb_set_window_rect(conn, con->window->id, con->window_rect);
         memcpy(&(state->rect), &(con->rect), sizeof(Rect));
+        fake_notify = true;
+    }
+
+    if (fake_notify) {
+        LOG("Sending fake configure notify\n");
+        fake_absolute_configure_notify(con);
     }
 
     /* handle all children and floating windows of this node */
index 3da1081dd0548ae8463533821fcc0c5f2baee35e..78b7a3b11b9e43476aadf618b919d4df47395279 100644 (file)
--- a/src/xcb.c
+++ b/src/xcb.c
@@ -172,23 +172,23 @@ void fake_configure_notify(xcb_connection_t *conn, Rect r, xcb_window_t window)
         xcb_flush(conn);
 }
 
-#if 0
 /*
  * Generates a configure_notify_event with absolute coordinates (relative to the X root
  * window, not to the client’s frame) for the given client.
  *
  */
-void fake_absolute_configure_notify(xcb_connection_t *conn, Client *client) {
+void fake_absolute_configure_notify(Con *con) {
         Rect absolute;
+        if (con->window == NULL)
+                return;
 
-        absolute.x = client->rect.x + client->child_rect.x;
-        absolute.y = client->rect.y + client->child_rect.y;
-        absolute.width = client->child_rect.width;
-        absolute.height = client->child_rect.height;
+        absolute.x = con->rect.x + con->window_rect.x;
+        absolute.y = con->rect.y + con->window_rect.y;
+        absolute.width = con->window_rect.width;
+        absolute.height = con->window_rect.height;
 
-        fake_configure_notify(conn, absolute, client->child);
+        fake_configure_notify(conn, absolute, con->window->id);
 }
-#endif
 
 /*
  * Finds out which modifier mask is the one for numlock, as the user may change this.