[mutter] output: Tie the output to the monitor it's part of
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] output: Tie the output to the monitor it's part of
- Date: Fri, 22 Jan 2021 17:08:30 +0000 (UTC)
commit 7215b0d88c5d8cd974cdf9039f238325441fa2e9
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Thu Oct 8 17:34:57 2020 +0200
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>
src/backends/meta-monitor.c | 4 ++++
src/backends/meta-output.c | 23 +++++++++++++++++++++++
src/backends/meta-output.h | 6 ++++++
src/tests/monitor-test-utils.c | 2 ++
4 files changed, 35 insertions(+)
---
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index ae7816a3bd..07c574de2b 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -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));
}
}
diff --git a/src/backends/meta-output.c b/src/backends/meta-output.c
index f8ce8655e5..c903110a65 100644
--- a/src/backends/meta-output.c
+++ b/src/backends/meta-output.c
@@ -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)
{
diff --git a/src/backends/meta-output.h b/src/backends/meta-output.h
index c54d4206b3..ea2cf8878b 100644
--- a/src/backends/meta-output.h
+++ b/src/backends/meta-output.h
@@ -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
diff --git a/src/tests/monitor-test-utils.c b/src/tests/monitor-test-utils.c
index a2a0b08a1e..8a18e012aa 100644
--- a/src/tests/monitor-test-utils.c
+++ b/src/tests/monitor-test-utils.c
@@ -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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]