+++ /dev/null
---- menu.c.orig 2004-04-22 00:37:31.000000000 +0200
-+++ menu.c 2004-05-13 18:33:08.000000000 +0200
-@@ -55,6 +55,43 @@
- RET();
- }
-
-+static FILE *
-+read_include(FILE *fp)
-+{
-+ FILE *fi;
-+ line s;
-+ gchar *name;
-+
-+ ENTER;
-+ s.len = 256;
-+ name = 0;
-+ while (get_line(fp, &s) != LINE_BLOCK_END) {
-+ if (s.type == LINE_VAR) {
-+ if (!g_ascii_strcasecmp(s.t[0], "name"))
-+ name = expand_tilda(s.t[1]);
-+ else {
-+ ERR( "menu/include: unknown var %s\n", s.t[0]);
-+ goto error;
-+ }
-+ }
-+ }
-+
-+ if ((fi = fopen(name, "r"))) {
-+ ERR("Including %s\n", name);
-+ g_free(name);
-+ }
-+ else {
-+ ERR("Can't include %s\n", name);
-+ goto error;
-+ }
-+
-+ RET(fi);
-+
-+ error:
-+ g_free(name);
-+ RET(NULL);
-+}
-+
- static GtkWidget *
- read_item(plugin *p)
- {
-@@ -126,6 +163,8 @@
- GtkWidget *mi, *menu;
- gchar *name, *fname;
- menup *m = (menup *)p->priv;
-+ FILE *fbackup;
-+ int isinclude;
-
- ENTER;
- s.len = 256;
-@@ -135,15 +174,31 @@
- //gtk_rc_parse_string(menu_rc);
-
- name = fname = 0;
-+ isinclude = 0;
-+ fbackup = 0;
- while (get_line(p->fp, &s) != LINE_BLOCK_END) {
- if (s.type == LINE_BLOCK_START) {
- mi = NULL;
- if (!g_ascii_strcasecmp(s.t[0], "item")) {
- mi = read_item(p);
- } else if (!g_ascii_strcasecmp(s.t[0], "separator")) {
-- mi= read_separator(p);
-+ mi = read_separator(p);
- } else if (!g_ascii_strcasecmp(s.t[0], "menu")) {
-- mi= read_submenu(p, level+1);
-+ mi = read_submenu(p, level+1);
-+ } else if (!g_ascii_strcasecmp(s.t[0], "include")) {
-+ if (isinclude)
-+ {
-+ ERR("menu: illegal include in this context\n");
-+ goto error;
-+ }
-+ fbackup = p->fp;
-+ if ((p->fp = read_include(p->fp))) {
-+ isinclude = 1;
-+ continue;
-+ } else {
-+ p->fp = fbackup;
-+ goto error;
-+ }
- } else {
- ERR("menu: unknown block %s\n", s.t[0]);
- goto error;
-@@ -158,12 +213,16 @@
- fname = expand_tilda(s.t[1]);
- else if (!g_ascii_strcasecmp(s.t[0], "name"))
- name = g_strdup(s.t[1]);
-- else {
-+ else {
- ERR("menu: unknown var %s\n", s.t[0]);
- goto error;
- }
-+ } else if (s.type == LINE_NONE && isinclude) {
-+ isinclude = 0;
-+ fclose(p->fp);
-+ p->fp = fbackup;
- } else {
-- ERR( "menu: illegal in this context %s\n", s.str);
-+ ERR("menu: illegal in this context %s\n", s.str);
- goto error;
- }
- }