Bugfix: when a window is unmapped, correctly pass focus to the next one and cleanup the table
This commit is contained in:
parent
761e8c07e0
commit
90fa720c6f
@ -39,3 +39,5 @@ bind Mod1+16 7
|
|||||||
bind Mod1+17 8
|
bind Mod1+17 8
|
||||||
bind Mod1+18 9
|
bind Mod1+18 9
|
||||||
bind Mod1+19 0
|
bind Mod1+19 0
|
||||||
|
|
||||||
|
bind Mod1+36 exec /usr/pkg/bin/urxvt
|
||||||
|
@ -329,9 +329,13 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *c, xcb_unmap_notify_
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (client->container != NULL) {
|
if (client->container != NULL) {
|
||||||
|
Client *to_focus = CIRCLEQ_NEXT_OR_NULL(&(client->container->clients), client, clients);
|
||||||
|
if (to_focus == NULL)
|
||||||
|
to_focus = CIRCLEQ_PREV_OR_NULL(&(client->container->clients), client, clients);
|
||||||
if (client->container->currently_focused == client)
|
if (client->container->currently_focused == client)
|
||||||
client->container->currently_focused = NULL;
|
client->container->currently_focused = to_focus;
|
||||||
CIRCLEQ_REMOVE(&(client->container->clients), client, clients);
|
CIRCLEQ_REMOVE(&(client->container->clients), client, clients);
|
||||||
|
set_focus(c, to_focus);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("child of 0x%08x.\n", client->frame);
|
printf("child of 0x%08x.\n", client->frame);
|
||||||
@ -339,6 +343,9 @@ int handle_unmap_notify_event(void *data, xcb_connection_t *c, xcb_unmap_notify_
|
|||||||
xcb_destroy_window(c, client->frame);
|
xcb_destroy_window(c, client->frame);
|
||||||
xcb_flush(c);
|
xcb_flush(c);
|
||||||
table_remove(byParent, client->frame);
|
table_remove(byParent, client->frame);
|
||||||
|
|
||||||
|
cleanup_table(client->container->workspace);
|
||||||
|
|
||||||
free(client);
|
free(client);
|
||||||
|
|
||||||
render_layout(c);
|
render_layout(c);
|
||||||
|
Loading…
Reference in New Issue
Block a user