Hello community,

here is the log from the commit of package mutter for openSUSE:Factory checked 
in at 2018-07-31 15:55:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mutter (Old)
 and      /work/SRC/openSUSE:Factory/.mutter.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mutter"

Tue Jul 31 15:55:37 2018 rev:130 rq:625068 version:3.28.3+20180719.62660bbd1

Changes:
--------
--- /work/SRC/openSUSE:Factory/mutter/mutter.changes    2018-07-12 
09:15:31.526112847 +0200
+++ /work/SRC/openSUSE:Factory/.mutter.new/mutter.changes       2018-07-31 
15:55:44.999175675 +0200
@@ -1,0 +2,21 @@
+Mon Jul 23 18:36:08 UTC 2018 - [email protected]
+
+- Update to version 3.28.3+20180719.62660bbd1:
+  + gpu-kms: Don't crash if drmModeGetResources returns NULL.
+  + Bump version to 3.28.3.
+  + monitor-manager: Add back warning messages.
+  + screen-cast-src: Allow negotiating the framerate.
+  + contraints: Do not constrain modals without parent.
+  + backends:
+    - Add logical monitor -> monitor -> output -> crtc ref chain.
+    - Move MetaOutput::crtc field into private struct.
+  + renderer-native: Don't crash if the FB surface can't be locked.
+  + device-manager-evdev:
+    - Add main seat to seats by default.
+    - Free the main seat on finalize.
+    - Set and unset the stage for the main seat too.
+  + clutter-device-evdev: Get devices from main seat if no real
+    seat is set.
+  + clutter-seat-evdev: Add function to get device by id.
+
+-------------------------------------------------------------------

Old:
----
  mutter-3.28.2+20180526.abc7ad8e9.tar.xz

New:
----
  mutter-3.28.3+20180719.62660bbd1.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mutter.spec ++++++
--- /var/tmp/diff_new_pack.iu5Vpf/_old  2018-07-31 15:55:45.667176803 +0200
+++ /var/tmp/diff_new_pack.iu5Vpf/_new  2018-07-31 15:55:45.667176803 +0200
@@ -19,7 +19,7 @@
 %define mutter_major 2
 %define mutter_minor 0
 Name:           mutter
-Version:        3.28.2+20180526.abc7ad8e9
+Version:        3.28.3+20180719.62660bbd1
 Release:        0
 Summary:        Window and compositing manager based on Clutter
 License:        GPL-2.0-or-later

++++++ _service ++++++
--- /var/tmp/diff_new_pack.iu5Vpf/_old  2018-07-31 15:55:45.691176843 +0200
+++ /var/tmp/diff_new_pack.iu5Vpf/_new  2018-07-31 15:55:45.691176843 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://gitlab.gnome.org/GNOME/mutter.git</param>
     <param name="scm">git</param>
     <param name="revision">gnome-3-28</param>
-    <param name="versionformat">3.28.2+%cd.%h</param>
+    <param name="versionformat">3.28.3+%cd.%h</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service mode="disabled" name="recompress">

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.iu5Vpf/_old  2018-07-31 15:55:45.703176864 +0200
+++ /var/tmp/diff_new_pack.iu5Vpf/_new  2018-07-31 15:55:45.703176864 +0200
@@ -1,4 +1,4 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://gitlab.gnome.org/GNOME/mutter.git</param>
-              <param 
name="changesrevision">abc7ad8e9f67a720516fb739c5dfe4b49748d423</param></service></servicedata>
\ No newline at end of file
+              <param 
name="changesrevision">62660bbd1526c6135d149df397b2470c6e71969d</param></service></servicedata>
\ No newline at end of file

