static void
_item_hilight(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj);
const char *selectraise;
if (!wd) return;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
if (it->hilighted) return;
+
+ evas_object_ref(obj);
_elm_list_walk(wd);
edje_object_signal_emit(it->base.view, "elm,state,selected", "elm");
it->hilighted = EINA_TRUE;
_elm_list_unwalk(wd);
+ evas_object_unref(obj);
}
static void
_item_select(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
}
it->selected = EINA_TRUE;
wd->selected = eina_list_append(wd->selected, it);
+
call:
+ evas_object_ref(obj);
_elm_list_walk(wd);
-
+
if (it->func) it->func((void *)it->base.data, it->base.widget, it);
- evas_object_smart_callback_call(it->base.widget, "selected", it);
+ evas_object_smart_callback_call(obj, "selected", it);
+ it->wd->last_selected_item = it;
_elm_list_unwalk(wd);
- it->wd->last_selected_item = it;
+ evas_object_unref(obj);
}
static void
_item_unselect(Elm_List_Item *it)
{
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj);
const char *stacking, *selectraise;
if (!wd) return;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
if (!it->hilighted) return;
+
+ evas_object_ref(obj);
_elm_list_walk(wd);
-
+
edje_object_signal_emit(it->base.view, "elm,state,unselected", "elm");
stacking = edje_object_data_get(it->base.view, "stacking");
selectraise = edje_object_data_get(it->base.view, "selectraise");
wd->selected = eina_list_remove(wd->selected, it);
evas_object_smart_callback_call(it->base.widget, "unselected", it);
}
-
+
_elm_list_unwalk(wd);
+ evas_object_unref(obj);
}
static Eina_Bool
_mouse_move(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj2 = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj2);
Evas_Event_Mouse_Move *ev = event_info;
if (!wd) return;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
+
+ evas_object_ref(obj2);
+ _elm_list_walk(wd);
+
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
{
if (!wd->on_hold)
wd->movements++;
}
}
+
+ _elm_list_unwalk(wd);
+ evas_object_unref(obj2);
}
static void
_long_press(void *data)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd)
- goto end;
+ if (!wd) goto end;
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, ECORE_CALLBACK_CANCEL);
-
it->long_timer = NULL;
-
- if (it->disabled)
- goto end;
+ if (it->disabled) goto end;
wd->longpressed = EINA_TRUE;
evas_object_smart_callback_call(it->base.widget, "longpressed", it);
_mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj2 = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj2);
Evas_Event_Mouse_Down *ev = event_info;
if (!wd) return;
else wd->on_hold = EINA_FALSE;
if (wd->on_hold) return;
wd->wasselected = it->selected;
+
+ evas_object_ref(obj2);
+ _elm_list_walk(wd);
+
_item_hilight(it);
wd->longpressed = EINA_FALSE;
if (it->long_timer) ecore_timer_del(it->long_timer);
evas_object_smart_callback_call(it->base.widget, "clicked", it);
wd->swipe = EINA_FALSE;
wd->movements = 0;
+
+ _elm_list_unwalk(wd);
+ evas_object_unref(obj2);
}
static void
_mouse_up(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
{
Elm_List_Item *it = data;
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj2 = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj2);
Evas_Event_Mouse_Up *ev = event_info;
if (!wd) return;
return;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
- _elm_list_walk(wd); // watch out "return" before unwalk!
+ evas_object_ref(obj2);
+ _elm_list_walk(wd);
if (wd->multi)
{
}
_elm_list_unwalk(wd);
+ evas_object_unref(obj2);
}
static Elm_List_Item *
return;
}
+ evas_object_ref(obj);
_elm_list_walk(wd); // watch out "return" before unwalk!
EINA_LIST_FOREACH(wd->items, l, it)
i++;
}
- _elm_list_unwalk(wd);
-
mw = 0; mh = 0;
evas_object_size_hint_min_get(wd->box, &mw, &mh);
_elm_list_mode_set_internal(wd);
+
+ _elm_list_unwalk(wd);
+ evas_object_unref(obj);
}
static void
return;
}
+ evas_object_ref(obj);
_elm_list_walk(wd);
EINA_LIST_FREE(wd->items, it)
_fix_items(obj);
_sizing_eval(obj);
+ evas_object_unref(obj);
}
/**
elm_list_item_selected_set(Elm_List_Item *it, Eina_Bool selected)
{
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
-
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
selected = !!selected;
if (it->selected == selected) return;
+ evas_object_ref(obj);
_elm_list_walk(wd);
if (selected)
_item_unselect(it);
_elm_list_unwalk(wd);
+ evas_object_unref(obj);
}
/**
elm_list_item_del(Elm_List_Item *it)
{
ELM_LIST_ITEM_CHECK_DELETED_RETURN(it);
- Widget_Data *wd = elm_widget_data_get(it->base.widget);
+ Evas_Object *obj = it->base.widget;
+ Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (it->selected) _item_unselect(it);
wd->items = eina_list_remove_list(wd->items, it->node);
+ evas_object_ref(obj);
_elm_list_walk(wd);
elm_widget_item_pre_notify_del(it);
_elm_list_item_free(it);
_elm_list_unwalk(wd);
+ evas_object_unref(obj);
}
/**