summaryrefslogtreecommitdiff
path: root/src/managers/KeybindManager.cpp
diff options
context:
space:
mode:
authorDakes <dakes@vivaldi.net>2022-07-01 16:24:37 +0200
committerDakes <dakes@vivaldi.net>2022-07-01 16:24:37 +0200
commit2225dca57665059102cd0225b8843a1d90a4f076 (patch)
tree44a0073d24b36e556374713113fcf32b5faca894 /src/managers/KeybindManager.cpp
parent868e0f48d023714a205acf071594983d22d1478c (diff)
Add focusWindow dispatcher. Takes titles & classes
Removed focusWindowByClass function, replaced with focusWindow. Either takes a class matching regex, or a title matching one, beginning with "title:" Kept the focuswindowbyclass dispatcher identifier to stay backwards compatible with existing configs.
Diffstat (limited to 'src/managers/KeybindManager.cpp')
-rw-r--r--src/managers/KeybindManager.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index f5554f57..cb091c9f 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -30,7 +30,8 @@ CKeybindManager::CKeybindManager() {
m_mDispatchers["resizeactive"] = resizeActive;
m_mDispatchers["moveactive"] = moveActive;
m_mDispatchers["cyclenext"] = circleNext;
- m_mDispatchers["focuswindowbyclass"] = focusWindowByClass;
+ m_mDispatchers["focuswindowbyclass"] = focusWindow;
+ m_mDispatchers["focuswindow"] = focusWindow;
m_mDispatchers["submap"] = setSubmap;
}
@@ -1017,17 +1018,28 @@ void CKeybindManager::circleNext(std::string) {
wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, MIDPOINT.x, MIDPOINT.y);
}
-void CKeybindManager::focusWindowByClass(std::string clazz) {
- std::regex classCheck(clazz);
+void CKeybindManager::focusWindow(std::string regexp) {
+ bool titleRegex = false;
+ std::regex regexCheck(regexp);
+ if (regexp.find("title:") == 0) {
+ titleRegex = true;
+ regexCheck = std::regex(regexp.substr(6));
+ }
for (auto& w : g_pCompositor->m_vWindows) {
if (!w->m_bIsMapped || w->m_bHidden)
continue;
- const auto windowClass = g_pXWaylandManager->getAppIDClass(w.get());
-
- if (!std::regex_search(windowClass, classCheck))
- continue;
+ if (titleRegex) {
+ const auto windowTitle = g_pXWaylandManager->getTitle(w.get());
+ if (!std::regex_search(windowTitle, regexCheck))
+ continue;
+ }
+ else {
+ const auto windowClass = g_pXWaylandManager->getAppIDClass(w.get());
+ if (!std::regex_search(windowClass, regexCheck))
+ continue;
+ }
Debug::log(LOG, "Focusing to window name: %s", w->m_szTitle.c_str());