aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-folder-tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/em-folder-tree.c')
-rw-r--r--mail/em-folder-tree.c50
1 files changed, 28 insertions, 22 deletions
diff --git a/mail/em-folder-tree.c b/mail/em-folder-tree.c
index fc3de1f8ea..9b41c2ec11 100644
--- a/mail/em-folder-tree.c
+++ b/mail/em-folder-tree.c
@@ -103,12 +103,6 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
-
-#define MESSAGE_RFC822_TYPE "message/rfc822"
-#define TEXT_URI_LIST_TYPE "text/uri-list"
-#define UID_LIST_TYPE "x-uid-list"
-#define FOLDER_TYPE "x-folder"
-
/* Drag & Drop types */
enum DndDragType {
DND_DRAG_TYPE_FOLDER, /* drag an evo folder */
@@ -123,17 +117,17 @@ enum DndDropType {
};
static GtkTargetEntry drag_types[] = {
- { UID_LIST_TYPE, 0, DND_DRAG_TYPE_FOLDER },
- { TEXT_URI_LIST_TYPE, 0, DND_DRAG_TYPE_TEXT_URI_LIST },
+ { "x-uid-list", 0, DND_DRAG_TYPE_FOLDER },
+ { "text/uri-list", 0, DND_DRAG_TYPE_TEXT_URI_LIST },
};
static const int num_drag_types = sizeof (drag_types) / sizeof (drag_types[0]);
static GtkTargetEntry drop_types[] = {
- { UID_LIST_TYPE, 0, DND_DROP_TYPE_UID_LIST },
- { FOLDER_TYPE, 0, DND_DROP_TYPE_FOLDER },
- { MESSAGE_RFC822_TYPE, 0, DND_DROP_TYPE_MESSAGE_RFC822 },
- { TEXT_URI_LIST_TYPE, 0, DND_DROP_TYPE_TEXT_URI_LIST },
+ { "x-uid-list" , 0, DND_DROP_TYPE_UID_LIST },
+ { "x-folder", 0, DND_DROP_TYPE_FOLDER },
+ { "message/rfc822", 0, DND_DROP_TYPE_MESSAGE_RFC822 },
+ { "text/uri-list", 0, DND_DROP_TYPE_TEXT_URI_LIST },
};
static const int num_drop_types = sizeof (drop_types) / sizeof (drop_types[0]);
@@ -1000,9 +994,9 @@ em_folder_tree_get_folder_info__got (struct _mail_msg *mm)
/* get the first child (which will be a dummy node) */
gtk_tree_model_iter_children ((GtkTreeModel *) model, &iter, &root);
- /* FIXME: camel is totally on crack here, @top's folder info
- * should be @fi and fi->child should be what we want to fill
- * our tree with... *sigh* */
+ /* FIXME: camel's IMAP code is totally on crack here, @top's
+ * folder info should be @fi and fi->child should be what we
+ * want to fill our tree with... *sigh* */
if (m->top && !strcmp (m->fi->full_name, m->top)) {
if (!(fi = m->fi->child))
fi = m->fi->sibling;
@@ -1367,7 +1361,6 @@ emft_popup_new_folder_response (EMFolderSelector *emfs, int response, EMFolderTr
camel_object_unref (store);
- /* FIXME: camel_store_create_folder should just take full path names */
full_name = path[0] == '/' ? path + 1 : path;
namebuf = g_strdup (full_name);
if (!(name = strrchr (namebuf, '/'))) {
@@ -1547,10 +1540,12 @@ emft_popup_rename_folder (GtkWidget *item, EMFolderTree *emft)
struct _EMFolderTreePrivate *priv = emft->priv;
char *prompt, *folder_path, *name, *new_name, *uri;
GtkTreeSelection *selection;
+ const char *full_name, *p;
gboolean done = FALSE;
GtkTreeModel *model;
- GtkTreeIter iter;
CamelStore *store;
+ GtkTreeIter iter;
+ size_t base_len;
selection = gtk_tree_view_get_selection (priv->treeview);
gtk_tree_selection_get_selected (selection, &model, &iter);
@@ -1559,6 +1554,12 @@ emft_popup_rename_folder (GtkWidget *item, EMFolderTree *emft)
COL_POINTER_CAMEL_STORE, &store,
COL_STRING_URI, &uri, -1);
+ full_name = folder_path[0] == '/' ? folder_path + 1 : folder_path;
+ if ((p = strrchr (full_name, '/')))
+ base_len = (size_t) (p - full_name);
+ else
+ base_len = 0;
+
prompt = g_strdup_printf (_("Rename the \"%s\" folder to:"), name);
while (!done) {
const char *why;
@@ -1570,11 +1571,17 @@ emft_popup_rename_folder (GtkWidget *item, EMFolderTree *emft)
} else {
CamelFolderInfo *fi;
CamelException ex;
- char *base, *path;
+ char *path, *p;
- /* FIXME: we can't use the os independent path crap here, since we want to control the format */
- base = g_path_get_dirname (folder_path);
- path = g_build_filename (base, new_name, NULL);
+ if (base_len > 0) {
+ path = g_malloc (base_len + strlen (new_name) + 2);
+ memcpy (path, full_name, base_len);
+ p = path + base_len;
+ *p++ = '/';
+ strcpy (p, new_name);
+ } else {
+ path = g_strdup (new_name);
+ }
camel_exception_init (&ex);
if ((fi = camel_store_get_folder_info (store, path, CAMEL_STORE_FOLDER_INFO_FAST, &ex)) != NULL) {
@@ -1602,7 +1609,6 @@ emft_popup_rename_folder (GtkWidget *item, EMFolderTree *emft)
}
g_free (path);
- g_free (base);
}
g_free (new_name);