]> Dogcows Code - chaz/openbox/blob - plugins/menu/include_menu.c
Added include_menu.c as an example of how one could write a plugin.
[chaz/openbox] / 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 }
This page took 0.036984 seconds and 4 git commands to generate.