summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-12-17 20:09:34 +0000
committerVaxry <vaxry@vaxry.net>2023-12-17 20:09:34 +0000
commit763d5fa05f7d0191182a1d6cd827415a65293f99 (patch)
tree382594e691a61962e20c4ed64d3697364b21f01d /src/events/Windows.cpp
parent9fd928e114d7f57ac03aa7430d9cba41843347de (diff)
xdgshell: set predicted tiled windows to monitor res size pre-map
Should improve #4022 although not exactly fix. Fixing would require more witchcraft
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index 7f7c8ee6..699d72a1 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -791,7 +791,42 @@ void Events::listener_ackConfigure(void* owner, void* data) {
void Events::listener_commitWindow(void* owner, void* data) {
CWindow* PWINDOW = (CWindow*)owner;
- if (!PWINDOW->m_bIsMapped || PWINDOW->isHidden())
+ if (!PWINDOW->m_bIsMapped) {
+
+ // dupes shouldn't happen, but you never know, really.
+ if (PWINDOW->m_bInitialCommitPassed || PWINDOW->m_bIsX11)
+ return;
+
+ PWINDOW->m_bInitialCommitPassed = true;
+
+ // this is an initial commit of a surface
+ // in here, the surface will ask us what size we'd like it to be.
+ // wlroots by default doesn't send anything, so the app can use its preferred floating size
+ // if we predict it will be tiled, it's better to set it to the monitor size
+ // so it doesn't appear with the wrong size at the beginning.
+ // too big > too small, because will be clipped and won't look that bad.
+
+ auto willFloat = g_pXWaylandManager->shouldBeFloated(PWINDOW);
+ const auto WRULES = g_pConfigManager->getMatchingRules(PWINDOW);
+ for (auto& r : WRULES) {
+ if (r.szRule == "float") {
+ willFloat = true;
+ break;
+ } else if (r.szRule == "tile") {
+ willFloat = false;
+ break;
+ }
+ }
+
+ if (willFloat)
+ return;
+
+ g_pXWaylandManager->setWindowSize(PWINDOW, g_pCompositor->m_pLastMonitor ? g_pCompositor->m_pLastMonitor->vecSize : Vector2D{1920, 1080}, true);
+
+ return;
+ }
+
+ if (PWINDOW->isHidden())
return;
if (PWINDOW->m_bIsX11)