Added empty_trash prompt key.
2003-12-02 Not Zed <NotZed@Ximian.com> * evolution-mail.schemas: Added empty_trash prompt key. * em-utils.c (em_utils_prompt_user): changed to take the gconf 'prompt again' key directly. Fixed callers. (em_utils_expunge_folder): prompt the user with an expunge specific message. (em_utils_empty_trash): have an empty-trash specific message for prompting confirm. (emu_confirm_expunge): removed, no longer needed. Bug #38613. (em_utils_expunge_folder): remove most line feeds, let the label wrap them. (em_utils_empty_trash): ditto. * em-subscribe-editor.c (sub_folder_subscribed): update the ui selection state after we're done. maybe we should listen on the model but this is easier. Bug #50861. * em-message-browser.c (emmb_activate): hook up our own verb list. (emmb_message_verbs[], emmb_close): implement the close verb. Bug #51558. * em-format-html-display.c (efhd_attachment_popup): duh, actually add the menu list we create. Bug #49902. * em-format.c (d): turn off debug, committed by accident. svn path=/trunk/; revision=23562
This commit is contained in:
@ -1,3 +1,31 @@
|
||||
2003-12-02 Not Zed <NotZed@Ximian.com>
|
||||
|
||||
* evolution-mail.schemas: Added empty_trash prompt key.
|
||||
|
||||
* em-utils.c (em_utils_prompt_user): changed to take the gconf
|
||||
'prompt again' key directly. Fixed callers.
|
||||
(em_utils_expunge_folder): prompt the user with an expunge
|
||||
specific message.
|
||||
(em_utils_empty_trash): have an empty-trash specific message for
|
||||
prompting confirm.
|
||||
(emu_confirm_expunge): removed, no longer needed. Bug #38613.
|
||||
(em_utils_expunge_folder): remove most line feeds, let the label
|
||||
wrap them.
|
||||
(em_utils_empty_trash): ditto.
|
||||
|
||||
* em-subscribe-editor.c (sub_folder_subscribed): update the ui
|
||||
selection state after we're done. maybe we should listen on the
|
||||
model but this is easier. Bug #50861.
|
||||
|
||||
* em-message-browser.c (emmb_activate): hook up our own verb list.
|
||||
(emmb_message_verbs[], emmb_close): implement the close verb.
|
||||
Bug #51558.
|
||||
|
||||
* em-format-html-display.c (efhd_attachment_popup): duh, actually
|
||||
add the menu list we create. Bug #49902.
|
||||
|
||||
* em-format.c (d): turn off debug, committed by accident.
|
||||
|
||||
2003-12-01 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* mail-mt.c (do_op_status): Use data->activity_id, not local
|
||||
|
||||
@ -103,19 +103,11 @@ composer_destroy_cb (gpointer user_data, GObject *deadbeef)
|
||||
static gboolean
|
||||
ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EABDestination **recipients)
|
||||
{
|
||||
gboolean show_again, res;
|
||||
GConfClient *gconf;
|
||||
gboolean res;
|
||||
GString *str;
|
||||
int i;
|
||||
|
||||
gconf = mail_config_get_gconf_client ();
|
||||
|
||||
if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/unwanted_html", NULL))
|
||||
return TRUE;
|
||||
|
||||
/* FIXME: this wording sucks */
|
||||
str = g_string_new (_("You are sending an HTML-formatted message. Please make sure that\n"
|
||||
"the following recipients are willing and able to receive HTML mail:\n"));
|
||||
str = g_string_new("");
|
||||
for (i = 0; recipients[i] != NULL; ++i) {
|
||||
if (!eab_destination_get_html_mail_pref (recipients[i])) {
|
||||
const char *name;
|
||||
@ -125,33 +117,24 @@ ask_confirm_for_unwanted_html_mail (EMsgComposer *composer, EABDestination **rec
|
||||
g_string_append_printf (str, " %s\n", name);
|
||||
}
|
||||
}
|
||||
|
||||
g_string_append (str, _("Send anyway?"));
|
||||
res = em_utils_prompt_user ((GtkWindow *) composer, GTK_RESPONSE_YES, &show_again, "%s", str->str);
|
||||
|
||||
/* FIXME: this wording sucks */
|
||||
res = em_utils_prompt_user((GtkWindow *) composer, GTK_RESPONSE_YES, "/apps/evolution/mail/prompts/unwanted_html",
|
||||
_("You are sending an HTML-formatted message. Please make sure that\n"
|
||||
"the following recipients are willing and able to receive HTML mail:\n"
|
||||
"%s"
|
||||
"Send anyway?"),
|
||||
str->str);
|
||||
g_string_free (str, TRUE);
|
||||
|
||||
gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/unwanted_html", show_again, NULL);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
ask_confirm_for_empty_subject (EMsgComposer *composer)
|
||||
{
|
||||
gboolean show_again, res;
|
||||
GConfClient *gconf;
|
||||
|
||||
gconf = mail_config_get_gconf_client ();
|
||||
|
||||
if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/empty_subject", NULL))
|
||||
return TRUE;
|
||||
|
||||
res = em_utils_prompt_user ((GtkWindow *) composer, GTK_RESPONSE_YES, &show_again,
|
||||
return em_utils_prompt_user((GtkWindow *)composer, GTK_RESPONSE_YES, "/apps/evolution/mail/prompts/empty_subject",
|
||||
_("This message has no subject.\nReally send?"));
|
||||
|
||||
gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/empty_subject", show_again, NULL);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -159,12 +142,6 @@ ask_confirm_for_only_bcc (EMsgComposer *composer, gboolean hidden_list_case)
|
||||
{
|
||||
gboolean show_again, res;
|
||||
const char *first_text;
|
||||
GConfClient *gconf;
|
||||
|
||||
gconf = mail_config_get_gconf_client ();
|
||||
|
||||
if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/only_bcc", NULL))
|
||||
return TRUE;
|
||||
|
||||
/* If the user is mailing a hidden contact list, it is possible for
|
||||
them to create a message with only Bcc recipients without really
|
||||
@ -179,17 +156,12 @@ ask_confirm_for_only_bcc (EMsgComposer *composer, gboolean hidden_list_case)
|
||||
} else {
|
||||
first_text = _("This message contains only Bcc recipients.");
|
||||
}
|
||||
|
||||
res = em_utils_prompt_user ((GtkWindow *) composer, GTK_RESPONSE_YES, &show_again,
|
||||
"%s\n%s", first_text,
|
||||
_("It is possible that the mail server may reveal the recipients "
|
||||
"by adding an Apparently-To header.\nSend anyway?"));
|
||||
|
||||
gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/only_bcc", show_again, NULL);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
return em_utils_prompt_user ((GtkWindow *) composer, GTK_RESPONSE_YES, "/apps/evolution/mail/prompts/only_bcc",
|
||||
"%s\n%s", first_text,
|
||||
_("It is possible that the mail server may reveal the recipients "
|
||||
"by adding an Apparently-To header.\nSend anyway?"));
|
||||
}
|
||||
|
||||
struct _send_data {
|
||||
struct emcs_t *emcs;
|
||||
|
||||
@ -954,6 +954,7 @@ efhd_attachment_popup(GtkWidget *w, GdkEventButton *event, struct _attach_puri *
|
||||
item = &efhd_menu_items[info->shown?2:1];
|
||||
item->activate_data = info;
|
||||
menus = g_slist_prepend(menus, item);
|
||||
em_popup_add_items(emp, menus, (GDestroyNotify)g_slist_free);
|
||||
|
||||
menu = em_popup_create_menu_once(emp, target, target->mask, target->mask);
|
||||
if (event)
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
|
||||
#include "em-format.h"
|
||||
|
||||
#define d(x) x
|
||||
#define d(x)
|
||||
|
||||
static void emf_builtin_init(EMFormatClass *);
|
||||
static const char *emf_snoop_part(CamelMimePart *part);
|
||||
|
||||
@ -182,11 +182,33 @@ emmb_set_message(EMFolderView *emfv, const char *uid)
|
||||
camel_folder_set_message_flags(emfv->folder, uid, CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_SEEN);
|
||||
}
|
||||
|
||||
static void
|
||||
emmb_close(BonoboUIComponent *uid, void *data, const char *path)
|
||||
{
|
||||
EMMessageBrowser *emmb = data;
|
||||
|
||||
gtk_widget_destroy(gtk_widget_get_toplevel((GtkWidget *)emmb));
|
||||
}
|
||||
|
||||
static BonoboUIVerb emmb_verbs[] = {
|
||||
BONOBO_UI_UNSAFE_VERB ("MessageBrowserClose", emmb_close),
|
||||
BONOBO_UI_VERB_END
|
||||
};
|
||||
|
||||
static void
|
||||
emmb_activate(EMFolderView *emfv, BonoboUIComponent *uic, int state)
|
||||
{
|
||||
emmb_parent->activate(emfv, uic, state);
|
||||
if (state) {
|
||||
emmb_parent->activate(emfv, uic, state);
|
||||
|
||||
if (state)
|
||||
bonobo_ui_component_add_verb_list_with_data(uic, emmb_verbs, emfv);
|
||||
bonobo_ui_component_set_prop(uic, "/commands/EditPaste", "sensitive", "0", NULL);
|
||||
} else {
|
||||
const BonoboUIVerb *v;
|
||||
|
||||
for (v = &emmb_verbs[0]; v->cname; v++)
|
||||
bonobo_ui_component_remove_verb(uic, v->cname);
|
||||
|
||||
emmb_parent->activate(emfv, uic, state);
|
||||
}
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@ struct _EMSubscribeNode {
|
||||
|
||||
static void sub_editor_busy(EMSubscribeEditor *se, int dir);
|
||||
static int sub_queue_fill_level(EMSubscribe *sub, EMSubscribeNode *node);
|
||||
static void sub_selection_changed(GtkTreeSelection *selection, EMSubscribe *sub);
|
||||
|
||||
static void
|
||||
sub_node_free(char *key, EMSubscribeNode *node, EMSubscribe *sub)
|
||||
@ -197,7 +198,7 @@ sub_folder_subscribe (struct _mail_msg *mm)
|
||||
static void
|
||||
sub_folder_subscribed (struct _mail_msg *mm)
|
||||
{
|
||||
struct _zsubscribe_msg *m = (struct _zsubscribe_msg *) mm;
|
||||
struct _zsubscribe_msg *m = (struct _zsubscribe_msg *)mm, *next;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model;
|
||||
EMSubscribeNode *node;
|
||||
@ -225,11 +226,14 @@ sub_folder_subscribed (struct _mail_msg *mm)
|
||||
d(printf("node mismatch, or subscribe state changed failed\n"));
|
||||
}
|
||||
|
||||
/* queue any further ones */
|
||||
m = (struct _zsubscribe_msg *)e_dlist_remhead(&m->sub->subscribe);
|
||||
if (m) {
|
||||
m->sub->subscribe_id = m->msg.seq;
|
||||
e_thread_put (mail_thread_new, (EMsg *)m);
|
||||
/* queue any further ones, or if out, update the ui */
|
||||
next = (struct _zsubscribe_msg *)e_dlist_remhead(&m->sub->subscribe);
|
||||
if (next) {
|
||||
next->sub->subscribe_id = next->msg.seq;
|
||||
e_thread_put(mail_thread_new, (EMsg *)next);
|
||||
} else {
|
||||
/* should it go off the model instead? */
|
||||
sub_selection_changed(gtk_tree_view_get_selection(m->sub->tree), m->sub);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -57,24 +57,29 @@ static EAccount *guess_account (CamelMimeMessage *message);
|
||||
* em_utils_prompt_user:
|
||||
* @parent: parent window
|
||||
* @def: default response
|
||||
* @again: continue prompting the user in the future
|
||||
* @promptkey: gconf key to check if we should prompt the user or not.
|
||||
* @fmt: prompt format
|
||||
* @Varargs: varargs
|
||||
*
|
||||
* Convenience function to query the user with a Yes/No dialog and a
|
||||
* "Don't show this dialog again" checkbox. If the user checks that
|
||||
* checkbox, then @again is set to %FALSE, otherwise it is set to
|
||||
* checkbox, then @promptkey is set to %FALSE, otherwise it is set to
|
||||
* %TRUE.
|
||||
*
|
||||
* Returns %TRUE if the user clicks Yes or %FALSE otherwise.
|
||||
**/
|
||||
gboolean
|
||||
em_utils_prompt_user (GtkWindow *parent, int def, gboolean *again, const char *fmt, ...)
|
||||
em_utils_prompt_user(GtkWindow *parent, int def, const char *promptkey, const char *fmt, ...)
|
||||
{
|
||||
GtkWidget *mbox, *check = NULL;
|
||||
va_list ap;
|
||||
int button;
|
||||
char *str;
|
||||
GConfClient *gconf = mail_config_get_gconf_client();
|
||||
|
||||
if (promptkey
|
||||
&& !gconf_client_get_bool(gconf, promptkey, NULL))
|
||||
return TRUE;
|
||||
|
||||
va_start (ap, fmt);
|
||||
str = g_strdup_vprintf (fmt, ap);
|
||||
@ -84,21 +89,21 @@ em_utils_prompt_user (GtkWindow *parent, int def, gboolean *again, const char *f
|
||||
"%s", str);
|
||||
g_free (str);
|
||||
gtk_dialog_set_default_response ((GtkDialog *) mbox, def);
|
||||
if (again) {
|
||||
if (promptkey) {
|
||||
check = gtk_check_button_new_with_label (_("Don't show this message again."));
|
||||
gtk_box_pack_start ((GtkBox *)((GtkDialog *) mbox)->vbox, check, TRUE, TRUE, 10);
|
||||
gtk_widget_show (check);
|
||||
}
|
||||
|
||||
button = gtk_dialog_run ((GtkDialog *) mbox);
|
||||
if (again)
|
||||
*again = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check));
|
||||
gtk_widget_destroy (mbox);
|
||||
if (promptkey)
|
||||
gconf_client_set_bool(gconf, promptkey, !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check)), NULL);
|
||||
|
||||
gtk_widget_destroy(mbox);
|
||||
|
||||
return button == GTK_RESPONSE_YES;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* em_utils_uids_copy:
|
||||
* @uids: array of uids
|
||||
@ -2197,29 +2202,6 @@ em_utils_message_to_html(CamelMimeMessage *message, const char *credits, guint32
|
||||
|
||||
/* ********************************************************************** */
|
||||
|
||||
static gboolean
|
||||
emu_confirm_expunge (GtkWidget *parent)
|
||||
{
|
||||
gboolean res, show_again;
|
||||
GConfClient *gconf;
|
||||
|
||||
gconf = mail_config_get_gconf_client ();
|
||||
|
||||
if (!gconf_client_get_bool (gconf, "/apps/evolution/mail/prompts/expunge", NULL))
|
||||
return TRUE;
|
||||
|
||||
/* FIXME: we need to get the parent GtkWindow from @parent... */
|
||||
|
||||
res = em_utils_prompt_user (NULL, GTK_RESPONSE_NO, &show_again,
|
||||
_("This operation will permanently erase all messages marked as\n"
|
||||
"deleted. If you continue, you will not be able to recover these messages.\n"
|
||||
"\nReally erase these messages?"));
|
||||
|
||||
gconf_client_set_bool (gconf, "/apps/evolution/mail/prompts/expunge", show_again, NULL);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* em_utils_expunge_folder:
|
||||
* @parent: parent window
|
||||
@ -2230,7 +2212,15 @@ emu_confirm_expunge (GtkWidget *parent)
|
||||
void
|
||||
em_utils_expunge_folder (GtkWidget *parent, CamelFolder *folder)
|
||||
{
|
||||
if (!emu_confirm_expunge(parent))
|
||||
char *name;
|
||||
|
||||
camel_object_get(folder, NULL, CAMEL_OBJECT_DESCRIPTION, &name, 0);
|
||||
|
||||
if (!em_utils_prompt_user(parent, GTK_RESPONSE_NO, "/apps/evolution/mail/prompts/expunge",
|
||||
_("This operation will permanently remove all deleted messages "
|
||||
"in the folder `%s'. If you continue, you "
|
||||
"will not be able to recover these messages.\n"
|
||||
"\nReally erase these messages?"), name))
|
||||
return;
|
||||
|
||||
mail_expunge_folder(folder, NULL, NULL);
|
||||
@ -2251,8 +2241,12 @@ em_utils_empty_trash (GtkWidget *parent)
|
||||
EAccount *account;
|
||||
EIterator *iter;
|
||||
CamelException ex;
|
||||
|
||||
if (!emu_confirm_expunge (parent))
|
||||
|
||||
if (!em_utils_prompt_user(parent, GTK_RESPONSE_NO, "/apps/evolution/mail/prompts/empty_trash",
|
||||
_("This operation will permanently remove all deleted messages "
|
||||
"in all folders. If you continue, you will not be able to "
|
||||
"recover these messages.\n"
|
||||
"\nReally erase these messages?")))
|
||||
return;
|
||||
|
||||
camel_exception_init (&ex);
|
||||
|
||||
@ -41,7 +41,7 @@ struct _GtkSelectionData;
|
||||
struct _GtkAdjustment;
|
||||
struct _EMsgComposer;
|
||||
|
||||
gboolean em_utils_prompt_user (struct _GtkWindow *parent, int def, gboolean *again, const char *fmt, ...);
|
||||
gboolean em_utils_prompt_user(struct _GtkWindow *parent, int def, const char *promptkey, const char *fmt, ...);
|
||||
|
||||
GPtrArray *em_utils_uids_copy (GPtrArray *uids);
|
||||
void em_utils_uids_free (GPtrArray *uids);
|
||||
|
||||
@ -539,6 +539,20 @@
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/evolution/mail/prompts/empty_trash</key>
|
||||
<applyto>/apps/evolution/mail/prompts/empty_trash</applyto>
|
||||
<owner>evolution-mail</owner>
|
||||
<type>bool</type>
|
||||
<default>true</default>
|
||||
<locale name="C">
|
||||
<short>Prompt when user empties the trash</short>
|
||||
<long>
|
||||
Do we prompt the user when he or she tries to empty the trash.
|
||||
</long>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/evolution/mail/prompts/only_bcc</key>
|
||||
<applyto>/apps/evolution/mail/prompts/only_bcc</applyto>
|
||||
|
||||
Reference in New Issue
Block a user