aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/e-mail-paned-view.c24
-rw-r--r--mail/em-utils.c14
-rw-r--r--mail/em-utils.h3
-rw-r--r--mail/message-list.c25
-rw-r--r--mail/message-list.h5
5 files changed, 31 insertions, 40 deletions
diff --git a/mail/e-mail-paned-view.c b/mail/e-mail-paned-view.c
index 33c8a6e98a..ef099197cd 100644
--- a/mail/e-mail-paned-view.c
+++ b/mail/e-mail-paned-view.c
@@ -142,24 +142,29 @@ mail_paned_view_message_list_built_cb (EMailView *view,
if (message_list->cursor_uid != NULL)
; /* do nothing */
- else if (message_list->folder_uri == NULL)
+ else if (message_list->folder == NULL)
; /* do nothing */
else if (e_shell_window_get_safe_mode (shell_window))
e_shell_window_set_safe_mode (shell_window, FALSE);
else {
- const gchar *folder_uri;
+ CamelFolder *folder;
const gchar *key;
+ gchar *folder_uri;
gchar *group_name;
gchar *uid;
+ folder = message_list->folder;
+ folder_uri = e_mail_folder_uri_from_folder (folder);
+
key = STATE_KEY_SELECTED_MESSAGE;
- folder_uri = message_list->folder_uri;
group_name = g_strdup_printf ("Folder %s", folder_uri);
uid = g_key_file_get_string (key_file, group_name, key, NULL);
g_free (group_name);
+ g_free (folder_uri);
+
/* Use selection fallbacks if UID is not found. */
message_list_select_uid (message_list, uid, TRUE);
@@ -173,22 +178,25 @@ mail_paned_view_message_selected_cb (EMailView *view,
MessageList *message_list)
{
EShellView *shell_view;
+ CamelFolder *folder;
GKeyFile *key_file;
- const gchar *folder_uri;
const gchar *key;
+ gchar *folder_uri;
gchar *group_name;
- folder_uri = message_list->folder_uri;
+ folder = message_list->folder;
/* This also gets triggered when selecting a store name on
* the sidebar such as "On This Computer", in which case
- * 'folder_uri' will be NULL. */
- if (folder_uri == NULL)
+ * 'folder' will be NULL. */
+ if (folder == NULL)
return;
shell_view = e_mail_view_get_shell_view (view);
key_file = e_shell_view_get_state_key_file (shell_view);
+ folder_uri = e_mail_folder_uri_from_folder (folder);
+
key = STATE_KEY_SELECTED_MESSAGE;
group_name = g_strdup_printf ("Folder %s", folder_uri);
@@ -199,7 +207,7 @@ mail_paned_view_message_selected_cb (EMailView *view,
e_shell_view_set_state_dirty (shell_view);
g_free (group_name);
-
+ g_free (folder_uri);
}
static void
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 61b5baabc1..9b21fda7ad 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -771,25 +771,27 @@ em_utils_selection_get_message (GtkSelectionData *selection_data,
/**
* em_utils_selection_set_uidlist:
* @selection_data: selection data
- * @uri:
+ * @folder:
* @uids:
*
* Sets a "x-uid-list" format selection data.
- *
- * FIXME: be nice if this could take a folder argument rather than uri
**/
void
em_utils_selection_set_uidlist (GtkSelectionData *selection_data,
- const gchar *uri,
+ CamelFolder *folder,
GPtrArray *uids)
{
GByteArray *array = g_byte_array_new ();
GdkAtom target;
+ gchar *folder_uri;
gint i;
/* format: "uri\0uid1\0uid2\0uid3\0...\0uidn\0" */
- g_byte_array_append (array, (guchar *)uri, strlen (uri)+1);
+ folder_uri = e_mail_folder_uri_from_folder (folder);
+
+ g_byte_array_append (
+ array, (guchar *) folder_uri, strlen (folder_uri) + 1);
for (i=0; i<uids->len; i++)
g_byte_array_append (array, uids->pdata[i], strlen (uids->pdata[i])+1);
@@ -798,6 +800,8 @@ em_utils_selection_set_uidlist (GtkSelectionData *selection_data,
gtk_selection_data_set (
selection_data, target, 8, array->data, array->len);
g_byte_array_free (array, TRUE);
+
+ g_free (folder_uri);
}
/**
diff --git a/mail/em-utils.h b/mail/em-utils.h
index 7f5adf3250..5ae9951a68 100644
--- a/mail/em-utils.h
+++ b/mail/em-utils.h
@@ -56,8 +56,7 @@ void em_utils_flag_for_followup_completed (GtkWindow *parent, CamelFolder *folde
void em_utils_selection_set_mailbox (GtkSelectionData *data, CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_mailbox (GtkSelectionData *data, CamelFolder *folder);
void em_utils_selection_get_message (GtkSelectionData *data, CamelFolder *folder);
-/* FIXME: be nice if these also worked on CamelFolder's, no easy way to get uri from folder yet tho */
-void em_utils_selection_set_uidlist (GtkSelectionData *data, const gchar *uri, GPtrArray *uids);
+void em_utils_selection_set_uidlist (GtkSelectionData *data, CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_uidlist (GtkSelectionData *data, EMailSession *session, CamelFolder *dest, gint move, GCancellable *cancellable, GError **error);
void em_utils_selection_set_urilist (GtkSelectionData *data, CamelFolder *folder, GPtrArray *uids);
void em_utils_selection_get_urilist (GtkSelectionData *data, CamelFolder *folder);
diff --git a/mail/message-list.c b/mail/message-list.c
index 6c0b532286..99e83a28b6 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -99,7 +99,6 @@
struct _MLSelection {
GPtrArray *uids;
CamelFolder *folder;
- gchar *folder_uri;
};
struct _MessageListPrivate {
@@ -527,8 +526,6 @@ clear_selection (MessageList *ml, struct _MLSelection *selection)
g_object_unref (selection->folder);
selection->folder = NULL;
}
- g_free (selection->folder_uri);
- selection->folder_uri = NULL;
}
static ETreePath
@@ -987,9 +984,7 @@ message_list_copy (MessageList *ml, gboolean cut)
}
p->clipboard.uids = uids;
- p->clipboard.folder = ml->folder;
- g_object_ref (p->clipboard.folder);
- p->clipboard.folder_uri = g_strdup (ml->folder_uri);
+ p->clipboard.folder = g_object_ref (ml->folder);
gtk_selection_owner_set (p->invisible, GDK_SELECTION_CLIPBOARD, gtk_get_current_event_time ());
} else {
em_utils_uids_free (uids);
@@ -2147,7 +2142,7 @@ ml_selection_get (GtkWidget *widget, GtkSelectionData *data, guint info, guint t
} else {
/* x-uid-list */
d(printf("setting x-uid-list selection for uids\n"));
- em_utils_selection_set_uidlist (data, selection->folder_uri, selection->uids);
+ em_utils_selection_set_uidlist (data, selection->folder, selection->uids);
}
}
@@ -2199,7 +2194,7 @@ ml_tree_drag_data_get (ETree *tree, gint row, ETreePath path, gint col,
if (uids->len > 0) {
switch (info) {
case DND_X_UID_LIST:
- em_utils_selection_set_uidlist (data, ml->folder_uri, uids);
+ em_utils_selection_set_uidlist (data, ml->folder, uids);
break;
case DND_TEXT_URI_LIST:
em_utils_selection_set_urilist (data, ml->folder, uids);
@@ -2648,9 +2643,6 @@ message_list_finalize (GObject *object)
g_mutex_free (message_list->regen_lock);
- g_free (message_list->folder_uri);
- message_list->folder_uri = NULL;
-
clear_selection (message_list, &priv->clipboard);
/* Chain up to parent's finalize() method. */
@@ -3819,17 +3811,6 @@ message_list_set_folder (MessageList *message_list,
message_list->thread_tree = NULL;
}
- g_free (message_list->folder_uri);
- message_list->folder_uri = NULL;
-
- /* XXX Not sure if MESSAGE_SELECTED signal handlers rely on
- * folder_uri being set, so avoid temptation to move this
- * logic down until verifying it's safe. */
- if (CAMEL_IS_FOLDER (folder)) {
- const gchar *uri = camel_folder_get_uri (folder);
- message_list->folder_uri = g_strdup (uri);
- }
-
if (message_list->cursor_uid) {
g_free (message_list->cursor_uid);
message_list->cursor_uid = NULL;
diff --git a/mail/message-list.h b/mail/message-list.h
index 699c4ce47f..6223c49ad8 100644
--- a/mail/message-list.h
+++ b/mail/message-list.h
@@ -104,9 +104,8 @@ struct _MessageList {
ETreePath tree_root;
ETableExtras *extras;
- /* The folder & matching uri */
- CamelFolder *folder;
- gchar *folder_uri;
+ /* The folder being shown. */
+ CamelFolder *folder;
GHashTable *uid_nodemap; /* uid (from info) -> tree node mapping */