[evolution] Bug #599792 - Anjal composer's Send button doesn't work after pressed Save Drafts button



commit d209b896747b519c42c6326fd1d6550ae7f176e5
Author: Yan Li <yanli infradead org>
Date:   Fri Nov 6 16:43:58 2009 +0800

    Bug #599792 - Anjal composer's Send button doesn't work after pressed Save Drafts button
    
    This is due to an old hack that hiding a composer means we're closing
    it so save_draft_done() destroys the composer after saved draft. But
    in Anjal, the composer widget is always hidden (since the editor is
    reparented to the tab), and will be wrongly destroyed by
    save_draft_done() when you clicked "Save Draft" button.
    
    This patch improved the old hack, by adding a new API
    e_msg_composer_request_close() that can be used to request closing a
    composer (so the old hack is no longer needed). Internally,
    composer->priv->application_exiting is used to store this exiting
    status.
    
    So by this we no longer use a composer's visibility to check whether
    we're to close it. When you no longer need a composer after saved
    draft, call e_msg_composer_request_close() before sending the
    save-draft signal.
    
    The e_msg_composer_is_exiting() (removed by 983bea9) has to be bring
    back, which is needed by other programs that use the composer (Anjal
    here).
    
    (forward ported from 08150f6 of gnome-2-28)

 composer/e-composer-actions.c |    2 ++
 composer/e-msg-composer.c     |   17 +++++++++++++++++
 composer/e-msg-composer.h     |    4 ++++
 mail/em-composer-utils.c      |    5 +----
 4 files changed, 24 insertions(+), 4 deletions(-)
---
diff --git a/composer/e-composer-actions.c b/composer/e-composer-actions.c
index 62372a7..851b0f3 100644
--- a/composer/e-composer-actions.c
+++ b/composer/e-composer-actions.c
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -85,6 +86,7 @@ action_close_cb (GtkAction *action,
 	switch (response) {
 		case GTK_RESPONSE_YES:
 			gtk_widget_hide (widget);
+			e_msg_composer_request_close (composer);
 			gtk_action_activate (ACTION (SAVE_DRAFT));
 			break;
 
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 9a28a68..c10ef99 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -3955,6 +3956,22 @@ e_msg_composer_set_enable_autosave (EMsgComposer *composer,
 	e_composer_autosave_set_enabled (composer, enabled);
 }
 
+gboolean
+e_msg_composer_is_exiting (EMsgComposer *composer)
+{
+	g_return_val_if_fail (composer != NULL, FALSE);
+
+	return composer->priv->application_exiting;
+}
+
+void
+e_msg_composer_request_close (EMsgComposer *composer)
+{
+	g_return_val_if_fail (composer != NULL, FALSE);
+
+	composer->priv->application_exiting = TRUE;
+}
+
 EMsgComposer *
 e_msg_composer_load_from_file (const gchar *filename)
 {
diff --git a/composer/e-msg-composer.h b/composer/e-msg-composer.h
index e0d118b..116eb38 100644
--- a/composer/e-msg-composer.h
+++ b/composer/e-msg-composer.h
@@ -1,3 +1,4 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -135,6 +136,7 @@ void		e_msg_composer_add_message_attachments
 						 CamelMimeMessage *message,
 						 gboolean just_inlines);
 
+void		e_msg_composer_request_close	(EMsgComposer *composer);
 EMsgComposer *	e_msg_composer_load_from_file	(const gchar *filename);
 void		e_msg_composer_check_autosave	(GtkWindow *parent);
 
@@ -148,6 +150,8 @@ EAttachmentView *
 GByteArray *	e_msg_composer_get_raw_message_text
 						(EMsgComposer *composer);
 
+gboolean	e_msg_composer_is_exiting	(EMsgComposer *composer);
+
 GList *		e_load_spell_languages		(void);
 void		e_save_spell_languages		(GList *spell_languages);
 
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index b4fcebf..a555da6 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -555,10 +555,7 @@ save_draft_done (CamelFolder *folder, CamelMimeMessage *msg, CamelMessageInfo *i
 		emcs->drafts_uid = g_strdup (appended_uid);
 	}
 
-	/* This is kind of a hack, but the composer's CLOSE action
-	 * hides the window before emitting the "save-draft" signal.
-	 * We use that to determine whether to destroy the composer. */
-	if (!GTK_WIDGET_VISIBLE (sdi->composer))
+	if (e_msg_composer_is_exiting (sdi->composer))
 		gtk_widget_destroy (GTK_WIDGET (sdi->composer));
 
  done:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]