aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2014-06-03 16:44:19 +0800
committerMilan Crha <mcrha@redhat.com>2014-06-03 16:44:19 +0800
commit70f58975e34348e4b698bb80e0078f93858bbc48 (patch)
tree5e3dd6d90b38a71a2211d82e7430ca510123c4be
parent2f73b39bf2999fa0316e776a0d7a3967e69c8ec6 (diff)
downloadgsoc2013-evolution-70f58975e34348e4b698bb80e0078f93858bbc48.tar
gsoc2013-evolution-70f58975e34348e4b698bb80e0078f93858bbc48.tar.gz
gsoc2013-evolution-70f58975e34348e4b698bb80e0078f93858bbc48.tar.bz2
gsoc2013-evolution-70f58975e34348e4b698bb80e0078f93858bbc48.tar.lz
gsoc2013-evolution-70f58975e34348e4b698bb80e0078f93858bbc48.tar.xz
gsoc2013-evolution-70f58975e34348e4b698bb80e0078f93858bbc48.tar.zst
gsoc2013-evolution-70f58975e34348e4b698bb80e0078f93858bbc48.zip
Bug 604346 - Ctrl+Enter sends mail without asking confirmation
-rw-r--r--composer/e-composer-actions.c77
-rw-r--r--composer/mail-composer.error.xml7
-rw-r--r--data/org.gnome.evolution.mail.gschema.xml.in5
-rw-r--r--mail/mail-config.ui16
-rw-r--r--modules/mail/em-composer-prefs.c6
5 files changed, 111 insertions, 0 deletions
diff --git a/composer/e-composer-actions.c b/composer/e-composer-actions.c
index 82315c6b75..047bf735bd 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 0dcd8d9a07..0fdf2cdd77 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 e42de28fa4..c1b2e25545 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 4ba1964860..ddc5b89fa1 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 8ef21c49a3..d5ce3401f1 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",