}
}
-void account_open(PrefsAccount *ac_prefs)
+void account_open(PrefsAccount *ac_prefs, gboolean called_from_acc_list)
{
gboolean prev_default;
gchar *ac_name, *old_prefix, *new_prefix;
prefs_account_open(ac_prefs, &account_dirty);
- account_edit_focus();
+ if (called_from_acc_list)
+ account_edit_focus();
if (account_dirty) {
if (!prev_default && ac_prefs->is_default)
ac_prefs = account_list_view_get_selected_account(edit_account.list_view);
if (ac_prefs) {
- account_open(ac_prefs);
+ account_open(ac_prefs, TRUE);
account_list_view_set();
}
}
ACP_FASSIGN(config_version);
+ ACP_FASSIGN(use_proxy);
+ ACP_FASSIGN(use_default_proxy);
+ ACP_FASSIGN(use_proxy_for_send);
+ ACP_FASSIGN(proxy_info.proxy_type);
+ ACP_FDUP(proxy_info.proxy_host);
+ ACP_FASSIGN(proxy_info.proxy_port);
+ ACP_FASSIGN(proxy_info.use_proxy_auth);
+ ACP_FDUP(proxy_info.proxy_name);
+ ACP_FDUP(proxy_info.proxy_pass);
+
account_list = g_list_append(account_list, ac_clon);
account_list_view_set();
}
ac_prefs->account_name ? ac_prefs->account_name :
_("(Untitled)"));
if (alertpanel_full(_("Delete account"), buf,
- GTK_STOCK_CANCEL, GTK_STOCK_DELETE, NULL, FALSE,
- NULL, ALERT_WARNING, G_ALERTDEFAULT) != G_ALERTALTERNATE)
+ GTK_STOCK_CANCEL, GTK_STOCK_DELETE, NULL, ALERTFOCUS_FIRST, FALSE,
+ NULL, ALERT_WARNING) != G_ALERTALTERNATE)
return;
account_list_dirty = TRUE;
*/
static gint account_list_view_get_selected_account_id(GtkWidget *list_view)
{
- GtkTreeSelection *selector;
- GtkTreeModel *model;
- GtkTreeIter iter;
PrefsAccount *res = NULL;
- selector = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
-
- if (!gtk_tree_selection_get_selected(selector, &model, &iter))
- return -1;
-
- gtk_tree_model_get(model, &iter, ACCOUNT_DATA, &res, -1);
+ res = (PrefsAccount *)gtkut_tree_view_get_selected_pointer(
+ GTK_TREE_VIEW(list_view), ACCOUNT_DATA,
+ NULL, NULL, NULL);
- return res->account_id;
+ return (res != NULL ? res->account_id : -1);
}
/*!
*/
static PrefsAccount *account_list_view_get_selected_account(GtkWidget *list_view)
{
- GtkTreeSelection *selector;
- GtkTreeModel *model;
- GtkTreeIter iter;
- PrefsAccount *res = NULL;
+ PrefsAccount *res =
+ (PrefsAccount *)gtkut_tree_view_get_selected_pointer(
+ GTK_TREE_VIEW(list_view), ACCOUNT_DATA,
+ NULL, NULL, NULL);
- selector = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_view));
-
- if (!gtk_tree_selection_get_selected(selector, &model, &iter))
- return NULL;
-
- gtk_tree_model_get(model, &iter, ACCOUNT_DATA, &res, -1);
-
- return res;
+ return res;
}
/*!
}
return FALSE;
}
+
+static GSList *account_signatures_list = NULL;
+
+/* create a list of unique signatures from accounts list */
+void account_signatures_matchlist_create(void)
+{
+ GList *cur_ac = NULL;
+ PrefsAccount *ac_prefs = NULL;
+
+ if (account_signatures_list)
+ return;
+
+ account_signatures_list = g_slist_prepend(account_signatures_list, g_strdup("-- "));
+ for (cur_ac = account_get_list();
+ cur_ac != NULL;
+ cur_ac = g_list_next(cur_ac)) {
+ ac_prefs = (PrefsAccount *)cur_ac->data;
+
+ if (ac_prefs->sig_sep && *ac_prefs->sig_sep != '\0') {
+ if (!g_slist_find_custom(account_signatures_list, ac_prefs->sig_sep,
+ (GCompareFunc)strcmp2)) {
+ account_signatures_list = g_slist_prepend(account_signatures_list,
+ g_strdup(ac_prefs->sig_sep));
+ }
+ }
+ }
+}
+
+/* delete the list of signatures created by account_signatures_matchlist_create() */
+void account_signatures_matchlist_delete(void)
+{
+ if (account_signatures_list) {
+ slist_free_strings_full(account_signatures_list);
+ account_signatures_list = NULL;
+ }
+}
+
+/* match a string against all signatures in list, using the specified format */
+gboolean account_signatures_matchlist_str_found(const gchar *str, const gchar *format)
+{
+ gchar *tmp = NULL;
+ gboolean found = FALSE;
+ GSList *item;
+
+ for (item = account_signatures_list;
+ item != NULL && !found;
+ item = g_slist_next(item)) {
+ tmp = g_strdup_printf(format, (gchar *)item->data);
+ found = (strcmp(tmp, str) == 0);
+ g_free(tmp);
+ }
+ return found;
+}
+
+/* match M first char of a string against all signatures in list, using the specified format */
+gboolean account_signatures_matchlist_nchar_found(const gchar *str, const gchar *format)
+{
+ gchar *tmp = NULL;
+ gboolean found = FALSE;
+ GSList *item;
+ gint len;
+
+ for (item = account_signatures_list;
+ item != NULL && !found;
+ item = g_slist_next(item)) {
+ tmp = g_strdup_printf(format, (gchar *)item->data);
+ len = strlen(tmp);
+ found = (strncmp(tmp, str, len) == 0);
+ g_free(tmp);
+ }
+ return found;
+}