Unify keymap-reloading code branches
Simplify the keymap loading logic by unifying the different branches; in the reorganization this patch fixes a bug where when we got a MappingKeyboard event we wouldn't update virtual modifiers correctly. Based on a patch by Thomas Thurman <tthurman@gnome.org> https://bugzilla.gnome.org/show_bug.cgi?id=565540
This commit is contained in:
parent
cb88e0d052
commit
c6be05f9d7
@ -532,19 +532,17 @@ void
|
||||
meta_display_process_mapping_event (MetaDisplay *display,
|
||||
XEvent *event)
|
||||
{
|
||||
gboolean keymap_changed = FALSE;
|
||||
gboolean modmap_changed = FALSE;
|
||||
|
||||
#ifdef HAVE_XKB
|
||||
if (event->type == display->xkb_base_event_type)
|
||||
{
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"XKB mapping changed, will redo keybindings\n");
|
||||
|
||||
reload_keymap (display);
|
||||
reload_modmap (display);
|
||||
|
||||
reload_keycodes (display);
|
||||
reload_modifiers (display);
|
||||
|
||||
regrab_key_bindings (display);
|
||||
keymap_changed = TRUE;
|
||||
modmap_changed = TRUE;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -553,22 +551,33 @@ meta_display_process_mapping_event (MetaDisplay *display,
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Received MappingModifier event, will reload modmap and redo keybindings\n");
|
||||
|
||||
reload_modmap (display);
|
||||
|
||||
reload_modifiers (display);
|
||||
|
||||
regrab_key_bindings (display);
|
||||
modmap_changed = TRUE;
|
||||
}
|
||||
else if (event->xmapping.request == MappingKeyboard)
|
||||
{
|
||||
meta_topic (META_DEBUG_KEYBINDINGS,
|
||||
"Received MappingKeyboard event, will reload keycodes and redo keybindings\n");
|
||||
|
||||
keymap_changed = TRUE;
|
||||
}
|
||||
|
||||
/* Now to do the work itself */
|
||||
|
||||
if (keymap_changed || modmap_changed)
|
||||
{
|
||||
if (keymap_changed)
|
||||
reload_keymap (display);
|
||||
|
||||
/* Deciphering the modmap depends on the loaded keysyms to find out
|
||||
* what modifiers is Super and so forth, so we need to reload it
|
||||
* even when only the keymap changes */
|
||||
reload_modmap (display);
|
||||
|
||||
if (keymap_changed)
|
||||
reload_keycodes (display);
|
||||
|
||||
reload_modifiers (display);
|
||||
|
||||
regrab_key_bindings (display);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user