diff options
author | Milan Crha <mcrha@redhat.com> | 2013-10-18 02:08:06 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2013-10-18 02:08:06 +0800 |
commit | 7cc6ab171116a07482120a0f766299e9697026c0 (patch) | |
tree | cb7921c90778fee2f516fc017f8fddb0ed6cfd4f | |
parent | af81b13a8994954b8c722c23e8dc073466c962f3 (diff) | |
download | gsoc2013-evolution-7cc6ab171116a07482120a0f766299e9697026c0.tar.gz gsoc2013-evolution-7cc6ab171116a07482120a0f766299e9697026c0.tar.zst gsoc2013-evolution-7cc6ab171116a07482120a0f766299e9697026c0.zip |
Bug #709396 - Quoted text truncated when "Keep signature above" is set
The GtkComboBox::changed signal is not called only on active-id change,
but also on any content change, including each row add/change/removal
into its model. These signals are delivered on the main thread, thus
the result of e_mail_signature_combo_box_load_selected() is delivered
later, which means that a call like gtk_list_store_clear() queues as
many 'load_selected' operations as is the list items count. Such thing
confused GtkHTML editor enough to garble the message body. This change
is kind of workaround, which avoids unnecessary signature updates.
-rw-r--r-- | composer/e-composer-private.c | 21 | ||||
-rw-r--r-- | composer/e-composer-private.h | 2 |
2 files changed, 23 insertions, 0 deletions
diff --git a/composer/e-composer-private.c b/composer/e-composer-private.c index 4ca523e6ed..90569a2e90 100644 --- a/composer/e-composer-private.c +++ b/composer/e-composer-private.c @@ -465,6 +465,7 @@ e_composer_private_finalize (EMsgComposer *composer) g_free (composer->priv->charset); g_free (composer->priv->mime_type); g_free (composer->priv->mime_body); + g_free (composer->priv->selected_signature_uid); g_hash_table_destroy (composer->priv->inline_images); g_hash_table_destroy (composer->priv->inline_images_by_url); @@ -1023,11 +1024,18 @@ exit: g_object_unref (composer); } +static gboolean +is_null_or_none (const gchar *text) +{ + return !text || g_strcmp0 (text, "none") == 0; +} + void e_composer_update_signature (EMsgComposer *composer) { EComposerHeaderTable *table; EMailSignatureComboBox *combo_box; + const gchar *signature_uid; g_return_if_fail (E_IS_MSG_COMPOSER (composer)); @@ -1036,6 +1044,19 @@ e_composer_update_signature (EMsgComposer *composer) return; table = e_msg_composer_get_header_table (composer); + signature_uid = e_composer_header_table_get_signature_uid (table); + + /* this is a case when the signature combo cleared itself for a reload */ + if (!signature_uid) + return; + + if (g_strcmp0 (signature_uid, composer->priv->selected_signature_uid) == 0 || + (is_null_or_none (signature_uid) && is_null_or_none (composer->priv->selected_signature_uid))) + return; + + g_free (composer->priv->selected_signature_uid); + composer->priv->selected_signature_uid = g_strdup (signature_uid); + combo_box = e_composer_header_table_get_signature_combo_box (table); /* XXX Signature files should be local and therefore load quickly, diff --git a/composer/e-composer-private.h b/composer/e-composer-private.h index fc358b9320..66222826e0 100644 --- a/composer/e-composer-private.h +++ b/composer/e-composer-private.h @@ -99,6 +99,8 @@ struct _EMsgComposerPrivate { CamelMimeMessage *redirect; gboolean is_from_message; + + gchar *selected_signature_uid; }; void e_composer_private_constructed (EMsgComposer *composer); |