From e933aefe5b35b35ce96ec4a016f0323598906032 Mon Sep 17 00:00:00 2001 From: dcherepanov Date: Wed, 18 Apr 2012 09:29:09 +0400 Subject: [PATCH] 7156194: [macosx] Can't type non-ASCII characters into applets Reviewed-by: anthony, art --- .../sun/lwawt/macosx/CEmbeddedFrame.java | 11 ++++++++-- .../sun/lwawt/macosx/CPlatformResponder.java | 21 ++++++++++++++++++- .../sun/lwawt/macosx/CPlatformView.java | 2 +- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java b/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java index 7fd2a0f8f..e173d7372 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java +++ b/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java @@ -88,13 +88,20 @@ public class CEmbeddedFrame extends EmbeddedFrame { responder.handleScrollEvent(x, y, modifierFlags, deltaX, deltaY); } + public void handleKeyEvent(int eventType, int modifierFlags, String characters, + String charsIgnoringMods, boolean isRepeat, short keyCode, + boolean needsKeyTyped) { + responder.handleKeyEvent(eventType, modifierFlags, charsIgnoringMods, keyCode, needsKeyTyped); + } + + // REMIND: delete this method once 'deploy' changes for 7156194 is pushed public void handleKeyEvent(int eventType, int modifierFlags, String characters, String charsIgnoringMods, boolean isRepeat, short keyCode) { - responder.handleKeyEvent(eventType, modifierFlags, charsIgnoringMods, keyCode); + handleKeyEvent(eventType, modifierFlags, characters, charsIgnoringMods, isRepeat, keyCode, true); } public void handleInputEvent(String text) { - new RuntimeException("Not implemented"); + responder.handleInputEvent(text); } public void handleFocusEvent(boolean focused) { diff --git a/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java b/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java index 7c234ff15..739e56790 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java +++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java @@ -117,7 +117,7 @@ final class CPlatformResponder { * Handles key events. */ void handleKeyEvent(int eventType, int modifierFlags, String chars, - short keyCode) { + short keyCode, boolean needsKeyTyped) { boolean isFlagsChangedEvent = isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) : (eventType == CocoaConstants.NSFlagsChanged); @@ -173,6 +173,10 @@ final class CPlatformResponder { peer.dispatchKeyEvent(jeventType, when, jmodifiers, jkeyCode, javaChar, jkeyLocation); + // Current browser may be sending input events, so don't + // post the KEY_TYPED here. + postsTyped &= needsKeyTyped; + // That's the reaction on the PRESSED (not RELEASED) event as it comes to // appear in MacOSX. // Modifier keys (shift, etc) don't want to send TYPED events. @@ -185,4 +189,19 @@ final class CPlatformResponder { KeyEvent.KEY_LOCATION_UNKNOWN); } } + + void handleInputEvent(String text) { + if (text != null) { + int index = 0, length = text.length(); + char c; + while (index < length) { + c = text.charAt(index); + peer.dispatchKeyEvent(KeyEvent.KEY_TYPED, + System.currentTimeMillis(), + 0, KeyEvent.VK_UNDEFINED, c, + KeyEvent.KEY_LOCATION_UNKNOWN); + index++; + } + } + } } diff --git a/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java b/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java index 04bcb7479..77a81e0d7 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java +++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java @@ -199,7 +199,7 @@ public class CPlatformView extends CFRetainedResource { private void deliverKeyEvent(NSEvent event) { responder.handleKeyEvent(event.getType(), event.getModifierFlags(), - event.getCharactersIgnoringModifiers(), event.getKeyCode()); + event.getCharactersIgnoringModifiers(), event.getKeyCode(), true); } private void deliverWindowDidExposeEvent() { -- GitLab