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.
This commit is contained in:
parent
ffe925f733
commit
4afe65eea2
19
src/client.c
19
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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue