@@ -24,7 +24,6 @@ @implementation SquirrelInputController {
2424 NSUInteger _caretPos;
2525 NSArray *_candidates;
2626 NSUInteger _lastModifier;
27- NSEventType _lastEventType;
2827 uint32_t _lastEventCount;
2928 RimeSessionId _session;
3029 NSString *_schemaId;
@@ -52,9 +51,9 @@ - (BOOL)handleEvent:(NSEvent*)event client:(id)sender
5251 // Returning NO means the original key down will be passed on to the client.
5352
5453 _currentClient = sender;
55-
56- CGEventFlags modifiers = CGEventGetFlags (event. CGEvent );
57-
54+ NSEventModifierFlags modifiers = event. modifierFlags & NSEventModifierFlagDeviceIndependentFlagsMask;
55+ uint32_t eventCount = CGEventSourceCounterForEventType ( kCGEventSourceStateCombinedSessionState ,
56+ kCGEventFlagsChanged | kCGEventLeftMouseDown | kCGEventRightMouseDown | kCGEventOtherMouseDown );
5857 BOOL handled = NO ;
5958
6059 @autoreleasepool {
@@ -82,10 +81,9 @@ - (BOOL)handleEvent:(NSEvent*)event client:(id)sender
8281 int release_mask = 0 ;
8382 NSUInteger changes = _lastModifier ^ modifiers;
8483 int rime_modifiers = osx_modifiers_to_rime_modifiers (modifiers);
85- int64_t keyCode = CGEventGetIntegerValueField (event.CGEvent , kCGKeyboardEventKeycode );
86- int rime_keycode = osx_keycode_to_rime_keycode (( int ) keyCode, 0 , 0 , 0 );
84+ CGKeyCode keyCode = CGEventGetIntegerValueField (event.CGEvent , kCGKeyboardEventKeycode );
85+ int rime_keycode = osx_keycode_to_rime_keycode (keyCode, 0 , 0 , 0 );
8786 _lastModifier = modifiers;
88- uint32_t eventCount = CGEventSourceCounterForEventType (kCGEventSourceStateCombinedSessionState , kCGAnyInputEventType );
8987 if (changes & OSX_CAPITAL_MASK) {
9088 rime_modifiers ^= kLockMask ;
9189 [self processKey: rime_keycode modifiers: rime_modifiers];
@@ -105,12 +103,10 @@ - (BOOL)handleEvent:(NSEvent*)event client:(id)sender
105103 if (changes & OSX_COMMAND_MASK) {
106104 release_mask = modifiers & OSX_COMMAND_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount <= 1 ? 0 : kIgnoredMask );
107105 [self processKey: rime_keycode modifiers: (rime_modifiers | release_mask)];
108- _lastEventCount = eventCount;
109106 // do not update UI when using Command key
110- break ;
107+ goto saveStatus ;
111108 }
112109 [self rimeUpdate ];
113- _lastEventCount = eventCount;
114110 } break ;
115111 case NSEventTypeKeyDown: {
116112 // ignore Command+X hotkeys.
@@ -139,10 +135,10 @@ - (BOOL)handleEvent:(NSEvent*)event client:(id)sender
139135 break ;
140136 }
141137 }
142-
143- _lastModifier = modifiers;
144- _lastEventType = event. type ;
145-
138+ saveStatus: if (event. type == NSEventTypeFlagsChanged) {
139+ _lastModifier = modifiers;
140+ _lastEventCount = eventCount ;
141+ }
146142 return handled;
147143}
148144
0 commit comments