[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1036856: bookworm-pu: package mutter/43.6-1~deb12u1



On Wed, 21 Jun 2023 at 00:06:15 +0100, Simon McVittie wrote:
> On Wed, 07 Jun 2023 at 17:05:37 +0100, Simon McVittie wrote:
> > On Sun, 28 May 2023 at 00:15:26 +0100, Simon McVittie wrote:
> > > The mutter 43.5 release from GNOME upstream seems like something we should
> > > have in a bookworm update.
> > 
> > So does the 43.6 release.
> 
> Updated debdiff attached (everything is the same as mutter_43.6-pre.diff,
> except for debian/changelog)

Really attached now...

    smcv
diffstat for mutter-43.4 mutter-43.6

 NEWS                                                                                  |   21 
 debian/changelog                                                                      |   27 
 debian/libmutter-11-0.symbols                                                         |    1 
 debian/patches/Update-Abkhazian-translation.patch                                     | 4262 ----------
 debian/patches/clutter-actor-Get-next-action-from-list-before-handling-c.patch        |   51 
 debian/patches/cursor-tracker-Don-t-leak-window-cursor-on-exit.patch                  |   22 
 debian/patches/debian/Mark-xwayland-test-case-as-known-to-be-flaky-on-32-bit-AR.patch |    4 
 debian/patches/debian/meson-Do-not-mark-CI-test-tools-as-required.patch               |    4 
 debian/patches/debian/tests-Disable-restore-size-test.patch                           |    4 
 debian/patches/debian/tests-Tag-unstable-tests-as-flaky.patch                         |    4 
 debian/patches/meson-add-back-default_driver-option.patch                             |    6 
 debian/patches/series                                                                 |    7 
 debian/patches/tests-Break-up-stacking-installed-tests-into-more-smaller.patch        |    4 
 debian/patches/wayland-Skip-subsurface-desync-if-parent-is-NULL.patch                 |   35 
 debian/patches/wayland-cursor-surface-Update-cursor-on-dispose.patch                  |  701 -
 debian/patches/wayland-outputs-Fix-potential-crash-when-output-has-no-mo.patch        |   40 
 debian/patches/wayland-xdg-shell-Dismiss-instead-of-destroy-invalid-popu.patch        |   28 
 meson.build                                                                           |    2 
 src/backends/meta-screen-cast-window-stream.c                                         |   14 
 src/backends/meta-screen-cast-window.c                                                |   12 
 src/backends/meta-screen-cast-window.h                                                |    6 
 src/backends/native/meta-kms-impl-device-dummy.c                                      |    7 
 src/compositor/meta-compositor-view.c                                                 |    2 
 src/compositor/meta-surface-actor-wayland.c                                           |   50 
 src/compositor/meta-window-actor-private.h                                            |    2 
 src/compositor/meta-window-actor.c                                                    |   32 
 src/core/window-private.h                                                             |    2 
 src/meta/window.h                                                                     |    3 
 src/wayland/meta-wayland-actor-surface.c                                              |   17 
 src/wayland/meta-wayland-outputs.c                                                    |    7 
 30 files changed, 229 insertions(+), 5148 deletions(-)

diff -Nru mutter-43.4/debian/changelog mutter-43.6/debian/changelog
--- mutter-43.4/debian/changelog	2023-04-21 10:10:24.000000000 +0100
+++ mutter-43.6/debian/changelog	2023-06-10 22:59:13.000000000 +0100
@@ -1,3 +1,30 @@
+mutter (43.6-1~deb12u1) bookworm; urgency=medium
+
+  * Rebuild for bookworm
+
+ -- Simon McVittie <smcv@debian.org>  Sat, 10 Jun 2023 22:59:13 +0100
+
+mutter (43.6-1) unstable; urgency=medium
+
+  * New upstream stable release 43.5
+    - Always update surfaces belonging to a window that is being recorded
+      or included in a screencast, even if the window is not visible
+      on a local display (mutter#2538, mutter!2789)
+    - Export previously-private meta_window_has_pointer(), needed by
+      screenshot UI fixes in gnome-shell 43.5 (mutter!2928)
+      + d/libmutter-11-0.symbols: Update to add that symbol
+    - All other changes were already present in 43.4-2
+  * New upstream stable release 43.6
+    - Fix a resource leak when a compositor view is destroyed (mutter!2991)
+    - Fix a crash when headless gdm greeter via gnome-remote-desktop
+      attempts to blank the screen (mutter#2841)
+  * d/patches: Drop patches that were applied upstream
+  * d/p/wayland-outputs-Fix-potential-crash-when-output-has-no-mo.patch:
+    Backport patch from 44~beta to fix a crash during suspend/resume on
+    some systems (mutter#2570, Closes: #1036268)
+
+ -- Simon McVittie <smcv@debian.org>  Sat, 10 Jun 2023 21:17:19 +0100
+
 mutter (43.4-2) unstable; urgency=medium
 
   * Team upload
diff -Nru mutter-43.4/debian/libmutter-11-0.symbols mutter-43.6/debian/libmutter-11-0.symbols
--- mutter-43.4/debian/libmutter-11-0.symbols	2023-04-21 10:10:24.000000000 +0100
+++ mutter-43.6/debian/libmutter-11-0.symbols	2023-06-10 22:59:13.000000000 +0100
@@ -780,6 +780,7 @@
  meta_window_group_leader_changed@Base 43.0
  meta_window_has_attached_dialogs@Base 43.0
  meta_window_has_focus@Base 43.0
+ meta_window_has_pointer@Base 43.5
  meta_window_is_above@Base 43.0
  meta_window_is_always_on_all_workspaces@Base 43.0
  meta_window_is_ancestor_of_transient@Base 43.0
diff -Nru mutter-43.4/debian/patches/series mutter-43.6/debian/patches/series
--- mutter-43.4/debian/patches/series	2023-04-21 10:10:24.000000000 +0100
+++ mutter-43.6/debian/patches/series	2023-06-10 22:59:13.000000000 +0100
@@ -1,9 +1,4 @@
-wayland-Skip-subsurface-desync-if-parent-is-NULL.patch
-Update-Abkhazian-translation.patch
-clutter-actor-Get-next-action-from-list-before-handling-c.patch
-cursor-tracker-Don-t-leak-window-cursor-on-exit.patch
-wayland-cursor-surface-Update-cursor-on-dispose.patch
-wayland-xdg-shell-Dismiss-instead-of-destroy-invalid-popu.patch
+wayland-outputs-Fix-potential-crash-when-output-has-no-mo.patch
 tests-Break-up-stacking-installed-tests-into-more-smaller.patch
 tests-Use-a-more-interoperable-path-to-bash.patch
 meson-add-back-default_driver-option.patch
diff -Nru mutter-43.4/meson.build mutter-43.6/meson.build
--- mutter-43.4/meson.build	2023-06-21 00:01:15.000000000 +0100
+++ mutter-43.6/meson.build	2023-06-21 00:01:16.000000000 +0100
@@ -1,5 +1,5 @@
 project('mutter', 'c',
-  version: '43.4',
+  version: '43.6',
   meson_version: '>= 0.55.0',
   license: 'GPLv2+'
 )
diff -Nru mutter-43.4/NEWS mutter-43.6/NEWS
--- mutter-43.4/NEWS	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/NEWS	2023-06-01 16:35:15.000000000 +0100
@@ -1,3 +1,24 @@
+43.6
+====
+* Fix popup issues [Jonas; !2940]
+* Plugged leak [Jonas; !2991]
+* Fixed crash [Jonas; !3037]
+
+Contributors:
+  Jonas Ådahl
+
+43.5
+====
+* Fix recording windows on non-active workspaces [Robert; !2789]
+* Fixed crashes [Colin, Sebastian, Jonas; !2917, !2955, !2969]
+* Misc. bug fixes and cleanups [Ivan; !2928]
+
+Contributors:
+  Jonas Ådahl, Sebastian Keller, Colin Kinloch, Robert Mader, Ivan Molodetskikh
+
+Translators:
+  Nart Tlisha [ab]
+
 43.4
 ====
 * Do not overwrite previously set offsets on attach [Matthias; !2843]
diff -Nru mutter-43.4/src/backends/meta-screen-cast-window.c mutter-43.6/src/backends/meta-screen-cast-window.c
--- mutter-43.4/src/backends/meta-screen-cast-window.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/backends/meta-screen-cast-window.c	2023-06-01 16:35:15.000000000 +0100
@@ -99,3 +99,15 @@
 
   return iface->has_damage (screen_cast_window);
 }
+
+void
+meta_screen_cast_window_inc_usage (MetaScreenCastWindow *screen_cast_window)
+{
+  META_SCREEN_CAST_WINDOW_GET_IFACE (screen_cast_window)->inc_usage (screen_cast_window);
+}
+
+void
+meta_screen_cast_window_dec_usage (MetaScreenCastWindow *screen_cast_window)
+{
+  META_SCREEN_CAST_WINDOW_GET_IFACE (screen_cast_window)->dec_usage (screen_cast_window);
+}
diff -Nru mutter-43.4/src/backends/meta-screen-cast-window.h mutter-43.6/src/backends/meta-screen-cast-window.h
--- mutter-43.4/src/backends/meta-screen-cast-window.h	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/backends/meta-screen-cast-window.h	2023-06-01 16:35:15.000000000 +0100
@@ -62,6 +62,9 @@
                                    CoglFramebuffer      *framebuffer);
 
   gboolean (*has_damage) (MetaScreenCastWindow *screen_cast_window);
+
+  void (*inc_usage) (MetaScreenCastWindow *screen_cast_window);
+  void (*dec_usage) (MetaScreenCastWindow *screen_cast_window);
 };
 
 void meta_screen_cast_window_get_buffer_bounds (MetaScreenCastWindow *screen_cast_window,
@@ -90,6 +93,9 @@
 
 gboolean meta_screen_cast_window_has_damage (MetaScreenCastWindow *screen_cast_window);
 
+void meta_screen_cast_window_inc_usage (MetaScreenCastWindow *screen_cast_window);
+void meta_screen_cast_window_dec_usage (MetaScreenCastWindow *screen_cast_window);
+
 G_END_DECLS
 
 #endif /* META_SCREEN_CAST_WINDOW_H */
diff -Nru mutter-43.4/src/backends/meta-screen-cast-window-stream.c mutter-43.6/src/backends/meta-screen-cast-window-stream.c
--- mutter-43.4/src/backends/meta-screen-cast-window-stream.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/backends/meta-screen-cast-window-stream.c	2023-06-01 16:35:15.000000000 +0100
@@ -197,6 +197,16 @@
 {
   MetaScreenCastWindowStream *window_stream =
     META_SCREEN_CAST_WINDOW_STREAM (object);
+  MetaWindowActor *window_actor;
+
+  window_actor = meta_window_actor_from_window (window_stream->window);
+  if (window_actor)
+    {
+      MetaScreenCastWindow *screen_cast_window;
+
+      screen_cast_window = META_SCREEN_CAST_WINDOW (window_actor);
+      meta_screen_cast_window_dec_usage (screen_cast_window);
+    }
 
   g_clear_signal_handler (&window_stream->window_unmanaged_handler_id,
                           window_stream->window);
@@ -212,6 +222,8 @@
   MetaScreenCastWindowStream *window_stream =
     META_SCREEN_CAST_WINDOW_STREAM (initable);
   MetaWindow *window = window_stream->window;
+  MetaScreenCastWindow *screen_cast_window =
+    META_SCREEN_CAST_WINDOW (meta_window_actor_from_window (window));
   MetaLogicalMonitor *logical_monitor;
   int scale;
 
@@ -242,6 +254,8 @@
   window_stream->stream_width = logical_monitor->rect.width * scale;
   window_stream->stream_height = logical_monitor->rect.height * scale;
 
+  meta_screen_cast_window_inc_usage (screen_cast_window);
+
   return initable_parent_iface->init (initable, cancellable, error);
 }
 
diff -Nru mutter-43.4/src/backends/native/meta-kms-impl-device-dummy.c mutter-43.6/src/backends/native/meta-kms-impl-device-dummy.c
--- mutter-43.4/src/backends/native/meta-kms-impl-device-dummy.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/backends/native/meta-kms-impl-device-dummy.c	2023-06-01 16:35:15.000000000 +0100
@@ -45,6 +45,11 @@
 {
 }
 
+static void
+meta_kms_impl_device_dummy_disable (MetaKmsImplDevice *impl_device)
+{
+}
+
 static MetaDeviceFile *
 meta_kms_impl_device_dummy_open_device_file (MetaKmsImplDevice  *impl_device,
                                              const char         *path,
@@ -101,4 +106,6 @@
     meta_kms_impl_device_dummy_open_device_file;
   impl_device_class->discard_pending_page_flips =
     meta_kms_impl_device_dummy_discard_pending_page_flips;
+  impl_device_class->disable =
+    meta_kms_impl_device_dummy_disable;
 }
diff -Nru mutter-43.4/src/compositor/meta-compositor-view.c mutter-43.6/src/compositor/meta-compositor-view.c
--- mutter-43.4/src/compositor/meta-compositor-view.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/compositor/meta-compositor-view.c	2023-06-01 16:35:15.000000000 +0100
@@ -170,6 +170,8 @@
     meta_compositor_view_get_instance_private (compositor_view);
 
   g_clear_weak_pointer (&priv->top_window_actor);
+
+  G_OBJECT_CLASS (meta_compositor_view_parent_class)->finalize (object);
 }
 
 static void
diff -Nru mutter-43.4/src/compositor/meta-surface-actor-wayland.c mutter-43.6/src/compositor/meta-surface-actor-wayland.c
--- mutter-43.4/src/compositor/meta-surface-actor-wayland.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/compositor/meta-surface-actor-wayland.c	2023-06-01 16:35:15.000000000 +0100
@@ -30,7 +30,9 @@
 
 #include "backends/meta-backend-private.h"
 #include "backends/meta-logical-monitor.h"
+#include "backends/meta-screen-cast-window.h"
 #include "compositor/meta-shaped-texture-private.h"
+#include "compositor/meta-window-actor-private.h"
 #include "compositor/region-utils.h"
 #include "wayland/meta-wayland-buffer.h"
 #include "wayland/meta-wayland-private.h"
@@ -74,15 +76,19 @@
   ClutterStageView *current_primary_view = NULL;
   float highest_refresh_rate = 0.f;
   float biggest_unobscurred_fraction = 0.f;
+  MetaWindowActor *window_actor;
+  gboolean is_streaming = FALSE;
   GList *l;
 
-  if (!clutter_actor_is_effectively_on_stage_view (CLUTTER_ACTOR (actor),
-                                                   stage_view))
-    return FALSE;
+  window_actor = meta_window_actor_from_actor (CLUTTER_ACTOR (actor));
+  if (window_actor)
+    is_streaming = meta_window_actor_is_streaming (window_actor);
 
-  if (clutter_actor_has_mapped_clones (CLUTTER_ACTOR (actor)))
+  if (clutter_actor_has_mapped_clones (CLUTTER_ACTOR (actor)) || is_streaming)
     {
       ClutterStage *stage;
+      ClutterStageView *fallback_view = NULL;
+      float fallback_refresh_rate = 0.0;
 
       stage = CLUTTER_STAGE (clutter_actor_get_stage (CLUTTER_ACTOR (actor)));
       for (l = clutter_stage_peek_stage_views (stage); l; l = l->next)
@@ -90,28 +96,42 @@
           ClutterStageView *view = l->data;
           float refresh_rate;
 
-          if (!clutter_actor_is_effectively_on_stage_view (CLUTTER_ACTOR (actor),
-                                                           view))
-            continue;
-
           refresh_rate = clutter_stage_view_get_refresh_rate (view);
-          if (refresh_rate > highest_refresh_rate)
+
+          if (clutter_actor_is_effectively_on_stage_view (CLUTTER_ACTOR (actor),
+                                                          view))
             {
-              current_primary_view = view;
-              highest_refresh_rate = refresh_rate;
+              if (refresh_rate > highest_refresh_rate)
+                {
+                  current_primary_view = view;
+                  highest_refresh_rate = refresh_rate;
+                }
+            }
+          else
+            {
+              if (refresh_rate > fallback_refresh_rate)
+                {
+                  fallback_view = view;
+                  fallback_refresh_rate = refresh_rate;
+                }
             }
         }
 
-      return current_primary_view == stage_view;
+      if (current_primary_view)
+        return current_primary_view == stage_view;
+      else if (is_streaming)
+        return fallback_view == stage_view;
     }
 
   l = clutter_actor_peek_stage_views (CLUTTER_ACTOR (actor));
