output: Tie the output to the monitor it's part of

Outputs correspond to active connectors, that we translate into
monitors. Make this association more real by adding a pointer back to
the monitor from the output.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1488>
This commit is contained in:
Jonas Ådahl 2020-10-08 17:34:57 +02:00 committed by Marge Bot
parent 5edc118d62
commit 7215b0d88c
4 changed files with 35 additions and 0 deletions

View File

@ -675,6 +675,8 @@ meta_monitor_normal_new (MetaGpu *gpu,
monitor_priv->gpu = gpu;
monitor_priv->outputs = g_list_append (NULL, g_object_ref (output));
meta_output_set_monitor (output, monitor);
monitor_priv->winsys_id = meta_output_get_id (output);
meta_monitor_generate_spec (monitor);
@ -802,6 +804,8 @@ add_tiled_monitor_outputs (MetaGpu *gpu,
monitor_priv->outputs = g_list_append (monitor_priv->outputs,
g_object_ref (output));
meta_output_set_monitor (output, META_MONITOR (monitor_tiled));
}
}

View File

@ -45,6 +45,8 @@ typedef struct _MetaOutputPrivate
MetaOutputInfo *info;
MetaMonitor *monitor;
/* The CRTC driving this output, NULL if the output is not enabled */
MetaCrtc *crtc;
@ -112,6 +114,27 @@ meta_output_get_gpu (MetaOutput *output)
return priv->gpu;
}
MetaMonitor *
meta_output_get_monitor (MetaOutput *output)
{
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
g_warn_if_fail (priv->monitor);
return priv->monitor;
}
void
meta_output_set_monitor (MetaOutput *output,
MetaMonitor *monitor)
{
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
g_warn_if_fail (!priv->monitor);
priv->monitor = monitor;
}
const char *
meta_output_get_name (MetaOutput *output)
{

View File

@ -139,6 +139,12 @@ uint64_t meta_output_get_id (MetaOutput *output);
META_EXPORT_TEST
MetaGpu * meta_output_get_gpu (MetaOutput *output);
META_EXPORT_TEST
MetaMonitor * meta_output_get_monitor (MetaOutput *output);
void meta_output_set_monitor (MetaOutput *output,
MetaMonitor *monitor);
const char * meta_output_get_name (MetaOutput *output);
META_EXPORT_TEST

View File

@ -289,6 +289,8 @@ check_logical_monitor (MetaMonitorManager *monitor_manager,
MetaOutput *output = l_output->data;
MetaCrtc *crtc;
g_assert (meta_output_get_monitor (output) == monitor);
if (meta_output_is_primary (output))
{
g_assert_null (primary_output);