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 <s...@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 <s...@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);