ecore-evas: Fix cursor position getting reset to 0,0 when using
authorChris Michael <cp.michael@samsung.com>
Wed, 25 Jun 2014 17:11:16 +0000 (13:11 -0400)
committerChris Michael <cp.michael@samsung.com>
Wed, 25 Jun 2014 17:20:49 +0000 (13:20 -0400)
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 <cp.michael@samsung.com>
src/modules/ecore_evas/engines/drm/ecore_evas_drm.c
src/modules/ecore_evas/engines/fb/ecore_evas_fb.c
src/modules/ecore_evas/engines/sdl/ecore_evas_sdl.c
src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c
src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
src/modules/ecore_evas/engines/x/ecore_evas_x.c

index 9e6904d..a766db4 100644 (file)
@@ -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))
index b8dc756..1b7e9c9 100644 (file)
@@ -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))
index 6dfd7d6..d54e042 100644 (file)
@@ -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))
index 8081b9f..7dd686e 100644 (file)
@@ -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))
index a6a6ace..4da89ca 100644 (file)
@@ -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))
index 42fd31a..4e0b344 100644 (file)
@@ -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))