aboutsummaryrefslogtreecommitdiff
path: root/src/skhd.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/skhd.c
parentb84d878effd520ac443e600bec95a4164f486618 (diff)
downloadskhd-bf25de2bce2946696ded80a99474b0ac7ad48cee.tar.gz
skhd-bf25de2bce2946696ded80a99474b0ac7ad48cee.zip
#33 add support for binding media-keys
Diffstat (limited to 'src/skhd.c')
-rw-r--r--src/skhd.c68
1 files changed, 6 insertions, 62 deletions
diff --git a/src/skhd.c b/src/skhd.c
index 3ca08f8..7ec49ec 100644
--- a/src/skhd.c
+++ b/src/skhd.c
@@ -99,73 +99,17 @@ internal EVENT_TAP_CALLBACK(key_handler)
case kCGEventKeyDown: {
if (!current_mode) return event;
- BEGIN_TIMED_BLOCK();
struct hotkey eventkey = create_eventkey(event);
bool result = find_and_exec_hotkey(&eventkey, &mode_map, &current_mode);
- END_TIMED_BLOCK();
-
if (result) return NULL;
} break;
case NX_SYSDEFINED: {
- CFDataRef event_data = CGEventCreateData(kCFAllocatorDefault, event);
- uint8_t *data = CFDataGetBytePtr(event_data);
-
-#if 0
- // NOTE(koekeishiya): dump raw event-data for reverse engineering
- CFIndex length = CFDataGetLength(event_data);
- for (int i = 0; i < length; ++i) {
- if (i % 16 == 0) printf("\n");
- printf("%02X ", data[i]);
- }
-#endif
+ if (!current_mode) return event;
- uint8_t event_subtype = data[123];
- if (event_subtype == 0x08) {
- uint8_t key_code = data[129];
- uint8_t key_state = data[130];
- if (key_state == NX_KEYDOWN) {
- switch (key_code) {
- case NX_KEYTYPE_SOUND_UP: {
- printf("pressed media_sound_up\n");
- } break;
- case NX_KEYTYPE_SOUND_DOWN: {
- printf("pressed media_sound_down\n");
- } break;
- case NX_KEYTYPE_MUTE: {
- printf("pressed media_mute\n");
- } break;
- case NX_KEYTYPE_PLAY: {
- printf("pressed media_play\n");
- } break;
- case NX_KEYTYPE_PREVIOUS: {
- printf("pressed media_prev\n");
- } break;
- case NX_KEYTYPE_NEXT: {
- printf("pressed media_next\n");
- } break;
- case NX_KEYTYPE_REWIND: {
- printf("pressed media_rewind\n");
- } break;
- case NX_KEYTYPE_FAST: {
- printf("pressed media_fast\n");
- } break;
- case NX_KEYTYPE_BRIGHTNESS_UP: {
- printf("pressed media_brightness_up\n");
- } break;
- case NX_KEYTYPE_BRIGHTNESS_DOWN: {
- printf("pressed media_brightness_down\n");
- } break;
- case NX_KEYTYPE_ILLUMINATION_UP: {
- printf("pressed media_brightness_up\n");
- } break;
- case NX_KEYTYPE_ILLUMINATION_DOWN: {
- printf("pressed media_brightness_down\n");
- } break;
- default: {
- printf("pressed system-key %d\n", key_code);
- } break;
- }
- }
+ struct systemkey systemkey = create_systemkey(event);
+ if (systemkey.intercept) {
+ bool result = find_and_exec_hotkey(&systemkey.eventkey, &mode_map, &current_mode);
+ if (result) return NULL;
}
} break;
}
@@ -263,7 +207,7 @@ int main(int argc, char **argv)
signal(SIGCHLD, SIG_IGN);
struct event_tap event_tap;
- event_tap.mask = (1 << kCGEventKeyDown) | CGEventMaskBit(NX_SYSDEFINED);
+ event_tap.mask = (1 << kCGEventKeyDown) | (1 << NX_SYSDEFINED);
event_tap_begin(&event_tap, key_handler);
struct hotloader hotloader = {};