From ebf1ba229c22f8a8def5aa5076f7936bac89a67c Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Fri, 19 Sep 2003 00:25:07 +0000 Subject: [PATCH] Handle dead keysyms present on the US-International keyboard. For clarity, 2003-09-19 Tor Lillqvist * 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) --- ChangeLog | 9 ++++++ ChangeLog.pre-2-10 | 9 ++++++ ChangeLog.pre-2-4 | 9 ++++++ ChangeLog.pre-2-6 | 9 ++++++ ChangeLog.pre-2-8 | 9 ++++++ gdk/win32/gdkkeys-win32.c | 63 +++++++++++++++++++++++---------------- 6 files changed, 82 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 02125a2b54..533452641a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2003-09-19 Tor Lillqvist + + * 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) + 2003-09-14 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (show_window_internal): Remove diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 02125a2b54..533452641a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2003-09-19 Tor Lillqvist + + * 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) + 2003-09-14 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (show_window_internal): Remove diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 02125a2b54..533452641a 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,12 @@ +2003-09-19 Tor Lillqvist + + * 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) + 2003-09-14 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (show_window_internal): Remove diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 02125a2b54..533452641a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +2003-09-19 Tor Lillqvist + + * 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) + 2003-09-14 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (show_window_internal): Remove diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 02125a2b54..533452641a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +2003-09-19 Tor Lillqvist + + * 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) + 2003-09-14 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (show_window_internal): Remove 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: - *ksymp = GDK_dead_acute; break; - case GDK_asciicircum: - *ksymp = GDK_dead_circumflex; break; - case GDK_asciitilde: - *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 '"': /* 0x022 */ *ksymp = GDK_dead_diaeresis; break; - case GDK_doubleacute: - *ksymp = GDK_dead_doubleacute; break; - case GDK_caron: - *ksymp = GDK_dead_caron; break; - case GDK_cedilla: - *ksymp = GDK_dead_cedilla; break; - case GDK_ogonek: - *ksymp = GDK_dead_ogonek; break; - case GDK_degree: + case '\'': /* 0x027 */ + *ksymp = GDK_dead_acute; break; + case GDK_asciicircum: /* 0x05e */ + *ksymp = GDK_dead_circumflex; break; + case GDK_grave: /* 0x060 */ + *ksymp = GDK_dead_grave; break; + case GDK_asciitilde: /* 0x07e */ + *ksymp = GDK_dead_tilde; break; + case GDK_diaeresis: /* 0x0a8 */ + *ksymp = GDK_dead_diaeresis; break; + case GDK_degree: /* 0x0b0 */ *ksymp = GDK_dead_abovering; break; - case GDK_periodcentered: + case GDK_acute: /* 0x0b4 */ + *ksymp = GDK_dead_acute; break; + case GDK_periodcentered: /* 0x0b7 */ *ksymp = GDK_dead_abovedot; break; - case GDK_Greek_accentdieresis: + case GDK_cedilla: /* 0x0b8 */ + *ksymp = GDK_dead_cedilla; break; + case GDK_breve: /* 0x1a2 */ + *ksymp = GDK_dead_breve; break; + case GDK_ogonek: /* 0x1b2 */ + *ksymp = GDK_dead_ogonek; break; + 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: /* 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;