++++++ mutter-3.28.2+20180526.abc7ad8e9.tar.xz -> 
mutter-3.28.3+20180719.62660bbd1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mutter-3.28.2+20180526.abc7ad8e9/NEWS 
new/mutter-3.28.3+20180719.62660bbd1/NEWS
--- old/mutter-3.28.2+20180526.abc7ad8e9/NEWS   2018-05-26 15:26:09.000000000 
+0200
+++ new/mutter-3.28.3+20180719.62660bbd1/NEWS   2018-07-19 21:29:03.000000000 
+0200
@@ -1,3 +1,16 @@
+3.28.3
+======
+* Handle touch events on server-side titlebars [Carlos; #770185]
+* Fix crash with unhandled mouse buttons on titlebars [Olivier; #160]
+* Fix Korean Hangul support on wayland [Changwoo; #152]
+* Fix crash when taking up from suspend [Jonas; #786929]
+* Fix crash with parent-less modal dialogs [Olivier; #174]
+* Misc. bug fixes [Olivier, Georges; #83, #112, #150, #104,
+
+Contributors:
+  Jonas Ådahl, Olivier Fourdan, Carlos Garnacho, Georges Basile Stavracas Neto,
+  Changwoo Ryu, Marco Trevisan (Treviño)
+
 3.28.2
 ======
 * Take inhibitors into account for monitoring idle [Bastien; #705942]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/clutter/clutter/evdev/clutter-device-manager-evdev.c
 
new/mutter-3.28.3+20180719.62660bbd1/clutter/clutter/evdev/clutter-device-manager-evdev.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/clutter/clutter/evdev/clutter-device-manager-evdev.c
   2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/clutter/clutter/evdev/clutter-device-manager-evdev.c
   2018-07-19 21:29:03.000000000 +0200
@@ -793,10 +793,12 @@
       if (priv->main_seat->libinput_seat == NULL)
         seat = priv->main_seat;
       else
-        seat = clutter_seat_evdev_new (manager_evdev);
+        {
+          seat = clutter_seat_evdev_new (manager_evdev);
+          priv->seats = g_slist_append (priv->seats, seat);
+        }
 
       clutter_seat_evdev_set_libinput_seat (seat, libinput_seat);
-      priv->seats = g_slist_append (priv->seats, seat);
     }
 
   device = _clutter_input_device_evdev_new (manager, seat, libinput_device);
@@ -919,7 +921,6 @@
   ClutterDeviceManagerEvdev *manager_evdev;
   ClutterDeviceManagerEvdevPrivate *priv;
   GSList *l;
-  GSList *device_it;
 
   manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (manager);
   priv = manager_evdev->priv;
@@ -927,14 +928,10 @@
   for (l = priv->seats; l; l = l->next)
     {
       ClutterSeatEvdev *seat = l->data;
+      ClutterInputDevice *device = clutter_seat_evdev_get_device (seat, id);
 
-      for (device_it = seat->devices; device_it; device_it = device_it->next)
-        {
-          ClutterInputDevice *device = device_it->data;
-
-          if (clutter_input_device_get_device_id (device) == id)
-            return device;
-        }
+      if (device)
+        return device;
     }
 
   return NULL;
@@ -1967,6 +1964,7 @@
   xkb_context_unref (ctx);
 
   priv->main_seat = clutter_seat_evdev_new (manager_evdev);
+  priv->seats = g_slist_append (priv->seats, priv->main_seat);
 
   dispatch_libinput (manager_evdev);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/clutter/clutter/evdev/clutter-seat-evdev.c 
new/mutter-3.28.3+20180719.62660bbd1/clutter/clutter/evdev/clutter-seat-evdev.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/clutter/clutter/evdev/clutter-seat-evdev.c 
    2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/clutter/clutter/evdev/clutter-seat-evdev.c 
    2018-07-19 21:29:03.000000000 +0200
@@ -858,6 +858,24 @@
   g_free (seat);
 }
 
+ClutterInputDevice *
+clutter_seat_evdev_get_device (ClutterSeatEvdev *seat,
+                               gint              id)
+{
+  ClutterInputDevice *device;
+  GSList *l;
+
+  for (l = seat->devices; l; l = l->next)
+    {
+      device = l->data;
+
+      if (clutter_input_device_get_device_id (device) == id)
+        return device;
+    }
+
+  return NULL;
+}
+
 void
 clutter_seat_evdev_set_stage (ClutterSeatEvdev *seat,
                               ClutterStage     *stage)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/clutter/clutter/evdev/clutter-seat-evdev.h 
new/mutter-3.28.3+20180719.62660bbd1/clutter/clutter/evdev/clutter-seat-evdev.h
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/clutter/clutter/evdev/clutter-seat-evdev.h 
    2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/clutter/clutter/evdev/clutter-seat-evdev.h 
    2018-07-19 21:29:03.000000000 +0200
@@ -139,6 +139,9 @@
 
 void clutter_seat_evdev_sync_leds (ClutterSeatEvdev *seat);
 
+ClutterInputDevice * clutter_seat_evdev_get_device (ClutterSeatEvdev *seat,
+                                                    gint              id);
+
 ClutterTouchState * clutter_seat_evdev_acquire_touch_state (ClutterSeatEvdev 
*seat,
                                                             int               
device_slot);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mutter-3.28.2+20180526.abc7ad8e9/configure.ac 
new/mutter-3.28.3+20180719.62660bbd1/configure.ac
--- old/mutter-3.28.2+20180526.abc7ad8e9/configure.ac   2018-05-26 
15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/configure.ac   2018-07-19 
21:29:03.000000000 +0200
@@ -2,7 +2,7 @@
 
 m4_define([mutter_major_version], [3])
 m4_define([mutter_minor_version], [28])
-m4_define([mutter_micro_version], [2])
+m4_define([mutter_micro_version], [3])
 
 m4_define([mutter_version],
           [mutter_major_version.mutter_minor_version.mutter_micro_version])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-logical-monitor.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-logical-monitor.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-logical-monitor.c    
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-logical-monitor.c    
2018-07-19 21:29:03.000000000 +0200
@@ -100,11 +100,12 @@
 derive_monitor_transform (MetaMonitor *monitor)
 {
   MetaOutput *main_output;
+  MetaMonitorTransform transform;
 
   main_output = meta_monitor_get_main_output (monitor);
+  transform = meta_output_get_assigned_crtc (main_output)->transform;
 
-  return meta_monitor_crtc_to_logical_transform (monitor,
-                                                 main_output->crtc->transform);
+  return meta_monitor_crtc_to_logical_transform (monitor, transform);
 }
 
 MetaLogicalMonitor *
@@ -145,7 +146,7 @@
 
   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)
     {
@@ -157,10 +158,12 @@
       for (l_output = outputs; l_output; l_output = l_output->next)
         {
           MetaOutput *output = l_output->data;
+          MetaCrtc *crtc;
 
           is_presentation = is_presentation && output->is_presentation;
-          if (output->crtc)
-            output->crtc->logical_monitor = logical_monitor;
+          crtc = meta_output_get_assigned_crtc (output);
+          if (crtc)
+            crtc->logical_monitor = logical_monitor;
         }
     }
 
@@ -220,7 +223,7 @@
   ForeachCrtcData *data = user_data;
 
   data->func (data->logical_monitor,
-              monitor_crtc_mode->output->crtc,
+              meta_output_get_assigned_crtc (monitor_crtc_mode->output),
               data->user_data);
 
   return TRUE;
@@ -254,13 +257,17 @@
 }
 
 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
@@ -268,7 +275,7 @@
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  object_class->finalize = meta_logical_monitor_finalize;
+  object_class->dispose = meta_logical_monitor_dispose;
 }
 
 gboolean
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-monitor-manager-dummy.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-monitor-manager-dummy.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-monitor-manager-dummy.c  
    2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-monitor-manager-dummy.c  
    2018-07-19 21:29:03.000000000 +0200
@@ -486,7 +486,7 @@
               output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
 
               output->is_dirty = TRUE;
-              output->crtc = crtc;
+              meta_output_assign_crtc (output, crtc);
             }
         }
     }
