Finally re-write the config-loading parts of lxpanel.
authorHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Sun, 29 Oct 2006 20:27:39 +0000 (20:27 +0000)
committerHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Sun, 29 Oct 2006 20:27:39 +0000 (20:27 +0000)
From this revision, the plugins of lxpanel are no more compatible with fbpanel.

21 files changed:
src/misc.c
src/misc.h
src/panel.c
src/plugin.c
src/plugin.h
src/plugins/cpu/cpu.c
src/plugins/dclock.c
src/plugins/deskno.c
src/plugins/deskno2.c
src/plugins/icons.c
src/plugins/image.c
src/plugins/launchbar.c
src/plugins/menu.c
src/plugins/netstatus/netstatus.c
src/plugins/pager.c
src/plugins/separator.c
src/plugins/space.c
src/plugins/taskbar.c
src/plugins/volume/volume.c
src/plugins/wincmd.c
src/systray/tray.c

index 74b06e0..736f9de 100644 (file)
@@ -132,8 +132,36 @@ num2str(pair *p, int num, gchar *defval)
     RET(defval);
 }
 
+int _gets( char* buf, int len, char **fp )
+{
+    char* p;
+    int i = 0;
+    if( !fp || !(p = *fp) || !**fp )
+    {
+        buf[0] = '\0';
+        return 0;
+    }
+
+    do
+    {
+        if( G_LIKELY( i < len ) )
+        {
+            buf[i] = *p;
+            ++i;
+        }
+        if( G_UNLIKELY(*p == '\n') )
+        {
+            ++p;
+            break;
+        }
+    }while( *(++p) );
+    buf[i] = '\0';
+    *fp = p;
+    return i;
+}
+
 extern  int
