From beb430a00bfd094212a658d2adc0e8d8e6fff1a5 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 17 Jan 2018 17:33:57 -0500 Subject: [PATCH] efl-wl: immediately unset a destroyed surface's cursor @fix --- src/lib/efl_wl/efl_wl.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib/efl_wl/efl_wl.c b/src/lib/efl_wl/efl_wl.c index 050ee897ec..f5da388de4 100644 --- a/src/lib/efl_wl/efl_wl.c +++ b/src/lib/efl_wl/efl_wl.c @@ -1861,7 +1861,19 @@ comp_surface_impl_destroy(struct wl_resource *resource) { if (s->kbd.enter == cs) s->kbd.enter = NULL; if (s->ptr.enter == cs) s->ptr.enter = NULL; - if (s->ptr.cursor.surface == cs) s->ptr.cursor.surface = NULL; + if (s->ptr.cursor.surface == cs) + { + if (s->ptr.in) + { + const Eina_List *l; + Eo *dev; + Ecore_Evas *ee = ecore_evas_ecore_evas_get(s->c->evas); + EINA_LIST_FOREACH(evas_device_list(s->c->evas, s->dev), l, dev) + if (evas_device_class_get(dev) == EVAS_DEVICE_CLASS_MOUSE) + ecore_evas_cursor_device_unset(ee, dev); + } + s->ptr.cursor.surface = NULL; + } if (s->drag.surface == cs) s->drag.surface = NULL; } eina_hash_list_remove(cs->c->client_surfaces, &client, cs);