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:
Not Zed
2003-12-02 05:16:22 +00:00
committed by Michael Zucci
parent 4edfed50a6
commit 62b482ca29
9 changed files with 123 additions and 88 deletions

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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);

View File

@ -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>