From aaf223effd868c60f9dd30e3d7cce39732ea3763 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Fri, 11 Aug 2023 12:53:46 -0700 Subject: [PATCH 1/4] scope `spotclean` to dwarfmode --- data/init/dfhack.keybindings.init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/init/dfhack.keybindings.init b/data/init/dfhack.keybindings.init index f677ca301..22dc931f4 100644 --- a/data/init/dfhack.keybindings.init +++ b/data/init/dfhack.keybindings.init @@ -38,7 +38,7 @@ keybinding add Ctrl-V@dwarfmode digv keybinding add Ctrl-Shift-V@dwarfmode "digv x" # clean the selected tile of blood etc -keybinding add Ctrl-C spotclean +keybinding add Ctrl-C@dwarfmode spotclean # destroy the selected item keybinding add Ctrl-K@dwarfmode autodump-destroy-item From fa22f9521a41cb5b8621a8f62b53ceb852d294a7 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Fri, 11 Aug 2023 12:54:18 -0700 Subject: [PATCH 2/4] never suppress sdl key events when modifier keys are active --- library/Core.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/library/Core.cpp b/library/Core.cpp index 9df45a869..ec64e6231 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -2400,9 +2400,13 @@ bool Core::DFH_SDL_Event(SDL_Event* ev) DEBUG(keybinding).print("key down: sym=%d (%c)\n", sym, sym); bool handled = SelectHotkey(sym, modstate); if (handled) { + hotkey_states[sym] = true; + if (modstate & (DFH_MOD_CTRL | DFH_MOD_ALT)) { + DEBUG(keybinding).print("modifier key detected; not inhibiting SDL key down event\n"); + return false; + } DEBUG(keybinding).print("%sinhibiting SDL key down event\n", suppress_duplicate_keyboard_events ? "" : "not "); - hotkey_states[sym] = true; return suppress_duplicate_keyboard_events; } } @@ -2414,7 +2418,11 @@ bool Core::DFH_SDL_Event(SDL_Event* ev) } else if (ev->type == SDL_TEXTINPUT) { auto &te = ev->text; - DEBUG(keybinding).print("text input: '%s'\n", te.text); + DEBUG(keybinding).print("text input: '%s' (modifiers: %s%s%s)\n", + te.text, + modstate & DFH_MOD_SHIFT ? "Shift" : "", + modstate & DFH_MOD_CTRL ? "Ctrl" : "", + modstate & DFH_MOD_ALT ? "Alt" : ""); if (strlen(te.text) == 1 && hotkey_states[te.text[0]]) { DEBUG(keybinding).print("%sinhibiting SDL text event\n", suppress_duplicate_keyboard_events ? "" : "not "); From 8d8c139ccb652bfc2c802ede4b2a66f598ab953e Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Fri, 11 Aug 2023 12:54:49 -0700 Subject: [PATCH 3/4] don't add keys as text when ctrl or alt are pressed --- library/modules/Screen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/modules/Screen.cpp b/library/modules/Screen.cpp index 2ee91a089..9cc7104d8 100644 --- a/library/modules/Screen.cpp +++ b/library/modules/Screen.cpp @@ -589,7 +589,7 @@ std::set Screen::normalize_text_keys(const std::set combined_keys; std::copy_if(keys.begin(), keys.end(), std::inserter(combined_keys, combined_keys.begin()), [](df::interface_key k){ return k <= df::interface_key::STRING_A000 || k > df::interface_key::STRING_A255; } ); - if (df::global::enabler->last_text_input[0]) { + if (!(Core::getInstance().getModstate() & (DFH_MOD_CTRL | DFH_MOD_ALT)) && df::global::enabler->last_text_input[0]) { char c = df::global::enabler->last_text_input[0]; df::interface_key key = charToKey(c); DEBUG(screen).print("adding character %c as interface key %ld\n", c, key); From a6ec77b584393e886ec9e46293c5c17d929d2953 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Fri, 11 Aug 2023 12:58:44 -0700 Subject: [PATCH 4/4] update changelog --- docs/changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog.txt b/docs/changelog.txt index 45d0e4d2d..58caf80ee 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -58,6 +58,7 @@ Template for new versions: ## Fixes - Core: properly reload scripts in mods when a world is unloaded and immediately loaded again +- Core: fix text getting added to DFHack text entry widgets when Alt- or Ctrl- keys are hit ## Misc Improvements - Surround DFHack-specific UI elements with square brackets instead of red-yellow blocks for better readability