summaryrefslogtreecommitdiff
path: root/accounts/gkleen@sif
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2025-09-11 23:17:57 +0200
committerGregor Kleen <gkleen@yggdrasil.li>2025-09-11 23:17:57 +0200
commit564853110a6e1367cc379bd8418d874829302d00 (patch)
treea6d548f7ae9379810f6d3942b10217364ca54c99 /accounts/gkleen@sif
parentdd2df931a3be1a6518c1e9fbff438de4274456cd (diff)
downloadnixos-564853110a6e1367cc379bd8418d874829302d00.tar
nixos-564853110a6e1367cc379bd8418d874829302d00.tar.gz
nixos-564853110a6e1367cc379bd8418d874829302d00.tar.bz2
nixos-564853110a6e1367cc379bd8418d874829302d00.tar.xz
nixos-564853110a6e1367cc379bd8418d874829302d00.zip
...
Diffstat (limited to 'accounts/gkleen@sif')
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp4
-rw-r--r--accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp1
-rw-r--r--accounts/gkleen@sif/shell/quickshell/Bar.qml7
-rw-r--r--accounts/gkleen@sif/shell/quickshell/LidSwitchInhibitorWidget.qml46
-rw-r--r--accounts/gkleen@sif/shell/quickshell/Services/InhibitorState.qml22
-rw-r--r--accounts/gkleen@sif/shell/quickshell/WaylandInhibitorWidget.qml55
-rw-r--r--accounts/gkleen@sif/shell/quickshell/shell.qml1
7 files changed, 135 insertions, 1 deletions
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp
index 790f514f..884ea17f 100644
--- a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.cpp
@@ -118,6 +118,8 @@ std::string SystemdInhibitorParams::toString(SystemdInhibitorParams::Mode mode)
118 118
119bool SystemdInhibitor::enabled() const { return static_cast<bool>(this->activeInhibitor); } 119bool SystemdInhibitor::enabled() const { return static_cast<bool>(this->activeInhibitor); }
120void SystemdInhibitor::setEnabled(bool enabled) { 120void SystemdInhibitor::setEnabled(bool enabled) {
121 this->mEnabled = enabled;
122
121 if (enabled) 123 if (enabled)
122 this->update(); 124 this->update();
123 else 125 else
@@ -173,7 +175,7 @@ void SystemdInhibitor::release() {
173} 175}
174 176
175void SystemdInhibitor::update() { 177void SystemdInhibitor::update() {
176 if (!this->mWhat || this->mWho.isEmpty() || this->mWhy.isEmpty() || !this->mMode) 178 if (!this->mWhat || this->mWho.isEmpty() || this->mWhy.isEmpty() || !this->mMode || !this->mEnabled)
177 if (this->activeInhibitor) 179 if (this->activeInhibitor)
178 this->release(); 180 this->release();
179 else 181 else
diff --git a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp
index cf978fea..84752d76 100644
--- a/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp
+++ b/accounts/gkleen@sif/shell/quickshell-plugins/Systemd.hpp
@@ -134,6 +134,7 @@ private:
134 134
135 void update(); 135 void update();
136 136
137 bool mEnabled = true;
137 std::unique_ptr<ActiveSystemdInhibitor> activeInhibitor; 138 std::unique_ptr<ActiveSystemdInhibitor> activeInhibitor;
138 SystemdInhibitorParams::What mWhat = static_cast<SystemdInhibitorParams::What>(0); 139 SystemdInhibitorParams::What mWhat = static_cast<SystemdInhibitorParams::What>(0);
139 QString mWho; 140 QString mWho;
diff --git a/accounts/gkleen@sif/shell/quickshell/Bar.qml b/accounts/gkleen@sif/shell/quickshell/Bar.qml
index 52b9b344..6952c658 100644
--- a/accounts/gkleen@sif/shell/quickshell/Bar.qml
+++ b/accounts/gkleen@sif/shell/quickshell/Bar.qml
@@ -5,6 +5,7 @@ PanelWindow {
5 id: bar 5 id: bar
6 6
7 required property var screen 7 required property var screen
8 required property var inhibitorState
8 9
9 anchors { 10 anchors {
10 top: true 11 top: true
@@ -83,6 +84,12 @@ PanelWindow {
83 84
84 KeyboardLayout {} 85 KeyboardLayout {}
85 86
87 LidSwitchInhibitorWidget {}
88
89 WaylandInhibitorWidget {
90 window: bar
91 }
92
86 Item { 93 Item {
87 height: parent.height 94 height: parent.height
88 width: 8 - 4 95 width: 8 - 4
diff --git a/accounts/gkleen@sif/shell/quickshell/LidSwitchInhibitorWidget.qml b/accounts/gkleen@sif/shell/quickshell/LidSwitchInhibitorWidget.qml
new file mode 100644
index 00000000..2be0692a
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell/LidSwitchInhibitorWidget.qml
@@ -0,0 +1,46 @@
1import Quickshell
2import QtQuick
3import Quickshell.Widgets
4import qs.Services
5
6Item {
7 id: root
8
9 width: icon.width + 8
10 height: parent.height
11 anchors.verticalCenter: parent.verticalCenter
12
13 WrapperMouseArea {
14 id: widgetMouseArea
15
16 anchors.fill: parent
17
18 hoverEnabled: true
19
20 onClicked: InhibitorState.lidSwitchInhibited = !InhibitorState.lidSwitchInhibited
21
22 Rectangle {
23 anchors.fill: parent
24 color: {
25 if (widgetMouseArea.containsMouse) {
26 return "#33808080";
27 }
28 return "transparent";
29 }
30
31 Item {
32 anchors.fill: parent
33
34 MaterialDesignIcon {
35 id: icon
36
37 implicitSize: 14
38 anchors.centerIn: parent
39
40 icon: InhibitorState.lidSwitchInhibited ? "laptop-off" : "laptop"
41 color: InhibitorState.lidSwitchInhibited ? "#f28a21" : "#555"
42 }
43 }
44 }
45 }
46}
diff --git a/accounts/gkleen@sif/shell/quickshell/Services/InhibitorState.qml b/accounts/gkleen@sif/shell/quickshell/Services/InhibitorState.qml
new file mode 100644
index 00000000..fe48fd7f
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell/Services/InhibitorState.qml
@@ -0,0 +1,22 @@
1pragma Singleton
2
3import Quickshell
4import Custom as Custom
5
6Singleton {
7 id: inhibitorState
8
9 property bool waylandIdleInhibited: false
10 property alias lidSwitchInhibited: lidSwitchInhibitor.enabled
11
12 Custom.SystemdInhibitor {
13 id: lidSwitchInhibitor
14
15 enabled: false
16
17 what: Custom.SystemdInhibitorParams.HandleLidSwitch
18 who: "quickshell"
19 why: "User request"
20 mode: Custom.SystemdInhibitorParams.BlockWeak
21 }
22}
diff --git a/accounts/gkleen@sif/shell/quickshell/WaylandInhibitorWidget.qml b/accounts/gkleen@sif/shell/quickshell/WaylandInhibitorWidget.qml
new file mode 100644
index 00000000..0633f350
--- /dev/null
+++ b/accounts/gkleen@sif/shell/quickshell/WaylandInhibitorWidget.qml
@@ -0,0 +1,55 @@
1import Quickshell
2import QtQuick
3import Quickshell.Widgets
4import Quickshell.Wayland
5import qs.Services
6
7Item {
8 id: root
9
10 required property var window
11
12 width: icon.width + 8
13 height: parent.height
14 anchors.verticalCenter: parent.verticalCenter
15
16 IdleInhibitor {
17 id: inhibitor
18 enabled: InhibitorState.waylandIdleInhibited
19 window: root.window
20 }
21
22 WrapperMouseArea {
23 id: widgetMouseArea
24
25 anchors.fill: parent
26
27 hoverEnabled: true
28
29 onClicked: InhibitorState.waylandIdleInhibited = !InhibitorState.waylandIdleInhibited
30
31 Rectangle {
32 anchors.fill: parent
33 color: {
34 if (widgetMouseArea.containsMouse) {
35 return "#33808080";
36 }
37 return "transparent";
38 }
39
40 Item {
41 anchors.fill: parent
42
43 MaterialDesignIcon {
44 id: icon
45
46 implicitSize: 14
47 anchors.centerIn: parent
48
49 icon: inhibitor.enabled ? "eye" : "eye-off"
50 color: inhibitor.enabled ? "white" : "#555"
51 }
52 }
53 }
54 }
55}
diff --git a/accounts/gkleen@sif/shell/quickshell/shell.qml b/accounts/gkleen@sif/shell/quickshell/shell.qml
index 693d741f..ccb4e82e 100644
--- a/accounts/gkleen@sif/shell/quickshell/shell.qml
+++ b/accounts/gkleen@sif/shell/quickshell/shell.qml
@@ -36,6 +36,7 @@ ShellRoot {
36 36
37 Bar { 37 Bar {
38 screen: screenScope.modelData 38 screen: screenScope.modelData
39 inhibitorState: inhibitorState
39 } 40 }
40 } 41 }
41 } 42 }