diff options
| author | Epilepsy Gatherings <73647246+phonetic112@users.noreply.github.com> | 2024-03-07 21:24:44 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-08 02:24:44 +0000 |
| commit | e52d3fa8522ff83813a9006d4bf46b3057f4a4cc (patch) | |
| tree | 31b7e16e9a76718fe6cb5b6b2c19948ef6f946b9 /src/Window.cpp | |
| parent | ceecdd0fd511122b7ff4f477a606880fe6599100 (diff) | |
windowrules: Make min/maxsize rules dynamic (#4775)
* rebase
* simplify and remove prop
* Stuff
- add back win prop
- change minsize defaults
- change request formatting for setprop
* style fix
* remove empty line
* change defaults
* redo string to vec
* remove redundant parsing
* change to vec
* support commas
* remove static rules
* take out garbage
* format
* don't allow commas and resize on setprop
* use isNumber
Diffstat (limited to 'src/Window.cpp')
| -rw-r--r-- | src/Window.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/Window.cpp b/src/Window.cpp index 41562291..85608f6f 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -687,6 +687,22 @@ void CWindow::applyDynamicRule(const SWindowRule& r) { m_eIdleInhibitMode = IDLEINHIBIT_FULLSCREEN; else Debug::log(ERR, "Rule idleinhibit: unknown mode {}", IDLERULE); + } else if (r.szRule.starts_with("maxsize")) { + try { + m_sAdditionalConfigData.maxSize = configStringToVector2D(r.szRule.substr(8)); + m_vRealSize = Vector2D(std::min((double)m_sAdditionalConfigData.maxSize.toUnderlying().x, m_vRealSize.goal().x), + std::min((double)m_sAdditionalConfigData.maxSize.toUnderlying().y, m_vRealSize.goal().y)); + g_pXWaylandManager->setWindowSize(this, m_vRealSize.goal()); + setHidden(false); + } catch (std::exception& e) { Debug::log(ERR, "maxsize rule \"{}\" failed with: {}", r.szRule, e.what()); } + } else if (r.szRule.starts_with("minsize")) { + try { + m_sAdditionalConfigData.minSize = configStringToVector2D(r.szRule.substr(8)); + m_vRealSize = Vector2D(std::max((double)m_sAdditionalConfigData.minSize.toUnderlying().x, m_vRealSize.goal().x), + std::max((double)m_sAdditionalConfigData.minSize.toUnderlying().y, m_vRealSize.goal().y)); + g_pXWaylandManager->setWindowSize(this, m_vRealSize.goal()); + setHidden(false); + } catch (std::exception& e) { Debug::log(ERR, "minsize rule \"{}\" failed with: {}", r.szRule, e.what()); } } } @@ -701,6 +717,8 @@ void CWindow::updateDynamicRules() { m_sAdditionalConfigData.forceNoDim = false; if (!m_sAdditionalConfigData.forceOpaqueOverridden) m_sAdditionalConfigData.forceOpaque = false; + m_sAdditionalConfigData.maxSize = Vector2D(std::numeric_limits<double>::max(), std::numeric_limits<double>::max()); + m_sAdditionalConfigData.minSize = Vector2D(1, 1); m_sAdditionalConfigData.forceNoAnims = false; m_sAdditionalConfigData.animationStyle = std::string(""); m_sAdditionalConfigData.rounding = -1; |
