dock: pinned mode acts as screen split - bar shrinks, corners adjust, opaque background
This commit is contained in:
parent
c22eb51dcd
commit
f501f977d1
9 changed files with 52 additions and 21 deletions
|
|
@ -14,11 +14,11 @@ PanelWindow {
|
|||
|
||||
required property var screen
|
||||
|
||||
visible: D.DockState.open
|
||||
visible: S.DockState.open
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.layer: D.DockState.mode === "pinned" ? WlrLayer.Top : WlrLayer.Overlay
|
||||
WlrLayershell.exclusiveZone: D.DockState.mode === "pinned" ? _dockWidth : 0
|
||||
WlrLayershell.layer: S.DockState.mode === "pinned" ? WlrLayer.Top : WlrLayer.Overlay
|
||||
WlrLayershell.exclusiveZone: S.DockState.mode === "pinned" ? _dockWidth : 0
|
||||
WlrLayershell.namespace: "nova-dock"
|
||||
|
||||
anchors.top: true
|
||||
|
|
@ -31,8 +31,21 @@ PanelWindow {
|
|||
|
||||
implicitWidth: _dockWidth
|
||||
|
||||
// Set reserved width for bar/corners when pinned
|
||||
onVisibleChanged: {
|
||||
if (S.DockState.mode === "pinned")
|
||||
S.DockState.reservedWidth = _dockWidth;
|
||||
}
|
||||
Connections {
|
||||
target: S.DockState
|
||||
function onModeChanged() {
|
||||
if (S.DockState.mode === "pinned")
|
||||
S.DockState.reservedWidth = root._dockWidth;
|
||||
}
|
||||
}
|
||||
|
||||
// Slide animation
|
||||
property real _slideX: D.DockState.open ? 0 : _dockWidth
|
||||
property real _slideX: S.DockState.open ? 0 : _dockWidth
|
||||
|
||||
Behavior on _slideX {
|
||||
enabled: !S.Theme.reducedMotion
|
||||
|
|
@ -46,7 +59,7 @@ PanelWindow {
|
|||
HoverHandler {
|
||||
id: _dockHover
|
||||
onHoveredChanged: {
|
||||
if (!hovered && D.DockState.mode === "overlay")
|
||||
if (!hovered && S.DockState.mode === "overlay")
|
||||
_overlayCloseTimer.restart();
|
||||
else
|
||||
_overlayCloseTimer.stop();
|
||||
|
|
@ -56,16 +69,16 @@ PanelWindow {
|
|||
Timer {
|
||||
id: _overlayCloseTimer
|
||||
interval: 200
|
||||
onTriggered: if (D.DockState.mode === "overlay")
|
||||
D.DockState.close()
|
||||
onTriggered: if (S.DockState.mode === "overlay")
|
||||
S.DockState.close()
|
||||
}
|
||||
|
||||
// Background
|
||||
// Background - fully opaque when pinned, semi-transparent in overlay
|
||||
Rectangle {
|
||||
id: _bg
|
||||
anchors.fill: parent
|
||||
color: S.Theme.base00
|
||||
opacity: Math.max(S.Theme.barOpacity, 0.85)
|
||||
opacity: S.DockState.mode === "pinned" ? 1.0 : Math.max(S.Theme.barOpacity, 0.85)
|
||||
|
||||
transform: Translate {
|
||||
x: root._slideX
|
||||
|
|
@ -355,7 +368,7 @@ PanelWindow {
|
|||
_runner.command = cmd;
|
||||
_runner.running = true;
|
||||
}
|
||||
onDismiss: D.DockState.close()
|
||||
onDismiss: S.DockState.close()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -370,13 +383,13 @@ PanelWindow {
|
|||
M.ProcessList {
|
||||
id: _cpuProcs
|
||||
sortBy: "cpu"
|
||||
active: _cpuCard.expanded && D.DockState.open
|
||||
active: _cpuCard.expanded && S.DockState.open
|
||||
}
|
||||
|
||||
M.ProcessList {
|
||||
id: _memProcs
|
||||
sortBy: "mem"
|
||||
active: _memCard.expanded && D.DockState.open
|
||||
active: _memCard.expanded && S.DockState.open
|
||||
}
|
||||
|
||||
PwObjectTracker {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import "." as D
|
||||
import "../services" as S
|
||||
|
||||
// Invisible 2px-wide PanelWindow at the right screen edge.
|
||||
// When cursor enters, opens the dock in overlay mode.
|
||||
|
|
@ -10,7 +10,7 @@ PanelWindow {
|
|||
|
||||
required property var screen
|
||||
|
||||
visible: !D.DockState.open
|
||||
visible: !S.DockState.open
|
||||
color: "transparent"
|
||||
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
|
|
@ -25,8 +25,8 @@ PanelWindow {
|
|||
|
||||
HoverHandler {
|
||||
onHoveredChanged: {
|
||||
if (hovered && !D.DockState.open)
|
||||
D.DockState.openOverlay();
|
||||
if (hovered && !S.DockState.open)
|
||||
S.DockState.openOverlay();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
pragma Singleton
|
||||
|
||||
import QtQuick
|
||||
|
||||
QtObject {
|
||||
// "closed" | "pinned" | "overlay"
|
||||
property string mode: "closed"
|
||||
readonly property bool open: mode !== "closed"
|
||||
|
||||
function openPinned() {
|
||||
mode = "pinned";
|
||||
}
|
||||
|
||||
function openOverlay() {
|
||||
if (mode === "closed")
|
||||
mode = "overlay";
|
||||
}
|
||||
|
||||
function close() {
|
||||
mode = "closed";
|
||||
}
|
||||
|
||||
function toggle() {
|
||||
if (mode === "pinned")
|
||||
mode = "closed";
|
||||
else
|
||||
mode = "pinned";
|
||||
}
|
||||
}
|
||||
|
|
@ -3,5 +3,4 @@ module dock
|
|||
AppletDock 1.0 AppletDock.qml
|
||||
DockCard 1.0 DockCard.qml
|
||||
DockEdgeTrigger 1.0 DockEdgeTrigger.qml
|
||||
singleton DockState 1.0 DockState.qml
|
||||
# keep-sorted end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue