Fix incorporation dialog focus with master passphrase dialog.
[claws.git] / src / inc.c
index c9ce08443f61d5d35ef559ad159429135a5e2622..6344d22bbf71992eda57d7b0c6040c7b806def9a 100644 (file)
--- a/src/inc.c
+++ b/src/inc.c
@@ -59,6 +59,7 @@
 #include "log.h"
 #include "hooks.h"
 #include "logwindow.h"
+#include "passwordstore.h"
 
 extern SessionStats session_stats;
 
@@ -288,6 +289,8 @@ gint inc_account_mail(MainWindow *mainwin, PrefsAccount *account)
 
        if (inc_lock_count) return 0;
 
+       if (account->receive_in_progress) return 0;
+
        if (prefs_common.work_offline && 
            !inc_offline_should_override(TRUE,
                _("Claws Mail needs network access in order "
@@ -367,9 +370,11 @@ void inc_all_account_mail(MainWindow *mainwin, gboolean autocheck,
                PrefsAccount *account = list->data;
 
                if (account->recv_at_getall) {
-                       session = inc_session_new(account);
-                       if (session)
-                               queue_list = g_list_append(queue_list, session);
+                       if (!(account->receive_in_progress)) {
+                               session = inc_session_new(account);
+                               if (session)
+                                       queue_list = g_list_append(queue_list, session);
+                       }
                }
        }
 
@@ -531,6 +536,18 @@ static void inc_session_destroy(IncSession *session)
        g_free(session);
 }
 
+static gint pop3_get_port(Pop3Session *pop3_session)
+{
+#ifdef USE_GNUTLS
+       return pop3_session->ac_prefs->set_popport ?
+               pop3_session->ac_prefs->popport :
+               pop3_session->ac_prefs->ssl_pop == SSL_TUNNEL ? 995 : 110;
+#else
+       return pop3_session->ac_prefs->set_popport ?
+               pop3_session->ac_prefs->popport : 110;
+#endif
+}
+
 static gint inc_start(IncProgressDialog *inc_dialog)
 {
        IncSession *session;
@@ -552,37 +569,36 @@ static gint inc_start(IncProgressDialog *inc_dialog)
                session = qlist->data;
                pop3_session = POP3_SESSION(session->session); 
                pop3_session->user = g_strdup(pop3_session->ac_prefs->userid);
+
+               if (inc_dialog->show_dialog)
+                       manage_window_focus_in
+                               (inc_dialog->dialog->window,
+                                NULL, NULL);
+
                if (password_get(pop3_session->user,
                                        pop3_session->ac_prefs->recv_server,
-                                       "pop3", SESSION(session)->port,
+                                       "pop3", pop3_get_port(pop3_session),
                                        &(pop3_session->pass))) {
                        /* NOP */;
-               } else if (pop3_session->ac_prefs->passwd)
-                       pop3_session->pass =
-                               g_strdup(pop3_session->ac_prefs->passwd);
-               else {
+               } else if ((pop3_session->pass = passwd_store_get_account(
+                                               pop3_session->ac_prefs->account_id, PWS_ACCOUNT_RECV)) == NULL) {
                        gchar *pass;
 
-                       if (inc_dialog->show_dialog)
-                               manage_window_focus_in
-                                       (inc_dialog->dialog->window,
-                                        NULL, NULL);
-
                        pass = input_dialog_query_password_keep
                                (pop3_session->ac_prefs->recv_server,
                                 pop3_session->user,
                                 &(pop3_session->ac_prefs->session_passwd));
 
-                       if (inc_dialog->show_dialog)
-                               manage_window_focus_out
-                                       (inc_dialog->dialog->window,
-                                        NULL, NULL);
-
                        if (pass) {
                                pop3_session->pass = pass;
                        }
                }
 
+               if (inc_dialog->show_dialog)
+                       manage_window_focus_out
+                               (inc_dialog->dialog->window,
+                                NULL, NULL);
+
                qlist = next;
        }
 
@@ -682,7 +698,7 @@ static gint inc_start(IncProgressDialog *inc_dialog)
                        inbox = folder_get_default_inbox();
 
                /* get list of messages in processing */
-               processing = folder_get_default_processing();
+               processing = folder_get_default_processing(pop3_session->ac_prefs->account_id);
                folder_item_scan(processing);
                msglist = folder_item_get_msg_list(processing);
 
@@ -699,8 +715,7 @@ static gint inc_start(IncProgressDialog *inc_dialog)
 
                for(msglist_element = msglist; msglist_element != NULL; 
                    msglist_element = msglist_element->next) {
-                       MsgInfo *msginfo = (MsgInfo *)msglist_element->data;
-                       procmsg_msginfo_free(msginfo);
+                       procmsg_msginfo_free((MsgInfo**)&(msglist_element->data));
                }
                folder_item_update_thaw();
                
@@ -789,10 +804,9 @@ static IncState inc_pop3_session_do(IncSession *session)
 
        server = pop3_session->ac_prefs->recv_server;
        account_name = pop3_session->ac_prefs->account_name;
+       port = pop3_get_port(pop3_session);
+
 #ifdef USE_GNUTLS
-       port = pop3_session->ac_prefs->set_popport ?
-               pop3_session->ac_prefs->popport :
-               pop3_session->ac_prefs->ssl_pop == SSL_TUNNEL ? 995 : 110;
        SESSION(pop3_session)->ssl_type = pop3_session->ac_prefs->ssl_pop;
        if (pop3_session->ac_prefs->ssl_pop != SSL_NONE)
                SESSION(pop3_session)->nonblocking =
@@ -811,8 +825,6 @@ static IncState inc_pop3_session_do(IncSession *session)
                          G_ALERTDEFAULT) != G_ALERTALTERNATE)
                        return INC_CANCEL;
        }
-       port = pop3_session->ac_prefs->set_popport ?
-               pop3_session->ac_prefs->popport : 110;
 #endif
 
        buf = g_strdup_printf(_("Account '%s': Connecting to POP3 server: %s:%d..."),
@@ -1118,7 +1130,7 @@ static gint inc_drop_message(Pop3Session *session, const gchar *file)
        }
 
        /* CLAWS: claws uses a global .processing folder for the filtering. */
-       dropfolder = folder_get_default_processing();
+       dropfolder = folder_get_default_processing(session->ac_prefs->account_id);
 
        /* add msg file to drop folder */
        if ((msgnum = folder_item_add_msg(
@@ -1444,14 +1456,12 @@ static void inc_autocheck_timer_set_interval(guint interval)
           the common preferences */
        if (prefs_common.autochk_newmail && autocheck_data
            && prefs_common.work_offline == FALSE) {
-#if GLIB_CHECK_VERSION(2,14,0)
                if (interval % 1000 == 0)
                        autocheck_timer =
                                g_timeout_add_seconds(interval/1000, inc_autocheck_func, autocheck_data);
                else
-#endif
-               autocheck_timer = g_timeout_add
-                       (interval, inc_autocheck_func, autocheck_data);
+                       autocheck_timer = g_timeout_add
+                               (interval, inc_autocheck_func, autocheck_data);
                debug_print("added timer = %d\n", autocheck_timer);
        }
 }