[gnome-desktop] gnome-rr: Add dpms-mode property
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-desktop] gnome-rr: Add dpms-mode property
- Date: Thu, 2 Jul 2015 17:12:42 +0000 (UTC)
commit 367bfb724a4f8c00b613023a3141f70588f12242
Author: Bastien Nocera <hadess hadess net>
Date: Wed Jul 1 20:04:50 2015 +0200
gnome-rr: Add dpms-mode property
So that other parts of the desktop environment can monitor the state of
the power saving mode, and disable their own power consuming tasks when
the screens are off.
https://bugzilla.gnome.org/show_bug.cgi?id=751794
libgnome-desktop/gnome-rr.c | 55 +++++++++++++++++++++++++++++++++++++++++++
libgnome-desktop/gnome-rr.h | 2 +
2 files changed, 57 insertions(+), 0 deletions(-)
---
diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c
index 2c56d5c..fa6a7e3 100644
--- a/libgnome-desktop/gnome-rr.c
+++ b/libgnome-desktop/gnome-rr.c
@@ -42,6 +42,7 @@
enum {
SCREEN_PROP_0,
SCREEN_PROP_GDK_SCREEN,
+ SCREEN_PROP_DPMS_MODE,
SCREEN_PROP_LAST,
};
@@ -672,6 +673,14 @@ name_owner_changed (GObject *object,
g_free (new_name_owner);
}
+static void
+power_save_mode_changed (GObject *object,
+ GParamSpec *pspec,
+ GnomeRRScreen *self)
+{
+ g_object_notify (G_OBJECT (self), "dpms-mode");
+}
+
static gboolean
gnome_rr_screen_initable_init (GInitable *initable, GCancellable *canc, GError **error)
{
@@ -697,6 +706,8 @@ gnome_rr_screen_initable_init (GInitable *initable, GCancellable *canc, GError *
G_CALLBACK (name_owner_changed), self, 0);
g_signal_connect_object (priv->proxy, "monitors-changed",
G_CALLBACK (screen_on_monitors_changed), self, 0);
+ g_signal_connect_object (priv->proxy, "notify::power-save-mode",
+ G_CALLBACK (power_save_mode_changed), self, 0);
return TRUE;
}
@@ -726,6 +737,8 @@ on_proxy_acquired (GObject *object,
G_CALLBACK (name_owner_changed), self, 0);
g_signal_connect_object (priv->proxy, "monitors-changed",
G_CALLBACK (screen_on_monitors_changed), self, 0);
+ g_signal_connect_object (priv->proxy, "notify::power-save-mode",
+ G_CALLBACK (power_save_mode_changed), self, 0);
g_task_return_boolean (task, TRUE);
}
@@ -815,6 +828,9 @@ gnome_rr_screen_set_property (GObject *gobject, guint property_id, const GValue
case SCREEN_PROP_GDK_SCREEN:
priv->gdk_screen = g_value_get_object (value);
return;
+ case SCREEN_PROP_DPMS_MODE:
+ gnome_rr_screen_set_dpms_mode (self, g_value_get_enum (value), NULL);
+ return;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, property);
return;
@@ -832,6 +848,14 @@ gnome_rr_screen_get_property (GObject *gobject, guint property_id, GValue *value
case SCREEN_PROP_GDK_SCREEN:
g_value_set_object (value, priv->gdk_screen);
return;
+ case SCREEN_PROP_DPMS_MODE: {
+ GnomeRRDpmsMode mode;
+ if (gnome_rr_screen_get_dpms_mode (self, &mode, NULL))
+ g_value_set_enum (value, mode);
+ else
+ g_value_set_enum (value, GNOME_RR_DPMS_UNKNOWN);
+ }
+ return;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, property);
return;
@@ -864,6 +888,19 @@ gnome_rr_screen_class_init (GnomeRRScreenClass *klass)
G_PARAM_STATIC_STRINGS)
);
+ g_object_class_install_property(
+ gobject_class,
+ SCREEN_PROP_DPMS_MODE,
+ g_param_spec_enum (
+ "dpms-mode",
+ "DPMS Mode",
+ "The DPMS mode for this GnomeRRScreen",
+ GNOME_TYPE_RR_DPMS_MODE,
+ GNOME_RR_DPMS_UNKNOWN,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS)
+ );
+
screen_signals[SCREEN_CHANGED] = g_signal_new("changed",
G_TYPE_FROM_CLASS (gobject_class),
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
@@ -2189,3 +2226,21 @@ _gnome_rr_output_get_tile_info (GnomeRROutput *output,
*tile = output->tile_info;
return TRUE;
}
+
+GType
+gnome_rr_dpms_mode_get_type (void)
+{
+ static GType etype = 0;
+ if (etype == 0) {
+ static const GEnumValue values[] = {
+ { GNOME_RR_DPMS_ON, "GNOME_RR_DPMS_ON", "on" },
+ { GNOME_RR_DPMS_STANDBY, "GNOME_RR_DPMS_STANDBY", "standby" },
+ { GNOME_RR_DPMS_SUSPEND, "GNOME_RR_DPMS_SUSPEND", "suspend" },
+ { GNOME_RR_DPMS_OFF, "GNOME_RR_DPMS_OFF", "off" },
+ { GNOME_RR_DPMS_UNKNOWN, "GNOME_RR_DPMS_UNKNOWN", "unknown" },
+ { 0, NULL, NULL }
+ };
+ etype = g_enum_register_static ("GnomeRRDpmsModeType", values);
+ }
+ return etype;
+}
diff --git a/libgnome-desktop/gnome-rr.h b/libgnome-desktop/gnome-rr.h
index 3d4906b..9311f07 100644
--- a/libgnome-desktop/gnome-rr.h
+++ b/libgnome-desktop/gnome-rr.h
@@ -97,11 +97,13 @@ typedef enum {
#define GNOME_TYPE_RR_OUTPUT (gnome_rr_output_get_type())
#define GNOME_TYPE_RR_CRTC (gnome_rr_crtc_get_type())
#define GNOME_TYPE_RR_MODE (gnome_rr_mode_get_type())
+#define GNOME_TYPE_RR_DPMS_MODE (gnome_rr_dpms_mode_get_type())
GType gnome_rr_screen_get_type (void);
GType gnome_rr_output_get_type (void);
GType gnome_rr_crtc_get_type (void);
GType gnome_rr_mode_get_type (void);
+GType gnome_rr_dpms_mode_get_type (void);
/* GnomeRRScreen */
GnomeRRScreen * gnome_rr_screen_new (GdkScreen *screen,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]