0.9.10claws5
[claws.git] / src / folderview.c
index 82561cbccdd1c4709bb5190364f0e323c08f0c85..f556f1d1a8cba250f48f2110a100680d15026200 100644 (file)
@@ -264,9 +264,8 @@ void folderview_create_folder_node       (FolderView       *folderview,
                                          FolderItem       *item);
 gboolean folderview_update_folder       (gpointer          source,
                                          gpointer          userdata);
-gboolean folderview_update_item                 (gpointer          source,
+gboolean folderview_update_item_claws   (gpointer          source,
                                          gpointer          data);
-
 static void folderview_processing_cb(FolderView *folderview, guint action,
                                     GtkWidget *widget);
 static void folderview_move_to(FolderView *folderview, FolderItem *from_folder,
@@ -528,7 +527,7 @@ FolderView *folderview_create(void)
        folderview->folder_update_callback_id =
                hooks_register_hook(FOLDER_UPDATE_HOOKLIST, folderview_update_folder, (gpointer) folderview);
        folderview->folder_item_update_callback_id =
-               hooks_register_hook(FOLDER_ITEM_UPDATE_HOOKLIST, folderview_update_item, (gpointer) folderview);
+               hooks_register_hook(FOLDER_ITEM_UPDATE_HOOKLIST, folderview_update_item_claws, (gpointer) folderview);
 
        gtk_widget_show_all(scrolledwin);
 
@@ -1260,7 +1259,32 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
                folderview_update_node(folderview, node);
 }
 
-gboolean folderview_update_item(gpointer source, gpointer data)
+#if !CLAWS /* keep it here for syncs */
+void folderview_update_item(FolderItem *item, gboolean update_summary)
+{
+       GList *list;
+       FolderView *folderview;
+       GtkCTree *ctree;
+       GtkCTreeNode *node;
+
+       g_return_if_fail(item != NULL);
+
+       for (list = folderview_list; list != NULL; list = list->next) {
+               folderview = (FolderView *)list->data;
+               ctree = GTK_CTREE(folderview->ctree);
+
+               node = gtk_ctree_find_by_row_data(ctree, NULL, item);
+               if (node) {
+                       folderview_update_node(folderview, node);
+                       if (update_summary && folderview->opened == node)
+                               summary_show(folderview->summaryview,
+                                            item, FALSE);
+               }
+       }
+}
+#endif
+
+gboolean folderview_update_item_claws(gpointer source, gpointer data)
 {
        FolderItemUpdateData *update_info = (FolderItemUpdateData *)source;
        FolderView *folderview = (FolderView *)data;
@@ -1284,6 +1308,26 @@ gboolean folderview_update_item(gpointer source, gpointer data)
        return FALSE;
 }
 
+static void folderview_update_item_foreach_func(gpointer key, gpointer val,
+                                               gpointer data)
+{
+       /* 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;
+       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,
                                      GNode *gnode, GtkCTreeNode *cnode,
                                      gpointer data)
@@ -2062,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 could not be 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);
@@ -2093,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();
 }
 
@@ -2835,3 +2881,8 @@ static void folderview_drag_end_cb(GtkWidget          *widget,
        g_slist_free(folderview->nodes_to_recollapse);
        folderview->nodes_to_recollapse = NULL;
 }
+
+FolderItem *folderview_get_selected(FolderView *folderview)
+{
+       return (FolderItem *) gtk_ctree_node_get_row_data(folderview->ctree, folderview->opened);
+}