-  g_return_val_if_fail (l, FALSE);
+  if (!l)
+    return FALSE;
 
   if (!l->next)
     {
-      g_return_val_if_fail (l->data == stage_view, FALSE);
-      return !meta_surface_actor_is_obscured (actor);
+      return !meta_surface_actor_is_obscured_on_stage_view (actor,
+                                                            stage_view,
+                                                            NULL);
     }
 
   for (; l; l = l->next)
diff -Nru mutter-43.4/src/compositor/meta-window-actor.c mutter-43.6/src/compositor/meta-window-actor.c
--- mutter-43.4/src/compositor/meta-window-actor.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/compositor/meta-window-actor.c	2023-06-01 16:35:15.000000000 +0100
@@ -70,6 +70,7 @@
   gint              destroy_in_progress;
 
   guint             freeze_count;
+  guint             screen_cast_usage_count;
 
   guint		    visible                : 1;
   guint		    disposed               : 1;
@@ -1393,6 +1394,26 @@
 }
 
 static void
+meta_window_actor_inc_screen_cast_usage (MetaScreenCastWindow *screen_cast_window)
+{
+  MetaWindowActor *window_actor = META_WINDOW_ACTOR (screen_cast_window);
+  MetaWindowActorPrivate *priv =
+    meta_window_actor_get_instance_private (window_actor);
+
+  priv->screen_cast_usage_count++;
+}
+
+static void
+meta_window_actor_dec_screen_cast_usage (MetaScreenCastWindow *screen_cast_window)
+{
+  MetaWindowActor *window_actor = META_WINDOW_ACTOR (screen_cast_window);
+  MetaWindowActorPrivate *priv =
+    meta_window_actor_get_instance_private (window_actor);
+
+  priv->screen_cast_usage_count--;
+}
+
+static void
 screen_cast_window_iface_init (MetaScreenCastWindowInterface *iface)
 {
   iface->get_buffer_bounds = meta_window_actor_get_buffer_bounds;
@@ -1401,6 +1422,17 @@
   iface->capture_into = meta_window_actor_capture_into;
   iface->blit_to_framebuffer = meta_window_actor_blit_to_framebuffer;
   iface->has_damage = meta_window_actor_has_damage;
+  iface->inc_usage = meta_window_actor_inc_screen_cast_usage;
+  iface->dec_usage = meta_window_actor_dec_screen_cast_usage;
+}
+
+gboolean
+meta_window_actor_is_streaming (MetaWindowActor *window_actor)
+{
+  MetaWindowActorPrivate *priv =
+    meta_window_actor_get_instance_private (window_actor);
+
+  return priv->screen_cast_usage_count > 0;
 }
 
 MetaWindowActor *
