From 8b2281e09382efd871c6aa4d24e56b3d16926ee1 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Mon, 9 Mar 2020 21:05:45 -0700 Subject: [PATCH] Bindings only do strict-matching now so ordering is less important and less confusing --- custom/4coder_command_map.cpp | 25 ++++++++++++++++++------- custom/4coder_default_map.cpp | 2 +- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/custom/4coder_command_map.cpp b/custom/4coder_command_map.cpp index 0d0ae016..eec9e109 100644 --- a/custom/4coder_command_map.cpp +++ b/custom/4coder_command_map.cpp @@ -208,9 +208,11 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ } else if (map != 0){ b32 do_table_lookup = false; - Input_Modifier_Set *mods = 0; + Input_Modifier_Set *mod_set = 0; u64 key = 0; + Key_Code skip_self_mod = 0; + // TODO(allen): extract and make sure we only do this once for recursive version. switch (event->kind){ case InputEventKind_TextInsert: { @@ -221,28 +223,29 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ { key = mapping__key(InputEventKind_KeyStroke, event->key.code); do_table_lookup = true; - mods = &event->key.modifiers; + mod_set = &event->key.modifiers; + skip_self_mod = event->key.code; }break; case InputEventKind_MouseButton: { key = mapping__key(InputEventKind_MouseButton, event->mouse.code); do_table_lookup = true; - mods = &event->mouse.modifiers; + mod_set = &event->mouse.modifiers; }break; case InputEventKind_MouseWheel: { key = mapping__key(InputEventKind_MouseWheel, 0); do_table_lookup = true; - mods = &event->mouse_wheel.modifiers; + mod_set = &event->mouse_wheel.modifiers; }break; case InputEventKind_MouseMove: { key = mapping__key(InputEventKind_MouseMove, 0); do_table_lookup = true; - mods = &event->mouse_move.modifiers; + mod_set = &event->mouse_move.modifiers; }break; case InputEventKind_Core: @@ -258,7 +261,7 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ u64 val = 0; table_read(&map->event_code_to_binding_list, lookup, &val); Command_Binding_List *list = (Command_Binding_List*)IntAsPtr(val); - if (mods != 0){ + if (mod_set != 0){ for (SNode *node = list->first; node != 0; node = node->next){ @@ -268,7 +271,15 @@ map_get_binding_non_recursive(Command_Map *map, Input_Event *event){ i32 binding_mod_count = binding_mod_set->count; Key_Code *binding_mods = binding_mod_set->mods; for (i32 i = 0; i < binding_mod_count; i += 1){ - if (!has_modifier(mods, binding_mods[i])){ + if (!has_modifier(mod_set, binding_mods[i])){ + is_a_match = false; + break; + } + } + i32 mod_count = mod_set->count; + Key_Code *mods = mod_set->mods; + for (i32 i = 0; i < mod_count; i += 1){ + if (mods[i] != skip_self_mod && !has_modifier(binding_mod_set, mods[i])){ is_a_match = false; break; } diff --git a/custom/4coder_default_map.cpp b/custom/4coder_default_map.cpp index e39b732a..b186a45c 100644 --- a/custom/4coder_default_map.cpp +++ b/custom/4coder_default_map.cpp @@ -37,6 +37,7 @@ setup_default_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id) Bind(command_lister, KeyCode_X, KeyCode_Alt); Bind(project_command_lister, KeyCode_X, KeyCode_Alt, KeyCode_Shift); Bind(list_all_functions_current_buffer_lister, KeyCode_I, KeyCode_Control, KeyCode_Shift); + Bind(exit_4coder, KeyCode_F4, KeyCode_Alt); Bind(project_fkey_command, KeyCode_F1); Bind(project_fkey_command, KeyCode_F2); Bind(project_fkey_command, KeyCode_F3); @@ -53,7 +54,6 @@ setup_default_mapping(Mapping *mapping, i64 global_id, i64 file_id, i64 code_id) Bind(project_fkey_command, KeyCode_F14); Bind(project_fkey_command, KeyCode_F15); Bind(project_fkey_command, KeyCode_F16); - Bind(exit_4coder, KeyCode_F4, KeyCode_Alt); BindMouseWheel(mouse_wheel_scroll); BindMouseWheel(mouse_wheel_change_face_size, KeyCode_Control);