diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/hotkey.c | 14 | ||||
-rw-r--r-- | src/hotkey.h | 64 | ||||
-rw-r--r-- | src/parse.c | 2 | ||||
-rw-r--r-- | src/tokenize.h | 2 |
4 files changed, 43 insertions, 39 deletions
diff --git a/src/hotkey.c b/src/hotkey.c index 9e99064..f5229bb 100644 --- a/src/hotkey.c +++ b/src/hotkey.c @@ -84,17 +84,23 @@ compare_ctrl(struct hotkey *a, struct hotkey *b) } } +internal bool +compare_fn(struct hotkey *a, struct hotkey *b) +{ + return has_flags(a, Hotkey_Flag_Fn) == has_flags(b, Hotkey_Flag_Fn); +} + bool same_hotkey(struct hotkey *a, struct hotkey *b) { return compare_cmd(a, b) && compare_shift(a, b) && compare_alt(a, b) && compare_ctrl(a, b) && + compare_fn(a, b) && a->key == b->key; } -unsigned long -hash_hotkey(struct hotkey *a) +unsigned long hash_hotkey(struct hotkey *a) { return a->key; } @@ -163,4 +169,8 @@ void cgeventflags_to_hotkeyflags(CGEventFlags flags, struct hotkey *eventkey) if(right) add_flags(eventkey, Hotkey_Flag_RControl); if(!left && !right) add_flags(eventkey, Hotkey_Flag_Control); } + + if((flags & Event_Mask_Fn) == Event_Mask_Fn) { + add_flags(eventkey, Hotkey_Flag_Fn); + } } diff --git a/src/hotkey.h b/src/hotkey.h index 297c674..40ea630 100644 --- a/src/hotkey.h +++ b/src/hotkey.h @@ -7,47 +7,41 @@ enum osx_event_mask { - Event_Mask_Alt = 0x00080000, - Event_Mask_LAlt = 0x00000020, - Event_Mask_RAlt = 0x00000040, - - Event_Mask_Shift = 0x00020000, - Event_Mask_LShift = 0x00000002, - Event_Mask_RShift = 0x00000004, - - Event_Mask_Cmd = 0x00100000, - Event_Mask_LCmd = 0x00000008, - Event_Mask_RCmd = 0x00000010, - - Event_Mask_Control = 0x00040000, + Event_Mask_Alt = 0x00080000, + Event_Mask_LAlt = 0x00000020, + Event_Mask_RAlt = 0x00000040, + Event_Mask_Shift = 0x00020000, + Event_Mask_LShift = 0x00000002, + Event_Mask_RShift = 0x00000004, + Event_Mask_Cmd = 0x00100000, + Event_Mask_LCmd = 0x00000008, + Event_Mask_RCmd = 0x00000010, + Event_Mask_Control = 0x00040000, Event_Mask_LControl = 0x00000001, Event_Mask_RControl = 0x00002000, + Event_Mask_Fn = kCGEventFlagMaskSecondaryFn, }; enum hotkey_flag { - Hotkey_Flag_Alt = (1 << 0), - Hotkey_Flag_LAlt = (1 << 1), - Hotkey_Flag_RAlt = (1 << 2), - - Hotkey_Flag_Shift = (1 << 3), - Hotkey_Flag_LShift = (1 << 4), - Hotkey_Flag_RShift = (1 << 5), - - Hotkey_Flag_Cmd = (1 << 6), - Hotkey_Flag_LCmd = (1 << 7), - Hotkey_Flag_RCmd = (1 << 8), - - Hotkey_Flag_Control = (1 << 9), - Hotkey_Flag_LControl = (1 << 10), - Hotkey_Flag_RControl = (1 << 11), - - Hotkey_Flag_Passthrough = (1 << 12), - - Hotkey_Flag_Hyper = (Hotkey_Flag_Cmd | - Hotkey_Flag_Alt | - Hotkey_Flag_Shift | - Hotkey_Flag_Control) + Hotkey_Flag_Alt = (1 << 0), + Hotkey_Flag_LAlt = (1 << 1), + Hotkey_Flag_RAlt = (1 << 2), + Hotkey_Flag_Shift = (1 << 3), + Hotkey_Flag_LShift = (1 << 4), + Hotkey_Flag_RShift = (1 << 5), + Hotkey_Flag_Cmd = (1 << 6), + Hotkey_Flag_LCmd = (1 << 7), + Hotkey_Flag_RCmd = (1 << 8), + Hotkey_Flag_Control = (1 << 9), + Hotkey_Flag_LControl = (1 << 10), + Hotkey_Flag_RControl = (1 << 11), + Hotkey_Flag_Fn = (1 << 12), + Hotkey_Flag_Passthrough = (1 << 13), + Hotkey_Flag_Hyper = (Hotkey_Flag_Cmd | + Hotkey_Flag_Alt | + Hotkey_Flag_Shift | + Hotkey_Flag_Control) }; struct hotkey diff --git a/src/parse.c b/src/parse.c index 3899fb0..ab9add5 100644 --- a/src/parse.c +++ b/src/parse.c @@ -122,7 +122,7 @@ internal enum hotkey_flag modifier_flags_value[] = Hotkey_Flag_Shift, Hotkey_Flag_LShift, Hotkey_Flag_RShift, Hotkey_Flag_Cmd, Hotkey_Flag_LCmd, Hotkey_Flag_RCmd, Hotkey_Flag_Control, Hotkey_Flag_LControl, Hotkey_Flag_RControl, - Hotkey_Flag_Hyper, + Hotkey_Flag_Fn, Hotkey_Flag_Hyper, }; internal uint32_t diff --git a/src/tokenize.h b/src/tokenize.h index ea770a8..4f87292 100644 --- a/src/tokenize.h +++ b/src/tokenize.h @@ -8,7 +8,7 @@ static const char *modifier_flags_str[] = "shift", "lshift", "rshift", "cmd", "lcmd", "rcmd", "ctrl", "lctrl", "rctrl", - "hyper", + "fn", "hyper", }; static const char *literal_keycode_str[] = |