* sync with main changes of 2002-10-07
authorAlfons Hoogervorst <alfons@proteus.demon.nl>
Sun, 13 Oct 2002 15:43:22 +0000 (15:43 +0000)
committerAlfons Hoogervorst <alfons@proteus.demon.nl>
Sun, 13 Oct 2002 15:43:22 +0000 (15:43 +0000)
ChangeLog
ChangeLog.claws
ChangeLog.jp
configure.in
src/account.c
src/account.h
src/folder.c
src/folder.h
src/folderview.c
src/mainwindow.c

index 1c028e63310e8c1a8c448db0ef5f6dc8c4f9ff91..2d22e6ccaf6990bd58520a8464f48b2d8e3c6e96 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2002-10-07
+       * src/account.[ch]: account_open(): new. It opens account prefs
+         dialog and reflects to UI when finished.
+       * src/folderview.c:
+         folderview_button_pressed()
+         folderview_property_cb(): open account prefs dialog when the
+         property of the root folder of remote account is requested.
+
+2002-10-07
+
+       * src/account.c: account_destroy(): unref account information in
+         folders.
+       * src/folder.[ch]: folder_unref_account_all(): new. It unref the
+         specified account information in all folders.
+       * src/folderview.c:
+         folderview_rm_imap_server_cb()
+         folderview_rm_news_server_cb(): destroy Folder first because
+         folder_destroy() refers to account information.
+
 2002-10-04
 
        * src/account.c: account_find_from_item(): fixed a bug which didn't
index dc4ad80974b8bf762ac76e02f220f76f21b2cb4d..6dbb9ae16f54524e57b43251f86bdf1347190c95 100644 (file)
@@ -1,3 +1,7 @@
+2002-10-12 [alfons]    0.8.5claws28
+       
+       * sync with main changes of 2002-10-07
+
 2002-10-12 [alfons]    0.8.5claws27
 
        * sync with main changes of 2002-10-04
index 3452a8b4c275aeddc725bcce670b1e5033a2c41b..28c80cf141d72de3f36e0a5a385290928d42f894 100644 (file)
@@ -1,3 +1,23 @@
+2002-10-07
+       * src/account.[ch]: account_open(): ¿·µ¬¡£¥¢¥«¥¦¥ó¥ÈÀßÄê¥À¥¤¥¢¥í¥°
+         ¤ò³«¤­¡¢½ªÎ»»þ¤Ë UI ¤ËÈ¿±Ç¤µ¤»¤ë¡£
+       * src/folderview.c:
+         folderview_button_pressed()
+         folderview_property_cb(): ¥ê¥â¡¼¥È¥¢¥«¥¦¥ó¥È¤Î¥ë¡¼¥È¥Õ¥©¥ë¥À¤Î
+         ¥×¥í¥Ñ¥Æ¥£¤òÍ׵ᤵ¤ì¤¿¤é¥¢¥«¥¦¥ó¥ÈÀßÄê¥À¥¤¥¢¥í¥°¤ò³«¤¯¤è¤¦¤Ë¤·¤¿¡£
+
+2002-10-07
+
+       * src/account.c: account_destroy(): ¥Õ¥©¥ë¥ÀÃæ¤Î¥¢¥«¥¦¥ó¥È¾ðÊó¤Ø¤Î
+         »²¾È¤ò²ò½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£
+       * src/folder.[ch]: folder_unref_account_all(): ¿·µ¬¡£Á´¥Õ¥©¥ë¥ÀÃæ
+         ¤Î»ØÄꤷ¤¿¥¢¥«¥¦¥ó¥È¾ðÊó¤Ø¤Î»²¾È¤ò²ò½ü¤¹¤ë¡£
+       * src/folderview.c:
+         folderview_rm_imap_server_cb()
+         folderview_rm_news_server_cb(): folder_destroy() ¤¬¥¢¥«¥¦¥ó¥È¾ðÊó
+         ¤ò»²¾È¤·¤Æ¤¤¤ë¤¿¤á Folder ¤òÀè¤Ëºï½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£
+
 2002-10-04
 
        * src/account.c: account_find_from_item(): Àµ¤·¤¤¥¢¥«¥¦¥ó¥È¤òÁªÂò
