config: Expand on window matching (#5518)

* Expand on window matching

* Requested changes
This commit is contained in:
SoSeDiK 2024-04-21 17:19:59 +03:00 committed by GitHub
parent f47c89d495
commit e69bc5b870
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 29 additions and 3 deletions

View file

@ -2410,13 +2410,24 @@ void CCompositor::scheduleFrameForMonitor(CMonitor* pMonitor) {
} }
CWindow* CCompositor::getWindowByRegex(const std::string& regexp) { CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
if (regexp.starts_with("active"))
return m_pLastWindow;
eFocusWindowMode mode = MODE_CLASS_REGEX; eFocusWindowMode mode = MODE_CLASS_REGEX;
std::regex regexCheck(regexp); std::regex regexCheck(regexp);
std::string matchCheck; 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; mode = MODE_TITLE_REGEX;
regexCheck = std::regex(regexp.substr(6)); 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:")) { } else if (regexp.starts_with("address:")) {
mode = MODE_ADDRESS; mode = MODE_ADDRESS;
matchCheck = regexp.substr(8); matchCheck = regexp.substr(8);
@ -2447,7 +2458,13 @@ CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
switch (mode) { switch (mode) {
case MODE_CLASS_REGEX: { case MODE_CLASS_REGEX: {
const auto windowClass = g_pXWaylandManager->getAppIDClass(w.get()); 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; continue;
break; break;
} }
@ -2457,6 +2474,12 @@ CWindow* CCompositor::getWindowByRegex(const std::string& regexp) {
continue; continue;
break; break;
} }
case MODE_INITIAL_TITLE_REGEX: {
const auto initialWindowTitle = w->m_szInitialTitle;
if (!std::regex_search(initialWindowTitle, regexCheck))
continue;
break;
}
case MODE_ADDRESS: { case MODE_ADDRESS: {
std::string addr = std::format("0x{:x}", (uintptr_t)w.get()); std::string addr = std::format("0x{:x}", (uintptr_t)w.get());
if (matchCheck != addr) if (matchCheck != addr)

View file

@ -32,9 +32,12 @@ struct SKeybind {
enum eFocusWindowMode { enum eFocusWindowMode {
MODE_CLASS_REGEX = 0, MODE_CLASS_REGEX = 0,
MODE_INITIAL_CLASS_REGEX,
MODE_TITLE_REGEX, MODE_TITLE_REGEX,
MODE_INITIAL_TITLE_REGEX,
MODE_ADDRESS, MODE_ADDRESS,
MODE_PID MODE_PID,
MODE_ACTIVE_WINDOW
}; };
struct SPressedKeyWithMods { struct SPressedKeyWithMods {