summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2003-09-19 00:30:35 +0000
committerTor Lillqvist <tml@src.gnome.org>2003-09-19 00:30:35 +0000
commitc1aa7651b45cac5f0a8e6fbc04e87f1d52b92954 (patch)
treec681346cadada9bb6b8d13b0faa2a042a89fe5a6 /gdk
parent96994c9ea2f0b6ac494a06e04855b284cbff3452 (diff)
downloadgtk+-c1aa7651b45cac5f0a8e6fbc04e87f1d52b92954.tar.gz
Handle dead keysyms present on the US-International keyboard. For clarity,
2003-09-19 Tor Lillqvist <tml@iki.fi> * gdk/win32/gdkkeys-win32.c (update_keymap): Handle dead keysyms present on the US-International keyboard. For clarity, order keysyms in case statement according to numeric value. (gdk_keymap_translate_keyboard_state): Handle Caps Lock correctly. (#120176, Ken Rastatter and Owen Taylor)
Diffstat (limited to 'gdk')
-rw-r--r--gdk/win32/gdkkeys-win32.c55
1 files changed, 33 insertions, 22 deletions
diff --git a/gdk/win32/gdkkeys-win32.c b/gdk/win32/gdkkeys-win32.c
index 0a5e4332d7..5bf0c3b890 100644
--- a/gdk/win32/gdkkeys-win32.c
+++ b/gdk/win32/gdkkeys-win32.c
@@ -314,33 +314,37 @@ update_keymap (void)
/* Use dead keysyms instead of "undead" ones */
switch (gdk_unicode_to_keyval (wcs[0]))
{
- case GDK_grave:
- *ksymp = GDK_dead_grave; break;
- case GDK_acute:
+ case '"': /* 0x022 */
+ *ksymp = GDK_dead_diaeresis; break;
+ case '\'': /* 0x027 */
*ksymp = GDK_dead_acute; break;
- case GDK_asciicircum:
+ case GDK_asciicircum: /* 0x05e */
*ksymp = GDK_dead_circumflex; break;
- case GDK_asciitilde:
+ case GDK_grave: /* 0x060 */
+ *ksymp = GDK_dead_grave; break;
+ case GDK_asciitilde: /* 0x07e */
*ksymp = GDK_dead_tilde; break;
- case GDK_breve:
- *ksymp = GDK_dead_breve; break;
- case GDK_abovedot:
- *ksymp = GDK_dead_abovedot; break;
- case GDK_diaeresis:
+ case GDK_diaeresis: /* 0x0a8 */
*ksymp = GDK_dead_diaeresis; break;
- case GDK_doubleacute:
- *ksymp = GDK_dead_doubleacute; break;
- case GDK_caron:
- *ksymp = GDK_dead_caron; break;
- case GDK_cedilla:
+ case GDK_degree: /* 0x0b0 */
+ *ksymp = GDK_dead_abovering; break;
+ case GDK_acute: /* 0x0b4 */
+ *ksymp = GDK_dead_acute; break;
+ case GDK_periodcentered: /* 0x0b7 */
+ *ksymp = GDK_dead_abovedot; break;
+ case GDK_cedilla: /* 0x0b8 */
*ksymp = GDK_dead_cedilla; break;
- case GDK_ogonek:
+ case GDK_breve: /* 0x1a2 */
+ *ksymp = GDK_dead_breve; break;
+ case GDK_ogonek: /* 0x1b2 */
*ksymp = GDK_dead_ogonek; break;
- case GDK_degree:
- *ksymp = GDK_dead_abovering; break;
- case GDK_periodcentered:
+ case GDK_caron: /* 0x1b7 */
+ *ksymp = GDK_dead_caron; break;
+ case GDK_doubleacute: /* 0x1bd */
+ *ksymp = GDK_dead_doubleacute; break;
+ case GDK_abovedot: /* 0x1ff */
*ksymp = GDK_dead_abovedot; break;
- case GDK_Greek_accentdieresis:
+ case GDK_Greek_accentdieresis: /* 0x7ae */
*ksymp = GDK_Greek_accentdieresis; break;
default:
GDK_NOTE (EVENTS,
@@ -661,8 +665,8 @@ gdk_keymap_translate_keyboard_state (GdkKeymap *keymap,
return FALSE;
if ((state & GDK_SHIFT_MASK) && (state & GDK_LOCK_MASK))
- shift_level = 0; /* shift disables shift lock */
- else if ((state & GDK_SHIFT_MASK) || (state & GDK_LOCK_MASK))
+ shift_level = 0; /* shift disables caps lock */
+ else if (state & GDK_SHIFT_MASK)
shift_level = 1;
else
shift_level = 0;
@@ -718,6 +722,13 @@ gdk_keymap_translate_keyboard_state (GdkKeymap *keymap,
if (effective_group)
*effective_group = group;
+ if (!(state & GDK_SHIFT_MASK) && (state & GDK_LOCK_MASK))
+ {
+ guint upper = gdk_keyval_to_upper (tmp_keyval);
+ if (upper != tmp_keyval)
+ tmp_keyval = upper;
+ }
+
if (level)
*level = shift_level;