From 27834f2c8578ea6d3aba4f6ddc7033f4e199fe80 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 eb5f523bd7c3b297ce2d6321049aa4900729f098 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 7e9fc6d2b61287deaac0fa17e4dc19164c9ad51f 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 8c1a1ef609a828f6999e32b198edc5a81e49ccd4 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 9684c7da1120bc36599a27a018e86be7d55d4823 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 18d05dfb42ad734902b11453d13b802927128597 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 e0cf91771a5ff16979ea71171f2c3d0960657bb6 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 74bc8ba6d1ccdd7813c7f7c40e1329ef47ef4fd4 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 a3ba231fcc2746e664a67c85d88eb49a64813989 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 6af0c53b697c6981c1470c177b2c37e081635258 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 8efc1bc6f91e06ca61b00eb8119c9c36697e43a6 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 f03d5a9023edf176667d3164583e5ee5f7c089ab 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 a4e2599f950cd2379a18a4c39cd27f87f090d492 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 3b6c8972a51d635309b789b1aef9034ca23dc737 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 f42901b8c466778633d56746e97c22893e41bd9f 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 186fe2bfb71c5b27640c67896c40579585358213 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 eccfd921ed7a7017cf3b893c9146c4ee0438d86b 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 392973975c3e4a4e8fe17731b5e397ae10a91517 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 cb8915bcaa591e15c405a175e6904528ae9a446f 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 fec408b4c5f8059400ba90ead05d1692083cc97a 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 2bdd6077740de486821165e007b02f0a380f406e 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 1879122b181e26c3e9e9e019612fb66f96328455 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 c01ef21ca4cbdddd55e91a05b54070e1532e7d31 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 4139e132c1d11b75d7741b0750d9d7535834327f 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 9cf4104e04ae93c5b1dcb7a5d41accb507cf0199 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 bbf5ce3869dbdf1c277ee9d10b07e91fd775502b 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 fc1034551ed2daf3040851e818b2798c3c58f4f9 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 c7398b967e885e3f0e371ff197a53bc8f7b974db 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 9beae6f09e3306e471daf50d1bccc33fd15b3847 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 5d1d6f4969e37f67e0900aa51ba6a51a3222ed1d 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 839b17d1fd5265f0dd32e63be2b9146466266757 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 b73fe7218fedc76c1f5860c02315eac957669167 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 fdf48a9b1426c2200ad9a628f78226b55fe63ec9 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 b59648863b0f48360e4015269e7991c6a8d4b213 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 30fe010cffa6f290170147ea9a8b617d04fab39d 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 578214584caa7805edca09b27e2306dc31d80fb6 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 821ec49a782d3ddaa3d99e5e51228867ddf76e42 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 f73e52138b48b9fb9f9bfab442044abc61998a83 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 750864c8902f95edb1023ed4169b208d3f04cabf 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 7142b684b30e37c9e614acdccfcf5968147d15e6 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 3395074cc1ce463dc83e6ef4710b4a56e2a9fcc9 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 4c84d4edaa6fc1bea18fc83d08f47f615faee1b2 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 f21da771776286769f390a6631a1a5fc2a675e76 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 1a75a7d808c45cbc2c3c4b0cc6b750ef4002ed8e 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 cacd0e92deb1802d36f7566675904295457af0e7 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 a4ef75f41c7c007fb34ce1776d50f3d2c78f4cc2 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 49df008d73d9332134491b2ee7aa1ea59a70c4ad 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 b5cadb77f188e2f426550ea7d5623420865636d2 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 63c69e938a86c64fd73cda6777abe45a9a355dcc 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 6fb8b27d3d847ab42aa5247a0a924912e1d4a2dd 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 b1e34279d9a7f2e453fa3bbfd93856866aa4f5e4 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 4956c5a9d273a54b96a7b84031251497b92c65f0 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 7050475f84247fb15e24aa1bb31502106c18815d 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 8decdbc4cb82c5cda0df7f5f251832f3e8f06e4f 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 c24038c4f62f37b89d1bda9542ca5ccc843d4ea0 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 075e48579b3012928bc715e9e3058f16ffa52f3f 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 a7da50c849f80793faf1c2ab8f55cc89fa3bcb18 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 0d0c2549416fdfa19f580bfde0f16a04262153ff 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 777c1cbd40eb63365f2c28e38f6a93beb2d1c9d1 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 d230dd72bb6aff738974ccaa91bfad5d321e9c0c 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 8fd93c9042bb30e53ce88303f8a0789a6ca688eb Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Wed, 5 Oct 2011 18:19:33 +0200 Subject: First successful build --- mail/e-mail-reader.c | 44 -------------------------------------------- 1 file changed, 44 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 76502314ab..920994242a 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -632,10 +632,7 @@ action_mail_forward_quoted_cb (GtkAction *action, CamelFolder *folder; GtkWindow *window; GPtrArray *uids; -<<<<<<< HEAD -======= gboolean close_reader; ->>>>>>> master folder = e_mail_reader_get_folder (reader); window = e_mail_reader_get_window (reader); @@ -650,14 +647,8 @@ action_mail_forward_quoted_cb (GtkAction *action, if (em_utils_ask_open_many (window, uids->len)) em_utils_forward_messages ( reader, folder, uids, -<<<<<<< HEAD - E_MAIL_FORWARD_STYLE_QUOTED); - - g_ptr_array_unref (uids); -======= E_MAIL_FORWARD_STYLE_QUOTED, close_reader ? GTK_WIDGET (reader) : NULL); ->>>>>>> master g_ptr_array_unref (uids); } @@ -750,11 +741,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. */ -<<<<<<< HEAD - model = em_folder_tree_model_get_default (e_mail_reader_get_backend (reader)); -======= model = em_folder_tree_model_get_default (); ->>>>>>> master folder = e_mail_reader_get_folder (reader); em_folder_tree_model_user_marked_unread (model, folder, n_marked); } @@ -774,17 +761,10 @@ action_mail_message_edit_cb (GtkAction *action, /* XXX Either e_mail_reader_get_selected_uids() * or MessageList should do this itself. */ g_ptr_array_set_free_func (uids, (GDestroyNotify) g_free); -<<<<<<< HEAD - - replace = em_utils_folder_is_drafts (folder); - em_utils_edit_messages (reader, folder, uids, replace); - -======= replace = em_utils_folder_is_drafts (folder); em_utils_edit_messages (reader, folder, uids, replace); ->>>>>>> master g_ptr_array_unref (uids); } @@ -835,11 +815,7 @@ action_mail_move_cb (GtkAction *action, uids = e_mail_reader_get_selected_uids (reader); window = e_mail_reader_get_window (reader); -<<<<<<< HEAD - model = em_folder_tree_model_get_default (backend); -======= model = em_folder_tree_model_get_default (); ->>>>>>> master dialog = em_folder_selector_new ( window, backend, model, @@ -1159,19 +1135,11 @@ action_mail_reply_all_check (CamelFolder *folder, gint recip_count = 0; EMailReplyType type = E_MAIL_REPLY_TO_ALL; GError *error = NULL; -<<<<<<< HEAD - - alert_sink = e_activity_get_alert_sink (closure->activity); - - message = camel_folder_get_message_finish (folder, result, &error); - -======= alert_sink = e_activity_get_alert_sink (closure->activity); message = camel_folder_get_message_finish (folder, result, &error); ->>>>>>> master if (e_activity_handle_cancellation (closure->activity, error)) { g_warn_if_fail (message == NULL); mail_reader_closure_free (closure); @@ -1352,17 +1320,6 @@ action_mail_reply_sender_check (CamelFolder *folder, GError *error = NULL; alert_sink = e_activity_get_alert_sink (closure->activity); -<<<<<<< HEAD - - 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; - -======= message = camel_folder_get_message_finish (folder, result, &error); @@ -1372,7 +1329,6 @@ action_mail_reply_sender_check (CamelFolder *folder, g_error_free (error); return; ->>>>>>> master } else if (error != NULL) { g_warn_if_fail (message == NULL); e_alert_submit ( -- cgit v1.2.3 From b9eebfcb4f371ce3549264a97983b5f9cb6493df Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Wed, 19 Oct 2011 11:46:15 +0200 Subject: More mail GSettings migration --- mail/e-mail-reader.c | 93 ++++++++++++++++++++++------------------------------ 1 file changed, 40 insertions(+), 53 deletions(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 920994242a..820fadfb4e 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -36,7 +36,6 @@ #include "e-util/e-charset.h" #include "e-util/e-util.h" #include "e-util/e-alert-dialog.h" -#include "e-util/gconf-bridge.h" #include "shell/e-shell-utils.h" #include "widgets/misc/e-popup-action.h" #include "widgets/misc/e-menu-tool-action.h" @@ -482,7 +481,7 @@ action_mail_flag_for_followup_cb (GtkAction *action, static gboolean get_close_browser_reader (EMailReader *reader) { - GConfClient *client; + GSettings *settings; const gchar *key; gchar *value; gboolean close_it = FALSE; @@ -491,10 +490,10 @@ get_close_browser_reader (EMailReader *reader) if (!E_IS_MAIL_BROWSER (reader)) return FALSE; - client = gconf_client_get_default (); + settings = g_settings_new ("org.gnome.evolution.mail"); - key = "/apps/evolution/mail/prompts/reply_close_browser"; - value = gconf_client_get_string (client, key, NULL); + key = "prompt-on-reply-close-browser"; + value = g_settings_get_string (settings, key); if (value && g_str_equal (value, "always")) { close_it = TRUE; @@ -523,13 +522,13 @@ get_close_browser_reader (EMailReader *reader) close_it = response == GTK_RESPONSE_YES || response == GTK_RESPONSE_OK; if (response == GTK_RESPONSE_OK) - gconf_client_set_string (client, key, "always", NULL); + g_settings_set_string (settings, key, "always"); else if (response == GTK_RESPONSE_CANCEL) - gconf_client_set_string (client, key, "never", NULL); + g_settings_set_string (settings, key, "never"); } g_free (value); - g_object_unref (client); + g_object_unref (settings); return close_it; } @@ -1189,13 +1188,11 @@ action_mail_reply_all_check (CamelFolder *folder, response = gtk_dialog_run (GTK_DIALOG (dialog)); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check))) { - GConfClient *client; - const gchar *key; + GSettings *settings; - client = gconf_client_get_default (); - key = "/apps/evolution/mail/prompts/reply_many_recips"; - gconf_client_set_bool (client, key, FALSE, NULL); - g_object_unref (client); + settings = g_settings_new ("org.gnome.evolution.mail"); + g_settings_set_boolean (settings, "prompt-on-reply-many-recips"); + g_object_unref (settings); } gtk_widget_destroy (dialog); @@ -1225,17 +1222,17 @@ static void action_mail_reply_all_cb (GtkAction *action, EMailReader *reader) { - GConfClient *client; + GSettings *settings; const gchar *key; guint32 state; gboolean ask; state = e_mail_reader_check_state (reader); - client = gconf_client_get_default (); - key = "/apps/evolution/mail/prompts/reply_many_recips"; - ask = gconf_client_get_bool (client, key, NULL); - g_object_unref (client); + settings = g_settings_new ("org.gnome.evolution.mail"); + key = "prompt-on-reply-many-recips"; + ask = g_settings_get_boolean (settings, key); + g_object_unref (settings); if (ask && !(state & E_MAIL_READER_SELECTION_IS_MAILING_LIST)) { EActivity *activity; @@ -1275,17 +1272,15 @@ static void action_mail_reply_group_cb (GtkAction *action, EMailReader *reader) { - GConfClient *client; + GSettings *settings; gboolean reply_list; - const gchar *key; guint32 state; state = e_mail_reader_check_state (reader); - client = gconf_client_get_default (); - key = "/apps/evolution/mail/composer/group_reply_to_list"; - reply_list = gconf_client_get_bool (client, key, NULL); - g_object_unref (client); + settings = g_settings_new ("org.gnome.evolution.mail"); + reply_list = g_settings_get_boolean (settings, "composer-group-reply-to-list"); + g_object_unref (settings); if (reply_list && (state & E_MAIL_READER_SELECTION_IS_MAILING_LIST)) { e_mail_reader_reply_to_message ( @@ -1311,7 +1306,7 @@ action_mail_reply_sender_check (CamelFolder *folder, EAlertSink *alert_sink; CamelMimeMessage *message; EMailReplyType type = E_MAIL_REPLY_TO_SENDER; - GConfClient *client; + GSettings *settings; const gchar *key; gboolean ask_ignore_list_reply_to; gboolean ask_list_reply_to; @@ -1341,13 +1336,10 @@ action_mail_reply_sender_check (CamelFolder *folder, g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); - client = gconf_client_get_default (); + settings = g_settings_new ("org.gnome.evolution.mail"); - key = "/apps/evolution/mail/composer/ignore_list_reply_to"; - ask_ignore_list_reply_to = gconf_client_get_bool (client, key, NULL); - - key = "/apps/evolution/mail/prompts/list_reply_to"; - ask_list_reply_to = gconf_client_get_bool (client, key, NULL); + ask_ignore_list_reply_to = g_settings_get_boolean (settings, "composer-ignore-list-reply-to"); + ask_list_reply_to = g_settings_get_boolean (settings, "prompt-on-list-reply-to"); munged_list_message = em_utils_is_munged_list_message (message); @@ -1379,8 +1371,7 @@ action_mail_reply_sender_check (CamelFolder *folder, 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); + g_settings_set_boolean (settings, "prompt-on-private-list-reply", FALSE); } gtk_widget_destroy (dialog); @@ -1426,14 +1417,12 @@ action_mail_reply_sender_check (CamelFolder *folder, 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); + g_settings_set_boolean (settings, "prompt-on-list-reply-to"); } - 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); + g_settings_set_boolean (settings, "composer-ignore-list-reply-to", active); gtk_widget_destroy (dialog); @@ -1456,7 +1445,7 @@ action_mail_reply_sender_check (CamelFolder *folder, check_close_browser_reader (closure->reader); exit: - g_object_unref (client); + g_object_unref (settings); g_object_unref (message); mail_reader_closure_free (closure); @@ -1466,7 +1455,7 @@ static void action_mail_reply_sender_cb (GtkAction *action, EMailReader *reader) { - GConfClient *client; + GSettings *settings; gboolean ask_list_reply_to; gboolean ask_private_list_reply; gboolean ask; @@ -1475,12 +1464,10 @@ action_mail_reply_sender_cb (GtkAction *action, state = e_mail_reader_check_state (reader); - client = gconf_client_get_default (); - key = "/apps/evolution/mail/prompts/list_reply_to"; - ask_list_reply_to = gconf_client_get_bool (client, key, NULL); - key = "/apps/evolution/mail/prompts/private_list_reply"; - ask_private_list_reply = gconf_client_get_bool (client, key, NULL); - g_object_unref (client); + settings = g_settings_new ("org.gnome.evolution.mail"); + ask_list_reply_to = g_settings_get_boolean (settings, "prompt-on-list-reply-to"); + ask_private_list_reply = g_settings_get_boolean (settings, "prompt-on-private-list-reply"); + g_object_unref (settings); ask = (ask_private_list_reply || ask_list_reply_to); @@ -3392,7 +3379,7 @@ e_mail_reader_init (EMailReader *reader, EWebView *web_view; GtkActionGroup *action_group; GtkWidget *message_list; - GConfBridge *bridge; + GSettings *settings; GtkAction *action; gboolean sensitive; const gchar *action_name; @@ -3477,19 +3464,19 @@ e_mail_reader_init (EMailReader *reader, action_group, mail_reader_search_folder_entries, G_N_ELEMENTS (mail_reader_search_folder_entries), reader); - /* Bind GObject properties to GConf keys. */ + /* Bind GObject properties to GSettings keys. */ - bridge = gconf_bridge_get (); + settings = g_settings_new ("org.gnome.evolution.mail"); action_name = "mail-caret-mode"; - key = "/apps/evolution/mail/display/caret_mode"; action = e_mail_reader_get_action (reader, action_name); - gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active"); + g_settings_bind (settings, "caret-mode", G_OBJECT (action), "active", G_SETTINGS_BIND_DEFAULT); action_name = "mail-show-all-headers"; - key = "/apps/evolution/mail/display/show_all_headers"; action = e_mail_reader_get_action (reader, action_name); - gconf_bridge_bind_property (bridge, key, G_OBJECT (action), "active"); + g_settings_bind (settings, "show-all-headers", G_OBJECT (action), "active", G_SETTINGS_BIND_DEFAULT); + + g_object_unref (settings); /* Fine tuning. */ -- cgit v1.2.3 From a610cccc0a32d48809301c35341e02822edaa612 Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Wed, 9 Nov 2011 10:02:25 +0100 Subject: Some build fixes --- mail/e-mail-reader.c | 7 ++----- 1 file changed, 2 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 2fbd04c5c6..0a48f3d455 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -1192,7 +1192,7 @@ action_mail_reply_all_check (CamelFolder *folder, GSettings *settings; settings = g_settings_new ("org.gnome.evolution.mail"); - g_settings_set_boolean (settings, "prompt-on-reply-many-recips"); + g_settings_set_boolean (settings, "prompt-on-reply-many-recips", FALSE); g_object_unref (settings); } @@ -1308,7 +1308,6 @@ action_mail_reply_sender_check (CamelFolder *folder, CamelMimeMessage *message; EMailReplyType type = E_MAIL_REPLY_TO_SENDER; GSettings *settings; - const gchar *key; gboolean ask_ignore_list_reply_to; gboolean ask_list_reply_to; gboolean munged_list_message; @@ -1418,7 +1417,7 @@ action_mail_reply_sender_check (CamelFolder *folder, active = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (check_again)); if (active) { - g_settings_set_boolean (settings, "prompt-on-list-reply-to"); + g_settings_set_boolean (settings, "prompt-on-list-reply-to", FALSE); } active = gtk_toggle_button_get_active ( @@ -1460,7 +1459,6 @@ action_mail_reply_sender_cb (GtkAction *action, gboolean ask_list_reply_to; gboolean ask_private_list_reply; gboolean ask; - const gchar *key; guint32 state; state = e_mail_reader_check_state (reader); @@ -3426,7 +3424,6 @@ e_mail_reader_init (EMailReader *reader, EWebView *web_view; GtkActionGroup *action_group; GtkWidget *message_list; - GSettings *settings; GtkAction *action; gboolean sensitive; const gchar *action_name; -- cgit v1.2.3 From c75f58d01bb7bbe139cd73a85894dc5f50185816 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 18 Nov 2011 09:58:44 -0500 Subject: Fix compiler warnings. --- mail/e-mail-reader.c | 1 - 1 file changed, 1 deletion(-) (limited to 'mail/e-mail-reader.c') diff --git a/mail/e-mail-reader.c b/mail/e-mail-reader.c index 0a48f3d455..22b1e0e7c6 100644 --- a/mail/e-mail-reader.c +++ b/mail/e-mail-reader.c @@ -3427,7 +3427,6 @@ e_mail_reader_init (EMailReader *reader, GtkAction *action; gboolean sensitive; const gchar *action_name; - const gchar *key; #ifndef G_OS_WIN32 GSettings *settings; -- cgit v1.2.3