+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.
+
2006-12-26 [colin] 2.6.1cvs74
* src/etpan/imap-thread.c
( cvs diff -u -r 1.2.2.14 -r 1.2.2.15 src/folder_item_prefs.c; ) > 2.6.1cvs72.patchset
( cvs diff -u -r 1.2.2.15 -r 1.2.2.16 src/folder_item_prefs.c; ) > 2.6.1cvs73.patchset
( cvs diff -u -r 1.1.4.59 -r 1.1.4.60 src/etpan/imap-thread.c; ) > 2.6.1cvs74.patchset
+( cvs diff -u -r 1.213.2.126 -r 1.213.2.127 src/folder.c; cvs diff -u -r 1.87.2.33 -r 1.87.2.34 src/folder.h; cvs diff -u -r 1.207.2.138 -r 1.207.2.139 src/folderview.c; cvs diff -u -r 1.20.2.14 -r 1.20.2.15 src/folderview.h; cvs diff -u -r 1.1.2.32 -r 1.1.2.33 src/imap_gtk.c; cvs diff -u -r 1.2.2.22 -r 1.2.2.23 src/mh_gtk.c; ) > 2.6.1cvs75.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=74
+EXTRA_VERSION=75
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
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;
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");
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);
}
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;
}
}
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();
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;
return F_MOVE_FAILED;
}
- if (src->folder != dest->folder) {
+ if (src->folder != dest->folder && !copy) {
return F_MOVE_FAILED_DEST_OUTSIDE_MAILBOX;
}
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;
}
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,
}
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;
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);
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);
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);
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;
}
}
/* 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
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;
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);
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,
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,