dock: unload when not needed

This commit is contained in:
end-4
2025-06-10 09:14:54 +02:00
parent cf652482c5
commit f7f4affe51
+108 -105
View File
@@ -18,127 +18,130 @@ Scope { // Scope
Variants { // For each monitor Variants { // For each monitor
model: Quickshell.screens model: Quickshell.screens
PanelWindow { // Window
Loader {
id: dockLoader
required property var modelData required property var modelData
id: dockRoot active: ConfigOptions?.dock.hoverToReveal || (!ToplevelManager.activeToplevel?.activated)
screen: modelData
property bool reveal: root.pinned
|| (ConfigOptions?.dock.hoverToReveal && dockMouseArea.containsMouse)
|| dockApps.requestDockShow
|| (!ToplevelManager.activeToplevel?.activated)
anchors { sourceComponent: PanelWindow { // Window
bottom: true id: dockRoot
left: true screen: dockLoader.modelData
right: true
} property bool reveal: root.pinned
|| (ConfigOptions?.dock.hoverToReveal && dockMouseArea.containsMouse)
|| dockApps.requestDockShow
|| (!ToplevelManager.activeToplevel?.activated)
function hide() { anchors {
cheatsheetLoader.active = false bottom: true
} left: true
exclusiveZone: root.pinned ? implicitHeight right: true
- (Appearance.sizes.hyprlandGapsOut)
- (Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut) : 0
implicitWidth: dockBackground.implicitWidth
WlrLayershell.namespace: "quickshell:dock"
color: "transparent"
implicitHeight: (ConfigOptions?.dock.height ?? 70) + Appearance.sizes.elevationMargin + Appearance.sizes.hyprlandGapsOut
mask: Region {
item: dockMouseArea
}
MouseArea {
id: dockMouseArea
anchors.top: parent.top
height: parent.height
anchors.topMargin: dockRoot.reveal ? 0 :
ConfigOptions?.dock.hoverToReveal ? (dockRoot.implicitHeight - ConfigOptions.dock.hoverRegionHeight) :
(dockRoot.implicitHeight + 1)
anchors.left: parent.left
anchors.right: parent.right
hoverEnabled: true
Behavior on anchors.topMargin {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
} }
Item { exclusiveZone: root.pinned ? implicitHeight
id: dockHoverRegion - (Appearance.sizes.hyprlandGapsOut)
anchors.fill: parent - (Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut) : 0
Item { // Wrapper for the dock background implicitWidth: dockBackground.implicitWidth
id: dockBackground WlrLayershell.namespace: "quickshell:dock"
anchors { color: "transparent"
top: parent.top
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
}
implicitWidth: dockRow.implicitWidth + 5 * 2 implicitHeight: (ConfigOptions?.dock.height ?? 70) + Appearance.sizes.elevationMargin + Appearance.sizes.hyprlandGapsOut
height: parent.height - Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut
StyledRectangularShadow { mask: Region {
target: dockVisualBackground item: dockMouseArea
} }
Rectangle { // The real rectangle that is visible
id: dockVisualBackground
property real margin: Appearance.sizes.elevationMargin
anchors.fill: parent
anchors.topMargin: Appearance.sizes.elevationMargin
anchors.bottomMargin: Appearance.sizes.hyprlandGapsOut
color: Appearance.colors.colLayer0
radius: Appearance.rounding.large
}
RowLayout { MouseArea {
id: dockRow id: dockMouseArea
anchors.top: parent.top anchors.top: parent.top
anchors.bottom: parent.bottom height: parent.height
anchors.horizontalCenter: parent.horizontalCenter anchors.topMargin: dockRoot.reveal ? 0 :
spacing: 3 ConfigOptions?.dock.hoverToReveal ? (dockRoot.implicitHeight - ConfigOptions.dock.hoverRegionHeight) :
property real padding: 5 (dockRoot.implicitHeight + 1)
anchors.left: parent.left
anchors.right: parent.right
hoverEnabled: true
VerticalButtonGroup { Behavior on anchors.topMargin {
Layout.topMargin: Appearance.sizes.hyprlandGapsOut // why does this work animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
GroupButton { // Pin button }
baseWidth: 35
baseHeight: 35 Item {
clickedWidth: baseWidth id: dockHoverRegion
clickedHeight: baseHeight + 20 anchors.fill: parent
buttonRadius: Appearance.rounding.normal
toggled: root.pinned Item { // Wrapper for the dock background
onClicked: root.pinned = !root.pinned id: dockBackground
anchors {
top: parent.top
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
}
implicitWidth: dockRow.implicitWidth + 5 * 2
height: parent.height - Appearance.sizes.elevationMargin - Appearance.sizes.hyprlandGapsOut
StyledRectangularShadow {
target: dockVisualBackground
}
Rectangle { // The real rectangle that is visible
id: dockVisualBackground
property real margin: Appearance.sizes.elevationMargin
anchors.fill: parent
anchors.topMargin: Appearance.sizes.elevationMargin
anchors.bottomMargin: Appearance.sizes.hyprlandGapsOut
color: Appearance.colors.colLayer0
radius: Appearance.rounding.large
}
RowLayout {
id: dockRow
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
spacing: 3
property real padding: 5
VerticalButtonGroup {
Layout.topMargin: Appearance.sizes.hyprlandGapsOut // why does this work
GroupButton { // Pin button
baseWidth: 35
baseHeight: 35
clickedWidth: baseWidth
clickedHeight: baseHeight + 20
buttonRadius: Appearance.rounding.normal
toggled: root.pinned
onClicked: root.pinned = !root.pinned
contentItem: MaterialSymbol {
text: "keep"
horizontalAlignment: Text.AlignHCenter
iconSize: Appearance.font.pixelSize.larger
color: root.pinned ? Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer0
}
}
}
DockSeparator {}
DockApps { id: dockApps; }
DockSeparator {}
DockButton {
Layout.fillHeight: true
onClicked: Hyprland.dispatch("global quickshell:overviewToggle")
contentItem: MaterialSymbol { contentItem: MaterialSymbol {
text: "keep" anchors.fill: parent
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
iconSize: Appearance.font.pixelSize.larger font.pixelSize: parent.width / 2
color: root.pinned ? Appearance.m3colors.m3onPrimary : Appearance.colors.colOnLayer0 text: "apps"
color: Appearance.colors.colOnLayer0
} }
} }
} }
DockSeparator {} }
DockApps { id: dockApps; } }
DockSeparator {}
DockButton {
Layout.fillHeight: true
onClicked: Hyprland.dispatch("global quickshell:overviewToggle")
contentItem: MaterialSymbol {
anchors.fill: parent
horizontalAlignment: Text.AlignHCenter
font.pixelSize: parent.width / 2
text: "apps"
color: Appearance.colors.colOnLayer0
}
}
}
}
}
}
} }
} }
} }