Skip to content

Commit 106a3f0

Browse files
authored
Disable event tap on macOS before stopping run loop (#856)
This shouldn't be necessary according to the documentation, but it does fix #855.
1 parent d35ff05 commit 106a3f0

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

crates/livesplit-hotkey/src/macos/cg.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,5 +220,7 @@ extern "C" {
220220
userInfo: *mut c_void,
221221
) -> MachPortRef;
222222

223+
pub fn CGEventTapEnable(tap: MachPortRef, enable: bool);
224+
223225
pub fn CGEventGetIntegerValueField(event: EventRef, field: EventField) -> i64;
224226
}

crates/livesplit-hotkey/src/macos/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ use self::{
1616
CFRunLoopGetCurrent, CFRunLoopRemoveSource, CFRunLoopRun,
1717
},
1818
cg::{
19-
CGEventGetFlags, CGEventTapCreate, EventField, EventFlags, EventMask, EventRef,
20-
EventTapLocation, EventTapOptions, EventTapPlacement, EventTapProxy, EventType,
19+
CGEventGetFlags, CGEventTapCreate, CGEventTapEnable, EventField, EventFlags, EventMask,
20+
EventRef, EventTapLocation, EventTapOptions, EventTapPlacement, EventTapProxy, EventType,
2121
},
2222
};
2323
use crate::{ConsumePreference, Hotkey, KeyCode, Modifiers, Result};
@@ -163,6 +163,7 @@ impl Hook {
163163
if CFRunLoopContainsSource(event_loop, source.0, kCFRunLoopDefaultMode) {
164164
CFRunLoopRemoveSource(event_loop, source.0, kCFRunLoopDefaultMode);
165165
}
166+
CGEventTapEnable(port.0, false);
166167
});
167168

168169
let event_loop = receiver

0 commit comments

Comments
 (0)