commit fcb417604c8715dadd5d2fdb10a298869b993f7c
parent d64fc5305c26760c3f0d2a797551f41459682c0d
Author: Colin Leroy <colin@colino.net>
Date: Mon, 31 Mar 2008 07:00:48 +0000
2008-03-31 [colin] 3.3.1cvs47
* src/folder.c
Fix bug 1553, 'File lock not respected'
Regression due to the implementation of
deletion batching
Diffstat:
4 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,10 @@
+2008-03-31 [colin] 3.3.1cvs47
+
+ * src/folder.c
+ Fix bug 1553, 'File lock not respected'
+ Regression due to the implementation of
+ deletion batching
+
2008-03-31 [colin] 3.3.1cvs46
* src/mainwindow.c
diff --git a/PATCHSETS b/PATCHSETS
@@ -3281,3 +3281,4 @@
( cvs diff -u -r 1.5.2.10 -r 1.5.2.11 src/common/prefs.c; cvs diff -u -r 1.1.4.8 -r 1.1.4.9 src/common/xmlprops.c; ) > 3.3.1cvs44.patchset
( cvs diff -u -r 1.105.2.129 -r 1.105.2.130 src/prefs_account.c; cvs diff -u -r 1.204.2.162 -r 1.204.2.163 src/prefs_common.c; cvs diff -u -r 1.52.2.61 -r 1.52.2.62 src/prefs_folder_item.c; cvs diff -u -r 1.1.2.28 -r 1.1.2.29 src/prefs_quote.c; cvs diff -u -r 1.8.2.32 -r 1.8.2.33 src/quote_fmt.c; cvs diff -u -r 1.5.12.17 -r 1.5.12.18 src/quote_fmt.h; ) > 3.3.1cvs45.patchset
( cvs diff -u -r 1.274.2.238 -r 1.274.2.239 src/mainwindow.c; ) > 3.3.1cvs46.patchset
+( cvs diff -u -r 1.213.2.179 -r 1.213.2.180 src/folder.c; ) > 3.3.1cvs47.patchset
diff --git a/configure.ac b/configure.ac
@@ -11,7 +11,7 @@ MINOR_VERSION=3
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=46
+EXTRA_VERSION=47
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
diff --git a/src/folder.c b/src/folder.c
@@ -3568,6 +3568,7 @@ gint folder_item_remove_msgs(FolderItem *item, GSList *msglist)
{
Folder *folder;
gint ret = 0;
+ GSList *real_list = NULL, *cur = NULL;
g_return_val_if_fail(item != NULL, -1);
folder = item->folder;
@@ -3578,24 +3579,35 @@ gint folder_item_remove_msgs(FolderItem *item, GSList *msglist)
if (!item->cache) folder_item_read_cache(item);
folder_item_update_freeze();
+
+ /* filter out locked mails */
+ for (cur = msglist; cur; cur = cur->next) {
+ MsgInfo *info = (MsgInfo *)cur->data;
+ if (!MSG_IS_LOCKED(info->flags))
+ real_list = g_slist_prepend(real_list, info);
+ }
+
+ real_list = g_slist_reverse(real_list);
+
if (item->folder->klass->remove_msgs) {
ret = item->folder->klass->remove_msgs(item->folder,
item,
- msglist,
+ real_list,
NULL);
}
- while (ret == 0 && msglist != NULL) {
- MsgInfo *msginfo = (MsgInfo *)msglist->data;
+ while (ret == 0 && real_list != NULL) {
+ MsgInfo *msginfo = (MsgInfo *)real_list->data;
if (msginfo && MSG_IS_LOCKED(msginfo->flags)) {
- msglist = msglist->next;
+ real_list = real_list->next;
continue;
}
if (!item->folder->klass->remove_msgs)
ret = folder_item_remove_msg(item, msginfo->msgnum);
if (ret != 0) break;
msgcache_remove_msg(item->cache, msginfo->msgnum);
- msglist = msglist->next;
+ real_list = real_list->next;
}
+ g_slist_free(real_list);
folder_item_scan_full(item, FALSE);
folder_item_update_thaw();
inc_unlock();