diff options
author | koekeishiya <aasvi93@hotmail.com> | 2018-05-13 12:03:49 +0200 |
---|---|---|
committer | koekeishiya <aasvi93@hotmail.com> | 2018-05-13 12:03:49 +0200 |
commit | bf25de2bce2946696ded80a99474b0ac7ad48cee (patch) | |
tree | 0229260ecba9561cf76f1008bcb8146df7ed875f /src/hotkey.c | |
parent | b84d878effd520ac443e600bec95a4164f486618 (diff) | |
download | skhd-bf25de2bce2946696ded80a99474b0ac7ad48cee.tar.gz skhd-bf25de2bce2946696ded80a99474b0ac7ad48cee.zip |
#33 add support for binding media-keys
Diffstat (limited to 'src/hotkey.c')
-rw-r--r-- | src/hotkey.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/hotkey.c b/src/hotkey.c index 75f2192..a2c383a 100644 --- a/src/hotkey.c +++ b/src/hotkey.c @@ -45,6 +45,12 @@ compare_fn(struct hotkey *a, struct hotkey *b) return has_flags(a, Hotkey_Flag_Fn) == has_flags(b, Hotkey_Flag_Fn); } +internal bool +compare_nx(struct hotkey *a, struct hotkey *b) +{ + return has_flags(a, Hotkey_Flag_NX) == has_flags(b, Hotkey_Flag_NX); +} + bool same_hotkey(struct hotkey *a, struct hotkey *b) { return compare_lr_mod(a, b, LRMOD_ALT) && @@ -52,6 +58,7 @@ bool same_hotkey(struct hotkey *a, struct hotkey *b) compare_lr_mod(a, b, LRMOD_CTRL) && compare_lr_mod(a, b, LRMOD_SHIFT) && compare_fn(a, b) && + compare_nx(a, b) && a->key == b->key; } @@ -200,8 +207,7 @@ cgevent_flags_to_hotkey_flags(uint32_t eventflags) return flags; } -struct hotkey -create_eventkey(CGEventRef event) +struct hotkey create_eventkey(CGEventRef event) { struct hotkey eventkey = { .key = CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode), @@ -209,3 +215,22 @@ create_eventkey(CGEventRef event) }; return eventkey; } + +struct systemkey create_systemkey(CGEventRef event) +{ + 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]; + uint8_t key_state = data[130]; + 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; +} |