preventive fix (missing check) found by Alfons
[claws.git] / src / folderview.c
index 98720f65b29894647b3b2ea4817634c8d261a064..cb042557795f291fc3d069d58ceed32001507587 100644 (file)
@@ -1662,7 +1662,6 @@ static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
                olditem = gtk_ctree_node_get_row_data(ctree, folderview->opened);
                if (olditem) {
                        /* will be null if we just moved the previously opened folder */
-                       folder_item_write_cache(olditem);
                        summary_save_prefs_to_folderitem(folderview->summaryview, olditem);
                        folder_item_close(olditem);
                }
@@ -2621,6 +2620,7 @@ static void folderview_drag_received_cb(GtkWidget        *widget,
                /* comes from folderview */
                char *source;
                char *buf;
+               gint status;
                GtkCTreeNode *src_node;
                FolderItem *new_item, *src_parent;
                
@@ -2635,7 +2635,7 @@ static void folderview_drag_received_cb(GtkWidget        *widget,
                item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node);
                src_item = folder_find_item_from_path(source);
 
-               if (!src_item || src_item->stype != F_NORMAL) {
+               if (!item || !src_item || src_item->stype != F_NORMAL) {
                        gtk_drag_finish(drag_context, FALSE, FALSE, time);                      
                        return;
                }
@@ -2651,7 +2651,7 @@ static void folderview_drag_received_cb(GtkWidget        *widget,
                gtk_widget_set_sensitive(folderview->ctree, FALSE);
                inc_lock();
                main_window_cursor_wait(folderview->mainwin);
-               if ((new_item = folder_item_move_to(src_item, item)) != NULL) {
+               if ((status = folder_item_move_to(src_item, item, &new_item)) == F_MOVE_OK) {
                        main_window_cursor_normal(folderview->mainwin);
                        gtk_drag_finish(drag_context, TRUE, TRUE, time);
                
@@ -2672,6 +2672,17 @@ static void folderview_drag_received_cb(GtkWidget        *widget,
                        main_window_cursor_normal(folderview->mainwin);
                        gtk_drag_finish(drag_context, FALSE, FALSE, time);
                        STATUSBAR_POP(folderview->mainwin);
+                       switch (status) {
+                       case F_MOVE_FAILED_DEST_IS_PARENT:
+                               alertpanel_error(_("Source and destination are the same."));
+                               break;
+                       case F_MOVE_FAILED_DEST_IS_CHILD:
+                               alertpanel_error(_("Can't move a folder to one of its children."));
+                               break;
+                       default:
+                               alertpanel_error(_("Move failed!"));
+                               break;
+                       }
                }       
                inc_unlock();           
                gtk_widget_set_sensitive(folderview->ctree, TRUE);