]> git.pld-linux.org Git - packages/fbpanel.git/blob - fbpanel-include_menu.patch
- sooooo sexy 3.9 and small post fixes (including patch)
[packages/fbpanel.git] / fbpanel-include_menu.patch
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.051723 seconds and 3 git commands to generate.