From 32b3132c841e8ef22b9428516a7a3f20abb9d746 Mon Sep 17 00:00:00 2001 From: Ryuan Choi Date: Tue, 21 May 2013 09:38:19 +0900 Subject: [PATCH] ecore_evas/x: Fixed that cursor object was not disappear When moved mouse among two objects having cursor set, EVAS_CALLBACK_MOUSE_OUT and EVAS_CALLBACK_MOUSE_IN are fired. I observed that evas_object_del in callback of EVAS_CALLBACK_MOUSE_OUT calls EVAS_CALLBACK_MOUSE_IN so that newly added cursor object was detached. --- src/modules/ecore_evas/engines/x/ecore_evas_x.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c index 5f614a75f5..41cd4185c9 100644 --- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c +++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c @@ -2628,9 +2628,9 @@ static void _ecore_evas_x_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y) { int x, y; + Evas_Object* old; - if (ee->prop.cursor.object) evas_object_del(ee->prop.cursor.object); - + old = ee->prop.cursor.object; if (!obj) { ee->prop.cursor.object = NULL; @@ -2638,7 +2638,7 @@ _ecore_evas_x_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int ee->prop.cursor.hot.x = 0; ee->prop.cursor.hot.y = 0; ecore_x_window_cursor_show(ee->prop.window, 1); - return; + goto end; } ee->prop.cursor.object = obj; @@ -2658,6 +2658,9 @@ _ecore_evas_x_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int evas_object_show(ee->prop.cursor.object); evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _ecore_evas_object_cursor_del, ee); + +end: + if (old) evas_object_del(old); } /*