[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