diff options
| author | Vaxry <vaxry@vaxry.net> | 2023-12-17 20:09:34 +0000 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2023-12-17 20:09:34 +0000 |
| commit | 763d5fa05f7d0191182a1d6cd827415a65293f99 (patch) | |
| tree | 382594e691a61962e20c4ed64d3697364b21f01d /src/events/Windows.cpp | |
| parent | 9fd928e114d7f57ac03aa7430d9cba41843347de (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.cpp | 37 |
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) |
