Pass PrefsWindow pointer instead of GtkWindow to prefswindow's open and close callbacks.
[claws.git] / src / prefs_folder_item.c
index 3402d0f5943ebe325bd79c9e053711d86160f4a6..37be0a2f7b95f6c154c3e51b47675410691f496a 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2012 Hiroyuki Yamamoto and the Claws Mail team
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2015 Hiroyuki Yamamoto and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -61,8 +61,6 @@
                string = (value); \
        }
 
-static void prefs_folder_item_register_page    (PrefsPage      *page);
-
 typedef struct _FolderItemGeneralPage FolderItemGeneralPage;
 typedef struct _FolderItemComposePage FolderItemComposePage;
 typedef struct _FolderItemTemplatesPage FolderItemTemplatesPage;
@@ -1396,6 +1394,7 @@ static void prefs_folder_item_templates_create_widget_func(PrefsPage * page_,
        page->item = item;
 
        page_vbox = gtk_vbox_new (FALSE, 0);
+       gtk_container_set_border_width (GTK_CONTAINER (page_vbox), VBOX_BORDER);
        gtk_widget_show (page_vbox);
        
        if (!can_save) {
@@ -1406,13 +1405,13 @@ static void prefs_folder_item_templates_create_widget_func(PrefsPage * page_,
                gtk_label_set_use_markup(GTK_LABEL(no_save_warning), TRUE);
                gtk_label_set_line_wrap(GTK_LABEL(no_save_warning), TRUE);
                gtk_misc_set_alignment(GTK_MISC(no_save_warning), 0.0, 0.5);
-               gtk_box_pack_start(GTK_BOX(page_vbox), no_save_warning, FALSE, FALSE, 4);
+               gtk_box_pack_start(GTK_BOX(page_vbox), no_save_warning, FALSE, FALSE, 0);
        }
 
        /* Notebook */
        notebook = gtk_notebook_new();
        gtk_widget_show(notebook);
-       gtk_box_pack_start(GTK_BOX(page_vbox), notebook, TRUE, TRUE, 0);
+       gtk_box_pack_start(GTK_BOX(page_vbox), notebook, TRUE, TRUE, 4);
 
        /* compose format */
        vbox = gtk_vbox_new (FALSE, VSPACING);
@@ -1822,7 +1821,7 @@ static void register_general_page()
         folder_item_general_page.page.destroy_widget = prefs_folder_item_general_destroy_widget_func;
         folder_item_general_page.page.save_page = prefs_folder_item_general_save_func;
         
-       prefs_folder_item_register_page((PrefsPage *) &folder_item_general_page);
+       prefs_folder_item_register_page((PrefsPage *) &folder_item_general_page, NULL);
 }
 
 
@@ -1839,7 +1838,7 @@ static void register_compose_page(void)
         folder_item_compose_page.page.destroy_widget = prefs_folder_item_compose_destroy_widget_func;
         folder_item_compose_page.page.save_page = prefs_folder_item_compose_save_func;
         
-       prefs_folder_item_register_page((PrefsPage *) &folder_item_compose_page);
+       prefs_folder_item_register_page((PrefsPage *) &folder_item_compose_page, NULL);
 }
 
 static void register_templates_page(void)
@@ -1855,24 +1854,26 @@ static void register_templates_page(void)
         folder_item_templates_page.page.destroy_widget = prefs_folder_item_templates_destroy_widget_func;
         folder_item_templates_page.page.save_page = prefs_folder_item_templates_save_func;
         
-       prefs_folder_item_register_page((PrefsPage *) &folder_item_templates_page);
+       prefs_folder_item_register_page((PrefsPage *) &folder_item_templates_page, NULL);
 }
 
 static GSList *prefs_pages = NULL;
 
-static void prefs_folder_item_address_completion_start(GtkWindow * window)
+static void prefs_folder_item_address_completion_start(PrefsWindow *window)
 {
-       address_completion_start(GTK_WIDGET(window));
+       address_completion_start(window->window);
 }
 
-static void prefs_folder_item_address_completion_end(GtkWindow * window)
+static void prefs_folder_item_address_completion_end(PrefsWindow *window)
 {
-       address_completion_end(GTK_WIDGET(window));
+       address_completion_end(window->window);
 }
 
 void prefs_folder_item_open(FolderItem *item)
 {
        gchar *id, *title;
+       GSList *pages;
+
        if (prefs_pages == NULL) {
                register_general_page();
                register_compose_page();
@@ -1886,17 +1887,34 @@ void prefs_folder_item_open(FolderItem *item)
                id = g_strdup(item->name);
                can_save = FALSE;
        }
+       
+       pages = g_slist_concat(
+                       g_slist_copy(prefs_pages),
+                       g_slist_copy(item->folder->klass->prefs_pages));
+
        title = g_strdup_printf (_("Properties for folder %s"), id);
        g_free (id);
-       prefswindow_open(title, prefs_pages, item,
+       prefswindow_open(title, pages, item,
                        &prefs_common.folderitemwin_width, &prefs_common.folderitemwin_height,
                        prefs_folder_item_address_completion_start,
                        prefs_folder_item_address_completion_end);
 
+       g_slist_free(pages);
        g_free (title);
 }
 
-static void prefs_folder_item_register_page(PrefsPage *page)
+void prefs_folder_item_register_page(PrefsPage *page, FolderClass *klass)
 {
-       prefs_pages = g_slist_append(prefs_pages, page);
+       if (klass != NULL)
+               klass->prefs_pages = g_slist_append(klass->prefs_pages, page);
+       else
+               prefs_pages = g_slist_append(prefs_pages, page);
+}
+
+void prefs_folder_item_unregister_page(PrefsPage *page, FolderClass *klass)
+{
+       if (klass != NULL)
+               klass->prefs_pages = g_slist_remove(klass->prefs_pages, page);
+       else
+               prefs_pages = g_slist_remove(prefs_pages, page);
 }