@@ -531,7 +531,7 @@
           continue;
         }
 
-      output->crtc = NULL;
+      meta_output_unassign_crtc (output);
       output->is_primary = FALSE;
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-monitor-manager.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-monitor-manager.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-monitor-manager.c    
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-monitor-manager.c    
2018-07-19 21:29:03.000000000 +0200
@@ -585,6 +585,8 @@
                                                        &error))
         {
           g_clear_object (&config);
+          g_warning ("Failed to use linear monitor configuration: %s",
+                     error->message);
           g_clear_error (&error);
         }
       else
@@ -602,6 +604,8 @@
                                                        &error))
         {
           g_clear_object (&config);
+          g_warning ("Failed to use fallback monitor configuration: %s",
+                     error->message);
           g_clear_error (&error);
         }
       else
@@ -1041,6 +1045,7 @@
       GVariantBuilder crtcs, modes, clones, properties;
       GBytes *edid;
       char *edid_file;
+      MetaCrtc *crtc;
       int crtc_index;
 
       g_variant_builder_init (&crtcs, G_VARIANT_TYPE ("au"));
@@ -1134,8 +1139,8 @@
                                                 output->tile_info.tile_h));
         }
 
-      crtc_index = output->crtc ? g_list_index (combined_crtcs, output->crtc)
-                                : -1;
+      crtc = meta_output_get_assigned_crtc (output);
+      crtc_index = crtc ? g_list_index (combined_crtcs, crtc) : -1;
       g_variant_builder_add (&output_builder, "(uxiausauaua{sv})",
                              i, /* ID */
                              (gint64)output->winsys_id,
@@ -2903,11 +2908,7 @@
 
       if (meta_monitor_is_active (monitor) &&
           g_str_equal (connector, meta_monitor_get_connector (monitor)))
-        {
-          MetaOutput *main_output = meta_monitor_get_main_output (monitor);
-
-          return main_output->crtc->logical_monitor->number;
-        }
+        return meta_monitor_get_logical_monitor (monitor)->number;
     }
 
   return -1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-monitor.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-monitor.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-monitor.c    
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-monitor.c    
2018-07-19 21:29:03.000000000 +0200
@@ -204,10 +204,12 @@
 meta_monitor_is_active (MetaMonitor *monitor)
 {
   MetaOutput *output;
+  MetaCrtc *crtc;
 
   output = meta_monitor_get_main_output (monitor);
+  crtc = meta_output_get_assigned_crtc (output);
 
-  return output->crtc && output->crtc->current_mode;
+  return crtc && crtc->current_mode;
 }
 
 gboolean
@@ -386,6 +388,21 @@
 }
 
 static void
+meta_monitor_dispose (GObject *object)
+{
+  MetaMonitor *monitor = META_MONITOR (object);
+  MetaMonitorPrivate *priv = meta_monitor_get_instance_private (monitor);
+
+  if (priv->outputs)
+    {
+      g_list_free_full (priv->outputs, g_object_unref);
+      priv->outputs = NULL;
+    }
+
+  G_OBJECT_CLASS (meta_monitor_parent_class)->dispose (object);
+}
+
+static void
 meta_monitor_finalize (GObject *object)
 {
   MetaMonitor *monitor = META_MONITOR (object);
@@ -393,7 +410,6 @@
 
   g_hash_table_destroy (priv->mode_ids);
   g_list_free_full (priv->modes, (GDestroyNotify) meta_monitor_mode_free);
-  g_clear_pointer (&priv->outputs, g_list_free);
   meta_monitor_spec_free (priv->spec);
 
   G_OBJECT_CLASS (meta_monitor_parent_class)->finalize (object);
@@ -412,6 +428,7 @@
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  object_class->dispose = meta_monitor_dispose;
   object_class->finalize = meta_monitor_finalize;
 }
 
