From c7be8fd398ad88188928129f87122d142850b160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 13 Mar 2015 15:26:51 +0800 Subject: [PATCH] wayland: Don't set cursor surface scale when we don't have a surface 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 | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/gdk/wayland/gdkcursor-wayland.c b/gdk/wayland/gdkcursor-wayland.c index 7691db850f..8fa1c0407c 100644 --- a/gdk/wayland/gdkcursor-wayland.c +++ b/gdk/wayland/gdkcursor-wayland.c @@ -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"))