Added keybind submaps

This commit is contained in:
vaxerski 2022-06-22 20:23:20 +02:00
parent bd41776a5a
commit 19d94b87ab
4 changed files with 36 additions and 2 deletions

View file

@ -30,6 +30,7 @@ CKeybindManager::CKeybindManager() {
m_mDispatchers["resizeactive"] = resizeActive;
m_mDispatchers["cyclenext"] = circleNext;
m_mDispatchers["focuswindowbyclass"] = focusWindowByClass;
m_mDispatchers["submap"] = setSubmap;
}
void CKeybindManager::addKeybind(SKeybind kb) {
@ -76,7 +77,7 @@ bool CKeybindManager::handleKeybinds(const uint32_t& modmask, const xkb_keysym_t
Debug::log(LOG, "Keybind handling only locked (inhibitor)");
for (auto& k : m_lKeybinds) {
if (modmask != k.modmask || (g_pCompositor->m_sSeat.exclusiveClient && !k.locked))
if (modmask != k.modmask || (g_pCompositor->m_sSeat.exclusiveClient && !k.locked) || k.submap != m_szCurrentSelectedSubmap)
continue;
// oMg such performance hit!!11!
@ -935,3 +936,21 @@ void CKeybindManager::focusWindowByClass(std::string clazz) {
break;
}
}
void CKeybindManager::setSubmap(std::string submap) {
if (submap == "reset" || submap == "") {
m_szCurrentSelectedSubmap = "";
Debug::log(LOG, "Reset active submap to the default one.");
return;
}
for (auto& k : g_pKeybindManager->m_lKeybinds) {
if (k.submap == submap) {
m_szCurrentSelectedSubmap = submap;
Debug::log(LOG, "Changed keybind submap to %s", submap.c_str());
return;
}
}
Debug::log(ERR, "Cannot set submap %s, submap doesn't exist (wasn't registered!)", submap.c_str());
}

View file

@ -12,6 +12,7 @@ struct SKeybind {
std::string handler = "";
std::string arg = "";
bool locked = false;
std::string submap = "";
};
class CKeybindManager {
@ -29,6 +30,8 @@ public:
private:
std::list<SKeybind> m_lKeybinds;
inline static std::string m_szCurrentSelectedSubmap = "";
bool handleInternalKeybinds(xkb_keysym_t);
// -------------- Dispatchers -------------- //
@ -57,6 +60,7 @@ private:
static void resizeActive(std::string);
static void circleNext(std::string);
static void focusWindowByClass(std::string);
static void setSubmap(std::string);
friend class CCompositor;
};