@@ -493,6 +510,7 @@
   for (i = 0; i < output->n_modes; i++)
     {
       MetaCrtcMode *crtc_mode = output->modes[i];
+      MetaCrtc *crtc;
       MetaMonitorMode *mode;
       gboolean replace;
 
@@ -526,7 +544,9 @@
 
       if (crtc_mode == output->preferred_mode)
         monitor_priv->preferred_mode = mode;
-      if (output->crtc && crtc_mode == output->crtc->current_mode)
+
+      crtc = meta_output_get_assigned_crtc (output);
+      if (crtc && crtc_mode == crtc->current_mode)
         monitor_priv->current_mode = mode;
     }
 }
@@ -545,7 +565,7 @@
 
   monitor_priv->gpu = gpu;
 
-  monitor_priv->outputs = g_list_append (NULL, output);
+  monitor_priv->outputs = g_list_append (NULL, g_object_ref (output));
   monitor_priv->winsys_id = output->winsys_id;
   meta_monitor_generate_spec (monitor);
 
@@ -568,13 +588,15 @@
                                    MetaRectangle *layout)
 {
   MetaOutput *output;
+  MetaCrtc *crtc;
 
   output = meta_monitor_get_main_output (monitor);
+  crtc = meta_output_get_assigned_crtc (output);
   *layout = (MetaRectangle) {
-    .x = output->crtc->rect.x,
-    .y = output->crtc->rect.y,
-    .width = output->crtc->rect.width,
-    .height = output->crtc->rect.height
+    .x = crtc->rect.x,
+    .y = crtc->rect.y,
+    .width = crtc->rect.width,
+    .height = crtc->rect.height
   };
 }
 
@@ -658,7 +680,8 @@
       g_warn_if_fail (output->subpixel_order ==
                       monitor_tiled->origin_output->subpixel_order);
 
-      monitor_priv->outputs = g_list_append (monitor_priv->outputs, output);
+      monitor_priv->outputs = g_list_append (monitor_priv->outputs,
+                                             g_object_ref (output));
     }
 }
 
@@ -764,12 +787,13 @@
     {
       MetaOutput *output = l->data;
       MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];
+      MetaCrtc *crtc;
 
+      crtc = meta_output_get_assigned_crtc (output);
       if (monitor_crtc_mode->crtc_mode &&
-          (!output->crtc ||
-           output->crtc->current_mode != monitor_crtc_mode->crtc_mode))
+          (!crtc || crtc->current_mode != monitor_crtc_mode->crtc_mode))
         return FALSE;
-      else if (!monitor_crtc_mode->crtc_mode && output->crtc)
+      else if (!monitor_crtc_mode->crtc_mode && crtc)
         return FALSE;
     }
 
