diff options
author | Sven Gothel <[email protected]> | 2013-04-08 03:34:51 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-04-08 03:34:51 +0200 |
commit | 3052de236eb08a27286f20d52671bb40dbdd8875 (patch) | |
tree | c189e9bbebca14c234031a5f4084f104e86c85af /src/newt/native/X11Display.c | |
parent | 64fd6eef879f7453b491a9df421faf2d47da9d7f (diff) |
Bug 641 NEWT/X11: Deliver 'J_VK_WINDOWS'; keySym is layout independent for dead-keys (zero keyChar); For 'unshifted' keySym's also unmask Ctrl and Mod* states
Diffstat (limited to 'src/newt/native/X11Display.c')
-rw-r--r-- | src/newt/native/X11Display.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/newt/native/X11Display.c b/src/newt/native/X11Display.c index a2df0d2e2..903188467 100644 --- a/src/newt/native/X11Display.c +++ b/src/newt/native/X11Display.c @@ -96,6 +96,9 @@ static short X11KeySym2NewtVKey(KeySym keySym) { return J_VK_ALT; case XK_Alt_R: return J_VK_ALT_GRAPH; + case XK_Super_L: + case XK_Super_R: + return J_VK_WINDOWS; case XK_Pause: return J_VK_PAUSE; case XK_Caps_Lock: @@ -163,6 +166,8 @@ static short X11KeySym2NewtVKey(KeySym keySym) { return keySym; } +#define ShiftCtrlModMask ( ShiftMask | ControlMask | Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask ) + static jboolean altGraphDown = JNI_FALSE; static jint X11InputState2NewtModifiers(unsigned int xstate, jshort javaVKey, jboolean keyDown) { @@ -443,9 +448,17 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_x11_DisplayDriver_DispatchMessage keyString = (*env)->NewStringUTF(env, text); } - evt.xkey.state = evt.xkey.state & ~ShiftMask; // clear shift - XLookupString(&evt.xkey, text, 0, &unShiftedKeySym, NULL); - // unShiftedKeySym = XLookupKeysym(&evt.xkey, 0 /* index ? */); + if( 0 == keyChar ) { + // Use keyCode's keySym for dead-key (aka modifiers, etc) + unShiftedKeySym = keySym; + } else if( 0 == ( evt.xkey.state & ShiftCtrlModMask ) ) { + // Use non modded keySym + unShiftedKeySym = shiftedKeySym; + } else { + evt.xkey.state = evt.xkey.state & ~ShiftCtrlModMask; // clear shift, ctrl and Mod* + XLookupString(&evt.xkey, text, 0, &unShiftedKeySym, NULL); + // unShiftedKeySym = XLookupKeysym(&evt.xkey, 0 /* index ? */); + } javaVKeyNN = X11KeySym2NewtVKey(unShiftedKeySym); javaVKeyUS = X11KeySym2NewtVKey(keySym); |