Added option to warn about queued messages on exit.
authorSergey Vlasov <vsu@users.sourceforge.net>
Sat, 21 Apr 2001 14:04:25 +0000 (14:04 +0000)
committerSergey Vlasov <vsu@users.sourceforge.net>
Sat, 21 Apr 2001 14:04:25 +0000 (14:04 +0000)
ChangeLog.claws
src/compose.c
src/folderview.c
src/mainwindow.c
src/prefs_common.c
src/prefs_common.h

index 8a3c755..802c6c0 100644 (file)
@@ -1,5 +1,16 @@
 2001-04-21
 
+       * added option to warn about queued messages on exit [sergey]:
+
+         * src/compose.c: compose_queue(): call folder_item_scan()
+           and folderview_update_item() after queueing.
+         * src/folderview.c: folderview_update_node(): draw the queue
+           folder in bold font if there are queued messages.
+         * src/mainwindow.c: queued_messages(): new function.
+           app_exit_cb(): display warning if there are queued messages
+           if warn_queued_on_exit is set.
+         * prefs_common.[ch]: add warn_queued_on_exit option.
+
        * enhanced GnuPG key selection support [sergey]:
 
          * src/select-keys.c: updated to newer version from Win32
index 51137ef..a05059d 100644 (file)
@@ -1780,6 +1780,9 @@ static gint compose_queue(Compose *compose, const gchar *file)
        }
        g_free(queue_path);
 
+       folder_item_scan(queue);
+       folderview_update_item(queue, TRUE);
+
        return 0;
 }
 
index b5ca4eb..1d48475 100644 (file)
@@ -672,14 +672,24 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
        style = gtk_style_copy(prev_style);
 
        if (style) {
-               /* if unread messages exist, print with bold font */
-               if (item->unread > 0 && boldfont)
+               gboolean use_bold, use_color;
+
+               if (item->stype == F_QUEUE) {
+                       /* highlight queue folder if there are any messages */
+                       use_bold = use_color = (item->total > 0);
+               } else {
+                       /* if unread messages exist, print with bold font */
+                       use_bold = (item->unread > 0);
+                       /* if new messages exist, print with colored letter */
+                       use_color = (item->new > 0);
+               }
+
+               if (use_bold && boldfont)
                        style->font = boldfont;
                else
                        style->font = ctree_style->font;
 
-               /* if new messages exist, print with colored letter */
-               if (item->new > 0) {
+               if (use_color) {
                        style->fg[GTK_STATE_NORMAL]   = folderview->color_new;
                        style->fg[GTK_STATE_SELECTED] = folderview->color_new;
                } else {
index 8835e6f..d9508fb 100644 (file)
@@ -1646,6 +1646,13 @@ static void print_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
        summary_print(mainwin->summaryview);
 }
 
+static gint queued_messages(void)
+{
+       FolderItem *queue = folder_get_default_queue();
+       folder_item_scan(queue);
+       return queue->total;
+}
+
 static void app_exit_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
 {
        if (prefs_common.confirm_on_exit) {
@@ -1654,6 +1661,13 @@ static void app_exit_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
                        return;
        }
 
+       if (prefs_common.warn_queued_on_exit && queued_messages() > 0) {
+               if (alertpanel(_("Queued messages"), 
+                              _("Some unsent messages are queued. Exit now?"),
+                              _("OK"), _("Cancel"), NULL) != G_ALERTDEFAULT)
+                       return;
+       }
+
        manage_window_focus_in(mainwin->window, NULL, NULL);
        app_will_exit(widget, mainwin);
 }
index ee7630e..4b058c7 100644 (file)
@@ -140,6 +140,7 @@ static struct Interface {
        GtkWidget *checkbtn_confonexit;
        GtkWidget *checkbtn_cleanonexit;
        GtkWidget *checkbtn_askonclean;
+       GtkWidget *checkbtn_warnqueued;
        GtkWidget *checkbtn_addaddrbyclick;
 } interface;
 
@@ -468,6 +469,9 @@ static PrefParam param[] = {
        {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
         &interface.checkbtn_askonclean,
         prefs_set_data_from_toggle, prefs_set_toggle},
+       {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
+        P_BOOL, &interface.checkbtn_warnqueued,
+        prefs_set_data_from_toggle, prefs_set_toggle},
 
        /* Other */
        {"uri_open_command", "netscape -remote 'openURL(%s,raise)'",
@@ -1431,6 +1435,7 @@ static void prefs_interface_create(void)
        GtkWidget *checkbtn_confonexit;
        GtkWidget *checkbtn_cleanonexit;
        GtkWidget *checkbtn_askonclean;
+       GtkWidget *checkbtn_warnqueued;
 
        vbox1 = gtk_vbox_new (FALSE, VSPACING);
        gtk_widget_show (vbox1);
@@ -1497,6 +1502,9 @@ static void prefs_interface_create(void)
                           _("Ask before emptying"));
        SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean);
 
+       PACK_CHECK_BUTTON (vbox_exit, checkbtn_warnqueued,
+                          _("Warn if there are queued messages on exit"));
+
        interface.checkbtn_emacs          = checkbtn_emacs;
        interface.checkbtn_openunread     = checkbtn_openunread;
        interface.checkbtn_openinbox      = checkbtn_openinbox;
@@ -1505,6 +1513,7 @@ static void prefs_interface_create(void)
        interface.checkbtn_confonexit     = checkbtn_confonexit;
        interface.checkbtn_cleanonexit    = checkbtn_cleanonexit;
        interface.checkbtn_askonclean     = checkbtn_askonclean;
+       interface.checkbtn_warnqueued     = checkbtn_warnqueued;
 }
 
 static void prefs_other_create(void)
index 2cb7e3b..315c4ee 100644 (file)
@@ -160,6 +160,7 @@ struct _PrefsCommon
        gboolean confirm_on_exit;
        gboolean clean_on_exit;
        gboolean ask_on_clean;
+       gboolean warn_queued_on_exit;
 
        /* Other */
        gchar *uri_cmd;