gboolean hide = FALSE;
if (!client_should_show(self)) {
+ if (self == focus_client) {
+ /* if there is a grab going on, then we need to cancel it. if we
+ move focus during the grab, applications will get
+ NotifyWhileGrabbed events and ignore them !
+
+ actions should not rely on being able to move focus during an
+ interactive grab.
+ */
+ if (keyboard_interactively_grabbed())
+ keyboard_interactive_cancel();
+ }
+
frame_hide(self->frame);
hide = TRUE;
}
"Focusing client \"%s\" at time %u\n",
self->title, event_curtime);
- /* if we move focus during a grab, applications will get
- NotifyWhileGrabbed events and ignore them !
+ /* if there is a grab going on, then we need to cancel it. if we move
+ focus during the grab, applications will get NotifyWhileGrabbed events
+ and ignore them !
- interactive actions should not do anything that can move focus until
- their finishing.
+ actions should not rely on being able to move focus during an
+ interactive grab.
*/
- g_assert(keyboard_interactively_grabbed());
+ if (keyboard_interactively_grabbed())
+ keyboard_interactive_cancel();
error = FALSE;
xerror_set_ignore(TRUE);