From 523597cdcba87a407129f5a20d36bd663c4bdfd2 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 20 Sep 2012 08:57:36 +0000 Subject: [PATCH] create default apps menu on init, don't free efreet menus on shutdown to prevent race condition triggered by people with superhuman menu navigation abilities SVN revision: 76895 --- src/bin/e_int_menus.c | 15 +++++++++------ src/bin/e_int_menus.h | 1 + src/bin/e_menu.c | 1 + 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index ea9adee7d..a65cf6663 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -64,7 +64,7 @@ static void _e_int_menus_main_exit(void *data, E_Menu *m, E_Menu_Item *mi static void _e_int_menus_desktops_free_hook(void *obj); static void _e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_item_label_set(Efreet_Menu *entry, E_Menu_Item *mi); - +static Efreet_Menu *_e_int_menus_apps_thread_new(E_Menu *m, const char *dir); //static void _e_int_menus_apps_drag_finished(E_Drag *drag, int dropped __UNUSED__); /* local subsystem globals */ @@ -477,18 +477,21 @@ e_int_menus_menu_augmentation_point_disabled_set(const char *menu, Eina_Bool dis } } +EINTERN void +e_int_menus_init(void) +{ + if (e_config->menu_apps_show) + _e_int_menus_apps_thread_new(NULL, NULL); +} + EINTERN void e_int_menus_shutdown(void) { E_FREE_LIST(_e_int_menus_app_threads, ecore_thread_cancel); if (_e_int_menus_app_cleaner) ecore_timer_del(_e_int_menus_app_cleaner); _e_int_menus_app_cleaner = NULL; - eina_hash_free(_e_int_menus_app_menus); - _e_int_menus_app_menus = NULL; eina_hash_free(_e_int_menus_app_menus_waiting); _e_int_menus_app_menus_waiting = NULL; - if (_e_int_menus_app_menu_default) efreet_menu_free(_e_int_menus_app_menu_default); - _e_int_menus_app_menu_default = NULL; _e_int_menus_app_menu_default_waiting = NULL; } @@ -731,7 +734,7 @@ _e_int_menus_apps_thread_new(E_Menu *m, const char *dir) mn = _e_int_menus_app_menu_default_waiting; if (mn) return NULL; - if (dir) + if (dir && m) eina_hash_add(_e_int_menus_app_menus_waiting, dir, m); else _e_int_menus_app_menu_default_waiting = m; diff --git a/src/bin/e_int_menus.h b/src/bin/e_int_menus.h index 0811146f0..6808b7450 100644 --- a/src/bin/e_int_menus.h +++ b/src/bin/e_int_menus.h @@ -62,6 +62,7 @@ EAPI void e_int_menus_menu_augmentation_del(const char *menu EAPI void e_int_menus_menu_augmentation_point_disabled_set(const char *menu, Eina_Bool disabled); +EINTERN void e_int_menus_init(void); EINTERN void e_int_menus_shutdown(void); #endif #endif diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index c0aad635e..f77904675 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -186,6 +186,7 @@ e_menu_init(void) _e_menu_categories = eina_hash_string_superfast_new(NULL); if (!_e_menu_hash) _e_menu_hash = eina_hash_string_superfast_new(NULL); + e_int_menus_init(); return 1; }