mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-22 19:45:58 +01:00
Added keybind submaps
This commit is contained in:
parent
bd41776a5a
commit
19d94b87ab
4 changed files with 36 additions and 2 deletions
|
@ -450,7 +450,7 @@ void CConfigManager::handleBind(const std::string& command, const std::string& v
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KEY != "")
|
if (KEY != "")
|
||||||
g_pKeybindManager->addKeybind(SKeybind{KEY, MOD, HANDLER, COMMAND, locked});
|
g_pKeybindManager->addKeybind(SKeybind{KEY, MOD, HANDLER, COMMAND, locked, m_szCurrentSubmap});
|
||||||
}
|
}
|
||||||
|
|
||||||
void CConfigManager::handleUnbind(const std::string& command, const std::string& value) {
|
void CConfigManager::handleUnbind(const std::string& command, const std::string& value) {
|
||||||
|
@ -507,6 +507,13 @@ void CConfigManager::handleDefaultWorkspace(const std::string& command, const st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CConfigManager::handleSubmap(const std::string& command, const std::string& submap) {
|
||||||
|
if (submap == "reset")
|
||||||
|
m_szCurrentSubmap = "";
|
||||||
|
else
|
||||||
|
m_szCurrentSubmap = submap;
|
||||||
|
}
|
||||||
|
|
||||||
void CConfigManager::handleSource(const std::string& command, const std::string& rawpath) {
|
void CConfigManager::handleSource(const std::string& command, const std::string& rawpath) {
|
||||||
static const char* const ENVHOME = getenv("HOME");
|
static const char* const ENVHOME = getenv("HOME");
|
||||||
|
|
||||||
|
@ -587,6 +594,7 @@ std::string CConfigManager::parseKeyword(const std::string& COMMAND, const std::
|
||||||
else if (COMMAND == "bezier") handleBezier(COMMAND, VALUE);
|
else if (COMMAND == "bezier") handleBezier(COMMAND, VALUE);
|
||||||
else if (COMMAND == "animation") handleAnimation(COMMAND, VALUE);
|
else if (COMMAND == "animation") handleAnimation(COMMAND, VALUE);
|
||||||
else if (COMMAND == "source") handleSource(COMMAND, VALUE);
|
else if (COMMAND == "source") handleSource(COMMAND, VALUE);
|
||||||
|
else if (COMMAND == "submap") handleSubmap(COMMAND, VALUE);
|
||||||
else
|
else
|
||||||
configSetValueSafe(currentCategory + (currentCategory == "" ? "" : ":") + COMMAND, VALUE);
|
configSetValueSafe(currentCategory + (currentCategory == "" ? "" : ":") + COMMAND, VALUE);
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,8 @@ private:
|
||||||
|
|
||||||
std::string parseError = ""; // For storing a parse error to display later
|
std::string parseError = ""; // For storing a parse error to display later
|
||||||
|
|
||||||
|
std::string m_szCurrentSubmap = ""; // For storing the current keybind submap
|
||||||
|
|
||||||
bool isFirstLaunch = true; // For exec-once
|
bool isFirstLaunch = true; // For exec-once
|
||||||
|
|
||||||
std::deque<SMonitorRule> m_dMonitorRules;
|
std::deque<SMonitorRule> m_dMonitorRules;
|
||||||
|
@ -113,6 +115,7 @@ private:
|
||||||
void handleBezier(const std::string&, const std::string&);
|
void handleBezier(const std::string&, const std::string&);
|
||||||
void handleAnimation(const std::string&, const std::string&);
|
void handleAnimation(const std::string&, const std::string&);
|
||||||
void handleSource(const std::string&, const std::string&);
|
void handleSource(const std::string&, const std::string&);
|
||||||
|
void handleSubmap(const std::string&, const std::string&);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline std::unique_ptr<CConfigManager> g_pConfigManager;
|
inline std::unique_ptr<CConfigManager> g_pConfigManager;
|
|
@ -30,6 +30,7 @@ CKeybindManager::CKeybindManager() {
|
||||||
m_mDispatchers["resizeactive"] = resizeActive;
|
m_mDispatchers["resizeactive"] = resizeActive;
|
||||||
m_mDispatchers["cyclenext"] = circleNext;
|
m_mDispatchers["cyclenext"] = circleNext;
|
||||||
m_mDispatchers["focuswindowbyclass"] = focusWindowByClass;
|
m_mDispatchers["focuswindowbyclass"] = focusWindowByClass;
|
||||||
|
m_mDispatchers["submap"] = setSubmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CKeybindManager::addKeybind(SKeybind kb) {
|
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)");
|
Debug::log(LOG, "Keybind handling only locked (inhibitor)");
|
||||||
|
|
||||||
for (auto& k : m_lKeybinds) {
|
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;
|
continue;
|
||||||
|
|
||||||
// oMg such performance hit!!11!
|
// oMg such performance hit!!11!
|
||||||
|
@ -935,3 +936,21 @@ void CKeybindManager::focusWindowByClass(std::string clazz) {
|
||||||
break;
|
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());
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,7 @@ struct SKeybind {
|
||||||
std::string handler = "";
|
std::string handler = "";
|
||||||
std::string arg = "";
|
std::string arg = "";
|
||||||
bool locked = false;
|
bool locked = false;
|
||||||
|
std::string submap = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
class CKeybindManager {
|
class CKeybindManager {
|
||||||
|
@ -29,6 +30,8 @@ public:
|
||||||
private:
|
private:
|
||||||
std::list<SKeybind> m_lKeybinds;
|
std::list<SKeybind> m_lKeybinds;
|
||||||
|
|
||||||
|
inline static std::string m_szCurrentSelectedSubmap = "";
|
||||||
|
|
||||||
bool handleInternalKeybinds(xkb_keysym_t);
|
bool handleInternalKeybinds(xkb_keysym_t);
|
||||||
|
|
||||||
// -------------- Dispatchers -------------- //
|
// -------------- Dispatchers -------------- //
|
||||||
|
@ -57,6 +60,7 @@ private:
|
||||||
static void resizeActive(std::string);
|
static void resizeActive(std::string);
|
||||||
static void circleNext(std::string);
|
static void circleNext(std::string);
|
||||||
static void focusWindowByClass(std::string);
|
static void focusWindowByClass(std::string);
|
||||||
|
static void setSubmap(std::string);
|
||||||
|
|
||||||
friend class CCompositor;
|
friend class CCompositor;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue