[mutter/benzea/ignore-monitor-connector: 1/2] monitor: Only take connector into account when required
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/benzea/ignore-monitor-connector: 1/2] monitor: Only take connector into account when required
- Date: Wed, 12 Feb 2020 14:01:55 +0000 (UTC)
commit 1dc6998bf9cb2f5343bf411505c595f9a5f0a79c
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 a2e83d890..8a8abf5a1 100644
--- a/src/backends/meta-monitor-config-manager.c
+++ b/src/backends/meta-monitor-config-manager.c
@@ -943,7 +943,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;
}
}
@@ -1432,7 +1433,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;
}
@@ -1497,7 +1499,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 =
@@ -1700,7 +1703,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;
@@ -1714,7 +1718,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;
}
}
@@ -1727,7 +1732,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 207cec473..ee743e5c1 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 b0e1c449c..19cdee592 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -2475,7 +2475,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 5d163e1a8..ae405aa29 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -126,12 +126,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 58d2950c9..60472dd97 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]