Skip to content

gdk: do not deactivate surface on keyboard grab

When pressing e.g. a window manager shortcut, which acquires keyboard grab, Xorg would send FocusOut NotifyGrab then FocusIn NotifyUngrab. Currently gdk would then deactivate the current surface, which makes accessibility screen readers think that we have switched to a non-accessible application and came back again, and thus reannounce the application frame etc. which we don't want when e.g. just raising volume.

And actually, receiving FocusOut NotifyGrab does not mean losing the X focus, it only means an application aqcuired a grab, i.e. it is temporarily stealing keyboard events. On Wayland, this isn't even notified actually.

This commit makes gdk only deactivate surfaces when there was an actual focus switch to another window, as determined by has_focus_window (instead of just has_focus), which happens either normally through FocusOut with NotifyNormal, or during grabs through FocusOut with NotifyWhileGrabbed.

Fixes #85

Edited by Samuel Thibault

Merge request reports