Skip to content

Commit 5c2b7e6

Browse files
committed
fix: modifier change event in older macOS
event.keyCode is available since macOS 0.15. fixes #715
1 parent 3bc6c2c commit 5c2b7e6

1 file changed

Lines changed: 24 additions & 3 deletions

File tree

‎SquirrelInputController.m‎

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,32 +78,53 @@ - (BOOL)handleEvent:(NSEvent*)event client:(id)sender
7878
handled = YES;
7979
break;
8080
}
81-
int keyCode = event.keyCode;
82-
//NSLog(@"FLAGSCHANGED client: %@, modifiers: 0x%lx, keyCode: %d", sender, modifiers, keyCode);
83-
int rime_keycode = osx_keycode_to_rime_keycode(keyCode, 0, 0, 0);
81+
//NSLog(@"FLAGSCHANGED client: %@, modifiers: 0x%lx", sender, modifiers);
8482
int rime_modifiers = osx_modifiers_to_rime_modifiers(modifiers);
83+
int rime_keycode = 0;
84+
// For flags-changed event, keyCode is available since macOS 10.15 (#715)
85+
Bool keyCodeAvailable = NO;
86+
if (@available(macOS 10.15, *)) {
87+
keyCodeAvailable = YES;
88+
rime_keycode = osx_keycode_to_rime_keycode(event.keyCode, 0, 0, 0);
89+
//NSLog(@"keyCode: %d", event.keyCode);
90+
}
8591
int release_mask = 0;
8692
NSUInteger changes = _lastModifier ^ modifiers;
8793
if (changes & OSX_CAPITAL_MASK) {
94+
if (!keyCodeAvailable) {
95+
rime_keycode = XK_Caps_Lock;
96+
}
8897
// NOTE: rime assumes XK_Caps_Lock to be sent before modifier changes,
8998
// while NSFlagsChanged event has the flag changed already.
9099
// so it is necessary to revert kLockMask.
91100
rime_modifiers ^= kLockMask;
92101
[self processKey:rime_keycode modifiers:rime_modifiers];
93102
}
94103
if (changes & OSX_SHIFT_MASK) {
104+
if (!keyCodeAvailable) {
105+
rime_keycode = XK_Shift_L;
106+
}
95107
release_mask = modifiers & OSX_SHIFT_MASK ? 0 : kReleaseMask;
96108
[self processKey:rime_keycode modifiers:(rime_modifiers | release_mask)];
97109
}
98110
if (changes & OSX_CTRL_MASK) {
111+
if (!keyCodeAvailable) {
112+
rime_keycode = XK_Control_L;
113+
}
99114
release_mask = modifiers & OSX_CTRL_MASK ? 0 : kReleaseMask;
100115
[self processKey:rime_keycode modifiers:(rime_modifiers | release_mask)];
101116
}
102117
if (changes & OSX_ALT_MASK) {
118+
if (!keyCodeAvailable) {
119+
rime_keycode = XK_Alt_L;
120+
}
103121
release_mask = modifiers & OSX_ALT_MASK ? 0 : kReleaseMask;
104122
[self processKey:rime_keycode modifiers:(rime_modifiers | release_mask)];
105123
}
106124
if (changes & OSX_COMMAND_MASK) {
125+
if (!keyCodeAvailable) {
126+
rime_keycode = XK_Super_L;
127+
}
107128
release_mask = modifiers & OSX_COMMAND_MASK ? 0 : kReleaseMask;
108129
[self processKey:rime_keycode modifiers:(rime_modifiers | release_mask)];
109130
// do not update UI when using Command key

0 commit comments

Comments
 (0)