Allow custom window title for the folder selection dialog.
[claws.git] / src / mh_gtk.c
index cef0ed1e909218cbafde5cd1bdbee54dc73dbf90..605ef13fa20810a8bc82681ba590a740b6205ae8 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2011 Hiroyuki Yamamoto & the Claws Mail Team
+ * Copyright (C) 1999-2012 Hiroyuki Yamamoto & 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
@@ -19,6 +19,7 @@
 
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
+#include "claws-features.h"
 #endif
 
 #include "defs.h"
@@ -30,6 +31,7 @@
 
 #include "utils.h"
 #include "folder.h"
+#include "folder_item_prefs.h"
 #include "folderview.h"
 #include "menu.h"
 #include "account.h"
@@ -38,6 +40,7 @@
 #include "mh.h"
 #include "foldersel.h"
 #include "prefs_common.h"
+#include "prefs_actions.h"
 
 static void new_folder_cb(GtkAction *action, gpointer data);
 static void delete_folder_cb(GtkAction *action, gpointer data);
@@ -126,16 +129,15 @@ static void set_sensitivity(GtkUIManager *ui_manager, FolderItem *item)
 static void new_folder_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
        FolderItem *item;
        FolderItem *new_item;
        gchar *new_folder;
        gchar *name;
        gchar *p;
 
-       if (!folderview->selected) return;
+       if (!folderview_get_selected_item(folderview)) return;
 
-       item = gtk_cmctree_node_get_row_data(ctree, folderview->selected);
+       item = folderview_get_selected_item(folderview);
        cm_return_if_fail(item != NULL);
        cm_return_if_fail(item->folder != NULL);
 
@@ -154,6 +156,9 @@ static void new_folder_cb(GtkAction *action, gpointer data)
                return;
        }
 
+       if (!folder_local_name_ok(new_folder))
+               return;
+
        name = trim_string(new_folder, 32);
        AUTORELEASE_STR(name, {g_free(name); return;});
 
@@ -179,14 +184,15 @@ static void new_folder_cb(GtkAction *action, gpointer data)
 static void delete_folder_cb(GtkAction *action, gpointer data)
 {
        FolderView *folderview = (FolderView *)data;
-       GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
-       FolderItem *item;
+       FolderItem *item, *opened;
        gchar *message, *name;
        AlertValue avalue;
-       gchar *old_path;
        gchar *old_id;
+       gint ret;
 
        item = folderview_get_selected_item(folderview);
+       opened = folderview_get_opened_item(folderview);
+
        cm_return_if_fail(item != NULL);
        cm_return_if_fail(item->path != NULL);
        cm_return_if_fail(item->folder != NULL);
@@ -203,20 +209,18 @@ static void delete_folder_cb(GtkAction *action, gpointer data)
        g_free(message);
        if (avalue != G_ALERTALTERNATE) return;
 
-       Xstrdup_a(old_path, item->path, return);
        old_id = folder_item_get_identifier(item);
 
-       if (folderview->opened == folderview->selected ||
-           gtk_cmctree_is_ancestor(ctree,
-                                 folderview->selected,
-                                 folderview->opened)) {
+       if (item == opened ||
+                       folder_is_child_of(item, opened)) {
                summary_clear_all(folderview->summaryview);
-               folderview->opened = NULL;
+               folderview_close_opened(folderview, TRUE);
        }
 
-       if (item->folder->klass->remove_folder(item->folder, item) < 0) {
+       if ((ret = item->folder->klass->remove_folder(item->folder, item)) < 0) {
                folder_item_scan(item);
-               alertpanel_error(_("Can't remove the folder '%s'."), name);
+               alertpanel_error(_("Can't remove the folder '%s'\n\n%s."),
+                                name, g_strerror(-ret));
                g_free(old_id);
                return;
        }
@@ -235,7 +239,6 @@ static void rename_folder_cb(GtkAction *action, gpointer data)
        gchar *new_folder;
        gchar *name;
        gchar *message;
-       gchar *old_path;
        gchar *old_id;
        gchar *new_id;
        gchar *base;
@@ -261,6 +264,9 @@ static void rename_folder_cb(GtkAction *action, gpointer data)
                return;
        }
 
+       if (!folder_local_name_ok(new_folder))
+               return;
+
        if (folder_find_child_item_by_name(folder_item_parent(item), new_folder)) {
                name = trim_string(new_folder, 32);
                alertpanel_error(_("The folder '%s' already exists."), name);
@@ -268,8 +274,6 @@ static void rename_folder_cb(GtkAction *action, gpointer data)
                return;
        }
 
-       Xstrdup_a(old_path, item->path, {g_free(new_folder); return;});
-
        old_id = folder_item_get_identifier(item);
        
        if (folder_item_rename(item, new_folder) < 0) {
@@ -282,6 +286,7 @@ static void rename_folder_cb(GtkAction *action, gpointer data)
        new_id = folder_item_get_identifier(item);
        prefs_filtering_rename_path(old_id, new_id);
        account_rename_path(old_id, new_id);
+       prefs_actions_rename_path(old_id, new_id);
        g_free(old_id);
        g_free(new_id);
 
@@ -298,7 +303,12 @@ static void move_folder_cb(GtkAction *action, gpointer data)
        if (!from_folder || from_folder->folder->klass != mh_get_class())
                return;
 
-       to_folder = foldersel_folder_sel(from_folder->folder, FOLDER_SEL_MOVE, NULL, TRUE);
+       to_folder = foldersel_folder_sel(NULL, FOLDER_SEL_MOVE, NULL, TRUE,
+                       ngettext(
+                               "Select folder to move selected message to",
+                               "Select folder to move selected messages to",
+                               summary_get_selection_count(folderview->summaryview))
+       );
        if (!to_folder)
                return;
        
@@ -314,7 +324,12 @@ static void copy_folder_cb(GtkAction *action, gpointer data)
        if (!from_folder || from_folder->folder->klass != mh_get_class())
                return;
 
-       to_folder = foldersel_folder_sel(from_folder->folder, FOLDER_SEL_MOVE, NULL, TRUE);
+       to_folder = foldersel_folder_sel(NULL, FOLDER_SEL_MOVE, NULL, TRUE,
+                       ngettext(
+                               "Select folder to copy selected message to",
+                               "Select folder to copy selected messages to",
+                               summary_get_selection_count(folderview->summaryview))
+       );
        if (!to_folder)
                return;
        
@@ -356,7 +371,7 @@ static void remove_mailbox_cb(GtkAction *action, gpointer data)
 
        name = trim_string(item->folder->name, 32);
        message = g_markup_printf_escaped
-               (_("Really remove the mailbox '%s' ?\n"
+               (_("Really remove the mailbox '%s'?\n"
                   "(The messages are NOT deleted from the disk)"), name);
        avalue = alertpanel_full(_("Remove mailbox"), message,
                                 GTK_STOCK_CANCEL, _("_Remove"), NULL, FALSE,