-lxpanel_get_line(FILE *fp, line *s)
+lxpanel_get_line(char**fp, line *s)
 {
     gchar *tmp, *tmp2;
 
@@ -141,14 +169,17 @@ lxpanel_get_line(FILE *fp, line *s)
     s->type = LINE_NONE;
     if (!fp)       
         RET(s->type);
-    while (fgets(s->str, s->len, fp)) {
+    while (_gets(s->str, s->len, fp)) {
+        g_debug("_gets: %s", s->str);
         g_strstrip(s->str);
      
         if (s->str[0] == '#' || s->str[0] == 0) {
+            g_debug("skip");
            continue;
         }
         DBG( ">> %s\n", s->str);
         if (!g_ascii_strcasecmp(s->str, "}")) {
+            g_debug("LINE_BLOCK_END");
             s->type = LINE_BLOCK_END;
             break;
         }
@@ -174,7 +205,7 @@ lxpanel_get_line(FILE *fp, line *s)
 }
 
 int
-get_line_as_is(FILE *fp, line *s)
+get_line_as_is(char** fp, line *s)
 {
     gchar *tmp, *tmp2;
 
@@ -184,7 +215,7 @@ get_line_as_is(FILE *fp, line *s)
         RET(s->type);
     }
     s->type = LINE_NONE;
-    while (fgets(s->str, s->len, fp)) {
+    while (_gets(s->str, s->len, fp)) {
         g_strstrip(s->str);
         if (s->str[0] == '#' || s->str[0] == 0) 
            continue;
index 0ce97ea..a5b0fff 100644 (file)
@@ -32,8 +32,8 @@ extern pair pos_pair[];
 
 int str2num(pair *p, gchar *str, int defval);
 gchar *num2str(pair *p, int num, gchar *defval);
-extern int lxpanel_get_line(FILE *fp, line *s);
-int get_line_as_is(FILE *fp, line *s);
+extern int lxpanel_get_line(char **fp, line *s);
+int get_line_as_is(char **fp, line *s);
 
 void Xclimsg(Window win, long type, long l0, long l1, long l2, long l3, long l4);
 void Xclimsgwm(Window win, Atom type, Atom arg);
index 1d42941..3344aa1 100644 (file)
@@ -465,7 +465,7 @@ panel_start_gui(panel *p)
 }
 
 static int
-panel_parse_global(panel *p, FILE *fp)
+panel_parse_global(panel *p, char **fp)
 {
     line s;
     s.len = 256;
@@ -546,20 +546,16 @@ panel_parse_global(panel *p, FILE *fp)
 }
 
 static int
-panel_parse_plugin(panel *p, FILE *fp)
+panel_parse_plugin(panel *p, char **fp)
 {
     line s;
     plugin *plug = NULL;
     gchar *type = NULL;
-    FILE *tmpfp;
     int expand , padding, border;
-    
+    char* pconfig = NULL;
+
     ENTER;
     s.len = 256;
-    if (!(tmpfp = tmpfile())) {
-        ERR( "can't open temporary file with tmpfile()\n");
-        RET(0);
-    }
     border = expand = padding = 0;
     while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
         if (s.type == LINE_NONE) {
@@ -582,6 +578,7 @@ panel_parse_plugin(panel *p, FILE *fp)
             }
         } else if (s.type == LINE_BLOCK_START) {
             if (!g_ascii_strcasecmp(s.t[0], "Config")) {
+                pconfig = *fp;
                 int pno = 1;
                 while (pno) {
                     get_line_as_is(fp, &s);
@@ -593,8 +590,7 @@ panel_parse_plugin(panel *p, FILE *fp)
                     } else if (s.type == LINE_BLOCK_END) {
                         pno--;
                     } 
-                    fprintf(tmpfp, "%s\n", s.str);
-                }              
+                }
             } else {
                 ERR( "lxpanel: unknown block %s\n", s.t[0]);
                 goto error;
@@ -604,20 +600,18 @@ panel_parse_plugin(panel *p, FILE *fp)
             goto error;
         }
     }
-    
+
     if (!type || !(plug = plugin_load(type))) {
         ERR( "lxpanel: can't load %s plugin\n", type);
         goto error;
     }
+
     plug->panel = p;
-    plug->fp = tmpfp;
     plug->expand = expand;
     plug->padding = padding;
     plug->border = border;
-    fprintf(tmpfp, "}\n");
-    fseek(tmpfp, 0, SEEK_SET);
     DBG("starting\n");
-    if (!plugin_start(plug)) {
+    if (!plugin_start(plug, pconfig ? &pconfig : NULL)) {
         ERR( "lxpanel: can't start plugin %s\n", type);
         goto error;
     }
@@ -626,23 +620,21 @@ panel_parse_plugin(panel *p, FILE *fp)
 
     g_free( type );
     RET(1);
-    
+
  error:
-    fclose(tmpfp);
     g_free(type);
     if (plug)
           plugin_put(plug);
     RET(0);
-    
 }
 
 
 int
-panel_start(panel *p, FILE *fp)
+panel_start( panel *p, char **fp )
 {
     line s;
     long pos;
-    
+
     /* parse global section */
     ENTER;
     s.len = 256;
@@ -668,15 +660,6 @@ panel_start(panel *p, FILE *fp)
     if (!panel_parse_global(p, fp))
         RET(0);
 
-    if (!(pconf = tmpfile())) {
-        ERR("can't open temporary file\n");
-        RET(0);
-    }
-    pos = ftell(fp);
-    while (get_line_as_is(fp, &s) != LINE_NONE) 
-        fprintf(pconf, "%s\n", s.str);
-    fseek(fp, pos, SEEK_SET);
-
     while (lxpanel_get_line(fp, &s) != LINE_NONE) {
         if ((s.type  != LINE_BLOCK_START) || g_ascii_strcasecmp(s.t[0], "Plugin")) {
             ERR( "lxpanel: expecting Plugin section\n");
@@ -745,31 +728,29 @@ usage()
     g_print(_("\nVisit http://lxpanel.sourceforge.net/ for detailed documentation,\n\n"));
 }
 
-FILE *
-open_profile(gchar *profile)
+char*
+load_profile(gchar *profile)
 {
     gchar *fname;
-    FILE *fp;
+    char* ret;
 
     ENTER;
     LOG(LOG_INFO, "loading %s profile\n", profile);
     fname = g_strdup_printf("%s/.lxpanel/%s", getenv("HOME"), profile);
-    fp = fopen(fname, "r");
-    LOG(LOG_INFO, "   %s %s\n", fname, fp ? "ok" : "no");
-    if (fp) {
+    g_file_get_contents( fname, &ret, NULL, NULL );
+    if (ret) {
         cfgfile = fname;
-        RET(fp);
+        RET(ret);
     }
     //ERR("Can't load %s\n", fname);
     g_free(fname);
-    
+
     /* check private configuration directory */
     fname = g_strdup_printf(PACKAGE_DATA_DIR "/lxpanel/%s", profile);
-    fp = fopen(fname, "r");
-    LOG(LOG_INFO, "   %s %s\n", fname, fp ? "ok" : "no");
-    if (fp) {
+    g_file_get_contents( fname, &ret, NULL, NULL );
+    if (ret) {
         cfgfile = fname;
-        RET(fp);
+        RET(ret);
     }
     //ERR("Can't load %s\n", fname);
     g_free(fname);
@@ -796,7 +777,7 @@ main(int argc, char *argv[], char *env[])
     int i;
     int quit = 0;
     void configure();
-    FILE *pfp; /* current profile FP */
+    char *fp, *pfp; /* point to current position of profile data in memory */
 
     ENTER;
     //printf("sizeof(gulong)=%d\n", sizeof(gulong));
@@ -853,20 +834,20 @@ main(int argc, char *argv[], char *env[])
 
     /* Enter main loop */
     {
-        if (!(pfp = open_profile(cprofile)))
+        if (!(fp = pfp = load_profile(cprofile)))
             exit(1);
         p = g_new0(panel, 1);
         g_return_val_if_fail (p != NULL, 1);
-        if (!panel_start(p, pfp)) {
+        if (!panel_start(p, &pfp)) {
             ERR( "lxpanel: can't start panel\n");
             exit(1);
         }
-        fclose(pfp);
-        g_free( cfgfile ); /* FIXME: is it safe to free the string here? */
+        g_free( fp );
         if (config)
             configure();
         gtk_main();
         panel_stop(p);
+        g_free( cfgfile );
         g_free(p);
     }
 
index dd0f906..cec9119 100644 (file)
@@ -196,7 +196,7 @@ void plugin_put(plugin *this)
 }
 
 int
-plugin_start(plugin *this)
+plugin_start(plugin *this, char** fp)
 {
     ENTER;
 
@@ -206,20 +206,13 @@ plugin_start(plugin *this)
         gtk_widget_set_name(this->pwid, this->class->type);
         gtk_box_pack_start(GTK_BOX(this->panel->box), this->pwid, this->expand, TRUE,
               this->padding);
-        DBG("here\n");
         gtk_container_set_border_width(GTK_CONTAINER(this->pwid), this->border);
-        DBG("here this->panel->transparent = %p\n", this->panel->transparent);
         if (this->panel->transparent) {
-            DBG("here g\n");
             gtk_bgbox_set_background(this->pwid, BG_ROOT, this->panel->tintcolor, this->panel->alpha);
         }
-        DBG("here\n");
         gtk_widget_show(this->pwid);
-        DBG("here\n");
     }
-    DBG("here\n");
-    if (!this->class->constructor(this)) {
-        DBG("here\n");
+    if (!this->class->constructor(this, fp)) {
         if (!this->class->invisible)
             gtk_widget_destroy(this->pwid);
         RET(0);
index c845892..5aa8606 100644 (file)
@@ -24,7 +24,7 @@ typedef struct {
     char *version;
     char *description;
 
-    int (*constructor)(struct _plugin *this);
+    int (*constructor)(struct _plugin *this, char **fp);
     void (*destructor)(struct _plugin *this);
     void (*config)(struct _plugin *this, GtkWindow* parent); /* config UI */
 
@@ -33,7 +33,6 @@ typedef struct {
 typedef struct _plugin{
     plugin_class *class;
     panel        *panel;
-    FILE         *fp;
     GtkWidget    *pwid;
     int           expand;
     int           padding;
@@ -44,7 +43,7 @@ typedef struct _plugin{
 /* if plugin is external it will load its dll */
 plugin * plugin_load(char *type);
 void plugin_put(plugin *this);
-int plugin_start(plugin *this);
+int plugin_start(plugin *this, char **fp);
 void plugin_stop(plugin *this);
 
 /* FIXME: optional definitions */
index 0d09557..bc00f78 100644 (file)
@@ -150,7 +150,7 @@ expose_event(GtkWidget *widget, GdkEventExpose *event, cpu_t *c)
 }
 
 static int
-cpu_constructor(plugin *p)
+cpu_constructor(plugin *p, char **fp)
 {
     cpu_t *c;
 
index 26fd383..6db3118 100644 (file)
@@ -78,7 +78,7 @@ clock_update(gpointer data )
 
 
 static int
-dclock_constructor(plugin *p)
+dclock_constructor(plugin *p, char** fp)
 {
     line s;
     dclock *dc;
@@ -91,25 +91,28 @@ dclock_constructor(plugin *p)
 
     s.len = 256;
     dc->cfmt = dc->tfmt = dc->action = 0;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "dclock: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "ClockFmt")) 
-                dc->cfmt = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "TooltipFmt"))
-                dc->tfmt = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "Action"))
-                dc->action = g_strdup(s.t[1]);
-            else {
-                ERR( "dclock: unknown var %s\n", s.t[0]);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "dclock: illegal token %s\n", s.str);
+                goto error;
+            }
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "ClockFmt")) 
+                    dc->cfmt = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "TooltipFmt"))
+                    dc->tfmt = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "Action"))
+                    dc->action = g_strdup(s.t[1]);
+                else {
+                    ERR( "dclock: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else {
+                ERR( "dclock: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "dclock: illegal in this context %s\n", s.str);
-            goto error;
         }
     }
     if (!dc->cfmt)
index f1ebc09..dcc2f8b 100644 (file)
@@ -53,7 +53,7 @@ name_update(GtkWidget *widget, deskno *dc)
 
 
 static int
-deskno_constructor(plugin *p)
+deskno_constructor(plugin *p, char** fp)
 {
     deskno *dc;
     GtkWidget *button;
index 4c80d30..84c428d 100644 (file)
@@ -82,30 +82,30 @@ scroll (GtkWidget *widget, GdkEventScroll *event, deskno *dc)
 }
 
 static int
-deskno_constructor(plugin *p)
+deskno_constructor(plugin *p, char** fp)
 {
     deskno *dc;
     ENTER;
     dc = g_new0(deskno, 1);
     g_return_val_if_fail(dc != NULL, 0);
     p->priv = dc;
-    
+
     dc->main = gtk_button_new_with_label("w");
     gtk_button_set_relief(GTK_BUTTON(dc->main),GTK_RELIEF_NONE);
     gtk_container_set_border_width(GTK_CONTAINER(dc->main), 0);
     //gtk_button_set_alignment(GTK_BUTTON(dc->main), 0, 0.5);
     g_signal_connect(G_OBJECT(dc->main), "clicked", G_CALLBACK (clicked), (gpointer) dc);
     g_signal_connect(G_OBJECT(dc->main), "scroll-event", G_CALLBACK(scroll), (gpointer) dc);
-    
+
     update_all(dc->main, dc);
-  
+
     gtk_container_add(GTK_CONTAINER(p->pwid), dc->main);
     gtk_widget_show_all(p->pwid);
-    
+
     g_signal_connect (G_OBJECT (fbev), "current_desktop", G_CALLBACK (update_dno), (gpointer) dc);
     g_signal_connect (G_OBJECT (fbev), "desktop_names", G_CALLBACK (update_all), (gpointer) dc);
     g_signal_connect (G_OBJECT (fbev), "number_of_desktops", G_CALLBACK (update_all), (gpointer) dc);
-    
+
     RET(1);
 }
 
index c687bde..88bc28b 100644 (file)
@@ -329,7 +329,7 @@ icons_build_gui(plugin *p)
 }
 
 static int
-read_application(plugin *p)
+read_application(plugin *p, char** fp)
 {
     icons *ics = (icons *)p->priv;
     GdkPixbuf *gp = NULL;
@@ -342,25 +342,29 @@ read_application(plugin *p)
     ENTER;
     s.len = 256;
     fname = appname = classname = NULL;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "icons: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "image")) 
-                fname = expand_tilda(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "appname"))
-                appname = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "classname"))
-                classname = g_strdup(s.t[1]);
-            else {
-                ERR( "icons: unknown var %s\n", s.t[0]);
+
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "icons: illegal token %s\n", s.str);
+                goto error;
+            }
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "image")) 
+                    fname = expand_tilda(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "appname"))
+                    appname = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "classname"))
+                    classname = g_strdup(s.t[1]);
+                else {
+                    ERR( "icons: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else {
+                ERR( "icons: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "icons: illegal in this context %s\n", s.str);
-            goto error;
         }
     }
     if (!fname)
@@ -416,7 +420,7 @@ read_dicon(icons *ics, gchar *name)
 
 
 static int
-icons_constructor(plugin *p)
+icons_constructor(plugin *p, char **fp)
 {
     icons *ics;
     line s;
@@ -429,35 +433,39 @@ icons_constructor(plugin *p)
     ics->wmpixno           = 0;
     ics->task_list         = g_hash_table_new(g_int_hash, g_int_equal);
     s.len = 256;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "icons: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "DefaultIcon")) {
-                if (!read_dicon(ics, s.t[1])) {
-                    goto error;
-                }
-            } else {
-                ERR( "icons: unknown var %s\n", s.t[0]);
+
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "icons: illegal token %s\n", s.str);
                 goto error;
             }
