[mutter/benzea/ignore-monitor-connector: 1252/1253] monitor: Only take connector into account when required




commit b5d5de7e90c6832310c6733f1151f604f9f3d0b8
Author: Benjamin Berg <bberg redhat com>
Date:   Fri Dec 20 14:24:46 2019 +0100

    monitor: Only take connector into account when required
    
    Add a flag to meta_monitor_spec_equals to disable full connector
    matching when this is possible. In this mode, the connector is simply
    skipped from the compare, assuming that all monitors can be
    disambiguated using just EDID information.
    
    Update all calls to the relevant functions to pass whether a full match
    is needed or not.
    
    https://gitlab.gnome.org/GNOME/mutter/issues/932

 src/backends/meta-monitor-config-manager.c | 18 ++++++++++++------
 src/backends/meta-monitor-config-manager.h |  3 ++-
 src/backends/meta-monitor-manager.c        |  3 ++-
 src/backends/meta-monitor.c                |  9 +++++----
 src/backends/meta-monitor.h                |  3 ++-
 5 files changed, 23 insertions(+), 13 deletions(-)
---
diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c
index e2536e171e..a1831d936c 100644
--- a/src/backends/meta-monitor-config-manager.c
+++ b/src/backends/meta-monitor-config-manager.c
@@ -1007,7 +1007,8 @@ find_logical_config_for_builtin_display_rotation (MetaMonitorConfigManager *conf
 
           monitor_config = logical_monitor_config->monitor_configs->data;
           if (meta_monitor_spec_equals (meta_monitor_get_spec (panel),
-                                        monitor_config->monitor_spec))
+                                        monitor_config->monitor_spec,
+                                        config_manager->monitor_manager->edid_sufficient))
             return logical_monitor_config;
         }
     }
@@ -1511,7 +1512,8 @@ meta_monitors_config_key_equal (gconstpointer data_a,
       MetaMonitorSpec *monitor_spec_a = l_a->data;
       MetaMonitorSpec *monitor_spec_b = l_b->data;
 
-      if (!meta_monitor_spec_equals (monitor_spec_a, monitor_spec_b))
+      if (!meta_monitor_spec_equals (monitor_spec_a, monitor_spec_b,
+                                     config_key_a->edid_sufficient))
         return FALSE;
     }
 
@@ -1576,7 +1578,8 @@ meta_monitors_config_new (MetaMonitorManager           *monitor_manager,
 
       monitor_spec = meta_monitor_get_spec (monitor);
       if (meta_logical_monitor_configs_have_monitor (logical_monitor_configs,
-                                                     monitor_spec))
+                                                     monitor_spec,
+                                                     monitor_manager->edid_sufficient))
         continue;
 
       disabled_monitor_specs =
@@ -1779,7 +1782,8 @@ has_adjacent_neighbour (MetaMonitorsConfig       *config,
 
 gboolean
 meta_logical_monitor_configs_have_monitor (GList           *logical_monitor_configs,
-                                           MetaMonitorSpec *monitor_spec)
+                                           MetaMonitorSpec *monitor_spec,
+                                           gboolean         edid_sufficient)
 {
   GList *l;
 
@@ -1793,7 +1797,8 @@ meta_logical_monitor_configs_have_monitor (GList           *logical_monitor_conf
           MetaMonitorConfig *monitor_config = k->data;
 
           if (meta_monitor_spec_equals (monitor_spec,
-                                        monitor_config->monitor_spec))
+                                        monitor_config->monitor_spec,
+                                        edid_sufficient))
             return TRUE;
         }
     }
@@ -1806,7 +1811,8 @@ meta_monitors_config_is_monitor_enabled (MetaMonitorsConfig *config,
                                          MetaMonitorSpec    *monitor_spec)
 {
   return meta_logical_monitor_configs_have_monitor (config->logical_monitor_configs,
-                                                    monitor_spec);
+                                                    monitor_spec,
+                                                    config->key->edid_sufficient);
 }
 
 gboolean
diff --git a/src/backends/meta-monitor-config-manager.h b/src/backends/meta-monitor-config-manager.h
index 972e1ec9e1..8afd3806d3 100644
--- a/src/backends/meta-monitor-config-manager.h
+++ b/src/backends/meta-monitor-config-manager.h
@@ -178,7 +178,8 @@ MetaMonitorsConfigKey * meta_create_monitors_config_key_for_current_state (MetaM
 
 META_EXPORT_TEST
 gboolean meta_logical_monitor_configs_have_monitor (GList           *logical_monitor_configs,
-                                                    MetaMonitorSpec *monitor_spec);
+                                                    MetaMonitorSpec *monitor_spec,
+                                                    gboolean         edid_sufficient);
 
 META_EXPORT_TEST
 gboolean meta_verify_monitor_mode_spec (MetaMonitorModeSpec *monitor_mode_spec,
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 035b07250c..beab1b1163 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -2635,7 +2635,8 @@ meta_monitor_manager_get_monitor_from_spec (MetaMonitorManager *manager,
       MetaMonitor *monitor = l->data;
 
       if (meta_monitor_spec_equals (meta_monitor_get_spec (monitor),
-                                    monitor_spec))
+                                    monitor_spec,
+                                    manager->edid_sufficient))
         return monitor;
     }
 
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index ae2b8ea04b..d762e5a8a1 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -129,12 +129,13 @@ meta_monitor_spec_clone (MetaMonitorSpec *monitor_spec)
 
 gboolean
 meta_monitor_spec_equals (MetaMonitorSpec *monitor_spec,
-                          MetaMonitorSpec *other_monitor_spec)
+                          MetaMonitorSpec *other_monitor_spec,
+                          gboolean         edid_only)
 {
-  return (g_str_equal (monitor_spec->connector, other_monitor_spec->connector) &&
-          g_str_equal (monitor_spec->vendor, other_monitor_spec->vendor) &&
+  return (g_str_equal (monitor_spec->vendor, other_monitor_spec->vendor) &&
           g_str_equal (monitor_spec->product, other_monitor_spec->product) &&
-          g_str_equal (monitor_spec->serial, other_monitor_spec->serial));
+          g_str_equal (monitor_spec->serial, other_monitor_spec->serial) &&
+          (edid_only || g_str_equal (monitor_spec->connector, other_monitor_spec->connector)));
 }
 
 int
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index eb6b99fea1..65d2f71497 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -272,7 +272,8 @@ MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id);
 
 META_EXPORT_TEST
 gboolean meta_monitor_spec_equals (MetaMonitorSpec *monitor_id,
-                                   MetaMonitorSpec *other_monitor_id);
+                                   MetaMonitorSpec *other_monitor_id,
+                                   gboolean         edid_only);
 
 META_EXPORT_TEST
 int meta_monitor_spec_compare (MetaMonitorSpec *monitor_spec_a,


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