From 4e01039ec998d86f8f7a46d998c8d87c577e2259 Mon Sep 17 00:00:00 2001 From: Yuri Nesterenko Date: Tue, 5 Aug 2008 15:26:08 +0400 Subject: [PATCH] 6454041: decimal separator munches the character standing at the right (sk keyboard) In a group of keysyms associated with a key, check for keypad-ness of more keysyms Reviewed-by: art --- jdk/src/solaris/classes/sun/awt/X11/XKeysym.java | 9 +++++++-- jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java b/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java index 77e7ba98e22..4dae66c0183 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java +++ b/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java @@ -101,10 +101,15 @@ public class XKeysym { // Otherwise, it is [1]. int ndx = XToolkit.isXsunServer() && ! XToolkit.isXKBenabled() ? 2 : 1; + // Even if XKB is enabled, we have another problem: some symbol tables (e.g. cz) force + // a regular comma instead of KP_comma for a decimal separator. Result is, + // bugs like 6454041. So, we will try for keypadness a keysym with ndx==0 as well. XToolkit.awtLock(); try { - return XlibWrapper.IsKeypadKey( - XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx ) ); + return (XlibWrapper.IsKeypadKey( + XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx ) ) || + XlibWrapper.IsKeypadKey( + XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), 0 ) )); } finally { XToolkit.awtUnlock(); } diff --git a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h index c7a4b0d72c7..c5750d8d101 100644 --- a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h +++ b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h @@ -139,10 +139,15 @@ tojava // Xsun without XKB uses keysymarray[2] keysym to determine if it tojava // Otherwise, it is [1]. tojava int ndx = XToolkit.isXsunServer() && tojava ! XToolkit.isXKBenabled() ? 2 : 1; +tojava // Even if XKB is enabled, we have another problem: some symbol tables (e.g. cz) force +tojava // a regular comma instead of KP_comma for a decimal separator. Result is, +tojava // bugs like 6454041. So, we will try for keypadness a keysym with ndx==0 as well. tojava XToolkit.awtLock(); tojava try { -tojava return XlibWrapper.IsKeypadKey( -tojava XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx ) ); +tojava return (XlibWrapper.IsKeypadKey( +tojava XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx ) ) || +tojava XlibWrapper.IsKeypadKey( +tojava XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), 0 ) )); tojava } finally { tojava XToolkit.awtUnlock(); tojava }