Bugfix: Fix fullscreen for floating clients, fix window name updates for floating clients
This commit is contained in:
parent
5b8e2ecb18
commit
ac5c2fcf19
|
@ -635,7 +635,7 @@ int handle_windowname_change(void *data, xcb_connection_t *conn, uint8_t state,
|
||||||
if (client->dock)
|
if (client->dock)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (client->container->mode == MODE_STACK)
|
if (client->container != NULL && client->container->mode == MODE_STACK)
|
||||||
render_container(conn, client->container);
|
render_container(conn, client->container);
|
||||||
else decorate_window(conn, client, client->frame, client->titlegc, 0);
|
else decorate_window(conn, client, client->frame, client->titlegc, 0);
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
|
@ -703,7 +703,7 @@ int handle_windowname_change_legacy(void *data, xcb_connection_t *conn, uint8_t
|
||||||
if (client->dock)
|
if (client->dock)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (client->container->mode == MODE_STACK)
|
if (client->container != NULL && client->container->mode == MODE_STACK)
|
||||||
render_container(conn, client->container);
|
render_container(conn, client->container);
|
||||||
else decorate_window(conn, client, client->frame, client->titlegc, 0);
|
else decorate_window(conn, client, client->frame, client->titlegc, 0);
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
|
|
33
src/util.c
33
src/util.c
|
@ -447,10 +447,10 @@ void switch_layout_mode(xcb_connection_t *conn, Container *container, int mode)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void toggle_fullscreen(xcb_connection_t *conn, Client *client) {
|
void toggle_fullscreen(xcb_connection_t *conn, Client *client) {
|
||||||
/* clients without a container (docks) cannot be focused */
|
/* dock clients cannot enter fullscreen mode */
|
||||||
assert(client->container != NULL);
|
assert(!client->dock);
|
||||||
|
|
||||||
Workspace *workspace = client->container->workspace;
|
Workspace *workspace = client->workspace;
|
||||||
|
|
||||||
if (!client->fullscreen) {
|
if (!client->fullscreen) {
|
||||||
if (workspace->fullscreen_client != NULL) {
|
if (workspace->fullscreen_client != NULL) {
|
||||||
|
@ -461,10 +461,10 @@ void toggle_fullscreen(xcb_connection_t *conn, Client *client) {
|
||||||
workspace->fullscreen_client = client;
|
workspace->fullscreen_client = client;
|
||||||
LOG("Entering fullscreen mode...\n");
|
LOG("Entering fullscreen mode...\n");
|
||||||
/* We just entered fullscreen mode, let’s configure the window */
|
/* We just entered fullscreen mode, let’s configure the window */
|
||||||
uint32_t mask = XCB_CONFIG_WINDOW_X |
|
uint32_t mask = XCB_CONFIG_WINDOW_X |
|
||||||
XCB_CONFIG_WINDOW_Y |
|
XCB_CONFIG_WINDOW_Y |
|
||||||
XCB_CONFIG_WINDOW_WIDTH |
|
XCB_CONFIG_WINDOW_WIDTH |
|
||||||
XCB_CONFIG_WINDOW_HEIGHT;
|
XCB_CONFIG_WINDOW_HEIGHT;
|
||||||
uint32_t values[4] = {workspace->rect.x,
|
uint32_t values[4] = {workspace->rect.x,
|
||||||
workspace->rect.y,
|
workspace->rect.y,
|
||||||
workspace->rect.width,
|
workspace->rect.width,
|
||||||
|
@ -491,11 +491,20 @@ void toggle_fullscreen(xcb_connection_t *conn, Client *client) {
|
||||||
LOG("leaving fullscreen mode\n");
|
LOG("leaving fullscreen mode\n");
|
||||||
client->fullscreen = false;
|
client->fullscreen = false;
|
||||||
workspace->fullscreen_client = NULL;
|
workspace->fullscreen_client = NULL;
|
||||||
/* Because the coordinates of the window haven’t changed, it would not be
|
if (client->floating) {
|
||||||
re-configured if we don’t set the following flag */
|
/* For floating clients it’s enough if we just reconfigure that window (in fact,
|
||||||
client->force_reconfigure = true;
|
* re-rendering the layout will not update the client.) */
|
||||||
/* We left fullscreen mode, redraw the whole layout to ensure enternotify events are disabled */
|
reposition_client(conn, client);
|
||||||
render_layout(conn);
|
resize_client(conn, client);
|
||||||
|
/* redecorate_window flushes */
|
||||||
|
redecorate_window(conn, client);
|
||||||
|
} else {
|
||||||
|
/* Because the coordinates of the window haven’t changed, it would not be
|
||||||
|
re-configured if we don’t set the following flag */
|
||||||
|
client->force_reconfigure = true;
|
||||||
|
/* We left fullscreen mode, redraw the whole layout to ensure enternotify events are disabled */
|
||||||
|
render_layout(conn);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xcb_flush(conn);
|
xcb_flush(conn);
|
||||||
|
|
Loading…
Reference in New Issue