keybindings: Avoid double calls to process_event() on the same event
If you first press a key that triggers the "special modifier key" paths (ctrl, super), and then press another key that doesn't match (yet?) any keybindings (eg. ctrl+alt, super+x), the second key press goes twice through process_event(), once in the processing of this so far special combination and another while we let the event through. In order to keep things consistent, handle it differently depending on whether we are a wayland compositor or not. For X11, consider the event handled after the call to process_event() in process_special_modifier_key(). For Wayland, as XIAllowEvents is not the mechanism that allows clients see the key event, we can just fall through the regular paths, without this special handling. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1014
This commit is contained in:
parent
6989fea767
commit
67dd0b4fec
@ -2037,6 +2037,13 @@ process_special_modifier_key (MetaDisplay *display,
|
|||||||
{
|
{
|
||||||
*modifier_press_only = FALSE;
|
*modifier_press_only = FALSE;
|
||||||
|
|
||||||
|
/* If this is a wayland session, we can avoid the shenanigans
|
||||||
|
* about passive grabs below, and let the event continue to
|
||||||
|
* be processed through the regular paths.
|
||||||
|
*/
|
||||||
|
if (!xdisplay)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* OK, the user hit modifier+key rather than pressing and
|
/* OK, the user hit modifier+key rather than pressing and
|
||||||
* releasing the modifier key alone. We want to handle the key
|
* releasing the modifier key alone. We want to handle the key
|
||||||
* sequence "normally". Unfortunately, using
|
* sequence "normally". Unfortunately, using
|
||||||
@ -2069,8 +2076,6 @@ process_special_modifier_key (MetaDisplay *display,
|
|||||||
XIAllowEvents (xdisplay,
|
XIAllowEvents (xdisplay,
|
||||||
clutter_input_device_get_device_id (event->device),
|
clutter_input_device_get_device_id (event->device),
|
||||||
XIReplayDevice, event->time);
|
XIReplayDevice, event->time);
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (event->type == CLUTTER_KEY_RELEASE)
|
else if (event->type == CLUTTER_KEY_RELEASE)
|
||||||
|
Loading…
Reference in New Issue
Block a user