summaryrefslogtreecommitdiff
path: root/src/Window.cpp
diff options
context:
space:
mode:
authorEpilepsy Gatherings <73647246+phonetic112@users.noreply.github.com>2024-03-07 21:24:44 -0500
committerGitHub <noreply@github.com>2024-03-08 02:24:44 +0000
commite52d3fa8522ff83813a9006d4bf46b3057f4a4cc (patch)
tree31b7e16e9a76718fe6cb5b6b2c19948ef6f946b9 /src/Window.cpp
parentceecdd0fd511122b7ff4f477a606880fe6599100 (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.cpp18
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;