diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-03-22 23:26:43 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-03-22 23:26:43 +0000 |
| commit | 5bf68f762b8fc87cf5583b645b948b4fe55f179f (patch) | |
| tree | 9fd2db21c6fe08bc9433574dc429744f2966a79b /openbox/plugin.c | |
| parent | 4cc0d9b72d4bb084e6736c60319fd8e2ab92ef6a (diff) | |
make the openbox engine use the new config shit instead of the themerc shit.
order te startup so that plugins can set up their config shit before parsing the config, then the config is parsed, engine is loaded, and finally the plugins are officially started.
Diffstat (limited to 'openbox/plugin.c')
| -rw-r--r-- | openbox/plugin.c | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/openbox/plugin.c b/openbox/plugin.c index a8556fc7..e0067f22 100644 --- a/openbox/plugin.c +++ b/openbox/plugin.c @@ -94,9 +94,9 @@ gboolean plugin_open(char *name) g_warning("failed to load plugin '%s'", name); return FALSE; } + /* XXX p->plugin_set_config(); */ g_datalist_set_data_full(&plugins, name, p, (GDestroyNotify) plugin_free); - p->startup(); return TRUE; } @@ -104,3 +104,49 @@ void plugin_close(char *name) { g_datalist_remove_data(&plugins, name); } + +static void foreach_start(GQuark key, Plugin *p, gpointer *foo) +{ + p->startup(); +} + +void plugin_startall() +{ + g_datalist_foreach(&plugins, (GDataForeachFunc)foreach_start, NULL); +} + +void plugin_loadall() +{ + GIOChannel *io; + GError *err; + char *path, *name; + + path = g_build_filename(g_get_home_dir(), ".openbox", "pluginrc", NULL); + err = NULL; + io = g_io_channel_new_file(path, "r", &err); + g_free(path); + + if (io == NULL) { + path = g_build_filename(RCDIR, "pluginrc", NULL); + err = NULL; + io = g_io_channel_new_file(path, "r", &err); + g_free(path); + } + + if (io == NULL) { + /* load the default plugins */ + plugin_open("focus"); + plugin_open("keyboard"); + plugin_open("mouse"); + plugin_open("placement"); + plugin_open("resistance"); + } else { + /* load the plugins in the rc file */ + while (g_io_channel_read_line(io, &name, NULL, NULL, &err) == + G_IO_STATUS_NORMAL) { + plugin_open(name); + g_free(name); + } + g_io_channel_unref(io); + } +} |
