From 87af84c3e37429694fff6f04e70332dc1bcc8c5d Mon Sep 17 00:00:00 2001 From: Chris Michael Date: Wed, 25 Jun 2014 13:11:16 -0400 Subject: [PATCH] ecore-evas: Fix cursor position getting reset to 0,0 when using ecore_evas_cursor_object_set NB: Previously, if we mad calls to ecore_evas_cursor_object_set to update the mouse cursor hotspot, the mouse cursor would be repositioned at 0,0 on the canvas due to x & y being set to 0,0. We fix that here by fetching the current mouse position Regardless if we are changing the object or not (ie: perhaps we are just updating the hotspot and not the object) @fix Signed-off-by: Chris Michael --- src/modules/ecore_evas/engines/drm/ecore_evas_drm.c | 5 +++-- src/modules/ecore_evas/engines/fb/ecore_evas_fb.c | 5 +++-- src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c | 3 ++- .../ecore_evas/engines/wayland/ecore_evas_wayland_common.c | 3 ++- src/modules/ecore_evas/engines/win32/ecore_evas_win32.c | 3 ++- src/modules/ecore_evas/engines/x/ecore_evas_x.c | 3 ++- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c index 9e6904d6e9..a766db4022 100644 --- a/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c +++ b/src/modules/ecore_evas/engines/drm/ecore_evas_drm.c @@ -593,10 +593,11 @@ _ecore_evas_drm_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, i ee->prop.cursor.layer = layer; ee->prop.cursor.hot.x = hot_x; ee->prop.cursor.hot.y = hot_y; - + + evas_pointer_output_xy_get(ee->evas, &x, &y); + if (obj != old) { - evas_pointer_output_xy_get(ee->evas, &x, &y); evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer); evas_object_pass_events_set(ee->prop.cursor.object, 1); if (evas_pointer_inside_get(ee->evas)) diff --git a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c index b8dc756af8..1b7e9c9e9d 100644 --- a/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c +++ b/src/modules/ecore_evas/engines/fb/ecore_evas_fb.c @@ -441,10 +441,11 @@ _ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int h ee->prop.cursor.layer = layer; ee->prop.cursor.hot.x = hot_x; ee->prop.cursor.hot.y = hot_y; - + + evas_pointer_output_xy_get(ee->evas, &x, &y); + if (obj != old) { - evas_pointer_output_xy_get(ee->evas, &x, &y); evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer); evas_object_pass_events_set(ee->prop.cursor.object, 1); if (evas_pointer_inside_get(ee->evas)) diff --git a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c index 6dfd7d6b2b..d54e042620 100644 --- a/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c +++ b/src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c @@ -374,9 +374,10 @@ _ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int h ee->prop.cursor.hot.x = hot_x; ee->prop.cursor.hot.y = hot_y; + evas_pointer_output_xy_get(ee->evas, &x, &y); + if (obj != old) { - evas_pointer_output_xy_get(ee->evas, &x, &y); evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer); evas_object_pass_events_set(ee->prop.cursor.object, 1); if (evas_pointer_inside_get(ee->evas)) diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c index 8081b9f518..7dd686eccc 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c @@ -1197,10 +1197,11 @@ _ecore_evas_wl_common_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int la ee->prop.cursor.hot.x = hot_x; ee->prop.cursor.hot.y = hot_y; + evas_pointer_output_xy_get(ee->evas, &x, &y); + if (obj != old) { ecore_wl_window_pointer_set(wdata->win, NULL, 0, 0); - evas_pointer_output_xy_get(ee->evas, &x, &y); evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer); evas_object_pass_events_set(ee->prop.cursor.object, 1); if (evas_pointer_inside_get(ee->evas)) diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c index a6a6acea85..4da89ca5a6 100644 --- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c +++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c @@ -839,10 +839,11 @@ _ecore_evas_win32_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int ho ee->prop.cursor.hot.x = hot_x; ee->prop.cursor.hot.y = hot_y; + evas_pointer_output_xy_get(ee->evas, &x, &y); + if (obj != old) { // ecore_win32_window_cursor_show(ee->prop.window, 0); - evas_pointer_output_xy_get(ee->evas, &x, &y); evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer); evas_object_pass_events_set(ee->prop.cursor.object, 1); if (evas_pointer_inside_get(ee->evas)) 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 42fd31ab00..4e0b3444e3 100644 --- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c +++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c @@ -2991,10 +2991,11 @@ _ecore_evas_x_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int ee->prop.cursor.hot.x = hot_x; ee->prop.cursor.hot.y = hot_y; + evas_pointer_output_xy_get(ee->evas, &x, &y); + if (obj != old) { ecore_x_window_cursor_show(ee->prop.window, 0); - evas_pointer_output_xy_get(ee->evas, &x, &y); evas_object_layer_set(ee->prop.cursor.object, ee->prop.cursor.layer); evas_object_pass_events_set(ee->prop.cursor.object, 1); if (evas_pointer_inside_get(ee->evas))