summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2005-11-10 17:38:34 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2005-11-10 17:38:34 +0000
commit96469e5c589ef5837043fab97d2dc14ab497cbd3 (patch)
treec308e2797cfba42591b251b3366f748d5a06c57e /gdk
parenta60f34aa649278643197866d3528fce88c431be8 (diff)
downloadgdk-pixbuf-96469e5c589ef5837043fab97d2dc14ab497cbd3.tar.gz
Don't corrupt odd keymaps (#316638, Kean Johnston)
2005-11-10 Matthias Clasen <mclasen@redhat.com> Don't corrupt odd keymaps (#316638, Kean Johnston) * gdk/x11/gdkkeys-x11.c (set_symbol): Auxiliary function to handle frobbing keymaps with odd numbers of syms/code. * gdk/x11/gdkkeys-x11.c (update_keymaps): Use set_symbol() to frob the keymap.
Diffstat (limited to 'gdk')
-rw-r--r--gdk/x11/gdkkeys-x11.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/gdk/x11/gdkkeys-x11.c b/gdk/x11/gdkkeys-x11.c
index 42e5b4a64..417563aca 100644
--- a/gdk/x11/gdkkeys-x11.c
+++ b/gdk/x11/gdkkeys-x11.c
@@ -244,13 +244,29 @@ get_symbol (const KeySym *syms,
gint index;
index = KEYSYM_INDEX(keymap_x11, group, level);
- if (index > keymap_x11->keysyms_per_keycode)
+ if (index >= keymap_x11->keysyms_per_keycode)
return NoSymbol;
return syms[index];
}
static void
+set_symbol (KeySym *syms,
+ GdkKeymapX11 *keymap_x11,
+ gint group,
+ gint level,
+ KeySym sym)
+{
+ gint index;
+
+ index = KEYSYM_INDEX(keymap_x11, group, level);
+ if (index >= keymap_x11->keysyms_per_keycode)
+ return;
+
+ syms[index] = sym;
+}
+
+static void
update_keymaps (GdkKeymapX11 *keymap_x11)
{
GdkDisplayX11 *display_x11 = GDK_DISPLAY_X11 (GDK_KEYMAP (keymap_x11)->display);
@@ -295,7 +311,7 @@ update_keymaps (GdkKeymapX11 *keymap_x11)
for (i = 0 ; i < 2 ; i++)
{
if (get_symbol (syms, keymap_x11, i, 0) == GDK_Tab)
- syms[KEYSYM_INDEX (keymap_x11, i, 1)] = GDK_ISO_Left_Tab;
+ set_symbol (syms, keymap_x11, i, 1, GDK_ISO_Left_Tab);
}
/*
@@ -310,8 +326,8 @@ update_keymaps (GdkKeymapX11 *keymap_x11)
gdk_keyval_convert_case (get_symbol (syms, keymap_x11, 0, 0), &lower, &upper);
if (lower != upper)
{
- syms[KEYSYM_INDEX (keymap_x11, 0, 0)] = lower;
- syms[KEYSYM_INDEX (keymap_x11, 0, 1)] = upper;
+ set_symbol (syms, keymap_x11, 0, 0, lower);
+ set_symbol (syms, keymap_x11, 0, 1, upper);
}
}
@@ -1103,7 +1119,7 @@ MyEnhancedXkbTranslateKeyCode(register XkbDescPtr xkb,
/* ---- End stuff GDK adds to the original Xlib version ---- */
- return (syms[col]!=NoSymbol);
+ return (syms[col] != NoSymbol);
}
#endif /* HAVE_XKB */