Skip to content

Commit 3c27371

Browse files
PewnackCopilot
authored andcommitted
On macOS when the command key (super key) is pressed all key up events are swallowd.
Co-authored-by: Copilot <copilot@github.com>
1 parent 940c138 commit 3c27371

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

src/native/macos.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,21 @@ impl MacosDisplay {
131131

132132
Some(event_handler)
133133
}
134+
135+
// When the command key is pressed (super key), macOS swallows all key up events.
136+
fn generate_swallowed_key_events(&mut self, event: ObjcId) {
137+
let event_type: u64 = unsafe { msg_send![event, type] };
138+
if event_type == NSEventType::NSKeyUp as u64 {
139+
let mods = get_event_key_modifier(event);
140+
if mods.logo {
141+
if let Some(key) = get_event_keycode(event) {
142+
if let Some(event_handler) = self.context() {
143+
event_handler.key_up_event(key, mods);
144+
}
145+
}
146+
}
147+
}
148+
}
134149
}
135150

136151
impl MacosDisplay {
@@ -1357,13 +1372,19 @@ where
13571372
if block_on_wait {
13581373
let event: ObjcId = msg_send![ns_app, nextEventMatchingMask: NSEventMask::NSAnyEventMask untilDate: distant_future inMode:NSDefaultRunLoopMode dequeue:YES];
13591374

1375+
if event != nil {
1376+
display.generate_swallowed_key_events(event);
1377+
}
1378+
13601379
let () = msg_send![ns_app, sendEvent:event];
13611380
} else {
13621381
loop {
13631382
let event: ObjcId = msg_send![ns_app, nextEventMatchingMask: NSEventMask::NSAnyEventMask untilDate: distant_past inMode:NSDefaultRunLoopMode dequeue:YES];
13641383
if event == nil {
13651384
break;
13661385
}
1386+
display.generate_swallowed_key_events(event);
1387+
13671388
let () = msg_send![ns_app, sendEvent:event];
13681389
}
13691390
}

0 commit comments

Comments
 (0)