X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fplugin.c;h=b8d9be4beb4cb9f983fefd3e8af346e840b2c592;hb=615cbd96075905d75533f9b615c4ee6a75f4f9a4;hp=a5055de9a1088a27dd2a227219b277d605d6000f;hpb=a8a4a2cca30602b66b7a7f68bb9f3fffd34e92c9;p=chaz%2Fopenbox diff --git a/openbox/plugin.c b/openbox/plugin.c index a5055de9..b8d9be4b 100644 --- a/openbox/plugin.c +++ b/openbox/plugin.c @@ -1,12 +1,9 @@ +#include "plugins/interface.h" +#include "parser/parse.h" + #include #include -typedef void (*PluginSetupConfig)(); -typedef void (*PluginStartup)(); -typedef void (*PluginShutdown)(); -typedef void *(*PluginCreate)(/* TODO */); -typedef void (*PluginDestroy)(void *); - typedef struct { GModule *module; char *name; @@ -14,8 +11,6 @@ typedef struct { PluginSetupConfig config; PluginStartup startup; PluginShutdown shutdown; - PluginCreate create; - PluginDestroy destroy; } Plugin; static gpointer load_sym(GModule *module, char *name, char *symbol, @@ -61,9 +56,6 @@ static Plugin *plugin_new(char *name) FALSE); p->shutdown = (PluginShutdown)load_sym(p->module, name, "plugin_shutdown", FALSE); - p->create = (PluginCreate)load_sym(p->module, name, "plugin_create", TRUE); - p->destroy = (PluginDestroy)load_sym(p->module, name, "plugin_destroy", - TRUE); if (p->config == NULL || p->startup == NULL || p->shutdown == NULL) { g_module_close(p->module); @@ -96,7 +88,7 @@ void plugin_shutdown() g_datalist_clear(&plugins); } -gboolean plugin_open_full(char *name, gboolean reopen) +gboolean plugin_open_full(char *name, gboolean reopen, ObParseInst *i) { Plugin *p; @@ -111,18 +103,18 @@ gboolean plugin_open_full(char *name, gboolean reopen) g_warning("failed to load plugin '%s'", name); return FALSE; } - p->config(); + p->config(i); g_datalist_set_data_full(&plugins, name, p, (GDestroyNotify) plugin_free); return TRUE; } -gboolean plugin_open(char *name) { - return plugin_open_full(name, FALSE); +gboolean plugin_open(char *name, ObParseInst *i) { + return plugin_open_full(name, FALSE, i); } -gboolean plugin_open_reopen(char *name) { - return plugin_open_full(name, TRUE); +gboolean plugin_open_reopen(char *name, ObParseInst *i) { + return plugin_open_full(name, TRUE, i); } void plugin_close(char *name) @@ -140,7 +132,7 @@ void plugin_startall() g_datalist_foreach(&plugins, (GDataForeachFunc)foreach_start, NULL); } -void plugin_loadall() +void plugin_loadall(ObParseInst *i) { GIOChannel *io; GError *err; @@ -160,57 +152,20 @@ void plugin_loadall() if (io == NULL) { /* load the default plugins */ - plugin_open("keyboard"); - plugin_open("mouse"); - plugin_open("placement"); - plugin_open("resistance"); + plugin_open("placement", i); + + /* XXX rm me when the parser loads me magically */ + plugin_open("client_menu", i); + plugin_open("client_list_menu", i); } else { /* load the plugins in the rc file */ while (g_io_channel_read_line(io, &name, NULL, NULL, &err) == G_IO_STATUS_NORMAL) { g_strstrip(name); if (name[0] != '\0' && name[0] != '#') - plugin_open(name); + plugin_open(name, i); g_free(name); } g_io_channel_unref(io); } } - -void *plugin_create(char *name /* TODO */) -{ - Plugin *p = (Plugin *)g_datalist_get_data(&plugins, name); - - if (p == NULL) { - g_warning("Unable to find plugin for create: %s", name); - return NULL; - } - - if (p->create == NULL || p->destroy == NULL) { - g_critical("Unsupported create/destroy: %s", name); - return NULL; - } - - return p->create(); -} - -void plugin_destroy(char *name, void *data) -{ - Plugin *p = (Plugin *)g_datalist_get_data(&plugins, name); - - if (p == NULL) { - g_critical("Unable to find plugin for destroy: %s", name); - /* really shouldn't happen, but attempt to free something anyway? */ - g_free(data); - return; - } - - if (p->destroy == NULL || p->create == NULL) { - g_critical("Unsupported create/destroy: %s", name); - /* really, really shouldn't happen, but attempt to free anyway? */ - g_free(data); - return; - } - - p->destroy(data); -}