diff -Nru mutter-43.4/src/compositor/meta-window-actor-private.h mutter-43.6/src/compositor/meta-window-actor-private.h
--- mutter-43.4/src/compositor/meta-window-actor-private.h	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/compositor/meta-window-actor-private.h	2023-06-01 16:35:15.000000000 +0100
@@ -101,6 +101,8 @@
 
 int meta_window_actor_get_geometry_scale (MetaWindowActor *window_actor);
 
+gboolean meta_window_actor_is_streaming (MetaWindowActor *window_actor);
+
 void meta_window_actor_notify_damaged (MetaWindowActor *window_actor);
 
 gboolean meta_window_actor_is_frozen (MetaWindowActor *self);
diff -Nru mutter-43.4/src/core/window-private.h mutter-43.6/src/core/window-private.h
--- mutter-43.4/src/core/window-private.h	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/core/window-private.h	2023-06-01 16:35:15.000000000 +0100
@@ -888,8 +888,6 @@
 void meta_window_hide_close_dialog (MetaWindow *window);
 void meta_window_ensure_close_dialog_timeout (MetaWindow *window);
 
-gboolean meta_window_has_pointer (MetaWindow *window);
-
 void meta_window_emit_size_changed (MetaWindow *window);
 
 MetaPlacementRule *meta_window_get_placement_rule (MetaWindow *window);
