mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
JBR-2669: set unicode for both keyCode and extendedKeyCode
(cherry picked from commit ba3f14c83a)
This commit is contained in:
committed by
alexey.ushakov@jetbrains.com
parent
3bd74e0999
commit
ad932992f9
@@ -58,6 +58,7 @@ import sun.awt.PeerEvent;
|
||||
import sun.awt.SunToolkit;
|
||||
import sun.awt.X11ComponentPeer;
|
||||
import sun.awt.X11GraphicsConfig;
|
||||
import sun.awt.event.KeyEventProcessing;
|
||||
import sun.awt.event.TouchEvent;
|
||||
import sun.java2d.SunGraphics2D;
|
||||
import sun.java2d.SurfaceData;
|
||||
@@ -1225,6 +1226,12 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
|
||||
return (uni > 0? sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(uni) : 0);
|
||||
//return (uni > 0? uni + 0x01000000 : 0);
|
||||
}
|
||||
|
||||
// java keycodes for unicode values consistent with MacOS and Windows
|
||||
private static int addUnicodeOffset(int uni) {
|
||||
return uni > 0 ? uni + 0x01000000 : 0;
|
||||
}
|
||||
|
||||
void logIncomingKeyEvent(XKeyEvent ev) {
|
||||
if (keyEventLog.isLoggable(PlatformLogger.Level.FINE)) {
|
||||
keyEventLog.fine("--XWindow.java:handleKeyEvent:"+ev);
|
||||
@@ -1313,17 +1320,18 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
|
||||
);
|
||||
}
|
||||
|
||||
int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
|
||||
primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
|
||||
jkc.getJavaKeycode();
|
||||
|
||||
int jkeyToReturn;
|
||||
if (KeyEventProcessing.useNationalLayouts) {
|
||||
// if jkeyToReturn is VK_UNDEFINED then look for keycode in extended key code
|
||||
jkeyToReturn = jkc.getJavaKeycode();
|
||||
jkeyToReturn = getNationalKeyCode(jkc, unicodeFromPrimaryKeysym);
|
||||
jkeyExtended = jkeyToReturn;
|
||||
} else {
|
||||
jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible
|
||||
}
|
||||
|
||||
int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
|
||||
primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
|
||||
jkc.getJavaKeycode();
|
||||
postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED,
|
||||
isDeadKey ? jkeyExtended : jkeyToReturn,
|
||||
(unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey),
|
||||
@@ -1402,16 +1410,18 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
|
||||
// is undefined, we still will have a guess of what was engraved on a keytop.
|
||||
int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0);
|
||||
|
||||
int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
|
||||
primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
|
||||
jkc.getJavaKeycode();
|
||||
|
||||
int jkeyToReturn;
|
||||
if (KeyEventProcessing.useNationalLayouts) {
|
||||
// if jkeyToReturn is VK_UNDEFINED then look for keycode in extended key code
|
||||
jkeyToReturn = jkc.getJavaKeycode();
|
||||
jkeyToReturn = getNationalKeyCode(jkc, unicodeFromPrimaryKeysym);
|
||||
jkeyExtended = jkeyToReturn;
|
||||
} else {
|
||||
jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible
|
||||
}
|
||||
int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
|
||||
primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) :
|
||||
jkc.getJavaKeycode();
|
||||
|
||||
postKeyEvent( java.awt.event.KeyEvent.KEY_RELEASED,
|
||||
isDeadKey ? jkeyExtended : jkeyToReturn,
|
||||
(unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey),
|
||||
@@ -1423,6 +1433,14 @@ class XWindow extends XBaseWindow implements X11ComponentPeer {
|
||||
|
||||
}
|
||||
|
||||
private static int getNationalKeyCode(XKeysym.Keysym2JavaKeycode jkc, int unicodeFromPrimaryKeysym) {
|
||||
// use this key code for both keyCode and extendedKeyCode
|
||||
// compatible with MacOS and Windows
|
||||
return jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ?
|
||||
addUnicodeOffset(unicodeFromPrimaryKeysym) :
|
||||
jkc.getJavaKeycode();
|
||||
}
|
||||
|
||||
|
||||
private boolean isDeadKey(long keysym){
|
||||
return XKeySymConstants.XK_dead_grave <= keysym && keysym <= XKeySymConstants.XK_dead_semivoiced_sound;
|
||||
|
||||
Reference in New Issue
Block a user