load menu plugins automatically from whats in the menu file menu fixups move enabled into the 'normal menu item' specific data stuff
Dana Jansens danakj@orodu.net
10 files changed,
100 insertions(+),
67 deletions(-)
M
openbox/plugin.c
→
openbox/plugin.c
@@ -6,14 +6,16 @@ #include <gmodule.h>
typedef struct { GModule *module; - char *name; + gchar *name; + + gboolean started; PluginSetupConfig config; PluginStartup startup; PluginShutdown shutdown; } Plugin; -static gpointer load_sym(GModule *module, char *name, char *symbol, +static gpointer load_sym(GModule *module, gchar *name, gchar *symbol, gboolean allow_fail) { gpointer var;@@ -26,12 +28,13 @@ }
return var; } -static Plugin *plugin_new(char *name) +static Plugin *plugin_new(gchar *name) { Plugin *p; - char *path; + gchar *path; p = g_new(Plugin, 1); + p->started = FALSE; path = g_build_filename(g_get_home_dir(), ".openbox", "plugins", name, NULL);@@ -88,15 +91,12 @@ {
g_datalist_clear(&plugins); } -gboolean plugin_open_full(char *name, gboolean reopen, ObParseInst *i) +gboolean plugin_open(gchar *name, ObParseInst *i) { Plugin *p; - if (g_datalist_get_data(&plugins, name) != NULL) { - if (!reopen) - g_warning("plugin '%s' already loaded, can't load again", name); + if (g_datalist_get_data(&plugins, name) != NULL) return TRUE; - } p = plugin_new(name); if (p == NULL) {@@ -109,22 +109,12 @@ g_datalist_set_data_full(&plugins, name, p, (GDestroyNotify) plugin_free);
return TRUE; } -gboolean plugin_open(char *name, ObParseInst *i) { - return plugin_open_full(name, FALSE, i); -} - -gboolean plugin_open_reopen(char *name, ObParseInst *i) { - return plugin_open_full(name, TRUE, i); -} - -void plugin_close(char *name) -{ - g_datalist_remove_data(&plugins, name); -} - static void foreach_start(GQuark key, Plugin *p, gpointer *foo) { - p->startup(); + if (!p->started) { + p->startup(); + p->started = TRUE; + } } void plugin_startall()@@ -132,11 +122,25 @@ {
g_datalist_foreach(&plugins, (GDataForeachFunc)foreach_start, NULL); } +void plugin_start(gchar *name) +{ + Plugin *p; + + if (!(p = g_datalist_get_data(&plugins, name))) { + g_warning("Tried to start plugin '%s' but it is not loaded", name); + return; + } + if (!p->started) { + p->startup(); + p->started = TRUE; + } +} + void plugin_loadall(ObParseInst *i) { GIOChannel *io; GError *err; - char *path, *name; + gchar *path, *name; path = g_build_filename(g_get_home_dir(), ".openbox", "pluginrc", NULL); err = NULL;@@ -153,10 +157,6 @@
if (io == NULL) { /* load the default plugins */ 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) ==
M
openbox/plugin.h
→
openbox/plugin.h
@@ -10,9 +10,8 @@ void plugin_loadall(struct _ObParseInst *i);
void plugin_startall(); /* default plugin */ -gboolean plugin_open(char *name, struct _ObParseInst *i); /* load a plugin, but don't warn about reopens. for menus */ -gboolean plugin_open_reopen(char *name, struct _ObParseInst *i); -void plugin_close(char *name); +gboolean plugin_open(gchar *name, struct _ObParseInst *i); +void plugin_start(gchar *name); #endif
M
openbox/screen.c
→
openbox/screen.c
@@ -179,8 +179,6 @@ return FALSE;
} - ob_debug("Managing screen %d\n", ob_screen); - set_root_cursor(); /* set the OPENBOX_PID hint */
M
openbox/session.c
→
openbox/session.c
@@ -194,8 +194,6 @@
g_free(val_uid.value); save_commands(); - - ob_debug("Connected to session manager with id %s\n", ob_sm_id); } }
M
parser/parse.c
→
parser/parse.c
@@ -74,8 +74,6 @@
gboolean parse_load(const char *path, const char *rootname, xmlDocPtr *doc, xmlNodePtr *root) { - xmlLineNumbersDefault(1); - if ((*doc = xmlParseFile(path))) { *root = xmlDocGetRootElement(*doc); if (!*root) {@@ -99,8 +97,6 @@
gboolean parse_load_mem(gpointer data, guint len, const char *rootname, xmlDocPtr *doc, xmlNodePtr *root) { - xmlLineNumbersDefault(1); - if ((*doc = xmlParseMemory(data, len))) { *root = xmlDocGetRootElement(*doc); if (!*root) {