From 8e5f0a0bb6f28dd9f8af4aaafc8bafc57b92fb1e Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 5 Oct 2015 16:01:10 -0400 Subject: [PATCH] repopulate app list dialogs when efreet deskop cache updates should improve usage when installing/uninstalling apps --- src/modules/conf_applications/e_int_config_apps.c | 42 +++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/modules/conf_applications/e_int_config_apps.c b/src/modules/conf_applications/e_int_config_apps.c index 2822b65..bab8cc0 100644 --- a/src/modules/conf_applications/e_int_config_apps.c +++ b/src/modules/conf_applications/e_int_config_apps.c @@ -48,6 +48,10 @@ static void _cb_down(void *data, void *data2 EINA_UNUSED); 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) { @@ -190,6 +194,35 @@ _create_dialog(E_Config_Data *data) 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) { @@ -210,6 +243,9 @@ _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; } @@ -239,6 +275,12 @@ _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *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); } -- 2.7.4