public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Adam Williamson <awilliam@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/mutter] rawhide: Backport MRs #5143 and #5169 to fix gnome-remote-desktop crashes
Date: Sat, 11 Jul 2026 20:20:42 GMT	[thread overview]
Message-ID: <178380124255.1.16968707928581589504.rpms-mutter-2b84bd21ae22@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/mutter
Branch : rawhide
Commit : 2b84bd21ae227691688ac6ff6b8642bfd5b27f7f
Author : Adam Williamson <awilliam@redhat.com>
Date   : 2026-07-11T13:20:18-07:00
Stats  : +234/-0 in 3 file(s)
URL    : https://src.fedoraproject.org/rpms/mutter/c/2b84bd21ae227691688ac6ff6b8642bfd5b27f7f?branch=rawhide

Log:
Backport MRs #5143 and #5169 to fix gnome-remote-desktop crashes

---
diff --git a/5143.patch b/5143.patch
new file mode 100644
index 0000000..e20c547
--- /dev/null
+++ b/5143.patch
@@ -0,0 +1,42 @@
+From 8abdae0b00b035cca8fb47d6ff9e3f411c2f0f20 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
+Date: Mon, 29 Jun 2026 15:59:14 +0200
+Subject: [PATCH] stream-source/virtual: Don't assume there is a cursor
+ renderer
+
+There might not be one, depending on various circumstances, so add a
+check.
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5143>
+---
+ src/backends/meta-stream-source-virtual.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/backends/meta-stream-source-virtual.c b/src/backends/meta-stream-source-virtual.c
+index 9245561e563..a54f84269b3 100644
+--- a/src/backends/meta-stream-source-virtual.c
++++ b/src/backends/meta-stream-source-virtual.c
+@@ -577,11 +577,18 @@ meta_stream_source_virtual_set_cursor_metadata (MetaStreamSource       *source,
+   MetaStreamSourceVirtual *source_virtual =
+     META_STREAM_SOURCE_VIRTUAL (source);
+   MetaBackend *backend = backend_from_source (source);
+-  MetaCursorRenderer *cursor_renderer =
+-    meta_backend_get_cursor_renderer (backend);
++  MetaCursorRenderer *cursor_renderer;
+   ClutterCursor *cursor;
+   int x, y;
+ 
++  cursor_renderer = meta_backend_get_cursor_renderer (backend);
++  if (!cursor_renderer)
++    {
++      source_virtual->last_cursor_matadata.set = FALSE;
++      meta_stream_source_unset_cursor_metadata (source, spa_meta_cursor);
++      return;
++    }
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+ 
+   if (!should_cursor_metadata_be_set (source_virtual))
+-- 
+GitLab
+

diff --git a/5169.patch b/5169.patch
new file mode 100644
index 0000000..828cc76
--- /dev/null
+++ b/5169.patch
@@ -0,0 +1,184 @@
+From 547f1db2838dc09a189c645d6d679191562092e5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com>
+Date: Wed, 8 Jul 2026 15:01:36 +0200
+Subject: [PATCH] screen-cast-stream-source: Handle NULL cursor renderer
+
+meta_backend_get_cursor_renderer may return NULL now.
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5169>
+---
+ src/backends/meta-stream-source-area.c    | 17 +++++++++++++----
+ src/backends/meta-stream-source-monitor.c | 17 +++++++++++++----
+ src/backends/meta-stream-source-virtual.c |  6 ++++--
+ src/backends/meta-stream-source-window.c  | 18 ++++++++++++++----
+ 4 files changed, 44 insertions(+), 14 deletions(-)
+
+diff --git a/src/backends/meta-stream-source-area.c b/src/backends/meta-stream-source-area.c
+index f1bfc247712..79f06c84c85 100644
+--- a/src/backends/meta-stream-source-area.c
++++ b/src/backends/meta-stream-source-area.c
+@@ -109,12 +109,14 @@ is_cursor_in_stream (MetaStreamSourceArea *source_area)
+     meta_backend_get_cursor_renderer (backend);
+   MtkRectangle area;
+   graphene_rect_t area_rect;
+-  ClutterCursor *cursor;
++  ClutterCursor *cursor = NULL;
+ 
+   meta_stream_area_get_area (area_stream, &area);
+   area_rect = mtk_rectangle_to_graphene_rect (&area);
+ 
+-  cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++  if (cursor_renderer)
++    cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++
+   if (cursor)
+     {
+       graphene_rect_t cursor_rect;
+@@ -627,11 +629,18 @@ meta_stream_source_area_set_cursor_metadata (MetaStreamSource       *source,
+   MetaStream *stream = meta_stream_source_get_stream (source);
+   MetaStreamArea *area_stream = META_STREAM_AREA (stream);
+   MetaBackend *backend = get_backend (source_area);
+-  MetaCursorRenderer *cursor_renderer =
+-    meta_backend_get_cursor_renderer (backend);
++  MetaCursorRenderer *cursor_renderer;
+   ClutterCursor *cursor;
+   int x, y;
+ 
++  cursor_renderer = meta_backend_get_cursor_renderer (backend);
++  if (!cursor_renderer)
++    {
++      source_area->last_cursor_matadata.set = FALSE;
++      meta_stream_source_unset_cursor_metadata (source, spa_meta_cursor);
++      return;
++    }
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+ 
+   if (!should_cursor_metadata_be_set (source_area))
+diff --git a/src/backends/meta-stream-source-monitor.c b/src/backends/meta-stream-source-monitor.c
+index 0110932c884..5520a5efe77 100644
+--- a/src/backends/meta-stream-source-monitor.c
++++ b/src/backends/meta-stream-source-monitor.c
+@@ -241,7 +241,7 @@ is_cursor_in_stream (MetaStreamSourceMonitor *source_monitor)
+   MetaLogicalMonitor *logical_monitor;
+   MtkRectangle logical_monitor_layout;
+   graphene_rect_t logical_monitor_rect;
+-  ClutterCursor *cursor;
++  ClutterCursor *cursor = NULL;
+ 
+   monitor = get_monitor (source_monitor);
+   logical_monitor = meta_monitor_get_logical_monitor (monitor);
+@@ -249,7 +249,9 @@ is_cursor_in_stream (MetaStreamSourceMonitor *source_monitor)
+   logical_monitor_rect =
+     mtk_rectangle_to_graphene_rect (&logical_monitor_layout);
+ 
+-  cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++  if (cursor_renderer)
++    cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++
+   if (cursor)
+     {
+       graphene_rect_t cursor_rect;
+@@ -973,11 +975,18 @@ meta_stream_source_monitor_set_cursor_metadata (MetaStreamSource       *source,
+ {
+   MetaStreamSourceMonitor *source_monitor = META_STREAM_SOURCE_MONITOR (source);
+   MetaBackend *backend = get_backend (source_monitor);
+-  MetaCursorRenderer *cursor_renderer =
+-    meta_backend_get_cursor_renderer (backend);
++  MetaCursorRenderer *cursor_renderer;
+   ClutterCursor *cursor;
+   int x, y;
+ 
++  cursor_renderer = meta_backend_get_cursor_renderer (backend);
++  if (!cursor_renderer)
++    {
++      source_monitor->last_cursor_matadata.set = FALSE;
++      meta_stream_source_unset_cursor_metadata (source, spa_meta_cursor);
++      return;
++    }
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+ 
+   if (!should_cursor_metadata_be_set (source_monitor))
+diff --git a/src/backends/meta-stream-source-virtual.c b/src/backends/meta-stream-source-virtual.c
+index a54f84269b3..c6beb9c6d36 100644
+--- a/src/backends/meta-stream-source-virtual.c
++++ b/src/backends/meta-stream-source-virtual.c
+@@ -475,12 +475,14 @@ is_cursor_in_stream (MetaStreamSourceVirtual *source_virtual)
+   ClutterStageView *stage_view = view_from_source (source);
+   MtkRectangle view_layout;
+   graphene_rect_t view_rect;
+-  ClutterCursor *cursor;
++  ClutterCursor *cursor = NULL;
+ 
+   clutter_stage_view_get_layout (stage_view, &view_layout);
+   view_rect = mtk_rectangle_to_graphene_rect (&view_layout);
+ 
+-  cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++  if (cursor_renderer)
++    cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++
+   if (cursor)
+     {
+       graphene_rect_t cursor_rect;
+diff --git a/src/backends/meta-stream-source-window.c b/src/backends/meta-stream-source-window.c
+index 0d92f88d3f7..a223afecfc1 100644
+--- a/src/backends/meta-stream-source-window.c
++++ b/src/backends/meta-stream-source-window.c
+@@ -139,6 +139,9 @@ maybe_draw_cursor_sprite (MetaStreamSourceWindow *source_window,
+   int hotspot_x, hotspot_y;
+   cairo_t *cr;
+ 
++  if (!cursor_renderer)
++    return;
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+   if (!cursor)
+     return;
+@@ -261,6 +264,9 @@ maybe_blit_cursor_sprite (MetaStreamSourceWindow *source_window,
+   int hotspot_x, hotspot_y;
+   float x, y;
+ 
++  if (!cursor_renderer)
++    return;
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+   if (!cursor)
+     return;
+@@ -702,11 +708,13 @@ meta_stream_source_window_is_cursor_metadata_valid (MetaStreamSource *source)
+     meta_backend_get_cursor_renderer (backend);
+   MetaCursorTracker *cursor_tracker =
+     meta_backend_get_cursor_tracker (backend);
+-  ClutterCursor *cursor;
++  ClutterCursor *cursor = NULL;
+   graphene_point_t cursor_position;
+   graphene_point_t relative_cursor_position;
+ 
+-  cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++  if (cursor_renderer)
++    cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++
+   meta_cursor_tracker_get_pointer (cursor_tracker, &cursor_position, NULL);
+ 
+   if (meta_cursor_tracker_get_pointer_visible (cursor_tracker) &&
+@@ -748,13 +756,15 @@ meta_stream_source_window_set_cursor_metadata (MetaStreamSource       *source,
+   MetaCursorTracker *cursor_tracker =
+     meta_backend_get_cursor_tracker (backend);
+   MetaScreenCastWindow *screen_cast_window = source_window->screen_cast_window;
+-  ClutterCursor *cursor;
++  ClutterCursor *cursor = NULL;
+   graphene_point_t cursor_position;
+   float view_scale;
+   graphene_point_t relative_cursor_position;
+   int x, y;
+ 
+-  cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++  if (cursor_renderer)
++    cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
++
+   meta_cursor_tracker_get_pointer (cursor_tracker, &cursor_position, NULL);
+ 
+   if (!meta_cursor_tracker_get_pointer_visible (cursor_tracker) ||
+-- 
+GitLab
+

diff --git a/mutter.spec b/mutter.spec
index eaf9111..e1922d3 100644
--- a/mutter.spec
+++ b/mutter.spec
@@ -25,6 +25,14 @@ License:       GPL-2.0-or-later
 URL:           http://www.gnome.org
 Source0:       http://download.gnome.org/sources/%{name}/%{gnome_major_version}/%{name}-%{gnome_tarball_version}.tar.xz
 
+# Fix crashes in gnome-remote-desktop
+# https://gitlab.gnome.org/GNOME/mutter/-/work_items/4907
+# Two separate fixes are needed
+# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5143
+Patch:         5143.patch
+# https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5169
+Patch:         5169.patch
+
 %gnome_check_version
 
 BuildRequires: cvt

                 reply	other threads:[~2026-07-11 20:20 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178380124255.1.16968707928581589504.rpms-mutter-2b84bd21ae22@fedoraproject.org \
    --to=awilliam@redhat.com \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox