diff options
author | koekeishiya <aasvi93@hotmail.com> | 2017-08-08 13:56:57 +0200 |
---|---|---|
committer | koekeishiya <aasvi93@hotmail.com> | 2017-08-08 13:56:57 +0200 |
commit | a58d0c8980560bde4c2ab6635584ed830fd06eed (patch) | |
tree | e5ba46f1c93d4e56ae8c6787e053ce0e0dea99fb /src/skhd.c | |
parent | 03b74b16c003137e123032ea70f392533ce87355 (diff) | |
download | skhd-a58d0c8980560bde4c2ab6635584ed830fd06eed.tar.gz skhd-a58d0c8980560bde4c2ab6635584ed830fd06eed.zip |
linked list -> hashmap; optimizations
Diffstat (limited to '')
-rw-r--r-- | src/skhd.c | 27 |
1 files changed, 21 insertions, 6 deletions
@@ -8,6 +8,9 @@ #include <Carbon/Carbon.h> +#define HASHTABLE_IMPLEMENTATION +#include "hashtable.h" + #include "hotload.h" #include "event_tap.h" #include "locale.h" @@ -29,7 +32,7 @@ extern bool CGSIsSecureEventInputSet(); internal unsigned major_version = 0; internal unsigned minor_version = 0; internal unsigned patch_version = 4; -internal struct hotkey *hotkeys; +internal struct table hotkey_map; internal char *config_file; internal void @@ -77,8 +80,11 @@ internal HOTLOADER_CALLBACK(hotloader_handler) * Filter the duplicated event or something ?? */ struct parser parser; if(parser_init(&parser, absolutepath)) { - free_hotkeys(hotkeys); - hotkeys = parse_config(&parser); + free_hotkeys(&hotkey_map); + parse_config(&parser, &hotkey_map); + if(parser.error) { + free_hotkeys(&hotkey_map); + } parser_destroy(&parser); } } @@ -100,8 +106,9 @@ internal EVENT_TAP_CALLBACK(key_handler) { uint32_t flags = CGEventGetFlags(event); uint32_t key = CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode); - struct hotkey eventkey = cgevent_to_hotkey(flags, key); - if(find_and_exec_hotkey(&eventkey, hotkeys)) { + struct hotkey eventkey = { .flags = 0, .key = key }; + cgeventflags_to_hotkeyflags(flags, &eventkey); + if(find_and_exec_hotkey(&eventkey, &hotkey_map)) { return NULL; } } break; @@ -194,9 +201,17 @@ int main(int argc, char **argv) set_config_path(); printf("skhd: using config '%s'\n", config_file); + table_init(&hotkey_map, + 128, + (table_hash_func) hash_hotkey, + (table_compare_func) same_hotkey); + struct parser parser; if(parser_init(&parser, config_file)) { - hotkeys = parse_config(&parser); + parse_config(&parser, &hotkey_map); + if(parser.error) { + free_hotkeys(&hotkey_map); + } parser_destroy(&parser); } else { error("skhd: could not open file '%s'\n", config_file); |