From dc65abc44c403e980b0f74815d63d979d8f663d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 20 Nov 2015 16:49:12 +0800 Subject: [PATCH] wayland: Set a null cursor surface when cursor buffer is null If the buffer of a cursor is NULL, for example if its an empty cursor, just set the cursor surface to NULL as well. Not doing this we'll use uninitialized hotspot coordinates, dimensions and scales. https://bugzilla.gnome.org/show_bug.cgi?id=758025 --- gdk/wayland/gdkdevice-wayland.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index 74aba25493..2f86ee13c1 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -225,16 +225,27 @@ gdk_wayland_device_update_window_cursor (GdkWaylandDeviceData *wd) if (!wd->wl_pointer) return retval; - wl_pointer_set_cursor (wd->wl_pointer, - wd->enter_serial, - wd->pointer_surface, - x, y); if (buffer) { wl_surface_attach (wd->pointer_surface, buffer, 0, 0); wl_surface_set_buffer_scale (wd->pointer_surface, scale); wl_surface_damage (wd->pointer_surface, 0, 0, w, h); wl_surface_commit (wd->pointer_surface); + + wl_pointer_set_cursor (wd->wl_pointer, + wd->enter_serial, + wd->pointer_surface, + x, y); + } + else + { + wl_pointer_set_cursor (wd->wl_pointer, + wd->enter_serial, + NULL, + 0, 0); + + wl_surface_attach (wd->pointer_surface, NULL, 0, 0); + wl_surface_commit (wd->pointer_surface); } if (wd->grab_cursor)