From 4efb661ae67af636d5a57536c8e25df941b3cca5 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 29 Jun 2021 16:57:15 -0400 Subject: [PATCH] wayland: Look for cursor themes in $HOME We should look in the same places that libXcursor does, so add $XDG_DATA_HOME/icons and $HOME/.icons to the list. Fixes: #4080 --- gdk/wayland/gdkdisplay-wayland.c | 36 +++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c index 4caae38066..c27b165594 100644 --- a/gdk/wayland/gdkdisplay-wayland.c +++ b/gdk/wayland/gdkdisplay-wayland.c @@ -991,6 +991,26 @@ gdk_wayland_display_get_toplevel_surfaces (GdkDisplay *display) return GDK_WAYLAND_DISPLAY (display)->toplevels; } +static struct wl_cursor_theme * +try_load_theme (GdkWaylandDisplay *display_wayland, + const char *dir, + gboolean dotdir, + const char *name, + int size) +{ + struct wl_cursor_theme *theme = NULL; + char *path; + + path = g_build_filename (dir, dotdir ? ".icons" : "icons", name, "cursors", NULL); + + if (g_file_test (path, G_FILE_TEST_IS_DIR)) + theme = wl_cursor_theme_create (path, size, display_wayland->shm); + + g_free (path); + + return theme; +} + static struct wl_cursor_theme * get_cursor_theme (GdkWaylandDisplay *display_wayland, const char *name, @@ -1000,16 +1020,18 @@ get_cursor_theme (GdkWaylandDisplay *display_wayland, struct wl_cursor_theme *theme = NULL; int i; + theme = try_load_theme (display_wayland, g_get_user_data_dir (), FALSE, name, size); + if (theme) + return theme; + + theme = try_load_theme (display_wayland, g_get_home_dir (), TRUE, name, size); + if (theme) + return theme; + xdg_data_dirs = g_get_system_data_dirs (); for (i = 0; xdg_data_dirs[i]; i++) { - char *path = g_build_filename (xdg_data_dirs[i], "icons", name, "cursors", NULL); - - if (g_file_test (path, G_FILE_TEST_IS_DIR)) - theme = wl_cursor_theme_create (path, size, display_wayland->shm); - - g_free (path); - + theme = try_load_theme (display_wayland, xdg_data_dirs[i], FALSE, name, size); if (theme) return theme; }