]> git.pld-linux.org Git - packages/fbpanel.git/blame - fbpanel-include_menu.patch
- sooooo sexy 3.9 and small post fixes (including patch)
[packages/fbpanel.git] / fbpanel-include_menu.patch
CommitLineData
35ea0a63 1--- menu.c.orig 2004-04-22 00:37:31.000000000 +0200
2+++ menu.c 2004-05-13 18:33:08.000000000 +0200
3@@ -55,6 +55,43 @@
4 RET();
5 }
6
7+static FILE *
8+read_include(FILE *fp)
9+{
10+ FILE *fi;
11+ line s;
12+ gchar *name;
13+
14+ ENTER;
15+ s.len = 256;
16+ name = 0;
17+ while (get_line(fp, &s) != LINE_BLOCK_END) {
18+ if (s.type == LINE_VAR) {
19+ if (!g_ascii_strcasecmp(s.t[0], "name"))
20+ name = expand_tilda(s.t[1]);
21+ else {
22+ ERR( "menu/include: unknown var %s\n", s.t[0]);
23+ goto error;
24+ }
25+ }
26+ }
27+
28+ if ((fi = fopen(name, "r"))) {
29+ ERR("Including %s\n", name);
30+ g_free(name);
31+ }
32+ else {
33+ ERR("Can't include %s\n", name);
34+ goto error;
35+ }
36+
37+ RET(fi);
38+
39+ error:
40+ g_free(name);
41+ RET(NULL);
42+}
43+
44 static GtkWidget *
45 read_item(plugin *p)
46 {
47@@ -126,6 +163,8 @@
48 GtkWidget *mi, *menu;
49 gchar *name, *fname;
50 menup *m = (menup *)p->priv;
51+ FILE *fbackup;
52+ int isinclude;
53
54 ENTER;
55 s.len = 256;
56@@ -135,15 +174,31 @@
57 //gtk_rc_parse_string(menu_rc);
58
59 name = fname = 0;
60+ isinclude = 0;
61+ fbackup = 0;
62 while (get_line(p->fp, &s) != LINE_BLOCK_END) {
63 if (s.type == LINE_BLOCK_START) {
64 mi = NULL;
65 if (!g_ascii_strcasecmp(s.t[0], "item")) {
66 mi = read_item(p);
67 } else if (!g_ascii_strcasecmp(s.t[0], "separator")) {
68- mi= read_separator(p);
69+ mi = read_separator(p);
70 } else if (!g_ascii_strcasecmp(s.t[0], "menu")) {
71- mi= read_submenu(p, level+1);
72+ mi = read_submenu(p, level+1);
73+ } else if (!g_ascii_strcasecmp(s.t[0], "include")) {
74+ if (isinclude)
75+ {
76+ ERR("menu: illegal include in this context\n");
77+ goto error;
78+ }
79+ fbackup = p->fp;
80+ if ((p->fp = read_include(p->fp))) {
81+ isinclude = 1;
82+ continue;
83+ } else {
84+ p->fp = fbackup;
85+ goto error;
86+ }
87 } else {
88 ERR("menu: unknown block %s\n", s.t[0]);
89 goto error;
90@@ -158,12 +213,16 @@
91 fname = expand_tilda(s.t[1]);
92 else if (!g_ascii_strcasecmp(s.t[0], "name"))
93 name = g_strdup(s.t[1]);
94- else {
95+ else {
96 ERR("menu: unknown var %s\n", s.t[0]);
97 goto error;
98 }
99+ } else if (s.type == LINE_NONE && isinclude) {
100+ isinclude = 0;
101+ fclose(p->fp);
102+ p->fp = fbackup;
103 } else {
104- ERR( "menu: illegal in this context %s\n", s.str);
105+ ERR("menu: illegal in this context %s\n", s.str);
106 goto error;
107 }
108 }
This page took 0.07385 seconds and 4 git commands to generate.