summaryrefslogtreecommitdiff
path: root/src/backends/meta-logical-monitor.c
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2017-11-03 18:27:57 +0800
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2018-04-16 20:00:58 -0500
commit4997867c7e129dd0eaac32751e3b80c5651a6c1e (patch)
treedf978b0b8ab8da5cb993e59ab97578ebb76467d3 /src/backends/meta-logical-monitor.c
parent5b0a1b52a6851da95056b5d48365a1f9dccc8244 (diff)
downloadmutter-wip/monitor-crtc-private-struct.tar.gz
backends: Add logical monitor -> monitor -> output -> crtc ref chainwip/monitor-crtc-private-struct
Make it so that each logical monitor has a reference to all the monitors that are assigned to it. All monitors has a reference to each output that belongs to it. Each output has a reference to any CRTC it has been assigned. https://bugzilla.gnome.org/show_bug.cgi?id=786929
Diffstat (limited to 'src/backends/meta-logical-monitor.c')
-rw-r--r--src/backends/meta-logical-monitor.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/backends/meta-logical-monitor.c b/src/backends/meta-logical-monitor.c
index 9e14d660d..bc91d1d06 100644
--- a/src/backends/meta-logical-monitor.c
+++ b/src/backends/meta-logical-monitor.c
@@ -144,7 +144,7 @@ meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
is_presentation = logical_monitor->is_presentation;
logical_monitor->monitors = g_list_append (logical_monitor->monitors,
- monitor);
+ g_object_ref (monitor));
for (l = logical_monitor->monitors; l; l = l->next)
{
@@ -255,13 +255,17 @@ meta_logical_monitor_init (MetaLogicalMonitor *logical_monitor)
}
static void
-meta_logical_monitor_finalize (GObject *object)
+meta_logical_monitor_dispose (GObject *object)
{
MetaLogicalMonitor *logical_monitor = META_LOGICAL_MONITOR (object);
- g_list_free (logical_monitor->monitors);
+ if (logical_monitor->monitors)
+ {
+ g_list_free_full (logical_monitor->monitors, g_object_unref);
+ logical_monitor->monitors = NULL;
+ }
- G_OBJECT_CLASS (meta_logical_monitor_parent_class)->finalize (object);
+ G_OBJECT_CLASS (meta_logical_monitor_parent_class)->dispose (object);
}
static void
@@ -269,7 +273,7 @@ meta_logical_monitor_class_init (MetaLogicalMonitorClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->finalize = meta_logical_monitor_finalize;
+ object_class->dispose = meta_logical_monitor_dispose;
}
gboolean