aboutsummaryrefslogtreecommitdiffstats
path: root/mail/e-mail-browser.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/e-mail-browser.c')
-rw-r--r--mail/e-mail-browser.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/mail/e-mail-browser.c b/mail/e-mail-browser.c
index 19b74fc311..1843751342 100644
--- a/mail/e-mail-browser.c
+++ b/mail/e-mail-browser.c
@@ -828,6 +828,70 @@ mail_browser_set_message (EMailReader *reader,
}
static void
+mail_browser_composer_created (EMailReader *reader,
+ EMsgComposer *composer,
+ CamelMimeMessage *message)
+{
+ GSettings *settings;
+ const gchar *key;
+ gchar *value;
+ gboolean close_browser;
+
+ /* Do not prompt if there is no source message. It means
+ * the user wants to start a brand new message, presumably
+ * unrelated to the message shown in the browser window. */
+ if (message == NULL)
+ return;
+
+ settings = g_settings_new ("org.gnome.evolution.mail");
+
+ key = "prompt-on-reply-close-browser";
+ value = g_settings_get_string (settings, key);
+
+ if (g_strcmp0 (value, "always") == 0) {
+ close_browser = TRUE;
+ } else if (g_strcmp0 (value, "never") == 0) {
+ close_browser = FALSE;
+ } else {
+ GtkWidget *dialog;
+ GtkWindow *parent;
+ EShell *shell;
+ EMailBackend *backend;
+ EShellBackend *shell_backend;
+ gint response;
+
+ backend = e_mail_reader_get_backend (reader);
+
+ shell_backend = E_SHELL_BACKEND (backend);
+ shell = e_shell_backend_get_shell (shell_backend);
+
+ parent = e_shell_get_active_window (shell);
+ if (parent == NULL)
+ parent = e_mail_reader_get_window (reader);
+
+ dialog = e_alert_dialog_new_for_args (
+ parent, "mail:ask-reply-close-browser", NULL);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ close_browser =
+ (response == GTK_RESPONSE_YES) ||
+ (response == GTK_RESPONSE_OK);
+
+ if (response == GTK_RESPONSE_OK)
+ g_settings_set_string (settings, key, "always");
+ else if (response == GTK_RESPONSE_CANCEL)
+ g_settings_set_string (settings, key, "never");
+ }
+
+ g_free (value);
+ g_object_unref (settings);
+
+ if (close_browser)
+ e_mail_browser_close (E_MAIL_BROWSER (reader));
+}
+
+static void
e_mail_browser_class_init (EMailBrowserClass *class)
{
GObjectClass *object_class;
@@ -918,6 +982,7 @@ e_mail_browser_reader_init (EMailReaderInterface *interface)
interface->get_preview_pane = mail_browser_get_preview_pane;
interface->get_window = mail_browser_get_window;
interface->set_message = mail_browser_set_message;
+ interface->composer_created = mail_browser_composer_created;
}
static void