monitor: Don't only use 'winsys ID' to check sameness
What determines whether one MetaMonitor is the same as the other should be whether the actual monitor is the same. The way to check this is comparing the EDID vendor/product/serial fields. Whene these are incomplete, fall back on the 'winsys ID'. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2141>
This commit is contained in:
parent
ccb6a7e84f
commit
7ee60e1143
1 changed files with 26 additions and 5 deletions
|
@ -405,12 +405,33 @@ gboolean
|
|||
meta_monitor_is_same_as (MetaMonitor *monitor,
|
||||
MetaMonitor *other_monitor)
|
||||
{
|
||||
MetaMonitorPrivate *priv =
|
||||
meta_monitor_get_instance_private (monitor);
|
||||
MetaMonitorPrivate *other_priv =
|
||||
meta_monitor_get_instance_private (other_monitor);
|
||||
const MetaMonitorSpec *spec = meta_monitor_get_spec (monitor);
|
||||
const MetaMonitorSpec *other_spec = meta_monitor_get_spec (other_monitor);
|
||||
|
||||
return priv->winsys_id == other_priv->winsys_id;
|
||||
if ((g_strcmp0 (spec->vendor, "unknown") == 0 ||
|
||||
g_strcmp0 (spec->product, "unknown") == 0 ||
|
||||
g_strcmp0 (spec->serial, "unknown") == 0) &&
|
||||
(g_strcmp0 (other_spec->vendor, "unknown") == 0 ||
|
||||
g_strcmp0 (other_spec->product, "unknown") == 0 ||
|
||||
g_strcmp0 (other_spec->serial, "unknown") == 0))
|
||||
{
|
||||
MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
|
||||
MetaMonitorPrivate *other_priv =
|
||||
meta_monitor_get_instance_private (other_monitor);
|
||||
|
||||
return priv->winsys_id == other_priv->winsys_id;
|
||||
}
|
||||
|
||||
if (g_strcmp0 (spec->vendor, other_spec->vendor) != 0)
|
||||
return FALSE;
|
||||
|
||||
if (g_strcmp0 (spec->product, other_spec->product) != 0)
|
||||
return FALSE;
|
||||
|
||||
if (g_strcmp0 (spec->serial, other_spec->serial) != 0)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Reference in a new issue