kathenas / rpms / mutter

Forked from rpms/mutter 5 years ago
Clone

Blame SOURCES/0001-monitor-manager-only-reuse-initial-config-if-monitor.patch

88c283
From 4ad8fd80355189ecbde6c38961335ae4be4db8b3 Mon Sep 17 00:00:00 2001
776610
From: rpm-build <rpm-build>
776610
Date: Tue, 11 Sep 2018 10:19:44 -0400
776610
Subject: [PATCH] monitor-manager: only reuse initial-config if monitor
776610
 topology matches startup
776610
776610
Right now we try to apply the current monitor config when a new
776610
monitor is attached.  The current config obviously doesn't include the
776610
new monitor, so the new monitor isn't lit up.
776610
776610
The only reason we apply the current config at all is to handle the
776610
startup case:  We want to reuse the config set in Xorg when first
776610
logging in.
776610
776610
This commit changes the code to look at the *initial config* instead
776610
of the current config, and only if the new monitor topology matches
776610
the start up topology.
776610
---
776610
 src/backends/meta-monitor-config-manager.c | 20 +++++++++++++++-----
776610
 src/backends/meta-monitor-config-manager.h |  2 +-
776610
 src/backends/meta-monitor-manager.c        | 16 +++++++++++++++-
776610
 3 files changed, 31 insertions(+), 7 deletions(-)
776610
776610
diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
88c283
index d64ca1f79..c09edbe00 100644
776610
--- a/src/backends/meta-monitor-config-manager.c
776610
+++ b/src/backends/meta-monitor-config-manager.c
88c283
@@ -42,6 +42,7 @@ struct _MetaMonitorConfigManager
776610
   MetaMonitorConfigStore *config_store;
776610
 
776610
   MetaMonitorsConfig *current_config;
776610
+  MetaMonitorsConfig *initial_config;
776610
   GQueue config_history;
776610
 };
776610
 
88c283
@@ -663,9 +664,10 @@ create_logical_monitor_config_from_output (MetaMonitorManager           *monitor
776610
 }
776610
 
776610
 MetaMonitorsConfig *
776610
-meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_manager)
776610
+meta_monitor_config_manager_create_initial (MetaMonitorConfigManager *config_manager)
776610
 {
776610
   MetaMonitorManager *monitor_manager = config_manager->monitor_manager;
776610
+  MetaMonitorsConfig *initial_config;
776610
   GList *logical_monitor_configs;
776610
   MetaMonitor *primary_monitor;
776610
   MetaLogicalMonitorLayoutMode layout_mode;
88c283
@@ -673,6 +675,9 @@ meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_man
776610
   GList *monitors;
776610
   GList *l;
776610
 
776610
+  if (config_manager->initial_config != NULL)
776610
+    return g_object_ref (config_manager->initial_config);
776610
+
776610
   if (meta_monitor_config_store_get_config_count (config_manager->config_store) > 0)
776610
     return NULL;
776610
 
88c283
@@ -714,10 +719,14 @@ meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_man
776610
                                                logical_monitor_config);
776610
     }
776610
 
776610
-  return meta_monitors_config_new (monitor_manager,
776610
-                                   logical_monitor_configs,
776610
-                                   layout_mode,
776610
-                                   META_MONITORS_CONFIG_FLAG_NONE);
776610
+  initial_config = meta_monitors_config_new (monitor_manager,
776610
+                                             logical_monitor_configs,
776610
+                                             layout_mode,
776610
+                                             META_MONITORS_CONFIG_FLAG_NONE);
776610
+
776610
+  config_manager->initial_config = g_object_ref (initial_config);
776610
+
776610
+  return initial_config;
776610
 }
776610
 
776610
 MetaMonitorsConfig *
88c283
@@ -1256,6 +1265,7 @@ meta_monitor_config_manager_dispose (GObject *object)
776610
     META_MONITOR_CONFIG_MANAGER (object);
776610
 
776610
   g_clear_object (&config_manager->current_config);
776610
+  g_clear_object (&config_manager->initial_config);
776610
   meta_monitor_config_manager_clear_history (config_manager);
776610
 
776610
   G_OBJECT_CLASS (meta_monitor_config_manager_parent_class)->dispose (object);
776610
diff --git a/src/backends/meta-monitor-config-manager.h b/src/backends/meta-monitor-config-manager.h
88c283
index 364a2b36b..409611bb0 100644
776610
--- a/src/backends/meta-monitor-config-manager.h
776610
+++ b/src/backends/meta-monitor-config-manager.h
88c283
@@ -95,7 +95,7 @@ META_EXPORT_TEST
776610
 MetaMonitorsConfig * meta_monitor_config_manager_get_stored (MetaMonitorConfigManager *config_manager);
776610
 
88c283
 META_EXPORT_TEST
776610
-MetaMonitorsConfig * meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_manager);
776610
+MetaMonitorsConfig * meta_monitor_config_manager_create_initial (MetaMonitorConfigManager *config_manager);
88c283
 META_EXPORT_TEST
776610
 MetaMonitorsConfig * meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_manager);
776610
 
776610
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
88c283
index 05b27c6be..bb4b44188 100644
776610
--- a/src/backends/meta-monitor-manager.c
776610
+++ b/src/backends/meta-monitor-manager.c
88c283
@@ -534,9 +534,11 @@ should_use_stored_config (MetaMonitorManager *manager)
776610
 MetaMonitorsConfig *
776610
 meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
776610
 {
776610
+  g_autoptr (MetaMonitorsConfig) initial_config = NULL;
776610
   MetaMonitorsConfig *config = NULL;
776610
   GError *error = NULL;
776610
   gboolean use_stored_config;
776610
+  MetaMonitorsConfigKey *current_state_key;
776610
   MetaMonitorsConfigMethod method;
776610
   MetaMonitorsConfigMethod fallback_method =
776610
     META_MONITORS_CONFIG_METHOD_TEMPORARY;
88c283
@@ -547,6 +549,18 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
776610
   else
776610
     method = META_MONITORS_CONFIG_METHOD_TEMPORARY;
776610
 
776610
+  initial_config = meta_monitor_config_manager_create_initial (manager->config_manager);
776610
+
776610
+  if (initial_config)
776610
+    {
776610
+      current_state_key = meta_create_monitors_config_key_for_current_state (manager);
776610
+
776610
+      /* don't ever reuse initial configuration, if the monitor topology changed
776610
+       */
776610
+      if (current_state_key && !meta_monitors_config_key_equal (current_state_key, initial_config->key))
776610
+        g_clear_object (&initial_config);
776610
+    }
776610
+
776610
   if (use_stored_config)
776610
     {
776610
       config = meta_monitor_config_manager_get_stored (manager->config_manager);
88c283
@@ -614,7 +628,7 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
776610
       g_clear_object (&config);
776610
     }
776610
 
776610
-  config = meta_monitor_config_manager_create_current (manager->config_manager);
776610
+  config = g_steal_pointer (&initial_config);
776610
   if (config)
776610
     {
776610
       if (!meta_monitor_manager_apply_monitors_config (manager,
776610
-- 
88c283
2.21.0
776610