< 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 >