public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
To: git-commits@fedoraproject.org
Subject: [rpms/mutter] f44: Backport mutter!5169 to fix cursor related crashes (#2501681)
Date: Tue, 21 Jul 2026 21:48:07 GMT	[thread overview]
Message-ID: <178467048770.1.14049509667668878973.rpms-mutter-7f7464cb6b5b@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/mutter
Branch : f44
Commit : 7f7464cb6b5bf25ea6e268f4060aac855847387b
Author : Michel Dänzer <mdaenzer@redhat.com>
Date   : 2026-07-20T16:56:39+02:00
Stats  : +194/-0 in 2 file(s)
URL    : https://src.fedoraproject.org/rpms/mutter/c/7f7464cb6b5bf25ea6e268f4060aac855847387b?branch=f44

Log:
Backport mutter!5169 to fix cursor related crashes (#2501681)

---
diff --git a/0001-screen-cast-stream-source-Handle-NULL-cursor-rendere.patch b/0001-screen-cast-stream-source-Handle-NULL-cursor-rendere.patch
new file mode 100644
index 0000000..3bffd95
--- /dev/null
+++ b/0001-screen-cast-stream-source-Handle-NULL-cursor-rendere.patch
@@ -0,0 +1,191 @@
+From 32c0b43605b37c32a89b29758f9a2a4d2bd7dce7 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
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+meta_backend_get_cursor_renderer may return NULL now.
+
+Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/5169>
+
+(cherry picked from commit 547f1db2838dc09a189c645d6d679191562092e5)
+---
+ .../meta-screen-cast-area-stream-src.c         | 18 ++++++++++++++----
+ .../meta-screen-cast-monitor-stream-src.c      | 18 ++++++++++++++----
+ .../meta-screen-cast-virtual-stream-src.c      |  6 ++++--
+ .../meta-screen-cast-window-stream-src.c       | 18 ++++++++++++++----
+ 4 files changed, 46 insertions(+), 14 deletions(-)
+
+diff --git a/src/backends/meta-screen-cast-area-stream-src.c b/src/backends/meta-screen-cast-area-stream-src.c
+index 5502251c2c..ca6ceebcdb 100644
+--- a/src/backends/meta-screen-cast-area-stream-src.c
++++ b/src/backends/meta-screen-cast-area-stream-src.c
+@@ -121,12 +121,14 @@ is_cursor_in_stream (MetaScreenCastAreaStreamSrc *area_src)
+     meta_backend_get_cursor_renderer (backend);
+   MtkRectangle *area;
+   graphene_rect_t area_rect;
+-  ClutterCursor *cursor;
++  ClutterCursor *cursor = NULL;
+ 
+   area = meta_screen_cast_area_stream_get_area (area_stream);
+   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;
+@@ -650,11 +652,19 @@ meta_screen_cast_area_stream_src_set_cursor_metadata (MetaScreenCastStreamSrc *s
+   MetaScreenCastStream *stream = meta_screen_cast_stream_src_get_stream (src);
+   MetaScreenCastAreaStream *area_stream = META_SCREEN_CAST_AREA_STREAM (stream);
+   MetaBackend *backend = get_backend (area_src);
+-  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)
++    {
++      area_src->last_cursor_matadata.set = FALSE;
++      meta_screen_cast_stream_src_unset_cursor_metadata (src,
++                                                         spa_meta_cursor);
++      return;
++    }
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+ 
+   if (!should_cursor_metadata_be_set (area_src))
+diff --git a/src/backends/meta-screen-cast-monitor-stream-src.c b/src/backends/meta-screen-cast-monitor-stream-src.c
+index eea0fd1ecb..a92a3003b6 100644
+--- a/src/backends/meta-screen-cast-monitor-stream-src.c
++++ b/src/backends/meta-screen-cast-monitor-stream-src.c
+@@ -259,7 +259,7 @@ is_cursor_in_stream (MetaScreenCastMonitorStreamSrc *monitor_src)
+   MetaLogicalMonitor *logical_monitor;
+   MtkRectangle logical_monitor_layout;
+   graphene_rect_t logical_monitor_rect;
+-  ClutterCursor *cursor;
++  ClutterCursor *cursor = NULL;
+ 
+   monitor = get_monitor (monitor_src);
+   logical_monitor = meta_monitor_get_logical_monitor (monitor);
+@@ -267,7 +267,9 @@ is_cursor_in_stream (MetaScreenCastMonitorStreamSrc *monitor_src)
+   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;
+@@ -987,11 +989,19 @@ meta_screen_cast_monitor_stream_src_set_cursor_metadata (MetaScreenCastStreamSrc
+   MetaScreenCastMonitorStreamSrc *monitor_src =
+     META_SCREEN_CAST_MONITOR_STREAM_SRC (src);
+   MetaBackend *backend = get_backend (monitor_src);
+-  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)
++    {
++      monitor_src->last_cursor_matadata.set = FALSE;
++      meta_screen_cast_stream_src_unset_cursor_metadata (src,
++                                                         spa_meta_cursor);
++      return;
++    }
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+ 
+   if (!should_cursor_metadata_be_set (monitor_src))
+diff --git a/src/backends/meta-screen-cast-virtual-stream-src.c b/src/backends/meta-screen-cast-virtual-stream-src.c
+index d5821919d8..24757eb63a 100644
+--- a/src/backends/meta-screen-cast-virtual-stream-src.c
++++ b/src/backends/meta-screen-cast-virtual-stream-src.c
+@@ -513,12 +513,14 @@ is_cursor_in_stream (MetaScreenCastVirtualStreamSrc *virtual_src)
+   ClutterStageView *stage_view = view_from_src (src);
+   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-screen-cast-window-stream-src.c b/src/backends/meta-screen-cast-window-stream-src.c
+index ff5aee97e5..e5b46208bc 100644
+--- a/src/backends/meta-screen-cast-window-stream-src.c
++++ b/src/backends/meta-screen-cast-window-stream-src.c
+@@ -144,6 +144,9 @@ maybe_draw_cursor_sprite (MetaScreenCastWindowStreamSrc *window_src,
+   int hotspot_x, hotspot_y;
+   cairo_t *cr;
+ 
++  if (!cursor_renderer)
++    return;
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+   if (!cursor)
+     return;
+@@ -267,6 +270,9 @@ maybe_blit_cursor_sprite (MetaScreenCastWindowStreamSrc *window_src,
+   int hotspot_x, hotspot_y;
+   float x, y;
+ 
++  if (!cursor_renderer)
++    return;
++
+   cursor = meta_cursor_renderer_get_cursor (cursor_renderer);
+   if (!cursor)
+     return;
+@@ -707,11 +713,13 @@ meta_screen_cast_window_stream_src_is_cursor_metadata_valid (MetaScreenCastStrea
+     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) &&
+@@ -753,13 +761,15 @@ meta_screen_cast_window_stream_src_set_cursor_metadata (MetaScreenCastStreamSrc
+   MetaCursorTracker *cursor_tracker =
+     meta_backend_get_cursor_tracker (backend);
+   MetaScreenCastWindow *screen_cast_window = window_src->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) ||
+-- 
+2.55.0
+

diff --git a/mutter.spec b/mutter.spec
index f4edd48..387eda3 100644
--- a/mutter.spec
+++ b/mutter.spec
@@ -29,6 +29,9 @@ Source0:       http://download.gnome.org/sources/%{name}/%{major_version}/%{name
 
 Patch:         0001-kms_impl-device__Handle-NULL-crtc_frames-in-_discard_pending_page_flips.patch
 
+# https://bugzilla.redhat.com/show_bug.cgi?id=2501681
+Patch:         0001-screen-cast-stream-source-Handle-NULL-cursor-rendere.patch
+
 BuildRequires: cvt
 BuildRequires: desktop-file-utils
 BuildRequires: mesa-libEGL-devel

                 reply	other threads:[~2026-07-21 21:48 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=178467048770.1.14049509667668878973.rpms-mutter-7f7464cb6b5b@fedoraproject.org \
    --to=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