initial commit
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
import Quickshell
|
||||
import Quickshell.Wayland
|
||||
import QtQuick
|
||||
import qs.config
|
||||
|
||||
// Confirmation for session actions. Same full-screen layer surface approach as
|
||||
// the launcher, so Escape and click-away work everywhere.
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
required property var bar
|
||||
property string actionLabel: ""
|
||||
|
||||
signal accepted
|
||||
|
||||
visible: false
|
||||
|
||||
screen: root.bar.screen
|
||||
WlrLayershell.layer: WlrLayer.Overlay
|
||||
WlrLayershell.namespace: Config.namespace + "-confirm"
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
|
||||
|
||||
anchors {
|
||||
left: true
|
||||
right: true
|
||||
top: true
|
||||
bottom: true
|
||||
}
|
||||
exclusionMode: ExclusionMode.Ignore
|
||||
color: "#66000000"
|
||||
|
||||
function accept(): void {
|
||||
root.visible = false;
|
||||
root.accepted();
|
||||
}
|
||||
|
||||
onVisibleChanged: if (root.visible)
|
||||
keyHandler.forceActiveFocus()
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: root.visible = false
|
||||
}
|
||||
|
||||
Item {
|
||||
id: keyHandler
|
||||
|
||||
anchors.fill: parent
|
||||
focus: true
|
||||
|
||||
Keys.onEscapePressed: root.visible = false
|
||||
Keys.onReturnPressed: root.accept()
|
||||
Keys.onEnterPressed: root.accept()
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
anchors.centerIn: parent
|
||||
width: Math.min(320, root.width - Theme.padding * 4)
|
||||
implicitHeight: dialogColumn.implicitHeight + Theme.padding * 6
|
||||
radius: Theme.radius * 2
|
||||
color: Theme.surface
|
||||
border.width: Theme.borderWidth
|
||||
border.color: Theme.border
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
}
|
||||
|
||||
Column {
|
||||
id: dialogColumn
|
||||
|
||||
anchors.centerIn: parent
|
||||
width: parent.width - Theme.padding * 6
|
||||
spacing: Theme.padding * 3
|
||||
|
||||
Text {
|
||||
width: parent.width
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
wrapMode: Text.WordWrap
|
||||
text: root.actionLabel + "?"
|
||||
color: Theme.text
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSize + 2
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
Row {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
spacing: Theme.padding * 2
|
||||
|
||||
Rectangle {
|
||||
id: cancel
|
||||
|
||||
implicitWidth: 100
|
||||
implicitHeight: 32
|
||||
radius: Theme.radius
|
||||
color: cancelMouse.containsMouse ? Theme.surfaceHover : Theme.background
|
||||
border.width: Theme.borderWidth
|
||||
border.color: Theme.border
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: "Cancel"
|
||||
color: Theme.text
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSize
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: cancelMouse
|
||||
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: root.visible = false
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
id: accept
|
||||
|
||||
implicitWidth: 100
|
||||
implicitHeight: 32
|
||||
radius: Theme.radius
|
||||
color: acceptMouse.containsMouse ? Qt.lighter(Theme.danger, 1.15) : Theme.danger
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
text: "Confirm"
|
||||
color: Theme.background
|
||||
font.family: Theme.fontFamily
|
||||
font.pixelSize: Theme.fontSize
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: acceptMouse
|
||||
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onClicked: root.accept()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user