]> icculus.org git repositories - dana/openbox.git/blob - plugins/menu/include_menu.c
Added include_menu.c as an example of how one could write a plugin.
[dana/openbox.git] / plugins / menu / include_menu.c
1 #include <glib.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <errno.h>
5 #include <string.h>
6 #include <stdio.h>
7 #include <sys/types.h>
8 #include <sys/wait.h>
9 #include <unistd.h>
10 #include <sys/stat.h>
11
12 #include "kernel/menu.h"
13 #include "kernel/timer.h"
14 #include "kernel/action.h"
15 #include "kernel/event.h"
16
17 static char *PLUGIN_NAME = "include_menu";
18
19 void plugin_setup_config() { }
20 void plugin_startup()
21 { }
22 void plugin_shutdown() { }
23
24 void include_menu_clean_up(ObMenu *m) { }
25
26 void *plugin_create(PluginMenuCreateData *data)
27 {
28     char *id;
29     char *label;
30     char *filename;
31     ObMenu *m;
32     
33     parse_attr_string("id", data->node, &id);
34     parse_attr_string("label", data->node, &label);
35     
36     m = menu_new( (label != NULL ? label : ""),
37                   (id != NULL ? id : PLUGIN_NAME),
38                   data->parent);
39
40     m->plugin = PLUGIN_NAME;
41
42     parse_attr_string("filename", data->node, &filename);
43
44     xmlDocPtr doc = xmlParseFile(filename);
45     if (doc) {
46         xmlNodePtr node = xmlDocGetRootElement(doc);
47         if (node) {
48             parse_menu_full(doc, node, m, FALSE);
49         }
50         xmlFreeDoc(doc);
51     }
52
53     if (data->parent)
54         menu_add_entry(data->parent, menu_entry_new_submenu(
55                            (label != NULL ? label : ""),
56                            m));
57
58     return (void *)m;
59 }
60
61 void plugin_destroy (void *m)
62 {
63     include_menu_clean_up(m);
64 }