@@ -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,8 @@ - (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 , kCGAnyInputEventType );
5856 BOOL handled = NO ;
5957
6058 @autoreleasepool {
@@ -82,35 +80,32 @@ - (BOOL)handleEvent:(NSEvent*)event client:(id)sender
8280 int release_mask = 0 ;
8381 NSUInteger changes = _lastModifier ^ modifiers;
8482 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 );
83+ CGKeyCode keyCode = CGEventGetIntegerValueField (event.CGEvent , kCGKeyboardEventKeycode );
84+ int rime_keycode = osx_keycode_to_rime_keycode (keyCode, 0 , 0 , 0 );
8785 _lastModifier = modifiers;
88- uint32_t eventCount = CGEventSourceCounterForEventType (kCGEventSourceStateCombinedSessionState , kCGAnyInputEventType );
8986 if (changes & OSX_CAPITAL_MASK) {
9087 rime_modifiers ^= kLockMask ;
9188 [self processKey: rime_keycode modifiers: rime_modifiers];
9289 }
9390 if (changes & OSX_SHIFT_MASK) {
94- release_mask = modifiers & OSX_SHIFT_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount < = 1 ? 0 : kIgnoredMask );
91+ release_mask = modifiers & OSX_SHIFT_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount = = 1 ? 0 : kIgnoredMask );
9592 [self processKey: rime_keycode modifiers: (rime_modifiers | release_mask)];
9693 }
9794 if (changes & OSX_CTRL_MASK) {
98- release_mask = modifiers & OSX_CTRL_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount < = 1 ? 0 : kIgnoredMask );
95+ release_mask = modifiers & OSX_CTRL_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount = = 1 ? 0 : kIgnoredMask );
9996 [self processKey: rime_keycode modifiers: (rime_modifiers | release_mask)];
10097 }
10198 if (changes & OSX_ALT_MASK) {
102- release_mask = modifiers & OSX_ALT_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount < = 1 ? 0 : kIgnoredMask );
99+ release_mask = modifiers & OSX_ALT_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount = = 1 ? 0 : kIgnoredMask );
103100 [self processKey: rime_keycode modifiers: (rime_modifiers | release_mask)];
104101 }
105102 if (changes & OSX_COMMAND_MASK) {
106- release_mask = modifiers & OSX_COMMAND_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount < = 1 ? 0 : kIgnoredMask );
103+ release_mask = modifiers & OSX_COMMAND_MASK ? 0 : kReleaseMask | (eventCount - _lastEventCount = = 1 ? 0 : kIgnoredMask );
107104 [self processKey: rime_keycode modifiers: (rime_modifiers | release_mask)];
108- _lastEventCount = eventCount;
109105 // do not update UI when using Command key
110- break ;
106+ goto saveStatus ;
111107 }
112108 [self rimeUpdate ];
113- _lastEventCount = eventCount;
114109 } break ;
115110 case NSEventTypeKeyDown: {
116111 // ignore Command+X hotkeys.
@@ -139,10 +134,10 @@ - (BOOL)handleEvent:(NSEvent*)event client:(id)sender
139134 break ;
140135 }
141136 }
142-
143- _lastModifier = modifiers;
144- _lastEventType = event. type ;
145-
137+ saveStatus: if (event. type == NSEventTypeFlagsChanged) {
138+ _lastModifier = modifiers;
139+ _lastEventCount = eventCount ;
140+ }
146141 return handled;
147142}
148143
0 commit comments