From dc61c7e7697f7e67e4f0a706f40487754edf42ec Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Mon, 7 Oct 2002 16:05:56 +0000 Subject: [PATCH] If Mode_switch is used for a known modifier like Mod1, assume it won't be Mon Oct 7 11:45:17 2002 Owen Taylor * gdk/x11/gdkkeys-x11.c (update_keymaps): If Mode_switch is used for a known modifier like Mod1, assume it won't be used to switch group. (#94841, problem reported by Szekeres Istvan) --- ChangeLog | 7 +++++++ ChangeLog.pre-2-10 | 7 +++++++ ChangeLog.pre-2-2 | 7 +++++++ ChangeLog.pre-2-4 | 7 +++++++ ChangeLog.pre-2-6 | 7 +++++++ ChangeLog.pre-2-8 | 7 +++++++ gdk/x11/gdkkeys-x11.c | 17 ++++++++++++++++- 7 files changed, 58 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 94f5875138..ac86dcee3c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Oct 7 11:45:17 2002 Owen Taylor + + * gdk/x11/gdkkeys-x11.c (update_keymaps): If Mode_switch + is used for a known modifier like Mod1, assume it won't + be used to switch group. (#94841, problem reported by + Szekeres Istvan) + Fri Oct 4 14:49:04 2002 Owen Taylor Patch from Shivram U diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 94f5875138..ac86dcee3c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Mon Oct 7 11:45:17 2002 Owen Taylor + + * gdk/x11/gdkkeys-x11.c (update_keymaps): If Mode_switch + is used for a known modifier like Mod1, assume it won't + be used to switch group. (#94841, problem reported by + Szekeres Istvan) + Fri Oct 4 14:49:04 2002 Owen Taylor Patch from Shivram U diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 94f5875138..ac86dcee3c 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Mon Oct 7 11:45:17 2002 Owen Taylor + + * gdk/x11/gdkkeys-x11.c (update_keymaps): If Mode_switch + is used for a known modifier like Mod1, assume it won't + be used to switch group. (#94841, problem reported by + Szekeres Istvan) + Fri Oct 4 14:49:04 2002 Owen Taylor Patch from Shivram U diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 94f5875138..ac86dcee3c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Mon Oct 7 11:45:17 2002 Owen Taylor + + * gdk/x11/gdkkeys-x11.c (update_keymaps): If Mode_switch + is used for a known modifier like Mod1, assume it won't + be used to switch group. (#94841, problem reported by + Szekeres Istvan) + Fri Oct 4 14:49:04 2002 Owen Taylor Patch from Shivram U diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 94f5875138..ac86dcee3c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Mon Oct 7 11:45:17 2002 Owen Taylor + + * gdk/x11/gdkkeys-x11.c (update_keymaps): If Mode_switch + is used for a known modifier like Mod1, assume it won't + be used to switch group. (#94841, problem reported by + Szekeres Istvan) + Fri Oct 4 14:49:04 2002 Owen Taylor Patch from Shivram U diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 94f5875138..ac86dcee3c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Mon Oct 7 11:45:17 2002 Owen Taylor + + * gdk/x11/gdkkeys-x11.c (update_keymaps): If Mode_switch + is used for a known modifier like Mod1, assume it won't + be used to switch group. (#94841, problem reported by + Szekeres Istvan) + Fri Oct 4 14:49:04 2002 Owen Taylor Patch from Shivram U diff --git a/gdk/x11/gdkkeys-x11.c b/gdk/x11/gdkkeys-x11.c index ffb624423a..af5bdf53e4 100644 --- a/gdk/x11/gdkkeys-x11.c +++ b/gdk/x11/gdkkeys-x11.c @@ -218,6 +218,21 @@ update_keymaps (void) { gint j = 0; KeySym *syms = keymap + (keycode - min_keycode) * keysyms_per_keycode; + + /* GDK_MOD1_MASK is 1 << 3 for example, i.e. the + * fourth modifier, i / keyspermod is the modifier + * index + */ + guint mask = 1 << ( i / keymap_x11->mod_keymap->max_keypermod); + + /* Some keyboard maps are known to map Mode_Switch as an extra + * Mod1 key. In circumstances like that, it won't be used to + * switch groups. + */ + if (mask == GDK_CONTROL_MASK || mask == GDK_SHIFT_MASK || + mask == GDK_LOCK_MASK || mask == GDK_MOD1_MASK) + continue; + while (j < keysyms_per_keycode) { if (syms[j] == GDK_Mode_switch) @@ -229,7 +244,7 @@ update_keymaps (void) * index */ - group_switch_mask |= (1 << ( i / mod_keymap->max_keypermod)); + group_switch_mask |= mask; break; }