diff -Nru mutter-43.4/src/meta/window.h mutter-43.6/src/meta/window.h
--- mutter-43.4/src/meta/window.h	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/meta/window.h	2023-06-01 16:35:15.000000000 +0100
@@ -453,4 +453,7 @@
 META_EXPORT
 MetaWindowClientType meta_window_get_client_type (MetaWindow *window);
 
+META_EXPORT
+gboolean meta_window_has_pointer (MetaWindow *window);
+
 #endif
diff -Nru mutter-43.4/src/wayland/meta-wayland-actor-surface.c mutter-43.6/src/wayland/meta-wayland-actor-surface.c
--- mutter-43.4/src/wayland/meta-wayland-actor-surface.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/wayland/meta-wayland-actor-surface.c	2023-06-01 16:35:15.000000000 +0100
@@ -300,19 +300,14 @@
   MetaWaylandActorSurfacePrivate *priv =
     meta_wayland_actor_surface_get_instance_private (actor_surface);
 
-  if (!wl_list_empty (&pending->frame_callback_list) &&
-      priv->actor &&
-      !meta_surface_actor_is_obscured (priv->actor))
+  if (priv->actor && !wl_list_empty (&pending->frame_callback_list))
     {
-      GList *l;
+      ClutterStage *stage;
 
-      for (l = clutter_actor_peek_stage_views (CLUTTER_ACTOR (priv->actor)); l;
-           l = l->next)
-        {
-          ClutterStageView *view = l->data;
-
-          clutter_stage_view_schedule_update (view);
-        }
+      stage =
+        CLUTTER_STAGE (clutter_actor_get_stage (CLUTTER_ACTOR (priv->actor)));
+      if (stage)
+        clutter_stage_schedule_update (stage);
     }
 
   meta_wayland_actor_surface_queue_frame_callbacks (actor_surface, pending);
diff -Nru mutter-43.4/src/wayland/meta-wayland-outputs.c mutter-43.6/src/wayland/meta-wayland-outputs.c
--- mutter-43.4/src/wayland/meta-wayland-outputs.c	2023-03-19 22:26:48.000000000 +0000
+++ mutter-43.6/src/wayland/meta-wayland-outputs.c	2023-06-21 00:01:16.000000000 +0100
@@ -299,7 +299,12 @@
 
   monitor = wayland_output->monitor;
   if (!monitor)
-    return;
+    {
+      wl_resource_set_implementation (resource,
+                                      &meta_wl_output_interface,
+                                      NULL, NULL);
+      return;
+    }
 
   wayland_output->resources = g_list_prepend (wayland_output->resources,
                                               resource);

Reply to: