public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/mutter] f44: Backport mutter!5169 to fix cursor related crashes (#2501681)
@ 2026-07-21 21:48
0 siblings, 0 replies; only message in thread
From: @ 2026-07-21 21:48 UTC (permalink / raw)
To: git-commits
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
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-21 21:48 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-21 21:48 [rpms/mutter] f44: Backport mutter!5169 to fix cursor related crashes (#2501681)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox