prevent summary view from updating when the associated folder doesn't have new messag...
[claws.git] / src / inc.c
index 8fac19b42312c38c263122a8a76785fbaf8959b3..8136646fad2671413a602358a4338b2fc05cf767 100644 (file)
--- a/src/inc.c
+++ b/src/inc.c
@@ -56,6 +56,7 @@
 #include "gtkutils.h"
 #include "statusbar.h"
 #include "manage_window.h"
+#include "stock_pixmap.h"
 #include "progressdialog.h"
 #include "inputdialog.h"
 #include "alertpanel.h"
 #include "folder.h"
 #include "filtering.h"
 
-#include "pixmaps/continue.xpm"
-#include "pixmaps/complete.xpm"
-#include "pixmaps/error.xpm"
-
 static guint inc_lock_count = 0;
 
 static GdkPixmap *currentxpm;
@@ -121,6 +118,10 @@ static void inc_all_spool(void);
 static void inc_autocheck_timer_set_interval   (guint           interval);
 static gint inc_autocheck_func                 (gpointer        data);
 
+#define FOLDER_SUMMARY_MISMATCH(f, s) \
+       (f) && (s) ? ((s)->newmsgs != (f)->new) || ((f)->unread != (s)->unread) || ((f)->total != (s)->messages) \
+       : FALSE
+       
 /**
  * inc_finished:
  * @mainwin: Main window.
@@ -133,7 +134,7 @@ static gint inc_autocheck_func                      (gpointer        data);
 static void inc_finished(MainWindow *mainwin, gboolean new_messages)
 {
        FolderItem *item;
-
+       
        if (prefs_common.scan_all_after_inc)
                folderview_update_all_node();
 
@@ -143,12 +144,16 @@ static void inc_finished(MainWindow *mainwin, gboolean new_messages)
                item = cur_account && cur_account->inbox
                        ? folder_find_item_from_path(cur_account->inbox)
                        : folder_get_default_inbox();
-               folderview_unselect(mainwin->folderview);
-               folderview_select(mainwin->folderview, item);
+               if (FOLDER_SUMMARY_MISMATCH(item, mainwin->summaryview)) {      
+                       folderview_unselect(mainwin->folderview);
+                       folderview_select(mainwin->folderview, item);
+               }       
        } else {
                item = mainwin->summaryview->folder_item;
-               folderview_unselect(mainwin->folderview);
-               folderview_select(mainwin->folderview, item);
+               if (FOLDER_SUMMARY_MISMATCH(item, mainwin->summaryview)) {
+                       folderview_unselect(mainwin->folderview);
+                       folderview_select(mainwin->folderview, item);
+               }       
        }
 }
 
@@ -287,10 +292,12 @@ static IncProgressDialog *inc_progress_dialog_create(void)
 
        progress_dialog_set_value(progress, 0.0);
 
-       PIXMAP_CREATE(progress->clist, okxpm, okxpmmask, complete_xpm);
-       PIXMAP_CREATE(progress->clist,
-                     currentxpm, currentxpmmask, continue_xpm);
-       PIXMAP_CREATE(progress->clist, errorxpm, errorxpmmask, error_xpm);
+       stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_COMPLETE,
+                        &okxpm, &okxpmmask);
+       stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_CONTINUE,
+                        &currentxpm, &currentxpmmask);
+       stock_pixmap_gdk(progress->clist, STOCK_PIXMAP_ERROR,
+                        &errorxpm, &errorxpmmask);
 
        if (prefs_common.recv_dialog_mode == RECV_DIALOG_ALWAYS ||
            (prefs_common.recv_dialog_mode == RECV_DIALOG_ACTIVE &&
@@ -415,16 +422,11 @@ static gint inc_start(IncProgressDialog *inc_dialog)
                                g_strdup(pop3_state->ac_prefs->tmp_pass);
                else {
                        gchar *pass;
-                       gchar *message;
 
-                       message = g_strdup_printf
-                               (_("Input password for %s on %s:"),
-                                pop3_state->user,
-                                pop3_state->ac_prefs->recv_server);
+                       pass = input_dialog_query_password
+                               (pop3_state->ac_prefs->recv_server,
+                                pop3_state->user);
 
-                       pass = input_dialog_with_invisible(_("Input password"),
-                                                          message, NULL);
-                       g_free(message);
                        if (inc_dialog->show_dialog)
                                manage_window_focus_in
                                        (inc_dialog->mainwin->window,
@@ -883,9 +885,10 @@ gint inc_drop_message(const gchar *file, Pop3State *state)
        gint val;
        gint msgnum;
 
-       /* get default inbox (perhaps per account) */
+       /* CLAWS: get default inbox (perhaps per account) */
        if (state->ac_prefs->inbox) {
-               inbox = folder_find_item_from_path(state->ac_prefs->inbox);
+               /* CLAWS: get destination folder / mailbox */
+               inbox = folder_find_item_from_identifier(state->ac_prefs->inbox);
                if (!inbox)
                        inbox = folder_get_default_inbox();
        } else
@@ -895,8 +898,8 @@ gint inc_drop_message(const gchar *file, Pop3State *state)
                return -1;
        }
 
+       /* CLAWS: claws uses a global .processing folder for the filtering. */
        if (global_processing == NULL) {
-               /* old filtering */
                if (state->ac_prefs->filter_on_recv) {
                        dropfolder =
                                filter_get_dest_folder(prefs_common.fltlist, file);
@@ -908,7 +911,6 @@ gint inc_drop_message(const gchar *file, Pop3State *state)
                } else
                        dropfolder = inbox;
        } else {
-               /* CLAWS: new filtering */
                dropfolder = folder_get_default_processing();
        }