mirror of
https://github.com/hyprwm/Hyprland.git
synced 2024-09-11 21:27:20 +03:00
config: Expand on window matching (#5518)
* Expand on window matching * Requested changes
This commit is contained in:
parent
f47c89d495
commit
e69bc5b870
@ -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)
|
||||
|
@ -32,9 +32,12 @@ struct SKeybind {
|
||||
|
||||
enum eFocusWindowMode {
|
||||
MODE_CLASS_REGEX = 0,
|
||||
MODE_INITIAL_CLASS_REGEX,
|
||||
MODE_TITLE_REGEX,
|
||||
MODE_INITIAL_TITLE_REGEX,
|
||||
MODE_ADDRESS,
|
||||
MODE_PID
|
||||
MODE_PID,
|
||||
MODE_ACTIVE_WINDOW
|
||||
};
|
||||
|
||||
struct SPressedKeyWithMods {
|
||||
|
Loading…
Reference in New Issue
Block a user