From be51276399ecb2a2afbba4c2fc45ead5f09d07dd Mon Sep 17 00:00:00 2001 From: Maximilian Seidler Date: Mon, 3 Feb 2025 21:50:20 +0100 Subject: [PATCH] window: sendWindowSize for floating on the first real size update --- src/desktop/Window.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index e4000c22ef8..812513b7e19 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -561,10 +561,18 @@ void CWindow::onMap() { *m_fBorderAngleAnimationProgress = 1.f; } - m_vRealSize->setUpdateCallback([this](auto) { - if (validMapped(m_pSelf) && m_bIsFloating) - sendWindowSize(); - }); + // using setCallbackOnBegin directly here might make it so we send "temporary" sizes + // to avoid that only send the window size on the first real size update + m_vRealSize->setCallbackOnBegin( + [this](auto) { + m_vRealSize->setUpdateCallback([this](auto) { + if (m_bIsMapped && m_bIsFloating) + sendWindowSize(); + + m_vRealSize->setUpdateCallback(nullptr); + }); + }, + false); m_fMovingFromWorkspaceAlpha->setValueAndWarp(1.F); @@ -1705,8 +1713,8 @@ void CWindow::sendWindowSize(bool force) { const auto PMONITOR = m_pMonitor.lock(); // TODO: this should be decoupled from setWindowSize IMO - Vector2D windowPos = m_vRealPosition->goal(); - Vector2D size = m_vRealSize->goal().clamp(Vector2D{1, 1}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); + Vector2D windowPos = m_vRealPosition->goal(); + Vector2D size = m_vRealSize->goal().clamp(Vector2D{1, 1}, Vector2D{std::numeric_limits::infinity(), std::numeric_limits::infinity()}); if (m_bIsX11 && PMONITOR) { windowPos = g_pXWaylandManager->waylandToXWaylandCoords(windowPos);