aboutsummaryrefslogtreecommitdiff
path: root/src/hotkey.c
diff options
context:
space:
mode:
authorkoekeishiya <aasvi93@hotmail.com>2018-05-13 12:03:49 +0200
committerkoekeishiya <aasvi93@hotmail.com>2018-05-13 12:03:49 +0200
commitbf25de2bce2946696ded80a99474b0ac7ad48cee (patch)
tree0229260ecba9561cf76f1008bcb8146df7ed875f /src/hotkey.c
parentb84d878effd520ac443e600bec95a4164f486618 (diff)
downloadskhd-bf25de2bce2946696ded80a99474b0ac7ad48cee.tar.gz
skhd-bf25de2bce2946696ded80a99474b0ac7ad48cee.zip
#33 add support for binding media-keys
Diffstat (limited to 'src/hotkey.c')
-rw-r--r--src/hotkey.c29
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;
+}