From: Anders da Silva Rytter Hansen Date: Thu, 2 Jul 2026 09:40:00 -0300 Subject: [PATCH] shell: handle zero-duration floating panel animation The QML side now disables the floating panel animation by setting floatingnessAnimationDuration to 0. With a zero-duration QPropertyAnimation the valueChanged signal may not be emitted, so update m_floatingness and the QML property synchronously before doing the geometry/mask/strut updates. References: https://bugs.kde.org/show_bug.cgi?id=484501 and https://github.com/orgs/Sonic-DE/discussions/20 --- shell/panelview.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/shell/panelview.cpp b/shell/panelview.cpp --- a/shell/panelview.cpp +++ b/shell/panelview.cpp @@ -1782,6 +1782,13 @@ void PanelView::updateFloating() m_topFloatingPadding = rootObject()->property("fixedTopFloatingPadding").toInt(); m_bottomFloatingPadding = rootObject()->property("fixedBottomFloatingPadding").toInt(); + const bool instantAnimation = m_floatingnessAnimation.duration() == 0; + if (instantAnimation) { + // Skip the animation; jump straight to the target value. + m_floatingness = m_floatingnessAnimation.endValue().toDouble(); + rootObject()->setProperty("floatingness", m_floatingness); + } + positionAndResizePanel(); updateExclusiveZone(); updateShadows(); @@ -1789,6 +1796,10 @@ void PanelView::updateFloating() // positionPanel and updateMask are called by m_floatingnessAnimation if (m_floatingnessAnimation.targetObject()) { + if (instantAnimation) { + updateMask(); + return; + } m_floatingnessAnimation.start(); } }