diff --git a/data/icons/system-suspend-disabled.svg b/data/icons/system-suspend-disabled.svg new file mode 100644 index 0000000..a823785 --- /dev/null +++ b/data/icons/system-suspend-disabled.svg @@ -0,0 +1,2 @@ + + diff --git a/data/quick-settings.gresource.xml b/data/quick-settings.gresource.xml index 44799c0..e58d821 100644 --- a/data/quick-settings.gresource.xml +++ b/data/quick-settings.gresource.xml @@ -8,6 +8,7 @@ icons/dark-mode.svg icons/system-suspend.svg + icons/system-suspend-disabled.svg icons/quick-settings.svg icons/rotation-allowed.svg icons/rotation-locked.svg diff --git a/po/POTFILES b/po/POTFILES index 2eb7841..99529a2 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -11,6 +11,7 @@ src/Services/UserManager.vala src/Widgets/CurrentUser.vala src/Widgets/DarkModeToggle.vala src/Widgets/EndSessionDialog.vala +src/Widgets/PreventSleepToggle.vala src/Widgets/RotationToggle.vala src/Widgets/SessionBox.vala src/Widgets/SettingsToggle.vala diff --git a/src/PopoverWidget.vala b/src/PopoverWidget.vala index 826ffae..8859281 100644 --- a/src/PopoverWidget.vala +++ b/src/PopoverWidget.vala @@ -15,9 +15,6 @@ public class QuickSettings.PopoverWidget : Gtk.Box { private UserList accounts_view; private Gtk.Button current_user_button; - private uint suspend_cookie = 0; - private uint idle_cookie = 0; - public PopoverWidget (Wingpanel.IndicatorManager.ServerType server_type) { Object (server_type: server_type); } @@ -41,10 +38,7 @@ public class QuickSettings.PopoverWidget : Gtk.Box { settings_uri = "settings://input/keyboard/behavior" }; - var prevent_sleep_toggle = new SettingsToggle ( - new ThemedIcon ("weather-clear-night"), - _("Prevent Sleep") - ); + var prevent_sleep_toggle = new PreventSleepToggle (); var toggle_box = new Gtk.FlowBox () { column_spacing = 6, @@ -149,30 +143,6 @@ public class QuickSettings.PopoverWidget : Gtk.Box { } }); - prevent_sleep_toggle.notify["active"].connect ((obj, pspec) => { - var _prevent_sleep_toggle = (SettingsToggle) obj; - unowned var application = (Gtk.Application) GLib.Application.get_default (); - - if (_prevent_sleep_toggle.active && suspend_cookie == 0 && idle_cookie == 0) { - suspend_cookie = application.inhibit ( - (Gtk.Window) get_toplevel (), - Gtk.ApplicationInhibitFlags.SUSPEND, - "Prevent session from suspending" - ); - idle_cookie = application.inhibit ( - (Gtk.Window) get_toplevel (), - Gtk.ApplicationInhibitFlags.IDLE, - "Prevent session from idle" - ); - } else if (!_prevent_sleep_toggle.active && suspend_cookie > 0 && idle_cookie > 0) { - application.uninhibit (suspend_cookie); - application.uninhibit (idle_cookie); - - suspend_cookie = 0; - idle_cookie = 0; - } - }); - current_user_button.clicked.connect (() => { stack.visible_child = accounts_view; }); diff --git a/src/Widgets/PreventSleepToggle.vala b/src/Widgets/PreventSleepToggle.vala new file mode 100644 index 0000000..728bed3 --- /dev/null +++ b/src/Widgets/PreventSleepToggle.vala @@ -0,0 +1,48 @@ +/* + * SPDX-License-Identifier: GPL-3.0-or-later + * SPDX-FileCopyrightText: 2025 elementary, Inc. (https://elementary.io) + */ + +public class QuickSettings.PreventSleepToggle: SettingsToggle { + private uint suspend_cookie = 0; + private uint idle_cookie = 0; + + public PreventSleepToggle () { + Object ( + icon: new ThemedIcon ("system-suspend-symbolic"), + label: _("Prevent Sleep") + ); + } + + construct { + settings_uri = "settings://power"; + + notify["active"].connect ((obj, pspec) => { + var _prevent_sleep_toggle = (SettingsToggle) obj; + unowned var application = (Gtk.Application) GLib.Application.get_default (); + + if (_prevent_sleep_toggle.active && suspend_cookie == 0 && idle_cookie == 0) { + suspend_cookie = application.inhibit ( + (Gtk.Window) get_toplevel (), + Gtk.ApplicationInhibitFlags.SUSPEND, + "Prevent session from suspending" + ); + idle_cookie = application.inhibit ( + (Gtk.Window) get_toplevel (), + Gtk.ApplicationInhibitFlags.IDLE, + "Prevent session from idle" + ); + + icon = new ThemedIcon ("system-suspend-disabled-symbolic"); + } else if (!_prevent_sleep_toggle.active && suspend_cookie > 0 && idle_cookie > 0) { + application.uninhibit (suspend_cookie); + application.uninhibit (idle_cookie); + + icon = new ThemedIcon ("system-suspend-symbolic"); + + suspend_cookie = 0; + idle_cookie = 0; + } + }); + } +} diff --git a/src/meson.build b/src/meson.build index ca4a48e..f4becd8 100644 --- a/src/meson.build +++ b/src/meson.build @@ -21,6 +21,7 @@ sources = [ 'Widgets' / 'CurrentUser.vala', 'Widgets' / 'DarkModeToggle.vala', 'Widgets' / 'EndSessionDialog.vala', + 'Widgets' / 'PreventSleepToggle.vala', 'Widgets' / 'RotationToggle.vala', 'Widgets' / 'SettingsToggle.vala', 'Widgets' / 'SessionBox.vala',