@@ -1217,14 +1241,16 @@
   for (l = monitor_priv->outputs; l; l = l->next)
     {
       MetaOutput *output = l->data;
+      MetaCrtc *crtc;
 
-      if (!output->crtc)
+      crtc = meta_output_get_assigned_crtc (output);
+      if (!crtc)
         continue;
 
-      min_x = MIN (output->crtc->rect.x, min_x);
-      min_y = MIN (output->crtc->rect.y, min_y);
-      max_x = MAX (output->crtc->rect.x + output->crtc->rect.width, max_x);
-      max_y = MAX (output->crtc->rect.y + output->crtc->rect.height, max_y);
+      min_x = MIN (crtc->rect.x, min_x);
+      min_y = MIN (crtc->rect.y, min_y);
+      max_x = MAX (crtc->rect.x + crtc->rect.width, max_x);
+      max_y = MAX (crtc->rect.y + crtc->rect.height, max_y);
     }
 
   *layout = (MetaRectangle) {
@@ -1318,10 +1344,14 @@
 MetaLogicalMonitor *
 meta_monitor_get_logical_monitor (MetaMonitor *monitor)
 {
-  MetaOutput *output = meta_monitor_get_main_output (monitor);
+  MetaOutput *output;
+  MetaCrtc *crtc;
+
+  output = meta_monitor_get_main_output (monitor);
+  crtc = meta_output_get_assigned_crtc (output);
 
-  if (output->crtc)
-    return output->crtc->logical_monitor;
+  if (crtc)
+    return crtc->logical_monitor;
   else
     return NULL;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-output.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-output.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-output.c     
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-output.c     
2018-07-19 21:29:03.000000000 +0200
@@ -21,7 +21,13 @@
 
 #include "backends/meta-output.h"
 
-G_DEFINE_TYPE (MetaOutput, meta_output, G_TYPE_OBJECT)
+typedef struct _MetaOutputPrivate
+{
+  /* The CRTC driving this output, NULL if the output is not enabled */
+  MetaCrtc *crtc;
+} MetaOutputPrivate;
+
+G_DEFINE_TYPE_WITH_PRIVATE (MetaOutput, meta_output, G_TYPE_OBJECT)
 
 MetaGpu *
 meta_output_get_gpu (MetaOutput *output)
@@ -29,6 +35,44 @@
   return output->gpu;
 }
 
+void
+meta_output_assign_crtc (MetaOutput *output,
+                         MetaCrtc   *crtc)
+{
+  MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+  g_assert (crtc);
+
+  g_set_object (&priv->crtc, crtc);
+}
+
+void
+meta_output_unassign_crtc (MetaOutput *output)
+{
+  MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+  g_clear_object (&priv->crtc);
+}
+
+MetaCrtc *
+meta_output_get_assigned_crtc (MetaOutput *output)
+{
+  MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+  return priv->crtc;
+}
+
+static void
+meta_output_dispose (GObject *object)
+{
+  MetaOutput *output = META_OUTPUT (object);
+  MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+  g_clear_object (&priv->crtc);
+
+  G_OBJECT_CLASS (meta_output_parent_class)->dispose (object);
+}
+
 static void
 meta_output_finalize (GObject *object)
 {
@@ -58,5 +102,6 @@
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
+  object_class->dispose = meta_output_dispose;
   object_class->finalize = meta_output_finalize;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-output.h 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-output.h
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-output.h     
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-output.h     
2018-07-19 21:29:03.000000000 +0200
@@ -64,9 +64,6 @@
 
   MetaGpu *gpu;
 
-  /* The CRTC driving this output, NULL if the output is not enabled */
-  MetaCrtc *crtc;
-
   /* The low-level ID of this output, used to apply back configuration */
   glong winsys_id;
   char *name;
@@ -122,4 +119,11 @@
 
 MetaGpu * meta_output_get_gpu (MetaOutput *output);
 
+void meta_output_assign_crtc (MetaOutput *output,
+                              MetaCrtc   *crtc);
+
+void meta_output_unassign_crtc (MetaOutput *output);
+
+MetaCrtc * meta_output_get_assigned_crtc (MetaOutput *output);
+
 #endif /* META_OUTPUT_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-screen-cast-stream-src.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-screen-cast-stream-src.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/meta-screen-cast-stream-src.c 
    2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/meta-screen-cast-stream-src.c 
    2018-07-19 21:29:03.000000000 +0200
@@ -360,9 +360,9 @@
     ":", spa_type->format_video.format, "I", spa_type->video_format.BGRx,
     ":", spa_type->format_video.size, "R", &SPA_RECTANGLE (width, height),
     ":", spa_type->format_video.framerate, "F", &SPA_FRACTION (0, 1),
-    ":", spa_type->format_video.max_framerate, "Fr", &max_framerate,
-                                                     PROP_RANGE 
(&min_framerate,
-                                                                 
&max_framerate));
+    ":", spa_type->format_video.max_framerate, "Fru", &max_framerate,
+                                                      PROP_RANGE 
(&min_framerate,
+                                                                  
&max_framerate));
 
   pw_stream_add_listener (pipewire_stream,
                           &priv->pipewire_stream_listener,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-cursor-renderer-native.c
 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-cursor-renderer-native.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-cursor-renderer-native.c
      2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-cursor-renderer-native.c
      2018-07-19 21:29:03.000000000 +0200
@@ -291,6 +291,7 @@
     data->in_cursor_renderer_native;
   MetaCursorRendererNativePrivate *priv =
     meta_cursor_renderer_native_get_instance_private (cursor_renderer_native);
+  MetaCrtc *crtc;
   MetaMonitorTransform transform;
   ClutterRect scaled_crtc_rect;
   float scale;
@@ -330,6 +331,8 @@
     },
   };
 
+  crtc = meta_output_get_assigned_crtc (monitor_crtc_mode->output);
+
   if (priv->has_hw_cursor &&
       clutter_rect_intersection (&scaled_crtc_rect,
                                  &data->in_local_cursor_rect,
@@ -340,7 +343,7 @@
       float crtc_cursor_x, crtc_cursor_y;
 
       set_crtc_cursor (data->in_cursor_renderer_native,
-                       monitor_crtc_mode->output->crtc,
+                       crtc,
                        data->in_cursor_sprite);
 
       gpu_kms = META_GPU_KMS (meta_monitor_get_gpu (monitor));
@@ -350,7 +353,7 @@
       crtc_cursor_y = (data->in_local_cursor_rect.origin.y -
                        scaled_crtc_rect.origin.y) * scale;
       drmModeMoveCursor (kms_fd,
-                         monitor_crtc_mode->output->crtc->crtc_id,
+                         crtc->crtc_id,
                          roundf (crtc_cursor_x),
                          roundf (crtc_cursor_y));
 
@@ -358,8 +361,7 @@
     }
   else
     {
-      set_crtc_cursor (data->in_cursor_renderer_native,
-                       monitor_crtc_mode->output->crtc, NULL);
+      set_crtc_cursor (data->in_cursor_renderer_native, crtc, NULL);
     }
 
   return TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-gpu-kms.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-gpu-kms.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-gpu-kms.c     
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-gpu-kms.c     
2018-07-19 21:29:03.000000000 +0200
@@ -105,8 +105,10 @@
   for (l = meta_gpu_get_outputs (gpu); l; l = l->next)
     {
       MetaOutput *output = l->data;
+      MetaCrtc *assigned_crtc;
 
-      if (output->crtc == crtc)
+      assigned_crtc = meta_output_get_assigned_crtc (output);
+      if (assigned_crtc == crtc)
         g_array_append_val (connectors_array, output->winsys_id);
     }
 
@@ -186,8 +188,10 @@
   for (l = meta_gpu_get_outputs (gpu); l; l = l->next)
     {
       MetaOutput *output = l->data;
+      MetaCrtc *assigned_crtc;
 
-      if (output->crtc == crtc)
+      assigned_crtc = meta_output_get_assigned_crtc (output);
+      if (assigned_crtc == crtc)
         {
           connected_crtc_found = TRUE;
           break;
@@ -797,6 +801,13 @@
    */
   drm_resources = drmModeGetResources (kms_fd);
 
+  if (!drm_resources)
+    {
+      g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "No resources");
+      meta_launcher_close_restricted (launcher, kms_fd);
+      return NULL;
+    }
+
   n_connectors = drm_resources->count_connectors;
 
   drmModeFreeResources (drm_resources);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-monitor-manager-kms.c
 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-monitor-manager-kms.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-monitor-manager-kms.c
 2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-monitor-manager-kms.c
 2018-07-19 21:29:03.000000000 +0200
@@ -188,7 +188,7 @@
               MetaOutput *output = g_ptr_array_index (crtc_info->outputs, j);
 
               output->is_dirty = TRUE;
-              output->crtc = crtc;
+              meta_output_assign_crtc (output, crtc);
             }
         }
 
