diff options
Diffstat (limited to 'src/hotkey.c')
-rw-r--r-- | src/hotkey.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/hotkey.c b/src/hotkey.c index 2de3a10..a6d03b9 100644 --- a/src/hotkey.c +++ b/src/hotkey.c @@ -1,5 +1,4 @@ #include "hotkey.h" -#include <stdlib.h> #define internal static #define local_persist static @@ -124,23 +123,24 @@ bool find_and_exec_hotkey(struct hotkey *eventkey, struct table *mode_map, struc void free_mode_map(struct table *mode_map) { + struct hotkey **freed_pointers = NULL; + int mode_count; void **modes = table_reset(mode_map, &mode_count); - if (!mode_count) return; - - struct hotkey **freed_pointers = NULL; for (int mode_index = 0; mode_index < mode_count; ++mode_index) { struct mode *mode = (struct mode *) modes[mode_index]; + int hk_count; void **hotkeys = table_reset(&mode->hotkey_map, &hk_count); - for (int hk_index = 0; hk_index < hk_count; ++hk_index) { struct hotkey *hotkey = (struct hotkey *) hotkeys[hk_index]; + for (int i = 0; i < buf_len(freed_pointers); ++i) { if (freed_pointers[i] == hotkey) { continue; } } + buf_push(freed_pointers, hotkey); buf_free(hotkey->mode_list); free(hotkey->command); |