From d6dfc4fa32b9088f8509e36b5faaa4c9bad99fb8 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 31 Oct 2010 13:17:32 -0400 Subject: EMailReader: Rewrite message retrieval tracking. Instead of mail_get_messagex(), call camel_folder_get_message() and submit an EActivity to the shell backend. EMailReader now uses the activity's GCancellable to cancel the previous retrieval operation when the user selects a different message. Eliminates the last call to mail_get_messagex(). --- mail/e-mail-reader.c | 159 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 95 insertions(+), 64 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 114bca0531..f5c511cc2a 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -66,20 +66,23 @@ ((EMailReaderPrivate *) g_object_get_qdata \ (G_OBJECT (obj), quark_private)) +typedef struct _EMailReaderClosure EMailReaderClosure; typedef struct _EMailReaderPrivate EMailReaderPrivate; +struct _EMailReaderClosure { + EMailReader *reader; + EActivity *activity; + gchar *message_uid; +}; + struct _EMailReaderPrivate { /* This timer runs when the user selects a single message. */ guint message_selected_timeout_id; - /* This is the message UID to automatically mark as read - * after a short period (specified by a user preference). */ - gchar *mark_read_message_uid; - - /* This is the ID of an asynchronous operation - * to retrieve a message from a mail folder. */ - gint retrieving_message_operation_id; + /* This allows message retrieval to be cancelled if another + * message is selected before the retrieval has completed. */ + GCancellable *retrieving_message; /* These flags work together to prevent message selection * restoration after a folder switch from automatically @@ -113,16 +116,31 @@ static guint signals[LAST_SIGNAL]; G_DEFINE_INTERFACE (EMailReader, e_mail_reader, G_TYPE_INITIALLY_UNOWNED) +static void +mail_reader_closure_free (EMailReaderClosure *closure) +{ + if (closure->reader != NULL) + g_object_unref (closure->reader); + + if (closure->activity != NULL) + g_object_unref (closure->activity); + + g_free (closure->message_uid); + + g_slice_free (EMailReaderClosure, closure); +} + static void mail_reader_private_free (EMailReaderPrivate *priv) { if (priv->message_selected_timeout_id > 0) g_source_remove (priv->message_selected_timeout_id); - if (priv->retrieving_message_operation_id > 0) - mail_msg_cancel (priv->retrieving_message_operation_id); - - g_free (priv->mark_read_message_uid); + if (priv->retrieving_message != NULL) { + g_cancellable_cancel (priv->retrieving_message); + g_object_unref (priv->retrieving_message); + priv->retrieving_message = 0; + } g_slice_free (EMailReaderPrivate, priv); } @@ -2447,17 +2465,15 @@ mail_reader_key_press_cb (EMailReader *reader, } static gboolean -mail_reader_message_read_cb (EMailReader *reader) +mail_reader_message_read_cb (EMailReaderClosure *closure) { - EMailReaderPrivate *priv; + EMailReader *reader; GtkWidget *message_list; const gchar *cursor_uid; const gchar *message_uid; - priv = E_MAIL_READER_GET_PRIVATE (reader); - - message_uid = priv->mark_read_message_uid; - g_return_val_if_fail (message_uid != NULL, FALSE); + reader = closure->reader; + message_uid = closure->message_uid; message_list = e_mail_reader_get_message_list (reader); cursor_uid = MESSAGE_LIST (message_list)->cursor_uid; @@ -2470,13 +2486,12 @@ mail_reader_message_read_cb (EMailReader *reader) static void mail_reader_message_loaded_cb (CamelFolder *folder, - const gchar *message_uid, - CamelMimeMessage *message, - gpointer user_data, - GError **error) + GAsyncResult *result, + EMailReaderClosure *closure) { - EMailReader *reader = user_data; + EMailReader *reader; EMailReaderPrivate *priv; + CamelMimeMessage *message; EMFormatHTML *formatter; GtkWidget *message_list; EMailBackend *backend; @@ -2486,9 +2501,13 @@ mail_reader_message_loaded_cb (CamelFolder *folder, EWebView *web_view; EMEvent *event; EMEventTargetMessage *target; - const gchar *cursor_uid; + const gchar *message_uid; gboolean schedule_timeout; gint timeout_interval; + GError *error = NULL; + + reader = closure->reader; + message_uid = closure->message_uid; priv = E_MAIL_READER_GET_PRIVATE (reader); @@ -2496,10 +2515,19 @@ mail_reader_message_loaded_cb (CamelFolder *folder, * while we were loading the message and we're likely holding the * last reference. Nothing to do but drop the reference. */ if (priv == NULL) { - g_object_unref (reader); + mail_reader_closure_free (closure); return; } + message = camel_folder_get_message_finish (folder, result, &error); + + /* If the user picked a different message in the time it took + * to fetch this message, then don't bother rendering it. */ + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + g_error_free (error); + goto exit; + } + backend = e_mail_reader_get_backend (reader); formatter = e_mail_reader_get_formatter (reader); message_list = e_mail_reader_get_message_list (reader); @@ -2508,15 +2536,8 @@ mail_reader_message_loaded_cb (CamelFolder *folder, shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); - cursor_uid = MESSAGE_LIST (message_list)->cursor_uid; - web_view = em_format_html_get_web_view (formatter); - /* If the user picked a different message in the time it took - * to fetch this message, then don't bother rendering it. */ - if (g_strcmp0 (cursor_uid, message_uid) != 0) - goto exit; - /** @Event: message.reading * @Title: Viewing a message * @Target: EMEventTargetMessage @@ -2548,40 +2569,43 @@ mail_reader_message_loaded_cb (CamelFolder *folder, e_shell_settings_get_int ( shell_settings, "mail-mark-seen-timeout"); - g_free (priv->mark_read_message_uid); - priv->mark_read_message_uid = NULL; - if (MESSAGE_LIST (message_list)->seen_id > 0) { g_source_remove (MESSAGE_LIST (message_list)->seen_id); MESSAGE_LIST (message_list)->seen_id = 0; } if (schedule_timeout) { - priv->mark_read_message_uid = g_strdup (message_uid); - MESSAGE_LIST (message_list)->seen_id = g_timeout_add ( - timeout_interval, (GSourceFunc) - mail_reader_message_read_cb, reader); + EMailReaderClosure *timeout_closure; + + timeout_closure = g_slice_new0 (EMailReaderClosure); + timeout_closure->reader = g_object_ref (reader); + timeout_closure->message_uid = g_strdup (message_uid); + + MESSAGE_LIST (message_list)->seen_id = g_timeout_add_full ( + G_PRIORITY_DEFAULT, timeout_interval, + (GSourceFunc) mail_reader_message_read_cb, + timeout_closure, (GDestroyNotify) + mail_reader_closure_free); - } else if (error != NULL && *error != NULL) { + } else if (error != NULL) { gchar *string; /* Display the error inline and clear the exception. */ string = g_strdup_printf ( "

%s

%s

", _("Unable to retrieve message"), - (*error)->message); + error->message); e_web_view_load_string (web_view, string); g_free (string); - g_clear_error (error); + g_error_free (error); } - /* We referenced this in the call to mail_get_messagex (). */ - g_object_unref (reader); - exit: priv->restoring_message_selection = FALSE; + + mail_reader_closure_free (closure); } static gboolean @@ -2593,6 +2617,7 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) EWebView *web_view; CamelFolder *folder; CamelStore *parent_store; + EMailBackend *backend; const gchar *cursor_uid; const gchar *format_uid; @@ -2601,6 +2626,7 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) folder = e_mail_reader_get_folder (reader); parent_store = camel_folder_get_parent_store (folder); + backend = e_mail_reader_get_backend (reader); formatter = e_mail_reader_get_formatter (reader); message_list = e_mail_reader_get_message_list (reader); @@ -2622,10 +2648,10 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) selected_uid_changed = g_strcmp0 (cursor_uid, format_uid); if (web_view_visible && selected_uid_changed) { - gint op_id; + EMailReaderClosure *closure; + GCancellable *cancellable; + EActivity *activity; gchar *string; - gboolean store_async; - MailMsgDispatchFunc disp_func; string = g_strdup_printf ( _("Retrieving message '%s'"), cursor_uid); @@ -2637,21 +2663,29 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) #endif g_free (string); - store_async = parent_store->flags & CAMEL_STORE_ASYNC; + activity = e_activity_new (); + + cancellable = camel_operation_new (); + e_activity_set_cancellable (activity, cancellable); + + closure = g_slice_new0 (EMailReaderClosure); + closure->reader = g_object_ref (reader); + closure->activity = g_object_ref (activity); + closure->message_uid = g_strdup (cursor_uid); + + camel_folder_get_message ( + folder, cursor_uid, G_PRIORITY_DEFAULT, + cancellable, (GAsyncReadyCallback) + mail_reader_message_loaded_cb, closure); - if (store_async) - disp_func = mail_msg_unordered_push; - else - disp_func = mail_msg_fast_ordered_push; + e_shell_backend_add_activity ( + E_SHELL_BACKEND (backend), activity); - op_id = mail_get_messagex ( - folder, cursor_uid, - mail_reader_message_loaded_cb, - g_object_ref (reader), - disp_func); + if (priv->retrieving_message != NULL) + g_object_unref (priv->retrieving_message); + priv->retrieving_message = cancellable; - if (!store_async) - priv->retrieving_message_operation_id = op_id; + g_object_unref (activity); } } else { /* FIXME Need to pass a GCancellable. */ @@ -2671,7 +2705,6 @@ mail_reader_message_selected_cb (EMailReader *reader, { EMailReaderPrivate *priv; MessageList *message_list; - gboolean store_async; CamelFolder *folder; CamelStore *parent_store; @@ -2679,11 +2712,9 @@ mail_reader_message_selected_cb (EMailReader *reader, folder = e_mail_reader_get_folder (reader); parent_store = camel_folder_get_parent_store (folder); - store_async = parent_store->flags & CAMEL_STORE_ASYNC; - /* Cancel previous message retrieval if the store is not async. */ - if (!store_async && priv->retrieving_message_operation_id > 0) - mail_msg_cancel (priv->retrieving_message_operation_id); + /* Cancel the previous message retrieval activity. */ + g_cancellable_cancel (priv->retrieving_message); /* Cancel the seen timer. */ message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader)); -- cgit v1.2.3 From c53fd13220a177dedacca7b702c6dde5eb0a47f1 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 31 Oct 2010 21:40:42 -0400 Subject: EMailReader: Add a get_alert_sink() method. --- mail/e-mail-reader.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index f5c511cc2a..8432e3388b 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -3819,6 +3819,19 @@ e_mail_reader_get_action_group (EMailReader *reader) return interface->get_action_group (reader); } +EAlertSink * +e_mail_reader_get_alert_sink (EMailReader *reader) +{ + EMailReaderInterface *interface; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + interface = E_MAIL_READER_GET_INTERFACE (reader); + g_return_val_if_fail (interface->get_alert_sink != NULL, NULL); + + return interface->get_alert_sink (reader); +} + EMailBackend * e_mail_reader_get_backend (EMailReader *reader) { -- cgit v1.2.3 From a891b81cfb3430a764dab0d5644114c4dab22297 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 7 Nov 2010 21:13:03 -0500 Subject: Coding style and whitespace cleanup. --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 8432e3388b..2c1bbb2fc8 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -464,7 +464,7 @@ action_mail_remove_attachments_cb (GtkAction *action, EMailReader *reader) /* make a copy of the message */ camel_message_info_set_flags (newinfo, flags, flags); camel_folder_append_message_sync (folder, message, newinfo, NULL, NULL, &error); - + if (!error) { /* marked the original message deleted */ camel_message_info_set_flags (info, CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED); -- cgit v1.2.3 From 59da2bdfdc25d148c2bc13d8fa6281f2540ba87c Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 10 Nov 2010 13:38:22 +0100 Subject: Bug #632683 - Remove-duplicates should work on selection --- mail/e-mail-reader.c | 193 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 136 insertions(+), 57 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 2c1bbb2fc8..0649a43d2f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -406,81 +406,144 @@ action_mail_remove_attachments_cb (GtkAction *action, EMailReader *reader) { CamelFolder *folder; GPtrArray *uids; - gint i, j; folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); - camel_folder_freeze (folder); - for (i = 0; i < (uids ? uids->len : 0); i++) { - CamelMimeMessage *message; - CamelDataWrapper *containee; - gchar *uid; + mail_remove_attachments (folder, uids); +} - uid = g_ptr_array_index (uids, i); +static gchar * +get_message_checksum (CamelFolder *folder, CamelMimeMessage *msg) +{ + static const GChecksumType duplicate_csum = G_CHECKSUM_SHA256; - /* retrieve the message from the CamelFolder */ - message = camel_folder_get_message_sync (folder, uid, NULL, NULL); - if (!message) { - continue; - } + CamelDataWrapper *content; + CamelStream *mem; + GByteArray *buffer; + gchar *digest = NULL; - containee = camel_medium_get_content (CAMEL_MEDIUM (message)); - if (containee == NULL) { - continue; - } + if (!msg) + return NULL; - if (CAMEL_IS_MULTIPART (containee)) { - gboolean deleted = FALSE; - gint parts; - - parts = camel_multipart_get_number (CAMEL_MULTIPART (containee)); - for (j = 0; j < parts; j++) { - CamelMimePart *mpart = camel_multipart_get_part (CAMEL_MULTIPART (containee), j); - const gchar *disposition = camel_mime_part_get_disposition (mpart); - if (disposition && (!strcmp (disposition, "attachment") || !strcmp (disposition, "inline"))) { - gchar *desc; - const gchar *filename; - - filename = camel_mime_part_get_filename (mpart); - desc = g_strdup_printf (_("File \"%s\" has been removed."), filename ? filename : ""); - camel_mime_part_set_disposition (mpart, "inline"); - camel_mime_part_set_content (mpart, desc, strlen (desc), "text/plain"); - camel_mime_part_set_content_type (mpart, "text/plain"); - deleted = TRUE; - } - } + /* get message contents */ + content = camel_medium_get_content ((CamelMedium *) msg); + if (!content) + return NULL; - if (deleted) { - /* copy the original message with the deleted attachment */ - CamelMessageInfo *info, *newinfo; - guint32 flags; - GError *error = NULL; + /* calculate checksum */ + mem = camel_stream_mem_new (); + camel_data_wrapper_decode_to_stream_sync (content, mem, NULL, NULL); - info = camel_folder_get_message_info (folder, uid); - newinfo = camel_message_info_new_from_header (NULL, CAMEL_MIME_PART (message)->headers); - flags = camel_folder_get_message_flags (folder, uid); + buffer = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (mem)); + if (buffer) + digest = g_compute_checksum_for_data (duplicate_csum, buffer->data, buffer->len); - /* make a copy of the message */ - camel_message_info_set_flags (newinfo, flags, flags); - camel_folder_append_message_sync (folder, message, newinfo, NULL, NULL, &error); + g_object_unref (mem); - if (!error) { - /* marked the original message deleted */ - camel_message_info_set_flags (info, CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_DELETED); - } + return digest; +} + +static gboolean +message_is_duplicated (GHashTable *messages, guint64 id, gchar *digest) +{ + gchar *hash_digest = g_hash_table_lookup (messages, &id); + + if (!hash_digest) + return FALSE; + + return g_str_equal (digest, hash_digest); +} + +static void +remove_duplicates_got_messages_cb (CamelFolder *folder, GPtrArray *uids, GPtrArray *msgs, gpointer data) +{ + EMailReader *reader = data; + GtkWindow *parent; + GHashTable *messages; + GPtrArray *dups; + gint ii; + + g_return_if_fail (folder != NULL); + g_return_if_fail (CAMEL_IS_FOLDER (folder)); + g_return_if_fail (uids != NULL); + g_return_if_fail (msgs != NULL); + g_return_if_fail (msgs->len <= uids->len); + g_return_if_fail (reader != NULL); + g_return_if_fail (E_IS_MAIL_READER (reader)); + + parent = e_mail_reader_get_window (reader); + + messages = g_hash_table_new_full (g_int_hash, g_int_equal, g_free, g_free); + dups = g_ptr_array_new (); + + for (ii = 0; ii < msgs->len; ii++) { + CamelMessageInfo *msg_info = camel_folder_get_message_info (folder, uids->pdata[ii]); + const CamelSummaryMessageID *mid = camel_message_info_message_id (msg_info); + guint32 flags = camel_message_info_flags (msg_info); - camel_folder_free_message_info (folder, info); - camel_message_info_free (newinfo); + if (!(flags & CAMEL_MESSAGE_DELETED)) { + gchar *digest = get_message_checksum (folder, msgs->pdata[ii]); - if (error) - g_error_free (error); + if (digest) { + if (message_is_duplicated (messages, mid->id.id, digest)) { + g_ptr_array_add (dups, uids->pdata[ii]); + g_free (digest); + } else { + guint64 *id; + id = g_new0 (guint64, 1); + *id = mid->id.id; + g_hash_table_insert (messages, id, digest); + } } } + + camel_message_info_free (msg_info); } - camel_folder_synchronize_sync (folder, FALSE, NULL, NULL); - camel_folder_thaw (folder); + if (dups->len == 0) { + em_utils_prompt_user (parent, NULL, "mail:info-no-remove-duplicates", camel_folder_get_name (folder), NULL); + } else { + gchar *msg = g_strdup_printf (ngettext ( + /* Translators: %s is replaced with a folder name + %d with count of duplicate messages. */ + _("Folder '%s' contains %d duplicate message. Are you sure you want to delete it?"), + _("Folder '%s' contains %d duplicate messages. Are you sure you want to delete them?"), + dups->len), + camel_folder_get_name (folder), dups->len); + + if (em_utils_prompt_user (parent, NULL, "mail:ask-remove-duplicates", msg, NULL)) { + camel_folder_freeze (folder); + for (ii = 0; ii < dups->len; ii++) + camel_folder_delete_message (folder, g_ptr_array_index (dups, ii)); + camel_folder_thaw (folder); + } + + g_free (msg); + } + + g_hash_table_destroy (messages); + g_ptr_array_free (dups, TRUE); +} + +static void +action_mail_remove_duplicates (GtkAction *action, EMailReader *reader) +{ + MessageList *message_list; + CamelFolder *folder; + GPtrArray *uids; + + message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader)); + uids = message_list_get_selected (message_list); + folder = message_list->folder; + + if (!uids || uids->len <= 1) { + if (uids) + em_utils_uids_free (uids); + } else { + /* the function itself is freeing uids */ + mail_get_messages (folder, uids, remove_duplicates_got_messages_cb, reader); + } } static void @@ -2107,6 +2170,13 @@ static GtkActionEntry mail_reader_entries[] = { N_("Remove attachments"), G_CALLBACK (action_mail_remove_attachments_cb) }, + { "mail-remove-duplicates", + NULL, + N_("Remove Du_plicate Messages"), + NULL, + N_("Checks selected messages for duplicates"), + G_CALLBACK (action_mail_remove_duplicates) }, + { "mail-reply-all", NULL, N_("Reply to _All"), @@ -2330,6 +2400,10 @@ static EPopupActionEntry mail_reader_popup_entries[] = { NULL, "mail-remove-attachments" }, + { "mail-popup-remove-duplicates", + NULL, + "mail-remove-duplicates" }, + { "mail-popup-reply-all", NULL, "mail-reply-all" }, @@ -3165,6 +3239,11 @@ mail_reader_update_actions (EMailReader *reader, action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); + action_name = "mail-remove-duplicates"; + sensitive = multiple_messages_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + action_name = "mail-reply-all"; sensitive = have_enabled_account && single_message_selected; action = e_mail_reader_get_action (reader, action_name); -- cgit v1.2.3 From b0ec19555204c560d192258a99511f50b6da52bc Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 26 Nov 2010 11:24:02 +0100 Subject: Bug #635738 - Sanitize Previous/Next buttons when not usable --- mail/e-mail-reader.c | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 0649a43d2f..6a96afdd3d 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2950,6 +2950,8 @@ mail_reader_update_actions (EMailReader *reader, gboolean selection_has_unread_messages; gboolean selection_is_mailing_list; gboolean single_message_selected; + gboolean first_message_selected = FALSE; + gboolean last_message_selected = FALSE; priv = E_MAIL_READER_GET_PRIVATE (reader); @@ -3003,6 +3005,24 @@ mail_reader_update_actions (EMailReader *reader, any_messages_selected = (single_message_selected || multiple_messages_selected); + if (any_messages_selected) { + MessageList *message_list; + gint row = -1, count = -1; + ETreeTableAdapter *etta; + ETreePath node; + + message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader)); + etta = e_tree_get_table_adapter (E_TREE (message_list)); + + if (message_list->cursor_uid != NULL && (node = g_hash_table_lookup (message_list->uid_nodemap, message_list->cursor_uid)) != NULL) { + row = e_tree_table_adapter_row_of_node (etta, node); + count = e_table_model_row_count (E_TABLE_MODEL (etta)); + } + + first_message_selected = row <= 0; + last_message_selected = row < 0 || row + 1 >= count; + } + action_name = "mail-add-sender"; sensitive = single_message_selected; action = e_mail_reader_get_action (reader, action_name); @@ -3185,37 +3205,42 @@ mail_reader_update_actions (EMailReader *reader, gtk_action_set_sensitive (action, sensitive); action_name = "mail-next"; - sensitive = any_messages_selected; + sensitive = any_messages_selected && !last_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-next-important"; - sensitive = single_message_selected; + sensitive = single_message_selected && !last_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-next-thread"; - sensitive = single_message_selected; + sensitive = single_message_selected && !last_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-next-unread"; - sensitive = any_messages_selected; + sensitive = any_messages_selected && !last_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-previous"; - sensitive = any_messages_selected; + sensitive = any_messages_selected && !first_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-previous-important"; - sensitive = single_message_selected; + sensitive = single_message_selected && !first_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-previous-unread"; - sensitive = any_messages_selected; + sensitive = any_messages_selected && !first_message_selected; + action = e_mail_reader_get_action (reader, action_name); + gtk_action_set_sensitive (action, sensitive); + + action_name = "mail-previous-thread"; + sensitive = any_messages_selected && !first_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); -- cgit v1.2.3 From 4e42a9aee8c5f030afe228d3a2a1796c6a7d4028 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 29 Nov 2010 10:24:23 +0100 Subject: Revert certain parts from commit for bug #635738 --- mail/e-mail-reader.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 6a96afdd3d..59cc4069a7 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -3210,7 +3210,7 @@ mail_reader_update_actions (EMailReader *reader, gtk_action_set_sensitive (action, sensitive); action_name = "mail-next-important"; - sensitive = single_message_selected && !last_message_selected; + sensitive = single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); @@ -3220,7 +3220,7 @@ mail_reader_update_actions (EMailReader *reader, gtk_action_set_sensitive (action, sensitive); action_name = "mail-next-unread"; - sensitive = any_messages_selected && !last_message_selected; + sensitive = any_messages_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); @@ -3230,12 +3230,12 @@ mail_reader_update_actions (EMailReader *reader, gtk_action_set_sensitive (action, sensitive); action_name = "mail-previous-important"; - sensitive = single_message_selected && !first_message_selected; + sensitive = single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-previous-unread"; - sensitive = any_messages_selected && !first_message_selected; + sensitive = any_messages_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); -- cgit v1.2.3 From 081ee1af21e55ceda819a8a075c1bc25a3417f52 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 2 Dec 2010 16:24:42 +0100 Subject: Localize few strings with ngettext Per request of bug #635414 --- mail/e-mail-reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 59cc4069a7..3d3c4b3ffe 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -507,8 +507,8 @@ remove_duplicates_got_messages_cb (CamelFolder *folder, GPtrArray *uids, GPtrArr gchar *msg = g_strdup_printf (ngettext ( /* Translators: %s is replaced with a folder name %d with count of duplicate messages. */ - _("Folder '%s' contains %d duplicate message. Are you sure you want to delete it?"), - _("Folder '%s' contains %d duplicate messages. Are you sure you want to delete them?"), + "Folder '%s' contains %d duplicate message. Are you sure you want to delete it?", + "Folder '%s' contains %d duplicate messages. Are you sure you want to delete them?", dups->len), camel_folder_get_name (folder), dups->len); -- cgit v1.2.3 From 88e2ead0df3a7b62c59a8ffb2d50cf1cf1b884bb Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 12 Jan 2011 13:57:36 +0100 Subject: Bug #600013 - Crash in mail_reader_message_loaded_cb --- mail/e-mail-reader.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 3d3c4b3ffe..b9a3b8b584 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2606,6 +2606,12 @@ mail_reader_message_loaded_cb (CamelFolder *folder, formatter = e_mail_reader_get_formatter (reader); message_list = e_mail_reader_get_message_list (reader); + if (!message_list) { + /* for cases where message fetching took so long that + user closed the message window before this was called */ + goto exit; + } + shell_backend = E_SHELL_BACKEND (backend); shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); -- cgit v1.2.3 From 753c60fc67a0a56a5f119c14ffa54ea9af95c208 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 9 Nov 2010 08:48:33 -0500 Subject: Drop backward-compatibility cruft. --- mail/e-mail-reader.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index b9a3b8b584..3f1e40af85 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -59,9 +59,6 @@ #include #endif -/* backward-compatibility cruft */ -#include "e-util/gtk-compat.h" - #define E_MAIL_READER_GET_PRIVATE(obj) \ ((EMailReaderPrivate *) g_object_get_qdata \ (G_OBJECT (obj), quark_private)) -- cgit v1.2.3 From 21ab8044dab93b6367463593628ec42befda4f67 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 29 Jan 2011 10:50:53 -0500 Subject: Coding style and whitespace cleanup. --- mail/e-mail-reader.c | 70 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 21 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 3f1e40af85..c05b392cda 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -434,7 +434,8 @@ get_message_checksum (CamelFolder *folder, CamelMimeMessage *msg) buffer = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (mem)); if (buffer) - digest = g_compute_checksum_for_data (duplicate_csum, buffer->data, buffer->len); + digest = g_compute_checksum_for_data ( + duplicate_csum, buffer->data, buffer->len); g_object_unref (mem); @@ -453,7 +454,10 @@ message_is_duplicated (GHashTable *messages, guint64 id, gchar *digest) } static void -remove_duplicates_got_messages_cb (CamelFolder *folder, GPtrArray *uids, GPtrArray *msgs, gpointer data) +remove_duplicates_got_messages_cb (CamelFolder *folder, + GPtrArray *uids, + GPtrArray *msgs, + gpointer data) { EMailReader *reader = data; GtkWindow *parent; @@ -461,36 +465,46 @@ remove_duplicates_got_messages_cb (CamelFolder *folder, GPtrArray *uids, GPtrArr GPtrArray *dups; gint ii; - g_return_if_fail (folder != NULL); g_return_if_fail (CAMEL_IS_FOLDER (folder)); g_return_if_fail (uids != NULL); g_return_if_fail (msgs != NULL); g_return_if_fail (msgs->len <= uids->len); - g_return_if_fail (reader != NULL); g_return_if_fail (E_IS_MAIL_READER (reader)); parent = e_mail_reader_get_window (reader); - messages = g_hash_table_new_full (g_int_hash, g_int_equal, g_free, g_free); + messages = g_hash_table_new_full ( + g_int_hash, g_int_equal, g_free, g_free); dups = g_ptr_array_new (); for (ii = 0; ii < msgs->len; ii++) { - CamelMessageInfo *msg_info = camel_folder_get_message_info (folder, uids->pdata[ii]); - const CamelSummaryMessageID *mid = camel_message_info_message_id (msg_info); - guint32 flags = camel_message_info_flags (msg_info); + CamelMessageInfo *msg_info; + const CamelSummaryMessageID *mid; + guint32 flags; + + msg_info = camel_folder_get_message_info ( + folder, uids->pdata[ii]); + mid = camel_message_info_message_id (msg_info); + flags = camel_message_info_flags (msg_info); if (!(flags & CAMEL_MESSAGE_DELETED)) { - gchar *digest = get_message_checksum (folder, msgs->pdata[ii]); + gchar *digest; + + digest = get_message_checksum (folder, msgs->pdata[ii]); - if (digest) { - if (message_is_duplicated (messages, mid->id.id, digest)) { + if (digest != NULL) { + if (message_is_duplicated ( + messages, mid->id.id, digest)) { g_ptr_array_add (dups, uids->pdata[ii]); g_free (digest); } else { guint64 *id; + id = g_new0 (guint64, 1); *id = mid->id.id; - g_hash_table_insert (messages, id, digest); + + g_hash_table_insert ( + messages, id, digest); } } } @@ -499,20 +513,26 @@ remove_duplicates_got_messages_cb (CamelFolder *folder, GPtrArray *uids, GPtrArr } if (dups->len == 0) { - em_utils_prompt_user (parent, NULL, "mail:info-no-remove-duplicates", camel_folder_get_name (folder), NULL); + em_utils_prompt_user ( + parent, NULL, "mail:info-no-remove-duplicates", + camel_folder_get_name (folder), NULL); } else { gchar *msg = g_strdup_printf (ngettext ( /* Translators: %s is replaced with a folder name %d with count of duplicate messages. */ - "Folder '%s' contains %d duplicate message. Are you sure you want to delete it?", - "Folder '%s' contains %d duplicate messages. Are you sure you want to delete them?", + "Folder '%s' contains %d duplicate message. " + "Are you sure you want to delete it?", + "Folder '%s' contains %d duplicate messages. " + "Are you sure you want to delete them?", dups->len), camel_folder_get_name (folder), dups->len); - if (em_utils_prompt_user (parent, NULL, "mail:ask-remove-duplicates", msg, NULL)) { + if (em_utils_prompt_user ( + parent, NULL, "mail:ask-remove-duplicates", msg, NULL)) { camel_folder_freeze (folder); for (ii = 0; ii < dups->len; ii++) - camel_folder_delete_message (folder, g_ptr_array_index (dups, ii)); + camel_folder_delete_message ( + folder, g_ptr_array_index (dups, ii)); camel_folder_thaw (folder); } @@ -539,7 +559,9 @@ action_mail_remove_duplicates (GtkAction *action, EMailReader *reader) em_utils_uids_free (uids); } else { /* the function itself is freeing uids */ - mail_get_messages (folder, uids, remove_duplicates_got_messages_cb, reader); + mail_get_messages ( + folder, uids, + remove_duplicates_got_messages_cb, reader); } } @@ -3012,12 +3034,18 @@ mail_reader_update_actions (EMailReader *reader, MessageList *message_list; gint row = -1, count = -1; ETreeTableAdapter *etta; - ETreePath node; + ETreePath node = NULL; - message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader)); + message_list = MESSAGE_LIST ( + e_mail_reader_get_message_list (reader)); etta = e_tree_get_table_adapter (E_TREE (message_list)); - if (message_list->cursor_uid != NULL && (node = g_hash_table_lookup (message_list->uid_nodemap, message_list->cursor_uid)) != NULL) { + if (message_list->cursor_uid != NULL) + node = g_hash_table_lookup ( + message_list->uid_nodemap, + message_list->cursor_uid); + + if (node != NULL) { row = e_tree_table_adapter_row_of_node (etta, node); count = e_table_model_row_count (E_TABLE_MODEL (etta)); } -- cgit v1.2.3 From 2c31a5bc23cf5a092c0621bf34554ffb2b6ae2ec Mon Sep 17 00:00:00 2001 From: Kjartan Maraas Date: Tue, 8 Feb 2011 11:57:50 -0500 Subject: Bug 641756 - Fix warnings from GCC 4.6 GCC learned how to find dead assignments. --- mail/e-mail-reader.c | 23 ----------------------- 1 file changed, 23 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index c05b392cda..b9948ae240 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -630,8 +630,6 @@ check_close_browser_reader (EMailReader *reader) gchar *value; gboolean close_it = FALSE; - g_return_if_fail (read != NULL); - /* only allow closing of a mail browser and nothing else */ if (!E_IS_MAIL_BROWSER (reader)) return; @@ -2715,7 +2713,6 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) GtkWidget *message_list; EWebView *web_view; CamelFolder *folder; - CamelStore *parent_store; EMailBackend *backend; const gchar *cursor_uid; const gchar *format_uid; @@ -2723,7 +2720,6 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) priv = E_MAIL_READER_GET_PRIVATE (reader); folder = e_mail_reader_get_folder (reader); - parent_store = camel_folder_get_parent_store (folder); backend = e_mail_reader_get_backend (reader); formatter = e_mail_reader_get_formatter (reader); @@ -2804,14 +2800,9 @@ mail_reader_message_selected_cb (EMailReader *reader, { EMailReaderPrivate *priv; MessageList *message_list; - CamelFolder *folder; - CamelStore *parent_store; priv = E_MAIL_READER_GET_PRIVATE (reader); - folder = e_mail_reader_get_folder (reader); - parent_store = camel_folder_get_parent_store (folder); - /* Cancel the previous message retrieval activity. */ g_cancellable_cancel (priv->retrieving_message); @@ -2954,7 +2945,6 @@ mail_reader_update_actions (EMailReader *reader, GtkAction *action; const gchar *action_name; gboolean sensitive; - EMailReaderPrivate *priv; /* Be descriptive. */ gboolean any_messages_selected; @@ -2978,8 +2968,6 @@ mail_reader_update_actions (EMailReader *reader, gboolean first_message_selected = FALSE; gboolean last_message_selected = FALSE; - priv = E_MAIL_READER_GET_PRIVATE (reader); - backend = e_mail_reader_get_backend (reader); shell_backend = E_SHELL_BACKEND (backend); @@ -3516,10 +3504,6 @@ e_mail_reader_init (EMailReader *reader, gboolean init_actions, gboolean connect_signals) { - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; - EShellSettings *shell_settings; EMFormatHTML *formatter; EMenuToolAction *menu_tool_action; EWebView *web_view; @@ -3533,14 +3517,9 @@ e_mail_reader_init (EMailReader *reader, g_return_if_fail (E_IS_MAIL_READER (reader)); - backend = e_mail_reader_get_backend (reader); formatter = e_mail_reader_get_formatter (reader); message_list = e_mail_reader_get_message_list (reader); - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - shell_settings = e_shell_get_shell_settings (shell); - web_view = em_format_html_get_web_view (formatter); if (!init_actions) @@ -4288,7 +4267,6 @@ e_mail_reader_show_search_bar (EMailReader *reader) void e_mail_reader_enable_show_folder (EMailReader *reader) { - EMailReaderPrivate *priv; CamelFolder *folder; GtkAction *action; const gchar *action_name; @@ -4298,7 +4276,6 @@ e_mail_reader_enable_show_folder (EMailReader *reader) g_return_if_fail (E_IS_MAIL_READER (reader)); - priv = E_MAIL_READER_GET_PRIVATE (reader); folder = e_mail_reader_get_folder (reader); full_name = camel_folder_get_full_name (folder); -- cgit v1.2.3 From 1afbba4a8b49c9911337f42d040608a8e35e6577 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 12 Feb 2011 13:40:33 -0500 Subject: Bug 642171 - Implicit libgnome dependency for lockdown GConf keys Lockdown keys have moved to gsettings-desktop-schemas, so disable lockdown integration until we're ready for GSettings. --- mail/e-mail-reader.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index b9948ae240..d7942d0985 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2974,12 +2974,17 @@ mail_reader_update_actions (EMailReader *reader, shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); +#if 0 /* XXX Lockdown keys have moved to gsettings-desktop-schemas, + * so disable lockdown integration until we're ready for + * GSettings. */ #ifndef G_OS_WIN32 disable_printing = e_shell_settings_get_boolean ( shell_settings, "disable-printing"); #else disable_printing = FALSE; #endif +#endif + disable_printing = FALSE; have_enabled_account = (state & E_MAIL_READER_HAVE_ENABLED_ACCOUNT); -- cgit v1.2.3 From 4b9ac3879d25d14cbaaab9237626257c3561f7ff Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 14 Feb 2011 19:15:36 +0100 Subject: Fix few memory leaks --- mail/e-mail-reader.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index d7942d0985..a56b514227 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2582,7 +2582,7 @@ mail_reader_message_loaded_cb (CamelFolder *folder, { EMailReader *reader; EMailReaderPrivate *priv; - CamelMimeMessage *message; + CamelMimeMessage *message = NULL; EMFormatHTML *formatter; GtkWidget *message_list; EMailBackend *backend; @@ -2703,6 +2703,9 @@ exit: priv->restoring_message_selection = FALSE; mail_reader_closure_free (closure); + + if (message) + g_object_unref (message); } static gboolean -- cgit v1.2.3 From fcb29478f605deb787c62fc7567c5c7f897585bb Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 18 Feb 2011 19:35:59 -0500 Subject: Coding style and whitespace cleanup. --- mail/e-mail-reader.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index a56b514227..3f5a056ee6 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2941,10 +2941,12 @@ static void mail_reader_update_actions (EMailReader *reader, guint32 state) { +#if 0 EShell *shell; EMailBackend *backend; EShellBackend *shell_backend; EShellSettings *shell_settings; +#endif GtkAction *action; const gchar *action_name; gboolean sensitive; @@ -2971,15 +2973,15 @@ mail_reader_update_actions (EMailReader *reader, gboolean first_message_selected = FALSE; gboolean last_message_selected = FALSE; +#if 0 /* XXX Lockdown keys have moved to gsettings-desktop-schemas, + * so disable lockdown integration until we're ready for + * GSettings. */ backend = e_mail_reader_get_backend (reader); shell_backend = E_SHELL_BACKEND (backend); shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); -#if 0 /* XXX Lockdown keys have moved to gsettings-desktop-schemas, - * so disable lockdown integration until we're ready for - * GSettings. */ #ifndef G_OS_WIN32 disable_printing = e_shell_settings_get_boolean ( shell_settings, "disable-printing"); -- cgit v1.2.3 From c1e6e105bbdba69734e0752d4403a04bac6cd61b Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 1 Mar 2011 12:06:16 +0100 Subject: Slightly smaller dialogs for Reply type questions (but not all) --- mail/e-mail-reader.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 3f5a056ee6..6a90fe6b9e 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1265,7 +1265,7 @@ action_mail_reply_all_check (CamelFolder *folder, check = gtk_check_button_new_with_mnemonic (_("_Do not ask me again.")); gtk_container_set_border_width (GTK_CONTAINER (check), 12); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); - gtk_box_pack_start (GTK_BOX (content_area), check, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (content_area), check, FALSE, FALSE, 0); gtk_widget_show (check); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1422,7 +1422,7 @@ action_mail_reply_sender_check (CamelFolder *folder, gtk_container_set_border_width ((GtkContainer *)check, 12); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_box_pack_start ( - GTK_BOX (content_area), check, TRUE, TRUE, 0); + GTK_BOX (content_area), check, FALSE, FALSE, 0); gtk_widget_show (check); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1456,18 +1456,18 @@ action_mail_reply_sender_check (CamelFolder *folder, vbox = gtk_vbox_new (FALSE, 0); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); check_again = gtk_check_button_new_with_mnemonic ( _("_Do not ask me again.")); - gtk_box_pack_start (GTK_BOX (vbox), check_again, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), check_again, FALSE, FALSE, 0); gtk_widget_show (check_again); check_always_ignore = gtk_check_button_new_with_mnemonic ( _("_Always ignore Reply-To: for mailing lists.")); gtk_box_pack_start ( - GTK_BOX (vbox), check_always_ignore, TRUE, TRUE, 0); + GTK_BOX (vbox), check_always_ignore, FALSE, FALSE, 0); gtk_widget_show (check_always_ignore); response = gtk_dialog_run (GTK_DIALOG (dialog)); -- cgit v1.2.3 From 5dfb6cdf0cffed68a5993fa96fa006d636d293b4 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 1 Mar 2011 15:56:41 +0100 Subject: Let Esc behave like Cancel in Reply questions and do not leak message --- mail/e-mail-reader.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 6a90fe6b9e..b70bebb7b9 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1284,8 +1284,10 @@ action_mail_reply_all_check (CamelFolder *folder, if (response == GTK_RESPONSE_NO) type = E_MAIL_REPLY_TO_SENDER; - else if (response == GTK_RESPONSE_CANCEL) + else if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) { + g_object_unref (message); return; + } } e_mail_reader_reply_to_message (reader, message, type); @@ -1437,8 +1439,10 @@ action_mail_reply_sender_check (CamelFolder *folder, type = E_MAIL_REPLY_TO_ALL; else if (response == GTK_RESPONSE_OK) type = E_MAIL_REPLY_TO_LIST; - else if (response == GTK_RESPONSE_CANCEL) + else if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) { + g_object_unref (message); goto exit; + } } else if (ask_list_reply_to) { GtkWidget *dialog; @@ -1487,8 +1491,10 @@ action_mail_reply_sender_check (CamelFolder *folder, type = E_MAIL_REPLY_TO_FROM; else if (response == GTK_RESPONSE_OK) type = E_MAIL_REPLY_TO_LIST; - else if (response == GTK_RESPONSE_CANCEL) + else if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) { + g_object_unref (message); goto exit; + } } e_mail_reader_reply_to_message (reader, message, type); -- cgit v1.2.3 From a09a95559ef640f23da644aef845607774c79f38 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 24 Mar 2011 16:47:53 -0400 Subject: Fix alignment of extra widgets in EAlertDialogs. Add e_alert_dialog_get_content_area(), which returns the GtkVBox containing the primary and secondary labels. Use this instead of gtk_dialog_get_content_area() to maintain the dialog's left margin beneath the image. --- mail/e-mail-reader.c | 79 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 32 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index b70bebb7b9..79439d3f08 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -658,7 +658,8 @@ check_close_browser_reader (EMailReader *reader) if (!parent) parent = e_mail_reader_get_window (reader); - dialog = e_alert_dialog_new_for_args (parent, "mail:ask-reply-close-browser", NULL); + dialog = e_alert_dialog_new_for_args ( + parent, "mail:ask-reply-close-browser", NULL); response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -1254,18 +1255,22 @@ action_mail_reply_all_check (CamelFolder *folder, if (recip_count >= 15) { GtkWidget *dialog; - GtkWidget *content_area, *check; + GtkWidget *check; + GtkWidget *container; gint response; dialog = e_alert_dialog_new_for_args ( e_mail_reader_get_window (reader), "mail:ask-reply-many-recips", NULL); + container = e_alert_dialog_get_content_area ( + E_ALERT_DIALOG (dialog)); + /* Check buttons */ - check = gtk_check_button_new_with_mnemonic (_("_Do not ask me again.")); - gtk_container_set_border_width (GTK_CONTAINER (check), 12); - content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); - gtk_box_pack_start (GTK_BOX (content_area), check, FALSE, FALSE, 0); + check = gtk_check_button_new_with_mnemonic ( + _("_Do not ask me again.")); + gtk_box_pack_start ( + GTK_BOX (container), check, FALSE, FALSE, 0); gtk_widget_show (check); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1282,11 +1287,16 @@ action_mail_reply_all_check (CamelFolder *folder, gtk_widget_destroy (dialog); - if (response == GTK_RESPONSE_NO) - type = E_MAIL_REPLY_TO_SENDER; - else if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) { - g_object_unref (message); - return; + switch (response) { + case GTK_RESPONSE_NO: + type = E_MAIL_REPLY_TO_SENDER; + break; + case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: + g_object_unref (message); + return; + default: + break; } } @@ -1411,20 +1421,22 @@ action_mail_reply_sender_check (CamelFolder *folder, it's a Reply-To: munged list message... unless we're ignoring munging */ if (ask_ignore_list_reply_to || !munged_list_message) { GtkWidget *dialog; - GtkWidget *content_area, *check; + GtkWidget *check; + GtkWidget *container; gint response; dialog = e_alert_dialog_new_for_args ( e_mail_reader_get_window (reader), "mail:ask-list-private-reply", NULL); + container = e_alert_dialog_get_content_area ( + E_ALERT_DIALOG (dialog)); + /* Check buttons */ check = gtk_check_button_new_with_mnemonic ( _("_Do not ask me again.")); - gtk_container_set_border_width ((GtkContainer *)check, 12); - content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_box_pack_start ( - GTK_BOX (content_area), check, FALSE, FALSE, 0); + GTK_BOX (container), check, FALSE, FALSE, 0); gtk_widget_show (check); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1446,8 +1458,7 @@ action_mail_reply_sender_check (CamelFolder *folder, } else if (ask_list_reply_to) { GtkWidget *dialog; - GtkWidget *content_area; - GtkWidget *vbox; + GtkWidget *container; GtkWidget *check_again; GtkWidget *check_always_ignore; gint response; @@ -1456,22 +1467,20 @@ action_mail_reply_sender_check (CamelFolder *folder, e_mail_reader_get_window (reader), "mail:ask-list-honour-reply-to", NULL); - /*Check buttons*/ - vbox = gtk_vbox_new (FALSE, 0); - content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); - gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, FALSE, 0); - gtk_widget_show (vbox); + container = e_alert_dialog_get_content_area ( + E_ALERT_DIALOG (dialog)); check_again = gtk_check_button_new_with_mnemonic ( _("_Do not ask me again.")); - gtk_box_pack_start (GTK_BOX (vbox), check_again, FALSE, FALSE, 0); + gtk_box_pack_start ( + GTK_BOX (container), check_again, FALSE, FALSE, 0); gtk_widget_show (check_again); check_always_ignore = gtk_check_button_new_with_mnemonic ( _("_Always ignore Reply-To: for mailing lists.")); gtk_box_pack_start ( - GTK_BOX (vbox), check_always_ignore, FALSE, FALSE, 0); + GTK_BOX (container), check_always_ignore, + FALSE, FALSE, 0); gtk_widget_show (check_always_ignore); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -1487,13 +1496,19 @@ action_mail_reply_sender_check (CamelFolder *folder, gtk_widget_destroy (dialog); - if (response == GTK_RESPONSE_NO) - type = E_MAIL_REPLY_TO_FROM; - else if (response == GTK_RESPONSE_OK) - type = E_MAIL_REPLY_TO_LIST; - else if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) { - g_object_unref (message); - goto exit; + switch (response) { + case GTK_RESPONSE_NO: + type = E_MAIL_REPLY_TO_FROM; + break; + case GTK_RESPONSE_OK: + type = E_MAIL_REPLY_TO_LIST; + break; + case GTK_RESPONSE_CANCEL: + case GTK_RESPONSE_DELETE_EVENT: + g_object_unref (message); + goto exit; + default: + break; } } -- cgit v1.2.3 From ba6a2343869f6be82f44261f183cd6925659d5ee Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 27 Mar 2011 15:16:39 -0400 Subject: Restore lockdown integration. With lockdown settings available through GSettings, widgets can handle lockdown integration themselves without having to use EShellSettings. Also fixed a few places where printing or save-to-disk actions were either not properly wired up or not responding to lockdown settings, but much more work needs done. Attachments, for example, are not honoring the disable-save-to-disk setting at all. This too requires the recently-added gsettings-desktop-schemas dependency. --- mail/e-mail-reader.c | 68 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 27 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 79439d3f08..9da57fba0f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2962,19 +2962,12 @@ static void mail_reader_update_actions (EMailReader *reader, guint32 state) { -#if 0 - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; - EShellSettings *shell_settings; -#endif GtkAction *action; const gchar *action_name; gboolean sensitive; /* Be descriptive. */ gboolean any_messages_selected; - gboolean disable_printing; gboolean enable_flag_clear; gboolean enable_flag_completed; gboolean enable_flag_for_followup; @@ -2994,24 +2987,6 @@ mail_reader_update_actions (EMailReader *reader, gboolean first_message_selected = FALSE; gboolean last_message_selected = FALSE; -#if 0 /* XXX Lockdown keys have moved to gsettings-desktop-schemas, - * so disable lockdown integration until we're ready for - * GSettings. */ - backend = e_mail_reader_get_backend (reader); - - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - shell_settings = e_shell_get_shell_settings (shell); - -#ifndef G_OS_WIN32 - disable_printing = e_shell_settings_get_boolean ( - shell_settings, "disable-printing"); -#else - disable_printing = FALSE; -#endif -#endif - disable_printing = FALSE; - have_enabled_account = (state & E_MAIL_READER_HAVE_ENABLED_ACCOUNT); single_message_selected = @@ -3295,12 +3270,12 @@ mail_reader_update_actions (EMailReader *reader, gtk_action_set_sensitive (action, sensitive); action_name = "mail-print"; - sensitive = single_message_selected && !disable_printing; + sensitive = single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); action_name = "mail-print-preview"; - sensitive = single_message_selected && !disable_printing; + sensitive = single_message_selected; action = e_mail_reader_get_action (reader, action_name); gtk_action_set_sensitive (action, sensitive); @@ -3546,6 +3521,10 @@ e_mail_reader_init (EMailReader *reader, const gchar *action_name; const gchar *key; +#ifndef G_OS_WIN32 + GSettings *settings; +#endif + g_return_if_fail (E_IS_MAIL_READER (reader)); formatter = e_mail_reader_get_formatter (reader); @@ -3695,6 +3674,41 @@ e_mail_reader_init (EMailReader *reader, action, "activate", G_CALLBACK (action_search_folder_sender_cb), reader); +#ifndef G_OS_WIN32 + /* Lockdown integration. */ + + settings = g_settings_new ("org.gnome.desktop.lockdown"); + + action_name = "mail-print"; + action = e_mail_reader_get_action (reader, action_name); + g_settings_bind ( + settings, "disable-printing", + action, "visible", + G_SETTINGS_BIND_GET | + G_SETTINGS_BIND_NO_SENSITIVITY | + G_SETTINGS_BIND_INVERT_BOOLEAN); + + action_name = "mail-print-preview"; + action = e_mail_reader_get_action (reader, action_name); + g_settings_bind ( + settings, "disable-printing", + action, "visible", + G_SETTINGS_BIND_GET | + G_SETTINGS_BIND_NO_SENSITIVITY | + G_SETTINGS_BIND_INVERT_BOOLEAN); + + action_name = "mail-save-as"; + action = e_mail_reader_get_action (reader, action_name); + g_settings_bind ( + settings, "disable-save-to-disk", + action, "visible", + G_SETTINGS_BIND_GET | + G_SETTINGS_BIND_NO_SENSITIVITY | + G_SETTINGS_BIND_INVERT_BOOLEAN); + + g_object_unref (settings); +#endif + /* Bind properties. */ action_name = "mail-caret-mode"; -- cgit v1.2.3 From 63c26d5712c807f65db9c1b0c98ca06aad76171a Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 27 Mar 2011 17:58:32 -0400 Subject: Miscellaneous GtkAction-related cleanups. Prefer the newer GtkAction "set" functions over g_object_set(). --- mail/e-mail-reader.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 9da57fba0f..c288db023e 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -3205,24 +3205,25 @@ mail_reader_update_actions (EMailReader *reader, gtk_action_set_sensitive (action, sensitive); action_name = "mail-goto-folder"; + sensitive = e_mail_reader_get_enable_show_folder (reader); action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "visible", e_mail_reader_get_enable_show_folder (reader), NULL); - gtk_action_set_sensitive (action, e_mail_reader_get_enable_show_folder (reader)); + gtk_action_set_sensitive (action, sensitive); + gtk_action_set_visible (action, sensitive); action_name = "mail-goto-nexttab"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "visible", FALSE, NULL); gtk_action_set_sensitive (action, TRUE); + gtk_action_set_visible (action, FALSE); action_name = "mail-goto-prevtab"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "visible", FALSE, NULL); gtk_action_set_sensitive (action, TRUE); + gtk_action_set_visible (action, FALSE); action_name = "mail-close-tab"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "visible", FALSE, NULL); gtk_action_set_sensitive (action, TRUE); + gtk_action_set_visible (action, FALSE); action_name = "mail-move"; sensitive = any_messages_selected; @@ -3607,54 +3608,53 @@ e_mail_reader_init (EMailReader *reader, action_name = "mail-delete"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "short-label", _("Delete"), NULL); + gtk_action_set_short_label (action, _("Delete")); action_name = "mail-forward"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "is-important", TRUE, NULL); + gtk_action_set_is_important (action, TRUE); action_name = "mail-reply-group"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "is-important", TRUE, NULL); + gtk_action_set_is_important (action, TRUE); action_name = "mail-goto-folder"; action = e_mail_reader_get_action (reader, action_name); sensitive = e_mail_reader_get_enable_show_folder (reader); - g_object_set (action, "visible", FALSE, NULL); gtk_action_set_sensitive (action, sensitive); + gtk_action_set_visible (action, FALSE); action_name = "mail-goto-nexttab"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "visible", FALSE, NULL); gtk_action_set_sensitive (action, TRUE); + gtk_action_set_visible (action, FALSE); action_name = "mail-goto-prevtab"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "visible", FALSE, NULL); gtk_action_set_sensitive (action, TRUE); + gtk_action_set_visible (action, FALSE); action_name = "mail-close-tab"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "visible", FALSE, NULL); gtk_action_set_sensitive (action, TRUE); + gtk_action_set_visible (action, FALSE); action_name = "mail-next"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "short-label", _("Next"), NULL); + gtk_action_set_short_label (action, _("Next")); action_name = "mail-previous"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "short-label", _("Previous"), NULL); + gtk_action_set_short_label (action, _("Previous")); action_name = "mail-reply-all"; action = e_mail_reader_get_action (reader, action_name); - g_object_set (action, "is-important", TRUE, NULL); + gtk_action_set_is_important (action, TRUE); action_name = "mail-reply-sender"; action = e_mail_reader_get_action (reader, action_name); - g_object_set ( - action, "is-important", TRUE, - "short-label", _("Reply"), NULL); + gtk_action_set_is_important (action, TRUE); + gtk_action_set_short_label (action, _("Reply")); action_name = "add-to-address-book"; action = e_web_view_get_action (web_view, action_name); -- cgit v1.2.3 From 35a998b2de7d3127ea802a9284f2b5ab44df1de6 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 13 Apr 2011 12:09:07 -0400 Subject: Demonstrate EWebView as an EAlertSink. --- mail/e-mail-reader.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index c288db023e..30480fb1d6 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2706,17 +2706,10 @@ mail_reader_message_loaded_cb (CamelFolder *folder, mail_reader_closure_free); } else if (error != NULL) { - gchar *string; - - /* Display the error inline and clear the exception. */ - string = g_strdup_printf ( - "

%s

%s

", - _("Unable to retrieve message"), - error->message); - - e_web_view_load_string (web_view, string); - g_free (string); - + e_alert_submit ( + E_ALERT_SINK (web_view), + "mail:no-retrieve-message", + error->message, NULL); g_error_free (error); } -- cgit v1.2.3 From 0b07e836c2aaf32c39fd4795a5f0ec6397b643ff Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 13 Apr 2011 12:50:00 -0400 Subject: Don't try to refresh or sync mail folders when offline. Switching between mail folders in offline mode produces lots of annoying alerts for operations we shouldn't even be attempting. --- mail/e-mail-reader.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 30480fb1d6..f26921c328 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2906,18 +2906,24 @@ mail_reader_set_folder (EMailReader *reader, EMFormatHTML *formatter; CamelFolder *previous_folder; GtkWidget *message_list; + EMailBackend *backend; + EShell *shell; const gchar *previous_folder_uri; gboolean outgoing; priv = E_MAIL_READER_GET_PRIVATE (reader); + backend = e_mail_reader_get_backend (reader); formatter = e_mail_reader_get_formatter (reader); message_list = e_mail_reader_get_message_list (reader); previous_folder = e_mail_reader_get_folder (reader); previous_folder_uri = e_mail_reader_get_folder_uri (reader); - if (previous_folder != NULL) + shell = e_shell_backend_get_shell (E_SHELL_BACKEND (backend)); + + /* Only synchronize the folder if we're online. */ + if (previous_folder != NULL && e_shell_get_online (shell)) mail_sync_folder (previous_folder, NULL, NULL); /* Skip the rest if we're already viewing the folder. */ -- cgit v1.2.3 From ae28ea4621c9ced08524548ca67a5297c284ce01 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 2 May 2011 21:01:48 -0400 Subject: EMailShellView: Open the selected folder ourselves. This one's a little involved: - EMailShellView now obtains a CamelFolder itself in response to EMFolderTree::folder-selected signals. Uses EActivity to do so. - Revise EMFolderTree::folder-selected signal arguments to be more useful: emit a CamelStore object instead of a folder URI. - Also revise EMFolderTree::folder-activiated signal arguments the same way while we're at it. - Remove the "folder_uri" argument from e_mail_reader_set_folder(). If you have a CamelFolder object you can obtain the URI string by calling camel_folder_get_uri(). --- mail/e-mail-reader.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index f26921c328..c9a43869fb 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1697,11 +1697,9 @@ action_mail_show_source_cb (GtkAction *action, CamelFolder *folder; GtkWidget *browser; GPtrArray *uids; - const gchar *folder_uri; backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids->len > 0); @@ -1714,7 +1712,7 @@ action_mail_show_source_cb (GtkAction *action, em_format_set_mode ( EM_FORMAT (formatter), EM_FORMAT_MODE_SOURCE); - e_mail_reader_set_folder (reader, folder, folder_uri); + e_mail_reader_set_folder (reader, folder); e_mail_reader_set_message (reader, uids->pdata[0]); gtk_widget_show (browser); @@ -2899,8 +2897,7 @@ mail_reader_get_enable_show_folder (EMailReader *reader) static void mail_reader_set_folder (EMailReader *reader, - CamelFolder *folder, - const gchar *folder_uri) + CamelFolder *folder) { EMailReaderPrivate *priv; EMFormatHTML *formatter; @@ -2908,7 +2905,7 @@ mail_reader_set_folder (EMailReader *reader, GtkWidget *message_list; EMailBackend *backend; EShell *shell; - const gchar *previous_folder_uri; + const gchar *folder_uri = NULL; gboolean outgoing; priv = E_MAIL_READER_GET_PRIVATE (reader); @@ -2918,7 +2915,6 @@ mail_reader_set_folder (EMailReader *reader, message_list = e_mail_reader_get_message_list (reader); previous_folder = e_mail_reader_get_folder (reader); - previous_folder_uri = e_mail_reader_get_folder_uri (reader); shell = e_shell_backend_get_shell (E_SHELL_BACKEND (backend)); @@ -2927,9 +2923,12 @@ mail_reader_set_folder (EMailReader *reader, mail_sync_folder (previous_folder, NULL, NULL); /* Skip the rest if we're already viewing the folder. */ - if (g_strcmp0 (folder_uri, previous_folder_uri) == 0) + if (folder == previous_folder) return; + if (folder != NULL) + folder_uri = camel_folder_get_uri (folder); + outgoing = folder != NULL && folder_uri != NULL && ( em_utils_folder_is_drafts (folder, folder_uri) || em_utils_folder_is_outbox (folder, folder_uri) || @@ -4109,8 +4108,7 @@ e_mail_reader_get_folder_uri (EMailReader *reader) void e_mail_reader_set_folder (EMailReader *reader, - CamelFolder *folder, - const gchar *folder_uri) + CamelFolder *folder) { EMailReaderInterface *interface; @@ -4119,7 +4117,7 @@ e_mail_reader_set_folder (EMailReader *reader, interface = E_MAIL_READER_GET_INTERFACE (reader); g_return_if_fail (interface->set_folder != NULL); - interface->set_folder (reader, folder, folder_uri); + interface->set_folder (reader, folder); } /* Helper for e_mail_reader_set_folder_uri () */ @@ -4130,7 +4128,7 @@ mail_reader_got_folder_cb (gchar *folder_uri, { EMailReader *reader = user_data; - e_mail_reader_set_folder (reader, folder, folder_uri); + e_mail_reader_set_folder (reader, folder); } void -- cgit v1.2.3 From 96f2945894ede215b920f7ea69f6e6074e4beaf0 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 2 May 2011 21:06:25 -0400 Subject: Remove e_mail_reader_set_folder_uri(). Function is no longer used, or wanted. --- mail/e-mail-reader.c | 30 ------------------------------ 1 file changed, 30 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index c9a43869fb..094facd7e5 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -4120,36 +4120,6 @@ e_mail_reader_set_folder (EMailReader *reader, interface->set_folder (reader, folder); } -/* Helper for e_mail_reader_set_folder_uri () */ -static void -mail_reader_got_folder_cb (gchar *folder_uri, - CamelFolder *folder, - gpointer user_data) -{ - EMailReader *reader = user_data; - - e_mail_reader_set_folder (reader, folder); -} - -void -e_mail_reader_set_folder_uri (EMailReader *reader, - const gchar *folder_uri) -{ - EMailBackend *backend; - EMailSession *session; - - g_return_if_fail (E_IS_MAIL_READER (reader)); - g_return_if_fail (folder_uri != NULL); - - backend = e_mail_reader_get_backend (reader); - session = e_mail_backend_get_session (backend); - - /* Fetch the CamelFolder asynchronously. */ - mail_get_folder ( - session, folder_uri, 0, mail_reader_got_folder_cb, - reader, mail_msg_fast_ordered_push); -} - void e_mail_reader_set_message (EMailReader *reader, const gchar *uid) -- cgit v1.2.3 From 0434afb9a5831d93a5c0dd7c842aa3f92efa3dae Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 2 May 2011 21:54:12 -0400 Subject: Drop 'folder_uri' param from message_list_set_folder(). --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 094facd7e5..b9e77b825c 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2940,7 +2940,7 @@ mail_reader_set_folder (EMailReader *reader, priv->folder_was_just_selected = (folder != NULL); message_list_set_folder ( - MESSAGE_LIST (message_list), folder, folder_uri, outgoing); + MESSAGE_LIST (message_list), folder, outgoing); mail_reader_emit_folder_loaded (reader); } -- cgit v1.2.3 From 9e0f0f529f363717fa0a2884fe576d8a26ed3df2 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 08:59:35 -0400 Subject: Drop 'folder_uri' param from em_utils_folder_is_drafts(). --- mail/e-mail-reader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index b9e77b825c..c3ad3165ed 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -924,7 +924,7 @@ action_mail_message_edit_cb (GtkAction *action, shell_backend = E_SHELL_BACKEND (backend); shell = e_shell_backend_get_shell (shell_backend); - replace = em_utils_folder_is_drafts (folder, folder_uri); + replace = em_utils_folder_is_drafts (folder); em_utils_edit_messages (shell, folder, uids, replace); } @@ -2930,7 +2930,7 @@ mail_reader_set_folder (EMailReader *reader, folder_uri = camel_folder_get_uri (folder); outgoing = folder != NULL && folder_uri != NULL && ( - em_utils_folder_is_drafts (folder, folder_uri) || + em_utils_folder_is_drafts (folder) || em_utils_folder_is_outbox (folder, folder_uri) || em_utils_folder_is_sent (folder, folder_uri)); @@ -3806,7 +3806,7 @@ e_mail_reader_check_state (EMailReader *reader) } drafts_or_outbox = - em_utils_folder_is_drafts (folder, folder_uri) || + em_utils_folder_is_drafts (folder) || em_utils_folder_is_outbox (folder, folder_uri); /* Initialize this flag based on whether there are any -- cgit v1.2.3 From b9f932b1b84349e80e8383d925a00a75a3b7fe29 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 09:16:49 -0400 Subject: Drop 'folder_uri' param from em_utils_folder_is_sent(). --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index c3ad3165ed..4e84b6c1fb 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2932,7 +2932,7 @@ mail_reader_set_folder (EMailReader *reader, outgoing = folder != NULL && folder_uri != NULL && ( em_utils_folder_is_drafts (folder) || em_utils_folder_is_outbox (folder, folder_uri) || - em_utils_folder_is_sent (folder, folder_uri)); + em_utils_folder_is_sent (folder)); /* FIXME Need to pass a GCancellable. */ em_format_format (EM_FORMAT (formatter), NULL, NULL, NULL, NULL); -- cgit v1.2.3 From c3b983d6e12e218b6f908cf263e7e08570332d6a Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 09:40:49 -0400 Subject: Drop 'folder_uri' param from em_utils_folder_is_outbox(). --- mail/e-mail-reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 4e84b6c1fb..e0ef3940c0 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2931,7 +2931,7 @@ mail_reader_set_folder (EMailReader *reader, outgoing = folder != NULL && folder_uri != NULL && ( em_utils_folder_is_drafts (folder) || - em_utils_folder_is_outbox (folder, folder_uri) || + em_utils_folder_is_outbox (folder) || em_utils_folder_is_sent (folder)); /* FIXME Need to pass a GCancellable. */ @@ -3807,7 +3807,7 @@ e_mail_reader_check_state (EMailReader *reader) drafts_or_outbox = em_utils_folder_is_drafts (folder) || - em_utils_folder_is_outbox (folder, folder_uri); + em_utils_folder_is_outbox (folder); /* Initialize this flag based on whether there are any * messages selected. We will update it in the loop. */ -- cgit v1.2.3 From b8a932ae1e8b10344525ae2a5a78894e98ac2540 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 10:45:46 -0400 Subject: Fix compiler warnings. Mostly dead assignments. --- mail/e-mail-reader.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index e0ef3940c0..3cf8d1f1ef 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -912,13 +912,11 @@ action_mail_message_edit_cb (GtkAction *action, EMailBackend *backend; EShellBackend *shell_backend; CamelFolder *folder; - const gchar *folder_uri; GPtrArray *uids; gboolean replace; backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); uids = e_mail_reader_get_selected_uids (reader); shell_backend = E_SHELL_BACKEND (backend); @@ -3772,7 +3770,6 @@ e_mail_reader_check_state (EMailReader *reader) GPtrArray *uids; CamelFolder *folder; CamelStore *store = NULL; - const gchar *folder_uri; const gchar *tag; gboolean can_clear_flags = FALSE; gboolean can_flag_completed = FALSE; @@ -3796,7 +3793,6 @@ e_mail_reader_check_state (EMailReader *reader) g_return_val_if_fail (E_IS_MAIL_READER (reader), 0); folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); uids = e_mail_reader_get_selected_uids (reader); if (folder != NULL) { -- cgit v1.2.3 From 3bdba393f75bf3073d4b3e325fc4092dc1268ea9 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 10:54:56 -0400 Subject: Fix a runtime warning in e_mail_reader_check_state(). Don't call em_utils_folder_is_drafts() or em_utils_folder_is_outbox() if the CamelFolder is NULL. --- mail/e-mail-reader.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 3cf8d1f1ef..631fe5789a 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -3783,7 +3783,7 @@ e_mail_reader_check_state (EMailReader *reader) gboolean has_undeleted = FALSE; gboolean has_unimportant = FALSE; gboolean has_unread = FALSE; - gboolean drafts_or_outbox; + gboolean drafts_or_outbox = FALSE; gboolean store_supports_vjunk = FALSE; gboolean is_mailing_list; gboolean is_junk_folder = FALSE; @@ -3798,13 +3798,13 @@ e_mail_reader_check_state (EMailReader *reader) if (folder != NULL) { store = camel_folder_get_parent_store (folder); store_supports_vjunk = (store->flags & CAMEL_STORE_VJUNK); - is_junk_folder = (folder->folder_flags & CAMEL_FOLDER_IS_JUNK) != 0; + is_junk_folder = + (folder->folder_flags & CAMEL_FOLDER_IS_JUNK) != 0; + drafts_or_outbox = + em_utils_folder_is_drafts (folder) || + em_utils_folder_is_outbox (folder); } - drafts_or_outbox = - em_utils_folder_is_drafts (folder) || - em_utils_folder_is_outbox (folder); - /* Initialize this flag based on whether there are any * messages selected. We will update it in the loop. */ is_mailing_list = (uids->len > 0); -- cgit v1.2.3 From 1957378edf2264426c77571bde90c6bfeb7e50ce Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 11:30:11 -0400 Subject: Change em_folder_tree_model_user_marked_unread() params. Take a CamelFolder instead of a folder URI string. --- mail/e-mail-reader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 631fe5789a..9d3ca5c228 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -883,7 +883,7 @@ action_mail_mark_unread_cb (GtkAction *action, { GtkWidget *message_list; EMFolderTreeModel *model; - const gchar *folder_uri; + CamelFolder *folder; guint32 mask = CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DELETED; guint32 set = 0; guint n_marked; @@ -900,8 +900,8 @@ action_mail_mark_unread_cb (GtkAction *action, /* Notify the tree model that the user has marked messages as * unread so it doesn't mistake the event as new mail arriving. */ model = em_folder_tree_model_get_default (); - folder_uri = e_mail_reader_get_folder_uri (reader); - em_folder_tree_model_user_marked_unread (model, folder_uri, n_marked); + folder = e_mail_reader_get_folder (reader); + em_folder_tree_model_user_marked_unread (model, folder, n_marked); } static void -- cgit v1.2.3 From 06411bdbbb3e6877c679007c269c84b05713f895 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 13:42:15 -0400 Subject: Remove 'from_uri' params from e-msg-composer-utils.c. Pass CamelFolder objects instead, which are already available at almost every call site. --- mail/e-mail-reader.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 9d3ca5c228..ad596bba26 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -689,11 +689,9 @@ action_mail_forward_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - const gchar *folder_uri; backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); @@ -704,7 +702,7 @@ action_mail_forward_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, folder_uri, + shell, folder, uids, e_mail_reader_get_forward_style (reader)); else em_utils_uids_free (uids); @@ -722,11 +720,9 @@ action_mail_forward_attached_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - const gchar *folder_uri; backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); @@ -737,7 +733,7 @@ action_mail_forward_attached_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, folder_uri, + shell, folder, uids, E_MAIL_FORWARD_STYLE_ATTACHED); else em_utils_uids_free (uids); @@ -755,11 +751,9 @@ action_mail_forward_inline_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - const gchar *folder_uri; backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); @@ -770,7 +764,7 @@ action_mail_forward_inline_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, folder_uri, + shell, folder, uids, E_MAIL_FORWARD_STYLE_INLINE); else em_utils_uids_free (uids); @@ -788,11 +782,9 @@ action_mail_forward_quoted_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - const gchar *folder_uri; backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); @@ -803,7 +795,7 @@ action_mail_forward_quoted_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, folder_uri, + shell, folder, uids, E_MAIL_FORWARD_STYLE_QUOTED); else em_utils_uids_free (uids); @@ -933,15 +925,15 @@ action_mail_message_new_cb (GtkAction *action, EShell *shell; EMailBackend *backend; EShellBackend *shell_backend; - const gchar *folder_uri; + CamelFolder *folder; + folder = e_mail_reader_get_folder (reader); backend = e_mail_reader_get_backend (reader); - folder_uri = e_mail_reader_get_folder_uri (reader); shell_backend = E_SHELL_BACKEND (backend); shell = e_shell_backend_get_shell (shell_backend); - em_utils_compose_new_message (shell, folder_uri); + em_utils_compose_new_message (shell, folder); } static void -- cgit v1.2.3 From 76280e456d8d9789e9a9d2186926fc5607bd8967 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 14:07:50 -0400 Subject: Build vfolder rules with CamelFolders instead of folder URIs. --- mail/e-mail-reader.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index ad596bba26..21d5341de2 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1798,13 +1798,13 @@ action_search_folder_recipient_cb (GtkAction *action, EMailSession *session; EMFormatHTML *formatter; EWebView *web_view; + CamelFolder *folder; CamelURL *curl; - const gchar *folder_uri; const gchar *uri; /* This action is defined in EMailDisplay. */ - folder_uri = e_mail_reader_get_folder_uri (reader); + folder = e_mail_reader_get_folder (reader); formatter = e_mail_reader_get_formatter (reader); web_view = em_format_html_get_web_view (formatter); @@ -1824,7 +1824,7 @@ action_search_folder_recipient_cb (GtkAction *action, inet_addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (inet_addr), curl->path); vfolder_gui_add_from_address ( - session, inet_addr, AUTO_TO, folder_uri); + session, inet_addr, AUTO_TO, folder); g_object_unref (inet_addr); } @@ -1839,13 +1839,13 @@ action_search_folder_sender_cb (GtkAction *action, EMailSession *session; EMFormatHTML *formatter; EWebView *web_view; + CamelFolder *folder; CamelURL *curl; - const gchar *folder_uri; const gchar *uri; /* This action is defined in EMailDisplay. */ - folder_uri = e_mail_reader_get_folder_uri (reader); + folder = e_mail_reader_get_folder (reader); formatter = e_mail_reader_get_formatter (reader); web_view = em_format_html_get_web_view (formatter); @@ -1865,7 +1865,7 @@ action_search_folder_sender_cb (GtkAction *action, inet_addr = camel_internet_address_new (); camel_address_decode (CAMEL_ADDRESS (inet_addr), curl->path); vfolder_gui_add_from_address ( - session, inet_addr, AUTO_FROM, folder_uri); + session, inet_addr, AUTO_FROM, folder); g_object_unref (inet_addr); } -- cgit v1.2.3 From a9c9f0be5fd5aa5667412a7f1fb516d9133874df Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 14:42:29 -0400 Subject: Remove e_mail_reader_get_folder_uri(). Instead call e_mail_reader_get_folder() and, if you really need to, generate the folder URI with e_mail_folder_uri_from_folder(). --- mail/e-mail-reader.c | 24 ------------------------ 1 file changed, 24 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 21d5341de2..808deda0fd 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2869,16 +2869,6 @@ mail_reader_get_folder (EMailReader *reader) return MESSAGE_LIST (message_list)->folder; } -static const gchar * -mail_reader_get_folder_uri (EMailReader *reader) -{ - GtkWidget *message_list; - - message_list = e_mail_reader_get_message_list (reader); - - return MESSAGE_LIST (message_list)->folder_uri; -} - static gboolean mail_reader_get_enable_show_folder (EMailReader *reader) { @@ -3386,7 +3376,6 @@ e_mail_reader_default_init (EMailReaderInterface *interface) interface->get_selected_uids = mail_reader_get_selected_uids; interface->get_folder = mail_reader_get_folder; - interface->get_folder_uri = mail_reader_get_folder_uri; interface->enable_show_folder = mail_reader_get_enable_show_folder; interface->set_folder = mail_reader_set_folder; interface->set_message = mail_reader_set_message; @@ -4081,19 +4070,6 @@ e_mail_reader_get_folder (EMailReader *reader) return interface->get_folder (reader); } -const gchar * -e_mail_reader_get_folder_uri (EMailReader *reader) -{ - EMailReaderInterface *interface; - - g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); - - interface = E_MAIL_READER_GET_INTERFACE (reader); - g_return_val_if_fail (interface->get_folder_uri != NULL, NULL); - - return interface->get_folder_uri (reader); -} - void e_mail_reader_set_folder (EMailReader *reader, CamelFolder *folder) -- cgit v1.2.3 From 324a7da5d7c9af29f18431b197f2caa3a0d40ec6 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 3 May 2011 19:24:58 -0400 Subject: Use e_mail_folder_uri_from_folder() instead of camel_folder_get_uri(). --- mail/e-mail-reader.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 808deda0fd..fd85f5f984 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2885,7 +2885,6 @@ mail_reader_set_folder (EMailReader *reader, GtkWidget *message_list; EMailBackend *backend; EShell *shell; - const gchar *folder_uri = NULL; gboolean outgoing; priv = E_MAIL_READER_GET_PRIVATE (reader); @@ -2906,10 +2905,7 @@ mail_reader_set_folder (EMailReader *reader, if (folder == previous_folder) return; - if (folder != NULL) - folder_uri = camel_folder_get_uri (folder); - - outgoing = folder != NULL && folder_uri != NULL && ( + outgoing = folder != NULL && ( em_utils_folder_is_drafts (folder) || em_utils_folder_is_outbox (folder) || em_utils_folder_is_sent (folder)); -- cgit v1.2.3 From c7b455de89487e606fc620420c1778f5e55afcac Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 7 May 2011 11:15:51 -0400 Subject: Adapt to CamelFolder:name -> display-name. --- mail/e-mail-reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index fd85f5f984..6ef8ec2e29 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -515,7 +515,7 @@ remove_duplicates_got_messages_cb (CamelFolder *folder, if (dups->len == 0) { em_utils_prompt_user ( parent, NULL, "mail:info-no-remove-duplicates", - camel_folder_get_name (folder), NULL); + camel_folder_get_display_name (folder), NULL); } else { gchar *msg = g_strdup_printf (ngettext ( /* Translators: %s is replaced with a folder name @@ -525,7 +525,7 @@ remove_duplicates_got_messages_cb (CamelFolder *folder, "Folder '%s' contains %d duplicate messages. " "Are you sure you want to delete them?", dups->len), - camel_folder_get_name (folder), dups->len); + camel_folder_get_display_name (folder), dups->len); if (em_utils_prompt_user ( parent, NULL, "mail:ask-remove-duplicates", msg, NULL)) { -- cgit v1.2.3 From 4cfb84c573f21ca7519e24cff1c5742b715355c4 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 7 May 2011 12:22:36 -0400 Subject: Whitespace and coding style cleanups. --- mail/e-mail-reader.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 6ef8ec2e29..dc163bda06 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -627,6 +627,7 @@ static void check_close_browser_reader (EMailReader *reader) { GConfClient *client; + const gchar *key; gchar *value; gboolean close_it = FALSE; @@ -636,8 +637,8 @@ check_close_browser_reader (EMailReader *reader) client = gconf_client_get_default (); - value = gconf_client_get_string ( - client, "/apps/evolution/mail/prompts/reply_close_browser", NULL); + key = "/apps/evolution/mail/prompts/reply_close_browser"; + value = gconf_client_get_string (client, key, NULL); if (value && g_str_equal (value, "always")) { close_it = TRUE; @@ -665,10 +666,10 @@ check_close_browser_reader (EMailReader *reader) close_it = response == GTK_RESPONSE_YES || response == GTK_RESPONSE_OK; - if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_CANCEL) - gconf_client_set_string ( - client, "/apps/evolution/mail/prompts/reply_close_browser", - response == GTK_RESPONSE_OK ? "always" : "never", NULL); + if (response == GTK_RESPONSE_OK) + gconf_client_set_string (client, key, "always", NULL); + else if (response == GTK_RESPONSE_CANCEL) + gconf_client_set_string (client, key, "never", NULL); } g_free (value); @@ -1441,7 +1442,8 @@ action_mail_reply_sender_check (CamelFolder *folder, type = E_MAIL_REPLY_TO_ALL; else if (response == GTK_RESPONSE_OK) type = E_MAIL_REPLY_TO_LIST; - else if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) { + else if (response == GTK_RESPONSE_CANCEL || + response == GTK_RESPONSE_DELETE_EVENT) { g_object_unref (message); goto exit; } -- cgit v1.2.3 From 63a7f4d1ccd62b543a0b82a6d11c2d2b24ef1125 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 10 May 2011 17:27:49 -0400 Subject: EMailReader: Reimplement "mail-remove-duplicates" action. Now uses e_mail_folder_find_duplicate_messages(). --- mail/e-mail-reader.c | 154 +-------------------------------------------------- 1 file changed, 3 insertions(+), 151 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index dc163bda06..ec667765e2 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -410,159 +410,11 @@ action_mail_remove_attachments_cb (GtkAction *action, EMailReader *reader) mail_remove_attachments (folder, uids); } -static gchar * -get_message_checksum (CamelFolder *folder, CamelMimeMessage *msg) -{ - static const GChecksumType duplicate_csum = G_CHECKSUM_SHA256; - - CamelDataWrapper *content; - CamelStream *mem; - GByteArray *buffer; - gchar *digest = NULL; - - if (!msg) - return NULL; - - /* get message contents */ - content = camel_medium_get_content ((CamelMedium *) msg); - if (!content) - return NULL; - - /* calculate checksum */ - mem = camel_stream_mem_new (); - camel_data_wrapper_decode_to_stream_sync (content, mem, NULL, NULL); - - buffer = camel_stream_mem_get_byte_array (CAMEL_STREAM_MEM (mem)); - if (buffer) - digest = g_compute_checksum_for_data ( - duplicate_csum, buffer->data, buffer->len); - - g_object_unref (mem); - - return digest; -} - -static gboolean -message_is_duplicated (GHashTable *messages, guint64 id, gchar *digest) -{ - gchar *hash_digest = g_hash_table_lookup (messages, &id); - - if (!hash_digest) - return FALSE; - - return g_str_equal (digest, hash_digest); -} - static void -remove_duplicates_got_messages_cb (CamelFolder *folder, - GPtrArray *uids, - GPtrArray *msgs, - gpointer data) -{ - EMailReader *reader = data; - GtkWindow *parent; - GHashTable *messages; - GPtrArray *dups; - gint ii; - - g_return_if_fail (CAMEL_IS_FOLDER (folder)); - g_return_if_fail (uids != NULL); - g_return_if_fail (msgs != NULL); - g_return_if_fail (msgs->len <= uids->len); - g_return_if_fail (E_IS_MAIL_READER (reader)); - - parent = e_mail_reader_get_window (reader); - - messages = g_hash_table_new_full ( - g_int_hash, g_int_equal, g_free, g_free); - dups = g_ptr_array_new (); - - for (ii = 0; ii < msgs->len; ii++) { - CamelMessageInfo *msg_info; - const CamelSummaryMessageID *mid; - guint32 flags; - - msg_info = camel_folder_get_message_info ( - folder, uids->pdata[ii]); - mid = camel_message_info_message_id (msg_info); - flags = camel_message_info_flags (msg_info); - - if (!(flags & CAMEL_MESSAGE_DELETED)) { - gchar *digest; - - digest = get_message_checksum (folder, msgs->pdata[ii]); - - if (digest != NULL) { - if (message_is_duplicated ( - messages, mid->id.id, digest)) { - g_ptr_array_add (dups, uids->pdata[ii]); - g_free (digest); - } else { - guint64 *id; - - id = g_new0 (guint64, 1); - *id = mid->id.id; - - g_hash_table_insert ( - messages, id, digest); - } - } - } - - camel_message_info_free (msg_info); - } - - if (dups->len == 0) { - em_utils_prompt_user ( - parent, NULL, "mail:info-no-remove-duplicates", - camel_folder_get_display_name (folder), NULL); - } else { - gchar *msg = g_strdup_printf (ngettext ( - /* Translators: %s is replaced with a folder name - %d with count of duplicate messages. */ - "Folder '%s' contains %d duplicate message. " - "Are you sure you want to delete it?", - "Folder '%s' contains %d duplicate messages. " - "Are you sure you want to delete them?", - dups->len), - camel_folder_get_display_name (folder), dups->len); - - if (em_utils_prompt_user ( - parent, NULL, "mail:ask-remove-duplicates", msg, NULL)) { - camel_folder_freeze (folder); - for (ii = 0; ii < dups->len; ii++) - camel_folder_delete_message ( - folder, g_ptr_array_index (dups, ii)); - camel_folder_thaw (folder); - } - - g_free (msg); - } - - g_hash_table_destroy (messages); - g_ptr_array_free (dups, TRUE); -} - -static void -action_mail_remove_duplicates (GtkAction *action, EMailReader *reader) +action_mail_remove_duplicates (GtkAction *action, + EMailReader *reader) { - MessageList *message_list; - CamelFolder *folder; - GPtrArray *uids; - - message_list = MESSAGE_LIST (e_mail_reader_get_message_list (reader)); - uids = message_list_get_selected (message_list); - folder = message_list->folder; - - if (!uids || uids->len <= 1) { - if (uids) - em_utils_uids_free (uids); - } else { - /* the function itself is freeing uids */ - mail_get_messages ( - folder, uids, - remove_duplicates_got_messages_cb, reader); - } + e_mail_reader_remove_duplicates (reader); } static void -- cgit v1.2.3 From e5760e065ff1f4c5b9842b182224a1ccdd2e322f Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 11 May 2011 10:23:10 -0400 Subject: Reimplement em_utils_forward_messages(). Now uses e_mail_folder_build_attachment() and e_mail_folder_get_multiple_messages(). --- mail/e-mail-reader.c | 36 ++++-------------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index ec667765e2..e248a561cd 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -536,26 +536,19 @@ static void action_mail_forward_cb (GtkAction *action, EMailReader *reader) { - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); g_return_if_fail (uids != NULL); - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, + reader, folder, uids, e_mail_reader_get_forward_style (reader)); else em_utils_uids_free (uids); @@ -567,26 +560,19 @@ static void action_mail_forward_attached_cb (GtkAction *action, EMailReader *reader) { - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); g_return_if_fail (uids != NULL); - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, + reader, folder, uids, E_MAIL_FORWARD_STYLE_ATTACHED); else em_utils_uids_free (uids); @@ -598,26 +584,19 @@ static void action_mail_forward_inline_cb (GtkAction *action, EMailReader *reader) { - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); g_return_if_fail (uids != NULL); - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, + reader, folder, uids, E_MAIL_FORWARD_STYLE_INLINE); else em_utils_uids_free (uids); @@ -629,26 +608,19 @@ static void action_mail_forward_quoted_cb (GtkAction *action, EMailReader *reader) { - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; CamelFolder *folder; GtkWindow *window; GPtrArray *uids; - backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); g_return_if_fail (uids != NULL); - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( - shell, folder, uids, + reader, folder, uids, E_MAIL_FORWARD_STYLE_QUOTED); else em_utils_uids_free (uids); -- cgit v1.2.3 From 648eacf49fb9103bbe00e4baa45c6d05a28861c6 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 11 May 2011 12:09:48 -0400 Subject: Reimplement em_utils_edit_messages(). Now uses e_mail_folder_get_multiple_messages(). --- mail/e-mail-reader.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index e248a561cd..e18a5467d2 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -725,22 +725,15 @@ static void action_mail_message_edit_cb (GtkAction *action, EMailReader *reader) { - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; CamelFolder *folder; GPtrArray *uids; gboolean replace; - backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - replace = em_utils_folder_is_drafts (folder); - em_utils_edit_messages (shell, folder, uids, replace); + em_utils_edit_messages (reader, folder, uids, replace); } static void -- cgit v1.2.3 From e9b9df5f94c0d9d31972a906606db9ee1db3ad48 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 11 May 2011 14:44:35 -0400 Subject: Fix some GPtrArray leaks. --- mail/e-mail-reader.c | 51 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 16 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index e18a5467d2..8cca498aec 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -541,17 +541,20 @@ action_mail_forward_cb (GtkAction *action, GPtrArray *uids; folder = e_mail_reader_get_folder (reader); - uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); - + uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + /* XXX Either e_mail_reader_get_selected_uids() + * or MessageList should do this itself. */ + g_ptr_array_set_free_func (uids, (GDestroyNotify) g_free); + if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, e_mail_reader_get_forward_style (reader)); - else - em_utils_uids_free (uids); + + g_ptr_array_unref (uids); check_close_browser_reader (reader); } @@ -565,17 +568,20 @@ action_mail_forward_attached_cb (GtkAction *action, GPtrArray *uids; folder = e_mail_reader_get_folder (reader); - uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); - + uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + /* XXX Either e_mail_reader_get_selected_uids() + * or MessageList should do this itself. */ + g_ptr_array_set_free_func (uids, (GDestroyNotify) g_free); + if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, E_MAIL_FORWARD_STYLE_ATTACHED); - else - em_utils_uids_free (uids); + + g_ptr_array_unref (uids); check_close_browser_reader (reader); } @@ -589,17 +595,20 @@ action_mail_forward_inline_cb (GtkAction *action, GPtrArray *uids; folder = e_mail_reader_get_folder (reader); - uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); - + uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + /* XXX Either e_mail_reader_get_selected_uids() + * or MessageList should do this itself. */ + g_ptr_array_set_free_func (uids, (GDestroyNotify) g_free); + if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, E_MAIL_FORWARD_STYLE_INLINE); - else - em_utils_uids_free (uids); + + g_ptr_array_unref (uids); check_close_browser_reader (reader); } @@ -613,17 +622,20 @@ action_mail_forward_quoted_cb (GtkAction *action, GPtrArray *uids; folder = e_mail_reader_get_folder (reader); - uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); - + uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + /* XXX Either e_mail_reader_get_selected_uids() + * or MessageList should do this itself. */ + g_ptr_array_set_free_func (uids, (GDestroyNotify) g_free); + if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, E_MAIL_FORWARD_STYLE_QUOTED); - else - em_utils_uids_free (uids); + + g_ptr_array_unref (uids); check_close_browser_reader (reader); } @@ -731,9 +743,16 @@ action_mail_message_edit_cb (GtkAction *action, folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); + g_return_if_fail (uids != NULL); + + /* XXX Either e_mail_reader_get_selected_uids() + * or MessageList should do this itself. */ + g_ptr_array_set_free_func (uids, (GDestroyNotify) g_free); replace = em_utils_folder_is_drafts (folder); em_utils_edit_messages (reader, folder, uids, replace); + + g_ptr_array_unref (uids); } static void -- cgit v1.2.3 From 366dacefa0a59c66320f65f19796eb30ad23f255 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 12 May 2011 15:32:33 -0400 Subject: Add e_mail_reader_new_activity(). Configuring and submitting an EActivity for every mail operation is getting tedious. This function helps reduce boilerplate code by: * Creating a new EActivity instance. * Installing an EAlertSink using e_mail_reader_get_alert_sink(). * Installing a GCancellable (which is really a CamelOperation). * Submitting the activity via e_shell_backend_add_activity(). I'm considering adding a similar function (or class method) for EShellView. Not sure yet... --- mail/e-mail-reader.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 8cca498aec..85d623ddde 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2556,7 +2556,6 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) GtkWidget *message_list; EWebView *web_view; CamelFolder *folder; - EMailBackend *backend; const gchar *cursor_uid; const gchar *format_uid; @@ -2564,7 +2563,6 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) folder = e_mail_reader_get_folder (reader); - backend = e_mail_reader_get_backend (reader); formatter = e_mail_reader_get_formatter (reader); message_list = e_mail_reader_get_message_list (reader); @@ -2601,14 +2599,12 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) #endif g_free (string); - activity = e_activity_new (); - - cancellable = camel_operation_new (); - e_activity_set_cancellable (activity, cancellable); + activity = e_mail_reader_new_activity (reader); + cancellable = e_activity_get_cancellable (activity); closure = g_slice_new0 (EMailReaderClosure); + closure->activity = activity; closure->reader = g_object_ref (reader); - closure->activity = g_object_ref (activity); closure->message_uid = g_strdup (cursor_uid); camel_folder_get_message ( @@ -2616,14 +2612,9 @@ mail_reader_message_selected_timeout_cb (EMailReader *reader) cancellable, (GAsyncReadyCallback) mail_reader_message_loaded_cb, closure); - e_shell_backend_add_activity ( - E_SHELL_BACKEND (backend), activity); - if (priv->retrieving_message != NULL) g_object_unref (priv->retrieving_message); - priv->retrieving_message = cancellable; - - g_object_unref (activity); + priv->retrieving_message = g_object_ref (cancellable); } } else { /* FIXME Need to pass a GCancellable. */ @@ -3742,7 +3733,31 @@ e_mail_reader_check_state (EMailReader *reader) em_utils_uids_free (uids); return state; +} + +EActivity * +e_mail_reader_new_activity (EMailReader *reader) +{ + EActivity *activity; + EMailBackend *backend; + EAlertSink *alert_sink; + GCancellable *cancellable; + + g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); + + activity = e_activity_new (); + + alert_sink = e_mail_reader_get_alert_sink (reader); + e_activity_set_alert_sink (activity, alert_sink); + + cancellable = camel_operation_new (); + e_activity_set_cancellable (activity, cancellable); + g_object_unref (cancellable); + + backend = e_mail_reader_get_backend (reader); + e_shell_backend_add_activity (E_SHELL_BACKEND (backend), activity); + return activity; } void -- cgit v1.2.3 From 9cbfb1963b7747deec5333b7e376e9a42c5da299 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 12 May 2011 16:31:12 -0400 Subject: Reimplement the "mail-redirect" action. Now fetches the message itself using camel_folder_get_message(), then calls em_utils_redirect_message(). --- mail/e-mail-reader.c | 67 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 8 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 85d623ddde..315e6b91c1 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1033,28 +1033,79 @@ action_mail_print_preview_cb (GtkAction *action, } static void -action_mail_redirect_cb (GtkAction *action, - EMailReader *reader) +mail_reader_redirect_cb (CamelFolder *folder, + GAsyncResult *result, + EMailReaderClosure *closure) { EShell *shell; EMailBackend *backend; - EShellBackend *shell_backend; + EAlertSink *alert_sink; + CamelMimeMessage *message; + GError *error = NULL; + + alert_sink = e_activity_get_alert_sink (closure->activity); + + message = camel_folder_get_message_finish (folder, result, &error); + + if (e_activity_handle_cancellation (closure->activity, error)) { + g_warn_if_fail (message == NULL); + mail_reader_closure_free (closure); + g_error_free (error); + return; + + } else if (error != NULL) { + g_warn_if_fail (message == NULL); + e_alert_submit ( + alert_sink, "no-retrieve-message", + error->message, NULL); + mail_reader_closure_free (closure); + g_error_free (error); + return; + } + + g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); + + backend = e_mail_reader_get_backend (closure->reader); + shell = e_shell_backend_get_shell (E_SHELL_BACKEND (backend)); + + em_utils_redirect_message (shell, message); + check_close_browser_reader (closure->reader); + + g_object_unref (message); + + mail_reader_closure_free (closure); +} + +static void +action_mail_redirect_cb (GtkAction *action, + EMailReader *reader) +{ + EActivity *activity; + GCancellable *cancellable; + EMailReaderClosure *closure; GtkWidget *message_list; CamelFolder *folder; const gchar *uid; - backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); message_list = e_mail_reader_get_message_list (reader); uid = MESSAGE_LIST (message_list)->cursor_uid; g_return_if_fail (uid != NULL); - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); + /* Open the message asynchronously. */ - em_utils_redirect_message_by_uid (shell, folder, uid); - check_close_browser_reader (reader); + activity = e_mail_reader_new_activity (reader); + cancellable = e_activity_get_cancellable (activity); + + closure = g_slice_new0 (EMailReaderClosure); + closure->activity = activity; + closure->reader = g_object_ref (reader); + + camel_folder_get_message ( + folder, uid, G_PRIORITY_DEFAULT, + cancellable, (GAsyncReadyCallback) + mail_reader_redirect_cb, closure); } static void -- cgit v1.2.3 From 6ae1b3fe3c4dfd391de92bfca42e44ff7cc8fe19 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 12 May 2011 16:57:37 -0400 Subject: em_utils_reply_to_message(): Require a CamelMimeMessage. No more fetching a message itself. Oh, and stop unreffing the message. Those kinds of insane semantics are what lead to crashes. --- mail/e-mail-reader.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 315e6b91c1..673a5b206f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1122,9 +1122,6 @@ action_mail_reply_all_check (CamelFolder *folder, if (!message) return; - /* get_message_free () will unref the message, so we need to take an - extra ref for e_mail_reader_reply_to_message () to own. */ - g_object_ref (message); to = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO); cc = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); @@ -1291,10 +1288,6 @@ action_mail_reply_sender_check (CamelFolder *folder, munged_list_message = em_utils_is_munged_list_message (message); - /* get_message_free () will unref the message, so we need to take an - extra ref for e_mail_reader_reply_to_message () to own. */ - g_object_ref (message); - /* Don't do the "Are you sure you want to reply in private?" pop-up if it's a Reply-To: munged list message... unless we're ignoring munging */ if (ask_ignore_list_reply_to || !munged_list_message) { -- cgit v1.2.3 From b663d51f1bd01979030b8dff57a2631cd672775e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 12 May 2011 19:00:09 -0400 Subject: Miscellaneous cleanups. --- mail/e-mail-reader.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 673a5b206f..a281634a9f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -153,15 +153,16 @@ action_mail_add_sender_cb (GtkAction *action, CamelFolder *folder; GPtrArray *uids; const gchar *address; + const gchar *message_uid; folder = e_mail_reader_get_folder (reader); backend = e_mail_reader_get_backend (reader); - uids = e_mail_reader_get_selected_uids (reader); - if (uids->len != 1) - goto exit; + uids = e_mail_reader_get_selected_uids (reader); + g_return_if_fail (uids != NULL && uids->len == 1); + message_uid = g_ptr_array_index (uids, 0); - info = camel_folder_get_message_info (folder, uids->pdata[0]); + info = camel_folder_get_message_info (folder, message_uid); if (info == NULL) goto exit; @@ -1455,20 +1456,22 @@ action_mail_save_as_cb (GtkAction *action, CamelFolder *folder; GPtrArray *uids; GFile *file; + const gchar *message_uid; const gchar *title; gchar *suggestion = NULL; gchar *uri; folder = e_mail_reader_get_folder (reader); backend = e_mail_reader_get_backend (reader); - uids = e_mail_reader_get_selected_uids (reader); - g_return_if_fail (uids->len > 0); + uids = e_mail_reader_get_selected_uids (reader); + g_return_if_fail (uids != NULL && uids->len == 1); + message_uid = g_ptr_array_index (uids, 0); title = ngettext ("Save Message", "Save Messages", uids->len); /* Suggest as a filename the subject of the first message. */ - info = camel_folder_get_message_info (folder, uids->pdata[0]); + info = camel_folder_get_message_info (folder, message_uid); if (info != NULL) { const gchar *subject = camel_message_info_subject (info); @@ -1569,12 +1572,14 @@ action_mail_show_source_cb (GtkAction *action, CamelFolder *folder; GtkWidget *browser; GPtrArray *uids; + const gchar *message_uid; backend = e_mail_reader_get_backend (reader); folder = e_mail_reader_get_folder (reader); - uids = e_mail_reader_get_selected_uids (reader); - g_return_if_fail (uids->len > 0); + uids = e_mail_reader_get_selected_uids (reader); + g_return_if_fail (uids != NULL && uids->len == 1); + message_uid = g_ptr_array_index (uids, 0); browser = e_mail_browser_new (backend); reader = E_MAIL_READER (browser); @@ -1585,7 +1590,7 @@ action_mail_show_source_cb (GtkAction *action, EM_FORMAT (formatter), EM_FORMAT_MODE_SOURCE); e_mail_reader_set_folder (reader, folder); - e_mail_reader_set_message (reader, uids->pdata[0]); + e_mail_reader_set_message (reader, message_uid); gtk_widget_show (browser); em_utils_uids_free (uids); -- cgit v1.2.3 From e270dfde642d4dd4f932895b599f43ab62e6f631 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 12 May 2011 19:26:34 -0400 Subject: Keep forgetting to add prefixes to EAlert tags. --- mail/e-mail-reader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index a281634a9f..dd3f41b1cd 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1057,7 +1057,7 @@ mail_reader_redirect_cb (CamelFolder *folder, } else if (error != NULL) { g_warn_if_fail (message == NULL); e_alert_submit ( - alert_sink, "no-retrieve-message", + alert_sink, "mail:no-retrieve-message", error->message, NULL); mail_reader_closure_free (closure); g_error_free (error); -- cgit v1.2.3 From d4121a5270dbfa3a0f66ad73a41e507359751daa Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 13 May 2011 12:22:20 -0400 Subject: Reimplement the "mail-reply-all" action. Now uses camel_folder_get_message(). --- mail/e-mail-reader.c | 92 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 33 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index dd3f41b1cd..c9d1b347e1 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1111,20 +1111,42 @@ action_mail_redirect_cb (GtkAction *action, static void action_mail_reply_all_check (CamelFolder *folder, - const gchar *uid, - CamelMimeMessage *message, - gpointer user_data) + GAsyncResult *result, + EMailReaderClosure *closure) { - EMailReader *reader = user_data; + EAlertSink *alert_sink; + CamelMimeMessage *message; CamelInternetAddress *to, *cc; gint recip_count = 0; EMailReplyType type = E_MAIL_REPLY_TO_ALL; + GError *error = NULL; - if (!message) + alert_sink = e_activity_get_alert_sink (closure->activity); + + message = camel_folder_get_message_finish (folder, result, &error); + + if (e_activity_handle_cancellation (closure->activity, error)) { + g_warn_if_fail (message == NULL); + mail_reader_closure_free (closure); + g_error_free (error); + return; + + } else if (error != NULL) { + g_warn_if_fail (message == NULL); + e_alert_submit ( + alert_sink, "mail:no-retrieve-message", + error->message, NULL); + mail_reader_closure_free (closure); + g_error_free (error); return; + } + + g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); - to = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO); - cc = camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC); + to = camel_mime_message_get_recipients ( + message, CAMEL_RECIPIENT_TYPE_TO); + cc = camel_mime_message_get_recipients ( + message, CAMEL_RECIPIENT_TYPE_CC); recip_count = camel_address_length (CAMEL_ADDRESS (to)); recip_count += camel_address_length (CAMEL_ADDRESS (cc)); @@ -1136,7 +1158,7 @@ action_mail_reply_all_check (CamelFolder *folder, gint response; dialog = e_alert_dialog_new_for_args ( - e_mail_reader_get_window (reader), + e_mail_reader_get_window (closure->reader), "mail:ask-reply-many-recips", NULL); container = e_alert_dialog_get_content_area ( @@ -1169,15 +1191,19 @@ action_mail_reply_all_check (CamelFolder *folder, break; case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: - g_object_unref (message); - return; + goto exit; default: break; } } - e_mail_reader_reply_to_message (reader, message, type); - check_close_browser_reader (reader); + e_mail_reader_reply_to_message (closure->reader, message, type); + check_close_browser_reader (closure->reader); + +exit: + g_object_unref (message); + + mail_reader_closure_free (closure); } static void @@ -1197,32 +1223,32 @@ action_mail_reply_all_cb (GtkAction *action, g_object_unref (client); if (ask && !(state & E_MAIL_READER_SELECTION_IS_MAILING_LIST)) { - CamelMimeMessage *message = NULL; - EWebView *web_view; - EMFormatHTML *formatter; + EActivity *activity; + GCancellable *cancellable; + EMailReaderClosure *closure; + CamelFolder *folder; + GtkWidget *message_list; + const gchar *message_uid; - formatter = e_mail_reader_get_formatter (reader); - web_view = em_format_html_get_web_view (formatter); - if (gtk_widget_get_mapped (GTK_WIDGET (web_view))) - message = CAMEL_MIME_MESSAGE (EM_FORMAT (formatter)->message); + folder = e_mail_reader_get_folder (reader); + g_return_if_fail (CAMEL_IS_FOLDER (folder)); - if (!message) { - CamelFolder *folder; - GtkWidget *message_list; - gchar *uid; + message_list = e_mail_reader_get_message_list (reader); + message_uid = MESSAGE_LIST (message_list)->cursor_uid; + g_return_if_fail (message_uid != NULL); - folder = e_mail_reader_get_folder (reader); - message_list = e_mail_reader_get_message_list (reader); + activity = e_mail_reader_new_activity (reader); + cancellable = e_activity_get_cancellable (activity); - uid = MESSAGE_LIST (message_list)->cursor_uid; - g_return_if_fail (uid != NULL); + closure = g_slice_new0 (EMailReaderClosure); + closure->activity = activity; + closure->reader = g_object_ref (reader); + + camel_folder_get_message ( + folder, message_uid, G_PRIORITY_DEFAULT, + cancellable, (GAsyncReadyCallback) + action_mail_reply_all_check, closure); - mail_get_message ( - folder, uid, action_mail_reply_all_check, - reader, mail_msg_unordered_push); - return; - } - action_mail_reply_all_check (NULL, NULL, message, reader); return; } -- cgit v1.2.3 From 473909ee932d3b610d313cc6d362c363f1c5dacd Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 13 May 2011 12:38:25 -0400 Subject: Reimplement the "mail-reply-sender" action. Now uses camel_folder_get_message(). --- mail/e-mail-reader.c | 126 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 79 insertions(+), 47 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index c9d1b347e1..ee0579f5c8 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1290,21 +1290,42 @@ action_mail_reply_list_cb (GtkAction *action, static void action_mail_reply_sender_check (CamelFolder *folder, - const gchar *uid, - CamelMimeMessage *message, - gpointer user_data) + GAsyncResult *result, + EMailReaderClosure *closure) { - EMailReader *reader = user_data; - GConfClient *client; + EAlertSink *alert_sink; + CamelMimeMessage *message; EMailReplyType type = E_MAIL_REPLY_TO_SENDER; + GConfClient *client; const gchar *key; gboolean ask_ignore_list_reply_to; gboolean ask_list_reply_to; gboolean munged_list_message; + gboolean active; + GError *error = NULL; + + alert_sink = e_activity_get_alert_sink (closure->activity); + + message = camel_folder_get_message_finish (folder, result, &error); - if (!message) + if (e_activity_handle_cancellation (closure->activity, error)) { + g_warn_if_fail (message == NULL); + mail_reader_closure_free (closure); + g_error_free (error); return; + } else if (error != NULL) { + g_warn_if_fail (message == NULL); + e_alert_submit ( + alert_sink, "mail:no-retrieve-message", + error->message, NULL); + mail_reader_closure_free (closure); + g_error_free (error); + return; + } + + g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); + client = gconf_client_get_default (); key = "/apps/evolution/mail/composer/ignore_list_reply_to"; @@ -1315,8 +1336,9 @@ action_mail_reply_sender_check (CamelFolder *folder, munged_list_message = em_utils_is_munged_list_message (message); - /* Don't do the "Are you sure you want to reply in private?" pop-up if - it's a Reply-To: munged list message... unless we're ignoring munging */ + /* Don't do the "Are you sure you want to reply in private?" pop-up + * if it's a Reply-To: munged list message... unless we're ignoring + * munging. */ if (ask_ignore_list_reply_to || !munged_list_message) { GtkWidget *dialog; GtkWidget *check; @@ -1324,7 +1346,7 @@ action_mail_reply_sender_check (CamelFolder *folder, gint response; dialog = e_alert_dialog_new_for_args ( - e_mail_reader_get_window (reader), + e_mail_reader_get_window (closure->reader), "mail:ask-list-private-reply", NULL); container = e_alert_dialog_get_content_area ( @@ -1339,9 +1361,12 @@ action_mail_reply_sender_check (CamelFolder *folder, response = gtk_dialog_run (GTK_DIALOG (dialog)); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check))) - gconf_client_set_bool ( - client, "/apps/evolution/mail/prompts/private_list_reply", FALSE, NULL); + active = gtk_toggle_button_get_active ( + GTK_TOGGLE_BUTTON (check)); + if (active) { + key = "/apps/evolution/mail/prompts/private_list_reply"; + gconf_client_set_bool (client, key, FALSE, NULL); + } gtk_widget_destroy (dialog); @@ -1351,7 +1376,6 @@ action_mail_reply_sender_check (CamelFolder *folder, type = E_MAIL_REPLY_TO_LIST; else if (response == GTK_RESPONSE_CANCEL || response == GTK_RESPONSE_DELETE_EVENT) { - g_object_unref (message); goto exit; } @@ -1363,7 +1387,7 @@ action_mail_reply_sender_check (CamelFolder *folder, gint response; dialog = e_alert_dialog_new_for_args ( - e_mail_reader_get_window (reader), + e_mail_reader_get_window (closure->reader), "mail:ask-list-honour-reply-to", NULL); container = e_alert_dialog_get_content_area ( @@ -1384,14 +1408,17 @@ action_mail_reply_sender_check (CamelFolder *folder, response = gtk_dialog_run (GTK_DIALOG (dialog)); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_again))) - gconf_client_set_bool ( - client, "/apps/evolution/mail/prompts/list_reply_to", FALSE, NULL); + active = gtk_toggle_button_get_active ( + GTK_TOGGLE_BUTTON (check_again)); + if (active) { + key = "/apps/evolution/mail/prompts/list_reply_to"; + gconf_client_set_bool (client, key, FALSE, NULL); + } - gconf_client_set_bool ( - client, "/apps/evolution/mail/composer/ignore_list_reply_to", - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_always_ignore)), - NULL); + key = "/apps/evolution/mail/composer/ignore_list_reply_to"; + active = gtk_toggle_button_get_active ( + GTK_TOGGLE_BUTTON (check_always_ignore)); + gconf_client_set_bool (client, key, active, NULL); gtk_widget_destroy (dialog); @@ -1404,18 +1431,20 @@ action_mail_reply_sender_check (CamelFolder *folder, break; case GTK_RESPONSE_CANCEL: case GTK_RESPONSE_DELETE_EVENT: - g_object_unref (message); goto exit; default: break; } } - e_mail_reader_reply_to_message (reader, message, type); - check_close_browser_reader (reader); + e_mail_reader_reply_to_message (closure->reader, message, type); + check_close_browser_reader (closure->reader); exit: g_object_unref (client); + g_object_unref (message); + + mail_reader_closure_free (closure); } static void @@ -1425,6 +1454,7 @@ action_mail_reply_sender_cb (GtkAction *action, GConfClient *client; gboolean ask_list_reply_to; gboolean ask_private_list_reply; + gboolean ask; const gchar *key; guint32 state; @@ -1437,36 +1467,38 @@ action_mail_reply_sender_cb (GtkAction *action, ask_private_list_reply = gconf_client_get_bool (client, key, NULL); g_object_unref (client); - if ((ask_private_list_reply || ask_list_reply_to) && - state & E_MAIL_READER_SELECTION_IS_MAILING_LIST) { - CamelMimeMessage *message = NULL; - EWebView *web_view; - EMFormatHTML *formatter; + ask = (ask_private_list_reply || ask_list_reply_to); + + if (ask && (state & E_MAIL_READER_SELECTION_IS_MAILING_LIST)) { + EActivity *activity; + GCancellable *cancellable; + EMailReaderClosure *closure; + CamelFolder *folder; + GtkWidget *message_list; + const gchar *message_uid; + + folder = e_mail_reader_get_folder (reader); + g_return_if_fail (CAMEL_IS_FOLDER (folder)); - formatter = e_mail_reader_get_formatter (reader); - web_view = em_format_html_get_web_view (formatter); - if (gtk_widget_get_mapped (GTK_WIDGET (web_view))) - message = CAMEL_MIME_MESSAGE (EM_FORMAT (formatter)->message); + message_list = e_mail_reader_get_message_list (reader); + message_uid = MESSAGE_LIST (message_list)->cursor_uid; + g_return_if_fail (message_uid != NULL); - if (!message) { - CamelFolder *folder; - GtkWidget *message_list; - gchar *uid; + activity = e_mail_reader_new_activity (reader); + cancellable = e_activity_get_cancellable (activity); - folder = e_mail_reader_get_folder (reader); - message_list = e_mail_reader_get_message_list (reader); + closure = g_slice_new0 (EMailReaderClosure); + closure->activity = activity; + closure->reader = g_object_ref (reader); - uid = MESSAGE_LIST (message_list)->cursor_uid; - g_return_if_fail (uid != NULL); + camel_folder_get_message ( + folder, message_uid, G_PRIORITY_DEFAULT, + cancellable, (GAsyncReadyCallback) + action_mail_reply_sender_check, closure); - mail_get_message ( - folder, uid, action_mail_reply_sender_check, - reader, mail_msg_unordered_push); - return; - } - action_mail_reply_sender_check (NULL, NULL, message, reader); return; } + e_mail_reader_reply_to_message (reader, NULL, E_MAIL_REPLY_TO_SENDER); check_close_browser_reader (reader); } -- cgit v1.2.3 From b61d2c08d7f16171e3c6a2ddb4759a2a2803aaf3 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 16 May 2011 22:43:46 -0400 Subject: Remove mail_remove_attachments(). Use e_mail_folder_remove_attachments() instead. --- mail/e-mail-reader.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index ee0579f5c8..0a6cb06848 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -400,20 +400,15 @@ action_mail_filters_apply_cb (GtkAction *action, } static void -action_mail_remove_attachments_cb (GtkAction *action, EMailReader *reader) +action_mail_remove_attachments_cb (GtkAction *action, + EMailReader *reader) { - CamelFolder *folder; - GPtrArray *uids; - - folder = e_mail_reader_get_folder (reader); - uids = e_mail_reader_get_selected_uids (reader); - - mail_remove_attachments (folder, uids); + e_mail_reader_remove_attachments (reader); } static void -action_mail_remove_duplicates (GtkAction *action, - EMailReader *reader) +action_mail_remove_duplicates_cb (GtkAction *action, + EMailReader *reader) { e_mail_reader_remove_duplicates (reader); } @@ -2146,7 +2141,7 @@ static GtkActionEntry mail_reader_entries[] = { N_("Remove Du_plicate Messages"), NULL, N_("Checks selected messages for duplicates"), - G_CALLBACK (action_mail_remove_duplicates) }, + G_CALLBACK (action_mail_remove_duplicates_cb) }, { "mail-reply-all", NULL, -- cgit v1.2.3 From f0a011f941bab3f6ac7228be4e1bec86a0de0d2a Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 17 May 2011 19:50:33 -0400 Subject: Remove mail_save_messages(). Use e_mail_folder_save_messages() instead. --- mail/e-mail-reader.c | 65 +--------------------------------------------------- 1 file changed, 1 insertion(+), 64 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 0a6cb06848..27096c4a03 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1502,70 +1502,7 @@ static void action_mail_save_as_cb (GtkAction *action, EMailReader *reader) { - EShell *shell; - EMailBackend *backend; - EShellBackend *shell_backend; - CamelMessageInfo *info; - CamelFolder *folder; - GPtrArray *uids; - GFile *file; - const gchar *message_uid; - const gchar *title; - gchar *suggestion = NULL; - gchar *uri; - - folder = e_mail_reader_get_folder (reader); - backend = e_mail_reader_get_backend (reader); - - uids = e_mail_reader_get_selected_uids (reader); - g_return_if_fail (uids != NULL && uids->len == 1); - message_uid = g_ptr_array_index (uids, 0); - - title = ngettext ("Save Message", "Save Messages", uids->len); - - /* Suggest as a filename the subject of the first message. */ - info = camel_folder_get_message_info (folder, message_uid); - if (info != NULL) { - const gchar *subject = camel_message_info_subject (info); - - if (subject) - suggestion = g_strconcat (subject, ".mbox", NULL); - camel_folder_free_message_info (folder, info); - } - - if (!suggestion) { - const gchar *basename; - - /* Translators: This is a part of a suggested file name - * used when saving a message or multiple messages to an - * mbox format, when the first message doesn't have a - * Subject. The extension ".mbox" is appended to this - * string, thus it will be something like "Message.mbox" - * at the end. */ - basename = ngettext ("Message", "Messages", uids->len); - suggestion = g_strconcat (basename, ".mbox", NULL); - } - - shell_backend = E_SHELL_BACKEND (backend); - shell = e_shell_backend_get_shell (shell_backend); - - file = e_shell_run_save_dialog ( - shell, title, suggestion, - "*.mbox:application/mbox,message/rfc822", NULL, NULL); - - if (file == NULL) { - em_utils_uids_free (uids); - return; - } - - uri = g_file_get_uri (file); - - /* This eats the UID array, so do not free it. */ - mail_save_messages (folder, uids, uri, NULL, NULL); - - g_free (uri); - - g_object_unref (file); + e_mail_reader_save_messages (reader); } static void -- cgit v1.2.3 From 7333f12087eb0b0271ff272c6643909a7803510b Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 20 May 2011 15:29:00 -0400 Subject: EMailReader: Support multiple action groups. Use an enum type to request different action groups. For now we just have E_MAIL_READER_ACTION_GROUP_STANDARD. EMailReader implementations should map the enum value to an appropriate GtkActionGroup. --- mail/e-mail-reader.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 27096c4a03..1697db9ab3 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2350,17 +2350,21 @@ mail_reader_double_click_cb (EMailReader *reader, gint col, GdkEvent *event) { + GtkAction *action; + /* Ignore double clicks on columns that handle their own state. */ if (MESSAGE_LIST_COLUMN_IS_ACTIVE (col)) return; - e_mail_reader_activate (reader, "mail-message-open"); + action = e_mail_reader_get_action (reader, "mail-message-open"); + gtk_action_activate (action); } static gboolean mail_reader_key_press_event_cb (EMailReader *reader, GdkEventKey *event) { + GtkAction *action; const gchar *action_name; if ((event->state & GDK_CONTROL_MASK) != 0) @@ -2426,7 +2430,8 @@ ctrl: } exit: - e_mail_reader_activate (reader, action_name); + action = e_mail_reader_get_action (reader, action_name); + gtk_action_activate (action); return TRUE; } @@ -3201,7 +3206,8 @@ mail_reader_init_charset_actions (EMailReader *reader) GtkRadioAction *default_action; GSList *radio_group; - action_group = e_mail_reader_get_action_group (reader); + action_group = e_mail_reader_get_action_group ( + reader, E_MAIL_READER_ACTION_GROUP_STANDARD); radio_group = e_charset_add_radio_actions ( action_group, "mail-charset-", NULL, @@ -3377,7 +3383,8 @@ e_mail_reader_init (EMailReader *reader, if (!init_actions) goto connect_signals; - action_group = e_mail_reader_get_action_group (reader); + action_group = e_mail_reader_get_action_group ( + reader, E_MAIL_READER_ACTION_GROUP_STANDARD); /* The "mail-forward" action is special: it uses a GtkMenuToolButton * for its toolbar item type. So we have to create it separately. */ @@ -3812,14 +3819,21 @@ GtkAction * e_mail_reader_get_action (EMailReader *reader, const gchar *action_name) { - GtkActionGroup *action_group; - GtkAction *action; + GtkAction *action = NULL; + gint ii; g_return_val_if_fail (E_IS_MAIL_READER (reader), NULL); g_return_val_if_fail (action_name != NULL, NULL); - action_group = e_mail_reader_get_action_group (reader); - action = gtk_action_group_get_action (action_group, action_name); + for (ii = 0; ii < E_MAIL_READER_NUM_ACTION_GROUPS; ii++) { + GtkActionGroup *group; + + group = e_mail_reader_get_action_group (reader, ii); + action = gtk_action_group_get_action (group, action_name); + + if (action != NULL) + break; + } if (action == NULL) g_critical ( @@ -3829,7 +3843,8 @@ e_mail_reader_get_action (EMailReader *reader, } GtkActionGroup * -e_mail_reader_get_action_group (EMailReader *reader) +e_mail_reader_get_action_group (EMailReader *reader, + EMailReaderActionGroup group) { EMailReaderInterface *interface; @@ -3838,7 +3853,7 @@ e_mail_reader_get_action_group (EMailReader *reader) interface = E_MAIL_READER_GET_INTERFACE (reader); g_return_val_if_fail (interface->get_action_group != NULL, NULL); - return interface->get_action_group (reader); + return interface->get_action_group (reader, group); } EAlertSink * -- cgit v1.2.3 From 9aa668aa6bf612673ad7e760b06fc62350be041e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 20 May 2011 18:33:11 -0400 Subject: Bug 650587 - Hide Search Folder actions when Search Folders are disabled Add an action group for Search Folders to EMailReader. The action group's visibility is bound to the "mail-enable-search-folders" setting, so that menu items related to Search Folders are hidden when Search Folders are disabled in GConf. Affected menu items are: Edit -> Search Folders Message -> Create Rule -> Search Folder from Subject... Message -> Create Rule -> Search Folder from Sender... Message -> Create Rule -> Search Folder from Recipients... Message -> Create Rule -> Search Folder from Mailing List... Search -> Create Search Folder From Search... --- mail/e-mail-reader.c | 84 +++++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 37 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 1697db9ab3..bbbcfabae1 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2108,34 +2108,6 @@ static GtkActionEntry mail_reader_entries[] = { N_("Save selected messages as an mbox file"), G_CALLBACK (action_mail_save_as_cb) }, - { "mail-search-folder-from-mailing-list", - NULL, - N_("Search Folder from Mailing _List..."), - NULL, - N_("Create a search folder for this mailing list"), - G_CALLBACK (action_mail_search_folder_from_mailing_list_cb) }, - - { "mail-search-folder-from-recipients", - NULL, - N_("Search Folder from Recipien_ts..."), - NULL, - N_("Create a search folder for these recipients"), - G_CALLBACK (action_mail_search_folder_from_recipients_cb) }, - - { "mail-search-folder-from-sender", - NULL, - N_("Search Folder from Sen_der..."), - NULL, - N_("Create a search folder for this sender"), - G_CALLBACK (action_mail_search_folder_from_sender_cb) }, - - { "mail-search-folder-from-subject", - NULL, - N_("Search Folder from S_ubject..."), - NULL, - N_("Create a search folder for this subject"), - G_CALLBACK (action_mail_search_folder_from_subject_cb) }, - { "mail-show-source", NULL, N_("_Message Source"), @@ -2237,6 +2209,37 @@ static GtkActionEntry mail_reader_entries[] = { NULL } }; +static GtkActionEntry mail_reader_search_folder_entries[] = { + + { "mail-search-folder-from-mailing-list", + NULL, + N_("Search Folder from Mailing _List..."), + NULL, + N_("Create a search folder for this mailing list"), + G_CALLBACK (action_mail_search_folder_from_mailing_list_cb) }, + + { "mail-search-folder-from-recipients", + NULL, + N_("Search Folder from Recipien_ts..."), + NULL, + N_("Create a search folder for these recipients"), + G_CALLBACK (action_mail_search_folder_from_recipients_cb) }, + + { "mail-search-folder-from-sender", + NULL, + N_("Search Folder from Sen_der..."), + NULL, + N_("Create a search folder for this sender"), + G_CALLBACK (action_mail_search_folder_from_sender_cb) }, + + { "mail-search-folder-from-subject", + NULL, + N_("Search Folder from S_ubject..."), + NULL, + N_("Create a search folder for this subject"), + G_CALLBACK (action_mail_search_folder_from_subject_cb) }, +}; + static EPopupActionEntry mail_reader_popup_entries[] = { { "mail-popup-copy", @@ -3200,15 +3203,12 @@ mail_reader_update_actions (EMailReader *reader, } static void -mail_reader_init_charset_actions (EMailReader *reader) +mail_reader_init_charset_actions (EMailReader *reader, + GtkActionGroup *action_group) { - GtkActionGroup *action_group; GtkRadioAction *default_action; GSList *radio_group; - action_group = e_mail_reader_get_action_group ( - reader, E_MAIL_READER_ACTION_GROUP_STANDARD); - radio_group = e_charset_add_radio_actions ( action_group, "mail-charset-", NULL, G_CALLBACK (action_mail_charset_cb), reader); @@ -3383,6 +3383,8 @@ e_mail_reader_init (EMailReader *reader, if (!init_actions) goto connect_signals; + /* Add the "standard" EMailReader actions. */ + action_group = e_mail_reader_get_action_group ( reader, E_MAIL_READER_ACTION_GROUP_STANDARD); @@ -3403,7 +3405,7 @@ e_mail_reader_init (EMailReader *reader, gtk_action_group_add_action_with_accel ( action_group, GTK_ACTION (menu_tool_action), "f"); - /* Likewise the "mail-reply-group" action */ + /* Likewise the "mail-reply-group" action. */ /* For Translators: "Group Reply" will reply either to a mailing list (if possible and if that configuration option is enabled), or else @@ -3424,8 +3426,6 @@ e_mail_reader_init (EMailReader *reader, action_group, GTK_ACTION (menu_tool_action), "g"); /* Add the other actions the normal way. */ - - gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions ( action_group, mail_reader_entries, G_N_ELEMENTS (mail_reader_entries), reader); @@ -3436,7 +3436,17 @@ e_mail_reader_init (EMailReader *reader, action_group, mail_reader_toggle_entries, G_N_ELEMENTS (mail_reader_toggle_entries), reader); - mail_reader_init_charset_actions (reader); + mail_reader_init_charset_actions (reader, action_group); + + /* Add EMailReader actions for Search Folders. The action group + * should be made invisible if Search Folders are disabled. */ + + action_group = e_mail_reader_get_action_group ( + reader, E_MAIL_READER_ACTION_GROUP_SEARCH_FOLDERS); + + gtk_action_group_add_actions ( + action_group, mail_reader_search_folder_entries, + G_N_ELEMENTS (mail_reader_search_folder_entries), reader); /* Bind GObject properties to GConf keys. */ -- cgit v1.2.3 From db48f8085ce6a0e76dc9b28364250e83ca66b1cc Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 20 May 2011 19:25:14 -0400 Subject: EMailReader: Remove the forward/reply style hack. Now that we're configuring EMailReader instances from an idle callback, we can safely store the forward and reply styles in the private struct. --- mail/e-mail-reader.c | 47 +++++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 24 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index bbbcfabae1..3802eaaded 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -74,6 +74,9 @@ struct _EMailReaderClosure { struct _EMailReaderPrivate { + EMailForwardStyle forward_style; + EMailReplyStyle reply_style; + /* This timer runs when the user selects a single message. */ guint message_selected_timeout_id; @@ -107,8 +110,6 @@ enum { static gchar *default_xfer_messages_uri; static GQuark quark_private; -static GQuark quark_forward_style; -static GQuark quark_reply_style; static guint signals[LAST_SIGNAL]; G_DEFINE_INTERFACE (EMailReader, e_mail_reader, G_TYPE_INITIALLY_UNOWNED) @@ -3234,16 +3235,6 @@ e_mail_reader_default_init (EMailReaderInterface *interface) { quark_private = g_quark_from_static_string ("e-mail-reader-private"); - /* Forward and reply styles are stored outside of the private - * structure as a workaround for EMailShellContent, which loads - * extensions long before the private structure is initialized, - * and one of those extensions binds our "forward-style" and - * "reply-style" properties to EShellSettings properties. */ - quark_forward_style = - g_quark_from_static_string ("e-mail-reader-forward-style"); - quark_reply_style = - g_quark_from_static_string ("e-mail-reader-reply-style"); - interface->get_selected_uids = mail_reader_get_selected_uids; interface->get_folder = mail_reader_get_folder; interface->enable_show_folder = mail_reader_get_enable_show_folder; @@ -4027,22 +4018,26 @@ e_mail_reader_open_selected_mail (EMailReader *reader) EMailForwardStyle e_mail_reader_get_forward_style (EMailReader *reader) { + EMailReaderPrivate *priv; + g_return_val_if_fail (E_IS_MAIL_READER (reader), 0); - return (EMailForwardStyle) - GPOINTER_TO_INT (g_object_get_qdata ( - G_OBJECT (reader), quark_forward_style)); + priv = E_MAIL_READER_GET_PRIVATE (reader); + + return priv->forward_style; } void e_mail_reader_set_forward_style (EMailReader *reader, EMailForwardStyle style) { + EMailReaderPrivate *priv; + g_return_if_fail (E_IS_MAIL_READER (reader)); - g_object_set_qdata ( - G_OBJECT (reader), quark_forward_style, - GINT_TO_POINTER (style)); + priv = E_MAIL_READER_GET_PRIVATE (reader); + + priv->forward_style = style; g_object_notify (G_OBJECT (reader), "forward-style"); } @@ -4086,22 +4081,26 @@ e_mail_reader_set_group_by_threads (EMailReader *reader, EMailReplyStyle e_mail_reader_get_reply_style (EMailReader *reader) { + EMailReaderPrivate *priv; + g_return_val_if_fail (E_IS_MAIL_READER (reader), 0); - return (EMailReplyStyle) - GPOINTER_TO_INT (g_object_get_qdata ( - G_OBJECT (reader), quark_reply_style)); + priv = E_MAIL_READER_GET_PRIVATE (reader); + + return priv->reply_style; } void e_mail_reader_set_reply_style (EMailReader *reader, EMailReplyStyle style) { + EMailReaderPrivate *priv; + g_return_if_fail (E_IS_MAIL_READER (reader)); - g_object_set_qdata ( - G_OBJECT (reader), quark_reply_style, - GINT_TO_POINTER (style)); + priv = E_MAIL_READER_GET_PRIVATE (reader); + + priv->reply_style = style; g_object_notify (G_OBJECT (reader), "reply-style"); } -- cgit v1.2.3 From 9692758dc5c3a03597f0eb0b16edd10134153823 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 23 May 2011 17:09:24 -0400 Subject: EMFolderTree: Store an EMailBackend instead of an EMailSession. All this so EMFolderTree can submit EActivity instances for async ops. You can obtain an EMailSession from an EMailBackend, but not vice versa. Creates lots of pretty ripples in the mail code, but ultimately reduces complexity. So it's a code cleanup of sorts. --- mail/e-mail-reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 3802eaaded..18d7621a9d 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -294,7 +294,7 @@ action_mail_copy_cb (GtkAction *action, window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); - folder_tree = em_folder_tree_new (session); + folder_tree = em_folder_tree_new (backend); emu_restore_folder_tree_state (EM_FOLDER_TREE (folder_tree)); em_folder_tree_set_excluded ( @@ -797,7 +797,7 @@ action_mail_move_cb (GtkAction *action, session = e_mail_backend_get_session (backend); - folder_tree = em_folder_tree_new (session); + folder_tree = em_folder_tree_new (backend); emu_restore_folder_tree_state (EM_FOLDER_TREE (folder_tree)); em_folder_tree_set_excluded ( -- cgit v1.2.3 From c6d8a030399f9e3d9f38798e99cdeecaf2d5fbbb Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 23 May 2011 22:42:49 -0400 Subject: Let EMFolderSelector create its own EMFolderTree. Also, minimize the EMFolderSelector API by removing frivolous wrapper functions and unused functions. --- mail/e-mail-reader.c | 58 +++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 18d7621a9d..91e303ec46 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -281,7 +281,8 @@ action_mail_copy_cb (GtkAction *action, CamelFolder *folder; EMailBackend *backend; EMailSession *session; - GtkWidget *folder_tree; + EMFolderSelector *selector; + EMFolderTree *folder_tree; GtkWidget *dialog; GtkWindow *window; GPtrArray *uids; @@ -294,29 +295,27 @@ action_mail_copy_cb (GtkAction *action, window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); - folder_tree = em_folder_tree_new (backend); - emu_restore_folder_tree_state (EM_FOLDER_TREE (folder_tree)); + dialog = em_folder_selector_new ( + window, backend, EM_FOLDER_SELECTOR_CAN_CREATE, + _("Copy to Folder"), NULL, _("C_opy")); + + selector = EM_FOLDER_SELECTOR (dialog); + folder_tree = em_folder_selector_get_folder_tree (selector); em_folder_tree_set_excluded ( - EM_FOLDER_TREE (folder_tree), - EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | + folder_tree, + EMFT_EXCLUDE_NOSELECT | + EMFT_EXCLUDE_VIRTUAL | EMFT_EXCLUDE_VTRASH); - dialog = em_folder_selector_new ( - window, EM_FOLDER_TREE (folder_tree), - EM_FOLDER_SELECTOR_CAN_CREATE, - _("Copy to Folder"), NULL, _("C_opy")); - if (default_xfer_messages_uri != NULL) - em_folder_selector_set_selected ( - EM_FOLDER_SELECTOR (dialog), - default_xfer_messages_uri); + em_folder_tree_set_selected ( + folder_tree, default_xfer_messages_uri, FALSE); if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK) goto exit; - uri = em_folder_selector_get_selected_uri ( - EM_FOLDER_SELECTOR (dialog)); + uri = em_folder_selector_get_selected_uri (selector); g_free (default_xfer_messages_uri); default_xfer_messages_uri = g_strdup (uri); @@ -784,7 +783,8 @@ action_mail_move_cb (GtkAction *action, CamelFolder *folder; EMailBackend *backend; EMailSession *session; - GtkWidget *folder_tree; + EMFolderSelector *selector; + EMFolderTree *folder_tree; GtkWidget *dialog; GtkWindow *window; GPtrArray *uids; @@ -797,29 +797,27 @@ action_mail_move_cb (GtkAction *action, session = e_mail_backend_get_session (backend); - folder_tree = em_folder_tree_new (backend); - emu_restore_folder_tree_state (EM_FOLDER_TREE (folder_tree)); + dialog = em_folder_selector_new ( + window, backend, EM_FOLDER_SELECTOR_CAN_CREATE, + _("Move to Folder"), NULL, _("_Move")); + + selector = EM_FOLDER_SELECTOR (dialog); + folder_tree = em_folder_selector_get_folder_tree (selector); em_folder_tree_set_excluded ( - EM_FOLDER_TREE (folder_tree), - EMFT_EXCLUDE_NOSELECT | EMFT_EXCLUDE_VIRTUAL | + folder_tree, + EMFT_EXCLUDE_NOSELECT | + EMFT_EXCLUDE_VIRTUAL | EMFT_EXCLUDE_VTRASH); - dialog = em_folder_selector_new ( - window, EM_FOLDER_TREE (folder_tree), - EM_FOLDER_SELECTOR_CAN_CREATE, - _("Move to Folder"), NULL, _("_Move")); - if (default_xfer_messages_uri != NULL) - em_folder_selector_set_selected ( - EM_FOLDER_SELECTOR (dialog), - default_xfer_messages_uri); + em_folder_tree_set_selected ( + folder_tree, default_xfer_messages_uri, FALSE); if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK) goto exit; - uri = em_folder_selector_get_selected_uri ( - EM_FOLDER_SELECTOR (dialog)); + uri = em_folder_selector_get_selected_uri (selector); g_free (default_xfer_messages_uri); default_xfer_messages_uri = g_strdup (uri); -- cgit v1.2.3 From 756c8abcb840b8da588031f4a0d7e1fc979fab70 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 27 May 2011 15:23:07 +0200 Subject: Bug #646109 - Fix use of include to make sure translations work --- mail/e-mail-reader.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 91e303ec46..9d32ddb335 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -19,6 +19,10 @@ * */ +#ifdef HAVE_CONFIG_H +#include +#endif + #include "e-mail-reader.h" #include -- cgit v1.2.3 From f5794eff3613afe5082ab15bd6dbb14806ce5fdc Mon Sep 17 00:00:00 2001 From: Rathin Date: Tue, 14 Jun 2011 14:26:30 +0200 Subject: Bug #530335 - Allow Reply to selected address only --- mail/e-mail-reader.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 9d32ddb335..313e0f5acc 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1501,6 +1501,14 @@ action_mail_reply_sender_cb (GtkAction *action, check_close_browser_reader (reader); } +static void +action_mail_reply_recipient_cb (GtkAction *action, + EMailReader *reader) +{ + e_mail_reader_reply_to_message (reader, NULL, E_MAIL_REPLY_TO_RECIPIENT); + check_close_browser_reader (reader); +} + static void action_mail_save_as_cb (GtkAction *action, EMailReader *reader) @@ -3513,6 +3521,12 @@ e_mail_reader_init (EMailReader *reader, action, "activate", G_CALLBACK (action_add_to_address_book_cb), reader); + action_name = "send-reply"; + action = e_web_view_get_action (web_view, action_name); + g_signal_connect ( + action, "activate", + G_CALLBACK (action_mail_reply_recipient_cb), reader); + action_name = "search-folder-recipient"; action = e_web_view_get_action (web_view, action_name); g_signal_connect ( -- cgit v1.2.3 From daa63adeb7ec56169c24651b74a0e96fa4b92fd3 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 9 Aug 2011 22:25:53 -0400 Subject: EMFolderSelector: Add a "model" construct-only property. --- mail/e-mail-reader.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 313e0f5acc..fad5415c5e 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -287,6 +287,7 @@ action_mail_copy_cb (GtkAction *action, EMailSession *session; EMFolderSelector *selector; EMFolderTree *folder_tree; + EMFolderTreeModel *model; GtkWidget *dialog; GtkWindow *window; GPtrArray *uids; @@ -299,8 +300,11 @@ action_mail_copy_cb (GtkAction *action, window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); + model = em_folder_tree_model_get_default (); + dialog = em_folder_selector_new ( - window, backend, EM_FOLDER_SELECTOR_CAN_CREATE, + window, backend, model, + EM_FOLDER_SELECTOR_CAN_CREATE, _("Copy to Folder"), NULL, _("C_opy")); selector = EM_FOLDER_SELECTOR (dialog); @@ -789,20 +793,24 @@ action_mail_move_cb (GtkAction *action, EMailSession *session; EMFolderSelector *selector; EMFolderTree *folder_tree; + EMFolderTreeModel *model; GtkWidget *dialog; GtkWindow *window; GPtrArray *uids; const gchar *uri; backend = e_mail_reader_get_backend (reader); + session = e_mail_backend_get_session (backend); + folder = e_mail_reader_get_folder (reader); uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); - session = e_mail_backend_get_session (backend); + model = em_folder_tree_model_get_default (); dialog = em_folder_selector_new ( - window, backend, EM_FOLDER_SELECTOR_CAN_CREATE, + window, backend, model, + EM_FOLDER_SELECTOR_CAN_CREATE, _("Move to Folder"), NULL, _("_Move")); selector = EM_FOLDER_SELECTOR (dialog); -- cgit v1.2.3 From d33ed726f9562015b65c27360b02be0dfad7c11b Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 18 Aug 2011 12:17:04 -0400 Subject: Update EMailBrowser actions when MessageList reloads. There was never a bug filed for this, but some mailing list discussion: http://mail.gnome.org/archives/evolution-list/2011-August/msg00084.html --- mail/e-mail-reader.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index fad5415c5e..0408d9539b 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -2827,6 +2827,15 @@ mail_reader_set_message (EMailReader *reader, message_list_select_uid (MESSAGE_LIST (message_list), uid, FALSE); } +static void +mail_reader_folder_loaded (EMailReader *reader) +{ + guint32 state; + + state = e_mail_reader_check_state (reader); + e_mail_reader_update_actions (reader, state); +} + static void mail_reader_update_actions (EMailReader *reader, guint32 state) @@ -3259,6 +3268,7 @@ e_mail_reader_default_init (EMailReaderInterface *interface) interface->set_folder = mail_reader_set_folder; interface->set_message = mail_reader_set_message; interface->open_selected_mail = e_mail_reader_open_selected; + interface->folder_loaded = mail_reader_folder_loaded; interface->update_actions = mail_reader_update_actions; g_object_interface_install_property ( @@ -3302,7 +3312,8 @@ e_mail_reader_default_init (EMailReaderInterface *interface) "folder-loaded", G_OBJECT_CLASS_TYPE (interface), G_SIGNAL_RUN_FIRST, - 0, NULL, NULL, + G_STRUCT_OFFSET (EMailReaderInterface, folder_loaded), + NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); -- cgit v1.2.3 From fcbbdfbd18e15b4ee8322a0217cf03a689a5e033 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 16 Aug 2011 11:25:56 -0400 Subject: Coding style and whitespace cleanup. --- mail/e-mail-reader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 0408d9539b..430f71dc4f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1511,7 +1511,7 @@ action_mail_reply_sender_cb (GtkAction *action, static void action_mail_reply_recipient_cb (GtkAction *action, - EMailReader *reader) + EMailReader *reader) { e_mail_reader_reply_to_message (reader, NULL, E_MAIL_REPLY_TO_RECIPIENT); check_close_browser_reader (reader); @@ -2538,7 +2538,7 @@ mail_reader_message_loaded_cb (CamelFolder *folder, if (!message_list) { /* for cases where message fetching took so long that - user closed the message window before this was called */ + * user closed the message window before this was called */ goto exit; } -- cgit v1.2.3 From e0548d25707ad8c4713e2e74c622a92bf4988545 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 26 Sep 2011 11:45:59 +0200 Subject: Bug #351025 - Make the order of the mail accounts configurable --- mail/e-mail-reader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 430f71dc4f..a8e3899ace 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -300,7 +300,7 @@ action_mail_copy_cb (GtkAction *action, window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); - model = em_folder_tree_model_get_default (); + model = em_folder_tree_model_get_default (backend); dialog = em_folder_selector_new ( window, backend, model, @@ -732,7 +732,7 @@ action_mail_mark_unread_cb (GtkAction *action, /* Notify the tree model that the user has marked messages as * unread so it doesn't mistake the event as new mail arriving. */ - model = em_folder_tree_model_get_default (); + model = em_folder_tree_model_get_default (e_mail_reader_get_backend (reader)); folder = e_mail_reader_get_folder (reader); em_folder_tree_model_user_marked_unread (model, folder, n_marked); } @@ -806,7 +806,7 @@ action_mail_move_cb (GtkAction *action, uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); - model = em_folder_tree_model_get_default (); + model = em_folder_tree_model_get_default (backend); dialog = em_folder_selector_new ( window, backend, model, -- cgit v1.2.3 From f615000f6c1f549db7ea29ff8a3a011b1bd850cc Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Mon, 26 Sep 2011 11:45:11 -0400 Subject: EMFolderTreeModel: Don't use parameters in "get_default" functions. Drop EMFolderTreeModel's "session" property now that it has a "backend" property and call em_folder_tree_model_set_backend() where we used to call em_folder_tree_model_set_session(). The session can still be obtained through e_mail_backend_get_session(). --- mail/e-mail-reader.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index a8e3899ace..430f71dc4f 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -300,7 +300,7 @@ action_mail_copy_cb (GtkAction *action, window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); - model = em_folder_tree_model_get_default (backend); + model = em_folder_tree_model_get_default (); dialog = em_folder_selector_new ( window, backend, model, @@ -732,7 +732,7 @@ action_mail_mark_unread_cb (GtkAction *action, /* Notify the tree model that the user has marked messages as * unread so it doesn't mistake the event as new mail arriving. */ - model = em_folder_tree_model_get_default (e_mail_reader_get_backend (reader)); + model = em_folder_tree_model_get_default (); folder = e_mail_reader_get_folder (reader); em_folder_tree_model_user_marked_unread (model, folder, n_marked); } @@ -806,7 +806,7 @@ action_mail_move_cb (GtkAction *action, uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); - model = em_folder_tree_model_get_default (backend); + model = em_folder_tree_model_get_default (); dialog = em_folder_selector_new ( window, backend, model, -- cgit v1.2.3 From c520043a094d81d222aa0c3e23b0035ddb89d0bf Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 27 Sep 2011 11:15:12 +0200 Subject: Bug #660224 - Assertion failure when forwarding message --- mail/e-mail-reader.c | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 430f71dc4f..920994242a 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -479,8 +479,8 @@ action_mail_flag_for_followup_cb (GtkAction *action, em_utils_flag_for_followup (reader, folder, uids); } -static void -check_close_browser_reader (EMailReader *reader) +static gboolean +get_close_browser_reader (EMailReader *reader) { GConfClient *client; const gchar *key; @@ -489,7 +489,7 @@ check_close_browser_reader (EMailReader *reader) /* only allow closing of a mail browser and nothing else */ if (!E_IS_MAIL_BROWSER (reader)) - return; + return FALSE; client = gconf_client_get_default (); @@ -529,11 +529,16 @@ check_close_browser_reader (EMailReader *reader) } g_free (value); + g_object_unref (client); - if (close_it) - gtk_widget_destroy (GTK_WIDGET (reader)); + return close_it; +} - g_object_unref (client); +static void +check_close_browser_reader (EMailReader *reader) +{ + if (get_close_browser_reader (reader)) + gtk_widget_destroy (GTK_WIDGET (reader)); } static void @@ -543,11 +548,13 @@ action_mail_forward_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; + gboolean close_reader; folder = e_mail_reader_get_folder (reader); window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + close_reader = get_close_browser_reader (reader); /* XXX Either e_mail_reader_get_selected_uids() * or MessageList should do this itself. */ @@ -556,11 +563,10 @@ action_mail_forward_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, - e_mail_reader_get_forward_style (reader)); + e_mail_reader_get_forward_style (reader), + close_reader ? GTK_WIDGET (reader) : NULL); g_ptr_array_unref (uids); - - check_close_browser_reader (reader); } static void @@ -570,11 +576,13 @@ action_mail_forward_attached_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; + gboolean close_reader; folder = e_mail_reader_get_folder (reader); window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + close_reader = get_close_browser_reader (reader); /* XXX Either e_mail_reader_get_selected_uids() * or MessageList should do this itself. */ @@ -583,11 +591,10 @@ action_mail_forward_attached_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, - E_MAIL_FORWARD_STYLE_ATTACHED); + E_MAIL_FORWARD_STYLE_ATTACHED, + close_reader ? GTK_WIDGET (reader) : NULL); g_ptr_array_unref (uids); - - check_close_browser_reader (reader); } static void @@ -597,11 +604,13 @@ action_mail_forward_inline_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; + gboolean close_reader; folder = e_mail_reader_get_folder (reader); window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + close_reader = get_close_browser_reader (reader); /* XXX Either e_mail_reader_get_selected_uids() * or MessageList should do this itself. */ @@ -610,11 +619,10 @@ action_mail_forward_inline_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, - E_MAIL_FORWARD_STYLE_INLINE); + E_MAIL_FORWARD_STYLE_INLINE, + close_reader ? GTK_WIDGET (reader) : NULL); g_ptr_array_unref (uids); - - check_close_browser_reader (reader); } static void @@ -624,11 +632,13 @@ action_mail_forward_quoted_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; + gboolean close_reader; folder = e_mail_reader_get_folder (reader); window = e_mail_reader_get_window (reader); uids = e_mail_reader_get_selected_uids (reader); g_return_if_fail (uids != NULL); + close_reader = get_close_browser_reader (reader); /* XXX Either e_mail_reader_get_selected_uids() * or MessageList should do this itself. */ @@ -637,11 +647,10 @@ action_mail_forward_quoted_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, - E_MAIL_FORWARD_STYLE_QUOTED); + E_MAIL_FORWARD_STYLE_QUOTED, + close_reader ? GTK_WIDGET (reader) : NULL); g_ptr_array_unref (uids); - - check_close_browser_reader (reader); } static void -- cgit v1.2.3