@@ -249,7 +249,7 @@
               continue;
             }
 
-          output->crtc = NULL;
+          meta_output_unassign_crtc (output);
           output->is_primary = FALSE;
         }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-output-kms.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-output-kms.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-output-kms.c  
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-output-kms.c  
2018-07-19 21:29:03.000000000 +0200
@@ -64,11 +64,13 @@
 void
 meta_output_kms_set_underscan (MetaOutput *output)
 {
-  if (!output->crtc)
+  MetaCrtc *crtc;
+
+  crtc = meta_output_get_assigned_crtc (output);
+  if (!crtc)
     return;
 
-  meta_crtc_kms_set_underscan (output->crtc,
-                               output->is_underscanning);
+  meta_crtc_kms_set_underscan (crtc, output->is_underscanning);
 }
 
 void
@@ -600,14 +602,14 @@
 
           if (crtc->crtc_id == output_kms->current_encoder->crtc_id)
             {
-              output->crtc = crtc;
+              meta_output_assign_crtc (output, crtc);
               break;
             }
         }
     }
   else
     {
-      output->crtc = NULL;
+      meta_output_unassign_crtc (output);
     }
 
   if (old_output)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-renderer-native.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-renderer-native.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/native/meta-renderer-native.c 
    2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/native/meta-renderer-native.c 
    2018-07-19 21:29:03.000000000 +0200
@@ -1601,6 +1601,12 @@
   /* Now we need to set the CRTC to whatever is the front buffer */
   next_bo = gbm_surface_lock_front_buffer (gbm_surface);
 
+  if (!next_bo)
+    {
+      g_error ("Impossible to lock surface front buffer: %m");
+      return FALSE;
+    }
+
   for (i = 0; i < gbm_bo_get_plane_count (next_bo); i++)
     {
       strides[i] = gbm_bo_get_stride_for_plane (next_bo, i);
@@ -2083,6 +2089,7 @@
   EGLDisplay egl_display = renderer_gpu_data->egl_display;
   MetaMonitor *monitor;
   MetaOutput *output;
+  MetaCrtc *crtc;
   EGLConfig egl_config;
   EGLStreamKHR egl_stream;
   EGLSurface egl_surface;
@@ -2106,6 +2113,7 @@
 
   monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
   output = meta_monitor_get_main_output (monitor);
+  crtc = meta_output_get_assigned_crtc (output);
 
   /*
    * An "logical_monitor" may have multiple outputs/crtcs in case its tiled,
@@ -2113,7 +2121,7 @@
    * lets pass the first one.
    */
   output_attribs[0] = EGL_DRM_CRTC_EXT;
-  output_attribs[1] = output->crtc->crtc_id;
+  output_attribs[1] = crtc->crtc_id;
   output_attribs[2] = EGL_NONE;
 
   if (!meta_egl_get_output_layers (egl, egl_display,
@@ -2711,12 +2719,10 @@
 {
   MetaMonitor *main_monitor;
   MetaOutput *main_output;
-  MetaMonitorTransform crtc_transform;
+  MetaCrtc *crtc;
   main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
   main_output = meta_monitor_get_main_output (main_monitor);
-  crtc_transform =
-    meta_monitor_logical_to_crtc_transform (main_monitor,
-                                            logical_monitor->transform);
+  crtc = meta_output_get_assigned_crtc (main_output);
 
   /*
    * Pick any monitor and output and check; all CRTCs of a logical monitor will
@@ -2724,11 +2730,11 @@
    */
 
   if (meta_monitor_manager_is_transform_handled (monitor_manager,
-                                                 main_output->crtc,
-                                                 crtc_transform))
+                                                 crtc,
+                                                 crtc->transform))
     return META_MONITOR_TRANSFORM_NORMAL;
   else
-    return crtc_transform;
+    return crtc->transform;
 }
 
 static MetaRendererView *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/meta-monitor-manager-xrandr.c
 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/meta-monitor-manager-xrandr.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/meta-monitor-manager-xrandr.c
 2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/meta-monitor-manager-xrandr.c
 2018-07-19 21:29:03.000000000 +0200
@@ -225,8 +225,10 @@
       for (j = 0; j < crtc_info->outputs->len; j++)
         {
           MetaOutput *output = ((MetaOutput**) crtc_info->outputs->pdata)[j];
+          MetaCrtc *assigned_crtc;
 
-          if (output->crtc != crtc)
+          assigned_crtc = meta_output_get_assigned_crtc (output);
+          if (assigned_crtc != crtc)
             return TRUE;
         }
 
@@ -243,6 +245,7 @@
                               MetaOutputInfo **output_infos,
                               unsigned int     n_output_infos)
 {
+  MetaCrtc *assigned_crtc;
   gboolean output_is_found = FALSE;
   unsigned int i;
 
@@ -265,8 +268,10 @@
       output_is_found = TRUE;
     }
 
