From d599513d4a72d66ac62ffdedc41d6653fa81b39e Mon Sep 17 00:00:00 2001 From: ItsOhen Date: Sat, 11 Oct 2025 02:40:18 +0200 Subject: config: add automatic closing to submaps (#11760) * Allow submaps to auto reset to parent. * Really should be a stack instead. If hyprlang would allow for { } i would be so happy. * Fixed: Somewhat better way to do it.. Lets you define what submap you want to go to instead. * squash! Fixed: Somewhat better way to do it.. * God i hate cf.. * Force clang-format on the whole thing.. * Removed {}. * Added tests Tests and reset fix. --- src/managers/KeybindManager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/managers/KeybindManager.cpp') diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 81c88d63..c9008c2f 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -643,7 +643,7 @@ eMultiKeyCase CKeybindManager::mkBindMatches(const SP keybind) { return mkKeysymSetMatches(keybind->sMkKeys, m_mkKeys); } -std::string CKeybindManager::getCurrentSubmap() { +SSubmap CKeybindManager::getCurrentSubmap() { return m_currentSelectedSubmap; } @@ -795,6 +795,8 @@ SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, const SP found = true; // don't process keybinds on submap change. break; } + if (k->handler != "submap" && !k->submap.reset.empty()) + setSubmap(k->submap.reset); } if (pressed && k->repeat) { @@ -2390,19 +2392,19 @@ SDispatchResult CKeybindManager::toggleSwallow(std::string args) { SDispatchResult CKeybindManager::setSubmap(std::string submap) { if (submap == "reset" || submap.empty()) { - m_currentSelectedSubmap = ""; + m_currentSelectedSubmap.name = ""; Debug::log(LOG, "Reset active submap to the default one."); g_pEventManager->postEvent(SHyprIPCEvent{"submap", ""}); - EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap); + EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap.name); return {}; } for (const auto& k : g_pKeybindManager->m_keybinds) { - if (k->submap == submap) { - m_currentSelectedSubmap = submap; + if (k->submap.name == submap) { + m_currentSelectedSubmap.name = submap; Debug::log(LOG, "Changed keybind submap to {}", submap); g_pEventManager->postEvent(SHyprIPCEvent{"submap", submap}); - EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap); + EMIT_HOOK_EVENT("submap", m_currentSelectedSubmap.name); return {}; } } -- cgit v1.2.3