-        } else if (s.type == LINE_BLOCK_START) {
-            if (!g_ascii_strcasecmp(s.t[0], "application")) {
-                if (!read_application(p)) {
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "DefaultIcon")) {
+                    if (!read_dicon(ics, s.t[1])) {
+                        goto error;
+                    }
+                } else {
+                    ERR( "icons: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else if (s.type == LINE_BLOCK_START) {
+                if (!g_ascii_strcasecmp(s.t[0], "application")) {
+                    if (!read_application(p, fp)) {
+                        goto error;
+                    }
+                } else {
+                    ERR( "icons: unknown var %s\n", s.t[0]);
                     goto error;
                 }
             } else {
-                ERR( "icons: unknown var %s\n", s.t[0]);
+                ERR( "icons: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "icons: illegal in this context %s\n", s.str);
-            goto error;
         }
     }
-  
+
     icons_build_gui(p);
     do_net_client_list(NULL, ics);
     RET(1);
index 207de1e..c7ec359 100644 (file)
@@ -41,7 +41,7 @@ image_destructor(plugin *p)
 
 
 static int
-image_constructor(plugin *p)
+image_constructor(plugin *p, char **fp)
 {
     gchar *tooltip, *fname;
     image *img;
@@ -64,23 +64,26 @@ image_constructor(plugin *p)
 #endif
     p->priv = img;
     tooltip = fname = 0;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "image: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "image")) 
-                fname = expand_tilda(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "tooltip"))
-                tooltip = g_strdup(s.t[1]);
-            else {
-                ERR( "image: unknown var %s\n", s.t[0]);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "image: illegal token %s\n", s.str);
+                goto error;
+            }
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "image")) 
+                    fname = expand_tilda(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "tooltip"))
+                    tooltip = g_strdup(s.t[1]);
+                else {
+                    ERR( "image: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else {
+                ERR( "image: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "image: illegal in this context %s\n", s.str);
-            goto error;
         }
     }
     img->mainw = gtk_event_box_new();
index 71a7cba..a9d77d4 100644 (file)
@@ -152,7 +152,7 @@ drag_data_received_cb (GtkWidget        *widget,
 }
 
 static int
-read_button(plugin *p)
+read_button(plugin *p, char** fp)
 {
     launchbar *lb = (launchbar *)p->priv;
     gchar *fname, *tooltip, *action, *desktop_id;
@@ -171,30 +171,33 @@ read_button(plugin *p)
     }
 
     tooltip = fname = action = desktop_id = NULL;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "launchbar: illegal token %s\n", s.str);
