2008-08-28 [wwp] 3.5.0cvs81
[claws.git] / src / account.c
index a519644a57357679e6f4fd6da37640352bcbd71c..4a35a3de3a7aa89b475909e168750ddfa6ed948c 100644 (file)
@@ -113,6 +113,9 @@ static gboolean account_key_pressed (GtkWidget      *widget,
                                         GdkEventKey    *event,
                                         gpointer        data);
 #endif
+static gboolean account_search_func_cb (GtkTreeModel *model, gint column, 
+                                               const gchar *key, GtkTreeIter *iter, 
+                                               gpointer search_data);
 static void account_list_view_add      (PrefsAccount   *ac_prefs);
 static void account_list_view_set      (void);
 
@@ -179,7 +182,7 @@ static void account_row_changed_while_drag_drop     (GtkTreeModel *model,
                                                 gpointer      arg3,
                                                 GtkTreeView  *list_view);
 
-void account_flush_state(void)
+static void account_flush_state(void)
 {
        account_set_menu();
        main_window_reflect_prefs_all();
@@ -298,11 +301,11 @@ PrefsAccount *account_find_from_smtp_server(const gchar *address,
  * account_find_from_address:
  * @address: Email address string.
  *
- * Find a mail (not news) account with the specified email address.
+ * Find a mail (not news if newsgroups_ok is FALSE) account with the specified email address.
  *
  * Return value: The found account, or NULL if not found.
  */
-PrefsAccount *account_find_from_address(const gchar *address)
+PrefsAccount *account_find_from_address(const gchar *address, gboolean newsgroups_ok)
 {
        GList *cur;
        PrefsAccount *ac;
@@ -311,7 +314,7 @@ PrefsAccount *account_find_from_address(const gchar *address)
 
        for (cur = account_list; cur != NULL; cur = cur->next) {
                ac = (PrefsAccount *)cur->data;
-               if (ac->protocol != A_NNTP && ac->address &&
+               if ((ac->protocol != A_NNTP || newsgroups_ok) && ac->address &&
                    g_ascii_strcasecmp(address, ac->address) == 0)
                        return ac;
        }
@@ -371,7 +374,7 @@ GList *account_get_list(void)
        return account_list;
 }
 
-void account_edit_open(void)
+void account_edit_open(gpointer a, gpointer b)
 {
        inc_lock();
 
@@ -921,6 +924,7 @@ static void account_clone(GtkWidget *widget, gpointer data)
        ACP_FASSIGN(use_apop_auth);
        ACP_FASSIGN(rmmail);
        ACP_FASSIGN(msg_leave_time);
+       ACP_FASSIGN(msg_leave_hour);
        ACP_FASSIGN(recv_at_getall);
        ACP_FASSIGN(sd_rmmail_on_download);
        ACP_FASSIGN(enable_size_limit);
@@ -934,6 +938,7 @@ static void account_clone(GtkWidget *widget, gpointer data)
        ACP_FASSIGN(imap_auth_type);
 
        /* send */
+       ACP_FASSIGN(gen_msgid);
        ACP_FASSIGN(add_customhdr);
        ACP_FASSIGN(use_smtp_auth);
        ACP_FASSIGN(smtp_auth_type);
@@ -991,6 +996,7 @@ static void account_clone(GtkWidget *widget, gpointer data)
         ACP_FASSIGN(default_encrypt);
        ACP_FASSIGN(default_encrypt_reply);
         ACP_FASSIGN(default_sign);
+       ACP_FASSIGN(default_sign_reply);
        ACP_FASSIGN(save_encrypted_as_clear_text);
        ACP_FASSIGN(encrypt_to_self);
        
@@ -1008,8 +1014,10 @@ static void account_clone(GtkWidget *widget, gpointer data)
         ACP_FASSIGN(mark_crosspost_read);
         ACP_FASSIGN(crosspost_col);
 
+#ifndef G_OS_WIN32
         ACP_FASSIGN(set_tunnelcmd);
         ACP_FDUP(tunnelcmd);
+#endif
 
         ACP_FDUP(imap_dir);
        ACP_FASSIGN(imap_subsonly);
@@ -1229,6 +1237,24 @@ static gboolean account_key_pressed(GtkWidget *widget, GdkEventKey *event,
        return FALSE;
 }
 #endif
+
+static gboolean account_search_func_cb (GtkTreeModel *model, gint column, const gchar *key, 
+                                               GtkTreeIter *iter, gpointer search_data) 
+{
+       gboolean retval;
+       PrefsAccount *ac;
+
+       gtk_tree_model_get (model, iter, ACCOUNT_DATA, &ac, -1);
+
+       if (!ac->name || !key) return FALSE;
+
+       retval = (strncmp (key, ac->account_name, strlen(key)) != 0);
+
+       debug_print("selecting row\n");
+       account_list_view_select_account(edit_account.list_view, ac->account_id);
+
+       return retval;
+}
 static void account_list_view_add(PrefsAccount *ac_prefs)
 {
        GtkTreeView *list_view = GTK_TREE_VIEW(edit_account.list_view);
@@ -1238,7 +1264,7 @@ static void account_list_view_add(PrefsAccount *ac_prefs)
        gboolean getall;
 
        name = ac_prefs->account_name;
-#if USE_OPENSSL
+#if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
        protocol = ac_prefs->protocol == A_POP3 ?
                  (ac_prefs->ssl_pop == SSL_TUNNEL ?
                   "POP3 (SSL)" :
@@ -1363,7 +1389,7 @@ PrefsAccount *account_get_reply_account(MsgInfo *msginfo, gboolean reply_autosel
                                if (!strchr(field, ',')) {
                                        Xstrdup_a(to, field, return NULL);
                                        extract_address(to);
-                                       account = account_find_from_address(to);
+                                       account = account_find_from_address(to, FALSE);
                                } else {
                                        gchar **split = g_strsplit(field, ",", -1);
                                        int i = -1;
@@ -1373,7 +1399,7 @@ PrefsAccount *account_get_reply_account(MsgInfo *msginfo, gboolean reply_autosel
                                                        break;
                                                Xstrdup_a(to, split[i], return NULL);
                                                extract_address(to);
-                                               account = account_find_from_address(to);
+                                               account = account_find_from_address(to, FALSE);
                                        } while (!account);
                                        g_strfreev(split);
                                }
@@ -1385,7 +1411,7 @@ PrefsAccount *account_get_reply_account(MsgInfo *msginfo, gboolean reply_autosel
                                (msginfo, deliveredto,sizeof deliveredto , "Delivered-To:")) { 
                                gchar *buf = deliveredto + strlen("Delivered-To:");
                                extract_address(buf);
-                               account = account_find_from_address(buf);
+                               account = account_find_from_address(buf, FALSE);
                        }
                }
        }
@@ -1461,7 +1487,7 @@ static GtkWidget *account_list_view_create(void)
 
        list_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)));
        g_object_unref(G_OBJECT(store));
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
        g_object_set(list_view, "allow-checkbox-mode", FALSE, NULL);
 #endif
        gtk_tree_view_set_rules_hint(list_view, prefs_common.use_stripes_everywhere);
@@ -1494,7 +1520,7 @@ static void account_create_list_view_columns(GtkWidget *list_view)
 {
        GtkTreeViewColumn *column;
        GtkCellRenderer *renderer;
-       GtkTooltips *tooltips = gtk_tooltips_new();
+       CLAWS_TIP_DECL();
 
        renderer = gtk_cell_renderer_toggle_new();
        g_object_set(renderer, 
@@ -1507,8 +1533,8 @@ static void account_create_list_view_columns(GtkWidget *list_view)
                 NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);          
        gtk_tree_view_column_set_alignment (column, 0.5);
-       gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), column->button,
-                       _("'Get Mail' retrieves mail from the checked accounts"), NULL);
+       CLAWS_SET_TIP(column->button,
+                       _("'Get Mail' retrieves mail from the checked accounts"));
        g_signal_connect(G_OBJECT(renderer), "toggled",                      
                         G_CALLBACK(account_get_all_toggled),
                         list_view);
@@ -1535,6 +1561,8 @@ static void account_create_list_view_columns(GtkWidget *list_view)
                 "text", ACCOUNT_SERVER,
                 "weight", ACCOUNT_IS_DEFAULT,
                 NULL);
+       gtk_tree_view_set_search_column(GTK_TREE_VIEW(list_view), ACCOUNT_NAME);
+       gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(list_view), account_search_func_cb , NULL, NULL);
        gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), column);           
 }