diff options
-rw-r--r-- | src/hotkey.c | 25 | ||||
-rw-r--r-- | src/hotkey.h | 8 | ||||
-rw-r--r-- | src/skhd.c | 6 |
3 files changed, 17 insertions, 22 deletions
diff --git a/src/hotkey.c b/src/hotkey.c index a2c383a..a37e27c 100644 --- a/src/hotkey.c +++ b/src/hotkey.c @@ -216,21 +216,22 @@ struct hotkey create_eventkey(CGEventRef event) return eventkey; } -struct systemkey create_systemkey(CGEventRef event) +bool intercept_systemkey(CGEventRef event, struct hotkey *eventkey) { CFDataRef event_data = CGEventCreateData(kCFAllocatorDefault, event); - const uint8_t *data = CFDataGetBytePtr(event_data); - uint8_t event_subtype = data[123]; - uint8_t key_code = data[129]; + const uint8_t *data = CFDataGetBytePtr(event_data); + uint8_t key_code = data[129]; uint8_t key_state = data[130]; + uint8_t key_stype = data[123]; CFRelease(event_data); - struct systemkey systemkey = { - .eventkey = { - .key = key_code, - .flags = cgevent_flags_to_hotkey_flags(CGEventGetFlags(event)) | Hotkey_Flag_NX - }, - .intercept = key_state == NX_KEYDOWN && event_subtype == NX_SUBTYPE_AUX_CONTROL_BUTTONS - }; - return systemkey; + bool result = ((key_state == NX_KEYDOWN) && + (key_stype == NX_SUBTYPE_AUX_CONTROL_BUTTONS)); + + if (result) { + eventkey->key = key_code; + eventkey->flags = cgevent_flags_to_hotkey_flags(CGEventGetFlags(event)) | Hotkey_Flag_NX; + } + + return result; } diff --git a/src/hotkey.h b/src/hotkey.h index b0ca504..59ee243 100644 --- a/src/hotkey.h +++ b/src/hotkey.h @@ -66,12 +66,6 @@ struct hotkey struct mode **mode_list; }; -struct systemkey -{ - struct hotkey eventkey; - bool intercept; -}; - static inline void add_flags(struct hotkey *hotkey, uint32_t flag) { @@ -98,7 +92,7 @@ bool same_hotkey(struct hotkey *a, struct hotkey *b); unsigned long hash_hotkey(struct hotkey *a); struct hotkey create_eventkey(CGEventRef event); -struct systemkey create_systemkey(CGEventRef event); +bool intercept_systemkey(CGEventRef event, struct hotkey *eventkey); bool find_and_exec_hotkey(struct hotkey *eventkey, struct table *mode_map, struct mode **current_mode); void free_mode_map(struct table *mode_map); @@ -106,9 +106,9 @@ internal EVENT_TAP_CALLBACK(key_handler) case NX_SYSDEFINED: { if (!current_mode) return event; - struct systemkey systemkey = create_systemkey(event); - if (systemkey.intercept) { - bool result = find_and_exec_hotkey(&systemkey.eventkey, &mode_map, ¤t_mode); + struct hotkey eventkey; + if (intercept_systemkey(event, &eventkey)) { + bool result = find_and_exec_hotkey(&eventkey, &mode_map, ¤t_mode); if (result) return NULL; } } break; |