From ecaba44ca3fd665e6ef30887028c1162650379a9 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Fri, 12 Aug 2011 18:27:41 +0000 Subject: [PATCH] e17/everything: fix segv on shutdown. fix macros SVN revision: 62407 --- src/modules/everything/e_mod_main.c | 7 ++++++- src/modules/everything/evry_api.h | 11 ++++++----- src/modules/everything/evry_plug_apps.c | 18 +++++++++--------- src/modules/everything/evry_plug_clipboard.c | 2 +- src/modules/everything/evry_plug_files.c | 12 ++++++------ src/modules/everything/evry_plug_settings.c | 4 +--- src/modules/everything/evry_plug_windows.c | 10 +++++----- 7 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/modules/everything/e_mod_main.c b/src/modules/everything/e_mod_main.c index b0085c8f2..0b898b119 100644 --- a/src/modules/everything/e_mod_main.c +++ b/src/modules/everything/e_mod_main.c @@ -167,7 +167,12 @@ e_modapi_shutdown(E_Module *m __UNUSED__) Evry_Module *em; EINA_LIST_FOREACH(e_datastore_get("evry_modules"), l, em) - em->shutdown(); + { + if (em->active) + em->shutdown(); + + em->active = EINA_FALSE; + } evry_plug_apps_shutdown(); evry_plug_files_shutdown(); diff --git a/src/modules/everything/evry_api.h b/src/modules/everything/evry_api.h index bac6c8aa3..2035b2c77 100644 --- a/src/modules/everything/evry_api.h +++ b/src/modules/everything/evry_api.h @@ -216,14 +216,15 @@ struct _Evry_Event_Action_Performed _p = E_NEW(Plugin, 1); \ _p->base = *_plugin; \ _p->base.items = NULL; \ - evry->item_new(&_p->base.base, (Evry_Plugin*)_p, \ - _plugin->base.label, NULL, \ - (Evry_Item_Free_Cb)_p->base.finish); \ + _p->base.base.ref = 1; \ + _p->base.base.plugin = (Evry_Plugin*)_p; \ + _p->base.base.free = (Evry_Item_Free_Cb)_p->base.finish; \ + _p->base.base.label = eina_stringshare_add(_plugin->base.label); \ _p->base.base.detail = eina_stringshare_add(_plugin->base.detail); \ _p->base.base.icon = eina_stringshare_add(_plugin->base.icon); \ _p->base.base.context = eina_stringshare_add(_plugin->base.context); \ _p->base.base.id = eina_stringshare_add(_plugin->base.id); \ - } +} #define EVRY_PLUGIN_FREE(_p) if (_p) evry->plugin_free(EVRY_PLUGIN(_p)) @@ -254,7 +255,7 @@ typedef void (*Evry_Item_Free_Cb) (Evry_Item *it); /*** Evry_Action macros ***/ #define EVRY_ACTION_NEW(_name, _in1, _in2, _icon, _action, _check) \ - evry->action_new(_name, _(_name), _in1, _in2, _icon, _action, _check) + evry->action_new(N_(_name), _(_name), _in1, _in2, _icon, _action, _check) #define EVRY_ACTION_FREE(_act) if (_act) evry->action_free(EVRY_ACTN(_act)) diff --git a/src/modules/everything/evry_plug_apps.c b/src/modules/everything/evry_plug_apps.c index eb3f06d94..3d2edd2c0 100644 --- a/src/modules/everything/evry_plug_apps.c +++ b/src/modules/everything/evry_plug_apps.c @@ -1052,61 +1052,61 @@ _plugins_init(const Evry_API *api) evry->plugin_register(p, EVRY_PLUGIN_ACTION, 1); _plugins = eina_list_append(_plugins, p); - act = EVRY_ACTION_NEW(N_("Launch"), + act = EVRY_ACTION_NEW("Launch", EVRY_TYPE_APP, 0, "system-run", _exec_app_action, _exec_app_check_item); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("Open File..."), + act = EVRY_ACTION_NEW("Open File...", EVRY_TYPE_APP, EVRY_TYPE_FILE, "document-open", _exec_app_action, _exec_app_check_item); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("Run in Terminal"), + act = EVRY_ACTION_NEW("Run in Terminal", EVRY_TYPE_APP, 0, "system-run", _exec_term_action, _exec_term_check_item); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("Edit Application Entry"), + act = EVRY_ACTION_NEW("Edit Application Entry", EVRY_TYPE_APP, 0, "everything-launch", _edit_app_action, _edit_app_check_item); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("New Application Entry"), + act = EVRY_ACTION_NEW("New Application Entry", EVRY_TYPE_APP, 0, "everything-launch", _new_app_action, _new_app_check_item); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("Run with Sudo"), + act = EVRY_ACTION_NEW("Run with Sudo", EVRY_TYPE_APP, 0, "system-run", _exec_sudo_action, NULL); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("Open with..."), + act = EVRY_ACTION_NEW("Open with...", EVRY_TYPE_FILE, EVRY_TYPE_APP, "everything-launch", _exec_file_action, NULL); _act_open_with = EVRY_ITEM(act); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("Open Terminal here"), + act = EVRY_ACTION_NEW("Open Terminal here", EVRY_TYPE_FILE, 0, "system-run", _open_term_action, NULL); _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(N_("Run Executable"), + act = EVRY_ACTION_NEW("Run Executable", EVRY_TYPE_FILE, 0, "system-run", _run_executable, diff --git a/src/modules/everything/evry_plug_clipboard.c b/src/modules/everything/evry_plug_clipboard.c index f52eb4729..6b91d8085 100644 --- a/src/modules/everything/evry_plug_clipboard.c +++ b/src/modules/everything/evry_plug_clipboard.c @@ -30,7 +30,7 @@ evry_plug_clipboard_init(void) if (!win) return EINA_FALSE; //FIXME: Icon name doesn't follow FDO Spec - act = EVRY_ACTION_NEW(N_("Copy to Clipboard"), + act = EVRY_ACTION_NEW("Copy to Clipboard", EVRY_TYPE_TEXT, 0, "everything-clipboard", _action, _check_item); diff --git a/src/modules/everything/evry_plug_files.c b/src/modules/everything/evry_plug_files.c index 5a46bb46e..5f90dbc3d 100644 --- a/src/modules/everything/evry_plug_files.c +++ b/src/modules/everything/evry_plug_files.c @@ -1325,30 +1325,30 @@ _plugins_init(const Evry_API *api) if (_register) evry->action_register(act, prio++); \ _actions = eina_list_append(_actions, act); \ - ACTION_NEW(N_("Copy To ..."), EVRY_TYPE_FILE, "go-next", + ACTION_NEW("Copy To ...", EVRY_TYPE_FILE, "go-next", _file_copy_action, NULL, 1); act->it2.subtype = EVRY_TYPE_DIR; EVRY_ITEM_DATA_INT_SET(act, ACT_COPY); - ACTION_NEW(N_("Move To ..."), EVRY_TYPE_FILE, "go-next", + ACTION_NEW("Move To ...", EVRY_TYPE_FILE, "go-next", _file_copy_action, NULL, 1); act->it2.subtype = EVRY_TYPE_DIR; EVRY_ITEM_DATA_INT_SET(act, ACT_MOVE); - ACTION_NEW(N_("Move to Trash"), 0, "user-trash", + ACTION_NEW("Move to Trash", 0, "user-trash", _file_trash_action, NULL, 1); EVRY_ITEM_DATA_INT_SET(act, ACT_TRASH); - ACTION_NEW(N_("Open Folder (EFM)"), 0, "folder-open", + ACTION_NEW("Open Folder (EFM)", 0, "folder-open", _open_folder_action, _open_folder_check, 1); act->remember_context = EINA_TRUE; - ACTION_NEW(N_("Sort by Date"), 0, "go-up", + ACTION_NEW("Sort by Date", 0, "go-up", _file_sort_action, NULL, 0); EVRY_ITEM_DATA_INT_SET(act, ACT_SORT_DATE); act_sort_date = act; - ACTION_NEW(N_("Sort by Name"), 0, "go-up", + ACTION_NEW("Sort by Name", 0, "go-up", _file_sort_action, NULL, 0); EVRY_ITEM_DATA_INT_SET(act, ACT_SORT_NAME); act_sort_name = act; diff --git a/src/modules/everything/evry_plug_settings.c b/src/modules/everything/evry_plug_settings.c index fa91ca343..789ff426d 100644 --- a/src/modules/everything/evry_plug_settings.c +++ b/src/modules/everything/evry_plug_settings.c @@ -187,11 +187,9 @@ _plugins_init(const Evry_API *_api) p->browse = &_browse; evry->plugin_register(p, EVRY_PLUGIN_SUBJECT, 10); - act = EVRY_ACTION_NEW(N_("Show Dialog"), E_SETTINGS, 0, + act = EVRY_ACTION_NEW("Show Dialog", E_SETTINGS, 0, "preferences-advanced", _action, _action_check); - /* p->actions = eina_list_append(p->actions, act); */ - evry->action_register(act, 0); return EINA_TRUE; diff --git a/src/modules/everything/evry_plug_windows.c b/src/modules/everything/evry_plug_windows.c index 7ea088ef1..882f91f32 100644 --- a/src/modules/everything/evry_plug_windows.c +++ b/src/modules/everything/evry_plug_windows.c @@ -416,7 +416,7 @@ _plugins_init(const Evry_API *_api) _plug->transient = EINA_TRUE; evry->plugin_register(_plug, EVRY_PLUGIN_SUBJECT, 2); - act = EVRY_ACTION_NEW(_("Switch to Window"), + act = EVRY_ACTION_NEW("Switch to Window", EVRY_TYPE_BORDER, 0, "go-next", _act_border, _check_border); EVRY_ITEM_DATA_INT_SET(act, BORDER_SHOW); @@ -424,28 +424,28 @@ _plugins_init(const Evry_API *_api) _actions = eina_list_append(_actions, act); - act = EVRY_ACTION_NEW(_("Iconify"), + act = EVRY_ACTION_NEW("Iconify", EVRY_TYPE_BORDER, 0, "go-down", _act_border, _check_border); EVRY_ITEM_DATA_INT_SET(act, BORDER_HIDE); _actions = eina_list_append(_actions, act); evry->action_register(act, 2); - act = EVRY_ACTION_NEW(_("Toggle Fullscreen"), + act = EVRY_ACTION_NEW("Toggle Fullscreen", EVRY_TYPE_BORDER, 0, "view-fullscreen", _act_border, _check_border); EVRY_ITEM_DATA_INT_SET(act, BORDER_FULLSCREEN); _actions = eina_list_append(_actions, act); evry->action_register(act, 4); - act = EVRY_ACTION_NEW(_("Close"), + act = EVRY_ACTION_NEW("Close", EVRY_TYPE_BORDER, 0, "list-remove", _act_border, _check_border); EVRY_ITEM_DATA_INT_SET(act, BORDER_CLOSE); _actions = eina_list_append(_actions, act); evry->action_register(act, 3); - act = EVRY_ACTION_NEW(_("Send to Desktop"), + act = EVRY_ACTION_NEW("Send to Desktop", EVRY_TYPE_BORDER, 0, "go-previous", _act_border, _check_border); EVRY_ITEM_DATA_INT_SET(act, BORDER_TODESK);