55 lines
1.8 KiB
Diff
55 lines
1.8 KiB
Diff
From edd24aa50b17849b904a3ac5429e333bac9bac9c Mon Sep 17 00:00:00 2001
|
|
From: Olivier Fourdan <ofourdan@redhat.com>
|
|
Date: Mon, 6 Jun 2016 09:22:28 +0200
|
|
Subject: [PATCH xserver] wayland: clear resource for pixmap on unrealize
|
|
|
|
On cursor unrealize, the associated pixmap is destroyed, make sure we
|
|
clear the pointer from the private resource and check for the value
|
|
being non-null when setting or destroying the cursor.
|
|
|
|
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
|
|
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
|
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96246
|
|
---
|
|
hw/xwayland/xwayland-cursor.c | 15 +++++++++++++++
|
|
1 file changed, 15 insertions(+)
|
|
|
|
diff --git a/hw/xwayland/xwayland-cursor.c b/hw/xwayland/xwayland-cursor.c
|
|
index 76729db..74dfe4e 100644
|
|
--- a/hw/xwayland/xwayland-cursor.c
|
|
+++ b/hw/xwayland/xwayland-cursor.c
|
|
@@ -76,8 +76,20 @@ static Bool
|
|
xwl_unrealize_cursor(DeviceIntPtr device, ScreenPtr screen, CursorPtr cursor)
|
|
{
|
|
PixmapPtr pixmap;
|
|
+ struct xwl_seat *xwl_seat;
|
|
|
|
pixmap = dixGetPrivate(&cursor->devPrivates, &xwl_cursor_private_key);
|
|
+ if (!pixmap)
|
|
+ return TRUE;
|
|
+
|
|
+ dixSetPrivate(&cursor->devPrivates, &xwl_cursor_private_key, NULL);
|
|
+
|
|
+ /* When called from FreeCursor(), device is always NULL */
|
|
+ if (device) {
|
|
+ xwl_seat = device->public.devicePrivate;
|
|
+ if (xwl_seat && cursor == xwl_seat->x_cursor)
|
|
+ xwl_seat->x_cursor = NULL;
|
|
+ }
|
|
|
|
return xwl_shm_destroy_pixmap(pixmap);
|
|
}
|
|
@@ -122,6 +134,9 @@ xwl_seat_set_cursor(struct xwl_seat *xwl_seat)
|
|
|
|
cursor = xwl_seat->x_cursor;
|
|
pixmap = dixGetPrivate(&cursor->devPrivates, &xwl_cursor_private_key);
|
|
+ if (!pixmap)
|
|
+ return;
|
|
+
|
|
stride = cursor->bits->width * 4;
|
|
if (cursor->bits->argb)
|
|
memcpy(pixmap->devPrivate.ptr,
|
|
--
|
|
2.7.4
|
|
|