aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/ChangeLog6
-rw-r--r--e-util/e-error.c4
-rw-r--r--mail/ChangeLog6
-rw-r--r--mail/mail.error.xml8
-rw-r--r--plugins/mark-all-read/ChangeLog6
-rw-r--r--plugins/mark-all-read/mark-all-read.c167
6 files changed, 177 insertions, 20 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog
index 41721887d6..5465e03bba 100644
--- a/e-util/ChangeLog
+++ b/e-util/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-16 Matthew Barnes <mbarnes@redhat.com>
+
+ ** Fixes part of bug #514383
+
+ * e-error.c (e_error_newv): Widget packing adjustments.
+
2008-05-14 Matthew Barnes <mbarnes@redhat.com>
** Fixes bug #531592
diff --git a/e-util/e-error.c b/e-util/e-error.c
index ed6369a184..1fee2f4164 100644
--- a/e-util/e-error.c
+++ b/e-util/e-error.c
@@ -510,7 +510,7 @@ e_error_newv(GtkWindow *parent, const char *tag, const char *arg0, va_list ap)
w = gtk_image_new_from_stock(type_map[e->type].icon, GTK_ICON_SIZE_DIALOG);
gtk_misc_set_alignment((GtkMisc *)w, 0.0, 0.0);
- gtk_box_pack_start((GtkBox *)hbox, w, TRUE, TRUE, 12);
+ gtk_box_pack_start((GtkBox *)hbox, w, FALSE, FALSE, 12);
args = g_ptr_array_new();
tmp = (char *)arg0;
@@ -564,7 +564,7 @@ e_error_newv(GtkWindow *parent, const char *tag, const char *arg0, va_list ap)
gtk_box_pack_start((GtkBox *)hbox, scroll, FALSE, FALSE, 0);
gtk_window_set_default_size ((GtkWindow *)dialog, 360, 180);
} else
- gtk_box_pack_start((GtkBox *)hbox, w, FALSE, FALSE, 0);
+ gtk_box_pack_start((GtkBox *)hbox, w, TRUE, TRUE, 0);
gtk_widget_show_all(hbox);
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 534338ec3c..7cb095136e 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-16 Matthew Barnes <mbarnes@redhat.com>
+
+ ** Fixes part of bug #514383
+
+ * mail.error.xml: Remove the "ask-mark-read" error.
+
2008-05-14 Jeffrey Stedfast <fejj@novell.com>
Needed so that IMAP4 can allow users to configure cache
diff --git a/mail/mail.error.xml b/mail/mail.error.xml
index 9caf7158a6..0c6c7f3332 100644
--- a/mail/mail.error.xml
+++ b/mail/mail.error.xml
@@ -368,14 +368,6 @@ You can choose to ignore this folder, overwrite or append its contents, or quit.
<button stock="gtk-yes" _label="Send Receipt" response="GTK_RESPONSE_YES"/>
</error>
- <error id="ask-mark-read" type="question" default="GTK_RESPONSE_NO">
- <_title>Mark all messages as read</_title>
- <_primary>Mark all messages in this folder and subfolders as read?</_primary>
- <_secondary xml:space="preserve">Do you want the operation to be performed also in the subfolders?</_secondary>
- <button stock="gtk-no" _label="Only on _Current Folder" response="GTK_RESPONSE_NO"/>
- <button stock="gtk-yes" _label="on Current Folder and _Subfolders" response="GTK_RESPONSE_YES"/>
- </error>
-
<error id="ask-quick-offline" type="question" default="GTK_RESPONSE_NO">
<_primary>Synchronize folders locally for offline usage?</_primary>
<_secondary xml:space="preserve">Do you want to locally synchronize the folders that are marked for offline usage?</_secondary>
diff --git a/plugins/mark-all-read/ChangeLog b/plugins/mark-all-read/ChangeLog
index c53c809458..bfd604cfbe 100644
--- a/plugins/mark-all-read/ChangeLog
+++ b/plugins/mark-all-read/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-16 Matthew Barnes <mbarnes@redhat.com>
+
+ ** Fixes bug #514383
+
+ * mark-all-read.c: Add a Cancel button.
+
2007-12-20 Matthew Barnes <mbarnes@redhat.com>
** Fixes part of bug #362638
diff --git a/plugins/mark-all-read/mark-all-read.c b/plugins/mark-all-read/mark-all-read.c
index 7e01b3f79a..1887d447a0 100644
--- a/plugins/mark-all-read/mark-all-read.c
+++ b/plugins/mark-all-read/mark-all-read.c
@@ -33,10 +33,161 @@
#include <camel/camel-vee-folder.h>
#include "e-util/e-error.h"
+#define PRIMARY_TEXT \
+ N_("Mark all messages in this folder and subfolders as read?")
+#define SECONDARY_TEXT \
+ N_("Do you want the operation to be performed also in the subfolders?")
+
void org_gnome_mark_all_read (EPlugin *ep, EMPopupTargetFolder *target);
static void mar_got_folder (char *uri, CamelFolder *folder, void *data);
static void mar_all_sub_folders (CamelStore *store, CamelFolderInfo *fi, CamelException *ex);
+static void
+button_clicked_cb (GtkButton *button,
+ GtkDialog *dialog)
+{
+ gpointer response;
+
+ response = g_object_get_data (G_OBJECT (button), "response");
+ gtk_dialog_response (dialog, GPOINTER_TO_INT (response));
+}
+
+static void
+box_mapped_cb (GtkWidget *box,
+ GtkWidget *label)
+{
+ GtkRequisition requisition;
+
+ /* In order to get decent line wrapping we need to wait until the
+ * box containing the buttons is mapped, and then resize the label
+ * to the same width as the box. */
+ gtk_widget_size_request (box, &requisition);
+ gtk_widget_set_size_request (label, requisition.width, -1);
+}
+
+static gint
+prompt_user (void)
+{
+ GtkWidget *container;
+ GtkWidget *dialog;
+ GtkWidget *label1;
+ GtkWidget *label2;
+ GtkWidget *table;
+ GtkWidget *widget;
+ GtkWidget *vbox;
+ gchar *markup;
+ gint response;
+
+ dialog = gtk_dialog_new ();
+ gtk_widget_hide (GTK_DIALOG (dialog)->action_area);
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+ gtk_window_set_title (
+ GTK_WINDOW (dialog), _("Mark All Messages as Read"));
+ g_signal_connect (
+ dialog, "map",
+ G_CALLBACK (gtk_widget_queue_resize), NULL);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 12);
+ vbox = GTK_DIALOG (dialog)->vbox;
+
+ /* Table */
+ widget = gtk_table_new (3, 2, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (widget), 12);
+ gtk_table_set_col_spacings (GTK_TABLE (widget), 12);
+ gtk_box_pack_start (GTK_BOX (vbox), widget, TRUE, TRUE, 0);
+ gtk_widget_show (widget);
+
+ table = widget;
+
+ /* Question Icon */
+ widget = gtk_image_new_from_stock (
+ GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0.5, 0.0);
+ gtk_table_attach (
+ GTK_TABLE (table), widget, 0, 1, 0, 3,
+ 0, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_widget_show (widget);
+
+ /* Primary Text */
+ markup = g_markup_printf_escaped (
+ "<big><b>%s</b></big>", gettext (PRIMARY_TEXT));
+ widget = gtk_label_new (markup);
+ gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE);
+ gtk_label_set_use_markup (GTK_LABEL (widget), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.0);
+ gtk_table_attach (
+ GTK_TABLE (table), widget, 1, 2, 0, 1,
+ 0, 0, 0, 0);
+ gtk_widget_show (widget);
+ g_free (markup);
+ label1 = widget;
+
+ /* Secondary Text */
+ widget = gtk_label_new (gettext (SECONDARY_TEXT));
+ gtk_label_set_line_wrap (GTK_LABEL (widget), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.0);
+ gtk_table_attach (
+ GTK_TABLE (table), widget, 1, 2, 1, 2,
+ 0, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_widget_show (widget);
+ label2 = widget;
+
+ /* Action Area */
+ widget = gtk_hbox_new (FALSE, 6);
+ g_signal_connect (
+ widget, "map",
+ G_CALLBACK (box_mapped_cb), label1);
+ g_signal_connect (
+ widget, "map",
+ G_CALLBACK (box_mapped_cb), label2);
+ gtk_table_attach (
+ GTK_TABLE (table), widget, 1, 2, 2, 3,
+ GTK_EXPAND | GTK_FILL, 0, 0, 0);
+ gtk_widget_show (widget);
+
+ container = widget;
+
+ /* Cancel button */
+ widget = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+ g_object_set_data (
+ G_OBJECT (widget), "response",
+ GINT_TO_POINTER (GTK_RESPONSE_CANCEL));
+ g_signal_connect (
+ widget, "clicked",
+ G_CALLBACK (button_clicked_cb), dialog);
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ gtk_widget_show (widget);
+
+ /* "Current Folder and Subfolders" button */
+ widget = gtk_button_new_with_mnemonic (
+ _("Current Folder and _Subfolders"));
+ g_object_set_data (
+ G_OBJECT (widget), "response",
+ GINT_TO_POINTER (GTK_RESPONSE_YES));
+ g_signal_connect (
+ widget, "clicked",
+ G_CALLBACK (button_clicked_cb), dialog);
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ gtk_widget_show (widget);
+
+ /* "Current Folder Only" button */
+ widget = gtk_button_new_with_mnemonic (
+ _("Current _Folder Only"));
+ g_object_set_data (
+ G_OBJECT (widget), "response",
+ GINT_TO_POINTER (GTK_RESPONSE_NO));
+ g_signal_connect (
+ widget, "clicked",
+ G_CALLBACK (button_clicked_cb), dialog);
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ gtk_widget_show (widget);
+
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ gtk_widget_destroy (dialog);
+
+ return response;
+}
+
void
org_gnome_mark_all_read (EPlugin *ep, EMPopupTargetFolder *t)
{
@@ -84,19 +235,15 @@ mar_got_folder (char *uri, CamelFolder *folder, void *data)
return;
}
- if (info && (info->child || info->next)) {
- response = e_error_run (NULL, "mail:ask-mark-read", NULL);
- } else {
- mark_all_as_read (folder);
- return;
- }
+ if (info && (info->child || info->next))
+ response = prompt_user ();
+ else
+ response = GTK_RESPONSE_NO;
- if (response == GTK_RESPONSE_NO) {
+ if (response == GTK_RESPONSE_NO)
mark_all_as_read (folder);
- } else if (response == GTK_RESPONSE_YES){
+ else if (response == GTK_RESPONSE_YES)
mar_all_sub_folders (store, info, &ex);
- }
-
}
static void