From 007c9f4eca62365517f8d6c1f0685357ea89f92a Mon Sep 17 00:00:00 2001 From: Damocles Date: Sat, 25 Apr 2026 22:02:06 +0200 Subject: [PATCH 1/2] dock: fix slide-out animation by managing visibility manually --- shell/dock/AppletDock.qml | 52 +++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 8 deletions(-) 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 From 06e75f947305cdfaeacb19a750d487e615f76dcb Mon Sep 17 00:00:00 2001 From: Damocles Date: Sat, 25 Apr 2026 22:06:03 +0200 Subject: [PATCH 2/2] dock: gradient screen-edge line, gap, and content border matching bar style --- shell/dock/AppletDock.qml | 41 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/shell/dock/AppletDock.qml b/shell/dock/AppletDock.qml index 5167c50..220fb62 100644 --- a/shell/dock/AppletDock.qml +++ b/shell/dock/AppletDock.qml @@ -124,13 +124,47 @@ PanelWindow { } } - // Accent border on the left edge + // Left edge gradient line - marks the virtual screen edge when pinned, + // simple accent line in overlay mode Rectangle { + id: _edgeLine anchors.left: parent.left anchors.top: parent.top anchors.bottom: parent.bottom width: 1 - color: root._accent + + gradient: S.DockState.mode === "pinned" ? _screenEdgeGradient : null + color: S.DockState.mode === "pinned" ? "transparent" : root._accent + opacity: _bg.opacity + + transform: Translate { + x: root._slideX + } + + Gradient { + id: _screenEdgeGradient + GradientStop { + position: 0 + color: S.Theme.base0C + } + GradientStop { + position: 1 + color: S.Theme.base09 + } + } + } + + // Dock content border - 1px accent, inset from the edge line by the gap + Rectangle { + anchors.left: parent.left + anchors.leftMargin: S.Theme.groupSpacing + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.right: parent.right + color: "transparent" + border.color: root._accent + border.width: 1 + radius: S.Theme.radius opacity: _bg.opacity transform: Translate { @@ -138,10 +172,11 @@ PanelWindow { } } - // Content + // Content - inset past the edge line + gap Flickable { id: _flickable anchors.fill: parent + anchors.leftMargin: S.Theme.groupSpacing + 1 contentHeight: _column.height clip: true boundsBehavior: Flickable.StopAtBounds