[mutter] monitor-manager: Make sure to emit PropertiesChanged for PowerSaveMode



commit f3595ebd0896537ae3c275a727fa51c5a80a5eb6
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Thu Sep 25 19:39:14 2014 -0600

    monitor-manager: Make sure to emit PropertiesChanged for PowerSaveMode
    
    We overrode the property for PowerSaveMode, which meant that gdbus's
    auto-generated PropertiesChanged code wasn't being run.
    
    This really confused gnome-rr and gnome-settings-daemon's power plugin
    about the current DPMS state of the display, since they used their
    cached PowerSaveMode properties, and never saw a PropertiesChanged being
    emitted.
    
    If a display was on, they set it to off, and then set it back on, the
    setting back on would never fire, since they thought the display was
    already off.
    
    To fix this, remove our custom property override and just respond to
    notifications on the object.
    
    Namely, this fixes the DPMS management when receiving notifications so
    that it now properly times out.

 src/backends/meta-monitor-manager.c |   93 ++++++++++------------------------
 1 files changed, 28 insertions(+), 65 deletions(-)
---
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 127074d..ac48685 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -44,12 +44,6 @@ enum {
   SIGNALS_LAST
 };
 
-enum {
-  PROP_0,
-  PROP_POWER_SAVE_MODE,
-  PROP_LAST
-};
-
 static int signals[SIGNALS_LAST];
 
 static void meta_monitor_manager_display_config_init (MetaDBusDisplayConfigIface *iface);
@@ -168,10 +162,38 @@ make_logical_config (MetaMonitorManager *manager)
 }
 
 static void
+power_save_mode_changed (MetaMonitorManager *manager,
+                         GParamSpec         *pspec,
+                         gpointer            user_data)
+{
+  MetaMonitorManagerClass *klass;
+  int mode = meta_dbus_display_config_get_power_save_mode (META_DBUS_DISPLAY_CONFIG (manager));
+
+  if (mode == META_POWER_SAVE_UNSUPPORTED)
+    return;
+
+  /* If DPMS is unsupported, force the property back. */
+  if (manager->power_save_mode == META_POWER_SAVE_UNSUPPORTED)
+    {
+      meta_dbus_display_config_set_power_save_mode (META_DBUS_DISPLAY_CONFIG (manager), 
META_POWER_SAVE_UNSUPPORTED);
+      return;
+    }
+
+  klass = META_MONITOR_MANAGER_GET_CLASS (manager);
+  if (klass->set_power_save_mode)
+    klass->set_power_save_mode (manager, mode);
+
+  manager->power_save_mode = mode;
+}
+
+static void
 meta_monitor_manager_constructed (GObject *object)
 {
   MetaMonitorManager *manager = META_MONITOR_MANAGER (object);
 
+  g_signal_connect_object (manager, "notify::power-save-mode",
+                           G_CALLBACK (power_save_mode_changed), manager, 0);
+
   manager->in_init = TRUE;
 
   manager->config = meta_monitor_config_new ();
@@ -214,23 +236,6 @@ meta_monitor_manager_constructed (GObject *object)
   manager->in_init = FALSE;
 }
 
-static void
-meta_monitor_manager_set_power_save_mode (MetaMonitorManager *manager,
-                                          MetaPowerSave       mode)
-{
-  MetaMonitorManagerClass *klass;
-
-  if (manager->power_save_mode == META_POWER_SAVE_UNSUPPORTED ||
-      mode == META_POWER_SAVE_UNSUPPORTED)
-    return;
-
-  klass = META_MONITOR_MANAGER_GET_CLASS (manager);
-  if (klass->set_power_save_mode)
-    klass->set_power_save_mode (manager, mode);
-
-  manager->power_save_mode = mode;
-}
-
 void
 meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
                                         int         n_old_outputs)
@@ -298,44 +303,6 @@ meta_monitor_manager_dispose (GObject *object)
   G_OBJECT_CLASS (meta_monitor_manager_parent_class)->dispose (object);
 }
 
-static void
-meta_monitor_manager_set_property (GObject      *object,
-                                   guint         prop_id,
-                                   const GValue *value,
-                                   GParamSpec   *pspec)
-{
-  MetaMonitorManager *self = META_MONITOR_MANAGER (object);
-
-  switch (prop_id)
-    {
-    case PROP_POWER_SAVE_MODE:
-      meta_monitor_manager_set_power_save_mode (self, g_value_get_int (value));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-meta_monitor_manager_get_property (GObject      *object,
-                                   guint         prop_id,
-                                   GValue       *value,
-                                   GParamSpec   *pspec)
-{
-  MetaMonitorManager *self = META_MONITOR_MANAGER (object);
-
-  switch (prop_id)
-    {
-    case PROP_POWER_SAVE_MODE:
-      g_value_set_int (value, self->power_save_mode);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
 static GBytes *
 meta_monitor_manager_real_read_edid (MetaMonitorManager *manager,
                                      MetaOutput         *output)
@@ -356,8 +323,6 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   object_class->constructed = meta_monitor_manager_constructed;
-  object_class->get_property = meta_monitor_manager_get_property;
-  object_class->set_property = meta_monitor_manager_set_property;
   object_class->dispose = meta_monitor_manager_dispose;
   object_class->finalize = meta_monitor_manager_finalize;
 
@@ -371,8 +336,6 @@ meta_monitor_manager_class_init (MetaMonitorManagerClass *klass)
                  0,
                   NULL, NULL, NULL,
                  G_TYPE_NONE, 0);
-
-  g_object_class_override_property (object_class, PROP_POWER_SAVE_MODE, "power-save-mode");
 }
 
 static const double known_diagonals[] = {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]