wayland: Don't set cursor surface scale when we don't have a surface
authorJonas Ådahl <jadahl@gmail.com>
Fri, 13 Mar 2015 07:26:51 +0000 (15:26 +0800)
committerJonas Ådahl <jadahl@gmail.com>
Mon, 16 Mar 2015 11:53:37 +0000 (19:53 +0800)
The setting of the the surface scale even when the surface is not
created from a surface was introduced due to a crash when getting the
buffers when dividing by the scale. The only reason I can see this is
that we get the buffer from a non-existing surface when the wl_cursor
has not yet been set.

Instead, use the name field to avoid trying to use the non-existing
surface, effectively avoiding the division-by-zero that way.

https://bugzilla.gnome.org/show_bug.cgi?id=746141

gdk/wayland/gdkcursor-wayland.c

index 7691db850f277a82d83e412b1ae0ab089ad2f732..8fa1c0407c0d532e4ada458a5a9d486b360803a6 100644 (file)
@@ -173,7 +173,7 @@ _gdk_wayland_cursor_get_buffer (GdkCursor *cursor,
 
       return wl_cursor_image_get_buffer (image);
     }
-  else /* From surface */
+  else if (wayland_cursor->name == NULL) /* From surface */
     {
       *hotspot_x = wayland_cursor->surface.hotspot_x;
       *hotspot_y = wayland_cursor->surface.hotspot_y;
@@ -186,9 +186,9 @@ _gdk_wayland_cursor_get_buffer (GdkCursor *cursor,
 
       if (wayland_cursor->surface.cairo_surface)
         return _gdk_wayland_shm_surface_get_wl_buffer (wayland_cursor->surface.cairo_surface);
-      else
-        return NULL;
     }
+
+  return NULL;
 }
 
 guint
@@ -273,7 +273,6 @@ _gdk_wayland_display_get_cursor_for_name (GdkDisplay  *display,
                           "display", display,
                           NULL);
   private->name = g_strdup (name);
-  private->surface.scale = 1;
 
   /* Blank cursor case */
   if (!name || g_str_equal (name, "blank_cursor"))