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: