proclist: delayed del.
This commit is contained in:
parent
70188d59d7
commit
eca697853d
|
@ -11,6 +11,8 @@ evisum_ui_item_cache_new(Evas_Object *parent,
|
|||
cache->item_create_cb = create_cb;
|
||||
cache->inactive = cache->active = NULL;
|
||||
cache->size = size;
|
||||
cache->pending = NULL;
|
||||
cache->pending_timer = NULL;
|
||||
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
|
@ -61,6 +63,23 @@ evisum_ui_item_cache_steal(Evisum_Ui_Cache *cache, Eina_List *objs)
|
|||
}
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_pending_triggered_cb(void *data)
|
||||
{
|
||||
|
||||
Eina_List *l, *l_next;
|
||||
Evas_Object *o;
|
||||
Evisum_Ui_Cache *cache = data;
|
||||
|
||||
EINA_LIST_FOREACH_SAFE(cache->pending, l, l_next, o)
|
||||
{
|
||||
cache->pending = eina_list_remove_list(cache->pending, l);
|
||||
evas_object_del(o);
|
||||
}
|
||||
cache->pending_timer = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Item_Cache *
|
||||
evisum_ui_item_cache_item_get(Evisum_Ui_Cache *cache)
|
||||
{
|
||||
|
@ -91,10 +110,12 @@ evisum_ui_item_cache_reset(Evisum_Ui_Cache *cache)
|
|||
|
||||
EINA_LIST_FREE(cache->active, it)
|
||||
{
|
||||
cache->pending = eina_list_append(cache->pending, it->obj);
|
||||
free(it);
|
||||
}
|
||||
EINA_LIST_FREE(cache->inactive, it)
|
||||
{
|
||||
cache->pending = eina_list_append(cache->pending, it->obj);
|
||||
free(it);
|
||||
}
|
||||
for (int i = 0; i < cache->size; i++)
|
||||
|
@ -108,6 +129,13 @@ evisum_ui_item_cache_reset(Evisum_Ui_Cache *cache)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
evisum_ui_item_cache_pending_del(Evisum_Ui_Cache *cache)
|
||||
{
|
||||
if (!cache->pending_timer)
|
||||
cache->pending_timer = ecore_timer_add(0.5, _pending_triggered_cb, cache);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
evisum_ui_item_cache_item_release(Evisum_Ui_Cache *cache, Evas_Object *obj)
|
||||
{
|
||||
|
@ -153,5 +181,7 @@ evisum_ui_item_cache_free(Evisum_Ui_Cache *cache)
|
|||
free(it);
|
||||
EINA_LIST_FREE(cache->inactive, it)
|
||||
free(it);
|
||||
eina_list_free(cache->pending);
|
||||
|
||||
free(cache);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include <Eina.h>
|
||||
#include <Evas.h>
|
||||
#include <Ecore.h>
|
||||
|
||||
typedef struct _Evisum_Ui_Cache {
|
||||
Eina_List *inactive;
|
||||
|
@ -10,6 +11,8 @@ typedef struct _Evisum_Ui_Cache {
|
|||
Evas_Object *parent;
|
||||
Evas_Object *(*item_create_cb)(Evas_Object *);
|
||||
int size;
|
||||
Ecore_Timer *pending_timer;
|
||||
Eina_List *pending;
|
||||
} Evisum_Ui_Cache;
|
||||
|
||||
typedef struct _Item_Cache {
|
||||
|
@ -34,5 +37,7 @@ evisum_ui_item_cache_reset(Evisum_Ui_Cache *cache);
|
|||
void
|
||||
evisum_ui_item_cache_steal(Evisum_Ui_Cache *cache, Eina_List *objs);
|
||||
|
||||
void
|
||||
evisum_ui_item_cache_pending_del(Evisum_Ui_Cache *cache);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -176,9 +176,9 @@ _content_reset(Ui_Data *pd)
|
|||
}
|
||||
elm_table_pack(pd->tb_content, pd->glist, 0, 1, j, 1);
|
||||
elm_table_pack(pd->tb_content, pd->summary.fr, 0, 2, j, 1);
|
||||
elm_genlist_clear(pd->glist);
|
||||
if (pd->cache)
|
||||
evisum_ui_item_cache_reset(pd->cache);
|
||||
elm_genlist_clear(pd->glist);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -991,6 +991,7 @@ _process_list_feedback_cb(void *data, Ecore_Thread *thread EINA_UNUSED,
|
|||
if (!pd->poll_count)
|
||||
ecore_timer_add(1.0, _bring_in, pd);
|
||||
pd->poll_count++;
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1020,6 +1021,7 @@ _btn_clicked_state_save(Ui_Data *pd, Evas_Object *btn)
|
|||
|
||||
if (pd->fields_menu)
|
||||
{
|
||||
evisum_ui_item_cache_pending_del(pd->cache);
|
||||
evas_object_del(pd->fields_menu);
|
||||
pd->fields_menu = NULL;
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue