[gtk/wayland-cursor-theme] wayland: Look for cursor themes in $HOME




commit 4efb661ae67af636d5a57536c8e25df941b3cca5
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Jun 29 16:57:15 2021 -0400

    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;
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]