From: Michael Stapelberg Date: Sat, 12 Dec 2009 20:29:07 +0000 (+0100) Subject: Bugfix: Correctly place new windows below fullscreen windows (Thanks Moredread) X-Git-Tag: 3.d-bf1~7 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=01f7250f6a9b8885f3d71411ed75caba9e5bff92;p=i3%2Fi3 Bugfix: Correctly place new windows below fullscreen windows (Thanks Moredread) This bug could happen if you have floating and tiling windows (for example Firefox in tiling mode and its Open dialog in autmatically floating mode) and you opened a new tiling window while in fullscreen. i3 would then place the window below the floating windows, but floating clients are above fullscreen windows. Thus, the client would be placed above the fullscreen window. --- diff --git a/src/client.c b/src/client.c index c0031d71..b686a1ae 100644 --- a/src/client.c +++ b/src/client.c @@ -239,11 +239,20 @@ void client_set_below_floating(xcb_connection_t *conn, Client *client) { /* Ensure that it is below all floating clients */ Workspace *ws = client->workspace; Client *first_floating = TAILQ_FIRST(&(ws->floating_clients)); - if (first_floating != TAILQ_END(&(ws->floating_clients))) { - LOG("Setting below floating\n"); - uint32_t values[] = { first_floating->frame, XCB_STACK_MODE_BELOW }; - xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE, values); - } + if (first_floating == TAILQ_END(&(ws->floating_clients))) + return; + + LOG("Setting below floating\n"); + uint32_t values[] = { first_floating->frame, XCB_STACK_MODE_BELOW }; + xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE, values); + + if (client->workspace->fullscreen_client == NULL) + return; + + LOG("(and below fullscreen)\n"); + /* Ensure that the window is still below the fullscreen window */ + values[0] = client->workspace->fullscreen_client->frame; + xcb_configure_window(conn, client->frame, XCB_CONFIG_WINDOW_SIBLING | XCB_CONFIG_WINDOW_STACK_MODE, values); } /*