diff --git a/shell/dock/AppletDock.qml b/shell/dock/AppletDock.qml index e445059..5167c50 100644 --- a/shell/dock/AppletDock.qml +++ b/shell/dock/AppletDock.qml @@ -14,9 +14,11 @@ PanelWindow { required property var screen - visible: S.DockState.open + visible: _winVisible color: "transparent" + property bool _winVisible: false + WlrLayershell.layer: S.DockState.mode === "pinned" ? WlrLayer.Top : WlrLayer.Overlay WlrLayershell.exclusiveZone: S.DockState.mode === "pinned" ? _dockWidth : 0 WlrLayershell.namespace: "nova-dock" @@ -47,17 +49,51 @@ PanelWindow { } } - // Slide animation - property real _slideX: S.DockState.open ? 0 : _dockWidth + // Slide animation - managed manually so window stays visible during hide + property real _slideX: _dockWidth - Behavior on _slideX { - enabled: !S.Theme.reducedMotion - NumberAnimation { - duration: 200 - easing.type: Easing.OutCubic + Connections { + target: S.DockState + function onOpenChanged() { + if (S.DockState.open) { + root._winVisible = true; + _hideAnim.stop(); + if (S.Theme.reducedMotion) { + root._slideX = 0; + } else { + _showAnim.start(); + } + } else { + _showAnim.stop(); + if (S.Theme.reducedMotion) { + root._slideX = root._dockWidth; + root._winVisible = false; + } else { + _hideAnim.start(); + } + } } } + NumberAnimation { + id: _showAnim + target: root + property: "_slideX" + to: 0 + duration: 200 + easing.type: Easing.OutCubic + } + + NumberAnimation { + id: _hideAnim + target: root + property: "_slideX" + to: root._dockWidth + duration: 200 + easing.type: Easing.InCubic + onFinished: root._winVisible = false + } + // Overlay mode: close when cursor leaves HoverHandler { id: _dockHover