aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-folder-tree.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2010-05-11 01:06:07 +0800
committerMilan Crha <mcrha@redhat.com>2010-05-11 01:06:07 +0800
commitae66b7f97a6b6d3009aea4b905066b417833fe96 (patch)
tree0a8a3455767e45e5147e17ec6f6605e28ef777e6 /mail/em-folder-tree.c
parenta7f1c9d0f86bd6ec035c151969216656af4f8bae (diff)
downloadgsoc2013-evolution-ae66b7f97a6b6d3009aea4b905066b417833fe96.tar.gz
gsoc2013-evolution-ae66b7f97a6b6d3009aea4b905066b417833fe96.tar.zst
gsoc2013-evolution-ae66b7f97a6b6d3009aea4b905066b417833fe96.zip
Bug #616823 - Evolution allows moving IMAP Inbox to other folders
Diffstat (limited to 'mail/em-folder-tree.c')
-rw-r--r--mail/em-folder-tree.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index b1f204df4b..fdd1b88ee0 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -1786,11 +1786,14 @@ folder_tree_drop_target(EMFolderTree *folder_tree, GdkDragContext *context, GtkT
GtkTreePath *src_path = gtk_tree_row_reference_get_path(p->drag_row);
if (src_path) {
+ guint32 src_flags = 0;
+
if (gtk_tree_model_get_iter (model, &iter, src_path))
gtk_tree_model_get (
model, &iter,
COL_POINTER_CAMEL_STORE, &sstore,
- COL_STRING_URI, &src_uri, -1);
+ COL_STRING_URI, &src_uri,
+ COL_UINT_FLAGS, &src_flags, -1);
/* can't dnd onto itself or below itself - bad things happen,
no point dragging to where we were either */
@@ -1803,6 +1806,26 @@ folder_tree_drop_target(EMFolderTree *folder_tree, GdkDragContext *context, GtkT
}
gtk_tree_path_free(src_path);
+
+ if ((src_flags & CAMEL_FOLDER_TYPE_MASK) == CAMEL_FOLDER_TYPE_INBOX || (src_flags & CAMEL_FOLDER_SYSTEM) != 0) {
+ /* allow only copy of the Inbox and other system folders */
+ GdkAtom xfolder;
+
+ /* TODO: not sure if this is legal, but it works, force copy for special local folders */
+ context->suggested_action = GDK_ACTION_COPY;
+ context->actions = GDK_ACTION_COPY;
+ xfolder = drop_atoms[DND_DROP_TYPE_FOLDER];
+ while (targets != NULL) {
+ if (targets->data == (gpointer) xfolder) {
+ atom = xfolder;
+ goto done;
+ }
+
+ targets = targets->next;
+ }
+
+ goto done;
+ }
}
}
@@ -1824,6 +1847,7 @@ folder_tree_drop_target(EMFolderTree *folder_tree, GdkDragContext *context, GtkT
/* TODO: not sure if this is legal, but it works, force copy for special local folders */
context->suggested_action = GDK_ACTION_COPY;
+ context->actions = GDK_ACTION_COPY;
xfolder = drop_atoms[DND_DROP_TYPE_FOLDER];
while (targets != NULL) {
if (targets->data == (gpointer) xfolder) {