-            RET(0);
-        }
-        if (s.type == LINE_VAR) {
-            if( !g_ascii_strcasecmp(s.t[0], "id") )
-                desktop_id = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "image"))
-                fname = expand_tilda(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "tooltip"))
-                tooltip = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "action"))
-                action = g_strdup(s.t[1]);
-            else {
-                ERR( "launchbar: unknown var %s\n", s.t[0]);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "launchbar: illegal token %s\n", s.str);
+                RET(0);
+            }
+            if (s.type == LINE_VAR) {
+                if( !g_ascii_strcasecmp(s.t[0], "id") )
+                    desktop_id = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "image"))
+                    fname = expand_tilda(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "tooltip"))
+                    tooltip = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "action"))
+                    action = g_strdup(s.t[1]);
+                else {
+                    ERR( "launchbar: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else {
+                ERR( "launchbar: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "launchbar: illegal in this context %s\n", s.str);
-            goto error;
         }
+        DBG("action=%s\n", action);
     }
-    DBG("action=%s\n", action);
 
     if( desktop_id ) {
         gchar *desktop_file = NULL;
@@ -289,7 +292,7 @@ read_button(plugin *p)
 }
 
 static int
-launchbar_constructor(plugin *p)
+launchbar_constructor(plugin *p, char **fp)
 {
     launchbar *lb;
     line s;
@@ -330,14 +333,14 @@ launchbar_constructor(plugin *p)
     DBG("iconsize=%d\n", lb->iconsize);
     
     s.len = 256;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
+    while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
         if (s.type == LINE_NONE) {
             ERR( "launchbar: illegal token %s\n", s.str);
             goto error;
         }
         if (s.type == LINE_BLOCK_START) {
             if (!g_ascii_strcasecmp(s.t[0], "button")) {
-                if (!read_button(p)) {
+                if (!read_button(p, fp)) {
                     ERR( "launchbar: can't init button\n");
                     goto error;
                 }
index 6bc7028..5f23090 100644 (file)
@@ -196,7 +196,7 @@ make_button(plugin *p, gchar *fname, gchar *name, GtkWidget *menu)
 
 
 static GtkWidget *
-read_item(plugin *p)
+read_item(plugin *p, char** fp)
 {
     line s;
     gchar *name, *fname, *action;
@@ -208,26 +208,29 @@ read_item(plugin *p)
     s.len = 256;
     name = fname = action = NULL;
 
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "image"))
-                fname = expand_tilda(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "name"))
-                name = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "action"))
-                action = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "command")) {
-                command *tmp;
-
-                for (tmp = commands; tmp->name; tmp++) {
-                    if (!g_ascii_strcasecmp(s.t[1], tmp->name)) {
-                        cmd_entry = tmp;
-                        break;
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "image"))
+                    fname = expand_tilda(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "name"))
+                    name = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "action"))
+                    action = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "command")) {
+                    command *tmp;
+
+                    for (tmp = commands; tmp->name; tmp++) {
+                        if (!g_ascii_strcasecmp(s.t[1], tmp->name)) {
+                            cmd_entry = tmp;
+                            break;
+                        }
                     }
+                } else {
+                    ERR( "menu/item: unknown var %s\n", s.t[0]);
+                    goto error;
                 }
