[metacity] Unify keymap-reloading code branches
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] Unify keymap-reloading code branches
- Date: Mon, 22 Nov 2010 20:56:06 +0000 (UTC)
commit ba2e5f7f541446931299814bafa642d09047f386
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Sun May 2 11:35:33 2010 -0400
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
src/core/keybindings.c | 39 ++++++++++++++++++++++++---------------
1 files changed, 24 insertions(+), 15 deletions(-)
---
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index f6c276a..1659c02 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -506,19 +506,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
@@ -527,21 +525,32 @@ 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");
- reload_keymap (display);
+ 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);
-
- reload_keycodes (display);
+
+ if (keymap_changed)
+ reload_keycodes (display);
+
+ reload_modifiers (display);
regrab_key_bindings (display);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]