src/solaris/classes/sun/awt/X11/XWindow.java

Print this page

        

*** 1113,1123 **** // // Press event might be not processed to this time because // (1) either XIM could not handle it or // (2) it was Latin 1:1 mapping. // ! XKeysym.Keysym2JavaKeycode jkc = XKeysym.getJavaKeycode(ev); if( jkc == null ) { jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN); } // Take the first keysym from a keysym array associated with the XKeyevent --- 1113,1126 ---- // // Press event might be not processed to this time because // (1) either XIM could not handle it or // (2) it was Latin 1:1 mapping. // ! // Preserve modifiers to get Java key code for dead keys ! boolean isDeadKey = isDeadKey(keysym[0]); ! XKeysym.Keysym2JavaKeycode jkc = isDeadKey ? XKeysym.getJavaKeycode(keysym[0]) ! : XKeysym.getJavaKeycode(ev); if( jkc == null ) { jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN); } // Take the first keysym from a keysym array associated with the XKeyevent
*** 1139,1157 **** int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED, ev.get_time(), ! jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), unicodeFromPrimaryKeysym, jkeyExtended); ! if( unicodeKey > 0 ) { keyEventLog.fine("fire _TYPED on "+unicodeKey); postKeyEvent( java.awt.event.KeyEvent.KEY_TYPED, ev.get_time(), java.awt.event.KeyEvent.VK_UNDEFINED, unicodeKey, --- 1142,1160 ---- int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED, ev.get_time(), ! isDeadKey ? jkeyExtended : jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), unicodeFromPrimaryKeysym, jkeyExtended); ! if (unicodeKey > 0 && !isDeadKey) { keyEventLog.fine("fire _TYPED on "+unicodeKey); postKeyEvent( java.awt.event.KeyEvent.KEY_TYPED, ev.get_time(), java.awt.event.KeyEvent.VK_UNDEFINED, unicodeKey,
*** 1174,1195 **** } handleKeyRelease(ev); } // un-private it if you need to call it from elsewhere private void handleKeyRelease(XKeyEvent ev) { - long keysym[] = new long[2]; int unicodeKey = 0; - keysym[0] = XConstants.NoSymbol; if (keyEventLog.isLoggable(PlatformLogger.FINE)) { logIncomingKeyEvent( ev ); } // Keysym should be converted to Unicode, if possible and necessary, // and Java KeyEvent keycode should be calculated. // For release we should post released event. // ! XKeysym.Keysym2JavaKeycode jkc = XKeysym.getJavaKeycode(ev); if( jkc == null ) { jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN); } if (keyEventLog.isLoggable(PlatformLogger.FINE)) { keyEventLog.fine(">>>Fire Event:"+ --- 1177,1200 ---- } handleKeyRelease(ev); } // un-private it if you need to call it from elsewhere private void handleKeyRelease(XKeyEvent ev) { int unicodeKey = 0; if (keyEventLog.isLoggable(PlatformLogger.FINE)) { logIncomingKeyEvent( ev ); } // Keysym should be converted to Unicode, if possible and necessary, // and Java KeyEvent keycode should be calculated. // For release we should post released event. // ! // Preserve modifiers to get Java key code for dead keys ! long keysym = xkeycodeToKeysym(ev); ! boolean isDeadKey = isDeadKey(keysym); ! XKeysym.Keysym2JavaKeycode jkc = isDeadKey ? XKeysym.getJavaKeycode(keysym) ! : XKeysym.getJavaKeycode(ev); if( jkc == null ) { jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN); } if (keyEventLog.isLoggable(PlatformLogger.FINE)) { keyEventLog.fine(">>>Fire Event:"+
*** 1217,1236 **** int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_RELEASED, ev.get_time(), ! jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), unicodeFromPrimaryKeysym, jkeyExtended); } /* * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are * unreliable, since mapping changes can happen for a virtual desktop * switch or MacOS style shading that became quite popular under X as * well. Yes, it probably should not be this way, as it violates --- 1222,1246 ---- int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_RELEASED, ev.get_time(), ! isDeadKey ? jkeyExtended : jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), unicodeFromPrimaryKeysym, jkeyExtended); } + + private boolean isDeadKey(long keysym){ + return XKeySymConstants.XK_dead_grave <= keysym && keysym <= XKeySymConstants.XK_dead_semivoiced_sound; + } + /* * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are * unreliable, since mapping changes can happen for a virtual desktop * switch or MacOS style shading that became quite popular under X as * well. Yes, it probably should not be this way, as it violates