[Xfce4-commits] [apps/xfce4-screensaver] 01/01: Improved low-power state, screensavers are now suspended when monitors are powered off via DPMS

noreply at xfce.org noreply at xfce.org
Sun Mar 10 19:41:14 CET 2019


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-screensaver.

commit 8500820637d746437dbf23dee604003bb428f4a5
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Mar 10 14:41:06 2019 -0400

    Improved low-power state, screensavers are now suspended when monitors are powered off via DPMS
---
 NEWS             |  2 ++
 src/gs-manager.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index f587a1b..39cc1cc 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,8 @@
   - Improved support for monitor dis-/connection events
   - Improved lock screen display on lid open events
   - Improved idle activation
+  - Improved low-power state, screensavers are now suspended
+    when monitors are powered off via DPMS (Debian #921835)
 - Translation Updates:
   Belarusian, Catalan, Czech, Spanish, Basque, Malay, Portuguese, Russian,
   Serbian, Swedish
diff --git a/src/gs-manager.c b/src/gs-manager.c
index 338d4a3..08bd0a9 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -29,6 +29,8 @@
 #include <gdk/gdkx.h>
 #include <gio/gio.h>
 
+#include <X11/extensions/dpms.h>
+
 #include "gs-debug.h"
 #include "gs-grab.h"
 #include "gs-fade.h"
@@ -88,6 +90,8 @@ struct GSManagerPrivate {
     GSGrab         *grab;
     GSFade         *fade;
     guint           unfade_idle_id;
+    guint           deepsleep_idle_id;
+    gboolean        deepsleep;
 };
 
 enum {
@@ -122,6 +126,10 @@ 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 gboolean     deepsleep_idle          (GSManager *manager);
+static void         add_deepsleep_idle      (GSManager *manager);
+
 static void
 manager_add_job_for_window (GSManager *manager,
                             GSWindow  *window,
@@ -1033,6 +1041,8 @@ gs_manager_init (GSManager *manager) {
                       manager);
 
     xfce_bg_load_from_preferences (manager->priv->bg, NULL);
+
+    add_deepsleep_idle(manager);
 }
 
 static void
@@ -1190,6 +1200,47 @@ add_unfade_idle (GSManager *manager) {
     manager->priv->unfade_idle_id = g_timeout_add (500, (GSourceFunc)unfade_idle, manager);
 }
 
+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 (GSManager *manager) {
+    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;
+        manager_suspend_jobs (manager);
+    }
+
+    return TRUE;
+}
+
+static void
+add_deepsleep_idle (GSManager *manager) {
+    remove_deepsleep_idle(manager);
+    manager->priv->deepsleep_idle_id = g_timeout_add (15000, (GSourceFunc)deepsleep_idle, manager);
+}
+
 static gboolean
 window_map_event_cb (GSWindow  *window,
                      GdkEvent  *event,
@@ -1626,7 +1677,8 @@ gs_manager_finalize (GObject *object) {
     g_free (manager->priv->status_message);
 
     remove_unfade_idle (manager);
-    remove_timers (manager);
+    remove_deepsleep_idle (manager);
+    remove_timers(manager);
 
     gs_grab_release (manager->priv->grab, TRUE);
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list