Files
dotfiles/quickshell/LogoutMenu.qml
2026-05-18 08:19:40 +02:00

72 lines
1.9 KiB
QML

import QtQuick
import QtQuick.Layouts
import Quickshell.Io
// Mirrors eww logout-menu
Item {
id: root
property bool open: false
implicitHeight: 26
implicitWidth: lrow.implicitWidth
Row {
id: lrow
spacing: 4
layoutDirection: Qt.RightToLeft
// Toggle btn
Rectangle {
width: 26; height: 26; radius: 13
color: root.open ? "#89b4fa" : "#313244"
Text {
anchors.centerIn: parent
text: root.open ? "󰅖" : "󰍃"
color: root.open ? "#1e1e2e" : "#cdd6f4"
font.pixelSize: 14
}
MouseArea {
anchors.fill: parent
onClicked: root.open = !root.open
cursorShape: Qt.PointingHandCursor
}
}
// Revealed actions
Item {
id: menuReveal
width: root.open ? actionRow.implicitWidth + 8 : 0
height: 26
clip: true
Behavior on width { NumberAnimation { duration: 200; easing.type: Easing.InOutQuad } }
Row {
id: actionRow
anchors.verticalCenter: parent.verticalCenter
spacing: 4
x: 4
// Lock
PowerBtn { icon: "󰌾"; onActivated: run(["hyprlock"]) }
// Reboot
PowerBtn { icon: "󰜉"; onActivated: run(["systemctl","reboot"]) }
// Power off
PowerBtn { icon: "󰐥"; onActivated: run(["systemctl","poweroff"]) }
// Logout (exit Hyprland)
PowerBtn { icon: "󰍃"; onActivated: run(["hyprctl","dispatch","exit"]) }
}
}
}
function run(cmd) {
root.open = false
Qt.createQmlObject(
'import Quickshell.Io; Process { command: ' +
JSON.stringify(cmd) + '; running: true }',
root)
}
}