85 lines
2.3 KiB
QML
85 lines
2.3 KiB
QML
// The dock's app menu. Desktop-entry actions stay first; the shell-owned
|
|
// configuration route is deliberately last so it never displaces app actions.
|
|
|
|
import Quickshell
|
|
import QtQuick
|
|
import qs.config
|
|
import qs.modules.bar
|
|
import qs.services
|
|
import qs.widgets
|
|
|
|
PopupWindow {
|
|
id: root
|
|
|
|
property Item anchorItem: null
|
|
property var entry: null
|
|
|
|
anchor.item: root.anchorItem
|
|
anchor.edges: Edges.Top | Edges.Left
|
|
anchor.gravity: Edges.Top | Edges.Right
|
|
anchor.margins.bottom: 8
|
|
|
|
implicitWidth: Math.max(menu.implicitWidth + Theme.popoverPadding * 2, 240)
|
|
implicitHeight: menu.implicitHeight + Theme.popoverPadding * 2
|
|
color: "transparent"
|
|
visible: false
|
|
grabFocus: true
|
|
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
radius: Theme.popoverRadius
|
|
color: Theme.alpha(Theme.bgPopover, Theme.popoverAlpha)
|
|
border.width: 1
|
|
border.color: Theme.alpha(Theme.fg, 0.08)
|
|
|
|
PrismEdge {
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 1
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
inset: parent.radius
|
|
}
|
|
|
|
Column {
|
|
id: menu
|
|
anchors.fill: parent
|
|
anchors.margins: Theme.popoverPadding
|
|
spacing: 2
|
|
|
|
Repeater {
|
|
id: applicationActions
|
|
model: root.entry ? root.entry.actions : []
|
|
|
|
delegate: TrayMenuRow {
|
|
required property var modelData
|
|
|
|
width: parent.width
|
|
label: modelData.name
|
|
onActivated: {
|
|
modelData.execute();
|
|
root.visible = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
width: parent.width
|
|
height: 1
|
|
anchors.margins: 3
|
|
visible: applicationActions.count > 0
|
|
border.width: 0
|
|
color: Theme.alpha(Theme.fg, 0.1)
|
|
}
|
|
|
|
TrayMenuRow {
|
|
width: parent.width
|
|
label: "Dock settings"
|
|
onActivated: {
|
|
ShellState.openSettings("desktop");
|
|
root.visible = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|