CVS: sylpheedclaws/sylpheed-claws/src folder.c,1.213.2.126,1.213.2.127 folder.h,1.87.2.33,1.87.2.34 folderview.c,1.207.2.138,1.207.2.139 folderview.h,1.20.2.14,1.20.2.15 imap_gtk.c,1.1.2.32,1.1.2.33 mh_gtk.c,1.2.2.22,1.2.2.23

[email protected] Tue, 26 Dec 2006 21:34:05 +0000
Newsgroups gmane.mail.sylpheed.claws.cvs
Message-ID <[email protected]>
Update of /pack/anoncvs/sylpheedclaws/sylpheed-claws/src
In directory sunsite.dk:/tmp/cvs-serv24243/src

Modified Files:
      Tag: gtk2
	folder.c folder.h folderview.c folderview.h imap_gtk.c 
	mh_gtk.c 
Log Message:
2006-12-26 [colin]	2.6.1cvs75

	* src/folder.c
	* src/folder.h
	* src/folderview.c
	* src/folderview.h
	* src/imap_gtk.c
	* src/mh_gtk.c
		Make it possible to copy folders accross
		mailboxes (this was an arbitrary limitation).
		Still make it impossible to move folders 
		accross mailboxes.

Index: folder.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/folder.c,v
retrieving revision 1.213.2.126
retrieving revision 1.213.2.127
diff -u -d -r1.213.2.126 -r1.213.2.127
--- folder.c	2006/12/21 07:58:06	1.213.2.126
+++ folder.c	2006/12/26 21:33:58	1.213.2.127
@@ -2780,7 +2780,7 @@
         return lastnum;
 }
 		
