* src/folder.c
[claws.git] / src / folder.c
index 931dd42548192848b553c6f0a694e783f41814ae..1136b92624fd03af4c42ec81749921474a3b9cf4 100644 (file)
@@ -968,21 +968,24 @@ void folder_item_close(FolderItem *item)
        GSList *mlist, *cur;
        
        g_return_if_fail(item != NULL);
-       
-       mlist = folder_item_get_msg_list(item);
-       
-       for (cur = mlist ; cur != NULL ; cur = cur->next) {
-               MsgInfo * msginfo;
 
-               msginfo = (MsgInfo *) cur->data;
-               if (MSG_IS_NEW(msginfo->flags))
-                       procmsg_msginfo_unset_flags(msginfo, MSG_NEW, 0);
-               procmsg_msginfo_free(msginfo);
-       }
+       if (item->new) {
+               mlist = folder_item_get_msg_list(item);
+               for (cur = mlist ; cur != NULL ; cur = cur->next) {
+                       MsgInfo * msginfo;
+
+                       msginfo = (MsgInfo *) cur->data;
+                       if (MSG_IS_NEW(msginfo->flags))
+                               procmsg_msginfo_unset_flags(msginfo, MSG_NEW, 0);
+                       procmsg_msginfo_free(msginfo);
+               }
+               g_slist_free(mlist);
+       }               
+
+       folder_item_write_cache(item);
        
        folder_update_item(item, FALSE);
 
-       g_slist_free(mlist);
 }
 
 gint folder_item_scan(FolderItem *item)
@@ -2009,17 +2012,18 @@ gint folder_item_remove_msgs(FolderItem *item, GSList *msglist)
        gint ret = 0;
 
        g_return_val_if_fail(item != NULL, -1);
-       
        folder = item->folder;
+       g_return_val_if_fail(folder != NULL, -1);
+
+       if (!item->cache) folder_item_read_cache(item);
+
        if (folder->remove_msgs) {
                ret = folder->remove_msgs(folder, item, msglist);
                if (ret == 0)
-                       folder->scan(folder);
+                       folder_item_scan(item);
                return ret;
        }
 
-       if (!item->cache) folder_item_read_cache(item);
-
        while (msglist != NULL) {
                MsgInfo *msginfo = (MsgInfo *)msglist->data;
 
@@ -2372,7 +2376,7 @@ static void folder_write_list_recursive(GNode *node, gpointer data)
                fprintf(fp, "<folder type=\"%s\"", folder_type_str[folder->type]);
                if (folder->name)
                        PUT_ESCAPE_STR(fp, "name", folder->name);
-               if ((folder->type == F_MH) || (folder->type == F_MBOX))
+               if (folder->type == F_MH || folder->type == F_MBOX)
                        PUT_ESCAPE_STR(fp, "path",
                                       LOCAL_FOLDER(folder)->rootpath);
                if (item->collapsed && node->children)
@@ -2682,6 +2686,9 @@ void folder_item_apply_processing(FolderItem *item)
        g_slist_free(mlist);
 }
 
+/*
+ *  Callback handling for FolderItem content changes
+ */
 GSList *folder_item_update_callbacks_list = NULL;
 gint   folder_item_update_callbacks_nextid = 0;
 
@@ -2746,12 +2753,10 @@ void folder_update_item(FolderItem *item, gboolean contentchange)
        folder_item_update_callback_execute(item, contentchange);
 }
 
-static void folder_update_item_func(FolderItem *item, gpointer data)
+static void folder_update_item_func(FolderItem *item, gpointer contentchange)
 {
-       gboolean contentchange = GPOINTER_TO_INT(data);
-       
        if (item->need_update) {
-               folder_item_update_callback_execute(item, contentchange);
+               folder_item_update_callback_execute(item, GPOINTER_TO_INT(contentchange));
                item->need_update = FALSE;
        }
 }