From f544e10b71f0c80ee0cf8eb2edde0620fd7f4e70 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 30 Oct 2010 20:56:51 -0400 Subject: Skip writing to Outbox when sending. When sending a message from a composer window, it seems pointless to write message to Outbox only to immediately read it back and mark it for deletion. Instead, bypass the Outbox folder when sending, and if an error occurs, offer to save the message to Outbox instead. --- composer/e-msg-composer.c | 119 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 107 insertions(+), 12 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 34cf70597a..faa99acf1d 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -94,7 +94,8 @@ enum { enum { PRESEND, SEND, - SAVE_DRAFT, + SAVE_TO_DRAFTS, + SAVE_TO_OUTBOX, PRINT, LAST_SIGNAL }; @@ -2530,11 +2531,22 @@ e_msg_composer_class_init (EMsgComposerClass *class) CAMEL_TYPE_MIME_MESSAGE, E_TYPE_ACTIVITY); - signals[SAVE_DRAFT] = g_signal_new ( - "save-draft", + signals[SAVE_TO_DRAFTS] = g_signal_new ( + "save-to-drafts", G_OBJECT_CLASS_TYPE (class), G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (EMsgComposerClass, save_draft), + G_STRUCT_OFFSET (EMsgComposerClass, save_to_drafts), + NULL, NULL, + e_marshal_VOID__OBJECT_OBJECT, + G_TYPE_NONE, 2, + CAMEL_TYPE_MIME_MESSAGE, + E_TYPE_ACTIVITY); + + signals[SAVE_TO_OUTBOX] = g_signal_new ( + "save-to-outbox", + G_OBJECT_CLASS_TYPE (class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EMsgComposerClass, save_to_outbox), NULL, NULL, e_marshal_VOID__OBJECT_OBJECT, G_TYPE_NONE, 2, @@ -3562,9 +3574,9 @@ e_msg_composer_send (EMsgComposer *composer) } static void -msg_composer_save_draft_cb (EMsgComposer *composer, - GAsyncResult *result, - AsyncContext *context) +msg_composer_save_to_drafts_cb (EMsgComposer *composer, + GAsyncResult *result, + AsyncContext *context) { CamelMimeMessage *message; GtkhtmlEditor *editor; @@ -3595,8 +3607,8 @@ msg_composer_save_draft_cb (EMsgComposer *composer, g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); g_signal_emit ( - composer, signals[SAVE_DRAFT], 0, - message, context->activity); + composer, signals[SAVE_TO_DRAFTS], + 0, message, context->activity); g_object_unref (message); @@ -3608,13 +3620,13 @@ msg_composer_save_draft_cb (EMsgComposer *composer, } /** - * e_msg_composer_save_draft: + * e_msg_composer_save_to_drafts: * @composer: an #EMsgComposer * * Save the message in @composer to the selected account's Drafts folder. **/ void -e_msg_composer_save_draft (EMsgComposer *composer) +e_msg_composer_save_to_drafts (EMsgComposer *composer) { AsyncContext *context; EActivityBar *activity_bar; @@ -3634,7 +3646,90 @@ e_msg_composer_save_draft (EMsgComposer *composer) e_msg_composer_get_message_draft ( composer, G_PRIORITY_DEFAULT, cancellable, - (GAsyncReadyCallback) msg_composer_save_draft_cb, + (GAsyncReadyCallback) msg_composer_save_to_drafts_cb, + context); +} + +static void +msg_composer_save_to_outbox_cb (EMsgComposer *composer, + GAsyncResult *result, + AsyncContext *context) +{ + CamelMimeMessage *message; + GtkhtmlEditor *editor; + GError *error = NULL; + + message = e_msg_composer_get_message_finish (composer, result, &error); + + /* Ignore cancellations. */ + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + g_warn_if_fail (message == NULL); + async_context_free (context); + g_error_free (error); + return; + } + + if (error != NULL) { + g_warn_if_fail (message == NULL); + async_context_free (context); + e_alert_submit ( + GTK_WIDGET (composer), + "mail-composer:no-build-message", + error->message, NULL); + g_error_free (error); + return; + } + + g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); + + g_signal_emit ( + composer, signals[SAVE_TO_OUTBOX], + 0, message, context->activity); + + g_object_unref (message); + + async_context_free (context); + + /* XXX This should be elsewhere. */ + editor = GTKHTML_EDITOR (composer); + gtkhtml_editor_set_changed (editor, FALSE); +} + +/** + * e_msg_composer_save_to_outbox: + * @composer: an #EMsgComposer + * + * Save the message in @composer to the local Outbox folder. + **/ +void +e_msg_composer_save_to_outbox (EMsgComposer *composer) +{ + AsyncContext *context; + EActivityBar *activity_bar; + GCancellable *cancellable; + gboolean proceed_with_save = TRUE; + + g_return_if_fail (E_IS_MSG_COMPOSER (composer)); + + /* This gives the user a chance to abort the save. */ + g_signal_emit (composer, signals[PRESEND], 0, &proceed_with_save); + + if (!proceed_with_save) + return; + + context = g_slice_new0 (AsyncContext); + context->activity = e_composer_activity_new (composer); + + cancellable = camel_operation_new (); + e_activity_set_cancellable (context->activity, cancellable); + g_object_unref (cancellable); + + activity_bar = E_ACTIVITY_BAR (composer->priv->activity_bar); + e_activity_bar_set_activity (activity_bar, context->activity); + + e_msg_composer_get_message ( + composer, G_PRIORITY_DEFAULT, cancellable, + (GAsyncReadyCallback) msg_composer_save_to_outbox_cb, context); } -- cgit v1.2.3 From 20651e4f0970fb49d522bd8c49949d84f116560a Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 30 Oct 2010 22:08:48 -0400 Subject: Set Date: when building a CamelMimeMessage in composer. --- composer/e-msg-composer.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index faa99acf1d..6c6cd84190 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -560,6 +560,9 @@ build_message_headers (EMsgComposer *composer, e_destination_freev (bcc); } + /* Date: */ + camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0); + /* X-Evolution-PostTo: */ header = e_composer_header_table_get_header ( table, E_COMPOSER_HEADER_POST_TO); -- cgit v1.2.3 From 02b36ad15ea773518fb37073828e05a2313f060e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 31 Oct 2010 12:48:15 -0400 Subject: Fix build break. --- composer/e-msg-composer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 6c6cd84190..4edaeea610 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -561,7 +561,7 @@ build_message_headers (EMsgComposer *composer, } /* Date: */ - camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0); + camel_mime_message_set_date (msg, CAMEL_MESSAGE_DATE_CURRENT, 0); /* X-Evolution-PostTo: */ header = e_composer_header_table_get_header ( -- cgit v1.2.3 From 4a929caada81820d7499b09875870b84e9900912 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 31 Oct 2010 16:02:30 -0400 Subject: Pass an EAlertSink to e_alert_sink_submit_alert(). Passing a random GtkWidget and then searching its ancestors for an EAlertSink turned out to be not as useful as I thought. Most of the time we know about and have access to the widget that implements EAlertSink, so just pass it directly as an EAlertSink. --- composer/e-msg-composer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 4edaeea610..2bca57d3fd 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3516,7 +3516,7 @@ msg_composer_send_cb (EMsgComposer *composer, g_warn_if_fail (message == NULL); async_context_free (context); e_alert_submit ( - GTK_WIDGET (composer), + E_ALERT_SINK (composer), "mail-composer:no-build-message", error->message, NULL); g_error_free (error); @@ -3600,7 +3600,7 @@ msg_composer_save_to_drafts_cb (EMsgComposer *composer, g_warn_if_fail (message == NULL); async_context_free (context); e_alert_submit ( - GTK_WIDGET (composer), + E_ALERT_SINK (composer), "mail-composer:no-build-message", error->message, NULL); g_error_free (error); @@ -3676,7 +3676,7 @@ msg_composer_save_to_outbox_cb (EMsgComposer *composer, g_warn_if_fail (message == NULL); async_context_free (context); e_alert_submit ( - GTK_WIDGET (composer), + E_ALERT_SINK (composer), "mail-composer:no-build-message", error->message, NULL); g_error_free (error); @@ -3759,7 +3759,7 @@ msg_composer_print_cb (EMsgComposer *composer, g_warn_if_fail (message == NULL); async_context_free (context); e_alert_submit ( - GTK_WIDGET (composer), + E_ALERT_SINK (composer), "mail-composer:no-build-message", error->message, NULL); g_error_free (error); -- cgit v1.2.3 From 616f0b140bb937d7afeb46f834e32e8c51a67e1e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 31 Oct 2010 17:11:35 -0400 Subject: EActivity: Add an "alert-sink" property. This is just for convenience, EActivity does not use this property. Especially useful in async function callbacks when the operation failed and now you have to do something useful with the GError. --- composer/e-msg-composer.c | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 2bca57d3fd..48410f89dc 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3499,9 +3499,12 @@ msg_composer_send_cb (EMsgComposer *composer, AsyncContext *context) { CamelMimeMessage *message; + EAlertSink *alert_sink; GtkhtmlEditor *editor; GError *error = NULL; + alert_sink = e_activity_get_alert_sink (context->activity); + message = e_msg_composer_get_message_finish (composer, result, &error); /* Ignore cancellations. */ @@ -3514,11 +3517,11 @@ msg_composer_send_cb (EMsgComposer *composer, if (error != NULL) { g_warn_if_fail (message == NULL); - async_context_free (context); e_alert_submit ( - E_ALERT_SINK (composer), + alert_sink, "mail-composer:no-build-message", error->message, NULL); + async_context_free (context); g_error_free (error); return; } @@ -3548,6 +3551,7 @@ void e_msg_composer_send (EMsgComposer *composer) { AsyncContext *context; + EAlertSink *alert_sink; EActivityBar *activity_bar; GCancellable *cancellable; gboolean proceed_with_send = TRUE; @@ -3563,6 +3567,9 @@ e_msg_composer_send (EMsgComposer *composer) context = g_slice_new0 (AsyncContext); context->activity = e_composer_activity_new (composer); + alert_sink = E_ALERT_SINK (composer); + e_activity_set_alert_sink (context->activity, alert_sink); + cancellable = camel_operation_new (); e_activity_set_cancellable (context->activity, cancellable); g_object_unref (cancellable); @@ -3582,9 +3589,12 @@ msg_composer_save_to_drafts_cb (EMsgComposer *composer, AsyncContext *context) { CamelMimeMessage *message; + EAlertSink *alert_sink; GtkhtmlEditor *editor; GError *error = NULL; + alert_sink = e_activity_get_alert_sink (context->activity); + message = e_msg_composer_get_message_draft_finish ( composer, result, &error); @@ -3598,11 +3608,11 @@ msg_composer_save_to_drafts_cb (EMsgComposer *composer, if (error != NULL) { g_warn_if_fail (message == NULL); - async_context_free (context); e_alert_submit ( - E_ALERT_SINK (composer), + alert_sink, "mail-composer:no-build-message", error->message, NULL); + async_context_free (context); g_error_free (error); return; } @@ -3632,6 +3642,7 @@ void e_msg_composer_save_to_drafts (EMsgComposer *composer) { AsyncContext *context; + EAlertSink *alert_sink; EActivityBar *activity_bar; GCancellable *cancellable; @@ -3640,6 +3651,9 @@ e_msg_composer_save_to_drafts (EMsgComposer *composer) context = g_slice_new0 (AsyncContext); context->activity = e_composer_activity_new (composer); + alert_sink = E_ALERT_SINK (composer); + e_activity_set_alert_sink (context->activity, alert_sink); + cancellable = camel_operation_new (); e_activity_set_cancellable (context->activity, cancellable); g_object_unref (cancellable); @@ -3659,9 +3673,12 @@ msg_composer_save_to_outbox_cb (EMsgComposer *composer, AsyncContext *context) { CamelMimeMessage *message; + EAlertSink *alert_sink; GtkhtmlEditor *editor; GError *error = NULL; + alert_sink = e_activity_get_alert_sink (context->activity); + message = e_msg_composer_get_message_finish (composer, result, &error); /* Ignore cancellations. */ @@ -3674,11 +3691,11 @@ msg_composer_save_to_outbox_cb (EMsgComposer *composer, if (error != NULL) { g_warn_if_fail (message == NULL); - async_context_free (context); e_alert_submit ( - E_ALERT_SINK (composer), + alert_sink, "mail-composer:no-build-message", error->message, NULL); + async_context_free (context); g_error_free (error); return; } @@ -3708,6 +3725,7 @@ void e_msg_composer_save_to_outbox (EMsgComposer *composer) { AsyncContext *context; + EAlertSink *alert_sink; EActivityBar *activity_bar; GCancellable *cancellable; gboolean proceed_with_save = TRUE; @@ -3723,6 +3741,9 @@ e_msg_composer_save_to_outbox (EMsgComposer *composer) context = g_slice_new0 (AsyncContext); context->activity = e_composer_activity_new (composer); + alert_sink = E_ALERT_SINK (composer); + e_activity_set_alert_sink (context->activity, alert_sink); + cancellable = camel_operation_new (); e_activity_set_cancellable (context->activity, cancellable); g_object_unref (cancellable); @@ -3742,8 +3763,11 @@ msg_composer_print_cb (EMsgComposer *composer, AsyncContext *context) { CamelMimeMessage *message; + EAlertSink *alert_sink; GError *error = NULL; + alert_sink = e_activity_get_alert_sink (context->activity); + message = e_msg_composer_get_message_print_finish ( composer, result, &error); @@ -3759,7 +3783,7 @@ msg_composer_print_cb (EMsgComposer *composer, g_warn_if_fail (message == NULL); async_context_free (context); e_alert_submit ( - E_ALERT_SINK (composer), + alert_sink, "mail-composer:no-build-message", error->message, NULL); g_error_free (error); @@ -3789,6 +3813,7 @@ e_msg_composer_print (EMsgComposer *composer, GtkPrintOperationAction print_action) { AsyncContext *context; + EAlertSink *alert_sink; EActivityBar *activity_bar; GCancellable *cancellable; @@ -3798,6 +3823,9 @@ e_msg_composer_print (EMsgComposer *composer, context->activity = e_composer_activity_new (composer); context->print_action = print_action; + alert_sink = E_ALERT_SINK (composer); + e_activity_set_alert_sink (context->activity, alert_sink); + cancellable = camel_operation_new (); e_activity_set_cancellable (context->activity, cancellable); g_object_unref (cancellable); -- cgit v1.2.3 From 4db00fa9f7d00245fd2000ac5305416b160bd1d2 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 29 Nov 2010 16:04:05 +0100 Subject: Bug #404570 - Ctrl-R / NNTP doesn't focus the new message --- composer/e-msg-composer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 48410f89dc..8f74badddf 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2171,7 +2171,7 @@ msg_composer_map (GtkWidget *widget) e_composer_header_table_get_header ( table, E_COMPOSER_HEADER_TO)->input_widget; text = gtk_entry_get_text (GTK_ENTRY (input_widget)); - if (text == NULL || *text == '\0') { + if (gtk_widget_get_visible (input_widget) && (text == NULL || *text == '\0')) { gtk_widget_grab_focus (input_widget); return; } @@ -2181,7 +2181,7 @@ msg_composer_map (GtkWidget *widget) e_composer_header_table_get_header ( table, E_COMPOSER_HEADER_SUBJECT)->input_widget; text = gtk_entry_get_text (GTK_ENTRY (input_widget)); - if (text == NULL || *text == '\0') { + if (gtk_widget_get_visible (input_widget) && (text == NULL || *text == '\0')) { gtk_widget_grab_focus (input_widget); return; } -- cgit v1.2.3 From ca3faa17a9a26479ce39649976264f96cbaf5f4c Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 6 Dec 2010 14:23:20 +0100 Subject: Free/busy meeting view doesn't work due to non-working extension --- composer/e-msg-composer.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 8f74badddf..227df24277 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2126,6 +2126,9 @@ msg_composer_constructed (GObject *object) e_plugin_ui_enable_manager (ui_manager, id); e_extensible_load_extensions (E_EXTENSIBLE (composer)); + + if (G_OBJECT_CLASS (e_msg_composer_parent_class)->constructed) + G_OBJECT_CLASS (e_msg_composer_parent_class)->constructed (object); } static void -- cgit v1.2.3 From 97fac153c5e0099774de9960ae14a0dced8d7cab Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 21 Dec 2010 21:11:10 +0100 Subject: Bug #567879 - Add View >> Gallery Option In Email Composer --- composer/e-msg-composer.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 227df24277..b79eaa3a71 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1975,6 +1975,34 @@ msg_composer_finalize (GObject *object) G_OBJECT_CLASS (e_msg_composer_parent_class)->finalize (object); } +static void +msg_composer_gallery_drag_data_get (GtkIconView *icon_view, + GdkDragContext *context, + GtkSelectionData *selection_data, + guint target_type, + guint time) +{ + GtkTreePath *path; + GtkCellRenderer *cell; + GtkTreeModel *model; + GtkTreeIter iter; + gchar *str_data; + + if (!gtk_icon_view_get_cursor (icon_view, &path, &cell)) + return; + + model = gtk_icon_view_get_model (icon_view); + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, 1, &str_data, -1); + gtk_tree_path_free (path); + + /* only supports "text/uri-list" */ + gtk_selection_data_set ( + selection_data, selection_data->target, 8, + (guchar *) str_data, strlen (str_data)); + g_free (str_data); +} + static void msg_composer_constructed (GObject *object) { @@ -2072,6 +2100,10 @@ msg_composer_constructed (GObject *object) web_view, "drag-data-received", G_CALLBACK (msg_composer_drag_data_received_cb), composer); + g_signal_connect ( + composer->priv->gallery_icon_view, "drag-data-get", + G_CALLBACK (msg_composer_gallery_drag_data_get), NULL); + /* Configure Headers */ e_composer_header_table_set_account_list ( -- cgit v1.2.3 From 0d2d76c021dc98f0493b6bbb7765a7c047ae8e13 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 9 Jan 2011 10:22:59 -0500 Subject: GtkSelectionData is sealed in GTK3. Have to use accessor functions, no pointer deferencing. --- composer/e-msg-composer.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index b79eaa3a71..d7fa2b618c 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1986,11 +1986,14 @@ msg_composer_gallery_drag_data_get (GtkIconView *icon_view, GtkCellRenderer *cell; GtkTreeModel *model; GtkTreeIter iter; + GdkAtom target; gchar *str_data; if (!gtk_icon_view_get_cursor (icon_view, &path, &cell)) return; + target = gtk_selection_data_get_target (selection_data); + model = gtk_icon_view_get_model (icon_view); gtk_tree_model_get_iter (model, &iter, path); gtk_tree_model_get (model, &iter, 1, &str_data, -1); @@ -1998,7 +2001,7 @@ msg_composer_gallery_drag_data_get (GtkIconView *icon_view, /* only supports "text/uri-list" */ gtk_selection_data_set ( - selection_data, selection_data->target, 8, + selection_data, target, 8, (guchar *) str_data, strlen (str_data)); g_free (str_data); } -- cgit v1.2.3 From 59b03835d76efaf3697d1fa33967874cc4a86556 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 18 Jan 2011 15:19:36 +0100 Subject: Bug #553438 - Deletes lines of a reply when changing address --- composer/e-msg-composer.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index d7fa2b618c..9f011a26e1 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1691,8 +1691,10 @@ msg_composer_account_changed_cb (EMsgComposer *composer) table = e_msg_composer_get_header_table (composer); account = e_composer_header_table_get_account (table); - if (account == NULL) - goto exit; + if (account == NULL) { + e_msg_composer_show_sig_file (composer); + return; + } can_sign = (!account->pgp_no_imip_sign || p->mime_type == NULL || g_ascii_strncasecmp (p->mime_type, "text/calendar", 13) != 0); @@ -1712,10 +1714,6 @@ msg_composer_account_changed_cb (EMsgComposer *composer) uid = account->id->sig_uid; signature = uid ? e_get_signature_by_uid (uid) : NULL; e_composer_header_table_set_signature (table, signature); - - exit: - - e_msg_composer_show_sig_file (composer); } static void -- cgit v1.2.3 From d7ff1792f791b606817eb2bf8e35c1de0e4a35da Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 1 Feb 2011 18:09:00 +0100 Subject: Bug #635144 - Using external editor duplicates signature --- composer/e-msg-composer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 9f011a26e1..7439007ae4 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -4078,18 +4078,20 @@ e_msg_composer_new_from_url (EShell *shell, * e_msg_composer_set_body_text: * @composer: a composer object * @text: the HTML text to initialize the editor with + * @update_signature: whether update signature in the text after setting it; + * Might be usually called with TRUE. * * Loads the given HTML text into the editor. **/ void e_msg_composer_set_body_text (EMsgComposer *composer, const gchar *text, - gssize len) + gboolean update_signature) { g_return_if_fail (E_IS_MSG_COMPOSER (composer)); g_return_if_fail (text != NULL); - set_editor_text (composer, text, TRUE); + set_editor_text (composer, text, update_signature); } /** -- cgit v1.2.3 From f099f679dcdd568cb5b7c8838f5f114ed19bce07 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 2 Feb 2011 22:48:43 -0500 Subject: Fix image dropping in composer while in HTML mode. Dragging image data or an image URI to the message body while in HTML mode should insert the image inline, not attach it. Without this the Picture Gallery feature is pointless. --- composer/e-msg-composer.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 7439007ae4..d3df63aad0 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1830,6 +1830,21 @@ msg_composer_drag_data_received_cb (GtkWidget *widget, { EAttachmentView *view; + /* HTML mode has a few special cases for drops... */ + if (gtkhtml_editor_get_html_mode (GTKHTML_EDITOR (composer))) { + + /* If we're receiving an image, we want the image to be + * inserted in the message body. Let GtkHtml handle it. */ + if (gtk_selection_data_targets_include_image (selection, TRUE)) + return; + + /* If we're receiving URIs and -all- the URIs point to + * image files, we want the image(s) to be inserted in + * the message body. Let GtkHtml handle it. */ + if (e_composer_selection_is_image_uris (composer, selection)) + return; + } + view = e_msg_composer_get_attachment_view (composer); /* Forward the data to the attachment view. Note that calling -- cgit v1.2.3 From 274697623e2a6749a3b173c28f4832d9e88019e3 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 12 Feb 2011 11:37:05 -0500 Subject: Remove NULL checks for GObject methods. As of GLib 2.28 all GObject virtual methods, including constructed(), are safe to chain up to unconditionally. Remove unnecessary checks. --- composer/e-msg-composer.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index d3df63aad0..ae6c5258f6 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2175,8 +2175,8 @@ msg_composer_constructed (GObject *object) e_extensible_load_extensions (E_EXTENSIBLE (composer)); - if (G_OBJECT_CLASS (e_msg_composer_parent_class)->constructed) - G_OBJECT_CLASS (e_msg_composer_parent_class)->constructed (object); + /* Chain up to parent's constructed() method. */ + G_OBJECT_CLASS (e_msg_composer_parent_class)->constructed (object); } static void @@ -2201,8 +2201,7 @@ msg_composer_dispose (GObject *object) e_composer_private_dispose (composer); /* Chain up to parent's dispose() method. */ - if (G_OBJECT_CLASS (e_msg_composer_parent_class)->dispose) - G_OBJECT_CLASS (e_msg_composer_parent_class)->dispose (object); + G_OBJECT_CLASS (e_msg_composer_parent_class)->dispose (object); } static void -- cgit v1.2.3 From c003c99a75587ba39a45d164272760c33f9666b5 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 25 Feb 2011 16:20:41 +0100 Subject: Bug #614480 - Avoid using G_TYPE_INSTANCE_GET_PRIVATE repeatedly --- composer/e-msg-composer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index ae6c5258f6..d2d9837a45 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1471,7 +1471,7 @@ is_top_signature (EMsgComposer *composer) { EShell *shell; EShellSettings *shell_settings; - EMsgComposerPrivate *priv = E_MSG_COMPOSER_GET_PRIVATE (composer); + EMsgComposerPrivate *priv = composer->priv; g_return_val_if_fail (priv != NULL, FALSE); @@ -2475,7 +2475,7 @@ msg_composer_submit_alert (EAlertSink *alert_sink, GtkWidget *dialog; GtkWindow *parent; - priv = E_MSG_COMPOSER_GET_PRIVATE (alert_sink); + priv = E_MSG_COMPOSER (alert_sink)->priv; switch (e_alert_get_message_type (alert)) { case GTK_MESSAGE_INFO: @@ -2627,7 +2627,7 @@ e_msg_composer_alert_sink_init (EAlertSinkInterface *interface) static void e_msg_composer_init (EMsgComposer *composer) { - composer->priv = E_MSG_COMPOSER_GET_PRIVATE (composer); + composer->priv = G_TYPE_INSTANCE_GET_PRIVATE (composer, E_TYPE_MSG_COMPOSER, EMsgComposerPrivate); } /* Callbacks. */ @@ -3159,7 +3159,7 @@ e_msg_composer_new_with_message (EShell *shell, } composer = e_msg_composer_new (shell); - priv = E_MSG_COMPOSER_GET_PRIVATE (composer); + priv = composer->priv; table = e_msg_composer_get_header_table (composer); if (postto) { -- cgit v1.2.3 From c774933853ee0f3fa587c1a29a395fab026da61f Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 28 Feb 2011 17:59:40 +0100 Subject: Bug #641805 - Clicking links in mail composer opens URL twice --- composer/e-msg-composer.c | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index d2d9837a45..41703561c1 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2416,25 +2416,6 @@ msg_composer_image_uri (GtkhtmlEditor *editor, return g_strconcat ("cid:", cid, NULL); } -static void -msg_composer_link_clicked (GtkhtmlEditor *editor, - const gchar *uri) -{ - if (uri == NULL || *uri == '\0') - return; - - if (g_ascii_strncasecmp (uri, "mailto:", 7) == 0) - return; - - if (g_ascii_strncasecmp (uri, "thismessage:", 12) == 0) - return; - - if (g_ascii_strncasecmp (uri, "cid:", 4) == 0) - return; - - e_show_uri (GTK_WINDOW (editor), uri); -} - static void msg_composer_object_deleted (GtkhtmlEditor *editor) { @@ -2537,7 +2518,7 @@ e_msg_composer_class_init (EMsgComposerClass *class) editor_class->command_before = msg_composer_command_before; editor_class->command_after = msg_composer_command_after; editor_class->image_uri = msg_composer_image_uri; - editor_class->link_clicked = msg_composer_link_clicked; + editor_class->link_clicked = NULL; /* EWebView takes care of it in link-clicked handler */ editor_class->object_deleted = msg_composer_object_deleted; class->presend = msg_composer_presend; -- cgit v1.2.3 From 7aacf983b32ecac26bc9707697da622b3ef164a3 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 5 Mar 2011 12:33:49 -0500 Subject: Coding style and whitespace cleanup. --- composer/e-msg-composer.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 41703561c1..0bc9ca9c1d 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2518,7 +2518,7 @@ e_msg_composer_class_init (EMsgComposerClass *class) editor_class->command_before = msg_composer_command_before; editor_class->command_after = msg_composer_command_after; editor_class->image_uri = msg_composer_image_uri; - editor_class->link_clicked = NULL; /* EWebView takes care of it in link-clicked handler */ + editor_class->link_clicked = NULL; /* EWebView handles this */ editor_class->object_deleted = msg_composer_object_deleted; class->presend = msg_composer_presend; @@ -2608,7 +2608,8 @@ e_msg_composer_alert_sink_init (EAlertSinkInterface *interface) static void e_msg_composer_init (EMsgComposer *composer) { - composer->priv = G_TYPE_INSTANCE_GET_PRIVATE (composer, E_TYPE_MSG_COMPOSER, EMsgComposerPrivate); + composer->priv = G_TYPE_INSTANCE_GET_PRIVATE ( + composer, E_TYPE_MSG_COMPOSER, EMsgComposerPrivate); } /* Callbacks. */ -- cgit v1.2.3 From 0be9b1f878c2f54a0c7f2f5024125813022d81b1 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 20 Apr 2011 19:06:35 -0400 Subject: Adapt to CamelService changes. --- composer/e-msg-composer.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 0bc9ca9c1d..945f5cc22b 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1084,6 +1084,8 @@ composer_build_message (EMsgComposer *composer, "X-Priority", "1"); if (account != NULL) { + gchar *transport_uid; + /* X-Evolution-Account */ camel_medium_set_header ( CAMEL_MEDIUM (context->message), @@ -1095,9 +1097,12 @@ composer_build_message (EMsgComposer *composer, "X-Evolution-Fcc", account->sent_folder_uri); /* X-Evolution-Transport */ + transport_uid = g_strconcat ( + account->uid, "-transport", NULL); camel_medium_set_header ( CAMEL_MEDIUM (context->message), - "X-Evolution-Transport", account->transport->url); + "X-Evolution-Transport", transport_uid); + g_free (transport_uid); /* Organization */ if (account->id->organization != 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. --- composer/e-msg-composer.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 945f5cc22b..a27ee9528d 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1591,9 +1591,12 @@ get_signature_html (EMsgComposer *composer) * http://www.chemie.fu-berlin.de/outerspace/netnews/son-of-1036.html */ html = g_strdup_printf ( - "" - "" - "
" + "" + "" + "
" "%s%s%s%s" "%s
", encoded_uid ? encoded_uid : "", @@ -3335,7 +3338,8 @@ e_msg_composer_new_with_message (EShell *shell, camel_header_raw_clear (&xev); /* Check for receipt request */ - if (camel_medium_get_header (CAMEL_MEDIUM (message), "Disposition-Notification-To")) { + if (camel_medium_get_header ( + CAMEL_MEDIUM (message), "Disposition-Notification-To")) { action = GTK_TOGGLE_ACTION (ACTION (REQUEST_READ_RECEIPT)); gtk_toggle_action_set_active (action, TRUE); } -- cgit v1.2.3 From 54da4fc09cf226fdb59b9f0c70555e2e57dc1f91 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 8 May 2011 13:24:42 -0400 Subject: Coding style cleanups. --- composer/e-msg-composer.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index a27ee9528d..98d1e6f295 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -192,7 +192,7 @@ emcu_part_to_html (CamelMimePart *part, mem = (CamelStreamMem *) camel_stream_mem_new (); camel_stream_mem_set_byte_array (mem, buf); - emfq = em_format_quote_new (NULL, (CamelStream *)mem, EM_FORMAT_QUOTE_KEEP_SIG); + emfq = em_format_quote_new (NULL, (CamelStream *) mem, EM_FORMAT_QUOTE_KEEP_SIG); ((EMFormat *) emfq)->composer = TRUE; if (source) { /* Copy over things we can, other things are internal. @@ -211,7 +211,7 @@ emcu_part_to_html (CamelMimePart *part, camel_stream_write((CamelStream *) mem, "", 1, cancellable, NULL); g_object_unref (mem); - text = (gchar *)buf->data; + text = (gchar *) buf->data; if (len) *len = buf->len-1; g_byte_array_free (buf, FALSE); @@ -225,12 +225,12 @@ emcu_remove_xevolution_headers (CamelMimeMessage *message) { struct _camel_header_raw *scan, *list = NULL; - for (scan = ((CamelMimePart *)message)->headers;scan;scan=scan->next) + for (scan = ((CamelMimePart *) message)->headers;scan;scan=scan->next) if (!strncmp(scan->name, "X-Evolution", 11)) camel_header_raw_append (&list, scan->name, scan->value, scan->offset); for (scan=list;scan;scan=scan->next) - camel_medium_remove_header ((CamelMedium *)message, scan->name); + camel_medium_remove_header ((CamelMedium *) message, scan->name); return list; } @@ -355,7 +355,7 @@ best_charset (GByteArray *buf, return charset; /* Try to find something that will work */ - if (!(charset = (gchar *) camel_charset_best ((const gchar *)buf->data, buf->len))) { + if (!(charset = (gchar *) camel_charset_best ((const gchar *) buf->data, buf->len))) { *encoding = CAMEL_TRANSFER_ENCODING_7BIT; return NULL; } @@ -3154,7 +3154,7 @@ e_msg_composer_new_with_message (EShell *shell, if (postto) { e_composer_header_table_set_post_to_list (table, postto); - g_list_foreach (postto, (GFunc)g_free, NULL); + g_list_foreach (postto, (GFunc) g_free, NULL); g_list_free (postto); postto = NULL; } -- cgit v1.2.3 From fb38ed0bf5891b343afd30a5621d0008cd1e687d Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 11 May 2011 12:19:17 -0400 Subject: Add e_activity_handle_cancellation(). Convenience function for use in GAsyncReadyCallback functions. This acknowledges the cancellation, so that the activity's description changes from "(cancelling)" to "(cancelled)" and the description appears crossed out in the UI for a moment before disappearing. --- composer/e-msg-composer.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 98d1e6f295..74a36cce44 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3548,8 +3548,7 @@ msg_composer_send_cb (EMsgComposer *composer, message = e_msg_composer_get_message_finish (composer, result, &error); - /* Ignore cancellations. */ - if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + if (e_activity_handle_cancellation (context->activity, error)) { g_warn_if_fail (message == NULL); async_context_free (context); g_error_free (error); @@ -3639,8 +3638,7 @@ msg_composer_save_to_drafts_cb (EMsgComposer *composer, message = e_msg_composer_get_message_draft_finish ( composer, result, &error); - /* Ignore cancellations. */ - if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + if (e_activity_handle_cancellation (context->activity, error)) { g_warn_if_fail (message == NULL); async_context_free (context); g_error_free (error); @@ -3722,8 +3720,7 @@ msg_composer_save_to_outbox_cb (EMsgComposer *composer, message = e_msg_composer_get_message_finish (composer, result, &error); - /* Ignore cancellations. */ - if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + if (e_activity_handle_cancellation (context->activity, error)) { g_warn_if_fail (message == NULL); async_context_free (context); g_error_free (error); @@ -3812,8 +3809,7 @@ msg_composer_print_cb (EMsgComposer *composer, message = e_msg_composer_get_message_print_finish ( composer, result, &error); - /* Ignore cancellations. */ - if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + if (e_activity_handle_cancellation (context->activity, error)) { g_warn_if_fail (message == NULL); async_context_free (context); g_error_free (error); -- cgit v1.2.3 From 42580e1802fce5e83008c6c79d64ea2a9bedafe9 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 16 May 2011 12:40:40 +0200 Subject: Correct garbled mailto: uris passed in through GApplication interface --- composer/e-msg-composer.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 74a36cce44..e4eb1ced71 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3921,6 +3921,10 @@ handle_mailto (EMsgComposer *composer, const gchar *mailto) /* Parse recipients (everything after ':' until '?' or eos). */ p = buf + 7; + /* skip leading "///" which are added when passing "mailto:user@server.com" + from the outside, after porting EShell to GApplication */ + if (g_str_has_prefix (p, "///")) + p += 3; len = strcspn (p, "?"); if (len) { content = g_strndup (p, len); -- cgit v1.2.3 From 5146ff4c535f443fe25290eb96631e91ad44c8ef Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 21 May 2011 10:02:58 -0400 Subject: Coding style and whitespace cleanup. --- composer/e-msg-composer.c | 75 +++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 26 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index e4eb1ced71..e332cc73a9 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -336,7 +336,7 @@ best_charset (GByteArray *buf, const gchar *default_charset, CamelTransferEncoding *encoding) { - gchar *charset; + const gchar *charset; /* First try US-ASCII */ *encoding = best_encoding (buf, "US-ASCII"); @@ -352,10 +352,12 @@ best_charset (GByteArray *buf, charset = e_composer_get_default_charset (); *encoding = best_encoding (buf, charset); if (*encoding != -1) - return charset; + return g_strdup (charset); /* Try to find something that will work */ - if (!(charset = (gchar *) camel_charset_best ((const gchar *) buf->data, buf->len))) { + charset = camel_charset_best ( + (const gchar *) buf->data, buf->len); + if (charset == NULL) { *encoding = CAMEL_TRANSFER_ENCODING_7BIT; return NULL; } @@ -1502,7 +1504,8 @@ add_signature_delim (EMsgComposer *composer) shell = e_msg_composer_get_shell (composer); shell_settings = e_shell_get_shell_settings (shell); - return !e_shell_settings_get_boolean (shell_settings, "composer-no-signature-delim"); + return !e_shell_settings_get_boolean ( + shell_settings, "composer-no-signature-delim"); } #define CONVERT_SPACES CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES @@ -1546,20 +1549,24 @@ get_signature_html (EMsgComposer *composer) } else { EAccount *account; EAccountIdentity *id; - gchar *organization; - gchar *address; - gchar *name; + gchar *organization = NULL; + gchar *address = NULL; + gchar *name = NULL; account = e_composer_header_table_get_account (table); if (!account) return NULL; id = account->id; - address = id->address ? camel_text_to_html (id->address, CONVERT_SPACES, 0) : NULL; - name = id->name ? camel_text_to_html (id->name, CONVERT_SPACES, 0) : NULL; - organization = - id->organization ? camel_text_to_html ( - id->organization, CONVERT_SPACES, 0) : NULL; + if (id->address != NULL) + address = camel_text_to_html ( + id->address, CONVERT_SPACES, 0); + if (id->name != NULL) + name = camel_text_to_html ( + id->name, CONVERT_SPACES, 0); + if (id->organization != NULL) + organization = camel_text_to_html ( + id->organization, CONVERT_SPACES, 0); text = g_strdup_printf ("%s%s%s%s%s%s%s%s%s", add_delim ? "-- \n
" : "", @@ -3201,7 +3208,10 @@ e_msg_composer_new_with_message (EShell *shell, if (!camel_internet_address_get (iaddr, i, &name, &addr)) continue; - g_hash_table_insert (auto_cc, g_strdup (addr), GINT_TO_POINTER (TRUE)); + g_hash_table_insert ( + auto_cc, + g_strdup (addr), + GINT_TO_POINTER (TRUE)); } } g_object_unref (iaddr); @@ -3216,7 +3226,10 @@ e_msg_composer_new_with_message (EShell *shell, if (!camel_internet_address_get (iaddr, i, &name, &addr)) continue; - g_hash_table_insert (auto_bcc, g_strdup (addr), GINT_TO_POINTER (TRUE)); + g_hash_table_insert ( + auto_bcc, + g_strdup (addr), + GINT_TO_POINTER (TRUE)); } } g_object_unref (iaddr); @@ -3301,8 +3314,9 @@ e_msg_composer_new_with_message (EShell *shell, e_destination_freev (Bccv); /* Restore the format editing preference */ - format = camel_medium_get_header (CAMEL_MEDIUM (message), "X-Evolution-Format"); - if (format) { + format = camel_medium_get_header ( + CAMEL_MEDIUM (message), "X-Evolution-Format"); + if (format != NULL) { gchar **flags; while (*format && camel_mime_is_lwsp (*format)) @@ -3369,10 +3383,12 @@ e_msg_composer_new_with_message (EShell *shell, /* Restore the attachments and body text */ content = camel_medium_get_content (CAMEL_MEDIUM (message)); if (CAMEL_IS_MULTIPART (content)) { + CamelMimePart *mime_part; CamelMultipart *multipart; multipart = CAMEL_MULTIPART (content); - content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (message)); + mime_part = CAMEL_MIME_PART (message); + content_type = camel_mime_part_get_content_type (mime_part); if (CAMEL_IS_MULTIPART_SIGNED (content)) { /* Handle the signed content and configure the @@ -3384,10 +3400,10 @@ e_msg_composer_new_with_message (EShell *shell, /* Decrypt the encrypted content and configure the * composer to encrypt outgoing messages. */ handle_multipart_encrypted ( - composer, CAMEL_MIME_PART (message), - cancellable, 0); + composer, mime_part, cancellable, 0); - } else if (camel_content_type_is (content_type, "multipart", "alternative")) { + } else if (camel_content_type_is ( + content_type, "multipart", "alternative")) { /* This contains the text/plain and text/html * versions of the message body. */ handle_multipart_alternative ( @@ -3399,18 +3415,25 @@ e_msg_composer_new_with_message (EShell *shell, composer, multipart, cancellable, 0); } } else { + CamelMimePart *mime_part; gchar *html; gssize length; - content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (message)); + mime_part = CAMEL_MIME_PART (message); + content_type = camel_mime_part_get_content_type (mime_part); - if (content_type && ( - camel_content_type_is (content_type, "application", "x-pkcs7-mime") - || camel_content_type_is (content_type, "application", "pkcs7-mime"))) - gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (ACTION (SMIME_ENCRYPT)), TRUE); + if (content_type != NULL && ( + camel_content_type_is ( + content_type, "application", "x-pkcs7-mime") || + camel_content_type_is ( + content_type, "application", "pkcs7-mime"))) + gtk_toggle_action_set_active ( + GTK_TOGGLE_ACTION ( + ACTION (SMIME_ENCRYPT)), TRUE); html = emcu_part_to_html ( - CAMEL_MIME_PART (message), &length, NULL, cancellable); + CAMEL_MIME_PART (message), + &length, NULL, cancellable); e_msg_composer_set_pending_body (composer, html, length); } -- cgit v1.2.3 From 0d8be64df64ea8bd02ac2c13a4b8b174494a8d89 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 22 May 2011 11:06:11 -0400 Subject: Revert "Correct garbled mailto: uris passed in through GApplication interface" This reverts commit 94d5fb1b664ab38790ba620f7d2c6d585b666c91. Wrong solution. See bug #650491. --- composer/e-msg-composer.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index e332cc73a9..07284eea52 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3944,10 +3944,6 @@ handle_mailto (EMsgComposer *composer, const gchar *mailto) /* Parse recipients (everything after ':' until '?' or eos). */ p = buf + 7; - /* skip leading "///" which are added when passing "mailto:user@server.com" - from the outside, after porting EShell to GApplication */ - if (g_str_has_prefix (p, "///")) - p += 3; len = strcspn (p, "?"); if (len) { content = g_strndup (p, len); -- cgit v1.2.3 From 0c4f4aa6ce4877f7010b98cdee61378d2cd4ed7d Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 25 May 2011 11:19:43 +0200 Subject: Bug #651039 - Always update signature in composer on account change --- composer/e-msg-composer.c | 1 + 1 file changed, 1 insertion(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 07284eea52..92cf04d661 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1729,6 +1729,7 @@ msg_composer_account_changed_cb (EMsgComposer *composer) uid = account->id->sig_uid; signature = uid ? e_get_signature_by_uid (uid) : NULL; e_composer_header_table_set_signature (table, signature); + e_msg_composer_show_sig_file (composer); } static void -- cgit v1.2.3 From e7954c3f251aabbf95d099159709c8c66dfedc44 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 4 Jun 2011 15:53:10 -0500 Subject: Coding style and whitespace cleanups. --- composer/e-msg-composer.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 92cf04d661..5ff7427108 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -467,11 +467,16 @@ set_recipients_from_destv (CamelMimeMessage *msg, } } - header = redirect ? CAMEL_RECIPIENT_TYPE_RESENT_TO : CAMEL_RECIPIENT_TYPE_TO; + if (redirect) + header = CAMEL_RECIPIENT_TYPE_RESENT_TO; + else + header = CAMEL_RECIPIENT_TYPE_TO; + if (camel_address_length (CAMEL_ADDRESS (to_addr)) > 0) { camel_mime_message_set_recipients (msg, header, to_addr); } else if (seen_hidden_list) { - camel_medium_set_header (CAMEL_MEDIUM (msg), header, "Undisclosed-Recipient:;"); + camel_medium_set_header ( + CAMEL_MEDIUM (msg), header, "Undisclosed-Recipient:;"); } header = redirect ? CAMEL_RECIPIENT_TYPE_RESENT_CC : CAMEL_RECIPIENT_TYPE_CC; @@ -3056,7 +3061,8 @@ handle_multipart (EMsgComposer *composer, composer, mime_part, cancellable, depth + 1); - } else if (camel_content_type_is (content_type, "multipart", "alternative")) { + } else if (camel_content_type_is ( + content_type, "multipart", "alternative")) { handle_multipart_alternative ( composer, mp, cancellable, depth + 1); @@ -3079,7 +3085,8 @@ handle_multipart (EMsgComposer *composer, } 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); + e_msg_composer_add_inline_image_from_mime_part ( + composer, mime_part); } else { /* normal attachment */ e_msg_composer_attach (composer, mime_part); @@ -3151,9 +3158,16 @@ e_msg_composer_new_with_message (EShell *shell, g_return_val_if_fail (E_IS_SHELL (shell), NULL); - for (headers = CAMEL_MIME_PART (message)->headers;headers;headers = headers->next) { - if (!strcmp (headers->name, "X-Evolution-PostTo")) - postto = g_list_append (postto, g_strstrip (g_strdup (headers->value))); + headers = CAMEL_MIME_PART (message)->headers; + while (headers != NULL) { + gchar *value; + + if (strcmp (headers->name, "X-Evolution-PostTo") == 0) { + value = g_strstrip (g_strdup (headers->value)); + postto = g_list_append (postto, value); + } + + headers = headers->next; } composer = e_msg_composer_new (shell); -- cgit v1.2.3 From 5b304491bef52d115ed15522dca695b9d449d8a6 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 10 Jul 2011 13:28:43 -0400 Subject: EMsgComposer: Minor cleanups. --- composer/e-msg-composer.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 5ff7427108..27f454c08f 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -496,7 +496,7 @@ set_recipients_from_destv (CamelMimeMessage *msg, static void build_message_headers (EMsgComposer *composer, - CamelMimeMessage *msg, + CamelMimeMessage *message, gboolean redirect) { EComposerHeaderTable *table; @@ -506,34 +506,34 @@ build_message_headers (EMsgComposer *composer, const gchar *reply_to; g_return_if_fail (E_IS_MSG_COMPOSER (composer)); - g_return_if_fail (CAMEL_IS_MIME_MESSAGE (msg)); + g_return_if_fail (CAMEL_IS_MIME_MESSAGE (message)); table = e_msg_composer_get_header_table (composer); /* Subject: */ subject = e_composer_header_table_get_subject (table); - camel_mime_message_set_subject (msg, subject); + camel_mime_message_set_subject (message, subject); - /* From: / Resent-From: */ account = e_composer_header_table_get_account (table); if (account != NULL) { + CamelMedium *medium; CamelInternetAddress *addr; const gchar *name = account->id->name; const gchar *address = account->id->address; + medium = CAMEL_MEDIUM (message); + + /* From: / Resent-From: */ addr = camel_internet_address_new (); camel_internet_address_add (addr, name, address); - if (redirect) { gchar *value; value = camel_address_encode (CAMEL_ADDRESS (addr)); - camel_medium_set_header ( - CAMEL_MEDIUM (msg), "Resent-From", value); + camel_medium_set_header (medium, "Resent-From", value); g_free (value); } else - camel_mime_message_set_from (msg, addr); - + camel_mime_message_set_from (message, addr); g_object_unref (addr); } @@ -545,7 +545,7 @@ build_message_headers (EMsgComposer *composer, addr = camel_internet_address_new (); if (camel_address_unformat (CAMEL_ADDRESS (addr), reply_to) > 0) - camel_mime_message_set_reply_to (msg, addr); + camel_mime_message_set_reply_to (message, addr); g_object_unref (addr); } @@ -560,7 +560,7 @@ build_message_headers (EMsgComposer *composer, cc = e_composer_header_table_get_destinations_cc (table); bcc = e_composer_header_table_get_destinations_bcc (table); - set_recipients_from_destv (msg, to, cc, bcc, redirect); + set_recipients_from_destv (message, to, cc, bcc, redirect); e_destination_freev (to); e_destination_freev (cc); @@ -568,16 +568,17 @@ build_message_headers (EMsgComposer *composer, } /* Date: */ - camel_mime_message_set_date (msg, CAMEL_MESSAGE_DATE_CURRENT, 0); + camel_mime_message_set_date (message, CAMEL_MESSAGE_DATE_CURRENT, 0); /* X-Evolution-PostTo: */ header = e_composer_header_table_get_header ( table, E_COMPOSER_HEADER_POST_TO); if (e_composer_header_get_visible (header)) { - CamelMedium *medium = CAMEL_MEDIUM (msg); + CamelMedium *medium; const gchar *name = "X-Evolution-PostTo"; GList *list, *iter; + medium = CAMEL_MEDIUM (message); camel_medium_remove_header (medium, name); list = e_composer_header_table_get_post_to (table); -- cgit v1.2.3 From 6888df9c52976f8c51a02f1eca103b934e6eb619 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 10 Jul 2011 13:35:34 -0400 Subject: Bug 653568 - Forward as Redirect doesn't work X-Evolution-Account and X-Evolution-Transport headers were not getting set in redirected messages. --- composer/e-msg-composer.c | 53 +++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 29 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 27f454c08f..6ba256d143 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -520,6 +520,7 @@ build_message_headers (EMsgComposer *composer, CamelInternetAddress *addr; const gchar *name = account->id->name; const gchar *address = account->id->address; + gchar *transport_uid; medium = CAMEL_MEDIUM (message); @@ -535,6 +536,21 @@ build_message_headers (EMsgComposer *composer, } else camel_mime_message_set_from (message, addr); g_object_unref (addr); + + /* X-Evolution-Account */ + camel_medium_set_header ( + medium, "X-Evolution-Account", account->uid); + + /* X-Evolution-Fcc */ + camel_medium_set_header ( + medium, "X-Evolution-Fcc", account->sent_folder_uri); + + /* X-Evolution-Transport */ + transport_uid = g_strconcat ( + account->uid, "-transport", NULL); + camel_medium_set_header ( + medium, "X-Evolution-Transport", transport_uid); + g_free (transport_uid); } /* Reply-To: */ @@ -1057,6 +1073,7 @@ composer_build_message (EMsgComposer *composer, /* If this is a redirected message, just tweak the headers. */ if (priv->redirect) { + context->skip_content = TRUE; context->message = g_object_ref (priv->redirect); build_message_headers (composer, context->message, TRUE); g_simple_async_result_complete (simple); @@ -1091,38 +1108,16 @@ composer_build_message (EMsgComposer *composer, CAMEL_MEDIUM (context->message), "X-Priority", "1"); - if (account != NULL) { - gchar *transport_uid; - - /* X-Evolution-Account */ - camel_medium_set_header ( - CAMEL_MEDIUM (context->message), - "X-Evolution-Account", account->uid); - - /* X-Evolution-Fcc */ - camel_medium_set_header ( - CAMEL_MEDIUM (context->message), - "X-Evolution-Fcc", account->sent_folder_uri); + /* Organization */ + if (account != NULL && account->id->organization != NULL) { + gchar *organization; - /* X-Evolution-Transport */ - transport_uid = g_strconcat ( - account->uid, "-transport", NULL); + organization = camel_header_encode_string ( + (const guchar *) account->id->organization); camel_medium_set_header ( CAMEL_MEDIUM (context->message), - "X-Evolution-Transport", transport_uid); - g_free (transport_uid); - - /* Organization */ - if (account->id->organization != NULL) { - gchar *organization; - - organization = camel_header_encode_string ( - (const guchar *) account->id->organization); - camel_medium_set_header ( - CAMEL_MEDIUM (context->message), - "Organization", organization); - g_free (organization); - } + "Organization", organization); + g_free (organization); } /* X-Evolution-Format */ -- cgit v1.2.3 From aa4440a9590572533c7deb59290cc30c51ec4e62 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 12 Aug 2011 13:20:43 +0200 Subject: Bug #656290 - "Always carbon-copy (cc) to:" option not honored --- composer/e-msg-composer.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 6ba256d143..5b799309a6 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3933,6 +3933,52 @@ add_recipients (GList *list, const gchar *recips) return list; } +static gboolean +list_contains_addr (const GList *lst, EDestination *dest) +{ + g_return_val_if_fail (dest != NULL, FALSE); + + while (lst) { + if (e_destination_equal (dest, lst->data)) + return TRUE; + + lst = lst->next; + } + + return FALSE; +} + +static void +merge_cc_bcc (EDestination **addrv, GList **merge_into, const GList *to, const GList *cc, const GList *bcc) +{ + gint ii; + + for (ii = 0; addrv && addrv[ii]; ii++) { + if (!list_contains_addr (to, addrv[ii]) && + !list_contains_addr (cc, addrv[ii]) && + !list_contains_addr (bcc, addrv[ii])) + *merge_into = g_list_append (*merge_into, g_object_ref (addrv[ii])); + } +} + +static void +merge_always_cc_and_bcc (EComposerHeaderTable *table, const GList *to, GList **cc, GList **bcc) +{ + EDestination **addrv; + + g_return_if_fail (table != NULL); + g_return_if_fail (cc != NULL); + g_return_if_fail (bcc != NULL); + + addrv = e_composer_header_table_get_destinations_cc (table); + merge_cc_bcc (addrv, cc, to, *cc, *bcc); + e_destination_freev (addrv); + + addrv = e_composer_header_table_get_destinations_bcc (table); + merge_cc_bcc (addrv, bcc, to, *cc, *bcc); + e_destination_freev (addrv); +} + static void handle_mailto (EMsgComposer *composer, const gchar *mailto) { @@ -4057,6 +4103,8 @@ handle_mailto (EMsgComposer *composer, const gchar *mailto) g_free (buf); + merge_always_cc_and_bcc (table, to, &cc, &bcc); + tov = destination_list_to_vector (to); ccv = destination_list_to_vector (cc); bccv = destination_list_to_vector (bcc); -- cgit v1.2.3 From ae9db3ed236b0c734fd12c8dc8c99764626bf0b8 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 1 Jul 2011 00:07:26 -0400 Subject: Coding style and whitespace cleanup. --- composer/e-msg-composer.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 5b799309a6..6f608ab302 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3934,22 +3934,27 @@ add_recipients (GList *list, const gchar *recips) } static gboolean -list_contains_addr (const GList *lst, EDestination *dest) +list_contains_addr (const GList *list, + EDestination *dest) { g_return_val_if_fail (dest != NULL, FALSE); - while (lst) { - if (e_destination_equal (dest, lst->data)) + while (list != NULL) { + if (e_destination_equal (dest, list->data)) return TRUE; - lst = lst->next; + list = list->next; } return FALSE; } static void -merge_cc_bcc (EDestination **addrv, GList **merge_into, const GList *to, const GList *cc, const GList *bcc) +merge_cc_bcc (EDestination **addrv, + GList **merge_into, + const GList *to, + const GList *cc, + const GList *bcc) { gint ii; @@ -3957,12 +3962,16 @@ merge_cc_bcc (EDestination **addrv, GList **merge_into, const GList *to, const G if (!list_contains_addr (to, addrv[ii]) && !list_contains_addr (cc, addrv[ii]) && !list_contains_addr (bcc, addrv[ii])) - *merge_into = g_list_append (*merge_into, g_object_ref (addrv[ii])); + *merge_into = g_list_append ( + *merge_into, g_object_ref (addrv[ii])); } } static void -merge_always_cc_and_bcc (EComposerHeaderTable *table, const GList *to, GList **cc, GList **bcc) +merge_always_cc_and_bcc (EComposerHeaderTable *table, + const GList *to, + GList **cc, + GList **bcc) { EDestination **addrv; @@ -3980,7 +3989,8 @@ merge_always_cc_and_bcc (EComposerHeaderTable *table, const GList *to, GList **c } static void -handle_mailto (EMsgComposer *composer, const gchar *mailto) +handle_mailto (EMsgComposer *composer, + const gchar *mailto) { EAttachmentView *view; EAttachmentStore *store; -- 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. --- composer/e-msg-composer.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 6f608ab302..157f9b6387 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -225,18 +225,19 @@ emcu_remove_xevolution_headers (CamelMimeMessage *message) { struct _camel_header_raw *scan, *list = NULL; - for (scan = ((CamelMimePart *) message)->headers;scan;scan=scan->next) + for (scan = ((CamelMimePart *) message)->headers; scan; scan = scan->next) if (!strncmp(scan->name, "X-Evolution", 11)) camel_header_raw_append (&list, scan->name, scan->value, scan->offset); - for (scan=list;scan;scan=scan->next) + for (scan = list; scan; scan = scan->next) camel_medium_remove_header ((CamelMedium *) message, scan->name); return list; } -static EDestination** -destination_list_to_vector_sized (GList *list, gint n) +static EDestination ** +destination_list_to_vector_sized (GList *list, + gint n) { EDestination **destv; gint i = 0; @@ -259,7 +260,7 @@ destination_list_to_vector_sized (GList *list, gint n) return destv; } -static EDestination** +static EDestination ** destination_list_to_vector (GList *list) { return destination_list_to_vector_sized (list, -1); @@ -268,7 +269,8 @@ destination_list_to_vector (GList *list) #define LINE_LEN 72 static gboolean -text_requires_quoted_printable (const gchar *text, gsize len) +text_requires_quoted_printable (const gchar *text, + gsize len) { const gchar *p; gsize pos; @@ -291,7 +293,8 @@ text_requires_quoted_printable (const gchar *text, gsize len) } static CamelTransferEncoding -best_encoding (GByteArray *buf, const gchar *charset) +best_encoding (GByteArray *buf, + const gchar *charset) { gchar *in, *out, outbuf[256], *ch; gsize inlen, outlen; @@ -385,7 +388,8 @@ e_msg_composer_clear_inlined_table (EMsgComposer *composer) } static void -add_inlined_images (EMsgComposer *composer, CamelMultipart *multipart) +add_inlined_images (EMsgComposer *composer, + CamelMultipart *multipart) { EMsgComposerPrivate *p = composer->priv; @@ -2720,7 +2724,7 @@ add_attachments_handle_mime_part (EMsgComposer *composer, static void add_attachments_from_multipart (EMsgComposer *composer, CamelMultipart *multipart, - gboolean just_inlines, + gboolean just_inlines, gint depth) { /* find appropriate message attachments to add to the composer */ @@ -2999,7 +3003,7 @@ handle_multipart_alternative (EMsgComposer *composer, break; } else if (camel_content_type_is (content_type, "text", "*")) { /* anyt text part not text/html is second rate so the first - text part we find isn't necessarily the one we'll use. */ + * text part we find isn't necessarily the one we'll use. */ if (!text_part) text_part = mime_part; } else { @@ -3334,7 +3338,7 @@ e_msg_composer_new_with_message (EShell *shell, format++; flags = g_strsplit (format, ", ", 0); - for (i=0;flags[i];i++) { + for (i = 0; flags[i]; i++) { if (g_ascii_strcasecmp (flags[i], "text/html") == 0) gtkhtml_editor_set_html_mode ( GTKHTML_EDITOR (composer), TRUE); @@ -3911,7 +3915,8 @@ e_msg_composer_print (EMsgComposer *composer, } static GList * -add_recipients (GList *list, const gchar *recips) +add_recipients (GList *list, + const gchar *recips) { CamelInternetAddress *cia; const gchar *name, *addr; @@ -4505,7 +4510,7 @@ e_msg_composer_add_inline_image_from_file (EMsgComposer *composer, * be wrapped in a multipart/related. **/ void -e_msg_composer_add_inline_image_from_mime_part (EMsgComposer *composer, +e_msg_composer_add_inline_image_from_mime_part (EMsgComposer *composer, CamelMimePart *part) { gchar *url; -- cgit v1.2.3 From 62512760f6a4503b1c7aefa653dc3c787eb2710a Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 7 Sep 2011 16:18:03 +0200 Subject: Bug #657611 - Hidden error of invalid attendee on send --- composer/e-msg-composer.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 157f9b6387..22245eac5d 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -3590,6 +3590,8 @@ msg_composer_send_cb (EMsgComposer *composer, g_warn_if_fail (message == NULL); async_context_free (context); g_error_free (error); + + gtk_window_present (GTK_WINDOW (composer)); return; } @@ -3601,6 +3603,8 @@ msg_composer_send_cb (EMsgComposer *composer, error->message, NULL); async_context_free (context); g_error_free (error); + + gtk_window_present (GTK_WINDOW (composer)); return; } @@ -3639,8 +3643,10 @@ e_msg_composer_send (EMsgComposer *composer) /* This gives the user a chance to abort the send. */ g_signal_emit (composer, signals[PRESEND], 0, &proceed_with_send); - if (!proceed_with_send) + if (!proceed_with_send) { + gtk_window_present (GTK_WINDOW (composer)); return; + } context = g_slice_new0 (AsyncContext); context->activity = e_composer_activity_new (composer); -- cgit v1.2.3 From 2e3eebf3ba6081626e8996ff3866eb8b46c4c8e1 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 13 Sep 2011 12:24:14 -0400 Subject: Bug 635347 - Message lacks ID when submitted for sending --- composer/e-msg-composer.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 22245eac5d..c41c4019b3 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1087,6 +1087,10 @@ composer_build_message (EMsgComposer *composer, context->message = camel_mime_message_new (); + /* Explicitly generate a Message-ID header here so it's + * consistent for all outbound streams (SMTP, Fcc, etc). */ + camel_mime_message_set_message_id (context->message, NULL); + build_message_headers (composer, context->message, FALSE); for (i = 0; i < priv->extra_hdr_names->len; i++) { camel_medium_add_header ( -- cgit v1.2.3 From cea1af76a08307db99ec79c1ab21410d92f00310 Mon Sep 17 00:00:00 2001 From: Vibha Yadav Date: Thu, 15 Sep 2011 18:03:53 +0530 Subject: Bug #657374 - mailto: attachment parameter can lead to accidental data exfiltration Through warning on attaching Hidden/security files by mailto command. --- composer/e-msg-composer.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index c41c4019b3..0eaf3caa6b 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -128,6 +128,8 @@ static void handle_multipart_signed (EMsgComposer *composer, static void e_msg_composer_alert_sink_init (EAlertSinkInterface *interface); +gboolean check_blacklisted_file (gchar *filename); + G_DEFINE_TYPE_WITH_CODE ( EMsgComposer, e_msg_composer, @@ -4003,6 +4005,28 @@ merge_always_cc_and_bcc (EComposerHeaderTable *table, e_destination_freev (addrv); } +static const gchar *blacklisted_files [] = {".", "etc", ".."}; + +gboolean check_blacklisted_file (gchar *filename) +{ + gboolean blacklisted = FALSE; + gint i,j,len; + gchar **filename_part; + + filename_part = g_strsplit (filename, G_DIR_SEPARATOR_S, -1); + len = g_strv_length(filename_part); + for(i = 0; !blacklisted && i < G_N_ELEMENTS(blacklisted_files); i++) + { + for (j = 0; !blacklisted && j < len;j++) + if (g_str_has_prefix (filename_part[j], blacklisted_files[i])) + blacklisted = TRUE; + } + + g_strfreev(filename_part); + + return blacklisted; +} + static void handle_mailto (EMsgComposer *composer, const gchar *mailto) @@ -4094,8 +4118,14 @@ handle_mailto (EMsgComposer *composer, } else if (!g_ascii_strcasecmp (header, "attach") || !g_ascii_strcasecmp (header, "attachment")) { EAttachment *attachment; + gboolean check = FALSE; camel_url_decode (content); + check = check_blacklisted_file(content); + if(check) + e_alert_submit ( + E_ALERT_SINK (composer), + "mail:blacklisted-file", content, NULL); if (g_ascii_strncasecmp (content, "file:", 5) == 0) attachment = e_attachment_new_for_uri (content); else -- cgit v1.2.3 From 006efb8e1e25b064911c739ec5c1ddee06a9531f Mon Sep 17 00:00:00 2001 From: Vibha Yadav Date: Thu, 15 Sep 2011 18:18:12 +0530 Subject: Reverting the previous commit. --- composer/e-msg-composer.c | 30 ------------------------------ 1 file changed, 30 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 0eaf3caa6b..c41c4019b3 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -128,8 +128,6 @@ static void handle_multipart_signed (EMsgComposer *composer, static void e_msg_composer_alert_sink_init (EAlertSinkInterface *interface); -gboolean check_blacklisted_file (gchar *filename); - G_DEFINE_TYPE_WITH_CODE ( EMsgComposer, e_msg_composer, @@ -4005,28 +4003,6 @@ merge_always_cc_and_bcc (EComposerHeaderTable *table, e_destination_freev (addrv); } -static const gchar *blacklisted_files [] = {".", "etc", ".."}; - -gboolean check_blacklisted_file (gchar *filename) -{ - gboolean blacklisted = FALSE; - gint i,j,len; - gchar **filename_part; - - filename_part = g_strsplit (filename, G_DIR_SEPARATOR_S, -1); - len = g_strv_length(filename_part); - for(i = 0; !blacklisted && i < G_N_ELEMENTS(blacklisted_files); i++) - { - for (j = 0; !blacklisted && j < len;j++) - if (g_str_has_prefix (filename_part[j], blacklisted_files[i])) - blacklisted = TRUE; - } - - g_strfreev(filename_part); - - return blacklisted; -} - static void handle_mailto (EMsgComposer *composer, const gchar *mailto) @@ -4118,14 +4094,8 @@ handle_mailto (EMsgComposer *composer, } else if (!g_ascii_strcasecmp (header, "attach") || !g_ascii_strcasecmp (header, "attachment")) { EAttachment *attachment; - gboolean check = FALSE; camel_url_decode (content); - check = check_blacklisted_file(content); - if(check) - e_alert_submit ( - E_ALERT_SINK (composer), - "mail:blacklisted-file", content, NULL); if (g_ascii_strncasecmp (content, "file:", 5) == 0) attachment = e_attachment_new_for_uri (content); else -- cgit v1.2.3 From c7a08c227238b93100c9ccc0a853f2dc68b2e96d Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Thu, 13 Oct 2011 18:11:35 +0200 Subject: Migrate most of the composer to GSettings --- composer/e-msg-composer.c | 73 ++++++++++++++++++----------------------------- 1 file changed, 27 insertions(+), 46 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 82bca68514..3b7208d85f 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2110,13 +2110,14 @@ msg_composer_constructed (GObject *object) /* Restore Persistent State */ - array = composer->priv->gconf_bridge_binding_ids; + /* FIXME: need to bind this to GSettings */ + /* array = composer->priv->gconf_bridge_binding_ids; */ - binding_id = gconf_bridge_bind_window ( - gconf_bridge_get (), - COMPOSER_GCONF_WINDOW_PREFIX, - GTK_WINDOW (composer), TRUE, FALSE); - g_array_append_val (array, binding_id); + /* binding_id = gconf_bridge_bind_window ( */ + /* gconf_bridge_get (), */ + /* COMPOSER_GCONF_WINDOW_PREFIX, */ + /* GTK_WINDOW (composer), TRUE, FALSE); */ + /* g_array_append_val (array, binding_id); */ /* Honor User Preferences */ @@ -5032,21 +5033,19 @@ e_msg_composer_get_attachment_view (EMsgComposer *composer) GList * e_load_spell_languages (void) { - GConfClient *client; + GSettings *settings; GList *spell_languages = NULL; - GSList *list; - const gchar *key; - GError *error = NULL; + gchar **strv; + gint i; - /* Ask GConf for a list of spell check language codes. */ - client = gconf_client_get_default (); - key = COMPOSER_GCONF_SPELL_LANGUAGES_KEY; - list = gconf_client_get_list (client, key, GCONF_VALUE_STRING, &error); - g_object_unref (client); + /* Ask GSettings for a list of spell check language codes. */ + settings = g_settings_new ("org.gnome.evolution.mail"); + strv = g_settings_get_strv (settings, "composer-spell-languages"); + g_object_unref (settings); /* Convert the codes to spell language structs. */ - while (list != NULL) { - gchar *language_code = list->data; + for (i = 0; strv[i] != NULL; i++) { + gchar *language_code = strv[i]; const GtkhtmlSpellLanguage *language; language = gtkhtml_spell_language_lookup (language_code); @@ -5054,13 +5053,12 @@ e_load_spell_languages (void) spell_languages = g_list_prepend ( spell_languages, (gpointer) language); - list = g_slist_delete_link (list, list); g_free (language_code); } spell_languages = g_list_reverse (spell_languages); - /* Pick a default spell language if GConf came back empty. */ + /* Pick a default spell language if it came back empty. */ if (spell_languages == NULL) { const GtkhtmlSpellLanguage *language; @@ -5069,54 +5067,37 @@ e_load_spell_languages (void) if (language) { spell_languages = g_list_prepend ( spell_languages, (gpointer) language); - - /* Don't overwrite the stored spell check language - * codes if there was a problem retrieving them. */ - if (error == NULL) - e_save_spell_languages (spell_languages); } } - if (error != NULL) { - g_warning ("%s", error->message); - g_error_free (error); - } - return spell_languages; } void e_save_spell_languages (GList *spell_languages) { - GConfClient *client; - GSList *list = NULL; - const gchar *key; - GError *error = NULL; + GSettings *settings; + GPtrArray *lang_array; /* Build a list of spell check language codes. */ + lang_array = g_ptr_array_new (); while (spell_languages != NULL) { const GtkhtmlSpellLanguage *language; const gchar *language_code; language = spell_languages->data; language_code = gtkhtml_spell_language_get_code (language); - list = g_slist_prepend (list, (gpointer) language_code); + g_ptr_array_add (lang_array, language_code); spell_languages = g_list_next (spell_languages); } - list = g_slist_reverse (list); - - /* Save the language codes to GConf. */ - client = gconf_client_get_default (); - key = COMPOSER_GCONF_SPELL_LANGUAGES_KEY; - gconf_client_set_list (client, key, GCONF_VALUE_STRING, list, &error); - g_object_unref (client); + g_ptr_array_add (lang_array, NULL); - g_slist_free (list); + /* Save the language codes to GSettings. */ + settings = g_settings_new ("org.gnome.evolution.mail"); + g_settings_set_strv (settings, "composer-spell-languages", (const char * const *) lang_array->pdata); + g_object_unref (settings); - if (error != NULL) { - g_warning ("%s", error->message); - g_error_free (error); - } + g_ptr_array_free (lang_array, TRUE); } -- 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. --- composer/e-msg-composer.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 3b7208d85f..bdca1d8d5d 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -2065,10 +2065,8 @@ msg_composer_constructed (GObject *object) EWebView *web_view; GtkUIManager *ui_manager; GtkToggleAction *action; - GArray *array; const gchar *id; gboolean active; - guint binding_id; editor = GTKHTML_EDITOR (object); composer = E_MSG_COMPOSER (object); @@ -5087,7 +5085,7 @@ e_save_spell_languages (GList *spell_languages) language = spell_languages->data; language_code = gtkhtml_spell_language_get_code (language); - g_ptr_array_add (lang_array, language_code); + g_ptr_array_add (lang_array, (gpointer) language_code); spell_languages = g_list_next (spell_languages); } -- cgit v1.2.3 From 0c83b9b25d967ce6d6793ef851e86bc272a2f129 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 18 Nov 2011 09:09:48 -0500 Subject: Miscellaneous cleanups. --- composer/e-msg-composer.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index bdca1d8d5d..f3b4ddfa21 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -5034,7 +5034,7 @@ e_load_spell_languages (void) GSettings *settings; GList *spell_languages = NULL; gchar **strv; - gint i; + gint ii; /* Ask GSettings for a list of spell check language codes. */ settings = g_settings_new ("org.gnome.evolution.mail"); @@ -5042,8 +5042,8 @@ e_load_spell_languages (void) g_object_unref (settings); /* Convert the codes to spell language structs. */ - for (i = 0; strv[i] != NULL; i++) { - gchar *language_code = strv[i]; + for (ii = 0; strv[ii] != NULL; ii++) { + gchar *language_code = strv[ii]; const GtkhtmlSpellLanguage *language; language = gtkhtml_spell_language_lookup (language_code); @@ -5094,7 +5094,7 @@ e_save_spell_languages (GList *spell_languages) /* Save the language codes to GSettings. */ settings = g_settings_new ("org.gnome.evolution.mail"); - g_settings_set_strv (settings, "composer-spell-languages", (const char * const *) lang_array->pdata); + g_settings_set_strv (settings, "composer-spell-languages", (const gchar * const *) lang_array->pdata); g_object_unref (settings); g_ptr_array_free (lang_array, TRUE); -- cgit v1.2.3 From e64d6fe05c30c2cc1d7625a202afba3ba2da07cd Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 22 Nov 2011 18:22:14 -0500 Subject: Miscellaneous cleanups. --- composer/e-msg-composer.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) (limited to 'composer/e-msg-composer.c') diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index f3b4ddfa21..b7aaf883a5 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -128,8 +128,6 @@ static void handle_multipart_signed (EMsgComposer *composer, static void e_msg_composer_alert_sink_init (EAlertSinkInterface *interface); -gboolean check_blacklisted_file (gchar *filename); - G_DEFINE_TYPE_WITH_CODE ( EMsgComposer, e_msg_composer, @@ -4006,25 +4004,24 @@ merge_always_cc_and_bcc (EComposerHeaderTable *table, e_destination_freev (addrv); } -static const gchar *blacklisted_files [] = {".", "etc", ".."}; +static const gchar *blacklisted_files [] = { ".", "etc", ".." }; -gboolean check_blacklisted_file (gchar *filename) +static gboolean +check_blacklisted_file (gchar *filename) { gboolean blacklisted = FALSE; - gint i,j,len; + guint ii, jj, length; gchar **filename_part; filename_part = g_strsplit (filename, G_DIR_SEPARATOR_S, -1); - len = g_strv_length(filename_part); - for(i = 0; !blacklisted && i < G_N_ELEMENTS(blacklisted_files); i++) - { - for (j = 0; !blacklisted && j < len;j++) - if (g_str_has_prefix (filename_part[j], blacklisted_files[i])) + length = g_strv_length (filename_part); + for (ii = 0; !blacklisted && ii < G_N_ELEMENTS (blacklisted_files); ii++) { + for (jj = 0; !blacklisted && jj < length; jj++) + if (g_str_has_prefix (filename_part[jj], blacklisted_files[ii])) blacklisted = TRUE; } + g_strfreev (filename_part); - g_strfreev(filename_part); - return blacklisted; } @@ -4119,14 +4116,13 @@ handle_mailto (EMsgComposer *composer, } else if (!g_ascii_strcasecmp (header, "attach") || !g_ascii_strcasecmp (header, "attachment")) { EAttachment *attachment; - gboolean check = FALSE; camel_url_decode (content); - check = check_blacklisted_file(content); - if(check) + if (check_blacklisted_file (content)) e_alert_submit ( - E_ALERT_SINK (composer), - "mail:blacklisted-file", content, NULL); + E_ALERT_SINK (composer), + "mail:blacklisted-file", + content, NULL); if (g_ascii_strncasecmp (content, "file:", 5) == 0) attachment = e_attachment_new_for_uri (content); else -- cgit v1.2.3