From f959cd241413c9be91712906e7c5ed61f43db096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Bonithon?= <gael@xfce.org> Date: Wed, 6 Dec 2023 19:57:09 +0100 Subject: [PATCH] Remove DPMS support It's not xfce4-screensaver's job as long as xfce4-power-manager exists. The DPMS should only be configurable in one place, which simplifies life for both the user and the developer. --- src/gs-manager.c | 115 ---------------------------- src/gs-prefs.c | 44 ----------- src/gs-prefs.h | 19 ----- src/xfce4-screensaver-configure.py | 35 +-------- src/xfce4-screensaver-preferences.c | 2 +- 5 files changed, 2 insertions(+), 213 deletions(-) diff --git a/src/gs-manager.c b/src/gs-manager.c index f5284700..cb9cbce8 100644 --- a/src/gs-manager.c +++ b/src/gs-manager.c @@ -24,11 +24,8 @@ #include <config.h> #include <gdk/gdk.h> -#include <gdk/gdkx.h> #include <gio/gio.h> -#include <X11/extensions/dpms.h> - #include "gs-debug.h" #include "gs-grab.h" #include "gs-job.h" @@ -38,10 +35,6 @@ static void gs_manager_finalize (GObject *object); -static void remove_dpms_timer (GSManager *manager); -static void add_dpms_timer (GSManager *manager, - glong timeout); - struct GSManagerPrivate { GHashTable *windows; GHashTable *jobs; @@ -61,11 +54,8 @@ struct GSManagerPrivate { guint lock_timeout_id; guint cycle_timeout_id; - guint dpms_timeout_id; GSGrab *grab; - guint deepsleep_idle_id; - gboolean deepsleep; }; enum { @@ -87,9 +77,6 @@ static guint signals[LAST_SIGNAL] = { 0, }; G_DEFINE_TYPE_WITH_PRIVATE (GSManager, gs_manager, G_TYPE_OBJECT) -static void remove_deepsleep_idle (GSManager *manager); -static void add_deepsleep_idle (GSManager *manager); - static void manager_maybe_stop_job_for_window (GSManager *manager, GSWindow *window) { @@ -449,63 +436,12 @@ gs_manager_init (GSManager *manager) { NULL, (GDestroyNotify) remove_job); manager->priv->windows = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) gs_window_destroy); - - add_deepsleep_idle(manager); -} - -static gboolean -activate_dpms_timeout (gpointer user_data) { - GSManager *manager = user_data; - BOOL state; - CARD16 power_level; - - if (manager->priv->active) { - if (DPMSInfo(gdk_x11_get_default_xdisplay(), &power_level, &state)) { - if (state) { - if (power_level == DPMSModeOn) { - gs_debug("DPMS: On -> Standby"); - DPMSForceLevel (gdk_x11_get_default_xdisplay(), DPMSModeStandby); - remove_dpms_timer (manager); - add_dpms_timer (manager, manager->priv->prefs->dpms_off_timeout * 60); - return FALSE; - } else if (power_level == DPMSModeStandby || power_level == DPMSModeSuspend) { - gs_debug("DPMS: %s -> Off", power_level == DPMSModeStandby ? "Standby" : "Suspend"); - DPMSForceLevel (gdk_x11_get_default_xdisplay(), DPMSModeOff); - } - } - } - } - - manager->priv->dpms_timeout_id = 0; - return FALSE; -} - -static void -remove_dpms_timer (GSManager *manager) { - if (manager->priv->dpms_timeout_id != 0) { - g_source_remove (manager->priv->dpms_timeout_id); - manager->priv->dpms_timeout_id = 0; - } -} - -static void -add_dpms_timer (GSManager *manager, - glong timeout) { - if (manager->priv->prefs->mode != GS_MODE_BLANK_ONLY) - return; - - if (timeout == 0) - return; - - gs_debug ("Scheduling DPMS change after screensaver is idling for %i seconds(s)", timeout); - manager->priv->dpms_timeout_id = g_timeout_add_seconds (timeout, activate_dpms_timeout, manager); } static void remove_timers (GSManager *manager) { remove_lock_timer (manager); remove_cycle_timer (manager); - remove_dpms_timer (manager); } static gboolean @@ -629,48 +565,6 @@ window_grab_broken_cb (GSWindow *window, } } -static void -remove_deepsleep_idle (GSManager *manager) { - if (manager->priv->deepsleep_idle_id > 0) { - g_source_remove (manager->priv->deepsleep_idle_id); - manager->priv->deepsleep_idle_id = 0; - } -} - -static gboolean -deepsleep_idle (gpointer user_data) { - GSManager *manager = user_data; - BOOL state; - CARD16 power_level; - - if (!DPMSInfo(gdk_x11_get_default_xdisplay(), &power_level, &state)) { - if (manager->priv->deepsleep) { - gs_debug ("Unable to read DPMS state, exiting deep sleep"); - manager->priv->deepsleep = FALSE; - } - return TRUE; - } - - if (power_level == DPMSModeOn) { - if (manager->priv->deepsleep) { - gs_debug ("Exiting deep sleep"); - manager->priv->deepsleep = FALSE; - } - } else if (!manager->priv->throttled && !manager->priv->deepsleep) { - gs_debug ("Entering deep sleep, suspending jobs"); - manager->priv->deepsleep = TRUE; - g_hash_table_foreach (manager->priv->jobs, (GHFunc) suspend_job, manager); - } - - return TRUE; -} - -static void -add_deepsleep_idle (GSManager *manager) { - remove_deepsleep_idle(manager); - manager->priv->deepsleep_idle_id = g_timeout_add_seconds (15, deepsleep_idle, manager); -} - static gboolean window_map_event_cb (GSWindow *window, GdkEvent *event, @@ -698,9 +592,6 @@ manager_show_window (GSManager *manager, add_cycle_timer (manager, manager->priv->prefs->cycle); } - remove_dpms_timer (manager); - add_dpms_timer (manager, manager->priv->prefs->dpms_sleep_timeout); - /* FIXME: only emit signal once */ g_signal_emit (manager, signals[ACTIVATED], 0); } @@ -768,8 +659,6 @@ handle_window_dialog_up (GSManager *manager, gs_debug ("Suspending jobs"); g_hash_table_foreach (manager->priv->jobs, (GHFunc) suspend_job, manager); } - - remove_dpms_timer (manager); } static void @@ -801,9 +690,6 @@ handle_window_dialog_down (GSManager *manager, g_hash_table_foreach (manager->priv->jobs, (GHFunc) resume_job, manager); } - remove_dpms_timer (manager); - add_dpms_timer (manager, manager->priv->prefs->dpms_sleep_timeout); - g_signal_emit (manager, signals[AUTH_REQUEST_END], 0); } @@ -1021,7 +907,6 @@ gs_manager_finalize (GObject *object) { g_return_if_fail (manager->priv != NULL); - remove_deepsleep_idle (manager); remove_timers(manager); gs_grab_release (manager->priv->grab, TRUE); g_hash_table_destroy (manager->priv->jobs); diff --git a/src/gs-prefs.c b/src/gs-prefs.c index f8740066..5bebf88b 100644 --- a/src/gs-prefs.c +++ b/src/gs-prefs.c @@ -143,30 +143,6 @@ _gs_prefs_set_cycle_timeout (GSPrefs *prefs, prefs->cycle = value * 60; } -static void -_gs_prefs_set_dpms_sleep_timeout (GSPrefs *prefs, - int value) { - if (value < 0) - value = 0; - - if (value > 60) - value = 60; - - prefs->dpms_sleep_timeout = value; -} - -static void -_gs_prefs_set_dpms_off_timeout (GSPrefs *prefs, - int value) { - if (value < 0) - value = 0; - - if (value > 60) - value = 60; - - prefs->dpms_off_timeout = value; -} - static void _gs_prefs_set_mode (GSPrefs *prefs, gint mode) { @@ -371,16 +347,6 @@ gs_prefs_load_from_settings (GSPrefs *prefs) { DEFAULT_KEY_CYCLE_DELAY); _gs_prefs_set_cycle_timeout (prefs, value); - value = xfconf_channel_get_double (prefs->priv->channel, - KEY_DPMS_SLEEP_AFTER, - DEFAULT_KEY_DPMS_SLEEP_AFTER); - _gs_prefs_set_dpms_sleep_timeout (prefs, (int)value); - - value = xfconf_channel_get_double (prefs->priv->channel, - KEY_DPMS_OFF_AFTER, - DEFAULT_KEY_DPMS_OFF_AFTER); - _gs_prefs_set_dpms_off_timeout (prefs, (int)value); - mode = xfconf_channel_get_int (prefs->priv->channel, KEY_MODE, DEFAULT_KEY_MODE); @@ -517,16 +483,6 @@ key_changed_cb (XfconfChannel *channel, delay = xfconf_channel_get_int (channel, property, DEFAULT_KEY_CYCLE_DELAY); _gs_prefs_set_cycle_timeout (prefs, delay); - } else if (strcmp (property, KEY_DPMS_SLEEP_AFTER) == 0) { - double delay; - - delay = xfconf_channel_get_double (channel, property, DEFAULT_KEY_DPMS_SLEEP_AFTER); - _gs_prefs_set_dpms_sleep_timeout (prefs, (int)delay); - } else if (strcmp (property, KEY_DPMS_OFF_AFTER) == 0) { - double delay; - - delay = xfconf_channel_get_double (channel, property, DEFAULT_KEY_DPMS_OFF_AFTER); - _gs_prefs_set_dpms_off_timeout (prefs, (int)delay); } else if (strcmp (property, KEY_KEYBOARD_ENABLED) == 0) { gboolean enabled; diff --git a/src/gs-prefs.h b/src/gs-prefs.h index 7b1f8e12..4537a5ff 100644 --- a/src/gs-prefs.h +++ b/src/gs-prefs.h @@ -185,22 +185,6 @@ G_BEGIN_DECLS #define KEY_USER_SWITCH_ENABLED "/lock/user-switching/enabled" #define DEFAULT_KEY_USER_SWITCH_ENABLED TRUE -/** - * Blank screensaver DPMS sleep timeout (seconds) - * This value controls the timeout after blanking the screen to suspend the display. - * A value of 0 means that it is disabled. - */ -#define KEY_DPMS_SLEEP_AFTER "/screensavers/xfce-blank/dpms-sleep-after" -#define DEFAULT_KEY_DPMS_SLEEP_AFTER 5 - -/** - * Blank screensaver DPMS power timeout (minutes) - * This value controls the timeout after blanking the screen to power off the display. - * A value of 0 means that it is disabled. - */ -#define KEY_DPMS_OFF_AFTER "/screensavers/xfce-blank/dpms-off-after" -#define DEFAULT_KEY_DPMS_OFF_AFTER 15 - typedef enum { GS_MODE_BLANK_ONLY, @@ -238,9 +222,6 @@ typedef struct GSList *themes; /* the screensaver themes to run */ GSSaverMode mode; /* theme selection mode */ - - guint dpms_sleep_timeout; /* blank: # of minutes to wait before sleeping the display */ - guint dpms_off_timeout; /* blank: # of minutes after sleep to power off the display */ } GSPrefs; typedef struct diff --git a/src/xfce4-screensaver-configure.py b/src/xfce4-screensaver-configure.py index 596eb583..16769f82 100755 --- a/src/xfce4-screensaver-configure.py +++ b/src/xfce4-screensaver-configure.py @@ -144,27 +144,6 @@ class DesktopScreensaverSettings(ScreensaverSettings): self.name = name def load_from_file(self, filename): - if self.name == "xfce-blank": - self.valid = True - - self.options = self.parse_internal() - self.label = _("Blank screen") - comment = _("Powered by Display Power Management Signaling (DPMS),\n" - "Xfce Screensaver can automatically suspend your displays\n" - "to save power.\n\n" - "Xfce Power Manager and other applications also manage\n" - "DPMS settings. If the settings here won't work, make sure\n" - "display power management wasn't disabled there.\n" - "If your displays are powering off at different\n" - "intervals, be sure to check for conflicting settings.") - self.arguments = [] - self.description = comment - - if self.options: - self.configurable = True - - return True - if not os.path.exists(filename): return False @@ -194,15 +173,6 @@ class DesktopScreensaverSettings(ScreensaverSettings): def parse_internal(self): options = OrderedDict() - if self.name == "xfce-blank": - options["dpms-sleep-after"] = {'id': 'dpms-sleep-after', 'type': 'slider', - 'label': _("After blanking, put display to sleep after:"), - 'default': 5, 'low': 0, 'high': 60, 'step': 1, - 'low-label': _("Never"), 'high-label': _("60 seconds")} - options["dpms-off-after"] = {'id': 'dpms-off-after', 'type': 'slider', - 'label': _("After sleeping, switch display off after:"), - 'default': 15, 'low': 0, 'high': 60, 'step': 1, - 'low-label': _("Never"), 'high-label': _("60 minutes")} if self.name == "xfce-floaters": options["number-of-images"] = {'id': 'number-of-images', 'type': 'spinbutton', 'label': _("Max number of images"), 'argument': '-n %', @@ -715,9 +685,6 @@ def get_filename(theme): if os.path.exists(cfg): return cfg - if theme == "xfce-blank": - return "" - return None @@ -784,7 +751,7 @@ if __name__ == "__main__": if fname.endswith(".xml"): obj = XmlScreensaverSettings(saver) - elif fname.endswith(".desktop") or saver == "xfce-blank": + elif fname.endswith(".desktop"): obj = DesktopScreensaverSettings(saver) else: show_fatal(primary, _("Unrecognized file type: %s") % fname) diff --git a/src/xfce4-screensaver-preferences.c b/src/xfce4-screensaver-preferences.c index b9504149..46812c20 100644 --- a/src/xfce4-screensaver-preferences.c +++ b/src/xfce4-screensaver-preferences.c @@ -279,7 +279,7 @@ config_set_theme (const char *theme_id) { active_theme = g_strdup (theme_id); } - if (mode != GS_MODE_RANDOM) { + if (mode != GS_MODE_RANDOM && mode != GS_MODE_BLANK_ONLY) { GtkWidget *configure_button = GTK_WIDGET (gtk_builder_get_object (builder, "configure_button")); gtk_widget_set_sensitive (configure_button, TRUE); } -- GitLab