Release all grabs when unmanaging windows

When a window is unmapped, awesome stops tracking it, possibly
leaving stale grabs behind.  These grabs can be activated if the
window is mapped again without awesome’s knowledge.  This results
in a locked pointer until the grab window is destroyed.

Fix by releasing passive grabs before untracking a client window.
This commit is contained in:
gldrk 2023-09-26 06:19:09 +03:00
parent aa8c7c6e27
commit 16c560a568

View file

@ -3010,6 +3010,8 @@ client_unmanage(client_t *c, client_unmanage_t reason)
if(reason != CLIENT_UNMANAGE_DESTROYED)
{
xwindow_buttons_grab(c->window, &(button_array_t){ .len = 0 });
xwindow_grabkeys(c->window, &(key_array_t){ .len = 0 });
area_t geometry = client_get_undecorated_geometry(c);
xcb_unmap_window(globalconf.connection, c->window);
xcb_reparent_window(globalconf.connection, c->window, globalconf.screen->root,