btw, this patch does not clean the relcount cleanly. 1. One relcount is still in genlist code. 2. Gengrid depends on relcount still.
Even I am worried that removing relcount will have performance issues with expandable list, group index, relative item append, and etc, I just removed the leftovers for the code clean-up. Daniel Juyung Seo (SeoZ) On Fri, Mar 29, 2013 at 11:04 PM, Carsten Haitzler <[email protected]> wrote: > On Fri, 29 Mar 2013 23:00:34 +0900 Daniel Juyung Seo <[email protected]> > said: > > wtf... no conflicts at all .. gah! git! why u no work right! > >> WTF is this? >> This patch was not rebased with the latest elementary and this removed some >> of the latest codes :( >> I will fix it. >> >> Daniel Juyung Seo (SeoZ) >> >> >> On Fri, Mar 29, 2013 at 10:23 PM, Tae-Hwan Kim - Enlightenment Git < >> [email protected]> wrote: >> >> > raster pushed a commit to branch master. >> > >> > commit 3f4c3e03c600c87782543cf08de886016f2c192e >> > Author: Tae-Hwan Kim <[email protected]> >> > Date: Fri Mar 29 22:23:38 2013 +0900 >> > >> > Because of relcount, genlist items cannot be deleted immediately. >> > If we use reverse relatvie lists, we can delete item immediately. >> > --- >> > src/lib/elm_genlist.c | 53 >> > +++++++++++++++----------------------------- >> > src/lib/elm_widget_genlist.h | 1 + >> > 2 files changed, 19 insertions(+), 35 deletions(-) >> > >> > diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c >> > index 3672714..9af7f22 100644 >> > --- a/src/lib/elm_genlist.c >> > +++ b/src/lib/elm_genlist.c >> > @@ -2917,7 +2917,7 @@ _elm_genlist_item_del_not_serious(Elm_Gen_Item *it) >> > * the item is >> > * deleted */ >> > >> > - if ((it->relcount > 0) || (it->walking > 0)) return; >> > + if (it->walking > 0) return; >> > >> > if (it->selected) >> > GL_IT(it)->wsd->selected = >> > @@ -3499,20 +3499,12 @@ _item_block_new(Elm_Genlist_Smart_Data *sd, >> > return itb; >> > } >> > >> > -/** >> > - * @internal >> > - * >> > - * This function adds an item to a block's item list. This may or may not >> > - * rearrange existing blocks and create a new block. >> > - * >> > - */ >> > static Eina_Bool >> > _item_block_add(Elm_Genlist_Smart_Data *sd, >> > Elm_Gen_Item *it) >> > { >> > Item_Block *itb = NULL; >> > >> > - // when a new item does not depend on another item >> > if (!it->item->rel) >> > { >> > newblock: >> > @@ -3580,7 +3572,6 @@ newblock: >> > } >> > else >> > { >> > - // item move_before, prepend, insert_before, sorted_insert >> > with before >> > if (it->item->before) >> > { >> > if (sd->blocks) >> > @@ -3601,7 +3592,6 @@ newblock: >> > >> > _item_position_update(itb->items, 0); >> > } >> > - // item move_after, append, insert_after, sorted_insert >> > without before >> > else >> > { >> > if (sd->blocks) >> > @@ -3623,7 +3613,6 @@ newblock: >> > } >> > } >> > } >> > - // when a new item depends on another item >> > else >> > { >> > Eina_List *tmp; >> > @@ -3666,17 +3655,6 @@ newblock: >> > it->item->block = itb; >> > if (itb->sd->calc_job) ecore_job_del(itb->sd->calc_job); >> > itb->sd->calc_job = ecore_job_add(_calc_job, itb->sd); >> > - if (it->item->rel) >> > - { >> > - it->item->rel->relcount--; >> > - if ((it->item->rel->generation < GL_IT(it)->wsd->generation) >> > - && (!it->item->rel->relcount)) >> > - { >> > - _item_del(it->item->rel); >> > - elm_widget_item_free(it->item->rel); >> > - } >> > - it->item->rel = NULL; >> > - } >> > >> > if (itb->count > itb->sd->max_items_per_block) >> > { >> > @@ -3939,7 +3917,7 @@ _item_move_after(Elm_Gen_Item *it, >> > GL_IT(it)->wsd->items = eina_inlist_append_relative >> > (GL_IT(it)->wsd->items, EINA_INLIST_GET(it), >> > EINA_INLIST_GET(after)); >> > it->item->rel = after; >> > - it->item->rel->relcount++; >> > + after->item->rel_revs = eina_list_append(after->item->rel_revs, it); >> > it->item->before = EINA_FALSE; >> > if (after->item->group_item) it->item->group_item = >> > after->item->group_item; >> > _item_queue(GL_IT(it)->wsd, it, NULL); >> > @@ -4010,7 +3988,7 @@ _item_move_before(Elm_Gen_Item *it, >> > GL_IT(it)->wsd->items = eina_inlist_prepend_relative >> > (GL_IT(it)->wsd->items, EINA_INLIST_GET(it), >> > EINA_INLIST_GET(before)); >> > it->item->rel = before; >> > - it->item->rel->relcount++; >> > + before->item->rel_revs = eina_list_append(before->item->rel_revs, it); >> > it->item->before = EINA_TRUE; >> > if (before->item->group_item) >> > it->item->group_item = before->item->group_item; >> > @@ -5060,11 +5038,8 @@ _item_select(Elm_Gen_Item *it) >> > { >> > if ((!it->walking) && (it->generation < >> > GL_IT(it)->wsd->generation)) >> > { >> > - if (!it->relcount) >> > - { >> > - it->del_cb(it); >> > - elm_widget_item_free(it); >> > - } >> > + it->del_cb(it); >> > + elm_widget_item_free(it); >> > } >> > else >> > GL_IT(it)->wsd->last_selected_item = (Elm_Object_Item *)it; >> > @@ -5141,6 +5116,15 @@ _item_del_pre_hook(Elm_Object_Item *item) >> > >> > if ((it->relcount > 0) || (it->walking > 0)) >> > { >> > + // FIXME: relative will be better to be fixed. it is too harsh. >> > + if (it->item->rel) >> > + it->item->rel->item->rel_revs = >> > + eina_list_remove(it->item->rel->item->rel_revs, it); >> > + if (it->item->rel_revs) >> > + { >> > + Elm_Gen_Item *tmp; >> > + EINA_LIST_FREE(it->item->rel_revs, tmp) tmp->item->rel = NULL; >> > + } >> > elm_genlist_item_subitems_clear(item); >> > if (GL_IT(it)->wsd->show_item == it) >> > GL_IT(it)->wsd->show_item = NULL; >> > @@ -5329,7 +5313,7 @@ _item_append(Eo *obj EINA_UNUSED, void *_pd, va_list >> > *list) >> > sd->items = eina_inlist_append_relative >> > (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(it2)); >> > it->item->rel = it2; >> > - it->item->rel->relcount++; >> > + it2->item->rel_revs = eina_list_append(it2->item->rel_revs, it); >> > } >> > it->item->before = EINA_FALSE; >> > _item_queue(sd, it, NULL); >> > @@ -5390,7 +5374,7 @@ _item_prepend(Eo *obj EINA_UNUSED, void *_pd, >> > va_list *list) >> > sd->items = eina_inlist_prepend_relative >> > (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(it2)); >> > it->item->rel = it2; >> > - it->item->rel->relcount++; >> > + it2->item->rel_revs = eina_list_append(it2->item->rel_revs, it); >> > } >> > it->item->before = EINA_TRUE; >> > _item_queue(sd, it, NULL); >> > @@ -5457,7 +5441,7 @@ _item_insert_after(Eo *obj EINA_UNUSED, void *_pd, >> > va_list *list) >> > (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(after)); >> > >> > it->item->rel = after; >> > - it->item->rel->relcount++; >> > + after->item->rel_revs = eina_list_append(after->item->rel_revs, it); >> > it->item->before = EINA_FALSE; >> > _item_queue(sd, it, NULL); >> > >> > @@ -5522,7 +5506,6 @@ _item_insert_before(Eo *obj EINA_UNUSED, void *_pd, >> > va_list *list) >> > (sd->items, EINA_INLIST_GET(it), EINA_INLIST_GET(before)); >> > >> > it->item->rel = before; >> > - it->item->rel->relcount++; >> > it->item->before = EINA_TRUE; >> > _item_queue(sd, it, NULL); >> > >> > @@ -5631,7 +5614,7 @@ _item_sorted_insert(Eo *obj EINA_UNUSED, void *_pd, >> > va_list *list) >> > if (rel) >> > { >> > it->item->rel = rel; >> > - it->item->rel->relcount++; >> > + rel->item->rel_revs = eina_list_append(rel->item->rel_revs, it); >> > } >> > >> > _item_queue(sd, it, _elm_genlist_item_list_compare); >> > diff --git a/src/lib/elm_widget_genlist.h b/src/lib/elm_widget_genlist.h >> > index d001cfc..6a24d66 100644 >> > --- a/src/lib/elm_widget_genlist.h >> > +++ b/src/lib/elm_widget_genlist.h >> > @@ -200,6 +200,7 @@ struct Elm_Gen_Item_Type >> > Evas_Coord scrl_x, scrl_y, old_scrl_y; >> > >> > Elm_Gen_Item *rel; >> > + Eina_List *rel_revs; // FIXME: find better way not to use >> > this >> > Evas_Object *deco_it_view; >> > int expanded_depth; >> > int order_num_in; >> > >> > -- >> > >> > >> > ------------------------------------------------------------------------------ >> > Own the Future-Intel(R) Level Up Game Demo Contest 2013 >> > Rise to greatness in Intel's independent game demo contest. Compete >> > for recognition, cash, and the chance to get your game on Steam. >> > $5K grand prize plus 10 genre and skill prizes. Submit your demo >> > by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2 >> > >> ------------------------------------------------------------------------------ >> Own the Future-Intel(R) Level Up Game Demo Contest 2013 >> Rise to greatness in Intel's independent game demo contest. Compete >> for recognition, cash, and the chance to get your game on Steam. >> $5K grand prize plus 10 genre and skill prizes. Submit your demo >> by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2 >> _______________________________________________ >> enlightenment-devel mailing list >> [email protected] >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel >> > > > -- > ------------- Codito, ergo sum - "I code, therefore I am" -------------- > The Rasterman (Carsten Haitzler) [email protected] > ------------------------------------------------------------------------------ Own the Future-Intel(R) Level Up Game Demo Contest 2013 Rise to greatness in Intel's independent game demo contest. Compete for recognition, cash, and the chance to get your game on Steam. $5K grand prize plus 10 genre and skill prizes. Submit your demo by 6/6/13. http://altfarm.mediaplex.com/ad/ck/12124-176961-30367-2 _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
