From 30eb742a96102e9d4d31377969f1b52f8385c42e Mon Sep 17 00:00:00 2001 From: Jung Chanwook Date: Tue, 28 Feb 2012 11:46:00 +0900 Subject: [PATCH] [Genlist] Add clear_cb.(refer to #64275) Change-Id: Id48f4091372bb615364be53115d53906a3e31ffc --- src/lib/elm_genlist.c | 76 +++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index aed5d57..a1b6d43 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -36,7 +36,7 @@ struct _Widget_Data Eina_Inlist *items, *blocks; Eina_List *group_items; Pan *pan; - Evas_Coord pan_x, pan_y, old_pan_y, w, h, minw, minh, realminw, prev_viewport_w; + Evas_Coord pan_x, pan_y, reorder_old_pan_y, w, h, minw, minh, realminw, prev_viewport_w; Ecore_Job *calc_job, *update_job; Ecore_Idle_Enterer *queue_idle_enterer; Ecore_Idler *must_recalc_idler; @@ -950,6 +950,38 @@ _item_del(Elm_Genlist_Item *it) } static void +_clear_cb(Widget_Data *wd) +{ + wd->anchor_item = NULL; + while (wd->blocks) + { + Item_Block *itb = (Item_Block *)(wd->blocks); + + wd->blocks = eina_inlist_remove(wd->blocks, wd->blocks); + if (itb->items) eina_list_free(itb->items); + free(itb); + } + if (wd->queue_idle_enterer) + { + ecore_idle_enterer_del(wd->queue_idle_enterer); + wd->queue_idle_enterer = NULL; + } + if (wd->must_recalc_idler) + { + ecore_idler_del(wd->must_recalc_idler); + wd->must_recalc_idler = NULL; + } + if (wd->queue) wd->queue = eina_list_free(wd->queue); + if (wd->reorder_move_animator) + { + ecore_animator_del(wd->reorder_move_animator); + wd->reorder_move_animator = NULL; + } + wd->show_item = NULL; + wd->reorder_old_pan_y = 0; +} + +static void _item_select(Elm_Genlist_Item *it) { Eina_List *l; @@ -3343,11 +3375,11 @@ _pan_calculate(Evas_Object *obj) if ((sd->wd->reorder_mode) && (sd->wd->reorder_it)) { - if (sd->wd->pan_y != sd->wd->old_pan_y) + if (sd->wd->pan_y != sd->wd->reorder_old_pan_y) sd->wd->reorder_pan_move = EINA_TRUE; else sd->wd->reorder_pan_move = EINA_FALSE; evas_object_raise(sd->wd->reorder_it->edit_obj); - sd->wd->old_pan_y = sd->wd->pan_y; + sd->wd->reorder_old_pan_y = sd->wd->pan_y; sd->wd->start_time = ecore_loop_time_get(); } @@ -4488,50 +4520,16 @@ _elm_genlist_clear(Evas_Object *obj, Eina_Bool standby) } } wd->clear_me = EINA_FALSE; - wd->anchor_item = NULL; - while (wd->blocks) - { - Item_Block *itb = (Item_Block *)(wd->blocks); - - wd->blocks = eina_inlist_remove(wd->blocks, wd->blocks); - if (itb->items) eina_list_free(itb->items); - free(itb); - } wd->pan_changed = EINA_TRUE; if (wd->calc_job) { ecore_job_del(wd->calc_job); wd->calc_job = NULL; } - if (wd->queue_idle_enterer) - { - ecore_idle_enterer_del(wd->queue_idle_enterer); - wd->queue_idle_enterer = NULL; - } - if (wd->must_recalc_idler) - { - ecore_idler_del(wd->must_recalc_idler); - wd->must_recalc_idler = NULL; - } - if (wd->queue) - { - eina_list_free(wd->queue); - wd->queue = NULL; - } - if (wd->selected) - { - eina_list_free(wd->selected); - wd->selected = NULL; - } - if (wd->reorder_move_animator) - { - ecore_animator_del(wd->reorder_move_animator); - wd->reorder_move_animator = NULL; - } - wd->show_item = NULL; + if (wd->selected) wd->selected = eina_list_free(wd->selected); + _clear_cb(wd); wd->pan_x = 0; wd->pan_y = 0; - wd->old_pan_y = 0; wd->minw = 0; wd->minh = 0; -- 2.7.4