manage client pointer client hidden states when changing pointer cursor objects

fixes sticky cursors
This commit is contained in:
Mike Blumenkrantz 2015-02-12 20:07:35 -05:00
parent 9a6cddf91f
commit 67bbd1fe03
3 changed files with 17 additions and 3 deletions

View 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);
}
}

View 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);
}

View 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);
}