discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=67bbd1fe03b275992f093a8a890525ade6635b8f

commit 67bbd1fe03b275992f093a8a890525ade6635b8f
Author: Mike Blumenkrantz <[email protected]>
Date:   Thu Feb 12 20:07:35 2015 -0500

    manage client pointer client hidden states when changing pointer cursor 
objects
    
    fixes sticky cursors
---
 src/bin/e_comp_wl.c       |  1 -
 src/bin/e_comp_wl_input.c |  1 -
 src/bin/e_pointer.c       | 18 +++++++++++++++++-
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c
index 18786ce..18a231a 100644
--- a/src/bin/e_comp_wl.c
+++ b/src/bin/e_comp_wl.c
@@ -212,7 +212,6 @@ _e_comp_wl_evas_cb_mouse_out(void *data, Evas *evas 
EINA_UNUSED, Evas_Object *ob
            E_Client *pec;
 
            pec = e_comp_object_client_get(o);
-           if (pec) pec->hidden = 1;
            e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
         }
    }
diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c
index 56ec390..51f1248 100644
--- a/src/bin/e_comp_wl_input.c
+++ b/src/bin/e_comp_wl_input.c
@@ -54,7 +54,6 @@ _e_comp_wl_input_pointer_cb_cursor_set(struct wl_client 
*client, struct wl_resou
      }
    /* ignore cursor changes during resize/move I guess */
    if (e_client_action_get()) return;
-   ec->hidden = 0;
    e_pointer_object_set(e_comp->pointer, ec->frame, x, y);
 }
 
diff --git a/src/bin/e_pointer.c b/src/bin/e_pointer.c
index bbc475a..a0d3de2 100644
--- a/src/bin/e_pointer.c
+++ b/src/bin/e_pointer.c
@@ -750,9 +750,25 @@ e_pointer_idler_before(void)
 EAPI void
 e_pointer_object_set(E_Pointer *ptr, Evas_Object *obj, int x, int y)
 {
+   Evas_Object *o;
+   E_Client *ec;
+
+   ecore_evas_cursor_get(ptr->ee, &o, NULL, NULL, NULL);
+   if (o)
+     {
+        ec = e_comp_object_client_get(o);
+        if (ec)
+          ec->hidden = 1;
+     }
    ecore_evas_cursor_unset(ptr->ee);
+
    if (obj)
-     ecore_evas_object_cursor_set(ptr->ee, obj, EVAS_LAYER_MAX, x, y);
+     {
+        ec = e_comp_object_client_get(obj);
+        if (ec)
+          ec->hidden = 1;
+        ecore_evas_object_cursor_set(ptr->ee, obj, EVAS_LAYER_MAX, x, y);
+     }
    else
      ecore_evas_object_cursor_set(ptr->ee, ptr->o_ptr, EVAS_LAYER_MAX, 
ptr->hot.x, ptr->hot.y);
 }

-- 


Reply via email to