Skip to content

Commit 849b097

Browse files
authored
Make PreventSleepToggle self contained (#99)
1 parent ec916f4 commit 849b097

6 files changed

Lines changed: 54 additions & 31 deletions

File tree

Lines changed: 2 additions & 0 deletions
Loading

data/quick-settings.gresource.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<gresource prefix="/org/elementary/wingpanel/icons">
99
<file alias="scalable/status/dark-mode-symbolic.svg" compressed="true" preprocess="xml-stripblanks">icons/dark-mode.svg</file>
1010
<file alias="scalable/status/system-suspend-symbolic.svg" compressed="true" preprocess="xml-stripblanks">icons/system-suspend.svg</file>
11+
<file alias="scalable/status/system-suspend-disabled-symbolic.svg" compressed="true" preprocess="xml-stripblanks">icons/system-suspend-disabled.svg</file>
1112
<file alias="scalable/status/quick-settings-symbolic.svg" compressed="true" preprocess="xml-stripblanks">icons/quick-settings.svg</file>
1213
<file alias="scalable/status/quick-settings-rotation-allowed-symbolic.svg" compressed="true" preprocess="xml-stripblanks">icons/rotation-allowed.svg</file>
1314
<file alias="scalable/status/quick-settings-rotation-locked-symbolic.svg" compressed="true" preprocess="xml-stripblanks">icons/rotation-locked.svg</file>

po/POTFILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ src/Services/UserManager.vala
1111
src/Widgets/CurrentUser.vala
1212
src/Widgets/DarkModeToggle.vala
1313
src/Widgets/EndSessionDialog.vala
14+
src/Widgets/PreventSleepToggle.vala
1415
src/Widgets/RotationToggle.vala
1516
src/Widgets/SessionBox.vala
1617
src/Widgets/SettingsToggle.vala

src/PopoverWidget.vala

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@ public class QuickSettings.PopoverWidget : Gtk.Box {
1515
private UserList accounts_view;
1616
private Gtk.Button current_user_button;
1717

18-
private uint suspend_cookie = 0;
19-
private uint idle_cookie = 0;
20-
2118
public PopoverWidget (Wingpanel.IndicatorManager.ServerType server_type) {
2219
Object (server_type: server_type);
2320
}
@@ -41,10 +38,7 @@ public class QuickSettings.PopoverWidget : Gtk.Box {
4138
settings_uri = "settings://input/keyboard/behavior"
4239
};
4340

44-
var prevent_sleep_toggle = new SettingsToggle (
45-
new ThemedIcon ("weather-clear-night"),
46-
_("Prevent Sleep")
47-
);
41+
var prevent_sleep_toggle = new PreventSleepToggle ();
4842

4943
var toggle_box = new Gtk.FlowBox () {
5044
column_spacing = 6,
@@ -149,30 +143,6 @@ public class QuickSettings.PopoverWidget : Gtk.Box {
149143
}
150144
});
151145

152-
prevent_sleep_toggle.notify["active"].connect ((obj, pspec) => {
153-
var _prevent_sleep_toggle = (SettingsToggle) obj;
154-
unowned var application = (Gtk.Application) GLib.Application.get_default ();
155-
156-
if (_prevent_sleep_toggle.active && suspend_cookie == 0 && idle_cookie == 0) {
157-
suspend_cookie = application.inhibit (
158-
(Gtk.Window) get_toplevel (),
159-
Gtk.ApplicationInhibitFlags.SUSPEND,
160-
"Prevent session from suspending"
161-
);
162-
idle_cookie = application.inhibit (
163-
(Gtk.Window) get_toplevel (),
164-
Gtk.ApplicationInhibitFlags.IDLE,
165-
"Prevent session from idle"
166-
);
167-
} else if (!_prevent_sleep_toggle.active && suspend_cookie > 0 && idle_cookie > 0) {
168-
application.uninhibit (suspend_cookie);
169-
application.uninhibit (idle_cookie);
170-
171-
suspend_cookie = 0;
172-
idle_cookie = 0;
173-
}
174-
});
175-
176146
current_user_button.clicked.connect (() => {
177147
stack.visible_child = accounts_view;
178148
});
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* SPDX-License-Identifier: GPL-3.0-or-later
3+
* SPDX-FileCopyrightText: 2025 elementary, Inc. (https://elementary.io)
4+
*/
5+
6+
public class QuickSettings.PreventSleepToggle: SettingsToggle {
7+
private uint suspend_cookie = 0;
8+
private uint idle_cookie = 0;
9+
10+
public PreventSleepToggle () {
11+
Object (
12+
icon: new ThemedIcon ("system-suspend-symbolic"),
13+
label: _("Prevent Sleep")
14+
);
15+
}
16+
17+
construct {
18+
settings_uri = "settings://power";
19+
20+
notify["active"].connect ((obj, pspec) => {
21+
var _prevent_sleep_toggle = (SettingsToggle) obj;
22+
unowned var application = (Gtk.Application) GLib.Application.get_default ();
23+
24+
if (_prevent_sleep_toggle.active && suspend_cookie == 0 && idle_cookie == 0) {
25+
suspend_cookie = application.inhibit (
26+
(Gtk.Window) get_toplevel (),
27+
Gtk.ApplicationInhibitFlags.SUSPEND,
28+
"Prevent session from suspending"
29+
);
30+
idle_cookie = application.inhibit (
31+
(Gtk.Window) get_toplevel (),
32+
Gtk.ApplicationInhibitFlags.IDLE,
33+
"Prevent session from idle"
34+
);
35+
36+
icon = new ThemedIcon ("system-suspend-disabled-symbolic");
37+
} else if (!_prevent_sleep_toggle.active && suspend_cookie > 0 && idle_cookie > 0) {
38+
application.uninhibit (suspend_cookie);
39+
application.uninhibit (idle_cookie);
40+
41+
icon = new ThemedIcon ("system-suspend-symbolic");
42+
43+
suspend_cookie = 0;
44+
idle_cookie = 0;
45+
}
46+
});
47+
}
48+
}

src/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ sources = [
2121
'Widgets' / 'CurrentUser.vala',
2222
'Widgets' / 'DarkModeToggle.vala',
2323
'Widgets' / 'EndSessionDialog.vala',
24+
'Widgets' / 'PreventSleepToggle.vala',
2425
'Widgets' / 'RotationToggle.vala',
2526
'Widgets' / 'SettingsToggle.vala',
2627
'Widgets' / 'SessionBox.vala',

0 commit comments

Comments
 (0)