diff options
author | Denis Fokin <Denis.Fokin@jetbrains.com> | 2017-03-14 13:53:35 +0300 |
---|---|---|
committer | Alexey Ushakov <Alexey.Ushakov@jetbrains.com> | 2017-03-31 16:54:51 +0300 |
commit | 0f9655446d26586992f8b8a7566da5a587337af2 (patch) | |
tree | e80a454e733da98cff8c1f4f9021eaf1135fc171 | |
parent | bb03ca8f07c4f66f50236c9eba9decf8b192b3d6 (diff) | |
download | jdk8u_jdk-0f9655446d26586992f8b8a7566da5a587337af2.tar.gz |
Revert: JRE-252 Mac OS X: press & hold button in quick search popup blocks all keyboard events
-rw-r--r-- | src/macosx/native/sun/awt/AWTView.m | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/macosx/native/sun/awt/AWTView.m b/src/macosx/native/sun/awt/AWTView.m index 919f9692a5..696a686a58 100644 --- a/src/macosx/native/sun/awt/AWTView.m +++ b/src/macosx/native/sun/awt/AWTView.m @@ -57,6 +57,13 @@ //#define IM_DEBUG TRUE //#define EXTRA_DEBUG +static BOOL shouldUsePressAndHold() { + static int shouldUsePressAndHold = -1; + if (shouldUsePressAndHold != -1) return shouldUsePressAndHold; + shouldUsePressAndHold = !isSnowLeopardOrLower(); + return shouldUsePressAndHold; +} + @implementation AWTView @synthesize _dropTarget; @@ -79,6 +86,10 @@ AWT_ASSERT_APPKIT_THREAD; fKeyEventsNeeded = NO; fProcessingKeystroke = NO; + fEnablePressAndHold = shouldUsePressAndHold(); + fInPressAndHold = NO; + fPAHNeedsToSelect = NO; + mouseIsOver = NO; [self resetTrackingArea]; [self setAutoresizesSubviews:NO]; @@ -280,6 +291,15 @@ AWT_ASSERT_APPKIT_THREAD; // Allow TSM to look at the event and potentially send back NSTextInputClient messages. [self interpretKeyEvents:[NSArray arrayWithObject:event]]; + if (fEnablePressAndHold && [event willBeHandledByComplexInputMethod]) { + fProcessingKeystroke = NO; + if (!fInPressAndHold) { + fInPressAndHold = YES; + fPAHNeedsToSelect = YES; + } + return; + } + NSString *eventCharacters = [event characters]; BOOL isDeadKey = (eventCharacters != nil && [eventCharacters length] == 0); @@ -357,7 +377,10 @@ AWT_ASSERT_APPKIT_THREAD; AWTToolkit.latestPerformKeyEquivalentEvent = event; [event retain]; - [self deliverJavaKeyEventHelper: event]; + // if IM is active key events should be ignored + if (![self hasMarkedText] && !fInPressAndHold) { + [self deliverJavaKeyEventHelper: event]; + } return NO; } @@ -1115,6 +1138,9 @@ JNF_CLASS_CACHE(jc_CInputMethod, "sun/lwawt/macosx/CInputMethod"); return; } + // Insert happens at the end of PAH + fInPressAndHold = NO; + // insertText gets called when the user commits text generated from an input method. It also gets // called during ordinary input as well. We only need to send an input method event when we have marked // text, or 'text in progress'. We also need to send the event if we get an insert text out of the blue! |