diff options
-rw-r--r-- | composer/e-composer-actions.c | 77 | ||||
-rw-r--r-- | composer/mail-composer.error.xml | 7 | ||||
-rw-r--r-- | data/org.gnome.evolution.mail.gschema.xml.in | 5 | ||||
-rw-r--r-- | mail/mail-config.ui | 16 | ||||
-rw-r--r-- | 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 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", |