diff options
author | Not Zed <NotZed@Ximian.com> | 2004-10-07 17:37:33 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2004-10-07 17:37:33 +0800 |
commit | 714fcc165ac9d611625f80015fc8eb7912de8eaa (patch) | |
tree | a01d54be78129a4c7905710745f5f07ebe349afa /e-util/e-plugin.c | |
parent | b0e927b258bc1a05fc5df822dbfb55b3f5679d31 (diff) | |
download | gsoc2013-evolution-714fcc165ac9d611625f80015fc8eb7912de8eaa.tar.gz gsoc2013-evolution-714fcc165ac9d611625f80015fc8eb7912de8eaa.tar.zst gsoc2013-evolution-714fcc165ac9d611625f80015fc8eb7912de8eaa.zip |
noop if we're disabled, and do some lifecycle stuff now, call
2004-10-07 Not Zed <NotZed@Ximian.com>
* e-plugin.c (epl_invoke): noop if we're disabled, and do some
lifecycle stuff now, call e_plugin_lib_enable on the module if it
exists.
svn path=/trunk/; revision=27494
Diffstat (limited to 'e-util/e-plugin.c')
-rw-r--r-- | e-util/e-plugin.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/e-util/e-plugin.c b/e-util/e-plugin.c index d64360c382..08fc304699 100644 --- a/e-util/e-plugin.c +++ b/e-util/e-plugin.c @@ -624,6 +624,7 @@ e_plugin_xml_content_domain(xmlNodePtr node, const char *domain) /* ********************************************************************** */ static void *epl_parent_class; +/* this looks weird, but it saves a lot of typing */ #define epl ((EPluginLib *)ep) /* TODO: @@ -640,20 +641,37 @@ static void *epl_parent_class; static void * epl_invoke(EPlugin *ep, const char *name, void *data) { - void *(*cb)(EPlugin *ep, void *data); + EPluginLibFunc cb; - if (epl->module == NULL - && (epl->module = g_module_open(epl->location, 0)) == NULL) { - g_warning("can't load plugin '%s'", g_module_error()); + if (!ep->enabled) { + g_warning("trying to invoke '%s' on disabled plugin '%s'", name, ep->id); return NULL; } + if (epl->module == NULL) { + EPluginLibEnableFunc enable; + + if ((epl->module = g_module_open(epl->location, 0)) == NULL) { + g_warning("can't load plugin '%s'", g_module_error()); + return NULL; + } + + if (g_module_symbol(epl->module, "e_plugin_lib_enable", (void *)&enable)) { + if (enable(epl, TRUE) != 0) { + ep->enabled = FALSE; + g_module_close(epl->module); + epl->module = NULL; + return NULL; + } + } + } + if (!g_module_symbol(epl->module, name, (void *)&cb)) { g_warning("Cannot resolve symbol '%s' in plugin '%s' (not exported?)", name, epl->location); return NULL; } - return cb(ep, data); + return cb(epl, data); } static int |