From 847f0150175990015c43959c9d1295642c7f6723 Mon Sep 17 00:00:00 2001 From: Daniel van Vugt Date: Tue, 23 Apr 2024 15:22:12 +0800 Subject: [PATCH 1/5] backends/x11: Avoid defining (and freeing!) nonexistent cursors Such as "default" for legacy X11 themes. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3454 Part-of: --- src/backends/x11/meta-cursor-renderer-x11.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backends/x11/meta-cursor-renderer-x11.c b/src/backends/x11/meta-cursor-renderer-x11.c index 974abf01750..a5816174b44 100644 --- a/src/backends/x11/meta-cursor-renderer-x11.c +++ b/src/backends/x11/meta-cursor-renderer-x11.c @@ -108,11 +108,14 @@ meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer, Cursor xcursor; xcursor = create_x_cursor (xdisplay, cursor); - XDefineCursor (xdisplay, xwindow, xcursor); - XFlush (xdisplay); - XFreeCursor (xdisplay, xcursor); - - has_server_cursor = TRUE; + if (xcursor) + { + XDefineCursor (xdisplay, xwindow, xcursor); + XFlush (xdisplay); + XFreeCursor (xdisplay, xcursor); + + has_server_cursor = TRUE; + } } } -- GitLab From 13b2803a03e94f3c1e520a21374894e71c0b4b85 Mon Sep 17 00:00:00 2001 From: Daniel van Vugt Date: Tue, 23 Apr 2024 17:44:55 +0800 Subject: [PATCH 2/5] backends: Fix parameter alignment check-code-style complains about Part-of: --- src/backends/meta-cursor-sprite-xcursor.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backends/meta-cursor-sprite-xcursor.c b/src/backends/meta-cursor-sprite-xcursor.c index 3b0955d8c77..ea4c8b5953d 100644 --- a/src/backends/meta-cursor-sprite-xcursor.c +++ b/src/backends/meta-cursor-sprite-xcursor.c @@ -117,7 +117,8 @@ meta_cursor_sprite_xcursor_get_cursor (MetaCursorSpriteXcursor *sprite_xcursor) } static XcursorImages * -load_cursor_on_client (MetaCursor cursor, int scale) +load_cursor_on_client (MetaCursor cursor, + int scale) { XcursorImages *xcursor_images; int fallback_size, i; -- GitLab From 4a4ab8c533c15bc7768e0568cf5b69fdc459311c Mon Sep 17 00:00:00 2001 From: Daniel van Vugt Date: Tue, 23 Apr 2024 16:54:42 +0800 Subject: [PATCH 3/5] backends: Add meta_cursor_get_legacy_name() To aid loading of legacy cursor themes. Part-of: --- src/backends/meta-cursor-sprite-xcursor.c | 51 +++++++++++++++++++++++ src/backends/meta-cursor-sprite-xcursor.h | 2 + 2 files changed, 53 insertions(+) diff --git a/src/backends/meta-cursor-sprite-xcursor.c b/src/backends/meta-cursor-sprite-xcursor.c index ea4c8b5953d..70076322fb2 100644 --- a/src/backends/meta-cursor-sprite-xcursor.c +++ b/src/backends/meta-cursor-sprite-xcursor.c @@ -95,6 +95,57 @@ meta_cursor_get_name (MetaCursor cursor) return NULL; } +const char * +meta_cursor_get_legacy_name (MetaCursor cursor) +{ + switch (cursor) + { + case META_CURSOR_DEFAULT: + return "left_ptr"; + case META_CURSOR_NORTH_RESIZE: + return "top_side"; + case META_CURSOR_SOUTH_RESIZE: + return "bottom_side"; + case META_CURSOR_WEST_RESIZE: + return "left_side"; + case META_CURSOR_EAST_RESIZE: + return "right_side"; + case META_CURSOR_SE_RESIZE: + return "bottom_right_corner"; + case META_CURSOR_SW_RESIZE: + return "bottom_left_corner"; + case META_CURSOR_NE_RESIZE: + return "top_right_corner"; + case META_CURSOR_NW_RESIZE: + return "top_left_corner"; + case META_CURSOR_MOVE_OR_RESIZE_WINDOW: + return "fleur"; + case META_CURSOR_BUSY: + return "watch"; + case META_CURSOR_DND_IN_DRAG: + return "dnd-none"; + case META_CURSOR_DND_MOVE: + return "dnd-move"; + case META_CURSOR_DND_COPY: + return "dnd-copy"; + case META_CURSOR_DND_UNSUPPORTED_TARGET: + return "dnd-none"; + case META_CURSOR_POINTING_HAND: + return "hand2"; + case META_CURSOR_CROSSHAIR: + return "crosshair"; + case META_CURSOR_IBEAM: + return "xterm"; + case META_CURSOR_BLANK: + case META_CURSOR_NONE: + case META_CURSOR_LAST: + break; + } + + g_assert_not_reached (); + return NULL; +} + static XcursorImages * create_blank_cursor_images (void) { diff --git a/src/backends/meta-cursor-sprite-xcursor.h b/src/backends/meta-cursor-sprite-xcursor.h index 5b17b2cb202..a3f599b2604 100644 --- a/src/backends/meta-cursor-sprite-xcursor.h +++ b/src/backends/meta-cursor-sprite-xcursor.h @@ -39,3 +39,5 @@ MetaCursor meta_cursor_sprite_xcursor_get_cursor (MetaCursorSpriteXcursor *sprit XcursorImage * meta_cursor_sprite_xcursor_get_current_image (MetaCursorSpriteXcursor *sprite_xcursor); const char * meta_cursor_get_name (MetaCursor cursor); + +const char * meta_cursor_get_legacy_name (MetaCursor cursor); -- GitLab From d2c6b77059faa07c2af33f0c616e70ba25abf564 Mon Sep 17 00:00:00 2001 From: Daniel van Vugt Date: Tue, 23 Apr 2024 15:38:13 +0800 Subject: [PATCH 4/5] backends: Restore support for loading X11 cursor themes missing "default" Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3184 Part-of: --- src/backends/meta-cursor-sprite-xcursor.c | 10 ++++++---- src/backends/x11/meta-cursor-renderer-x11.c | 8 +++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/backends/meta-cursor-sprite-xcursor.c b/src/backends/meta-cursor-sprite-xcursor.c index 70076322fb2..7092f12e8a1 100644 --- a/src/backends/meta-cursor-sprite-xcursor.c +++ b/src/backends/meta-cursor-sprite-xcursor.c @@ -173,16 +173,18 @@ load_cursor_on_client (MetaCursor cursor, { XcursorImages *xcursor_images; int fallback_size, i; - /* Set a 'default' fallback */ - MetaCursor cursors[] = { cursor, META_CURSOR_DEFAULT }; + const char *cursor_names[2]; if (cursor == META_CURSOR_BLANK) return create_blank_cursor_images (); - for (i = 0; i < G_N_ELEMENTS (cursors); i++) + cursor_names[0] = meta_cursor_get_name (cursor); + cursor_names[1] = meta_cursor_get_legacy_name (cursor); + + for (i = 0; i < G_N_ELEMENTS (cursor_names); i++) { xcursor_images = - xcursor_library_load_images (meta_cursor_get_name (cursors[i]), + xcursor_library_load_images (cursor_names[i], meta_prefs_get_cursor_theme (), meta_prefs_get_cursor_size () * scale); if (xcursor_images) diff --git a/src/backends/x11/meta-cursor-renderer-x11.c b/src/backends/x11/meta-cursor-renderer-x11.c index a5816174b44..24253467d87 100644 --- a/src/backends/x11/meta-cursor-renderer-x11.c +++ b/src/backends/x11/meta-cursor-renderer-x11.c @@ -71,10 +71,16 @@ static Cursor create_x_cursor (Display *xdisplay, MetaCursor cursor) { + Cursor result; + if (cursor == META_CURSOR_BLANK) return create_blank_cursor (xdisplay); - return XcursorLibraryLoadCursor (xdisplay, meta_cursor_get_name (cursor)); + result = XcursorLibraryLoadCursor (xdisplay, meta_cursor_get_name (cursor)); + if (!result) + result = XcursorLibraryLoadCursor (xdisplay, meta_cursor_get_legacy_name (cursor)); + + return result; } static gboolean -- GitLab From 807c99fca61cec0d36e9a471b87cf523e45278eb Mon Sep 17 00:00:00 2001 From: Daniel van Vugt Date: Tue, 23 Apr 2024 17:34:57 +0800 Subject: [PATCH 5/5] x11: Add another fallback to legacy X11 cursor names For X11 apps that don't specify their own. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3403 Part-of: --- src/x11/meta-x11-display.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c index 197c6fde95f..c1e74918196 100644 --- a/src/x11/meta-x11-display.c +++ b/src/x11/meta-x11-display.c @@ -1674,6 +1674,11 @@ meta_x11_display_reload_cursor (MetaX11Display *x11_display) /* Set a cursor for X11 applications that don't specify their own */ xcursor = XcursorLibraryLoadCursor (x11_display->xdisplay, meta_cursor_get_name (META_CURSOR_DEFAULT)); + if (!xcursor) + { + xcursor = XcursorLibraryLoadCursor (x11_display->xdisplay, + meta_cursor_get_legacy_name (META_CURSOR_DEFAULT)); + } XDefineCursor (x11_display->xdisplay, x11_display->xroot, xcursor); XFlush (x11_display->xdisplay); -- GitLab