From f57dd0ea5a2ee3b5cd4889381b26ef4413bad053 Mon Sep 17 00:00:00 2001 From: Damocles Date: Mon, 27 Apr 2026 23:30:23 +0200 Subject: [PATCH 1/3] dock: only show on rightmost screen --- shell/shell.qml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/shell/shell.qml b/shell/shell.qml index 6e0122b..522a412 100644 --- a/shell/shell.qml +++ b/shell/shell.qml @@ -17,6 +17,15 @@ ShellRoot { id: scope required property var modelData + readonly property bool _isRightmost: { + let maxX = -Infinity; + for (let i = 0; i < Quickshell.screens.length; i++) { + if (Quickshell.screens[i].x > maxX) + maxX = Quickshell.screens[i].x; + } + return scope.modelData.x >= maxX; + } + Bar { screen: scope.modelData } @@ -61,14 +70,14 @@ ShellRoot { } LazyLoader { - active: Modules.dock.enable + active: Modules.dock.enable && scope._isRightmost Dock.AppletDock { screen: scope.modelData } } LazyLoader { - active: Modules.dock.enable + active: Modules.dock.enable && scope._isRightmost Dock.DockEdgeTrigger { screen: scope.modelData } From 23297d2c4bdffa1f2777a912a9966ff86be2de38 Mon Sep 17 00:00:00 2001 From: Damocles Date: Mon, 27 Apr 2026 23:30:24 +0200 Subject: [PATCH 2/3] lock screen: clip password dots to pill bounds --- shell/lock/LockInput.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shell/lock/LockInput.qml b/shell/lock/LockInput.qml index 721e2e8..48cdf1e 100644 --- a/shell/lock/LockInput.qml +++ b/shell/lock/LockInput.qml @@ -68,6 +68,8 @@ Item { Row { anchors.centerIn: parent spacing: 6 + width: Math.min(implicitWidth, root.width - root.height) + clip: implicitWidth > root.width - root.height Repeater { model: root.buffer.length From 41293c02a980168d8f8cba2c4683ad37416f41f7 Mon Sep 17 00:00:00 2001 From: Damocles Date: Tue, 28 Apr 2026 00:00:56 +0200 Subject: [PATCH 3/3] dock: coordinated resize animation via centralized reservedWidthAnimated --- shell/modules/Bar.qml | 10 +--------- shell/modules/BarGroup.qml | 2 +- shell/modules/ScreenCorners.qml | 4 ++-- shell/services/DockState.qml | 13 +++++++++++++ 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/shell/modules/Bar.qml b/shell/modules/Bar.qml index ff6d091..d7605fc 100644 --- a/shell/modules/Bar.qml +++ b/shell/modules/Bar.qml @@ -17,15 +17,7 @@ PanelWindow { right: true } - margins.right: S.DockState.reservedWidth - - Behavior on margins.right { - enabled: !S.Theme.reducedMotion - NumberAnimation { - duration: 200 - easing.type: Easing.OutCubic - } - } + margins.right: S.DockState.reservedWidthAnimated implicitHeight: S.Theme.barHeight exclusiveZone: implicitHeight diff --git a/shell/modules/BarGroup.qml b/shell/modules/BarGroup.qml index 544a8ae..a0c00cc 100644 --- a/shell/modules/BarGroup.qml +++ b/shell/modules/BarGroup.qml @@ -15,7 +15,7 @@ Item { if (!scr) return 0.5; const gx = mapToGlobal(width / 2, 0).x - scr.x; - const effectiveWidth = scr.width - (S.DockState.reservedWidth ?? 0); + const effectiveWidth = scr.width - (S.DockState.reservedWidthAnimated ?? 0); return Math.max(0, Math.min(1, gx / (effectiveWidth > 0 ? effectiveWidth : scr.width))); } property color borderColor: Qt.rgba(S.Theme.base0C.r + (S.Theme.base09.r - S.Theme.base0C.r) * _posFrac, S.Theme.base0C.g + (S.Theme.base09.g - S.Theme.base0C.g) * _posFrac, S.Theme.base0C.b + (S.Theme.base09.b - S.Theme.base0C.b) * _posFrac, 1) diff --git a/shell/modules/ScreenCorners.qml b/shell/modules/ScreenCorners.qml index 7c02d16..3be436c 100644 --- a/shell/modules/ScreenCorners.qml +++ b/shell/modules/ScreenCorners.qml @@ -80,7 +80,7 @@ Item { corner: 1 anchors.top: true anchors.right: true - margins.right: S.DockState.reservedWidth + margins.right: S.DockState.reservedWidthAnimated } Corner { corner: 2 @@ -91,6 +91,6 @@ Item { corner: 3 anchors.bottom: true anchors.right: true - margins.right: S.DockState.reservedWidth + margins.right: S.DockState.reservedWidthAnimated } } diff --git a/shell/services/DockState.qml b/shell/services/DockState.qml index ad3f3ca..1cdd735 100644 --- a/shell/services/DockState.qml +++ b/shell/services/DockState.qml @@ -11,6 +11,19 @@ QtObject { // Bar, screen corners, etc. read this to adjust layout. property int reservedWidth: 0 + // Animated version for smooth visual transitions. + // Consumers that need coordinated movement use this instead. + property int reservedWidthAnimated: 0 + + Behavior on reservedWidthAnimated { + NumberAnimation { + duration: 200 + easing.type: Easing.InOutCubic + } + } + + onReservedWidthChanged: reservedWidthAnimated = reservedWidth + onModeChanged: { if (mode !== "pinned") reservedWidth = 0;