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);