forked from enlightenment/efl
Merge branch 'devs/iscaro/memory'
This series reduce the memory footprint caused by _evas_object_pointer_data_get() previous implementation. Patches by Guilherme Iscaro <iscaro@profusion.mobi> Reviewed By: bdilly, cedric, jpeg, raster Differential Revision: https://phab.enlightenment.org/D4474
This commit is contained in:
commit
5361cc9e4c
|
@ -438,7 +438,7 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
Evas_Object_Pointer_Data *obj_pdata;
|
||||
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -467,7 +467,7 @@ _evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
ev->cur = point;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -527,7 +527,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
EINA_LIST_FOREACH(copy, l, eo_child)
|
||||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -561,7 +561,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
if (child->delete_me) continue;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -603,7 +603,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -647,7 +647,7 @@ _evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
EINA_LIST_FOREACH(ins, l, eo_child)
|
||||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -724,7 +724,7 @@ _evas_event_source_mouse_up_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
|
||||
if (src->delete_me) break;
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -815,7 +815,7 @@ _evas_event_source_wheel_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
|
||||
if (src->delete_me) return;
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -865,7 +865,7 @@ _evas_event_source_multi_down_events(Evas_Object_Protected_Data *obj, Evas_Publi
|
|||
EINA_LIST_FOREACH(src->proxy->src_event_in, l, eo_child)
|
||||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -883,7 +883,7 @@ _evas_event_source_multi_down_events(Evas_Object_Protected_Data *obj, Evas_Publi
|
|||
EINA_LIST_FOREACH(copy, l, eo_child)
|
||||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -933,7 +933,7 @@ _evas_event_source_multi_up_events(Evas_Object_Protected_Data *obj, Evas_Public_
|
|||
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -995,7 +995,7 @@ _evas_event_source_multi_move_events(Evas_Object_Protected_Data *obj, Evas_Publi
|
|||
EINA_LIST_FOREACH(copy, l, eo_child)
|
||||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1036,7 +1036,7 @@ _evas_event_source_multi_move_events(Evas_Object_Protected_Data *obj, Evas_Publi
|
|||
{
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
ev->cur = point;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1122,7 +1122,7 @@ _evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
Evas_Object_Pointer_Data *obj_pdata;
|
||||
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1186,7 +1186,7 @@ _evas_event_source_mouse_out_events(Evas_Object *eo_obj, Evas *eo_e,
|
|||
{
|
||||
Evas_Object_Pointer_Data *obj_pdata;
|
||||
child = efl_data_scope_get(eo_child, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, child);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1428,7 +1428,7 @@ _canvas_event_feed_mouse_down_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
EINA_LIST_FOREACH(copy, l, eo_obj)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1453,7 +1453,7 @@ _canvas_event_feed_mouse_down_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
Evas_Object_Pointer_Mode pointer_mode;
|
||||
if (obj->delete_me) continue;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1514,7 +1514,7 @@ _post_up_handle(Evas_Public_Data *e, Efl_Input_Pointer *parent_ev,
|
|||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
if ((!eina_list_data_find(ins, eo_obj)) || (!pdata->inside))
|
||||
{
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1552,7 +1552,7 @@ _post_up_handle(Evas_Public_Data *e, Efl_Input_Pointer *parent_ev,
|
|||
Evas_Object_Protected_Data *obj_itr = efl_data_scope_get(eo_obj_itr, EFL_CANVAS_OBJECT_CLASS);
|
||||
if (!eina_list_data_find(pdata->object.in, eo_obj_itr))
|
||||
{
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj_itr, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj_itr);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1659,7 +1659,7 @@ _canvas_event_feed_mouse_up_internal(Evas_Public_Data *e, Efl_Input_Pointer_Data
|
|||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
|
||||
if (obj->delete_me) continue;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -1895,7 +1895,7 @@ _canvas_event_feed_mouse_wheel_internal(Eo *eo_e, Efl_Input_Pointer_Data *pe)
|
|||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
if (!evas_event_freezes_through(eo_obj, obj))
|
||||
{
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2015,7 +2015,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
EINA_LIST_FOREACH(copy, l, eo_obj)
|
||||
{
|
||||
obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2065,7 +2065,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
EINA_LIST_FREE(outs, eo_obj)
|
||||
{
|
||||
obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2102,7 +2102,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
{
|
||||
obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
if (!obj) continue;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2166,7 +2166,7 @@ _canvas_event_feed_mouse_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
/* if its not in the old list of ins send an enter event */
|
||||
if (!eina_list_data_find(pdata->object.in, eo_obj))
|
||||
{
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2247,7 +2247,7 @@ nogrep:
|
|||
EINA_LIST_FOREACH(lst, l, eo_obj)
|
||||
{
|
||||
obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2310,7 +2310,7 @@ nogrep:
|
|||
/* if its not in the old list of ins send an enter event */
|
||||
if (!eina_list_data_find(pdata->object.in, eo_obj))
|
||||
{
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2430,7 +2430,7 @@ _canvas_event_feed_mouse_in_internal(Evas *eo_e, Efl_Input_Pointer_Data *ev)
|
|||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
if (!eina_list_data_find(pdata->object.in, eo_obj))
|
||||
{
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2507,7 +2507,7 @@ _canvas_event_feed_mouse_out_internal(Evas *eo_e, Efl_Input_Pointer_Data *ev)
|
|||
Evas_Object_Pointer_Data *obj_pdata;
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
if (obj->delete_me) continue;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2626,7 +2626,7 @@ _canvas_event_feed_multi_down_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
EINA_LIST_FOREACH(copy, l, eo_obj)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2642,7 +2642,7 @@ _canvas_event_feed_multi_down_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
EINA_LIST_FOREACH(copy, l, eo_obj)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2715,7 +2715,7 @@ _canvas_event_feed_multi_up_internal(Evas_Public_Data *e, Efl_Input_Pointer_Data
|
|||
{
|
||||
Evas_Object_Pointer_Data *obj_pdata;
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2892,7 +2892,7 @@ _canvas_event_feed_multi_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
EINA_LIST_FOREACH(copy, l, eo_obj)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -2931,7 +2931,7 @@ _canvas_event_feed_multi_move_internal(Evas_Public_Data *e, Efl_Input_Pointer_Da
|
|||
EINA_LIST_FOREACH(copy, l, eo_obj)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, ev->device);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata)
|
||||
{
|
||||
ERR("Could not find the object pointer data for device %p",
|
||||
|
@ -3598,7 +3598,7 @@ _efl_canvas_object_pointer_mode_by_device_set(Eo *eo_obj, Evas_Object_Protected_
|
|||
pdata = _evas_pointer_data_by_device_get(obj->layer->evas, dev);
|
||||
if (!pdata) return;
|
||||
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, pdata->pointer);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj_pdata);
|
||||
|
||||
/* ignore no-ops */
|
||||
|
@ -3647,8 +3647,7 @@ _efl_canvas_object_pointer_mode_by_device_set(Eo *eo_obj, Evas_Object_Protected_
|
|||
{
|
||||
Evas_Object_Pointer_Data *cobj_pdata;
|
||||
cobj_data = efl_data_scope_get(cobj, EFL_CANVAS_OBJECT_CLASS);
|
||||
|
||||
cobj_pdata = _evas_object_pointer_data_get(pdata, cobj_data, dev);
|
||||
cobj_pdata = _evas_object_pointer_data_get(pdata, cobj_data);
|
||||
if (!cobj_pdata) continue;
|
||||
if (!cobj_pdata->mouse_grabbed) continue;
|
||||
cobj_pdata->mouse_grabbed -= addgrab;
|
||||
|
@ -3679,7 +3678,7 @@ _efl_canvas_object_pointer_mode_by_device_get(Eo *eo_obj EINA_UNUSED,
|
|||
pdata = _evas_pointer_data_by_device_get(obj->layer->evas, dev);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pdata, EVAS_OBJECT_POINTER_MODE_AUTOGRAB);
|
||||
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, pdata->pointer);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj_pdata, EVAS_OBJECT_POINTER_MODE_AUTOGRAB);
|
||||
return obj_pdata->pointer_mode;
|
||||
}
|
||||
|
@ -3718,7 +3717,7 @@ _efl_canvas_object_pointer_device_in_get(Eo *eo_obj,
|
|||
|
||||
pdata = _evas_pointer_data_by_device_get(obj->layer->evas, pointer);
|
||||
if (!pdata) return EINA_FALSE;
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj, pointer);
|
||||
obj_pdata = _evas_object_pointer_data_get(pdata, obj);
|
||||
if (!obj_pdata) return EINA_FALSE;
|
||||
if (!obj->is_smart)
|
||||
return obj_pdata->mouse_in;
|
||||
|
|
|
@ -81,57 +81,79 @@ _init_cow(void)
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Evas_Object_Pointer_Data *
|
||||
_evas_object_pointer_data_find(Evas_Object_Protected_Data *obj,
|
||||
Efl_Input_Device *pointer)
|
||||
{
|
||||
Evas_Object_Pointer_Data *pdata;
|
||||
|
||||
EINA_INLIST_FOREACH(obj->pointer_grabs, pdata)
|
||||
{
|
||||
if (pdata->evas_pdata->pointer == pointer)
|
||||
return pdata;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_evas_object_pointer_grab_del(Evas_Object_Protected_Data *obj, Evas_Object_Pointer_Data *pdata);
|
||||
|
||||
static void
|
||||
_evas_device_del_cb(void *data, const Efl_Event *ev)
|
||||
{
|
||||
Evas_Object_Protected_Data *obj = data;
|
||||
Evas_Object_Pointer_Data *pdata = _evas_object_pointer_data_find(obj,
|
||||
ev->object);
|
||||
|
||||
eina_hash_del_by_key(obj->pointer_grabs, &ev->object);
|
||||
if (!pdata) return;
|
||||
_evas_object_pointer_grab_del(obj, pdata);
|
||||
}
|
||||
|
||||
static void
|
||||
_evas_object_pointer_grab_del(Evas_Object_Pointer_Data *pdata)
|
||||
_evas_object_pointer_grab_del(Evas_Object_Protected_Data *obj,
|
||||
Evas_Object_Pointer_Data *pdata)
|
||||
{
|
||||
if ((pdata->mouse_grabbed > 0) && (pdata->obj->layer) && (pdata->obj->layer->evas))
|
||||
if ((pdata->mouse_grabbed > 0) && (obj->layer) && (obj->layer->evas))
|
||||
pdata->evas_pdata->mouse_grabbed -= pdata->mouse_grabbed;
|
||||
if (((pdata->mouse_in) || (pdata->mouse_grabbed > 0)) &&
|
||||
(pdata->obj->layer) && (pdata->obj->layer->evas))
|
||||
pdata->evas_pdata->object.in = eina_list_remove(pdata->evas_pdata->object.in, pdata->obj->object);
|
||||
(obj->layer) && (obj->layer->evas))
|
||||
pdata->evas_pdata->object.in = eina_list_remove(pdata->evas_pdata->object.in, obj->object);
|
||||
efl_event_callback_del(pdata->evas_pdata->pointer, EFL_EVENT_DEL,
|
||||
_evas_device_del_cb, pdata->obj);
|
||||
_evas_device_del_cb, obj);
|
||||
obj->pointer_grabs = eina_inlist_remove(obj->pointer_grabs,
|
||||
EINA_INLIST_GET(pdata));
|
||||
free(pdata);
|
||||
}
|
||||
|
||||
static Evas_Object_Pointer_Data *
|
||||
_evas_object_pointer_data_add(Evas_Pointer_Data *evas_pdata,
|
||||
Evas_Object_Protected_Data *obj,
|
||||
Efl_Input_Device *pointer)
|
||||
Evas_Object_Protected_Data *obj)
|
||||
{
|
||||
Evas_Object_Pointer_Data *pdata;
|
||||
|
||||
pdata = calloc(1, sizeof(Evas_Object_Pointer_Data));
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(pdata, NULL);
|
||||
pdata->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
|
||||
pdata->obj = obj;
|
||||
pdata->evas_pdata = evas_pdata;
|
||||
efl_event_callback_priority_add(pointer, EFL_EVENT_DEL,
|
||||
obj->pointer_grabs = eina_inlist_append(obj->pointer_grabs,
|
||||
EINA_INLIST_GET(pdata));
|
||||
efl_event_callback_priority_add(evas_pdata->pointer, EFL_EVENT_DEL,
|
||||
EFL_CALLBACK_PRIORITY_BEFORE,
|
||||
_evas_device_del_cb, obj);
|
||||
eina_hash_add(obj->pointer_grabs, &pointer, pdata);
|
||||
return pdata;
|
||||
}
|
||||
|
||||
Evas_Object_Pointer_Data *
|
||||
_evas_object_pointer_data_get(Evas_Pointer_Data *evas_pdata,
|
||||
Evas_Object_Protected_Data *obj,
|
||||
Efl_Input_Device *pointer)
|
||||
Evas_Object_Protected_Data *obj)
|
||||
{
|
||||
Evas_Object_Pointer_Data *pdata;
|
||||
|
||||
pdata = eina_hash_find(obj->pointer_grabs, &pointer);
|
||||
pdata = _evas_object_pointer_data_find(obj, evas_pdata->pointer);
|
||||
|
||||
//The pointer does not exist yet - create one.
|
||||
if (!pdata)
|
||||
return _evas_object_pointer_data_add(evas_pdata, obj, pointer);
|
||||
return _evas_object_pointer_data_add(evas_pdata, obj);
|
||||
return pdata;
|
||||
}
|
||||
|
||||
|
@ -162,7 +184,6 @@ _efl_canvas_object_efl_object_constructor(Eo *eo_obj, Evas_Object_Protected_Data
|
|||
obj->prev = eina_cow_alloc(evas_object_state_cow);
|
||||
obj->data_3d = eina_cow_alloc(evas_object_3d_cow);
|
||||
obj->mask = eina_cow_alloc(evas_object_mask_cow);
|
||||
obj->pointer_grabs = eina_hash_pointer_new(EINA_FREE_CB(_evas_object_pointer_grab_del));
|
||||
|
||||
evas_object_inject(eo_obj, obj, evas);
|
||||
evas_object_callback_init(eo_obj, obj);
|
||||
|
@ -993,6 +1014,7 @@ _efl_canvas_object_efl_object_destructor(Eo *eo_obj, Evas_Object_Protected_Data
|
|||
Evas_Canvas3D_Texture *texture;
|
||||
Efl_Input_Device *dev;
|
||||
Evas_Public_Data *edata;
|
||||
Evas_Object_Pointer_Data *pdata;
|
||||
|
||||
edata = efl_data_scope_get(evas_object_evas_get(eo_obj), EVAS_CANVAS_CLASS);
|
||||
evas_object_hide(eo_obj);
|
||||
|
@ -1005,7 +1027,8 @@ _efl_canvas_object_efl_object_destructor(Eo *eo_obj, Evas_Object_Protected_Data
|
|||
if ((obj->layer) && (obj->layer->evas))
|
||||
_evas_post_event_callback_call(obj->layer->evas->evas, obj->layer->evas);
|
||||
}
|
||||
eina_hash_free(obj->pointer_grabs);
|
||||
EINA_INLIST_FREE(obj->pointer_grabs, pdata)
|
||||
_evas_object_pointer_grab_del(obj, pdata);
|
||||
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_DEL, NULL, _evas_object_event_new(), NULL);
|
||||
if ((obj->layer) && (obj->layer->evas))
|
||||
_evas_post_event_callback_call(obj->layer->evas->evas, obj->layer->evas);
|
||||
|
@ -1671,9 +1694,9 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
|
|||
if ((!obj->is_smart) ||
|
||||
((obj->map->cur.map) && (obj->map->cur.map->count == 4) && (obj->map->cur.usemap)))
|
||||
{
|
||||
Eina_Iterator *itr = eina_hash_iterator_data_new(obj->pointer_grabs);
|
||||
Evas_Object_Pointer_Data *obj_pdata;
|
||||
EINA_ITERATOR_FOREACH(itr, obj_pdata)
|
||||
|
||||
EINA_INLIST_FOREACH(obj->pointer_grabs, obj_pdata)
|
||||
{
|
||||
if (!obj_pdata->mouse_grabbed &&
|
||||
evas_object_is_in_output_rect(eo_obj, obj, obj_pdata->evas_pdata->x,
|
||||
|
@ -1681,7 +1704,6 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
|
|||
1, 1))
|
||||
_evas_canvas_event_pointer_move_event_dispatch(obj->layer->evas, obj_pdata->evas_pdata, NULL);
|
||||
}
|
||||
eina_iterator_free(itr);
|
||||
/* this is at odds to handling events when an obj is moved out of the mouse
|
||||
* ore resized out or clipped out. if mouse is grabbed - regardless of
|
||||
* visibility, mouse move events should keep happening and mouse up.
|
||||
|
|
|
@ -1093,7 +1093,8 @@ struct _Evas_Object_Protected_State
|
|||
};
|
||||
|
||||
struct _Evas_Object_Pointer_Data {
|
||||
Evas_Object_Protected_Data *obj;
|
||||
EINA_INLIST;
|
||||
|
||||
Evas_Pointer_Data *evas_pdata;
|
||||
Evas_Object_Pointer_Mode pointer_mode;
|
||||
int mouse_grabbed;
|
||||
|
@ -1146,7 +1147,7 @@ struct _Evas_Object_Protected_Data
|
|||
const Evas_Object_3D_Data *data_3d;
|
||||
const Evas_Object_Mask_Data *mask;
|
||||
Eina_List *focused_by_seats;
|
||||
Eina_Hash *pointer_grabs;
|
||||
Eina_Inlist *pointer_grabs;
|
||||
|
||||
// Pointer to the Evas_Object itself
|
||||
Evas_Object *object;
|
||||
|
@ -1599,7 +1600,7 @@ void evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *obj);
|
|||
void evas_object_render_pre_prev_cur_add(Eina_Array *rects, Evas_Object *obj, Evas_Object_Protected_Data *pd);
|
||||
void evas_object_render_pre_effect_updates(Eina_Array *rects, Evas_Object *obj, int is_v, int was_v);
|
||||
void evas_rects_return_difference_rects(Eina_Array *rects, int x, int y, int w, int h, int xx, int yy, int ww, int hh);
|
||||
Evas_Object_Pointer_Data *_evas_object_pointer_data_get(Evas_Pointer_Data *evas_pdata, Evas_Object_Protected_Data *obj, Efl_Input_Device *pointer);
|
||||
Evas_Object_Pointer_Data *_evas_object_pointer_data_get(Evas_Pointer_Data *evas_pdata, Evas_Object_Protected_Data *obj);
|
||||
|
||||
void evas_object_clip_dirty(Evas_Object *obj, Evas_Object_Protected_Data *pd);
|
||||
void evas_object_recalc_clippees(Evas_Object_Protected_Data *pd);
|
||||
|
|
Loading…
Reference in New Issue