< 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,10 +32,11 @@
#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,10 +57,17 @@
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,15 +287,35 @@
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) {
+ 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,10 +1004,17 @@
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 >