]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: configure windows before mapping, correctly store window_rect instead of...
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 27 Nov 2010 15:44:45 +0000 (16:44 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 27 Nov 2010 15:44:45 +0000 (16:44 +0100)
src/x.c

diff --git a/src/x.c b/src/x.c
index 192e7b89c07266acfc20a2773ad93809e95527b8..88463b1aa4fa62370dc6bb86fb5f0a0089ae4a0e 100644 (file)
--- a/src/x.c
+++ b/src/x.c
@@ -435,6 +435,25 @@ static void x_push_node(Con *con) {
                 con, con->window->id, con->ignore_unmap);
     }
 
+    bool fake_notify = false;
+    /* set new position if rect changed */
+    if (memcmp(&(state->rect), &rect, sizeof(Rect)) != 0) {
+        LOG("setting rect (%d, %d, %d, %d)\n", rect.x, rect.y, rect.width, rect.height);
+        xcb_set_window_rect(conn, con->frame, rect);
+        memcpy(&(state->rect), &rect, sizeof(Rect));
+        fake_notify = true;
+    }
+
+    /* dito, but for child windows */
+    if (con->window != NULL &&
+        memcmp(&(state->window_rect), &(con->window_rect), sizeof(Rect)) != 0) {
+        LOG("setting window rect (%d, %d, %d, %d)\n",
+            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->window_rect), &(con->window_rect), sizeof(Rect));
+        fake_notify = true;
+    }
+
     /* map/unmap if map state changed, also ensure that the child window
      * is changed if we are mapped *and* in initial state (meaning the
      * container was empty before, but now got a child) */
@@ -483,25 +502,6 @@ 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), &rect, sizeof(Rect)) != 0) {
-        LOG("setting rect (%d, %d, %d, %d)\n", rect.x, rect.y, rect.width, rect.height);
-        xcb_set_window_rect(conn, con->frame, rect);
-        memcpy(&(state->rect), &rect, sizeof(Rect));
-        fake_notify = true;
-    }
-
-    /* dito, but for child windows */
-    if (con->window != NULL &&
-        memcmp(&(state->window_rect), &(con->window_rect), sizeof(Rect)) != 0) {
-        LOG("setting window rect (%d, %d, %d, %d)\n",
-            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);