wlogout: add example
7
wlogout/README.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Wlogout clone
|
||||
|
||||
This is a mostly faithful clone of [wlogout](https://github.com/ArtsyMacaw/wlogout).
|
||||
|
||||
You can run the example with `quickshell -c shell.qml`.
|
||||
|
||||
![](./image.png)
|
106
wlogout/WLogout.qml
Normal file
|
@ -0,0 +1,106 @@
|
|||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Wayland
|
||||
|
||||
Variants {
|
||||
id: root
|
||||
property color backgroundColor: "#e60c0c0c"
|
||||
property color buttonColor: "#1e1e1e"
|
||||
property color buttonHoverColor: "#3700b3"
|
||||
default property list<WlButton> buttons
|
||||
|
||||
variants: Quickshell.screens.map(screen => ({ screen }))
|
||||
PanelWindow {
|
||||
id: w
|
||||
|
||||
exclusionMode: ExclusionMode.Ignore
|
||||
WlrLayershell.layer: Layer.Overlay
|
||||
WlrLayershell.keyboardFocus: KeyboardFocus.Exclusive
|
||||
|
||||
color: "transparent"
|
||||
|
||||
contentItem {
|
||||
focus: true
|
||||
Keys.onPressed: event => {
|
||||
if (event.key == Qt.Key_Escape) Qt.quit();
|
||||
else {
|
||||
for (let i = 0; i < buttons.length; i++) {
|
||||
let button = buttons[i];
|
||||
if (event.key == button.keybind) button.exec();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
bottom: true
|
||||
right: true
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
color: backgroundColor;
|
||||
anchors.fill: parent
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: Qt.quit()
|
||||
|
||||
GridLayout {
|
||||
anchors.centerIn: parent
|
||||
|
||||
width: parent.width * 0.75
|
||||
height: parent.height * 0.75
|
||||
|
||||
columns: 3
|
||||
columnSpacing: 0
|
||||
rowSpacing: 0
|
||||
|
||||
Repeater {
|
||||
model: buttons
|
||||
delegate: Rectangle {
|
||||
required property WlButton modelData;
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
|
||||
color: ma.containsMouse ? buttonHoverColor : buttonColor
|
||||
border.color: "black"
|
||||
border.width: ma.containsMouse ? 0 : 1
|
||||
|
||||
MouseArea {
|
||||
id: ma
|
||||
anchors.fill: parent
|
||||
hoverEnabled: true
|
||||
onClicked: modelData.exec()
|
||||
}
|
||||
|
||||
Image {
|
||||
id: icon
|
||||
anchors.centerIn: parent
|
||||
source: `icons/${modelData.icon}.png`
|
||||
width: parent.width * 0.25
|
||||
height: parent.width * 0.25
|
||||
}
|
||||
|
||||
Text {
|
||||
anchors {
|
||||
top: icon.bottom
|
||||
topMargin: 20
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
||||
text: modelData.text
|
||||
font.pointSize: 20
|
||||
color: "white"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
21
wlogout/WlButton.qml
Normal file
|
@ -0,0 +1,21 @@
|
|||
import QtQuick
|
||||
import Quickshell.Io
|
||||
|
||||
QtObject {
|
||||
required property string command
|
||||
required property string text
|
||||
required property string icon
|
||||
property var keybind: null
|
||||
|
||||
id: button
|
||||
|
||||
readonly property var process: Process {
|
||||
command: ["sh", "-c", button.command]
|
||||
manageLifetime: false
|
||||
}
|
||||
|
||||
function exec() {
|
||||
process.running = true;
|
||||
Qt.quit();
|
||||
}
|
||||
}
|
BIN
wlogout/icons/hibernate.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
wlogout/icons/lock.png
Normal file
After Width: | Height: | Size: 7.9 KiB |
BIN
wlogout/icons/logout.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
wlogout/icons/reboot.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
wlogout/icons/shutdown.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
wlogout/icons/suspend.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
wlogout/image.png
Normal file
After Width: | Height: | Size: 110 KiB |
48
wlogout/shell.qml
Normal file
|
@ -0,0 +1,48 @@
|
|||
import QtQuick
|
||||
import Quickshell
|
||||
|
||||
ShellRoot {
|
||||
WLogout {
|
||||
WlButton {
|
||||
command: "loginctl lock-screen"
|
||||
keybind: Qt.Key_K
|
||||
text: "Lock"
|
||||
icon: "lock"
|
||||
}
|
||||
|
||||
WlButton {
|
||||
command: "loginctl terminate-user $USER"
|
||||
keybind: Qt.Key_E
|
||||
text: "Logout"
|
||||
icon: "logout"
|
||||
}
|
||||
|
||||
WlButton {
|
||||
command: "systemctl suspend"
|
||||
keybind: Qt.Key_U
|
||||
text: "Suspend"
|
||||
icon: "suspend"
|
||||
}
|
||||
|
||||
WlButton {
|
||||
command: "systemctl hibernate"
|
||||
keybind: Qt.Key_H
|
||||
text: "Hibernate"
|
||||
icon: "hibernate"
|
||||
}
|
||||
|
||||
WlButton {
|
||||
command: "systemctl poweroff"
|
||||
keybind: Qt.Key_K
|
||||
text: "Shutdown"
|
||||
icon: "shutdown"
|
||||
}
|
||||
|
||||
WlButton {
|
||||
command: "systemctl reboot"
|
||||
keybind: Qt.Key_R
|
||||
text: "Reboot"
|
||||
icon: "reboot"
|
||||
}
|
||||
}
|
||||
}
|