Add save_config for several plugins.
authorHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Sun, 29 Oct 2006 22:21:26 +0000 (22:21 +0000)
committerHong Jen Yee (PCMan) <pcman.tw@gmail.com>
Sun, 29 Oct 2006 22:21:26 +0000 (22:21 +0000)
21 files changed:
src/configurator.c
src/misc.c
src/misc.h
src/panel.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 eb5abc2..ae2de9a 100644 (file)
@@ -93,12 +93,6 @@ response_event(GtkDialog *widget, gint arg1, gpointer user_data)
 
     ENTER;
     switch (arg1) {
-    case GTK_RESPONSE_DELETE_EVENT:
-    case GTK_RESPONSE_CLOSE:
-    case GTK_RESPONSE_NONE:
-        gtk_widget_destroy(dialog);
-        dialog = NULL;
-        break;
     case GTK_RESPONSE_APPLY:
         if (!mk_profile_dir()) {
             ERR("can't make ~/.lxpanel direcory\n");
@@ -114,9 +108,12 @@ response_event(GtkDialog *widget, gint arg1, gpointer user_data)
         global_config_save(fp);
         plugin_config_save(fp);
         fclose(fp);
-        //sprintf(fname, "cat %s/.lxpanel/confplug >> %s/.lxpanel/%s", getenv("HOME"), getenv("HOME"), cprofile);
-        //system(fname);
-        gtk_main_quit();
+        /* NOTE: NO BREAK HERE*/
+    case GTK_RESPONSE_DELETE_EVENT:
+    case GTK_RESPONSE_CLOSE:
+    case GTK_RESPONSE_NONE:
+        gtk_widget_destroy(dialog);
+        dialog = NULL;
         break;
     }
     RET();
@@ -894,57 +891,23 @@ global_config_save(FILE *fp)
     fprintf(fp, "}\n\n");
 }
 
