0.8.8claws56
authorChristoph Hohmann <reboot@gmx.ch>
Mon, 6 Jan 2003 18:54:30 +0000 (18:54 +0000)
committerChristoph Hohmann <reboot@gmx.ch>
Mon, 6 Jan 2003 18:54:30 +0000 (18:54 +0000)
* src/mainwindow.c
* src/prefs_gtk.[ch]
* src/gtk/prefswindow.[ch]
* src/plugins/spamassassin/spamassassin_gtk.c
        o remove page management from prefswindow, pages
          will be an argument to prefswindow_open
        o prefswindow_open gets a datapointer that is
          passed to the widget_create function to allow
          creation of prefswindow for specific items

src/gtk/prefswindow.c
src/gtk/prefswindow.h
src/mainwindow.c
src/plugins/spamassassin/spamassassin_gtk.c
src/prefs_gtk.c
src/prefs_gtk.h

index b0a5717..dd83720 100644 (file)
@@ -28,8 +28,6 @@
 #include "prefswindow.h"
 #include "../gtkutils.h"
 
-GSList *prefs_pages = NULL;
-
 typedef struct _PrefsWindow PrefsWindow;
 
 struct _PrefsWindow
@@ -47,17 +45,10 @@ struct _PrefsWindow
        GtkWidget *ok_btn;
        GtkWidget *cancel_btn;
        GtkWidget *apply_btn;
-};
-
-void prefswindow_register_page(PrefsPage *page)
-{
-       prefs_pages = g_slist_append(prefs_pages, page);
-}
 
-void prefswindow_unregister_page(PrefsPage *page)
-{
-       prefs_pages = g_slist_remove(prefs_pages, page);
-}
+       gpointer   data;
+       GSList    *prefs_pages;
+};
 
 static gboolean ctree_select_row(GtkCTree *ctree, GList *node, gint column, gpointer user_data)
 {
@@ -82,7 +73,7 @@ static gboolean ctree_select_row(GtkCTree *ctree, GList *node, gint column, gpoi
        }
 
        if (!page->page_open) {
-               page->create_widget(page);
+               page->create_widget(page, prefswindow->data);
                gtk_widget_ref(page->widget);
                gtk_widget_show_all(page->widget);
                page->page_open = TRUE;
@@ -101,7 +92,7 @@ static gboolean ctree_select_row(GtkCTree *ctree, GList *node, gint column, gpoi
        return FALSE;
 }
 
-static void save_all_pages()
+static void save_all_pages(GSList *prefs_pages)
 {
        GSList *cur;
 
@@ -114,7 +105,7 @@ static void save_all_pages()
        }
 }
 
-static void close_all_pages()
+static void close_all_pages(GSList *prefs_pages)
 {
        GSList *cur;
 
@@ -131,16 +122,19 @@ static void close_all_pages()
 
 static void apply_button_released(GtkButton *button, gpointer user_data)
 {
-       save_all_pages();
+       PrefsWindow *prefswindow = (PrefsWindow *) user_data;
+
+       save_all_pages(prefswindow->prefs_pages);
 }
 
 static void ok_button_released(GtkButton *button, gpointer user_data)
 {
        PrefsWindow *prefswindow = (PrefsWindow *) user_data;
 
-       save_all_pages();
+       save_all_pages(prefswindow->prefs_pages);
        gtk_widget_destroy(prefswindow->window);
-       close_all_pages();
+       close_all_pages(prefswindow->prefs_pages);
+       g_slist_free(prefswindow->prefs_pages);
        g_free(prefswindow);
 }
 
@@ -149,7 +143,8 @@ static void cancel_button_released(GtkButton *button, gpointer user_data)
        PrefsWindow *prefswindow = (PrefsWindow *) user_data;
 
        gtk_widget_destroy(prefswindow->window);
-       close_all_pages();
+       close_all_pages(prefswindow->prefs_pages);
+       g_slist_free(prefswindow->prefs_pages);
        g_free(prefswindow);
 }
 
@@ -173,7 +168,7 @@ static gboolean find_child_by_name(GtkCTree *ctree, GtkCTreeNode *node, struct n
        return FALSE;
 }
 
-void prefswindow_create()
+void prefswindow_open(GSList *prefs_pages, gpointer data)
 {
        static gchar *titles [] = {"Page Index"};
        GSList *cur;
@@ -182,6 +177,9 @@ void prefswindow_create()
 
        prefswindow = g_new0(PrefsWindow, 1);
 
+       prefswindow->data = data;
+       prefswindow->prefs_pages = g_slist_copy(prefs_pages);
+
        prefswindow->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(prefswindow->window), _("Preferences"));
        gtk_window_set_default_size(GTK_WINDOW(prefswindow->window), 600, 340);
@@ -269,14 +267,3 @@ void prefswindow_create()
 
        gtk_widget_show_all(prefswindow->window);
 }
