From 1e7eb3a5a5419f97b61a3403880b161c85dd7b17 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 28 Feb 2024 23:14:50 +0000 Subject: xdg: check for floating conditions before sending tiled size hint ref #4871 --- src/events/Windows.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'src/events/Windows.cpp') 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; } -- cgit v1.2.3