~elementary-os/ubuntu-package-imports/mutter-bionic

« back to all changes in this revision

Viewing changes to debian/patches/backends-Add-logical-monitor-monitor-output-crtc-ref-chai.patch

  • Committer: RabbitBot
  • Date: 2018-04-19 00:37:35 UTC
  • Revision ID: rabbitbot@elementary.io-20180419003735-m670h4ijuzqbjteq
updated to version 3.28.1-1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From: =?utf-8?q?Jonas_=C3=85dahl?= <jadahl@gmail.com>
 
2
Date: Fri, 3 Nov 2017 04:27:57 -0600
 
3
Subject: backends: Add logical monitor -> monitor -> output -> crtc ref chain
 
4
 
 
5
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/1703668
 
6
Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=786929
 
7
Forwarded: yes, https://gitlab.gnome.org/GNOME/mutter/merge_requests/81
 
8
 
 
9
Make it so that each logical monitor has a reference to all the
 
10
monitors that are assigned to it.
 
11
 
 
12
All monitors has a reference to each output that belongs to it.
 
13
 
 
14
Each output has a reference to any CRTC it has been assigned.
 
15
 
 
16
https://bugzilla.gnome.org/show_bug.cgi?id=786929
 
17
---
 
18
 src/backends/meta-logical-monitor.c | 14 +++++++++-----
 
19
 src/backends/meta-monitor.c         | 22 +++++++++++++++++++---
 
20
 src/backends/meta-output.c          | 16 ++++++++++++++--
 
21
 3 files changed, 42 insertions(+), 10 deletions(-)
 
22
 
 
23
diff --git a/src/backends/meta-logical-monitor.c b/src/backends/meta-logical-monitor.c
 
24
index 9e14d66..bc91d1d 100644
 
25
--- a/src/backends/meta-logical-monitor.c
 
26
+++ b/src/backends/meta-logical-monitor.c
 
27
@@ -144,7 +144,7 @@ meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
 
28
 
 
29
   is_presentation = logical_monitor->is_presentation;
 
30
   logical_monitor->monitors = g_list_append (logical_monitor->monitors,
 
31
-                                             monitor);
 
32
+                                             g_object_ref (monitor));
 
33
 
 
34
   for (l = logical_monitor->monitors; l; l = l->next)
 
35
     {
 
36
@@ -255,13 +255,17 @@ meta_logical_monitor_init (MetaLogicalMonitor *logical_monitor)
 
37
 }
 
38
 
 
39
 static void
 
40
-meta_logical_monitor_finalize (GObject *object)
 
41
+meta_logical_monitor_dispose (GObject *object)
 
42
 {
 
43
   MetaLogicalMonitor *logical_monitor = META_LOGICAL_MONITOR (object);
 
44
 
 
45
-  g_list_free (logical_monitor->monitors);
 
46
+  if (logical_monitor->monitors)
 
47
+    {
 
48
+      g_list_free_full (logical_monitor->monitors, g_object_unref);
 
49
+      logical_monitor->monitors = NULL;
 
50
+    }
 
51
 
 
52
-  G_OBJECT_CLASS (meta_logical_monitor_parent_class)->finalize (object);
 
53
+  G_OBJECT_CLASS (meta_logical_monitor_parent_class)->dispose (object);
 
54
 }
 
55
 
 
56
 static void
 
57
@@ -269,7 +273,7 @@ meta_logical_monitor_class_init (MetaLogicalMonitorClass *klass)
 
58
 {
 
59
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
60
 
 
61
-  object_class->finalize = meta_logical_monitor_finalize;
 
62
+  object_class->dispose = meta_logical_monitor_dispose;
 
63
 }
 
64
 
 
65
 gboolean
 
66
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
 
67
index 1e1af39..9833066 100644
 
68
--- a/src/backends/meta-monitor.c
 
69
+++ b/src/backends/meta-monitor.c
 
70
@@ -388,6 +388,21 @@ meta_monitor_crtc_to_logical_transform (MetaMonitor          *monitor,
 
71
 }
 
72
 
 
73
 static void
 
74
+meta_monitor_dispose (GObject *object)
 