-FolderItem *folder_item_move_recursive(FolderItem *src, FolderItem *dest) 
+static FolderItem *folder_item_move_recursive(FolderItem *src, FolderItem *dest, gboolean copy) 
 {
 	GSList *mlist;
 	FolderItem *new_item;
@@ -2789,7 +2789,7 @@
 	gchar *old_id, *new_id;
 
 	/* move messages */
-	debug_print("Moving %s to %s\n", src->path, dest->path);
+	debug_print("%s %s to %s\n", copy?"Copying":"Moving", src->path, dest->path);
 	new_item = folder_create_folder(dest, src->name);
 	if (new_item == NULL) {
 		printf("Can't create folder\n");
@@ -2800,13 +2800,16 @@
 		new_item->folder = dest->folder;
 
 	/* move messages */
-	log_message(_("Moving %s to %s...\n"), 
+	log_message(copy ?_("Copying %s to %s...\n"):_("Moving %s to %s...\n"), 
 			src->name, new_item->path);
 
 	mlist = folder_item_get_msg_list(src);
 	
 	if (mlist != NULL) {
-		folder_item_move_msgs(new_item, mlist);
+		if (copy)
+			folder_item_copy_msgs(new_item, mlist);
+		else
+			folder_item_move_msgs(new_item, mlist);
 		procmsg_msg_list_free(mlist);
 	}
 	
@@ -2836,7 +2839,7 @@
 		if (srcnode && srcnode->data) {
 			next_item = (FolderItem*) srcnode->data;
 			srcnode = srcnode->next;
-			if (folder_item_move_recursive(next_item, new_item) == NULL) {
+			if (folder_item_move_recursive(next_item, new_item, copy) == NULL) {
 				return NULL;
 			}
 		}
@@ -2846,7 +2849,7 @@
 	debug_print("updating rules : %s => %s\n", old_id, new_id);
 
 	/* if src supports removing, otherwise only copy folder */
-	if (src->folder->klass->remove_folder != NULL)	
+	if (src->folder->klass->remove_folder != NULL && !copy)	
 		src->folder->klass->remove_folder(src->folder, src);
 	folder_write_list();
 
@@ -2860,12 +2863,12 @@
 	return new_item;
 }
 
-gint folder_item_move_to(FolderItem *src, FolderItem *dest, FolderItem **new_item)
+gint folder_item_move_to(FolderItem *src, FolderItem *dest, FolderItem **new_item, gboolean copy)
 {
 	FolderItem *tmp = folder_item_parent(dest);
 	gchar * src_identifier, * dst_identifier;
 	gchar * phys_srcpath, * phys_dstpath, *tmppath;
-	
+
 	while (tmp) {
 		if (tmp == src) {
 			return F_MOVE_FAILED_DEST_IS_CHILD;
@@ -2887,7 +2890,7 @@
 		return F_MOVE_FAILED;
 	}
 
-	if (src->folder != dest->folder) {
+	if (src->folder != dest->folder && !copy) {
 		return F_MOVE_FAILED_DEST_OUTSIDE_MAILBOX;
 	}
 
@@ -2907,7 +2910,7 @@
 		return F_MOVE_FAILED_DEST_IS_PARENT;
 	}
 	debug_print("moving \"%s\" to \"%s\"\n", phys_srcpath, phys_dstpath);
-	if ((tmp = folder_item_move_recursive(src, dest)) == NULL) {
+	if ((tmp = folder_item_move_recursive(src, dest, copy)) == NULL) {
 		return F_MOVE_FAILED;
 	}
 	

Index: folder.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/folder.h,v
retrieving revision 1.87.2.33
retrieving revision 1.87.2.34
diff -u -d -r1.87.2.33 -r1.87.2.34
--- folder.h	2006/11/07 10:38:51	1.87.2.33
+++ folder.h	2006/12/26 21:33:58	1.87.2.34
@@ -798,7 +798,8 @@
                                          gboolean        remove_source);
 gint   folder_item_move_to		(FolderItem	*src,
 					 FolderItem	*dest,
-					 FolderItem    **new_item);
+					 FolderItem    **new_item,
+					 gboolean	 copy);
 gint   folder_item_move_msg		(FolderItem	*dest,
 					 MsgInfo	*msginfo);
 gint   folder_item_move_msgs		(FolderItem	*dest,

Index: folderview.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/folderview.c,v
retrieving revision 1.207.2.138
retrieving revision 1.207.2.139
diff -u -d -r1.207.2.138 -r1.207.2.139
--- folderview.c	2006/12/15 10:03:15	1.207.2.138
+++ folderview.c	2006/12/26 21:33:59	1.207.2.139
@@ -2422,7 +2422,7 @@
 }
 
 void folderview_move_folder(FolderView *folderview, FolderItem *from_folder,
-		            FolderItem *to_folder)
+		            FolderItem *to_folder, gboolean copy)
 {
 	FolderItem *from_parent = NULL;
 	FolderItem *new_folder = NULL;
@@ -2438,10 +2438,10 @@
 	from_parent = folder_item_parent(from_folder);
 	
 	if (prefs_common.warn_dnd) {
-		buf = g_strdup_printf(_("Do you really want to make folder '%s' a "
-					"sub-folder of '%s' ?"), from_folder->name,
-					to_folder->name);
-		status = alertpanel_full(_("Move folder"), buf,
+		buf = g_strdup_printf(copy ? _("Do you really want to copy folder '%s' in '%s' ?"):
+					     _("Do you really want to make folder '%s' a sub-folder of '%s' ?"), 
+					from_folder->name, to_folder->name);
+		status = alertpanel_full(copy ? _("Copy folder"):_("Move folder"), buf,
 				       	 GTK_STOCK_NO, GTK_STOCK_YES, NULL, TRUE,
 				       	 NULL, ALERT_QUESTION, G_ALERTDEFAULT);
 		g_free(buf);
@@ -2452,7 +2452,8 @@
 			prefs_common.warn_dnd = FALSE;
 	}
 
-	buf = g_strdup_printf(_("Moving %s to %s..."), from_folder->name, to_folder->name);
+	buf = g_strdup_printf(copy ? _("Copying %s to %s..."):_("Moving %s to %s..."), 
+				from_folder->name, to_folder->name);
 	STATUSBAR_PUSH(folderview->mainwin, buf);
 	g_free(buf);
 	summary_clear_all(folderview->summaryview);
@@ -2463,7 +2464,7 @@
 	main_window_cursor_wait(folderview->mainwin);
 	statusbar_verbosity_set(TRUE);
 	folder_item_update_freeze();
-	if ((status = folder_item_move_to(from_folder, to_folder, &new_folder)) == F_MOVE_OK) {
+	if ((status = folder_item_move_to(from_folder, to_folder, &new_folder, copy)) == F_MOVE_OK) {
 		statusbar_verbosity_set(FALSE);
 		main_window_cursor_normal(folderview->mainwin);
 		STATUSBAR_POP(folderview->mainwin);
@@ -2484,13 +2485,14 @@
 			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."));
+			alertpanel_error(copy ? _("Can't copy a folder to one of its children."):
+						_("Can't move a folder to one of its children."));
 			break;
 		case F_MOVE_FAILED_DEST_OUTSIDE_MAILBOX:
 			alertpanel_error(_("Folder moving cannot be done between different mailboxes."));
 			break;
 		default:
-			alertpanel_error(_("Move failed!"));
+			alertpanel_error(copy ? _("Copy failed!"):_("Move failed!"));
 			break;
 		}
 	}	
@@ -2912,6 +2914,7 @@
 			/* comes from folderview */
 			char *source;
 			gboolean folder_is_normal = TRUE;
+			gboolean copy = (drag_context->action == GDK_ACTION_COPY);
 
 			source = data->data + 17;
 			if (gtk_clist_get_selection_info
@@ -2937,7 +2940,7 @@
 				return;
 			}
 
-			folderview_move_folder(folderview, src_item, item);
+			folderview_move_folder(folderview, src_item, item, copy);
 			gtk_drag_finish(drag_context, TRUE, TRUE, time);
 		}
 		folderview->nodes_to_recollapse = NULL;

Index: folderview.h
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/folderview.h,v
retrieving revision 1.20.2.14
retrieving revision 1.20.2.15
diff -u -d -r1.20.2.14 -r1.20.2.15
--- folderview.h	2006/11/07 10:38:53	1.20.2.14
+++ folderview.h	2006/12/26 21:33:59	1.20.2.15
@@ -122,7 +122,8 @@
 
 void folderview_move_folder		(FolderView 	*folderview,
 					 FolderItem 	*from_folder,
-					 FolderItem 	*to_folder);
+					 FolderItem 	*to_folder,
+					 gboolean	 copy);
 
 void folderview_set_target_folder_color (gint		color_op);
 

Index: imap_gtk.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/imap_gtk.c,v
retrieving revision 1.1.2.32
retrieving revision 1.1.2.33
diff -u -d -r1.1.2.32 -r1.1.2.33
--- imap_gtk.c	2006/11/16 07:53:07	1.1.2.32
+++ imap_gtk.c	2006/12/26 21:34:00	1.1.2.33
@@ -254,7 +254,7 @@
 	if (!to_folder)
 		return;
 	
-	folderview_move_folder(folderview, from_folder, to_folder);
+	folderview_move_folder(folderview, from_folder, to_folder, FALSE);
 }
 
 static void delete_folder_cb(FolderView *folderview, guint action,

Index: mh_gtk.c
===================================================================
RCS file: /pack/anoncvs/sylpheedclaws/sylpheed-claws/src/mh_gtk.c,v
retrieving revision 1.2.2.22
retrieving revision 1.2.2.23
diff -u -d -r1.2.2.22 -r1.2.2.23
--- mh_gtk.c	2006/11/16 07:53:08	1.2.2.22
+++ mh_gtk.c	2006/12/26 21:34:00	1.2.2.23
@@ -282,7 +282,7 @@
 	if (!to_folder)
 		return;
 	
-	folderview_move_folder(folderview, from_folder, to_folder);
+	folderview_move_folder(folderview, from_folder, to_folder, FALSE);
 }
 
 static void update_tree_cb(FolderView *folderview, guint action,