summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-02-28 23:14:50 +0000
committerVaxry <vaxry@vaxry.net>2024-02-28 23:14:50 +0000
commit1e7eb3a5a5419f97b61a3403880b161c85dd7b17 (patch)
tree56788dd724f90bd12e0242023ef2cdb940a5918f /src/events/Windows.cpp
parent097f561e41e5660333492c1f188199e837742efe (diff)
xdg: check for floating conditions before sending tiled size hint
ref #4871
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp
index d6241fa4..6ea0bb0c 100644
--- a/src/events/Windows.cpp
+++ b/src/events/Windows.cpp
@@ -806,9 +806,26 @@ void Events::listener_commitWindow(void* owner, void* data) {
CWindow* PWINDOW = (CWindow*)owner;
if (!PWINDOW->m_bIsX11 && PWINDOW->m_uSurface.xdg->initial_commit) {
- const auto PREDSIZE = g_pLayoutManager->getCurrentLayout()->predictSizeForNewWindow();
- Debug::log(LOG, "Layout predicts size {} for {}", PREDSIZE, PWINDOW);
- wlr_xdg_toplevel_set_size(PWINDOW->m_uSurface.xdg->toplevel, PREDSIZE.x, PREDSIZE.y);
+ Vector2D predSize = g_pLayoutManager->getCurrentLayout()->predictSizeForNewWindow();
+
+ if (g_pXWaylandManager->shouldBeFloated(PWINDOW, true))
+ predSize = {};
+
+ Vector2D maxSize = Vector2D{PWINDOW->m_uSurface.xdg->toplevel->pending.max_width, PWINDOW->m_uSurface.xdg->toplevel->pending.max_height};
+
+ if ((maxSize.x > 0 && maxSize.x < predSize.x) || (maxSize.y > 0 && maxSize.y < predSize.y))
+ predSize = {};
+
+ for (auto& r : g_pConfigManager->getMatchingRules(PWINDOW)) {
+ if (r.szRule == "float") {
+ predSize = {};
+ break;
+ }
+ }
+
+ Debug::log(LOG, "Layout predicts size {} for {}", predSize, PWINDOW);
+
+ wlr_xdg_toplevel_set_size(PWINDOW->m_uSurface.xdg->toplevel, predSize.x, predSize.y);
return;
}