OpenJDK / jdk / jdk
changeset 57785:abd50a05d1d1
8230926: [macosx] Two apostrophes are entered instead of one with "U.S. International - PC" layout
Reviewed-by: serb, dmarkov
author | alitvinov |
---|---|
date | Mon, 13 Jan 2020 18:11:28 +0000 |
parents | 0d6c682b5648 |
children | b681239b7258 |
files | src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java |
diffstat | 2 files changed, 22 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Mon Jan 13 18:27:31 2020 +0530 +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Mon Jan 13 18:11:28 2020 +0000 @@ -184,8 +184,11 @@ // It is necessary to use testCharIgnoringModifiers instead of testChar for event // generation in such case to avoid uppercase letters in text components. LWCToolkit lwcToolkit = (LWCToolkit)Toolkit.getDefaultToolkit(); - if (lwcToolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK) && - Locale.SIMPLIFIED_CHINESE.equals(lwcToolkit.getDefaultKeyboardLocale())) { + if ((lwcToolkit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK) && + Locale.SIMPLIFIED_CHINESE.equals(lwcToolkit.getDefaultKeyboardLocale())) || + (LWCToolkit.isLocaleUSInternationalPC(lwcToolkit.getDefaultKeyboardLocale()) && + LWCToolkit.isCharModifierKeyInUSInternationalPC(testChar) && + (testChar != testCharIgnoringModifiers))) { testChar = testCharIgnoringModifiers; }
--- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Mon Jan 13 18:27:31 2020 +0530 +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Mon Jan 13 18:11:28 2020 +0000 @@ -802,6 +802,23 @@ return locale; } + public static boolean isLocaleUSInternationalPC(Locale locale) { + return (locale != null ? + locale.toString().equals("_US_UserDefined_15000") : false); + } + + public static boolean isCharModifierKeyInUSInternationalPC(char ch) { + // 5 characters: APOSTROPHE, QUOTATION MARK, ACCENT GRAVE, SMALL TILDE, + // CIRCUMFLEX ACCENT + final char[] modifierKeys = {'\'', '"', '`', '\u02DC', '\u02C6'}; + for (char modKey : modifierKeys) { + if (modKey == ch) { + return true; + } + } + return false; + } + @Override public InputMethodDescriptor getInputMethodAdapterDescriptor() { if (sInputMethodDescriptor == null)