Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package mutter for openSUSE:Factory checked in at 2025-06-10 08:56:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/mutter (Old) and /work/SRC/openSUSE:Factory/.mutter.new.19631 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mutter" Tue Jun 10 08:56:57 2025 rev:251 rq:1282867 version:48.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/mutter/mutter.changes 2025-05-27 18:52:37.398904806 +0200 +++ /work/SRC/openSUSE:Factory/.mutter.new.19631/mutter.changes 2025-06-10 08:57:19.987690392 +0200 @@ -1,0 +2,7 @@ +Tue Jun 3 07:44:09 UTC 2025 - Bjørn Lie <bjorn....@gmail.com> + +- Update to version 48.3.1: + + Fix Xwayland windows becoming unresponsive to events + + Fix drag and drop of tabs into tiled/maximized state + +------------------------------------------------------------------- Old: ---- mutter-48.3.obscpio New: ---- mutter-48.3.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ mutter.spec ++++++ --- /var/tmp/diff_new_pack.ReeCpu/_old 2025-06-10 08:57:20.771722730 +0200 +++ /var/tmp/diff_new_pack.ReeCpu/_new 2025-06-10 08:57:20.775722895 +0200 @@ -23,7 +23,7 @@ %define libmutter libmutter-%{api_major}-%{api_minor} Name: mutter -Version: 48.3 +Version: 48.3.1 Release: 0 Summary: Window and compositing manager based on Clutter License: GPL-2.0-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.ReeCpu/_old 2025-06-10 08:57:20.807724215 +0200 +++ /var/tmp/diff_new_pack.ReeCpu/_new 2025-06-10 08:57:20.811724380 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://gitlab.gnome.org/GNOME/mutter.git</param> - <param name="revision">48.3</param> + <param name="revision">48.3.1</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">(.*)\+0</param> <param name="versionrewrite-replacement">\1</param> ++++++ mutter-48.3.obscpio -> mutter-48.3.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/NEWS new/mutter-48.3.1/NEWS --- old/mutter-48.3/NEWS 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/NEWS 2025-06-03 00:01:18.000000000 +0200 @@ -1,3 +1,11 @@ +48.3.1 +====== +* Fix Xwayland windows becoming unresponsive to events [Jonas; !4475] +* Fix drag and drop of tabs into tiled/maximized state [Carlos; !4468] + +Contributors: + Carlos Garnacho, Jonas Ådahl + 48.3 ==== * Use opaque dma-buf formats substitutes for scanout [Robert; !4320] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/meson.build new/mutter-48.3.1/meson.build --- old/mutter-48.3/meson.build 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/meson.build 2025-06-03 00:01:18.000000000 +0200 @@ -1,5 +1,5 @@ project('mutter', 'c', - version: '48.3', + version: '48.3.1', meson_version: '>= 1.3.0', license: 'GPL-2.0-or-later', ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/compositor/compositor-private.h new/mutter-48.3.1/src/compositor/compositor-private.h --- old/mutter-48.3/src/compositor/compositor-private.h 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/compositor/compositor-private.h 2025-06-03 00:01:18.000000000 +0200 @@ -72,11 +72,11 @@ gboolean meta_compositor_drag_window (MetaCompositor *compositor, MetaWindow *window, MetaGrabOp grab_op, + MetaDragWindowFlags flags, ClutterInputDevice *device, ClutterEventSequence *sequence, uint32_t timestamp, - graphene_point_t *pos_hint, - ClutterActor *grab_actor); + graphene_point_t *pos_hint); MetaWindowDrag * meta_compositor_get_current_window_drag (MetaCompositor *compositor); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/compositor/compositor.c new/mutter-48.3.1/src/compositor/compositor.c --- old/mutter-48.3/src/compositor/compositor.c 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/compositor/compositor.c 2025-06-03 00:01:18.000000000 +0200 @@ -1554,11 +1554,11 @@ meta_compositor_drag_window (MetaCompositor *compositor, MetaWindow *window, MetaGrabOp grab_op, + MetaDragWindowFlags flags, ClutterInputDevice *device, ClutterEventSequence *sequence, uint32_t timestamp, - graphene_point_t *pos_hint, - ClutterActor *grab_actor) + graphene_point_t *pos_hint) { MetaCompositorPrivate *priv = meta_compositor_get_instance_private (compositor); @@ -1575,7 +1575,7 @@ priv->current_drag = g_steal_pointer (&window_drag); if (!meta_window_drag_begin (priv->current_drag, device, - sequence, timestamp, grab_actor)) + sequence, timestamp, flags)) { g_clear_object (&priv->current_drag); return FALSE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/compositor/meta-window-drag.c new/mutter-48.3.1/src/compositor/meta-window-drag.c --- old/mutter-48.3/src/compositor/meta-window-drag.c 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/compositor/meta-window-drag.c 2025-06-03 00:01:18.000000000 +0200 @@ -50,7 +50,6 @@ struct _MetaWindowDrag { GObject parent_class; - ClutterActor *external_grab_actor; MetaWindow *window; MetaWindow *effective_grab_window; @@ -79,7 +78,6 @@ gulong unmanaged_id; gulong size_changed_id; - gulong event_handler_id; guint tile_preview_timeout_id; guint preview_tile_mode : 2; @@ -389,15 +387,7 @@ meta_window_grab_op_ended (grab_window, grab_op); if (window_drag->grab) - { - clutter_grab_dismiss (window_drag->grab); - } - else - { - g_assert (window_drag->external_grab_actor); - g_clear_signal_handler (&window_drag->event_handler_id, - window_drag->external_grab_actor); - } + clutter_grab_dismiss (window_drag->grab); g_clear_signal_handler (&window_drag->unmanaged_id, grab_window); g_clear_signal_handler (&window_drag->size_changed_id, grab_window); @@ -1767,9 +1757,9 @@ } } -static gboolean -on_window_drag_event (MetaWindowDrag *window_drag, - const ClutterEvent *event) +gboolean +meta_window_drag_process_event (MetaWindowDrag *window_drag, + const ClutterEvent *event) { switch (clutter_event_type (event)) { @@ -1790,7 +1780,8 @@ gpointer user_data) { MetaWindowDrag *window_drag = user_data; - return on_window_drag_event (window_drag, event); + + return meta_window_drag_process_event (window_drag, event); } gboolean @@ -1798,7 +1789,7 @@ ClutterInputDevice *device, ClutterEventSequence *sequence, uint32_t timestamp, - ClutterActor *grab_actor) + MetaDragWindowFlags flags) { MetaWindow *window = window_drag->window, *grab_window = NULL; MetaDisplay *display = meta_window_get_display (window); @@ -1863,15 +1854,7 @@ stage = CLUTTER_STAGE (meta_backend_get_stage (backend)); - if (grab_actor) - { - meta_topic (META_DEBUG_WINDOW_OPS, "Reusing grab actor %p.", grab_actor); - window_drag->external_grab_actor = grab_actor; - window_drag->event_handler_id = - g_signal_connect_swapped (window_drag->external_grab_actor, "event", - G_CALLBACK (on_window_drag_event), window_drag); - } - else + if ((flags & META_DRAG_WINDOW_FLAG_FOREIGN_GRAB) == 0) { meta_topic (META_DEBUG_WINDOW_OPS, "Creating a new grab."); window_drag->grab = clutter_stage_grab_input_only_inactive (stage, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/compositor/meta-window-drag.h new/mutter-48.3.1/src/compositor/meta-window-drag.h --- old/mutter-48.3/src/compositor/meta-window-drag.h 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/compositor/meta-window-drag.h 2025-06-03 00:01:18.000000000 +0200 @@ -22,6 +22,14 @@ #include "meta/common.h" #include "meta/window.h" +typedef enum _MetaDragWindowFlags MetaDragWindowFlags; + +enum _MetaDragWindowFlags +{ + META_DRAG_WINDOW_FLAG_NONE = 0, + META_DRAG_WINDOW_FLAG_FOREIGN_GRAB = 1 << 0, +}; + #define META_TYPE_WINDOW_DRAG (meta_window_drag_get_type ()) G_DECLARE_FINAL_TYPE (MetaWindowDrag, meta_window_drag, META, WINDOW_DRAG, GObject) @@ -33,7 +41,7 @@ ClutterInputDevice *device, ClutterEventSequence *sequence, uint32_t timestamp, - ClutterActor *grab_actor); + MetaDragWindowFlags flags); void meta_window_drag_end (MetaWindowDrag *drag); @@ -47,3 +55,6 @@ void meta_window_drag_set_position_hint (MetaWindowDrag *window_drag, graphene_point_t *pos_hint); + +gboolean meta_window_drag_process_event (MetaWindowDrag *window_drag, + const ClutterEvent *event); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/core/window.c new/mutter-48.3.1/src/core/window.c --- old/mutter-48.3/src/core/window.c 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/core/window.c 2025-06-03 00:01:18.000000000 +0200 @@ -6191,9 +6191,10 @@ { return meta_compositor_drag_window (window->display->compositor, window, op, + META_DRAG_WINDOW_FLAG_NONE, device, sequence, timestamp, - pos_hint, NULL); + pos_hint); } MetaStackLayer diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/frames/meta-window-tracker.c new/mutter-48.3.1/src/frames/meta-window-tracker.c --- old/mutter-48.3/src/frames/meta-window-tracker.c 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/frames/meta-window-tracker.c 2025-06-03 00:01:18.000000000 +0200 @@ -263,21 +263,6 @@ xwindow = xevent->xcreatewindow.window; listen_set_up_frame (window_tracker, xwindow); } - else if (xevent->type == ConfigureNotify && - xevent->xconfigure.event == xroot) - { - gboolean has_frame; - - xwindow = xevent->xconfigure.window; - has_frame = - g_hash_table_contains (window_tracker->frames, - GUINT_TO_POINTER (xwindow)); - - if (!xevent->xconfigure.override_redirect && !has_frame) - listen_set_up_frame (window_tracker, xwindow); - else if (xevent->xconfigure.override_redirect && has_frame) - remove_frame (window_tracker, xwindow); - } else if (xevent->type == DestroyNotify) { xwindow = xevent->xdestroywindow.window; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/wayland/meta-wayland-toplevel-drag.c new/mutter-48.3.1/src/wayland/meta-wayland-toplevel-drag.c --- old/mutter-48.3/src/wayland/meta-wayland-toplevel-drag.c 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/wayland/meta-wayland-toplevel-drag.c 2025-06-03 00:01:18.000000000 +0200 @@ -70,9 +70,26 @@ on_window_drag_ended (MetaWindowDrag *window_drag, MetaWaylandToplevelDrag *toplevel_drag) { + MetaWaylandSeat *seat = NULL; + MetaWaylandInput *input; + MetaWindowActor *window_actor; + MetaWindow *window; + meta_topic (META_DEBUG_WAYLAND, "Window drag ended."); + window = meta_window_drag_get_window (toplevel_drag->window_drag); + + window_actor = meta_window_actor_from_window (window); + if (window_actor) + meta_window_actor_set_tied_to_drag (window_actor, FALSE); + g_clear_signal_handler (&toplevel_drag->drag_ended_handler_id, window_drag); toplevel_drag->window_drag = NULL; + + seat = meta_wayland_data_source_get_seat (toplevel_drag->data_source); + input = meta_wayland_seat_get_input (seat); + + meta_wayland_input_detach_event_handler (input, toplevel_drag->handler); + toplevel_drag->handler = NULL; } static void @@ -121,6 +138,47 @@ return meta_wayland_surface_role_get_surface (surface_role); } +static MetaWaylandSurface * +toplevel_drag_get_focus_surface (MetaWaylandEventHandler *handler, + ClutterInputDevice *device, + ClutterEventSequence *sequence, + gpointer user_data) +{ + return meta_wayland_event_handler_chain_up_get_focus_surface (handler, + device, + sequence); +} + +static void +toplevel_drag_focus (MetaWaylandEventHandler *handler, + ClutterInputDevice *device, + ClutterEventSequence *sequence, + MetaWaylandSurface *surface, + gpointer user_data) +{ + meta_wayland_event_handler_chain_up_focus (handler, device, sequence, surface); +} + +static gboolean +toplevel_drag_propagate_event (MetaWaylandEventHandler *handler, + const ClutterEvent *event, + gpointer user_data) +{ + MetaWaylandToplevelDrag *toplevel_drag = user_data; + + return meta_window_drag_process_event (toplevel_drag->window_drag, event); +} + +static MetaWaylandEventInterface event_interface = { + toplevel_drag_get_focus_surface, + toplevel_drag_focus, + toplevel_drag_propagate_event, /* motion */ + toplevel_drag_propagate_event, /* press */ + toplevel_drag_propagate_event, /* release */ + toplevel_drag_propagate_event, /* key */ + toplevel_drag_propagate_event, /* other */ +}; + static void start_window_drag (MetaWindow *dragged_window, MetaWaylandToplevelDrag *toplevel_drag, @@ -129,11 +187,9 @@ MetaWaylandSeat *seat; MetaWaylandDragGrab *drag_grab; MetaSurfaceActor *surface_actor; - MetaContext *context; - MetaBackend *backend; + MetaWaylandInput *input; ClutterInputDevice *device; ClutterEventSequence *sequence; - ClutterActor *stage, *grab_actor; MetaCompositor *compositor; uint32_t timestamp; gboolean started; @@ -167,17 +223,12 @@ device = meta_wayland_drag_grab_get_device (drag_grab, &sequence); timestamp = meta_display_get_current_time_roundtrip (dragged_window->display); - /* Re-use the current wayland input's grab actor for the newly started - * window drag session. */ - context = meta_display_get_context (dragged_window->display); - backend = meta_context_get_backend (context); - stage = meta_backend_get_stage (backend); - grab_actor = clutter_stage_get_grab_actor (CLUTTER_STAGE (stage)); - compositor = dragged_window->display->compositor; started = meta_compositor_drag_window (compositor, dragged_window, - META_GRAB_OP_MOVING_UNCONSTRAINED, device, - sequence, timestamp, offset_hint, grab_actor); + META_GRAB_OP_MOVING_UNCONSTRAINED, + META_DRAG_WINDOW_FLAG_FOREIGN_GRAB, + device, sequence, + timestamp, offset_hint); if (!started) return; @@ -187,6 +238,13 @@ "ended", G_CALLBACK (on_window_drag_ended), toplevel_drag); + + input = meta_wayland_seat_get_input (seat); + toplevel_drag->handler = + meta_wayland_input_attach_event_handler (input, + &event_interface, + TRUE, + toplevel_drag); } static void @@ -391,7 +449,6 @@ meta_wayland_toplevel_drag_end (MetaWaylandToplevelDrag *toplevel_drag) { MetaWindow *window; - MetaWindowActor *window_actor; MetaSurfaceActor *surface_actor; g_return_if_fail (toplevel_drag != NULL); @@ -399,14 +456,7 @@ if (toplevel_drag->window_drag) { - window = meta_window_drag_get_window (toplevel_drag->window_drag); - g_clear_signal_handler (&toplevel_drag->drag_ended_handler_id, - toplevel_drag->window_drag); meta_window_drag_end (toplevel_drag->window_drag); - - window_actor = meta_window_actor_from_window (window); - if (window_actor) - meta_window_actor_set_tied_to_drag (window_actor, FALSE); toplevel_drag->window_drag = NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mutter-48.3/src/wayland/meta-wayland-toplevel-drag.h new/mutter-48.3.1/src/wayland/meta-wayland-toplevel-drag.h --- old/mutter-48.3/src/wayland/meta-wayland-toplevel-drag.h 2025-05-25 17:32:35.000000000 +0200 +++ new/mutter-48.3.1/src/wayland/meta-wayland-toplevel-drag.h 2025-06-03 00:01:18.000000000 +0200 @@ -27,6 +27,7 @@ #include "mtk/mtk.h" #include "wayland/meta-wayland-types.h" #include "wayland/meta-wayland-data-source.h" +#include "wayland/meta-wayland-input.h" struct _MetaWaylandToplevelDrag { @@ -37,6 +38,7 @@ int32_t x_offset, y_offset; MetaWindowDrag *window_drag; + MetaWaylandEventHandler *handler; gulong window_unmanaging_handler_id; gulong window_shown_handler_id; gulong drag_ended_handler_id; ++++++ mutter.obsinfo ++++++ --- /var/tmp/diff_new_pack.ReeCpu/_old 2025-06-10 08:57:22.243783446 +0200 +++ /var/tmp/diff_new_pack.ReeCpu/_new 2025-06-10 08:57:22.247783611 +0200 @@ -1,5 +1,5 @@ name: mutter -version: 48.3 -mtime: 1748187155 -commit: 9e8c48ac31b06a9a42d50f8dd8ca6cf4595e435b +version: 48.3.1 +mtime: 1748901678 +commit: b8eb8246ffa306adbada1106d3a6a7d5a609530a