commit afd7eac4f23108e5c3c4af11936823d78b8be22d
Author: Nicolas Setton <setton@adacore.com>
Date:   Fri Mar 17 14:52:19 2017 -0400

    Add a fallback for get_cursor_for_name that works without xcursor

diff --git a/gdk/x11/gdkcursor-x11.c b/gdk/x11/gdkcursor-x11.c
index e7ca3f1..046e815 100644
--- a/gdk/x11/gdkcursor-x11.c
+++ b/gdk/x11/gdkcursor-x11.c
@@ -886,11 +886,67 @@ _gdk_x11_display_get_cursor_for_surface (GdkDisplay *display,
   return cursor;
 }
 
+static const struct {
+  const gchar *css_name;
+  GdkCursorType type;
+} name_type_map[] = {
+  { "default",      GDK_LEFT_PTR },
+  { "help",         GDK_LEFT_PTR },
+  { "context-menu", GDK_LEFT_PTR },
+  { "pointer",      GDK_HAND1 },
+  { "progress",     GDK_LEFT_PTR },
+  { "wait",         GDK_WATCH },
+  { "cell",         GDK_CROSSHAIR },
+  { "crosshair",    GDK_CROSS },
+  { "text",         GDK_XTERM },
+  { "vertical-text",GDK_XTERM },
+  { "alias",        GDK_LEFT_PTR },
+  { "copy",         GDK_LEFT_PTR },
+  { "move",         GDK_LEFT_PTR },
+  { "no-drop",      GDK_LEFT_PTR },
+  { "dnd-ask",      GDK_LEFT_PTR }, /* not CSS, but we want to guarantee it anyway */
+  { "not-allowed",  GDK_LEFT_PTR },
+  { "grab",         GDK_HAND2 },
+  { "grabbing",     GDK_HAND2 },
+  { "all-scroll",   GDK_LEFT_PTR },
+  { "col-resize",   GDK_SB_H_DOUBLE_ARROW },
+  { "row-resize",   GDK_SB_V_DOUBLE_ARROW },
+  { "n-resize",     GDK_TOP_SIDE },
+  { "e-resize",     GDK_RIGHT_SIDE },
+  { "s-resize",     GDK_BOTTOM_SIDE },
+  { "w-resize",     GDK_LEFT_SIDE },
+  { "ne-resize",    GDK_TOP_RIGHT_CORNER },
+  { "nw-resize",    GDK_TOP_LEFT_CORNER },
+  { "se-resize",    GDK_BOTTOM_RIGHT_CORNER },
+  { "sw-resize",    GDK_BOTTOM_LEFT_CORNER },
+  { "ew-resize",    GDK_SB_H_DOUBLE_ARROW },
+  { "ns-resize",    GDK_SB_V_DOUBLE_ARROW },
+  { "nesw-resize",  GDK_LEFT_PTR },
+  { "nwse-resize",  GDK_LEFT_PTR },
+  { "zoom-in",      GDK_LEFT_PTR },
+  { "zoom-out",     GDK_LEFT_PTR },
+  { NULL, GDK_LEFT_PTR }
+};
+
+static const GdkCursorType
+name_to_type (const gchar *name)
+{
+  gint i;
+
+  for (i = 0; name_type_map[i].css_name; i++)
+    {
+      if (g_str_equal (name_type_map[i].css_name, name))
+        return name_type_map[i].type;
+    }
+
+  return GDK_LEFT_PTR;
+}
+
 GdkCursor*
 _gdk_x11_display_get_cursor_for_name (GdkDisplay  *display,
                                       const gchar *name)
 {
-  return NULL;
+  return _gdk_x11_display_get_cursor_for_type(display, name_to_type(name));
 }
 
 gboolean