-            } else {
-                ERR( "menu/item: unknown var %s\n", s.t[0]);
-                goto error;
             }
         }
     }
@@ -264,30 +267,36 @@ read_item(plugin *p)
 }
 
 static GtkWidget *
-read_separator(plugin *p)
+read_separator(plugin *p, char **fp)
 {
     line s;
 
     ENTER;
     s.len = 256;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        ERR("menu: error - separator can not have paramteres\n");
-        RET(NULL);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            ERR("menu: error - separator can not have paramteres\n");
+            RET(NULL);
+        }
     }
     RET(gtk_separator_menu_item_new());
 }
 
 static void
-read_system_menu(GtkMenu* menu, plugin *p)
+read_system_menu(GtkMenu* menu, plugin *p, char** fp)
 {
    line s;
    menup *m = (menup *)p->priv;
 
    ENTER;
    s.len = 256;
-   while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-      ERR("menu: error - system can not have paramteres\n");
-      RET();
+   if( fp )
+   {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            ERR("menu: error - system can not have paramteres\n");
+            RET();
+        }
    }
    if( p->panel->system_menu ) {
       ERR("menu: error - only one system is allowed");
@@ -301,39 +310,43 @@ read_system_menu(GtkMenu* menu, plugin *p)
 }
 
 static void
-read_include(plugin *p)
+read_include(plugin *p, char **fp)
 {
     gchar *name;
     line s;
     menup *m = (menup *)p->priv;
-    FILE *fp;
-
+#if 0
+    /* FIXME: this is disabled */
     ENTER;
     s.len = 256;
     name = NULL;
-    while (lxpanel_get_line(p->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]);
-                RET();
+    if( fp )
+    {
+        while (lxpanel_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]);
+                    RET();
+                }
             }
         }
     }
     if ((fp = fopen(name, "r"))) {
         LOG(LOG_INFO, "Including %s\n", name);
-        m->files = g_slist_prepend(m->files, p->fp);
+        m->files = g_slist_prepend(m->files, fp);
         p->fp = fp;
     } else {
         ERR("Can't include %s\n", name);
     }
     if (name) g_free(name);
+#endif
     RET();
 }
 
 static GtkWidget *
