summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorSoSeDiK <mrsosedik@gmail.com>2024-04-21 17:19:59 +0300
committerGitHub <noreply@github.com>2024-04-21 15:19:59 +0100
commite69bc5b87042b27e4f29601346ddbcac364d38cf (patch)
tree804995c889eba49584e62459f4f79f3a9667e849 /src/Compositor.cpp
parentf47c89d495bbd819370875081325bbf04746603e (diff)
config: Expand on window matching (#5518)
* Expand on window matching * Requested changes
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 157a70d6..824d7335 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -2410,13 +2410,24 @@ void CCompositor::scheduleFrameForMonitor(CMonitor* pMonitor) {
}
CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
+ if (regexp.starts_with("active"))
+ return m_pLastWindow;
+
eFocusWindowMode mode = MODE_CLASS_REGEX;
std::regex regexCheck(regexp);
std::string matchCheck;
- if (regexp.starts_with("title:")) {
+ if (regexp.starts_with("class:")) {
+ regexCheck = std::regex(regexp.substr(6));
+ } else if (regexp.starts_with("initialclass:")) {
+ mode = MODE_INITIAL_CLASS_REGEX;
+ regexCheck = std::regex(regexp.substr(13));
+ } else if (regexp.starts_with("title:")) {
mode = MODE_TITLE_REGEX;
regexCheck = std::regex(regexp.substr(6));
+ } else if (regexp.starts_with("initialtitle:")) {
+ mode = MODE_INITIAL_TITLE_REGEX;
+ regexCheck = std::regex(regexp.substr(13));
} else if (regexp.starts_with("address:")) {
mode = MODE_ADDRESS;
matchCheck = regexp.substr(8);
@@ -2447,7 +2458,13 @@ CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
switch (mode) {
case MODE_CLASS_REGEX: {
const auto windowClass = g_pXWaylandManager->getAppIDClass(w.get());
- if (!std::regex_search(g_pXWaylandManager->getAppIDClass(w.get()), regexCheck))
+ if (!std::regex_search(windowClass, regexCheck))
+ continue;
+ break;
+ }
+ case MODE_INITIAL_CLASS_REGEX: {
+ const auto initialWindowClass = w->m_szInitialClass;
+ if (!std::regex_search(initialWindowClass, regexCheck))
continue;
break;
}
@@ -2457,6 +2474,12 @@ CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
continue;
break;
}
+ case MODE_INITIAL_TITLE_REGEX: {
+ const auto initialWindowTitle = w->m_szInitialTitle;
+ if (!std::regex_search(initialWindowTitle, regexCheck))
+ continue;
+ break;
+ }
case MODE_ADDRESS: {
std::string addr = std::format("0x{:x}", (uintptr_t)w.get());
if (matchCheck != addr)