devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=87af84c3e37429694fff6f04e70332dc1bcc8c5d

commit 87af84c3e37429694fff6f04e70332dc1bcc8c5d
Author: Chris Michael <[email protected]>
Date:   Wed Jun 25 13:11:16 2014 -0400

    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 <[email protected]>
---
 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 ++-
 src/modules/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 9e6904d..a766db4 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 b8dc756..1b7e9c9 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 6dfd7d6..d54e042 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 8081b9f..7dd686e 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 a6a6ace..4da89ca 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 42fd31a..4e0b344 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))

-- 


Reply via email to