From 3cb83a5b53b4ba02638acf753fe031082cb3c1a6 Mon Sep 17 00:00:00 2001 From: seoz Date: Tue, 20 Mar 2012 07:58:42 +0000 Subject: [PATCH] elm genlist: Refine item callbacks. Patch by Hyoyoung Chang On Mon, Mar 19, 2012 at 11:48 AM, Hyoyoung Chang wrote: > Dear all, > > I found a bug in decorate mode that selection callback is called twice. > Because two _mouse_down callbacks are added to a genlist item. > I'm fixing this bug and some refactoring. > > Thanks. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@69520 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/elm_genlist.c | 88 +++++++++++++++++++++++---------------------------- 1 file changed, 40 insertions(+), 48 deletions(-) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 95269de..16c9506 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -1465,6 +1465,40 @@ _mouse_up(void *data, } static void +_item_mouse_callbacks_add(Elm_Gen_Item *it, Evas_Object *view) +{ + evas_object_event_callback_add(view, EVAS_CALLBACK_MOUSE_DOWN, + _mouse_down, it); + evas_object_event_callback_add(view, EVAS_CALLBACK_MOUSE_UP, + _mouse_up, it); + evas_object_event_callback_add(view, EVAS_CALLBACK_MOUSE_MOVE, + _mouse_move, it); + evas_object_event_callback_add(view, EVAS_CALLBACK_MULTI_DOWN, + _multi_down, it); + evas_object_event_callback_add(view, EVAS_CALLBACK_MULTI_UP, + _multi_up, it); + evas_object_event_callback_add(view, EVAS_CALLBACK_MULTI_MOVE, + _multi_move, it); +} + +static void +_item_mouse_callbacks_del(Elm_Gen_Item *it, Evas_Object *view) +{ + evas_object_event_callback_del_full(view, EVAS_CALLBACK_MOUSE_DOWN, + _mouse_down, it); + evas_object_event_callback_del_full(view, EVAS_CALLBACK_MOUSE_UP, + _mouse_up, it); + evas_object_event_callback_del_full(view, EVAS_CALLBACK_MOUSE_MOVE, + _mouse_move, it); + evas_object_event_callback_del_full(view, EVAS_CALLBACK_MULTI_DOWN, + _multi_down, it); + evas_object_event_callback_del_full(view, EVAS_CALLBACK_MULTI_UP, + _multi_up, it); + evas_object_event_callback_del_full(view, EVAS_CALLBACK_MULTI_MOVE, + _multi_move, it); +} + +static void _signal_expand_toggle(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, @@ -1627,18 +1661,7 @@ _item_cache_add(Elm_Gen_Item *it) _signal_expand, it); edje_object_signal_callback_del_full(itc->base_view, "elm,action,contract", "elm", _signal_contract, it); - evas_object_event_callback_del_full(itc->base_view, EVAS_CALLBACK_MOUSE_DOWN, - _mouse_down, it); - evas_object_event_callback_del_full(itc->base_view, EVAS_CALLBACK_MOUSE_UP, - _mouse_up, it); - evas_object_event_callback_del_full(itc->base_view, EVAS_CALLBACK_MOUSE_MOVE, - _mouse_move, it); - evas_object_event_callback_del_full(itc->base_view, EVAS_CALLBACK_MULTI_DOWN, - _multi_down, it); - evas_object_event_callback_del_full(itc->base_view, EVAS_CALLBACK_MULTI_UP, - _multi_up, it); - evas_object_event_callback_del_full(itc->base_view, EVAS_CALLBACK_MULTI_MOVE, - _multi_move, it); + _item_mouse_callbacks_del(it, itc->base_view); _item_cache_clean(it->wd); evas_event_thaw(evas_object_evas_get(it->wd->obj)); evas_event_thaw_eval(evas_object_evas_get(it->wd->obj)); @@ -2054,18 +2077,7 @@ _item_realize(Elm_Gen_Item *it, "elm", _signal_expand, it); edje_object_signal_callback_add(VIEW(it), "elm,action,contract", "elm", _signal_contract, it); - evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_DOWN, - _mouse_down, it); - evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_UP, - _mouse_up, it); - evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MOUSE_MOVE, - _mouse_move, it); - evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MULTI_DOWN, - _multi_down, it); - evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MULTI_UP, - _multi_up, it); - evas_object_event_callback_add(VIEW(it), EVAS_CALLBACK_MULTI_MOVE, - _multi_move, it); + _item_mouse_callbacks_add(it, VIEW(it)); if ((it->wd->decorate_mode) && (!it->edit_obj) && (it->item->type != ELM_GENLIST_ITEM_GROUP) && (it->itc->decorate_all_item_style)) @@ -3339,18 +3351,8 @@ _decorate_mode_item_realize(Elm_Gen_Item *it, Eina_Bool effect_on) if (effect_on) edje_object_signal_emit(it->edit_obj, "elm,state,edit,enabled,effect", "elm"); else edje_object_signal_emit(it->edit_obj, "elm,state,edit,enabled", "elm"); - evas_object_event_callback_add(it->edit_obj, EVAS_CALLBACK_MOUSE_DOWN, - _mouse_down, it); - evas_object_event_callback_add(it->edit_obj, EVAS_CALLBACK_MOUSE_UP, - _mouse_up, it); - evas_object_event_callback_add(it->edit_obj, EVAS_CALLBACK_MOUSE_MOVE, - _mouse_move, it); - evas_object_event_callback_add(it->edit_obj, EVAS_CALLBACK_MULTI_DOWN, - _multi_down, it); - evas_object_event_callback_add(it->edit_obj, EVAS_CALLBACK_MULTI_UP, - _multi_up, it); - evas_object_event_callback_add(it->edit_obj, EVAS_CALLBACK_MULTI_MOVE, - _multi_move, it); + _item_mouse_callbacks_del(it, VIEW(it)); + _item_mouse_callbacks_add(it, it->edit_obj); _item_text_realize(it, it->edit_obj, &it->item->edit_texts, NULL); if (it->flipped) edje_object_signal_emit(it->edit_obj, "elm,state,flip,enabled", "elm"); @@ -3389,19 +3391,9 @@ _decorate_mode_item_unrealize(Elm_Gen_Item *it) EINA_LIST_FREE(it->item->edit_content_objs, icon) evas_object_del(icon); edje_object_message_signal_process(it->edit_obj); + _item_mouse_callbacks_del(it, it->edit_obj); + _item_mouse_callbacks_add(it, VIEW(it)); - evas_object_event_callback_del_full(it->edit_obj, EVAS_CALLBACK_MOUSE_DOWN, - _mouse_down, it); - evas_object_event_callback_del_full(it->edit_obj, EVAS_CALLBACK_MOUSE_UP, - _mouse_up, it); - evas_object_event_callback_del_full(it->edit_obj, EVAS_CALLBACK_MOUSE_MOVE, - _mouse_move, it); - evas_object_event_callback_del_full(it->edit_obj, EVAS_CALLBACK_MULTI_DOWN, - _multi_down, it); - evas_object_event_callback_del_full(it->edit_obj, EVAS_CALLBACK_MULTI_UP, - _multi_up, it); - evas_object_event_callback_del_full(it->edit_obj, EVAS_CALLBACK_MULTI_MOVE, - _multi_move, it); it->item->decorate_mode_item_realized = EINA_FALSE; } -- 2.7.4