[mutter/gnome-3-12] MetaMonitorConfig: don't keep a previous config with the wrong outputs



commit b4de2458ab19b0f74269d374f36e1c06f43c5e9c
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Tue May 6 19:51:13 2014 +0200

    MetaMonitorConfig: don't keep a previous config with the wrong outputs
    
    We can only apply a configuration if its outputs match the connected
    ones, so discard the current configuration if the set of output changes
    (for example for hotplug), otherwise we will crash trying to apply
    the bogus previous configuration.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=725637

 src/core/monitor-config.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/src/core/monitor-config.c b/src/core/monitor-config.c
index a7e4ed5..0cf0866 100644
--- a/src/core/monitor-config.c
+++ b/src/core/monitor-config.c
@@ -876,7 +876,8 @@ apply_configuration (MetaMonitorConfig  *self,
 
   /* Stored (persistent) configurations override the previous one always.
      Also, we clear the previous configuration if the current one (which is
-     about to become previous) is stored.
+     about to become previous) is stored, or if the current one has
+     different outputs.
   */
   if (stored ||
       (self->current && self->current_is_stored))
@@ -887,7 +888,19 @@ apply_configuration (MetaMonitorConfig  *self,
     }
   else
     {
-      self->previous = self->current;
+      /* Despite the name, config_equal() only checks the set of outputs,
+         not their modes
+      */
+      if (self->current && config_equal (self->current, config))
+        {
+          self->previous = self->current;
+        }
+      else
+        {
+          if (self->current)
+            config_free (self->current);
+          self->previous = NULL;
+        }
     }
 
   self->current = config;


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