file_tab: avoid unnecessary selection behavior.

When list item's close button is clicked, this selection is triggered
prior to the close button clicked callback.
It's useless to perform this selected callback anyway this file tab
item is gonna removed soon. But, due to the list's behavior,
it's unavoidable so we need this tricky animator.
This commit is contained in:
Hermet Park 2016-08-12 10:29:53 +09:00
parent 9d188e601e
commit a2db164533
1 changed files with 24 additions and 4 deletions

View File

@ -11,6 +11,7 @@ typedef struct file_tab_it_s
{
Enventor_Item *enventor_it;
Elm_Object_Item *it;
Ecore_Animator *animator;
} file_tab_it;
file_data *g_fd = NULL;
@ -48,6 +49,17 @@ right_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
elm_list_item_selected_set(it, EINA_TRUE);
}
static Eina_Bool
list_item_anim_cb(void *data)
{
file_tab_it *fti = data;
file_mgr_file_focus(fti->enventor_it);
fti->animator = NULL;
return ECORE_CALLBACK_CANCEL;
}
static void
list_item_selected_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info)
@ -58,11 +70,15 @@ list_item_selected_cb(void *data, Evas_Object *obj EINA_UNUSED,
Elm_Object_Item *it = event_info;
if (fd->selected_it == it) return;
file_tab_it *fti = data;
//FIXME: If the item is going closed (by closed button)
//This focus is unnecessary!
file_mgr_file_focus(fti->enventor_it);
//When list item's close button is clicked, this selection is triggered
//prior to the close button clicked callback.
//It's useless to perform this selected callback anyway this file tab
//item is gonna removed soon. But, due to the list's behavior,
//it's unavoidable so we need this tricky animator.
file_tab_it *fti = data;
ecore_animator_del(fti->animator);
fti->animator = ecore_animator_add(list_item_anim_cb, fti);
}
static void
@ -95,6 +111,7 @@ file_tab_it_del(file_tab_it *fti)
//Remove item.
elm_object_item_del(fti->it);
ecore_animator_del(fti->animator);
free(fti);
elm_list_go(list);
@ -105,6 +122,7 @@ close_btn_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
file_tab_it *fti = data;
file_tab_it_del(fti);
}
@ -168,6 +186,7 @@ file_tab_clear(void)
EINA_LIST_FOREACH(list, l, it)
{
file_tab_it *fti = elm_object_item_data_get(it);
ecore_animator_del(fti->animator);
free(fti);
}
elm_list_clear(fd->list);
@ -331,6 +350,7 @@ file_tab_term(void)
EINA_LIST_FOREACH(children, l, it)
{
fti = elm_object_item_data_get(it);
ecore_animator_del(fti->animator);
free(fti);
}