keybinding: Check for handler functions as well
With the addition of the locate-pointer special keybinding (defaults to the [Control] key), we have now two separate special modifier keys which can be triggered separately, one for the locate-pointer action and another one for overlay. When processing those special modifier keys, mutter must ensure that the key was pressed alone, being a modifier, the key could otherwise be part of another key combo. As result, if both special modifiers keys are pressed simultaneously, mutter will try to trigger the function for the second key being pressed, and since those special modifier keys have no default handler function set, that will crash mutter. Check if the handler has a function associated and treat the keybinding as not found if no handler function is set, as with the special modifier keys. https://gitlab.gnome.org/GNOME/mutter/issues/823
This commit is contained in:
parent
0706e021f5
commit
76f2579e44
@ -1933,6 +1933,12 @@ invoke_handler (MetaDisplay *display,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
meta_key_binding_has_handler_func (MetaKeyBinding *binding)
|
||||
{
|
||||
return (!!binding->handler->func || !!binding->handler->default_func);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
process_event (MetaDisplay *display,
|
||||
MetaWindow *window,
|
||||
@ -1958,6 +1964,9 @@ process_event (MetaDisplay *display,
|
||||
if (binding->handler == NULL)
|
||||
meta_bug ("Binding %s has no handler\n", binding->name);
|
||||
|
||||
if (!meta_key_binding_has_handler_func (binding))
|
||||
goto not_found;
|
||||
|
||||
if (display->focus_window &&
|
||||
!(binding->handler->flags & META_KEY_BINDING_NON_MASKABLE))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user