-read_submenu(plugin *p, gboolean as_item)
+read_submenu(plugin *p, char** fp, gboolean as_item)
 {
     line s;
     GtkWidget *mi, *menu;
@@ -348,20 +361,20 @@ read_submenu(plugin *p, gboolean as_item)
 
     fname = 0;
     name[0] = 0;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
+    while (lxpanel_get_line(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);
+                mi = read_item(p, fp);
             } else if (!g_ascii_strcasecmp(s.t[0], "separator")) {
-                mi = read_separator(p);
+                mi = read_separator(p, fp);
             } else if (!g_ascii_strcasecmp(s.t[0], "system")) {
-                read_system_menu(GTK_MENU(menu), p); /* add system menu items */
+                read_system_menu(GTK_MENU(menu), p, fp); /* add system menu items */
                 continue;
             } else if (!g_ascii_strcasecmp(s.t[0], "menu")) {
-                mi = read_submenu(p, TRUE);
+                mi = read_submenu(p, fp, TRUE);
             } else if (!g_ascii_strcasecmp(s.t[0], "include")) {
-                read_include(p);
+                read_include(p, fp);
                 continue;
             } else {
                 ERR("menu: unknown block %s\n", s.t[0]);
@@ -384,8 +397,10 @@ read_submenu(plugin *p, gboolean as_item)
             }
         } else if (s.type == LINE_NONE) {
             if (m->files) {
-                fclose(p->fp);
-                p->fp = m->files->data;
+                /*
+                  fclose(p->fp);
+                  p->fp = m->files->data;
+                */
                 m->files = g_slist_delete_link(m->files, m->files);
             }
         }  else {
@@ -423,7 +438,7 @@ read_submenu(plugin *p, gboolean as_item)
 
 
 static int
-menu_constructor(plugin *p)
+menu_constructor(plugin *p, char **fp)
 {
     menup *m;
 
@@ -445,7 +460,7 @@ menu_constructor(plugin *p)
     gtk_container_set_border_width(GTK_CONTAINER(m->box), 0);
     gtk_container_add(GTK_CONTAINER(p->pwid), m->box);
 
-    if (!read_submenu(p, FALSE)) {
+    if (!read_submenu(p, fp, FALSE)) {
         ERR("menu: plugin init failed\n");
         goto error;
     }
index 58e22a1..936dfce 100644 (file)
@@ -65,7 +65,7 @@ static void on_button_press( GtkWidget* widget, GdkEventButton* evt, plugin* p )
 }
 
 static int
-netstatus_constructor(plugin *p)
+netstatus_constructor(plugin *p, char** fp)
 {
     netstatus *ns;
     line s;
@@ -76,26 +76,28 @@ netstatus_constructor(plugin *p)
     ns = g_new0(netstatus, 1);
     g_return_val_if_fail(ns != NULL, 0);
     p->priv = ns;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "netstatus: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "iface"))
-                ns->iface = g_strdup(s.t[1]);
-            else if (!g_ascii_strcasecmp(s.t[0], "configtool"))
-                ns->config_tool = g_strdup(s.t[1]);
-            else {
-                ERR( "netstatus: unknown var %s\n", s.t[0]);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "netstatus: illegal token %s\n", s.str);
+                goto error;
+            }
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "iface"))
+                    ns->iface = g_strdup(s.t[1]);
+                else if (!g_ascii_strcasecmp(s.t[0], "configtool"))
+                    ns->config_tool = g_strdup(s.t[1]);
+                else {
+                    ERR( "netstatus: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else {
+                ERR( "netstatus: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "netstatus: illegal in this context %s\n", s.str);
-            goto error;
         }
     }
-
     iface = netstatus_iface_new(ns->iface);
     ns->mainw = netstatus_icon_new( iface );
     gtk_widget_add_events( ns->mainw, GDK_BUTTON_PRESS_MASK );
index 1464e5f..868adba 100644 (file)
@@ -626,10 +626,10 @@ pager_rebuild_all(FbEv *ev, pager *pg)
 
 
 static int
-pager_constructor(plugin *plug)
+pager_constructor(plugin *plug, char **fp)
 {
     pager *pg;
-    
+
     ENTER;
     pg = g_new0(pager, 1);
     g_return_val_if_fail(pg != NULL, 0);
@@ -640,7 +640,7 @@ pager_constructor(plugin *plug)
     pg->box = plug->panel->my_box_new(TRUE, 1);
     gtk_container_set_border_width (GTK_CONTAINER (pg->box), 0);
     gtk_widget_show(pg->box);
-  
+
     gtk_bgbox_set_background(plug->pwid, BG_STYLE, 0, 0);
     gtk_container_set_border_width (GTK_CONTAINER (plug->pwid), 1);
     gtk_container_add(GTK_CONTAINER(plug->pwid), pg->box);
@@ -654,9 +654,9 @@ pager_constructor(plugin *plug)
     pager_rebuild_all(fbev, pg);
     //do_net_current_desktop(fbev, pg);
     //do_net_client_list_stacking(fbev, pg);
-    
+
     gdk_window_add_filter(NULL, (GdkFilterFunc)pager_event_filter, pg );
-  
+
     g_signal_connect (G_OBJECT (fbev), "current_desktop",
           G_CALLBACK (do_net_current_desktop), (gpointer) pg);
     g_signal_connect (G_OBJECT (fbev), "active_window",
index 97e8992..9f4fcb3 100644 (file)
 
 
 static int
-separator_constructor(plugin *p)
+separator_constructor(plugin *p, char **fp)
 {
     GtkWidget *sep, *eb;
     line s;
     
     ENTER;
     s.len = 256;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        ERR( "separator: illegal in this context %s\n", s.str);
-        RET(0);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            ERR( "separator: illegal in this context %s\n", s.str);
+            RET(0);
+        }
     }
     eb = gtk_event_box_new();
     gtk_container_set_border_width(GTK_CONTAINER(eb), 1);
index 6188ddb..b4eb14e 100644 (file)
@@ -34,7 +34,7 @@ space_destructor(plugin *p)
 
 
 static int
-space_constructor(plugin *p)
+space_constructor(plugin *p, char** fp)
 {
     space *sp;
     line s;
@@ -45,21 +45,24 @@ space_constructor(plugin *p)
     sp = g_new0(space, 1);
     g_return_val_if_fail(sp != NULL, 0);
     p->priv = sp;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "space: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "size")) 
-                sp->size = atoi(s.t[1]);
-            else {
-                ERR( "space: unknown var %s\n", s.t[0]);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "space: illegal token %s\n", s.str);
+                goto error;
+            }
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "size")) 
+                    sp->size = atoi(s.t[1]);
+                else {
+                    ERR( "space: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else {
+                ERR( "space: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "space: illegal in this context %s\n", s.str);
-            goto error;
         }
     }
     if (!sp->size)
index f3a87de..0ee2740 100644 (file)
@@ -1305,24 +1305,23 @@ void net_active_detect()
 }
 
 static int
