keybindings: Check for a handler before using it

The `process_event()` would check for a existing keybinding handler and
abort if there is none, however the test is done after the handler had
been accessed, hence defeating the purpose of the check.

Move the check to verify there is an existing keybinding handler before
actually using it.

https://gitlab.gnome.org/GNOME/mutter/issues/823
This commit is contained in:
Olivier Fourdan 2019-09-24 16:55:25 +02:00
parent b5775e3d85
commit 0706e021f5

View File

@ -1955,6 +1955,9 @@ process_event (MetaDisplay *display,
(!window && binding->flags & META_KEY_BINDING_PER_WINDOW)) (!window && binding->flags & META_KEY_BINDING_PER_WINDOW))
goto not_found; goto not_found;
if (binding->handler == NULL)
meta_bug ("Binding %s has no handler\n", binding->name);
if (display->focus_window && if (display->focus_window &&
!(binding->handler->flags & META_KEY_BINDING_NON_MASKABLE)) !(binding->handler->flags & META_KEY_BINDING_NON_MASKABLE))
{ {
@ -1980,12 +1983,9 @@ process_event (MetaDisplay *display,
return TRUE; return TRUE;
} }
if (binding->handler == NULL) meta_topic (META_DEBUG_KEYBINDINGS,
meta_bug ("Binding %s has no handler\n", binding->name); "Running handler for %s\n",
else binding->name);
meta_topic (META_DEBUG_KEYBINDINGS,
"Running handler for %s\n",
binding->name);
/* Global keybindings count as a let-the-terminal-lose-focus /* Global keybindings count as a let-the-terminal-lose-focus
* due to new window mapping until the user starts * due to new window mapping until the user starts