2008-09-22 [colin] 3.5.0cvs122
[claws.git] / src / account.c
index 15a81e787eebac3e3f118661829445269ea07f7c..8b56953b7b8dfb00b096e3cabac1edda47e44950 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);
 
@@ -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();
 
@@ -915,12 +918,11 @@ static void account_clone(GtkWidget *widget, gpointer data)
        ACP_FASSIGN(ssl_smtp);
        ACP_FASSIGN(use_nonblocking_ssl);
        
-       ac_clon->tmp_pass = NULL;
-
        /* receive */
        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);
@@ -941,8 +943,6 @@ static void account_clone(GtkWidget *widget, gpointer data)
        ACP_FDUP(smtp_userid);
        ACP_FDUP(smtp_passwd);
 
-       ac_clon->tmp_smtp_pass = NULL;
-
        ACP_FASSIGN(pop_before_smtp);
        ACP_FASSIGN(pop_before_smtp_timeout);
        ACP_FASSIGN(last_pop_login_time);
@@ -992,6 +992,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);
        
@@ -1232,6 +1233,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);
@@ -1497,7 +1516,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, 
@@ -1510,8 +1529,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);
@@ -1538,6 +1557,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);           
 }
 
@@ -1763,3 +1784,55 @@ static void account_row_changed_while_drag_drop(GtkTreeModel *model,
 {      
        account_list_set();     
 }
+
+gchar *account_get_signature_str(PrefsAccount *account)
+{
+       gchar *sig_body = NULL;
+       gchar *sig_str = NULL;
+       gchar *utf8_sig_str = NULL;
+
+       g_return_val_if_fail(account != NULL, NULL);
+
+       if (!account->sig_path)
+               return NULL;
+
+       if (account->sig_type == SIG_FILE) {
+               if (!is_file_or_fifo_exist(account->sig_path)) {
+                       g_warning("can't open signature file: %s\n",
+                                 account->sig_path);
+                       return NULL;
+               }
+       }
+
+       if (account->sig_type == SIG_COMMAND)
+               sig_body = get_command_output(account->sig_path);
+       else {
+               gchar *tmp;
+
+               tmp = file_read_to_str(account->sig_path);
+               if (!tmp)
+                       return NULL;
+               sig_body = normalize_newlines(tmp);
+               g_free(tmp);
+       }
+
+       if (account->sig_sep) {
+               sig_str = g_strconcat("\n", account->sig_sep, "\n", sig_body,
+                                     NULL);
+               g_free(sig_body);
+       } else
+               sig_str = g_strconcat("\n", sig_body, NULL);
+
+       if (sig_str) {
+               if (g_utf8_validate(sig_str, -1, NULL) == TRUE)
+                       utf8_sig_str = sig_str;
+               else {
+                       utf8_sig_str = conv_codeset_strdup
+                               (sig_str, conv_get_locale_charset_str_no_utf8(),
+                                CS_INTERNAL);
+                       g_free(sig_str);
+               }
+       }
+
+       return utf8_sig_str;
+}