diff options
author | Tor Lillqvist <tml@iki.fi> | 2003-09-19 00:30:35 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2003-09-19 00:30:35 +0000 |
commit | c1aa7651b45cac5f0a8e6fbc04e87f1d52b92954 (patch) | |
tree | c681346cadada9bb6b8d13b0faa2a042a89fe5a6 /gdk | |
parent | 96994c9ea2f0b6ac494a06e04855b284cbff3452 (diff) | |
download | gtk+-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.c | 55 |
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; |