aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ChangeLog.ja6
-rw-r--r--libsylph/virtual.c25
-rw-r--r--src/folderview.c41
4 files changed, 67 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 98615505..660cc79e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-05
+
+ * libsylph/virtual.c
+ src/folderview.c: fixed a bug that search folders under IMAP4 or
+ NNTP folders couldn't be removed.
+
2005-12-27
* libsylph/procmsg.[ch]
diff --git a/ChangeLog.ja b/ChangeLog.ja
index ab4d398c..000a3698 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,3 +1,9 @@
+2006-01-05
+
+ * libsylph/virtual.c
+ src/folderview.c: IMAP4 または NNTP フォルダ以下の検索フォルダを
+ 削除できないバグを修正。
+
2005-12-27
* libsylph/procmsg.[ch]
diff --git a/libsylph/virtual.c b/libsylph/virtual.c
index 5a2778d7..388e4d9c 100644
--- a/libsylph/virtual.c
+++ b/libsylph/virtual.c
@@ -102,6 +102,9 @@ static gint virtual_close (Folder *folder,
static gint virtual_scan_folder (Folder *folder,
FolderItem *item);
+static gint virtual_remove_folder (Folder *folder,
+ FolderItem *item);
+
static FolderClass virtual_class =
{
F_VIRTUAL,
@@ -131,7 +134,7 @@ static FolderClass virtual_class =
NULL,
NULL,
NULL,
- NULL,
+ virtual_remove_folder,
};
@@ -526,6 +529,24 @@ static gint virtual_close(Folder *folder, FolderItem *item)
static gint virtual_scan_folder(Folder *folder, FolderItem *item)
{
- /* do search */
+ return 0;
+}
+
+static gint virtual_remove_folder(Folder *folder, FolderItem *item)
+{
+ gchar *path;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->stype == F_VIRTUAL, -1);
+
+ path = folder_item_get_path(item);
+ if (remove_dir_recursive(path) < 0) {
+ g_warning("can't remove directory '%s'\n", path);
+ g_free(path);
+ return -1;
+ }
+
+ g_free(path);
+ folder_item_remove(item);
return 0;
}
diff --git a/src/folderview.c b/src/folderview.c
index ba3838b3..a270a1bd 100644
--- a/src/folderview.c
+++ b/src/folderview.c
@@ -65,6 +65,7 @@
#include "account_dialog.h"
#include "folder.h"
#include "inc.h"
+#include "virtual.h"
enum
{
@@ -2291,13 +2292,23 @@ static void folderview_delete_folder_cb(FolderView *folderview, guint action,
name = trim_string(item->name, 32);
AUTORELEASE_STR(name, {g_free(name); gtk_tree_path_free(sel_path); return;});
- message = g_strdup_printf
- (_("All folders and messages under `%s' will be permanently deleted.\n"
- "Recovery will not be possible.\n\n"
- "Do you really want to delete?"), name);
- avalue = alertpanel_full(_("Delete folder"), message,
- ALERT_WARNING, G_ALERTALTERNATE, FALSE,
- GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ if (item->stype == F_VIRTUAL) {
+ message = g_strdup_printf
+ (_("The search folder '%s' will be deleted.\n"
+ "The real messages are not deleted.\n"
+ "Really delete it?"), name);
+ avalue = alertpanel_full(_("Delete search folder"), message,
+ ALERT_WARNING, G_ALERTALTERNATE, FALSE,
+ GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ } else {
+ message = g_strdup_printf
+ (_("All folders and messages under '%s' will be permanently deleted.\n"
+ "Recovery will not be possible.\n\n"
+ "Do you really want to delete?"), name);
+ avalue = alertpanel_full(_("Delete folder"), message,
+ ALERT_WARNING, G_ALERTALTERNATE, FALSE,
+ GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ }
g_free(message);
if (avalue != G_ALERTDEFAULT) {
gtk_tree_path_free(sel_path);
@@ -2321,8 +2332,15 @@ static void folderview_delete_folder_cb(FolderView *folderview, guint action,
gtk_tree_path_free(open_path);
gtk_tree_path_free(sel_path);
- if (folder->klass->remove_folder(folder, item) < 0) {
- alertpanel_error(_("Can't remove the folder `%s'."), name);
+ if (item->stype == F_VIRTUAL) {
+ if (virtual_get_class()->remove_folder(folder, item) < 0) {
+ alertpanel_error(_("Can't remove the folder '%s'."),
+ name);
+ g_free(old_id);
+ return;
+ }
+ } else if (folder->klass->remove_folder(folder, item) < 0) {
+ alertpanel_error(_("Can't remove the folder '%s'."), name);
g_free(old_id);
return;
}
@@ -2591,6 +2609,11 @@ static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
if (!item)
return;
+ if (item->stype == F_VIRTUAL) {
+ folderview_delete_folder_cb(folderview, 0, widget);
+ return;
+ }
+
g_return_if_fail(item->folder != NULL);
g_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS);
g_return_if_fail(item->folder->account != NULL);