From c9f01692ea5affd0a4c7ff1b5e3ce82329ca5e2e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 15 Mar 2013 15:02:46 -0400 Subject: Add e_msg_composer_ref_session(). Replaces e_msg_composer_get_session(). --- composer/e-composer-actions.c | 4 +++- composer/e-msg-composer.c | 50 ++++++++++++++++++++----------------------- composer/e-msg-composer.h | 2 +- 3 files changed, 27 insertions(+), 29 deletions(-) (limited to 'composer') diff --git a/composer/e-composer-actions.c b/composer/e-composer-actions.c index 1317775364..d085a3a751 100644 --- a/composer/e-composer-actions.c +++ b/composer/e-composer-actions.c @@ -245,7 +245,7 @@ action_send_cb (GtkAction *action, { CamelSession *session; - session = e_msg_composer_get_session (composer); + session = e_msg_composer_ref_session (composer); /* If we're online, send the message now. * Otherwise write the message to Outbox. */ @@ -258,6 +258,8 @@ action_send_cb (GtkAction *action, "mail-composer:saving-to-outbox", NULL); e_msg_composer_save_to_outbox (composer); } + + g_object_unref (session); } static void diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 7ce38e85ff..eb6ed8a8e8 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -176,11 +176,12 @@ async_context_free (AsyncContext *context) * Return Value: The part in displayable html format. **/ static gchar * -emcu_part_to_html (CamelSession *session, +emcu_part_to_html (EMsgComposer *composer, CamelMimePart *part, gssize *len, GCancellable *cancellable) { + CamelSession *session; CamelStreamMem *mem; GByteArray *buf; gchar *text; @@ -195,6 +196,8 @@ emcu_part_to_html (CamelSession *session, shell = e_shell_get_default (); window = e_shell_get_active_window (shell); + session = e_msg_composer_ref_session (composer); + buf = g_byte_array_new (); mem = (CamelStreamMem *) camel_stream_mem_new (); camel_stream_mem_set_byte_array (mem, buf); @@ -234,6 +237,8 @@ emcu_part_to_html (CamelSession *session, *len = buf->len - 1; g_byte_array_free (buf, FALSE); + g_object_unref (session); + return text; } @@ -1078,7 +1083,6 @@ composer_build_message (EMsgComposer *composer, const gchar *organization; CamelMultipart *body = NULL; CamelContentType *type; - CamelSession *session; CamelStream *stream; CamelStream *mem_stream; CamelMimePart *part; @@ -1092,7 +1096,6 @@ composer_build_message (EMsgComposer *composer, table = e_msg_composer_get_header_table (composer); view = e_msg_composer_get_attachment_view (composer); store = e_attachment_view_get_store (view); - session = e_msg_composer_get_session (composer); registry = e_composer_header_table_get_registry (table); identity_uid = e_composer_header_table_get_identity_uid (table); @@ -1104,7 +1107,7 @@ composer_build_message (EMsgComposer *composer, context = g_slice_new0 (AsyncContext); context->source = source; /* takes the reference */ - context->session = g_object_ref (session); + context->session = e_msg_composer_ref_session (composer); context->from = e_msg_composer_get_from (composer); if (flags & COMPOSER_FLAG_PGP_SIGN) @@ -2660,12 +2663,9 @@ handle_multipart_signed (EMsgComposer *composer, CamelContentType *content_type; CamelDataWrapper *content; CamelMimePart *mime_part; - CamelSession *session; GtkToggleAction *action = NULL; const gchar *protocol; - session = e_msg_composer_get_session (composer); - content = CAMEL_DATA_WRAPPER (multipart); content_type = camel_data_wrapper_get_mime_type_field (content); protocol = camel_content_type_param (content_type, "protocol"); @@ -2726,8 +2726,9 @@ handle_multipart_signed (EMsgComposer *composer, gssize length; html = emcu_part_to_html ( - session, mime_part, &length, cancellable); + composer, mime_part, &length, cancellable); e_msg_composer_set_pending_body (composer, html, length); + } else { e_msg_composer_attach (composer, mime_part); } @@ -2761,12 +2762,13 @@ handle_multipart_encrypted (EMsgComposer *composer, if (action) gtk_toggle_action_set_active (action, TRUE); - session = e_msg_composer_get_session (composer); + session = e_msg_composer_ref_session (composer); cipher = camel_gpg_context_new (session); mime_part = camel_mime_part_new (); valid = camel_cipher_context_decrypt_sync ( cipher, multipart, mime_part, cancellable, NULL); g_object_unref (cipher); + g_object_unref (session); if (valid == NULL) return; @@ -2814,8 +2816,9 @@ handle_multipart_encrypted (EMsgComposer *composer, gssize length; html = emcu_part_to_html ( - session, mime_part, &length, cancellable); + composer, mime_part, &length, cancellable); e_msg_composer_set_pending_body (composer, html, length); + } else { e_msg_composer_attach (composer, mime_part); } @@ -2831,11 +2834,8 @@ handle_multipart_alternative (EMsgComposer *composer, { /* Find the text/html part and set the composer body to it's contents */ CamelMimePart *text_part = NULL; - CamelSession *session; gint i, nparts; - session = e_msg_composer_get_session (composer); - nparts = camel_multipart_get_number (multipart); for (i = 0; i < nparts; i++) { @@ -2895,7 +2895,7 @@ handle_multipart_alternative (EMsgComposer *composer, gssize length; html = emcu_part_to_html ( - session, text_part, &length, cancellable); + composer, text_part, &length, cancellable); e_msg_composer_set_pending_body (composer, html, length); } } @@ -2906,11 +2906,8 @@ handle_multipart (EMsgComposer *composer, GCancellable *cancellable, gint depth) { - CamelSession *session; gint i, nparts; - session = e_msg_composer_get_session (composer); - nparts = camel_multipart_get_number (multipart); for (i = 0; i < nparts; i++) { @@ -2963,13 +2960,15 @@ handle_multipart (EMsgComposer *composer, /* Since the first part is not multipart/alternative, * this must be the body. */ html = emcu_part_to_html ( - session, mime_part, &length, cancellable); + composer, mime_part, &length, cancellable); e_msg_composer_set_pending_body (composer, html, length); + } else if (camel_mime_part_get_content_id (mime_part) || camel_mime_part_get_content_location (mime_part)) { /* special in-line attachment */ e_msg_composer_add_inline_image_from_mime_part ( composer, mime_part); + } else { /* normal attachment */ e_msg_composer_attach (composer, mime_part); @@ -3074,7 +3073,6 @@ e_msg_composer_new_with_message (EShell *shell, CamelContentType *content_type; struct _camel_header_raw *headers; CamelDataWrapper *content; - CamelSession *session; EMsgComposer *composer; EMsgComposerPrivate *priv; EComposerHeaderTable *table; @@ -3101,7 +3099,6 @@ e_msg_composer_new_with_message (EShell *shell, composer = e_msg_composer_new (shell); priv = E_MSG_COMPOSER_GET_PRIVATE (composer); - session = e_msg_composer_get_session (composer); table = e_msg_composer_get_header_table (composer); registry = e_composer_header_table_get_registry (table); @@ -3345,7 +3342,7 @@ e_msg_composer_new_with_message (EShell *shell, } html = emcu_part_to_html ( - session, CAMEL_MIME_PART (message), + composer, CAMEL_MIME_PART (message), &length, cancellable); e_msg_composer_set_pending_body (composer, html, length); } @@ -3404,16 +3401,19 @@ e_msg_composer_new_redirect (EShell *shell, } /** - * e_msg_composer_get_session: + * e_msg_composer_ref_session: * @composer: an #EMsgComposer * * Returns the mail module's global #CamelSession instance. Calling * this function will load the mail module if it isn't already loaded. * + * The returned #CamelSession is referenced for thread-safety and must + * be unreferenced with g_object_unref() when finished with it. + * * Returns: the mail module's #CamelSession **/ CamelSession * -e_msg_composer_get_session (EMsgComposer *composer) +e_msg_composer_ref_session (EMsgComposer *composer) { EShell *shell; EShellBackend *shell_backend; @@ -3427,10 +3427,6 @@ e_msg_composer_get_session (EMsgComposer *composer) g_object_get (shell_backend, "session", &session, NULL); g_return_val_if_fail (CAMEL_IS_SESSION (session), NULL); - /* FIXME Drop the new reference for backward-compatibility. - * Rename this function to e_msg_composer_ref_session(). */ - g_object_unref (session); - return session; } diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h index 941845af70..28c189a377 100644 --- a/composer/e-msg-composer.h +++ b/composer/e-msg-composer.h @@ -95,7 +95,7 @@ EMsgComposer * e_msg_composer_new_redirect (EShell *shell, GCancellable *cancellable); EFocusTracker * e_msg_composer_get_focus_tracker (EMsgComposer *composer); -CamelSession * e_msg_composer_get_session (EMsgComposer *composer); +CamelSession * e_msg_composer_ref_session (EMsgComposer *composer); EShell * e_msg_composer_get_shell (EMsgComposer *composer); EWebViewGtkHTML * e_msg_composer_get_web_view (EMsgComposer *composer); -- cgit v1.2.3