Skip to content

Commit

Permalink
livesplit-hotkey: Add new_consuming on macOS
Browse files Browse the repository at this point in the history
  • Loading branch information
tmandry authored and CryZe committed Jan 16, 2024
1 parent 655b2ec commit 7313255
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
1 change: 1 addition & 0 deletions crates/livesplit-hotkey/src/macos/cg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ bitflags::bitflags! {
#[link(name = "CoreGraphics", kind = "framework")]
extern "C" {
pub fn CGEventGetFlags(event: EventRef) -> EventFlags;
pub fn CGEventSetType(event: EventRef, event_type: EventType);

pub fn CGEventTapCreate(
tap: EventTapLocation,
Expand Down
18 changes: 12 additions & 6 deletions crates/livesplit-hotkey/src/macos/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ use self::{
CFRunLoopGetCurrent, CFRunLoopRemoveSource, CFRunLoopRun,
},
cg::{
CGEventGetFlags, CGEventTapCreate, EventField, EventFlags, EventMask, EventRef,
EventTapLocation, EventTapOptions, EventTapPlacement, EventTapProxy, EventType,
CGEventGetFlags, CGEventSetType, CGEventTapCreate, EventField, EventFlags, EventMask,
EventRef, EventTapLocation, EventTapOptions, EventTapPlacement, EventTapProxy, EventType,
},
};
use crate::{ConsumePreference, Hotkey, KeyCode, Modifiers, Result};
Expand Down Expand Up @@ -97,9 +97,10 @@ impl Drop for Hook {

impl Hook {
pub fn new(consume: ConsumePreference) -> Result<Self> {
if matches!(consume, ConsumePreference::MustConsume) {
return Err(crate::Error::UnmatchedPreference);
}
let is_consuming = matches!(
consume,
ConsumePreference::PreferConsume | ConsumePreference::MustConsume,
);

let state = Arc::new(State {
hotkeys: Mutex::new(HashMap::new()),
Expand All @@ -124,7 +125,11 @@ impl Hook {
let port = CGEventTapCreate(
EventTapLocation::SESSION,
EventTapPlacement::HEAD_INSERT_EVENT_TAP,
EventTapOptions::DEFAULT_TAP,
if is_consuming {
EventTapOptions::DEFAULT_TAP
} else {
EventTapOptions::LISTEN_ONLY
},
EventMask::KEY_DOWN,
Some(callback),
state_ptr as *mut c_void,
Expand Down Expand Up @@ -479,6 +484,7 @@ unsafe extern "C" fn callback(
.get_mut(&key_code.with_modifiers(modifiers))
{
callback();
CGEventSetType(event, EventType::NULL);
}

event
Expand Down

0 comments on commit 7313255

Please sign in to comment.