diff options
author | Dan Winship <danw@src.gnome.org> | 2001-04-25 21:46:45 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2001-04-25 21:46:45 +0800 |
commit | e27847398ef1ca04e0bd944e9d2245570e373541 (patch) | |
tree | bdc2b611b8f0d01f2da22b37eccf997a9c2abe61 /mail/mail-callbacks.c | |
parent | b024121e896a03f60f92496b9ed5df259547aa7a (diff) | |
download | gsoc2013-evolution-e27847398ef1ca04e0bd944e9d2245570e373541.tar gsoc2013-evolution-e27847398ef1ca04e0bd944e9d2245570e373541.tar.gz gsoc2013-evolution-e27847398ef1ca04e0bd944e9d2245570e373541.tar.bz2 gsoc2013-evolution-e27847398ef1ca04e0bd944e9d2245570e373541.tar.lz gsoc2013-evolution-e27847398ef1ca04e0bd944e9d2245570e373541.tar.xz gsoc2013-evolution-e27847398ef1ca04e0bd944e9d2245570e373541.tar.zst gsoc2013-evolution-e27847398ef1ca04e0bd944e9d2245570e373541.zip |
New foot-shooting-prevention helper function. (edit_msg_internal,
* mail-callbacks.c (are_you_sure): New foot-shooting-prevention
helper function.
(edit_msg_internal, view_msg): If the user has more than 10
messages selected, ask before opening them all in separate
windows, to protect against misclicks/typos after "select all"
(which we've had at least two reports of now).
svn path=/trunk/; revision=9559
Diffstat (limited to 'mail/mail-callbacks.c')
-rw-r--r-- | mail/mail-callbacks.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/mail/mail-callbacks.c b/mail/mail-callbacks.c index 722d8c9a7e..6919ac32e9 100644 --- a/mail/mail-callbacks.c +++ b/mail/mail-callbacks.c @@ -1121,6 +1121,26 @@ is_drafts_folder (CamelFolder *folder) return FALSE; } +static gboolean +are_you_sure (const char *msg, GPtrArray *uids, FolderBrowser *fb) +{ + GtkWidget *window = gtk_widget_get_ancestor (fb, GTK_TYPE_WINDOW); + GtkWidget *dialog; + char *buf; + int button, i; + + buf = g_strdup_printf (msg, uids->len); + dialog = gnome_ok_cancel_dialog_parented (buf, NULL, NULL, (GtkWindow *)window); + button = gnome_dialog_run_and_close (dialog); + if (button != 0) { + for (i = 0; i < uids->len; i++) + g_free (uids->pdata[i]); + g_ptr_array_free (uids, TRUE); + } + + return button == 0; +} + static void edit_msg_internal (FolderBrowser *fb) { @@ -1132,6 +1152,9 @@ edit_msg_internal (FolderBrowser *fb) uids = g_ptr_array_new (); message_list_foreach (fb->message_list, enumerate_msg, uids); + if (uids->len > 10 && !are_you_sure (_("Are you sure you want to edit all %d messages?"), uids, fb)) + return; + mail_get_messages (fb->folder, uids, do_edit_messages, fb); } @@ -1546,6 +1569,10 @@ view_msg (GtkWidget *widget, gpointer user_data) uids = g_ptr_array_new (); message_list_foreach (fb->message_list, enumerate_msg, uids); + + if (uids->len > 10 && !are_you_sure (_("Are you sure you want to open all %d messages in separate windows?"), uids, fb)) + return; + for (i = 0; i < uids->len; i++) { mail_get_message (fb->folder, uids->pdata [i], do_view_message, fb, mail_thread_queued); g_free (uids->pdata [i]); |