[evolution] Add e_msg_composer_ref_session().
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Add e_msg_composer_ref_session().
- Date: Sun, 17 Mar 2013 13:43:26 +0000 (UTC)
commit c9f01692ea5affd0a4c7ff1b5e3ce82329ca5e2e
Author: Matthew Barnes <mbarnes redhat com>
Date: Fri Mar 15 15:02:46 2013 -0400
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 +-
mail/em-composer-utils.c | 9 +++++-
4 files changed, 34 insertions(+), 31 deletions(-)
---
diff --git a/composer/e-composer-actions.c b/composer/e-composer-actions.c
index 1317775..d085a3a 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 7ce38e8..eb6ed8a 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 941845a..28c189a 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);
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 515f278..c9bdaab 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -694,7 +694,6 @@ composer_save_to_drafts_cleanup (CamelFolder *drafts_folder,
GCancellable *cancellable;
GError *error = NULL;
- session = e_msg_composer_get_session (context->composer);
alert_sink = e_activity_get_alert_sink (context->activity);
cancellable = e_activity_get_cancellable (context->activity);
@@ -720,12 +719,16 @@ composer_save_to_drafts_cleanup (CamelFolder *drafts_folder,
return;
}
+ session = e_msg_composer_ref_session (context->composer);
+
/* Mark the previously saved draft message for deletion.
* Note: This is just a nice-to-have; ignore failures. */
e_mail_session_handle_draft_headers (
E_MAIL_SESSION (session), context->message,
G_PRIORITY_DEFAULT, cancellable, (GAsyncReadyCallback)
composer_save_to_drafts_complete, context);
+
+ g_object_unref (session);
}
static void
@@ -2875,7 +2878,7 @@ composer_set_body (EMsgComposer *composer,
gboolean start_bottom, has_body_text = FALSE;
guint32 validity_found = 0;
- session = e_msg_composer_get_session (composer);
+ session = e_msg_composer_ref_session (composer);
settings = g_settings_new ("org.gnome.evolution.mail");
@@ -2943,6 +2946,8 @@ composer_set_body (EMsgComposer *composer,
}
g_object_unref (settings);
+
+ g_object_unref (session);
}
gchar *
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]