manage client pointer client hidden states when changing pointer cursor objects
authorMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 13 Feb 2015 01:07:35 +0000 (20:07 -0500)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Fri, 13 Feb 2015 01:07:35 +0000 (20:07 -0500)
fixes sticky cursors

src/bin/e_comp_wl.c
src/bin/e_comp_wl_input.c
src/bin/e_pointer.c

index 18786ce..18a231a 100644 (file)
@@ -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);
         }
    }
index 56ec390..51f1248 100644 (file)
@@ -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);
 }
 
index bbc475a..a0d3de2 100644 (file)
@@ -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);
 }