index 5aa4383fdf7b367c62a352151b591dc78e3f6d06..324182b1c13ffe2f5d4f1f4bb5246e67791c11a7 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=8
 MICRO_VERSION=5
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws27
+EXTRA_VERSION=claws28
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index 37f84e2b9a4dd1b84b6c9aef263390a17bc069c3..6b3ff202c64a43cbeb190261cda29bd67b69b41b 100644 (file)
@@ -356,6 +356,33 @@ void account_add(void)
        }
 }
 
+void account_open(PrefsAccount *ac_prefs)
+{
+       gboolean prev_default;
+       gchar *ac_name;
+
+       g_return_if_fail(ac_prefs != NULL);
+
+       prev_default = ac_prefs->is_default;
+       Xstrdup_a(ac_name, ac_prefs->account_name ? ac_prefs->account_name : "",
+                 return);
+
+       prefs_account_open(ac_prefs);
+
+       if (!prev_default && ac_prefs->is_default)
+               account_set_as_default(ac_prefs);
+
+       if (ac_prefs->folder && strcmp2(ac_name, ac_prefs->account_name) != 0) {
+               folder_set_name(FOLDER(ac_prefs->folder),
+                               ac_prefs->account_name);
+               folderview_set_all();
+       }
+
+       account_save_config_all();
+       account_set_menu();
+       main_window_reflect_prefs_all();
+}
+
 void account_set_as_default(PrefsAccount *ac_prefs)
 {
        PrefsAccount *ap;
@@ -466,6 +493,8 @@ void account_destroy(PrefsAccount *ac_prefs)
 {
        g_return_if_fail(ac_prefs != NULL);
 
+       folder_unref_account_all(ac_prefs);
+
        prefs_account_free(ac_prefs);
        account_list = g_list_remove(account_list, ac_prefs);
 
@@ -655,22 +684,8 @@ static void account_edit_prefs(void)
 
        row = GPOINTER_TO_INT(clist->selection->data);
        ac_prefs = gtk_clist_get_row_data(clist, row);
-       prev_default = ac_prefs->is_default;
-       Xstrdup_a(ac_name, ac_prefs->account_name ? ac_prefs->account_name : "",
-                 return);
-
-       prefs_account_open(ac_prefs);
-
-       if (!prev_default && ac_prefs->is_default)
-               account_set_as_default(ac_prefs);
-
-       if ((ac_prefs->protocol == A_IMAP4 || ac_prefs->protocol == A_NNTP) &&
-           ac_prefs->folder && strcmp2(ac_name, ac_prefs->account_name) != 0) {
-               folder_set_name(FOLDER(ac_prefs->folder),
-                               ac_prefs->account_name);
-               folderview_set_all();
-       }
-
+       account_open(ac_prefs);
+       
        account_clist_set();
 }
 
index 47d157d2572ba78e656c7477c3b27a4eb08e050e..ba0e90b90862c5759a79b5d284f365bf51daa0e2 100644 (file)
@@ -50,6 +50,7 @@ GList      *account_get_list          (void);
 
 void         account_edit_open         (void);
 void         account_add               (void);
+void         account_open              (PrefsAccount   *ac_prefs);
 void         account_set_as_default    (PrefsAccount   *ac_prefs);
 void         account_set_as_recv_at_get_all    (PrefsAccount   *ac_prefs);
 PrefsAccount *account_get_default      (void);
index 84918a89d5060433a570be3a9e164140839e40e5..aee1c4c57461afb07df2a4c84972847f79d03334 100644 (file)
@@ -795,6 +795,33 @@ void folder_set_missing_folders(void)
        }
 }
 
+static gboolean folder_unref_account_func(GNode *node, gpointer data)
+{
+       FolderItem *item = node->data;
+       PrefsAccount *account = data;
+
+       if (item->account == account)
+               item->account = NULL;
+
+       return FALSE;
+}
+
+void folder_unref_account_all(PrefsAccount *account)
+{
+       Folder *folder;
+       GList *list;
+
+       if (!account) return;
+
+       for (list = folder_list; list != NULL; list = list->next) {
+               folder = list->data;
+               if (folder->account == account)
+                       folder->account = NULL;
+               g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+                               folder_unref_account_func, account);
+       }
+}
+
 #undef CREATE_FOLDER_IF_NOT_EXIST
 
 gchar *folder_get_path(Folder *folder)