-#define TAB_WIDTH 4
-#define STR_LEN  254
 void
 plugin_config_save(FILE *fp)
 {
-    char space[STR_LEN];
-    line s;
-    int i = 0;
-    fseek(pconf, 0, SEEK_SET);
-    /*
-    while (fgets(s, 254, pconf))
-        fprintf(fp, "%s\n", s);
-    */
-    memset(space, ' ', STR_LEN);
-    space[STR_LEN -1] = 0;
-    s.len = 256;
-    while (lxpanel_get_line(pconf, &s) != LINE_NONE) {
-        switch (s.type) {
-        case LINE_BLOCK_START:
-            space[i*TAB_WIDTH] = 0;
-            fprintf(fp, "%s%s {\n", space, s.t[0]);
-            space[i*TAB_WIDTH] = ' ';
-            i++;
-            //just for the case
-            if (i > STR_LEN/TAB_WIDTH) {
-                i = STR_LEN/TAB_WIDTH;
-                ERR("too long line in config file\n");
-            }
-            break;
-        case LINE_BLOCK_END:
-            i--;
-            //just for the case
-            if (i < 0) {
-                ERR("unbalansed parenthesis in config file\n");
-                i = 0;
-            }
-            space[i*TAB_WIDTH] = 0;
-            fprintf(fp, "%s}\n", space);
-            space[i*TAB_WIDTH] = ' ';
-            if (!i)
-                fprintf(fp, "\n\n");
-            break;
-
-        case LINE_VAR:
-            space[i*TAB_WIDTH] = 0;
-            fprintf(fp, "%s%s = %s\n", space, s.t[0], s.t[1]);
-            space[i*TAB_WIDTH] = ' ';
-            break;
+    GList* l;
+    for( l = p->plugins; l; l = l->next )
+    {
+        plugin* pl = (plugin*)l->data;
+        lxpanel_put_line( fp, "Plugin {" );
+        lxpanel_put_line( fp, "type = %s", pl->class->type );
+        if( pl->class->save )
+        {
+            lxpanel_put_line( fp, "Config {" );
+            pl->class->save( pl, fp );
+            lxpanel_put_line( fp, "}" );
         }
+        lxpanel_put_line( fp, "}\n" );
     }
-
 }
 
 
index 736f9de..f4d99f0 100644 (file)
@@ -132,7 +132,7 @@ num2str(pair *p, int num, gchar *defval)
     RET(defval);
 }
 
-int _gets( char* buf, int len, char **fp )
+int buf_gets( char* buf, int len, char **fp )
 {
     char* p;
     int i = 0;
@@ -160,6 +160,49 @@ int _gets( char* buf, int len, char **fp )
     return i;
 }
 
+extern int
+lxpanel_put_line(FILE* fp, const char* format, ...)
+{
+    static int indent = 0;
+    int i, ret;
+    va_list args;
+
+    if( strchr(format, '}') )
+        --indent;
+
+    for( i = 0; i < indent; ++i )
+        fputs( "    ", fp );
+
+    va_start (args, format);
+    ret = vfprintf (fp, format, args);
+    va_end (args);
+
+    if( strchr(format, '{') )
+        ++indent;
+    fputc( '\n', fp );  /* add line break */
+    return (ret + 1);
+}
+
+extern int
+lxpanel_put_str( FILE* fp, const char* name, const char* val )
+{
+    if( G_UNLIKELY( !val ) )
+        return 0;
+    return lxpanel_put_line( fp, "%s = %s", name, val );
+}
+
+extern int
+lxpanel_put_bool( FILE* fp, const char* name, gboolean val )
+{
+    return lxpanel_put_line( fp, "%s = %s", name, val ? "true" : "false" );
+}
+
+extern int
+lxpanel_put_int( FILE* fp, const char* name, int val )
+{
+    return lxpanel_put_line( fp, "%s = %d", name, val );
+}
+
 extern  int
 lxpanel_get_line(char**fp, line *s)
 {
@@ -169,17 +212,13 @@ lxpanel_get_line(char**fp, line *s)
     s->type = LINE_NONE;
     if (!fp)       
         RET(s->type);
-    while (_gets(s->str, s->len, fp)) {
-        g_debug("_gets: %s", s->str);
+    while (buf_gets(s->str, s->len, fp)) {
         g_strstrip(s->str);
-     
+
         if (s->str[0] == '#' || s->str[0] == 0) {
-            g_debug("skip");
-           continue;
+            continue;
         }
-        DBG( ">> %s\n", s->str);
         if (!g_ascii_strcasecmp(s->str, "}")) {
-            g_debug("LINE_BLOCK_END");
             s->type = LINE_BLOCK_END;
             break;
         }
@@ -201,7 +240,6 @@ lxpanel_get_line(char**fp, line *s)
         break;
     }
     RET(s->type);
-
 }
 
 int
@@ -215,7 +253,7 @@ get_line_as_is(char** fp, line *s)
         RET(s->type);
     }
     s->type = LINE_NONE;
-    while (_gets(s->str, s->len, fp)) {
+    while (buf_gets(s->str, s->len, fp)) {
         g_strstrip(s->str);
         if (s->str[0] == '#' || s->str[0] == 0) 
            continue;
index a5b0fff..5093687 100644 (file)
@@ -33,6 +33,10 @@ 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(char **fp, line *s);
+extern int lxpanel_put_line(FILE* fp, const char* format, ...);
+extern int lxpanel_put_str( FILE* fp, const char* name, const char* val );
+extern int lxpanel_put_bool( FILE* fp, const char* name, gboolean val );
+extern int lxpanel_put_int( FILE* fp, const char* name, int val );
 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);
index 3344aa1..9c2e1e6 100644 (file)
@@ -31,9 +31,6 @@ FbEv *fbev;
 #include "dbg.h"
 
 int log_level;
-
-FILE *pconf; // plugin part of profile file
-
 panel *p;
 
 
@@ -680,7 +677,6 @@ delete_plugin(gpointer data, gpointer udata)
     plugin_stop((plugin *)data);
     plugin_put((plugin *)data);
     RET();
-    
 }
 
 void panel_stop(panel *p)
@@ -701,7 +697,6 @@ void panel_stop(panel *p)
     gtk_widget_destroy(p->topgwin);
     g_object_unref(fbev);
     g_free(p->workarea);
-    fclose(pconf);
     gdk_flush();
     XFlush(GDK_DISPLAY());
     XSync(GDK_DISPLAY(), True);
index 5aa8606..31317d7 100644 (file)
@@ -27,6 +27,7 @@ typedef struct {
     int (*constructor)(struct _plugin *this, char **fp);
     void (*destructor)(struct _plugin *this);
     void (*config)(struct _plugin *this, GtkWindow* parent); /* config UI */
+    void (*save)(struct _plugin *this, FILE* fp);
 
 } plugin_class;
 
index bc00f78..de6b5bf 100644 (file)
@@ -220,5 +220,6 @@ plugin_class cpu_plugin_class = {
 
     constructor : cpu_constructor,
     destructor  : cpu_destructor,
-    config : NULL
+    config : NULL,
+    save : NULL
 };
index 6db3118..b709c55 100644 (file)
@@ -196,6 +196,14 @@ static void dclock_config( plugin *p, GtkWindow* parent )
     gtk_window_present( dlg );
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    dclock *dc = (dclock *)p->priv;
+    lxpanel_put_str( fp, "ClockFmt", dc->cfmt );
+    lxpanel_put_str( fp, "TooltipFmt", dc->tfmt );
+    lxpanel_put_str( fp, "Action", dc->action );
+}
+
 plugin_class dclock_plugin_class = {
     fname: NULL,
     count: 0,
@@ -207,5 +215,6 @@ plugin_class dclock_plugin_class = {
 
     constructor : dclock_constructor,
     destructor  : dclock_destructor,
-    config : dclock_config
+    config : dclock_config,
+    save : save_config
 };
index dcc2f8b..c60810b 100644 (file)
@@ -103,5 +103,6 @@ plugin_class deskno_plugin_class = {
 
     constructor : deskno_constructor,
     destructor  : deskno_destructor,
-    config : NULL
+    config : NULL,
+    save : NULL
 };
index 84c428d..faacac0 100644 (file)
@@ -133,5 +133,6 @@ plugin_class deskno2_plugin_class = {
 
     constructor : deskno_constructor,
     destructor  : deskno_destructor,
-    config : NULL
+    config : NULL,
+    save : NULL
 };
index 88bc28b..225b073 100644 (file)
@@ -29,6 +29,7 @@
 
 typedef struct wmpix_t {
     struct wmpix_t *next;
+    char* name;
     gulong *data;
     int size;
     XClassHint ch;
@@ -40,11 +41,9 @@ typedef struct _task{
     struct task *next;
     Window win;
     int refcount;
-    XClassHint ch;    
+    XClassHint ch;
 } task;
 
-
-
 typedef struct _icons{
     plugin *plug;
     Window *wins;
@@ -56,8 +55,6 @@ typedef struct _icons{
     wmpix_t *dicon;
 } icons;
 
-
-
 static void ics_propertynotify(icons *ics, XEvent *ev);
 static GdkFilterReturn ics_event_filter( XEvent *, GdkEvent *, icons *);
 static void icons_destructor(plugin *p);
@@ -121,7 +118,7 @@ get_dicon_maybe(icons *ics, task *tk)
         XFree(data);
         RET(NULL);
     }
-    
+
     hints = (XWMHints *) get_xaproperty (tk->win, XA_WM_HINTS, XA_WM_HINTS, 0);
     if (hints) {
         if ((hints->flags & IconPixmapHint) || (hints->flags & IconMaskHint)) {
@@ -144,7 +141,6 @@ get_user_icon(icons *ics, task *tk)
         for (tmp = ics->wmpix; tmp; tmp = tmp->next) {
             if ((!tmp->ch.res_name || !strcmp(tmp->ch.res_name, tk->ch.res_name))
                   && (!tmp->ch.res_class || !strcmp(tmp->ch.res_class, tk->ch.res_class))) {
-                
                 RET(tmp);
            }
        }
@@ -171,18 +167,18 @@ pixbuf2argb (GdkPixbuf *pixbuf, int *size)
     height = gdk_pixbuf_get_height (pixbuf);
     stride = gdk_pixbuf_get_rowstride (pixbuf);
     n_channels = gdk_pixbuf_get_n_channels (pixbuf);
-      
+
     *size += 2 + width * height;
     p = data = g_malloc (*size * sizeof (gulong));
     *p++ = width;
     *p++ = height;
-    
+
     pixels = gdk_pixbuf_get_pixels (pixbuf);
-    
+
     for (y = 0; y < height; y++) {
         for (x = 0; x < width; x++) {
             guchar r, g, b, a;
-            
+
             r = pixels[y*stride + x*n_channels + 0];
             g = pixels[y*stride + x*n_channels + 1];
             b = pixels[y*stride + x*n_channels + 2];
@@ -190,7 +186,7 @@ pixbuf2argb (GdkPixbuf *pixbuf, int *size)
                 a = pixels[y*stride + x*n_channels + 3];
             else
                 a = 255;
-            
+
             *p++ = a << 24 | r << 16 | g << 8 | b ;
         }
     }
@@ -212,7 +208,7 @@ set_icon_maybe (icons *ics, task *tk)
     pix = get_user_icon(ics, tk);
     if (!pix) 
         pix = get_dicon_maybe(ics, tk);
-    
+
     if (!pix)
         RET();
 
@@ -245,7 +241,6 @@ remove_stale_tasks(Window *win, task *tk, gpointer data)
 static GdkFilterReturn
 ics_event_filter( XEvent *xev, GdkEvent *event, icons *ics)
 {
-    
     ENTER;
     g_assert(ics != NULL);
     if (xev->type == PropertyNotify )
@@ -297,14 +292,13 @@ ics_propertynotify(icons *ics, XEvent *ev)
     Atom at;
     Window win;
 
-    
     ENTER;
     win = ev->xproperty.window;
     at = ev->xproperty.atom;
     DBG("win=%x at=%d\n", win, at);
     if (win != GDK_ROOT_WINDOW()) {
        task *tk = find_task(ics, win);
-        
+
        if (!tk) RET();
         if (at == XA_WM_CLASS) {
            get_wmclass(tk);
@@ -320,7 +314,7 @@ static void
 icons_build_gui(plugin *p)
 {
     icons *ics = (icons *)p->priv;
-    
+
     ENTER;
     g_signal_connect (G_OBJECT (fbev), "client_list",
           G_CALLBACK (do_net_client_list), (gpointer) ics);
@@ -334,11 +328,11 @@ read_application(plugin *p, char** fp)
     icons *ics = (icons *)p->priv;
     GdkPixbuf *gp = NULL;
     line s;
-    gchar *fname, *appname, *classname;
+    gchar *image = NULL, *fname, *appname, *classname;
     wmpix_t *wp = NULL;
     gulong *data;
     int size;
-    
+
     ENTER;
     s.len = 256;
     fname = appname = classname = NULL;
@@ -351,8 +345,10 @@ read_application(plugin *p, char** fp)
                 goto error;
             }
             if (s.type == LINE_VAR) {
-                if (!g_ascii_strcasecmp(s.t[0], "image")) 
+                if (!g_ascii_strcasecmp(s.t[0], "image")){
+                    image = g_strdup( s.t[1] );
                     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"))
@@ -367,25 +363,27 @@ read_application(plugin *p, char** fp)
             }
         }
     }
+    wp = g_new0 (wmpix_t, 1);
+    wp->next = ics->wmpix;
+    wp->name = image;
+    ics->wmpix = wp;
+    ics->wmpixno++;
+    wp->ch.res_name = appname;
+    wp->ch.res_class = classname;
+
     if (!fname)
         RET(0);
-    gp = gdk_pixbuf_new_from_file(fname, NULL);  
+    gp = gdk_pixbuf_new_from_file(fname, NULL);
     if (gp) {
         if ((data = pixbuf2argb(gp, &size))) {
-            wp = g_new0 (wmpix_t, 1);
-            wp->next = ics->wmpix;
             wp->data = data;
             wp->size = size;
-            wp->ch.res_name = appname;
-            wp->ch.res_class = classname;
-            ics->wmpix = wp;
-            ics->wmpixno++;
         }
         g_object_unref(gp);
     }
-    g_free(fname);    
+    g_free(fname);
     RET(1);
-  
+
  error:
     g_free(fname);
     g_free(appname);
@@ -400,21 +398,23 @@ read_dicon(icons *ics, gchar *name)
     GdkPixbuf *gp;
     int size;
     gulong *data;
-    
+
     ENTER;
+
+    ics->dicon = g_new0 (wmpix_t, 1);
+    ics->dicon->name = g_strdup(name);
+
     fname = expand_tilda(name);
     if (!fname)
         RET(0);
-    gp = gdk_pixbuf_new_from_file(fname, NULL);  
+    gp = gdk_pixbuf_new_from_file(fname, NULL);
     if (gp) {
-        if ((data = pixbuf2argb(gp, &size))) {
-            ics->dicon = g_new0 (wmpix_t, 1);
-            ics->dicon->data = data;
-            ics->dicon->size = size;
-        }
+        data = pixbuf2argb(gp, &size);
+        ics->dicon->data = data;
+        ics->dicon->size = size;
         g_object_unref(gp);
     }
-    g_free(fname);    
+    g_free(fname);
     RET(1);
 }
 
@@ -424,12 +424,12 @@ icons_constructor(plugin *p, char **fp)
 {
     icons *ics;
     line s;
-    
+
     ENTER;
     ics = g_new0(icons, 1);
     ics->plug = p;
     p->priv = ics;
-    
+
     ics->wmpixno           = 0;
     ics->task_list         = g_hash_table_new(g_int_hash, g_int_equal);
     s.len = 256;
@@ -469,7 +469,7 @@ icons_constructor(plugin *p, char **fp)
     icons_build_gui(p);
     do_net_client_list(NULL, ics);
     RET(1);
-    
+
  error:
     icons_destructor(p);
     RET(0);
@@ -481,21 +481,46 @@ icons_destructor(plugin *p)
 {
     icons *ics = (icons *)p->priv;
     wmpix_t *wp;
-    
+
     ENTER;
     g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), do_net_client_list, ics); 
     gdk_window_remove_filter(NULL, (GdkFilterFunc)ics_event_filter, ics );
+    if( ics->dicon )
+    {
+        g_free(wp->data);
+        g_free(wp->name);
+        g_free( ics->dicon );
+    }
     while (ics->wmpix) {
         wp = ics->wmpix;
         ics->wmpix = ics->wmpix->next;
         g_free(wp->ch.res_name);
         g_free(wp->ch.res_class);
         g_free(wp->data);
+        g_free(wp->name);
         g_free(wp);
     }
     RET();
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    wmpix_t *tmp;
+    icons* ics = (icons*)p->priv;
+
+    if( ics->dicon )
+        lxpanel_put_str( fp, "DefaultIcon", ics->dicon->name );
+
+    /* FIXME: the order of saved items should be reversed */
+    for (tmp = ics->wmpix; tmp; tmp = tmp->next) {
+        lxpanel_put_line( fp, "Application {" );
+        lxpanel_put_str( fp, "Image", tmp->name );
+        lxpanel_put_str( fp, "AppName", tmp->ch.res_name );
+        lxpanel_put_str( fp, "ClassName", tmp->ch.res_class );
+        lxpanel_put_line( fp, "}" );
+    }
+}
+
 plugin_class icons_plugin_class = {
     fname: NULL,
     count: 0,
@@ -505,7 +530,9 @@ plugin_class icons_plugin_class = {
     version: "1.0",
     description : N_("Change window icons"),
     invisible : 1,
-    
+
     constructor : icons_constructor,
     destructor  : icons_destructor,
+    config : NULL,
+    save : save_config
 };
index c7ec359..f7a857f 100644 (file)
@@ -96,7 +96,6 @@ image_constructor(plugin *p, char **fp)
         wid = gtk_label_new("?");
     } else {
         float ratio;
-                  
         ratio = (p->panel->orientation == ORIENT_HORIZ) ?
             (float) (p->panel->ah - 2) / (float) gdk_pixbuf_get_height(gp)
             : (float) (p->panel->aw - 2) / (float) gdk_pixbuf_get_width(gp);
@@ -128,6 +127,10 @@ image_constructor(plugin *p, char **fp)
     RET(0);
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    // FIXME: not complete
+}
 
 plugin_class image_plugin_class = {
     fname: NULL,
@@ -140,4 +143,6 @@ plugin_class image_plugin_class = {
 
     constructor : image_constructor,
     destructor  : image_destructor,
+    config : NULL,
+    save : save_config
 };
index a9d77d4..e278223 100644 (file)
@@ -161,7 +161,7 @@ read_button(plugin *p, char** fp)
     line s;
     //GError *err = NULL;
     int w, h;
-    
+
     ENTER;
     s.len = 256;
     if (lb->btn_num >= MAXBUTTONS) {
@@ -363,7 +363,10 @@ launchbar_constructor(plugin *p, char **fp)
     
 }
 
-
+static void save_config( plugin* p, FILE* fp )
+{
+    /* FIXME: not complete */
+}
 
 plugin_class launchbar_plugin_class = {
     fname: NULL,
@@ -376,5 +379,6 @@ plugin_class launchbar_plugin_class = {
 
     constructor : launchbar_constructor,
     destructor  : launchbar_destructor,
-    config : NULL
+    config : NULL,
+    save : save_config
 };
index 5f23090..416c383 100644 (file)
@@ -471,6 +471,10 @@ menu_constructor(plugin *p, char **fp)
     RET(0);
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    /* FIXME: not complete */
+}
 
 plugin_class menu_plugin_class = {
     fname: NULL,
@@ -483,6 +487,8 @@ plugin_class menu_plugin_class = {
 
     constructor : menu_constructor,
     destructor  : menu_destructor,
+    config : NULL,
+    save : save_config
 };
 
 
index 936dfce..63edf58 100644 (file)
@@ -136,6 +136,13 @@ static void netstatus_config( plugin* p, GtkWindow* parent  )
     gtk_window_present( GTK_WINDOW(dlg) );
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    netstatus *ns = (netstatus*)p->priv;
+    lxpanel_put_str( fp, "iface", ns->iface );
+    lxpanel_put_str( fp, "configtool", ns->config_tool );
+}
+
 plugin_class netstatus_plugin_class = {
     fname: NULL,
     count: 0,
@@ -147,5 +154,6 @@ plugin_class netstatus_plugin_class = {
 
     constructor : netstatus_constructor,
     destructor  : netstatus_destructor,
-    config : netstatus_config
+    config : netstatus_config,
+    save : save_config
 };
index 868adba..e1b5a4f 100644 (file)
@@ -701,5 +701,6 @@ plugin_class pager_plugin_class = {
 
     constructor : pager_constructor,
     destructor  : pager_destructor,
-    config : NULL
+    config : NULL,
+    save : NULL
 };
index 9f4fcb3..07456c1 100644 (file)
@@ -60,4 +60,6 @@ plugin_class separator_plugin_class = {
 
     constructor : separator_constructor,
     destructor  : separator_destructor,
+    config : NULL,
+    save : NULL
 };
index b4eb14e..96d5116 100644 (file)
@@ -114,6 +114,12 @@ static void space_config(plugin* p, GtkWindow* parent )
     gtk_window_present( dlg );
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    space *sp = (space *)p->priv;
+    lxpanel_put_int( fp, "Size", sp->size );
+}
+
 plugin_class space_plugin_class = {
     fname: NULL,
     count: 0,
@@ -125,5 +131,6 @@ plugin_class space_plugin_class = {
 
     constructor : space_constructor,
     destructor  : space_destructor,
-    config : space_config
+    config : space_config,
+    save : save_config
 };
index 0ee2740..090c40b 100644 (file)
@@ -1445,6 +1445,21 @@ static void taskbar_config( plugin* p, GtkWindow* parent )
     gtk_window_present( dlg );
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    taskbar *tb = (taskbar *)p->priv;
+    lxpanel_put_bool( fp, "tooltips", tb->tooltips );
+    lxpanel_put_bool( fp, "IconsOnly", tb->icons_only );
+    lxpanel_put_bool( fp, "AcceptSkipPager", tb->accept_skip_pager );
+    lxpanel_put_bool( fp, "ShowIconified", tb->show_iconified );
+    lxpanel_put_bool( fp, "ShowMapped", tb->show_mapped );
+    lxpanel_put_bool( fp, "ShowAllDesks", tb->show_all_desks );
+    lxpanel_put_bool( fp, "MaxTaskWidth", tb->task_width_max );
+    lxpanel_put_bool( fp, "spacing", tb->spacing );
+    lxpanel_put_bool( fp, "UseMouseWheel", tb->use_mouse_wheel );
+    lxpanel_put_bool( fp, "UseUrgencyHint", tb->use_urgency_hint );
+}
+
 plugin_class taskbar_plugin_class = {
     fname: NULL,
     count: 0,
@@ -1453,9 +1468,10 @@ plugin_class taskbar_plugin_class = {
     name : N_("Task Bar (Window List)"),
     version: "1.0",
     description : N_("Taskbar shows all opened windows and allow to iconify them, shade or get focus"),
-    
+
     constructor : taskbar_constructor,
     destructor  : taskbar_destructor,
-    config : taskbar_config
+    config : taskbar_config,
+    save : save_config
 };
 
index 915e9b5..fb16053 100644 (file)
@@ -135,5 +135,6 @@ plugin_class volume_plugin_class = {
 
        constructor : volume_constructor,
        destructor  : volume_destructor,
-    config : NULL
+    config : NULL,
+    save : NULL
 };
index e3d35f1..2000863 100644 (file)
@@ -237,6 +237,16 @@ wincmd_constructor(plugin *p, char **fp)
     RET(0);
 }
 
+static void save_config( plugin* p, FILE* fp )
+{
+    wincmd* wc = (wincmd*)p->priv;
+    /*
+    if( wc->image )
+        lxpanel_put_line( fp, "image=%s", wc->image );
+    */
+    // FIXME: not complete
+}
+
 
 plugin_class wincmd_plugin_class = {
     fname: NULL,
@@ -246,8 +256,9 @@ plugin_class wincmd_plugin_class = {
     name : N_("Minimize All Windows"),
     version: "1.0",
     description : N_("Sends commands to all desktop windows.\nSupported commnds are 1)toggle iconify and 2) toggle shade"),
-    
 
     constructor : wincmd_constructor,
     destructor  : wincmd_destructor,
+    config : NULL,
+    save : save_config
 };
index ecc6d54..a2e093a 100644 (file)
@@ -162,5 +162,6 @@ plugin_class tray_plugin_class = {
 
     constructor : tray_constructor,
     destructor  : tray_destructor,
-    config : NULL
+    config : NULL,
+    save : NULL
 };