< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m

Print this page
rev 52276 : 8213292 Input freezes after MacOS key-selector (press&hold) usage on macOS Mojave

Call abandonInput to reset input methods after entering accented symbols

*** 32,41 **** --- 32,42 ---- #import "JavaAccessibilityUtilities.h" #import "GeomUtilities.h" #import "OSVersion.h" #import "ThreadUtilities.h" + #import <Carbon/Carbon.h> #import <JavaNativeFoundation/JavaNativeFoundation.h> @interface AWTView() @property (retain) CDropTarget *_dropTarget; @property (retain) CDragSource *_dragSource;
*** 56,65 **** --- 57,73 ---- if (shouldUsePressAndHold != -1) return shouldUsePressAndHold; shouldUsePressAndHold = !isSnowLeopardOrLower(); return shouldUsePressAndHold; } + #ifndef kCFCoreFoundationVersionNumber10_13_Max + #define kCFCoreFoundationVersionNumber10_13_Max 1499 + #endif + + #define IS_OSX_GT10_13 (floor(kCFCoreFoundationVersionNumber) > \ + kCFCoreFoundationVersionNumber10_13_Max) + @implementation AWTView @synthesize _dropTarget; @synthesize _dragSource; @synthesize cglLayer;
*** 279,293 **** fKeyEventsNeeded = YES; // Allow TSM to look at the event and potentially send back NSTextInputClient messages. [self interpretKeyEvents:[NSArray arrayWithObject:event]]; ! if (fEnablePressAndHold && [event willBeHandledByComplexInputMethod] && fInputMethodLOCKABLE) { fProcessingKeystroke = NO; if (!fInPressAndHold) { fInPressAndHold = YES; fPAHNeedsToSelect = YES; } return; } NSString *eventCharacters = [event characters]; --- 287,321 ---- fKeyEventsNeeded = YES; // Allow TSM to look at the event and potentially send back NSTextInputClient messages. [self interpretKeyEvents:[NSArray arrayWithObject:event]]; ! if (fEnablePressAndHold && [event willBeHandledByComplexInputMethod] && ! fInputMethodLOCKABLE) ! { fProcessingKeystroke = NO; if (!fInPressAndHold) { fInPressAndHold = YES; fPAHNeedsToSelect = YES; + } else if (IS_OSX_GT10_13) { + // Abandon input to reset IM and unblock input after canceling + // input accented symbols (macOS 10.14+ only) + + switch([event keyCode]) { + case kVK_Escape: + case kVK_Delete: + case kVK_Return: + case kVK_ForwardDelete: + case kVK_PageUp: + case kVK_PageDown: + case kVK_DownArrow: + case kVK_UpArrow: + case kVK_Home: + case kVK_End: + [self abandonInput]; + break; + } } return; } NSString *eventCharacters = [event characters];
*** 976,985 **** --- 1004,1020 ---- if ([useString length] > 0) { fKeyEventsNeeded = YES; } } fPAHNeedsToSelect = NO; + + // Abandon input to reset IM and unblock input after entering accented + // symbols (macOS 10.14+ only) + + if (IS_OSX_GT10_13) { + [self abandonInput]; + } } - (void) doCommandBySelector:(SEL)aSelector { #ifdef IM_DEBUG
< prev index next >