revise 'translatable string' policy
[claws.git] / src / folderview.c
index 5982381b22e3cdea6abdf07c401ff96997ff620e..08bd4249c63dadfb9a8a257675aa95ec2a81f37d 100644 (file)
@@ -1259,7 +1259,7 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
                folderview_update_node(folderview, node);
 }
 
-#if !CLAWS
+#if !CLAWS /* keep it here for syncs */
 void folderview_update_item(FolderItem *item, gboolean update_summary)
 {
        GList *list;
@@ -1308,34 +1308,24 @@ gboolean folderview_update_item_claws(gpointer source, gpointer data)
        return FALSE;
 }
 
-typedef struct FolderItemUpdateParams {
-       FolderView          *folderview;
-       FolderItemUpdateData data;
-} FolderItemUpdateParams;
-
 static void folderview_update_item_foreach_func(gpointer key, gpointer val,
                                                gpointer data)
 {
-       FolderItemUpdateParams *fum = (FolderItemUpdateParams *)data;
-       fum->data.item = (FolderItem *)key; 
-       folderview_update_item_claws(&fum->data, fum->folderview);
+       /* CLAWS: share this joy with other hook functions ... */
+       folder_item_update((FolderItem *)key, 
+                          (FolderItemUpdateFlags)GPOINTER_TO_INT(data));
 }
 
 void folderview_update_item_foreach(GHashTable *table, gboolean update_summary)
 {
        GList *list;
-
-       for (list = folderview_list; list != NULL; list = list->next) {
-               FolderItemUpdateParams data;
-               
-               data.folderview = (FolderView *)list->data;
-               /* FIXME: update_summary means update everything here? */
-               data.data.item = NULL;
-               data.data.update_flags = (update_summary 
-                       ? F_ITEM_UPDATE_CONTENT | F_ITEM_UPDATE_MSGCNT 
-                       : 0);
-               g_hash_table_foreach(table, folderview_update_item_foreach_func, &data);
-       }
+       FolderItemUpdateFlags flags;
+       
+       flags = update_summary ?  F_ITEM_UPDATE_CONTENT | F_ITEM_UPDATE_MSGCNT
+               : 0;
+       for (list = folderview_list; list != NULL; list = list->next)
+               g_hash_table_foreach(table, folderview_update_item_foreach_func, 
+                                    GINT_TO_POINTER(flags));
 }
 
 static gboolean folderview_gnode_func(GtkCTree *ctree, guint depth,
@@ -2116,13 +2106,14 @@ static void folderview_rename_folder_cb(FolderView *folderview, guint action,
        }
 
        Xstrdup_a(old_path, item->path, {g_free(new_folder); return;});
-       old_id = folder_item_get_identifier(item);
 
        if (item->folder->klass->rename_folder(item->folder, item, new_folder) < 0) {
-               g_free(old_id);
+               alertpanel_error(_("The folder could not be renamed.\n"
+                                  "The new folder name is not allowed."));
                return;
        }
 
+       old_id = folder_item_get_identifier(item);
        /* if (FOLDER_TYPE(item->folder) == F_MH)
                prefs_filtering_rename_path(old_path, item->path); */
        new_id = folder_item_get_identifier(item);
@@ -2147,7 +2138,8 @@ static void folderview_rename_folder_cb(FolderView *folderview, guint action,
        }
 
        gtk_clist_thaw(GTK_CLIST(ctree));
-
+       
+       folder_item_prefs_save_config(item);
        folder_write_list();
 }
 
@@ -2274,9 +2266,10 @@ static void folderview_rm_imap_server_cb(FolderView *folderview, guint action,
        }
 
        account = item->folder->account;
+       folderview_unselect(folderview);
+       summary_clear_all(folderview->summaryview);
        folder_destroy(item->folder);
        account_destroy(account);
-       gtk_ctree_remove_node(ctree, folderview->selected);
        account_set_menu();
        main_window_reflect_prefs_all();
        folder_write_list();
@@ -2286,6 +2279,7 @@ static void folderview_new_news_group_cb(FolderView *folderview, guint action,
                                         GtkWidget *widget)
 {
        GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+       gchar *text[N_FOLDER_COLS] = {NULL, "0", "0", "0"};
        GtkCTreeNode *servernode, *node;
        Folder *folder;
        FolderItem *item;
@@ -2350,11 +2344,20 @@ static void folderview_new_news_group_cb(FolderView *folderview, guint action,
                if (folder_find_child_item_by_name(rootitem, name) != NULL)
                        continue;
 
+               text[COL_FOLDER] = name;
+               node = gtk_ctree_insert_node(ctree, servernode, NULL, text,
+                                            FOLDER_SPACING,
+                                            folderxpm, folderxpmmask,
+                                            folderopenxpm, folderopenxpmmask,
+                                            FALSE, FALSE);
+               gtk_ctree_expand(ctree, servernode);
+
                newitem = folder_item_new(folder, name, name);
                folder_item_append(rootitem, newitem);
-               folderview_append_item(newitem);
+               gtk_ctree_node_set_row_data(ctree, node, newitem);
        }
 
+       folderview_sort_folders(folderview, servernode, folder);
        gtk_clist_thaw(GTK_CLIST(ctree));
 
        slist_free_strings(new_subscr);
@@ -2370,6 +2373,7 @@ static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
        FolderItem *item;
        gchar *name;
        gchar *message;
+       gchar *old_id;
        AlertValue avalue;
 
        if (!folderview->selected) return;
@@ -2380,6 +2384,8 @@ static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
        g_return_if_fail(FOLDER_TYPE(item->folder) == F_NEWS);
        g_return_if_fail(item->folder->account != NULL);
 
+       old_id = folder_item_get_identifier(item);
+
        name = trim_string(item->path, 32);
        message = g_strdup_printf(_("Really delete newsgroup `%s'?"), name);
        avalue = alertpanel(_("Delete newsgroup"), message,
@@ -2396,7 +2402,8 @@ static void folderview_rm_news_group_cb(FolderView *folderview, guint action,
        folder_item_remove(item);
        folder_write_list();
        
-       prefs_filtering_delete_path(name);
+       prefs_filtering_delete_path(old_id);
+       g_free(old_id);
 }
 
 static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
@@ -2435,9 +2442,10 @@ static void folderview_rm_news_server_cb(FolderView *folderview, guint action,
        }
 
        account = item->folder->account;
-       folder_destroy(item->folder);
+       folderview_unselect(folderview);
+       summary_clear_all(folderview->summaryview);
+       folder_destroy(item->folder);
        account_destroy(account);
-       gtk_ctree_remove_node(ctree, folderview->selected);
        account_set_menu();
        main_window_reflect_prefs_all();
        folder_write_list();
@@ -2845,9 +2853,7 @@ static void folderview_drag_received_cb(GtkWidget        *widget,
                                case GDK_ACTION_MOVE:
                                case GDK_ACTION_DEFAULT:
                                default:
-                       if (FOLDER_TYPE(src_item->folder) != FOLDER_TYPE(item->folder) ||
-                           (FOLDER_TYPE(item->folder) == F_IMAP &&
-                            src_item->folder != item->folder))
+                       if (FOLDER_TYPE(src_item->folder) == F_NEWS)
                                summary_copy_selected_to(folderview->summaryview, item);
                        else
                                summary_move_selected_to(folderview->summaryview, item);