75
+{
 
76
+  MetaMonitor *monitor = META_MONITOR (object);
 
77
+  MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
 
78
+
 
79
+  if (priv->outputs)
 
80
+    {
 
81
+      g_list_free_full (priv->outputs, g_object_unref);
 
82
+      priv->outputs = NULL;
 
83
+    }
 
84
+
 
85
+  G_OBJECT_CLASS (meta_monitor_parent_class)->dispose (object);
 
86
+}
 
87
+
 
88
+static void
 
89
 meta_monitor_finalize (GObject *object)
 
90
 {
 
91
   MetaMonitor *monitor = META_MONITOR (object);
 
92
@@ -395,7 +410,6 @@ meta_monitor_finalize (GObject *object)
 
93
 
 
94
   g_hash_table_destroy (priv->mode_ids);
 
95
   g_list_free_full (priv->modes, (GDestroyNotify) meta_monitor_mode_free);
 
96
-  g_clear_pointer (&priv->outputs, g_list_free);
 
97
   meta_monitor_spec_free (priv->spec);
 
98
 
 
99
   G_OBJECT_CLASS (meta_monitor_parent_class)->finalize (object);
 
100
@@ -414,6 +428,7 @@ meta_monitor_class_init (MetaMonitorClass *klass)
 
101
 {
 
102
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
103
 
 
104
+  object_class->dispose = meta_monitor_dispose;
 
105
   object_class->finalize = meta_monitor_finalize;
 
106
 }
 
107
 
 
108
@@ -550,7 +565,7 @@ meta_monitor_normal_new (MetaGpu    *gpu,
 
109
 
 
110
   monitor_priv->gpu = gpu;
 
111
 
 
112
-  monitor_priv->outputs = g_list_append (NULL, output);
 
113
+  monitor_priv->outputs = g_list_append (NULL, g_object_ref (output));
 
114
   monitor_priv->winsys_id = output->winsys_id;
 
115
   meta_monitor_generate_spec (monitor);
 
116
 
 
117
@@ -665,7 +680,8 @@ add_tiled_monitor_outputs (MetaGpu          *gpu,
 
118
       g_warn_if_fail (output->subpixel_order ==
 
119
                       monitor_tiled->origin_output->subpixel_order);
 
120
 
 
121
-      monitor_priv->outputs = g_list_append (monitor_priv->outputs, output);
 
122
+      monitor_priv->outputs = g_list_append (monitor_priv->outputs,
 
123
+                                             g_object_ref (output));
 
124
     }
 
125
 }
 
126
 
 
127
diff --git a/src/backends/meta-output.c b/src/backends/meta-output.c
 
128
index b5ecccd..2139a17 100644
 
129
--- a/src/backends/meta-output.c
 
130
+++ b/src/backends/meta-output.c
 
131
@@ -43,7 +43,7 @@ meta_output_assign_crtc (MetaOutput *output,
 
132
 
 
133
   g_assert (crtc);
 
134
 
 
135
-  priv->crtc = crtc;
 
136
+  g_set_object (&priv->crtc, crtc);
 
137
 }
 
138
 
 
139
 void
 
140
@@ -51,7 +51,7 @@ meta_output_unassign_crtc (MetaOutput *output)
 
141
 {
 
142
   MetaOutputPrivate *priv = meta_output_get_instance_private (output);
 
143
 
 
144
-  priv->crtc = NULL;
 
145
+  g_clear_object (&priv->crtc);
 
146
 }
 
147
 
 
148
 MetaCrtc *
 
149
@@ -63,6 +63,17 @@ meta_output_get_assigned_crtc (MetaOutput *output)
 
150
 }
 
151
 
 
152
 static void
 
153
+meta_output_dispose (GObject *object)
 
154
+{
 
155
+  MetaOutput *output = META_OUTPUT (object);
 
156
+  MetaOutputPrivate *priv = meta_output_get_instance_private (output);
 
157
+
 
158
+  g_clear_object (&priv->crtc);
 
159
+
 
160
+  G_OBJECT_CLASS (meta_output_parent_class)->dispose (object);
 
161
+}
 
162
+
 
163
+static void
 
164
 meta_output_finalize (GObject *object)
 
165
 {
 
166
   MetaOutput *output = META_OUTPUT (object);
 
167
@@ -91,5 +102,6 @@ meta_output_class_init (MetaOutputClass *klass)
 
168
 {
 
169
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
170
 
 
171
+  object_class->dispose = meta_output_dispose;
 
172
   object_class->finalize = meta_output_finalize;
 
173
 }