[evolution] Bug 604346 - Ctrl+Enter sends mail without asking confirmation
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 604346 - Ctrl+Enter sends mail without asking confirmation
- Date: Tue, 3 Jun 2014 08:44:41 +0000 (UTC)
commit 70f58975e34348e4b698bb80e0078f93858bbc48
Author: Milan Crha <mcrha redhat com>
Date: Tue Jun 3 10:44:19 2014 +0200
Bug 604346 - Ctrl+Enter sends mail without asking confirmation
composer/e-composer-actions.c | 77 ++++++++++++++++++++++++++
composer/mail-composer.error.xml | 7 ++
data/org.gnome.evolution.mail.gschema.xml.in | 5 ++
mail/mail-config.ui | 16 +++++
modules/mail/em-composer-prefs.c | 6 ++
5 files changed, 111 insertions(+), 0 deletions(-)
---
diff --git a/composer/e-composer-actions.c b/composer/e-composer-actions.c
index 82315c6..047bf73 100644
--- a/composer/e-composer-actions.c
+++ b/composer/e-composer-actions.c
@@ -22,9 +22,64 @@
#include "e-composer-actions.h"
#include "e-composer-private.h"
+#include <e-util/e-util.h>
+
#include <errno.h>
#include <fcntl.h>
+/* because 'composer' is compiled before 'mail' folder */
+static gboolean
+composer_copy_em_utils_prompt_user (GtkWindow *parent,
+ const gchar *promptkey,
+ const gchar *tag,
+ ...)
+{
+ GtkWidget *dialog;
+ GtkWidget *check = NULL;
+ GtkWidget *container;
+ va_list ap;
+ gint button;
+ GSettings *settings;
+ EAlert *alert = NULL;
+
+ settings = g_settings_new ("org.gnome.evolution.mail");
+
+ if (promptkey && !g_settings_get_boolean (settings, promptkey)) {
+ g_object_unref (settings);
+ return TRUE;
+ }
+
+ va_start (ap, tag);
+ alert = e_alert_new_valist (tag, ap);
+ va_end (ap);
+
+ dialog = e_alert_dialog_new (parent, alert);
+ g_object_unref (alert);
+
+ container = e_alert_dialog_get_content_area (E_ALERT_DIALOG (dialog));
+
+ if (promptkey) {
+ check = gtk_check_button_new_with_mnemonic (
+ _("_Do not show this message again"));
+ gtk_box_pack_start (
+ GTK_BOX (container), check, FALSE, FALSE, 0);
+ gtk_widget_show (check);
+ }
+
+ button = gtk_dialog_run (GTK_DIALOG (dialog));
+ if (promptkey)
+ g_settings_set_boolean (
+ settings, promptkey,
+ !gtk_toggle_button_get_active (
+ GTK_TOGGLE_BUTTON (check)));
+
+ gtk_widget_destroy (dialog);
+
+ g_object_unref (settings);
+
+ return button == GTK_RESPONSE_YES;
+}
+
static void
action_attach_cb (GtkAction *action,
EMsgComposer *composer)
@@ -261,6 +316,23 @@ action_smime_sign_cb (GtkToggleAction *action,
gtkhtml_editor_set_changed (editor, TRUE);
}
+static gboolean
+composer_actions_accel_activate_cb (GtkAccelGroup *accel_group,
+ GObject *acceleratable,
+ guint keyval,
+ GdkModifierType modifier,
+ gpointer user_data)
+{
+ EMsgComposer *composer = user_data;
+
+ if (keyval == GDK_KEY_Return && (modifier & GDK_MODIFIER_MASK) == GDK_CONTROL_MASK &&
+ !composer_copy_em_utils_prompt_user (GTK_WINDOW (composer), "prompt-on-accel-send",
+ "mail-composer:prompt-accel-send", NULL)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
static GtkActionEntry entries[] = {
{ "attach",
@@ -440,6 +512,7 @@ void
e_composer_actions_init (EMsgComposer *composer)
{
GtkActionGroup *action_group;
+ GtkAccelGroup *accel_group;
GtkUIManager *ui_manager;
GtkhtmlEditor *editor;
EWebViewGtkHTML *web_view;
@@ -520,4 +593,8 @@ e_composer_actions_init (EMsgComposer *composer)
gtk_action_set_visible (ACTION (SMIME_ENCRYPT), visible);
gtk_action_set_visible (ACTION (SMIME_SIGN), visible);
+
+ accel_group = gtk_ui_manager_get_accel_group (ui_manager);
+ g_signal_connect (accel_group, "accel-activate",
+ G_CALLBACK (composer_actions_accel_activate_cb), composer);
}
diff --git a/composer/mail-composer.error.xml b/composer/mail-composer.error.xml
index 0dcd8d9..0fdf2cd 100644
--- a/composer/mail-composer.error.xml
+++ b/composer/mail-composer.error.xml
@@ -95,4 +95,11 @@
<_secondary>The message will be saved to your local Outbox folder, because the destination service is
currently unavailable. You can send the message by clicking the Send/Receive button in Evolution's
toolbar.</_secondary>
</error>
+ <error id="prompt-accel-send" type="question" default="GTK_RESPONSE_YES">
+ <_primary>Are you sure you want to send the message?</_primary>
+ <_secondary xml:space="preserve">A keyboard accelerator to send the message had been pressed. Either
cancel message send, if it was done by an accident, or send the message.</_secondary>
+ <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/>
+ <button _label="_Send" response="GTK_RESPONSE_YES"/>
+ </error>
+
</error-list>
diff --git a/data/org.gnome.evolution.mail.gschema.xml.in b/data/org.gnome.evolution.mail.gschema.xml.in
index e42de28..c1b2e25 100644
--- a/data/org.gnome.evolution.mail.gschema.xml.in
+++ b/data/org.gnome.evolution.mail.gschema.xml.in
@@ -361,6 +361,11 @@
<default>'quoted'</default>
<_summary>Default reply style</_summary>
</key>
+ <key name="prompt-on-accel-send" type="b">
+ <default>true</default>
+ <_summary>Prompt on send when using key accelerator (Ctrl+Enter)</_summary>
+ <_description>Prompt the user when he or she tries to send a message with a key
accelerator.</_description>
+ </key>
<key name="prompt-on-empty-subject" type="b">
<default>true</default>
<_summary>Prompt on empty subject</_summary>
diff --git a/mail/mail-config.ui b/mail/mail-config.ui
index 4ba1964..ddc5b89 100644
--- a/mail/mail-config.ui
+++ b/mail/mail-config.ui
@@ -998,6 +998,22 @@
<property name="position">5</property>
</packing>
</child>
+ <child>
+ <object class="GtkCheckButton" id="chkPromptAccelSend">
+ <property name="label" translatable="yes" comments="This is in the context of: Ask for
confirmation before...">Sending a message using _key accelerator (Ctrl+Enter)</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_underline">True</property>
+ <property name="xalign">0.5</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
</object>
</child>
</object>
diff --git a/modules/mail/em-composer-prefs.c b/modules/mail/em-composer-prefs.c
index 8ef21c4..d5ce340 100644
--- a/modules/mail/em-composer-prefs.c
+++ b/modules/mail/em-composer-prefs.c
@@ -1075,6 +1075,12 @@ em_composer_prefs_construct (EMComposerPrefs *prefs,
widget, "active",
G_SETTINGS_BIND_DEFAULT);
+ widget = e_builder_get_widget (prefs->builder, "chkPromptAccelSend");
+ g_settings_bind (
+ settings, "prompt-on-accel-send",
+ widget, "active",
+ G_SETTINGS_BIND_DEFAULT);
+
widget = e_builder_get_widget (prefs->builder, "chkPromptEmptySubject");
g_settings_bind (
settings, "prompt-on-empty-subject",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]