diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index bf11b1bf..3f26594a 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -82,6 +82,7 @@ void CConfigManager::setDefaultVars() { configValues["misc:disable_autoreload"].intValue = 0; configValues["misc:enable_swallow"].intValue = 0; configValues["misc:swallow_regex"].strValue = STRVAL_EMPTY; + configValues["misc:swallow_exception_regex"].strValue = STRVAL_EMPTY; configValues["misc:focus_on_activate"].intValue = 0; configValues["misc:no_direct_scanout"].intValue = 1; configValues["misc:hide_cursor_on_touch"].intValue = 1; diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index ca5d88c6..1c95a1e5 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -40,11 +40,12 @@ void setAnimToMove(void* data) { void Events::listener_mapWindow(void* owner, void* data) { CWindow* PWINDOW = (CWindow*)owner; - static auto* const PINACTIVEALPHA = &g_pConfigManager->getConfigValuePtr("decoration:inactive_opacity")->floatValue; - static auto* const PACTIVEALPHA = &g_pConfigManager->getConfigValuePtr("decoration:active_opacity")->floatValue; - static auto* const PDIMSTRENGTH = &g_pConfigManager->getConfigValuePtr("decoration:dim_strength")->floatValue; - static auto* const PSWALLOW = &g_pConfigManager->getConfigValuePtr("misc:enable_swallow")->intValue; - static auto* const PSWALLOWREGEX = &g_pConfigManager->getConfigValuePtr("misc:swallow_regex")->strValue; + static auto* const PINACTIVEALPHA = &g_pConfigManager->getConfigValuePtr("decoration:inactive_opacity")->floatValue; + static auto* const PACTIVEALPHA = &g_pConfigManager->getConfigValuePtr("decoration:active_opacity")->floatValue; + static auto* const PDIMSTRENGTH = &g_pConfigManager->getConfigValuePtr("decoration:dim_strength")->floatValue; + static auto* const PSWALLOW = &g_pConfigManager->getConfigValuePtr("misc:enable_swallow")->intValue; + static auto* const PSWALLOWREGEX = &g_pConfigManager->getConfigValuePtr("misc:swallow_regex")->strValue; + static auto* const PSWALLOWEXREGEX = &g_pConfigManager->getConfigValuePtr("misc:swallow_exception_regex")->strValue; auto PMONITOR = g_pCompositor->m_pLastMonitor; const auto PWORKSPACE = @@ -553,8 +554,10 @@ void Events::listener_mapWindow(void* owner, void* data) { } if (finalFound) { - // check if it's the window we want - if (std::regex_match(g_pXWaylandManager->getAppIDClass(finalFound), rgx)) { + std::regex exc(*PSWALLOWEXREGEX); + // check if it's the window we want & not exempt from getting swallowed + if (std::regex_match(g_pXWaylandManager->getAppIDClass(finalFound), rgx) && + !std::regex_match(g_pXWaylandManager->getTitle(finalFound), exc)) { // swallow PWINDOW->m_pSwallowed = finalFound;