diff --git a/src/modules/fileman/e_fwin.c b/src/modules/fileman/e_fwin.c index 5f3133e5e..c6af4404f 100644 --- a/src/modules/fileman/e_fwin.c +++ b/src/modules/fileman/e_fwin.c @@ -41,6 +41,7 @@ struct _E_Fwin const char *theme_file; Ecore_Timer *popup_timer; + Ecore_Timer *popup_del_job; Eina_List *popup_handlers; E_Fm2_Icon_Info *popup_icon; E_Popup *popup; @@ -740,6 +741,7 @@ _e_fwin_free(E_Fwin *fwin) e_object_del(E_OBJECT(fwin->fad->dia)); fwin->fad = NULL; } + if (fwin->popup_del_job) ecore_job_del(fwin->popup_del_job); if (fwin->popup) e_object_del(E_OBJECT(fwin->popup)); if (fwin->popup_timer) ecore_timer_del(fwin->popup_timer); fwin->popup_timer = NULL; @@ -862,16 +864,21 @@ _e_fwin_icon_popup(void *data) return EINA_FALSE; } +static void +_e_fwin_icon_popup_del(E_Fwin *fwin) +{ + E_FREE_FUNC(fwin->popup, e_object_del); + fwin->popup_icon = NULL; + fwin->popup_del_job = NULL; +} + static void _e_fwin_icon_mouse_out(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) { E_Fwin *fwin = data; - if (fwin->popup_timer) ecore_timer_del(fwin->popup_timer); - if (fwin->popup) e_object_del(E_OBJECT(fwin->popup)); - fwin->popup = NULL; - fwin->popup_timer = NULL; - fwin->popup_icon = NULL; + E_FREE_FUNC(fwin->popup_timer, ecore_timer_del); + if (!fwin->popup_del_job) fwin->popup_del_job = ecore_job_add((Ecore_Cb)_e_fwin_icon_popup_del, fwin); } static void