static void _cb_order_del(void *data, void *data2 EINA_UNUSED);
static Eina_Bool _cb_fill_delay(void *data);
+static Eina_List *dialogs;
+static Ecore_Event_Handler *handler;
+static Ecore_Timer *cache_timer;
+
E_Config_Dialog *
e_int_config_apps_add(Evas_Object *parent EINA_UNUSED, const char *params EINA_UNUSED)
{
return cfd;
}
+static Eina_Bool
+_cache_update_timer(void *d EINA_UNUSED)
+{
+ Eina_List *l;
+ E_Config_Dialog_Data *cfdata;
+
+ EINA_LIST_FOREACH(dialogs, l, cfdata)
+ {
+ E_FREE_LIST(cfdata->apps, efreet_desktop_unref);
+ if (eina_str_has_extension(cfdata->data->filename, ".menu"))
+ cfdata->apps = _load_menu(cfdata->data->filename);
+ else if (eina_str_has_extension(cfdata->data->filename, ".order"))
+ cfdata->apps = _load_order(cfdata->data->filename);
+ _cb_fill_delay(cfdata);
+ }
+ cache_timer = NULL;
+ return EINA_FALSE;
+}
+
+static Eina_Bool
+_cache_update()
+{
+ if (cache_timer)
+ ecore_timer_reset(cache_timer);
+ else
+ cache_timer = ecore_timer_add(1.0, _cache_update_timer, NULL);
+ return ECORE_CALLBACK_RENEW;
+}
+
static void *
_create_data(E_Config_Dialog *cfd)
{
else if (!strcmp(ext, ".order"))
cfdata->apps = _load_order(data->filename);
+ if (!dialogs)
+ handler = ecore_event_handler_add(EFREET_EVENT_DESKTOP_CACHE_UPDATE, _cache_update, NULL);
+ dialogs = eina_list_append(dialogs, cfdata);
return cfdata;
}
e_widget_ilist_clear(cfdata->apps_user.o_list);
E_FREE_LIST(cfdata->apps_user.desks, efreet_desktop_free);
E_FREE_LIST(cfdata->apps_xdg.desks, efreet_desktop_free);
+ dialogs = eina_list_remove(dialogs, cfdata);
+ if (!dialogs)
+ {
+ E_FREE_FUNC(cache_timer, ecore_timer_del);
+ E_FREE_FUNC(handler, ecore_event_handler_del);
+ }
free(cfdata);
}