From: Michael Stapelberg Date: Sat, 27 Nov 2010 15:44:45 +0000 (+0100) Subject: Bugfix: configure windows before mapping, correctly store window_rect instead of... X-Git-Tag: tree-pr1~53 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=d47a1edf22628133dae2e2168895857582254931;p=i3%2Fi3 Bugfix: configure windows before mapping, correctly store window_rect instead of rect --- diff --git a/src/x.c b/src/x.c index 192e7b89..88463b1a 100644 --- 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);