diff --git a/src/modules/everything-apps/e_mod_main.c b/src/modules/everything-apps/e_mod_main.c index edfd42fea..ed2034075 100644 --- a/src/modules/everything-apps/e_mod_main.c +++ b/src/modules/everything-apps/e_mod_main.c @@ -287,6 +287,9 @@ _fetch_exe(Evry_Plugin *plugin, const char *input) if (input) { + if (!(exe_list) && !(exe_scan_idler)) + _scan_executables(); + if (_add_executables(p, input)) { GET_ITEM(it, p->command); @@ -325,8 +328,6 @@ _begin_exe(Evry_Plugin *plugin, const Evry_Item *item) p->added = eina_hash_string_small_new(_hash_free); - _scan_executables(); - app = EVRY_ITEM_NEW(Evry_Item_App, p, NULL, _icon_get, _item_free); EVRY_ACTN(app)->action = &_exec_open_file_action; EVRY_ACTN(app)->remember_context = EINA_TRUE; diff --git a/src/modules/everything-aspell/e_mod_main.c b/src/modules/everything-aspell/e_mod_main.c index c0a1b37c2..c0bb79107 100644 --- a/src/modules/everything-aspell/e_mod_main.c +++ b/src/modules/everything-aspell/e_mod_main.c @@ -25,6 +25,8 @@ struct _Plugin const char *lang; const char *input; Eina_Bool is_first; + + unsigned int instances; }; struct _Module_Config @@ -256,19 +258,16 @@ _cb_del(void *data, int type __UNUSED__, void *event) return 1; } -static int +static Evry_Plugin * _begin(Evry_Plugin *plugin, const Evry_Item *it __UNUSED__) { GET_PLUGIN(p, plugin); + p->instances++; - if (!p->handler.data) - p->handler.data = ecore_event_handler_add - (ECORE_EXE_EVENT_DATA, _cb_data, p); - if (!p->handler.del) - p->handler.del = ecore_event_handler_add - (ECORE_EXE_EVENT_DEL, _cb_del, p); - - return _exe_restart(p); + if (p->instances > 1) + return NULL; + + return EVRY_PLUGIN(p); } static int @@ -286,7 +285,18 @@ _fetch(Evry_Plugin *plugin, const char *input) return 0; } - if (!p->handler.data && !_begin(plugin, NULL)) return 0; + if (!p->handler.data) + { + if (!p->handler.data) + p->handler.data = ecore_event_handler_add + (ECORE_EXE_EVENT_DATA, _cb_data, p); + if (!p->handler.del) + p->handler.del = ecore_event_handler_add + (ECORE_EXE_EVENT_DEL, _cb_del, p); + + if (!_exe_restart(p)) + return 0; + } len = sizeof(LANG_MODIFIER) - 1; if (strncmp(input, LANG_MODIFIER, len) == 0) @@ -347,12 +357,17 @@ _fetch(Evry_Plugin *plugin, const char *input) } static void -_cleanup(Evry_Plugin *plugin) +_finish(Evry_Plugin *plugin) { GET_PLUGIN(p, plugin); EVRY_PLUGIN_ITEMS_FREE(p); + p->instances--; + + if (p->instances > 0) + return; + if (p->handler.data) { ecore_event_handler_del(p->handler.data); @@ -388,7 +403,7 @@ _plugins_init(const Evry_API *_api) _plug = EVRY_PLUGIN_NEW(Plugin, N_("Spell Checker"), _module_icon, EVRY_TYPE_TEXT, - NULL, _cleanup, _fetch, NULL); + _begin, _finish, _fetch, NULL); _plug->config_path = _config_path; _plug->history = EINA_FALSE; _plug->async_fetch = EINA_TRUE; diff --git a/src/modules/everything-calc/e_mod_main.c b/src/modules/everything-calc/e_mod_main.c index 10040eec2..6b86fff4a 100644 --- a/src/modules/everything-calc/e_mod_main.c +++ b/src/modules/everything-calc/e_mod_main.c @@ -20,7 +20,7 @@ static Ecore_Exe *exe = NULL; static Eina_List *history = NULL; static Eina_List *handlers = NULL; static int error = 0; - +static Eina_Bool active = EINA_FALSE; static char _module_icon[] = "accessories-calculator"; static Evry_Plugin * @@ -28,6 +28,9 @@ _begin(Evry_Plugin *p, const Evry_Item *item __UNUSED__) { Evry_Item *it; + if (active) + return NULL; + if (history) { const char *result; @@ -45,6 +48,7 @@ _begin(Evry_Plugin *p, const Evry_Item *item __UNUSED__) it->context = eina_stringshare_ref(p->name); p->items = eina_list_prepend(p->items, it); + active = EINA_TRUE; return p; } @@ -71,9 +75,8 @@ _run_bc(Evry_Plugin *p) return !!exe; } - static void -_cleanup(Evry_Plugin *p) +_finish(Evry_Plugin *p) { Ecore_Event_Handler *h; Evry_Item *it; @@ -102,6 +105,7 @@ _cleanup(Evry_Plugin *p) ecore_exe_free(exe); exe = NULL; } + active = EINA_FALSE; } static int @@ -237,7 +241,7 @@ _plugins_init(const Evry_API *_api) _plug = EVRY_PLUGIN_NEW(Evry_Plugin, N_("Calculator"), _module_icon, EVRY_TYPE_TEXT, - _begin, _cleanup, _fetch, NULL); + _begin, _finish, _fetch, NULL); _plug->history = EINA_FALSE; _plug->async_fetch = EINA_TRUE;