index d0862c2cc78a9ae6d28d96968716e6d89d89e146..e606a13b02a803c8a4e9de9e29ce1f9f929624db 100644 (file)
@@ -328,6 +328,7 @@ FolderItem *folder_get_default_queue        (void);
 FolderItem *folder_get_default_trash   (void);
 FolderItem *folder_get_default_processing (void);
 void folder_set_missing_folders                (void);
+void folder_unref_account_all          (PrefsAccount   *account);
 
 gchar *folder_get_path                 (Folder         *folder);
 gchar *folder_item_get_path            (FolderItem     *item);
index 59ebec08cc3ec395e8ab34557d97ccbe71c03d96..d355e4766b0173d27a798331acb1b712a763f875 100644 (file)
@@ -1514,10 +1514,13 @@ static void folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event,
 
        if (folderview->mainwin->lock_count == 0) {
                new_folder = TRUE;
-               if (item->parent == NULL)
+               if (item->parent == NULL) {
                        update_tree = remove_tree = TRUE;
-               else
+                       if (folder->account)
+                               folder_property = TRUE;
+               } else
                        mark_all_read = search_folder = folder_property = TRUE;
+                       
                if (FOLDER_IS_LOCAL(folder) || FOLDER_TYPE(folder) == F_IMAP || FOLDER_TYPE(folder) == F_MBOX) {
                        if (item->parent == NULL)
                                update_tree = rescan_tree = TRUE;
@@ -2290,6 +2293,7 @@ static void folderview_rm_imap_server_cb(FolderView *folderview, guint action,
 {
        GtkCTree *ctree = GTK_CTREE(folderview->ctree);
        FolderItem *item;
+       PrefsAccount *account;
        gchar *name, *name_;
        gchar *message;
        AlertValue avalue;
@@ -2320,8 +2324,9 @@ static void folderview_rm_imap_server_cb(FolderView *folderview, guint action,
                folderview->opened = NULL;
        }
 
-       account_destroy(item->folder->account);
+       account = item->folder->account;
        folder_destroy(item->folder);
+       account_destroy(account);
        gtk_ctree_remove_node(ctree, folderview->selected);
        account_set_menu();
        main_window_reflect_prefs_all();
@@ -2460,6 +2465,7 @@ static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
 {
        GtkCTree *ctree = GTK_CTREE(folderview->ctree);
        FolderItem *item;
+       PrefsAccount *account;
        gchar *name, *name_;
        gchar *message;
        AlertValue avalue;
@@ -2490,8 +2496,9 @@ static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
                folderview->opened = NULL;
        }
 
-       account_destroy(item->folder->account);
-       folder_destroy(item->folder);
+       account = item->folder->account;
+       folder_destroy(item->folder);
+       account_destroy(account);
        gtk_ctree_remove_node(ctree, folderview->selected);
        account_set_menu();
        main_window_reflect_prefs_all();
@@ -2522,7 +2529,10 @@ static void folderview_property_cb(FolderView *folderview, guint action,
        /*
         * CLAWS: wait till Hiro has completed his stuff
         */
-       prefs_folder_item_open(item);
+       if (item->parent == NULL && item->folder->account)
+               account_open(item->folder->account);
+       else
+               prefs_folder_item_open(item);
 #endif 
 }
 
index acdf385608f6ab0dbabf55b3be1247eb62fd2f62..d36245b387f379836384b209f02e8c05e5c86ce0 100644 (file)
@@ -3501,14 +3501,7 @@ static void prefs_account_open_cb(MainWindow *mainwin, guint action,
        if (!cur_account) {
                new_account_cb(mainwin, 0, widget);
        } else {
-               gboolean prev_default = cur_account->is_default;
-
-               prefs_account_open(cur_account);
-               if (!prev_default && cur_account->is_default)
-                       account_set_as_default(cur_account);
-               account_save_config_all();
-               account_set_menu();
-               main_window_reflect_prefs_all();
+               account_open(cur_account);
        }
 }