Evas_Callback_Type type, void *event_info);
static Eina_Bool _deselect_all_items(Widget_Data *wd);
+static const char SIG_CLICKED_DOUBLE[] = "clicked,double";
+static const char SIG_SELECTED[] = "selected";
+static const char SIG_UNSELECTED[] = "unselected";
+static const char SIG_LONGPRESSED[] = "longpressed";
+static const char SIG_SCROLL_EDGE_TOP[] = "scroll,edge,top";
+static const char SIG_SCROLL_EDGE_BOTTOM[] = "scroll,edge,bottom";
+static const char SIG_SCROLL_EDGE_LEFT[] = "scroll,edge,left";
+static const char SIG_SCROLL_EDGE_RIGHT[] = "scroll,edge,right";
+
+static const Evas_Smart_Cb_Description _signals[] = {
+ {SIG_CLICKED_DOUBLE, ""},
+ {SIG_SELECTED, ""},
+ {SIG_UNSELECTED, ""},
+ {SIG_LONGPRESSED, ""},
+ {SIG_SCROLL_EDGE_TOP, ""},
+ {SIG_SCROLL_EDGE_BOTTOM, ""},
+ {SIG_SCROLL_EDGE_LEFT, ""},
+ {SIG_SCROLL_EDGE_RIGHT, ""},
+ {NULL, NULL}
+};
+
#define ELM_LIST_ITEM_CHECK_DELETED_RETURN(it, ...) \
ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(it, __VA_ARGS__); \
if (it->deleted) \
}
}
-// FIXME : This function might be unnecessary, fix self deletion bug then remove this function.
static void
_del_pre_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- if (wd->scr)
- evas_object_event_callback_del_full
- (wd->scr, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints,
- obj);
- if (wd->box)
- evas_object_event_callback_del_full
- (wd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints,
- obj);
+ evas_object_event_callback_del(wd->scr,
+ EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints);
+ evas_object_event_callback_del(wd->box,
+ EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+ _changed_size_hints);
}
static void
if (!wd) return;
if (!sub) abort();
- if (sub == wd->scr)
- wd->scr = NULL;
- else
+ if ((sub == wd->box) || (sub == wd->scr)) return;
+
+ EINA_LIST_FOREACH(wd->items, l, it)
{
- EINA_LIST_FOREACH(wd->items, l, it)
+ if ((sub == it->icon) || (sub == it->end))
{
- if ((sub == it->icon) || (sub == it->end))
+ if (it->icon == sub) it->icon = NULL;
+ if (it->end == sub) it->end = NULL;
+ evas_object_event_callback_del_full
+ (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints,
+ obj);
+ if (!wd->walking)
{
- if (it->icon == sub) it->icon = NULL;
- if (it->end == sub) it->end = NULL;
- evas_object_event_callback_del_full
- (sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints,
- obj);
- if (!wd->walking)
- {
- _fix_items(obj);
- _sizing_eval(obj);
- }
- else
- wd->fix_pending = EINA_TRUE;
- break;
+ _fix_items(obj);
+ _sizing_eval(obj);
}
+ else
+ wd->fix_pending = EINA_TRUE;
+ break;
}
}
}
_elm_list_walk(wd);
if (it->func) it->func((void *)it->base.data, it->base.widget, it);
- evas_object_smart_callback_call(obj, "selected", it);
+ evas_object_smart_callback_call(obj, SIG_SELECTED, it);
it->wd->last_selected_item = it;
_elm_list_unwalk(wd);
{
it->selected = EINA_FALSE;
wd->selected = eina_list_remove(wd->selected, it);
- evas_object_smart_callback_call(it->base.widget, "unselected", it);
+ evas_object_smart_callback_call(it->base.widget, SIG_UNSELECTED, it);
}
_elm_list_unwalk(wd);
_scroll_edge_left(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *obj = data;
- evas_object_smart_callback_call(obj, "scroll,edge,left", NULL);
+ evas_object_smart_callback_call(obj, SIG_SCROLL_EDGE_LEFT, NULL);
}
static void
_scroll_edge_right(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *obj = data;
- evas_object_smart_callback_call(obj, "scroll,edge,right", NULL);
+ evas_object_smart_callback_call(obj, SIG_SCROLL_EDGE_RIGHT, NULL);
}
static void
_scroll_edge_top(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *obj = data;
- evas_object_smart_callback_call(obj, "scroll,edge,top", NULL);
+ evas_object_smart_callback_call(obj, SIG_SCROLL_EDGE_TOP, NULL);
}
static void
_scroll_edge_bottom(void *data, Evas_Object *scr __UNUSED__, void *event_info __UNUSED__)
{
Evas_Object *obj = data;
- evas_object_smart_callback_call(obj, "scroll,edge,bottom", NULL);
+ evas_object_smart_callback_call(obj, SIG_SCROLL_EDGE_BOTTOM, NULL);
}
static Eina_Bool
if (it->disabled) goto end;
wd->longpressed = EINA_TRUE;
- evas_object_smart_callback_call(it->base.widget, "longpressed", it);
+ evas_object_smart_callback_call(it->base.widget, SIG_LONGPRESSED, it);
end:
return ECORE_CALLBACK_CANCEL;
it->swipe_timer = ecore_timer_add(0.4, _swipe_cancel, it);
/* Always call the callbacks last - the user may delete our context! */
if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
- evas_object_smart_callback_call(it->base.widget, "clicked,double", it);
+ {
+ evas_object_smart_callback_call(it->base.widget, SIG_CLICKED_DOUBLE, it);
+ }
wd->swipe = EINA_FALSE;
wd->movements = 0;
evas_object_smart_callback_add(obj, "scroll-freeze-on", _freeze_on, obj);
evas_object_smart_callback_add(obj, "scroll-freeze-off", _freeze_off, obj);
+ evas_object_smart_callbacks_descriptions_set(obj, _signals);
+
_mirrored_set(obj, elm_widget_mirrored_get(obj));
_sizing_eval(obj);
return obj;