diff options
| author | Scott Moynes <smoynes@nexus.carleton.ca> | 2003-07-23 02:01:56 +0000 |
|---|---|---|
| committer | Scott Moynes <smoynes@nexus.carleton.ca> | 2003-07-23 02:01:56 +0000 |
| commit | 68c910b194dc9e2756820b86f8cfed38daae27ee (patch) | |
| tree | 1d4b6d36d63a493484f2c099e7886fb87ce88104 /plugins/menu/include_menu.c | |
| parent | 0e69ae2b96fb4dd7435ebe15645d1384d11a3ef7 (diff) | |
Added include_menu.c as an example of how one could write a plugin.
Diffstat (limited to 'plugins/menu/include_menu.c')
| -rw-r--r-- | plugins/menu/include_menu.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/plugins/menu/include_menu.c b/plugins/menu/include_menu.c new file mode 100644 index 00000000..b4f38322 --- /dev/null +++ b/plugins/menu/include_menu.c @@ -0,0 +1,64 @@ +#include <glib.h> +#include <stdlib.h> +#include <unistd.h> +#include <errno.h> +#include <string.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> +#include <sys/stat.h> + +#include "kernel/menu.h" +#include "kernel/timer.h" +#include "kernel/action.h" +#include "kernel/event.h" + +static char *PLUGIN_NAME = "include_menu"; + +void plugin_setup_config() { } +void plugin_startup() +{ } +void plugin_shutdown() { } + +void include_menu_clean_up(ObMenu *m) { } + +void *plugin_create(PluginMenuCreateData *data) +{ + char *id; + char *label; + char *filename; + ObMenu *m; + + parse_attr_string("id", data->node, &id); + parse_attr_string("label", data->node, &label); + + m = menu_new( (label != NULL ? label : ""), + (id != NULL ? id : PLUGIN_NAME), + data->parent); + + m->plugin = PLUGIN_NAME; + + parse_attr_string("filename", data->node, &filename); + + xmlDocPtr doc = xmlParseFile(filename); + if (doc) { + xmlNodePtr node = xmlDocGetRootElement(doc); + if (node) { + parse_menu_full(doc, node, m, FALSE); + } + xmlFreeDoc(doc); + } + + if (data->parent) + menu_add_entry(data->parent, menu_entry_new_submenu( + (label != NULL ? label : ""), + m)); + + return (void *)m; +} + +void plugin_destroy (void *m) +{ + include_menu_clean_up(m); +} |