+  assigned_crtc = meta_output_get_assigned_crtc (output);
+
   if (!output_is_found)
-    return output->crtc != NULL;
+    return assigned_crtc != NULL;
 
   for (i = 0; i < n_crtc_infos; i++)
     {
@@ -279,7 +284,7 @@
             ((MetaOutput**) crtc_info->outputs->pdata)[j];
 
           if (crtc_info_output == output &&
-              crtc_info->crtc == output->crtc)
+              crtc_info->crtc == assigned_crtc)
             return FALSE;
         }
     }
@@ -455,7 +460,7 @@
               output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
 
               output->is_dirty = TRUE;
-              output->crtc = crtc;
+              meta_output_assign_crtc (output, crtc);
 
               output_ids[j] = output->winsys_id;
             }
@@ -521,7 +526,7 @@
           continue;
         }
 
-      output->crtc = NULL;
+      meta_output_unassign_crtc (output);
       output->is_primary = FALSE;
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/meta-output-xrandr.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/meta-output-xrandr.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/meta-output-xrandr.c  
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/meta-output-xrandr.c  
2018-07-19 21:29:03.000000000 +0200
@@ -97,10 +97,13 @@
    * make the border configurable. */
   if (underscanning)
     {
+      MetaCrtc *crtc;
       uint32_t border_value;
 
+      crtc = meta_output_get_assigned_crtc (output);
+
       prop = XInternAtom (xdisplay, "underscan hborder", False);
-      border_value = output->crtc->current_mode->width * 0.05;
+      border_value = crtc->current_mode->width * 0.05;
 
       xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
                                         (XID) output->winsys_id,
@@ -109,7 +112,7 @@
                                         1, &border_value);
 
       prop = XInternAtom (xdisplay, "underscan vborder", False);
-      border_value = output->crtc->current_mode->height * 0.05;
+      border_value = crtc->current_mode->height * 0.05;
 
       xcb_randr_change_output_property (XGetXCBConnection (xdisplay),
                                         (XID) output->winsys_id,
@@ -737,14 +740,14 @@
     }
   output->n_possible_crtcs = n_actual_crtcs;
 
-  output->crtc = NULL;
+  meta_output_unassign_crtc (output);
   for (l = meta_gpu_get_crtcs (gpu); l; l = l->next)
     {
       MetaCrtc *crtc = l->data;
 
       if ((XID) crtc->crtc_id == xrandr_output->crtc)
         {
-          output->crtc = crtc;
+          meta_output_assign_crtc (output, crtc);
           break;
         }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/meta-stage-x11-nested.c 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/meta-stage-x11-nested.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/meta-stage-x11-nested.c   
    2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/meta-stage-x11-nested.c   
    2018-07-19 21:29:03.000000000 +0200
@@ -113,7 +113,7 @@
   CoglTexture *texture = data->texture;
   MetaLogicalMonitor *logical_monitor = data->logical_monitor;
   MetaOutput *output = monitor_crtc_mode->output;
-  MetaCrtc *crtc = output->crtc;
+  MetaCrtc *crtc;
   MetaRendererView *renderer_view = META_RENDERER_VIEW (data->view);
   MetaMonitorTransform view_transform;
   MetaMonitorTransform layout_transform = META_MONITOR_TRANSFORM_NORMAL;
@@ -129,6 +129,8 @@
   texture_width = cogl_texture_get_width (texture);
   texture_height = cogl_texture_get_height (texture);
 
+  crtc = meta_output_get_assigned_crtc (output);
+
   clutter_stage_view_get_layout (data->view, &view_layout);
   sample_x = crtc->rect.x - view_layout.x;
   sample_y = crtc->rect.y - view_layout.y;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/nested/meta-renderer-x11-nested.c
 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/nested/meta-renderer-x11-nested.c
--- 
old/mutter-3.28.2+20180526.abc7ad8e9/src/backends/x11/nested/meta-renderer-x11-nested.c
     2018-05-26 15:26:09.000000000 +0200
+++ 
new/mutter-3.28.3+20180719.62660bbd1/src/backends/x11/nested/meta-renderer-x11-nested.c
     2018-07-19 21:29:03.000000000 +0200
@@ -50,24 +50,22 @@
 {
   MetaMonitor *main_monitor;
   MetaOutput *main_output;
-  MetaMonitorTransform crtc_transform;
+  MetaCrtc *crtc;
+
   main_monitor = meta_logical_monitor_get_monitors (logical_monitor)->data;
   main_output = meta_monitor_get_main_output (main_monitor);
-  crtc_transform =
-    meta_monitor_logical_to_crtc_transform (main_monitor,
-                                            logical_monitor->transform);
-
+  crtc = meta_output_get_assigned_crtc (main_output);
   /*
    * Pick any monitor and output and check; all CRTCs of a logical monitor will
    * always have the same transform assigned to them.
    */
 
   if (meta_monitor_manager_is_transform_handled (monitor_manager,
-                                                 main_output->crtc,
-                                                 crtc_transform))
+                                                 crtc,
+                                                 crtc->transform))
     return META_MONITOR_TRANSFORM_NORMAL;
   else