-taskbar_constructor(plugin *p)
+taskbar_constructor(plugin *p, char** fp)
 {
     taskbar *tb;
     line s;
     GtkRequisition req;
-    
+
     ENTER;
     gtk_widget_set_name(p->pwid, "taskbar");
     gtk_rc_parse_string(taskbar_rc);
     get_button_spacing(&req, GTK_CONTAINER(p->pwid), "");
-   
+
     net_active_detect();
-    
+
     tb = g_new0(taskbar, 1);
     tb->plug = p;
     p->priv = tb;
-    
+
     if (p->panel->orientation == ORIENT_HORIZ) {
         tb->iconsize = GTK_WIDGET(p->panel->box)->allocation.height - req.height;
         DBG("pwid height = %d\n", GTK_WIDGET(p->pwid)->allocation.height);
@@ -1343,42 +1342,45 @@ taskbar_constructor(plugin *p)
     tb->use_mouse_wheel   = 1;
     tb->use_urgency_hint  = 1;
     s.len = 256;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "taskbar: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "tooltips")) {
-                tb->tooltips = str2num(bool_pair, s.t[1], 1);
-            } else if (!g_ascii_strcasecmp(s.t[0], "IconsOnly")) {
-                tb->icons_only = str2num(bool_pair, s.t[1], 0);
-            } else if (!g_ascii_strcasecmp(s.t[0], "AcceptSkipPager")) {
-                tb->accept_skip_pager = str2num(bool_pair, s.t[1], 1);
-            } else if (!g_ascii_strcasecmp(s.t[0], "ShowIconified")) {
-                tb->show_iconified = str2num(bool_pair, s.t[1], 1);
-            } else if (!g_ascii_strcasecmp(s.t[0], "ShowMapped")) {
-                tb->show_mapped = str2num(bool_pair, s.t[1], 1);
-            } else if (!g_ascii_strcasecmp(s.t[0], "ShowAllDesks")) {
-                tb->show_all_desks = str2num(bool_pair, s.t[1], 0);
-            } else if (!g_ascii_strcasecmp(s.t[0], "MaxTaskWidth")) {
-                tb->task_width_max = atoi(s.t[1]);
-                DBG("task_width_max = %d\n", tb->task_width_max);
-            } else if (!g_ascii_strcasecmp(s.t[0], "spacing")) {
-                tb->spacing = atoi(s.t[1]);
-            } else if (!g_ascii_strcasecmp(s.t[0], "UseMouseWheel")) {
-                tb->use_mouse_wheel = str2num(bool_pair, s.t[1], 1);
-            } else if (!g_ascii_strcasecmp(s.t[0], "UseUrgencyHint")) {
-                tb->use_urgency_hint = str2num(bool_pair, s.t[1], 1);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "taskbar: illegal token %s\n", s.str);
+                goto error;
+            }
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "tooltips")) {
+                    tb->tooltips = str2num(bool_pair, s.t[1], 1);
+                } else if (!g_ascii_strcasecmp(s.t[0], "IconsOnly")) {
+                    tb->icons_only = str2num(bool_pair, s.t[1], 0);
+                } else if (!g_ascii_strcasecmp(s.t[0], "AcceptSkipPager")) {
+                    tb->accept_skip_pager = str2num(bool_pair, s.t[1], 1);
+                } else if (!g_ascii_strcasecmp(s.t[0], "ShowIconified")) {
+                    tb->show_iconified = str2num(bool_pair, s.t[1], 1);
+                } else if (!g_ascii_strcasecmp(s.t[0], "ShowMapped")) {
+                    tb->show_mapped = str2num(bool_pair, s.t[1], 1);
+                } else if (!g_ascii_strcasecmp(s.t[0], "ShowAllDesks")) {
+                    tb->show_all_desks = str2num(bool_pair, s.t[1], 0);
+                } else if (!g_ascii_strcasecmp(s.t[0], "MaxTaskWidth")) {
+                    tb->task_width_max = atoi(s.t[1]);
+                    DBG("task_width_max = %d\n", tb->task_width_max);
+                } else if (!g_ascii_strcasecmp(s.t[0], "spacing")) {
+                    tb->spacing = atoi(s.t[1]);
+                } else if (!g_ascii_strcasecmp(s.t[0], "UseMouseWheel")) {
+                    tb->use_mouse_wheel = str2num(bool_pair, s.t[1], 1);
+                } else if (!g_ascii_strcasecmp(s.t[0], "UseUrgencyHint")) {
+                    tb->use_urgency_hint = str2num(bool_pair, s.t[1], 1);
+                } else {
+                    ERR( "taskbar: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
             } else {
-                ERR( "taskbar: unknown var %s\n", s.t[0]);
+                ERR( "taskbar: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "taskbar: illegal in this context %s\n", s.str);
-            goto error;
         }
-    }  
+    }
     taskbar_build_gui(p);
     tb_net_client_list(NULL, tb);
     tb_display(tb);
