Fix a few bugs in compositor cursor handling
diff --git a/compositor.c b/compositor.c
index 89fc1a6..00da446 100644
--- a/compositor.c
+++ b/compositor.c
@@ -914,11 +914,23 @@
 	    device->pointer_focus->base.client != client)
 		return;
 
+	if (buffer == NULL) {
+		wlsc_input_device_set_pointer_image(device,
+						    WLSC_POINTER_LEFT_PTR);
+		return;
+	}
+
 	glBindTexture(GL_TEXTURE_2D, device->sprite->texture);
 	glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, buffer->image);
 	device->sprite->visual = buffer->visual;
 	device->hotspot_x = x;
 	device->hotspot_y = y;
+
+	device->sprite->x = device->x - device->hotspot_x;
+	device->sprite->y = device->y - device->hotspot_y;
+	wlsc_surface_update_matrix(device->sprite);
+
+	wlsc_compositor_schedule_repaint(device->ec);
 }
 
 const static struct wl_input_device_interface input_device_interface = {