-
-void prefswindow_destroy_all_pages()
-{
-       GSList *cur;
-
-       for (cur = prefs_pages; cur != NULL; cur = g_slist_next(cur)) {
-               PrefsPage *page = (PrefsPage *) cur->data;
-
-               page->destroy_page(page);
-       }
-}
index 93613b4..6cb2d02 100644 (file)
@@ -25,7 +25,7 @@
 
 typedef struct _PrefsPage PrefsPage;
 
-typedef void (*PrefsCreateWidgetFunc) (PrefsPage *);
+typedef void (*PrefsCreateWidgetFunc) (PrefsPage *, gpointer);
 typedef void (*PrefsDestroyWidgetFunc) (PrefsPage *);
 typedef void (*PrefsSavePageFunc) (PrefsPage *);
 typedef void (*PrefsDestroyPageFunc) (PrefsPage *);
@@ -42,9 +42,6 @@ struct _PrefsPage
        PrefsDestroyPageFunc destroy_page;
 };
 
-void prefswindow_register_page         (PrefsPage *);
-void prefswindow_unregister_page       (PrefsPage *);
-void prefswindow_create                        ();
-void prefswindow_destroy_all_pages     ();
+void prefswindow_open                  ();
 
 #endif
index e006583..7fbb37e 100644 (file)
@@ -84,7 +84,7 @@
 #include "selective_download.h"
 #include "ssl_manager.h"
 #include "sslcertwindow.h"
-#include "prefswindow.h"
+#include "prefs_gtk.h"
 #include "pluginwindow.h"
 
 #define AC_LABEL_WIDTH 240
@@ -2623,7 +2623,7 @@ static void account_menu_cb(GtkMenuItem   *menuitem, gpointer data)
 
 static void prefs_open_cb(GtkMenuItem *menuitem, gpointer data)
 {
-       prefswindow_create();
+       prefs_gtk_open();
 }
 
 static void plugins_open_cb(GtkMenuItem *menuitem, gpointer data)
index 1005f3c..5df8544 100644 (file)
@@ -31,7 +31,7 @@
 #include "common/utils.h"
 #include "prefs.h"
 #include "folder.h"
-#include "prefswindow.h"
+#include "prefs_gtk.h"
 #include "foldersel.h"
 #include "spamassassin.h"
 
@@ -62,7 +62,7 @@ static void foldersel_cb(GtkWidget *widget, gpointer data)
        }
 }
 
-static void spamassassin_create_widget_func(PrefsPage * _page)
+static void spamassassin_create_widget_func(PrefsPage * _page, gpointer data)
 {
        struct SpamAssassinPage *page = (struct SpamAssassinPage *) _page;
 
@@ -265,7 +265,7 @@ gint plugin_init(gchar **error)
        page->page.destroy_widget = spamassassin_destroy_widget_func;
        page->page.save_page = spamassassin_save_func;
        page->page.destroy_page = spamassassin_destroy_func;
-       prefswindow_register_page((PrefsPage *) page);
+       prefs_gtk_register_page((PrefsPage *) page);
 
        spamassassin_page = page;
 
@@ -275,7 +275,7 @@ gint plugin_init(gchar **error)
 
 void plugin_done()
 {
-       prefswindow_unregister_page((PrefsPage *) spamassassin_page);
+       prefs_gtk_unregister_page((PrefsPage *) spamassassin_page);
        g_free(spamassassin_page);
 
        debug_print("SpamAssassin GTK plugin unloaded\n");
index 7ee4238..24480bb 100644 (file)
@@ -691,3 +691,31 @@ void prefs_set_spinbtn(PrefParam *pparam)
                          pparam->type);
        }
 }
+
+static GSList *prefs_pages = NULL;
+
+void prefs_gtk_open()
+{
+       prefswindow_open(prefs_pages, NULL);
+}
+
+void prefs_gtk_register_page(PrefsPage *page)
+{
+       prefs_pages = g_slist_append(prefs_pages, page);
+}
+
+void prefs_gtk_unregister_page(PrefsPage *page)
+{
+       prefs_pages = g_slist_remove(prefs_pages, page);
+}
+
+void prefs_gtk_destroy_all_pages()
+{
+       GSList *cur;
+
+       for (cur = prefs_pages; cur != NULL; cur = g_slist_next(cur)) {
+               PrefsPage *page = (PrefsPage *) cur->data;
+
+               page->destroy_page(page);
+       }
+}
index f5de74f..9d0c4ea 100644 (file)
@@ -34,6 +34,7 @@ typedef struct _PrefsDialog   PrefsDialog;
 
 #include "prefs.h"
 #include "account.h"
+#include "gtk/prefswindow.h"
 
 #define VSPACING               10
 #define VSPACING_NARROW                4
@@ -167,4 +168,8 @@ void prefs_set_toggle               (PrefParam      *pparam);
 void prefs_set_data_from_spinbtn(PrefParam     *pparam);
 void prefs_set_spinbtn         (PrefParam      *pparam);
 
+void prefs_gtk_open            ();
+void prefs_gtk_register_page   (PrefsPage      *page);
+void prefs_gtk_unregister_page (PrefsPage      *page);
+
 #endif /* __PREFS_H__ */