index 344b513..915e9b5 100644 (file)
@@ -62,7 +62,7 @@ static void on_button_press (GtkWidget* widget, GdkEventButton* evt, plugin* p)
 }
 
 static int
-volume_constructor(plugin *p)
+volume_constructor(plugin *p, char **fp)
 {
        volume_t *vol;
        line s;
index 3bc9cb9..e3d35f1 100644 (file)
@@ -163,7 +163,7 @@ wincmd_destructor(plugin *p)
 
 
 static int
-wincmd_constructor(plugin *p)
+wincmd_constructor(plugin *p, char **fp)
 {
     line s;
     gchar *fname;
@@ -185,25 +185,28 @@ wincmd_constructor(plugin *p)
 #endif
     p->priv = wc;
     fname = NULL;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        if (s.type == LINE_NONE) {
-            ERR( "wincmd: illegal token %s\n", s.str);
-            goto error;
-        }
-        if (s.type == LINE_VAR) {
-            if (!g_ascii_strcasecmp(s.t[0], "Button1")) 
-                wc->button1 = str2num(wincmd_pair, s.t[1], WC_ICONIFY);
-            else if (!g_ascii_strcasecmp(s.t[0], "Button2")) 
-                wc->button2 = str2num(wincmd_pair, s.t[1], WC_SHADE);
-            else if (!g_ascii_strcasecmp(s.t[0], "image"))
-                fname = expand_tilda(s.t[1]); 
-            else {
-                ERR( "wincmd: unknown var %s\n", s.t[0]);
+    if( fp )
+    {
+        while (lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            if (s.type == LINE_NONE) {
+                ERR( "wincmd: illegal token %s\n", s.str);
+                goto error;
+            }
+            if (s.type == LINE_VAR) {
+                if (!g_ascii_strcasecmp(s.t[0], "Button1")) 
+                    wc->button1 = str2num(wincmd_pair, s.t[1], WC_ICONIFY);
+                else if (!g_ascii_strcasecmp(s.t[0], "Button2")) 
+                    wc->button2 = str2num(wincmd_pair, s.t[1], WC_SHADE);
+                else if (!g_ascii_strcasecmp(s.t[0], "image"))
+                    fname = expand_tilda(s.t[1]); 
+                else {
+                    ERR( "wincmd: unknown var %s\n", s.t[0]);
+                    goto error;
+                }
+            } else {
+                ERR( "wincmd: illegal in this context %s\n", s.str);
                 goto error;
             }
-        } else {
-            ERR( "wincmd: illegal in this context %s\n", s.str);
-            goto error;
         }
     }
     if (p->panel->orientation == ORIENT_HORIZ) {
index 4bbff42..ecc6d54 100644 (file)
@@ -96,7 +96,7 @@ tray_destructor(plugin *p)
 
 
 static int
-tray_constructor(plugin *p)
+tray_constructor(plugin *p, char** fp)
 {
     line s;
     tray *tr;
@@ -105,11 +105,15 @@ tray_constructor(plugin *p)
     
     ENTER;
     s.len = 256;
-    while (lxpanel_get_line(p->fp, &s) != LINE_BLOCK_END) {
-        ERR("tray: illegal in this context %s\n", s.str);
-        RET(0);
+    if( fp )
+    {
+        g_debug("_tray");
+        while ( lxpanel_get_line(fp, &s) != LINE_BLOCK_END) {
+            g_debug("s.str = \'%s\'", s.str);
+            ERR("tray: illegal in this context %s\n", s.str);
+            RET(0);
+        }
     }
-
     tr = g_new0(tray, 1);
     g_return_val_if_fail(tr != NULL, 0);
     p->priv = tr;