-    return crtc_transform;
+    return crtc->transform;
 }
 
 static MetaRendererView *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/core/constraints.c 
new/mutter-3.28.3+20180719.62660bbd1/src/core/constraints.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/core/constraints.c 2018-05-26 
15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/core/constraints.c 2018-07-19 
21:29:03.000000000 +0200
@@ -886,7 +886,8 @@
   MetaRectangle child_rect, parent_rect;
   gboolean constraint_already_satisfied;
 
-  if (!meta_window_is_attached_dialog (window) ||
+  if (!parent ||
+      !meta_window_is_attached_dialog (window) ||
       meta_window_get_placement_rule (window))
     return TRUE;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/tests/meta-monitor-manager-test.c 
new/mutter-3.28.3+20180719.62660bbd1/src/tests/meta-monitor-manager-test.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/tests/meta-monitor-manager-test.c  
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/tests/meta-monitor-manager-test.c  
2018-07-19 21:29:03.000000000 +0200
@@ -209,7 +209,7 @@
               output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
 
               output->is_dirty = TRUE;
-              output->crtc = crtc;
+              meta_output_assign_crtc (output, crtc);
             }
         }
     }
@@ -255,7 +255,7 @@
           continue;
         }
 
-      output->crtc = NULL;
+      meta_output_unassign_crtc (output);
       output->is_primary = FALSE;
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/mutter-3.28.2+20180526.abc7ad8e9/src/tests/monitor-unit-tests.c 
new/mutter-3.28.3+20180719.62660bbd1/src/tests/monitor-unit-tests.c
--- old/mutter-3.28.2+20180526.abc7ad8e9/src/tests/monitor-unit-tests.c 
2018-05-26 15:26:09.000000000 +0200
+++ new/mutter-3.28.3+20180719.62660bbd1/src/tests/monitor-unit-tests.c 
2018-07-19 21:29:03.000000000 +0200
@@ -449,22 +449,24 @@
   CheckMonitorModeData *data = user_data;
   MetaMonitorManager *monitor_manager = data->monitor_manager;
   MetaOutput *output;
+  MetaCrtc *crtc;
 
   output = output_from_winsys_id (monitor_manager,
                                   data->expect_crtc_mode_iter->output);
+  crtc = meta_output_get_assigned_crtc (output);
 
   if (data->expect_crtc_mode_iter->crtc_mode == -1)
     {
-      g_assert_null (output->crtc);
+      g_assert_null (crtc);
     }
   else
     {
       MetaLogicalMonitor *logical_monitor;
 
-      g_assert_nonnull (output->crtc);
-      g_assert (monitor_crtc_mode->crtc_mode == output->crtc->current_mode);
+      g_assert_nonnull (crtc);
+      g_assert (monitor_crtc_mode->crtc_mode == crtc->current_mode);
 
-      logical_monitor = output->crtc->logical_monitor;
+      logical_monitor = crtc->logical_monitor;
       g_assert_nonnull (logical_monitor);
     }
 
@@ -553,6 +555,7 @@
       for (l_output = outputs; l_output; l_output = l_output->next)
         {
           MetaOutput *output = l_output->data;
+          MetaCrtc *crtc;
 
           if (output->is_primary)
             {
@@ -560,8 +563,8 @@
               primary_output = output;
             }
 
-          g_assert (!output->crtc ||
-                    output->crtc->logical_monitor == logical_monitor);
+          crtc = meta_output_get_assigned_crtc (output);
+          g_assert (!crtc || crtc->logical_monitor == logical_monitor);
           g_assert_cmpint (logical_monitor->is_presentation,
                            ==,
                            output->is_presentation);
@@ -983,7 +986,8 @@
 
       output = g_object_new (META_TYPE_OUTPUT, NULL);
 
-      output->crtc = crtc;
+      if (crtc)
+        meta_output_assign_crtc (output, crtc);
       output->winsys_id = i;
       output->name = (is_laptop_panel ? g_strdup_printf ("eDP-%d",
                                                   ++n_laptop_panels)


Reply via email to