GtkWidget *pass_label;
GtkWidget *uid_entry;
GtkWidget *pass_entry;
+ GtkWidget *showpwd_checkbtn;
GtkWidget *auto_configure_btn;
GtkWidget *auto_configure_cancel_btn;
GtkWidget *auto_configure_lbl;
};
static char *protocol_names[] = {
- N_("POP3"),
- N_("IMAP4"),
+ N_("POP"),
+ N_("IMAP"),
N_("News (NNTP)"),
N_("Local mbox file"),
N_("None (SMTP only)")
gpointer user_data);
static void prefs_account_mailcmd_toggled(GtkToggleButton *button,
gpointer user_data);
+static void prefs_account_showpwd_checkbtn_toggled(GtkToggleButton *button,
+ gpointer user_data);
+static void prefs_account_entry_changed_newline_check_cb(GtkWidget *entry,
+ gpointer user_data);
static void prefs_account_filter_on_recv_toggled(GtkToggleButton *button,
gpointer user_data);
{"password", NULL, &tmp_ac_prefs.passwd, P_PASSWORD,
NULL, NULL, NULL},
+ {"config_version", "-1", &tmp_ac_prefs.config_version, P_INT,
+ NULL, NULL, NULL},
+
{NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
};
COMBOBOX_SENS, TRUE,
COMBOBOX_PRIVACY_PLUGIN_ID, id,
-1);
+ g_free(id);
}
+ g_slist_free(system_ids);
+
}
#define TABLE_YPAD 2
GtkWidget *auto_configure_btn;
GtkWidget *auto_configure_cancel_btn;
GtkWidget *auto_configure_lbl;
+ GtkWidget *showpwd_checkbtn;
GtkListStore *menu;
GtkTreeIter iter;
gchar *buf;
no_imap_warn_icon = gtk_image_new_from_stock
(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
- no_imap_warn_label = gtk_label_new(g_strconcat("<span weight=\"bold\">",
+ buf = g_strconcat("<span weight=\"bold\">",
_("Warning: this version of Claws Mail\n"
- "has been built without IMAP and News support."), "</span>", NULL));
+ "has been built without IMAP and News support."), "</span>", NULL);
+ no_imap_warn_label = gtk_label_new(buf);
+ g_free(buf);
gtk_label_set_use_markup(GTK_LABEL(no_imap_warn_label), TRUE);
gtk_box_pack_start(GTK_BOX (optmenubox), no_imap_warn_icon, FALSE, FALSE, 0);
protocol_optmenu->no_imap_warn_icon = no_imap_warn_icon;
protocol_optmenu->no_imap_warn_label = no_imap_warn_label;
- serv_table = gtk_table_new (6, 4, FALSE);
+ serv_table = gtk_table_new (10, 4, FALSE);
gtk_widget_show (serv_table);
gtk_box_pack_start (GTK_BOX (vbox2), serv_table, FALSE, FALSE, 0);
gtk_table_set_row_spacings (GTK_TABLE (serv_table), VSPACING_NARROW);
uid_entry = gtk_entry_new ();
gtk_widget_show (uid_entry);
gtk_widget_set_size_request (uid_entry, DEFAULT_ENTRY_WIDTH, -1);
+ g_signal_connect(G_OBJECT(uid_entry), "changed",
+ G_CALLBACK(prefs_account_entry_changed_newline_check_cb),
+ GINT_TO_POINTER(ac_prefs->protocol));
+
pass_entry = gtk_entry_new ();
gtk_widget_show (pass_entry);
gtk_widget_set_size_request (pass_entry, DEFAULT_ENTRY_WIDTH, -1);
+ g_signal_connect(G_OBJECT(pass_entry), "changed",
+ G_CALLBACK(prefs_account_entry_changed_newline_check_cb),
+ GINT_TO_POINTER(ac_prefs->protocol));
+
#ifndef GENERIC_UMPC
gtk_table_attach (GTK_TABLE (serv_table), uid_entry, 1, 2, 7, 8,
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
gtk_table_attach (GTK_TABLE (serv_table), pass_label, 0, 1, 8, 9,
GTK_FILL, 0, 0, 0);
#endif
+
+ showpwd_checkbtn = gtk_check_button_new_with_label (_("Show password"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showpwd_checkbtn), FALSE);
+ gtk_widget_show(showpwd_checkbtn);
+ gtk_table_attach (GTK_TABLE (serv_table), showpwd_checkbtn, 3, 4, 9, 10,
+ GTK_FILL, 0, 0, 0);
+ g_signal_connect(G_OBJECT(showpwd_checkbtn), "toggled",
+ G_CALLBACK(prefs_account_showpwd_checkbtn_toggled), pass_entry);
+
SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, uid_label);
SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, pass_label);
SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, uid_entry);
SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, pass_entry);
+ SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, showpwd_checkbtn);
SET_TOGGLE_SENSITIVITY (nntpauth_checkbtn, nntpauth_onconnect_checkbtn);
page->acname_entry = acname_entry;
page->pass_label = pass_label;
page->uid_entry = uid_entry;
page->pass_entry = pass_entry;
+ page->showpwd_checkbtn = showpwd_checkbtn;
page->auto_configure_btn = auto_configure_btn;
page->auto_configure_cancel_btn = auto_configure_cancel_btn;
page->auto_configure_lbl = auto_configure_lbl;
G_CALLBACK (prefs_account_select_folder_cb),
local_inbox_entry);
- vbox2 = gtkut_get_options_frame(vbox1, &frame1, _("POP3"));
+ vbox2 = gtkut_get_options_frame(vbox1, &frame1, _("POP"));
PACK_CHECK_BUTTON (vbox2, use_apop_checkbtn,
_("Use secure authentication (APOP)"));
gtk_spin_button_set_numeric
(GTK_SPIN_BUTTON (maxarticle_spinbtn), TRUE);
- vbox2 = gtkut_get_options_frame(vbox1, &imap_frame, _("IMAP4"));
+ vbox2 = gtkut_get_options_frame(vbox1, &imap_frame, _("IMAP"));
hbox1 = gtk_hbox_new (FALSE, 8);
gtk_widget_show (hbox1);
GtkWidget *checkbtn_msgid_with_addr;
GtkWidget *vbox3;
GtkWidget *smtp_auth_checkbtn;
+ GtkWidget *showpwd_checkbtn;
GtkWidget *optmenu;
GtkListStore *menu;
GtkTreeIter iter;
gtk_widget_show (smtp_uid_entry);
gtk_widget_set_size_request (smtp_uid_entry, DEFAULT_ENTRY_WIDTH, -1);
gtk_box_pack_start (GTK_BOX (hbox), smtp_uid_entry, TRUE, TRUE, 0);
+ g_signal_connect(G_OBJECT(smtp_uid_entry), "changed",
+ G_CALLBACK(prefs_account_entry_changed_newline_check_cb),
+ GINT_TO_POINTER(ac_prefs->protocol));
#ifdef GENERIC_UMPC
PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
gtk_widget_show (smtp_pass_entry);
gtk_widget_set_size_request (smtp_pass_entry, DEFAULT_ENTRY_WIDTH, -1);
gtk_box_pack_start (GTK_BOX (hbox), smtp_pass_entry, TRUE, TRUE, 0);
-
gtk_entry_set_visibility (GTK_ENTRY (smtp_pass_entry), FALSE);
+ g_signal_connect(G_OBJECT(smtp_pass_entry), "changed",
+ G_CALLBACK(prefs_account_entry_changed_newline_check_cb),
+ GINT_TO_POINTER(ac_prefs->protocol));
+
+ showpwd_checkbtn = gtk_check_button_new_with_label (_("Show password"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showpwd_checkbtn), FALSE);
+ gtk_widget_show(showpwd_checkbtn);
+ gtk_box_pack_start(GTK_BOX (hbox), showpwd_checkbtn, FALSE, FALSE, 0);
+ g_signal_connect(G_OBJECT(showpwd_checkbtn), "toggled",
+ G_CALLBACK(prefs_account_showpwd_checkbtn_toggled), smtp_pass_entry);
+
PACK_VSPACER(vbox4, vbox_spc, VSPACING_NARROW_2);
hbox = gtk_hbox_new (FALSE, 8);
SET_TOGGLE_SENSITIVITY (smtp_auth_checkbtn, vbox4);
PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_checkbtn,
- _("Authenticate with POP3 before sending"));
+ _("Authenticate with POP before sending"));
g_signal_connect (G_OBJECT (pop_bfr_smtp_checkbtn), "clicked",
G_CALLBACK (pop_bfr_smtp_tm_set_sens),
gtk_table_set_col_spacings (GTK_TABLE (table), 8);
autocc_checkbtn = gtk_check_button_new_with_label (
- prefs_common_translated_header_name("Cc"));
+ prefs_common_translated_header_name("Cc:"));
gtk_widget_show (autocc_checkbtn);
gtk_table_attach (GTK_TABLE (table), autocc_checkbtn, 0, 1, 0, 1,
GTK_FILL, 0, 0, 0);
SET_TOGGLE_SENSITIVITY (autocc_checkbtn, autocc_entry);
autobcc_checkbtn = gtk_check_button_new_with_label (
- prefs_common_translated_header_name("Bcc"));
+ prefs_common_translated_header_name("Bcc:"));
gtk_widget_show (autobcc_checkbtn);
gtk_table_attach (GTK_TABLE (table), autobcc_checkbtn, 0, 1, 1, 2,
GTK_FILL, 0, 0, 0);
SET_TOGGLE_SENSITIVITY (autobcc_checkbtn, autobcc_entry);
autoreplyto_checkbtn = gtk_check_button_new_with_label (
- prefs_common_translated_header_name("Reply-To"));
+ prefs_common_translated_header_name("Reply-To:"));
gtk_widget_show (autoreplyto_checkbtn);
gtk_table_attach (GTK_TABLE (table), autoreplyto_checkbtn, 0, 1, 2, 3,
GTK_FILL, 0, 0, 0);
GtkWidget *cert_table;
GtkWidget *entry_in_cert_pass;
GtkWidget *entry_out_cert_pass;
+ GtkWidget *showpwd_checkbtn;
GtkWidget *vbox7;
GtkWidget *ssl_certs_auto_accept_checkbtn;
gtk_widget_show (vbox1);
gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
- vbox2 = gtkut_get_options_frame(vbox1, &pop_frame, _("POP3"));
+ vbox2 = gtkut_get_options_frame(vbox1, &pop_frame, _("POP"));
CREATE_RADIO_BUTTONS(vbox2,
pop_nossl_radiobtn,
- _("Don't use SSL"),
+ _("Don't use SSL/TLS"),
SSL_NONE,
pop_ssltunnel_radiobtn,
- _("Use SSL for POP3 connection"),
+ _("Use SSL/TLS"),
SSL_TUNNEL,
pop_starttls_radiobtn,
- _("Use STARTTLS command to start SSL session"),
+ _("Use STARTTLS command to start encrypted session"),
SSL_STARTTLS);
g_signal_connect(G_OBJECT(pop_ssltunnel_radiobtn), "toggled",
G_CALLBACK(pop_ssltunnel_toggled), NULL);
- vbox3 = gtkut_get_options_frame(vbox1, &imap_frame, _("IMAP4"));
+ vbox3 = gtkut_get_options_frame(vbox1, &imap_frame, _("IMAP"));
CREATE_RADIO_BUTTONS(vbox3,
imap_nossl_radiobtn,
- _("Don't use SSL"),
+ _("Don't use SSL/TLS"),
SSL_NONE,
imap_ssltunnel_radiobtn,
- _("Use SSL for IMAP4 connection"),
+ _("Use SSL/TLS"),
SSL_TUNNEL,
imap_starttls_radiobtn,
- _("Use STARTTLS command to start SSL session"),
+ _("Use STARTTLS command to start encrypted session"),
SSL_STARTTLS);
g_signal_connect(G_OBJECT(imap_ssltunnel_radiobtn), "toggled",
G_CALLBACK(imap_ssltunnel_toggled), NULL);
vbox4 = gtkut_get_options_frame(vbox1, &nntp_frame, _("NNTP"));
nntp_nossl_radiobtn =
- gtk_radio_button_new_with_label (NULL, _("Don't use SSL"));
+ gtk_radio_button_new_with_label (NULL, _("Don't use SSL/TLS"));
gtk_widget_show (nntp_nossl_radiobtn);
gtk_box_pack_start (GTK_BOX (vbox4), nntp_nossl_radiobtn,
FALSE, FALSE, 0);
GINT_TO_POINTER (SSL_NONE));
CREATE_RADIO_BUTTON(vbox4, nntp_ssltunnel_radiobtn, nntp_nossl_radiobtn,
- _("Use SSL for NNTP connection"), SSL_TUNNEL);
+ _("Use SSL/TLS"), SSL_TUNNEL);
g_signal_connect(G_OBJECT(nntp_ssltunnel_radiobtn), "toggled",
G_CALLBACK(nntp_ssltunnel_toggled), NULL);
CREATE_RADIO_BUTTONS(vbox5,
smtp_nossl_radiobtn,
- _("Don't use SSL (but, if necessary, use STARTTLS)"),
+ _("Don't use SSL/TLS (but, if necessary, use STARTTLS)"),
SSL_NONE,
smtp_ssltunnel_radiobtn,
- _("Use SSL for SMTP connection"),
+ _("Use SSL/TLS"),
SSL_TUNNEL,
smtp_starttls_radiobtn,
- _("Use STARTTLS command to start SSL session"),
+ _("Use STARTTLS command to start encrypted session"),
SSL_STARTTLS);
g_signal_connect(G_OBJECT(smtp_ssltunnel_radiobtn), "toggled",
G_CALLBACK(smtp_ssltunnel_toggled), NULL);
gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
entry_in_cert_pass = gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(entry_in_cert_pass), FALSE);
+ showpwd_checkbtn = gtk_check_button_new_with_label (_("Show password"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showpwd_checkbtn), FALSE);
+ g_signal_connect(G_OBJECT(showpwd_checkbtn), "toggled",
+ G_CALLBACK(prefs_account_showpwd_checkbtn_toggled), entry_in_cert_pass);
gtk_table_attach(GTK_TABLE(cert_table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
gtk_table_attach(GTK_TABLE(cert_table), entry_in_cert_pass, 1, 2, 1, 2,
GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(cert_table), showpwd_checkbtn, 2, 3, 1, 2,
+ GTK_FILL, 0, 0, 0);
label = gtk_label_new(_("Certificate for sending"));
gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
entry_out_cert_pass = gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(entry_out_cert_pass), FALSE);
+ showpwd_checkbtn = gtk_check_button_new_with_label (_("Show password"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(showpwd_checkbtn), FALSE);
+ g_signal_connect(G_OBJECT(showpwd_checkbtn), "toggled",
+ G_CALLBACK(prefs_account_showpwd_checkbtn_toggled), entry_out_cert_pass);
gtk_table_attach(GTK_TABLE(cert_table), label, 0, 1, 3, 4, GTK_FILL, 0, 0, 0);
gtk_table_attach(GTK_TABLE(cert_table), entry_out_cert_pass, 1, 2, 3, 4,
GTK_FILL, 0, 0, 0);
+ gtk_table_attach(GTK_TABLE(cert_table), showpwd_checkbtn, 2, 3, 3, 4,
+ GTK_FILL, 0, 0, 0);
+
gtk_widget_show_all(cert_table);
g_signal_connect(G_OBJECT(in_ssl_cert_browse_button), "clicked",
gtk_box_pack_start (GTK_BOX (vbox1), vbox7, FALSE, FALSE, 0);
PACK_CHECK_BUTTON(vbox7, ssl_certs_auto_accept_checkbtn,
- _("Automatically accept valid SSL certificates"));
+ _("Automatically accept valid SSL/TLS certificates"));
PACK_CHECK_BUTTON(vbox7, use_nonblocking_ssl_checkbtn,
- _("Use non-blocking SSL"));
+ _("Use non-blocking SSL/TLS"));
hbox = gtk_hbox_new (FALSE, 0);
gtk_widget_show (hbox);
gtk_widget_set_size_request (hbox_spc, 16, -1);
label = gtk_label_new
- (_("Turn this off if you have SSL connection problems"));
+ (_("Turn this off if you have SSL/TLS connection problems"));
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtkut_widget_set_small_font_size (label);
PACK_HBOX (hbox_popport);
PACK_CHECK_BUTTON (hbox_popport, checkbtn_popport,
- _("POP3 port"));
+ _("POP port"));
PACK_PORT_SPINBTN (hbox_popport, spinbtn_popport);
SET_TOGGLE_SENSITIVITY (checkbtn_popport, spinbtn_popport);
gtk_size_group_add_widget(size_group, checkbtn_popport);
PACK_HBOX (hbox_imapport);
PACK_CHECK_BUTTON (hbox_imapport, checkbtn_imapport,
- _("IMAP4 port"));
+ _("IMAP port"));
PACK_PORT_SPINBTN (hbox_imapport, spinbtn_imapport);
SET_TOGGLE_SENSITIVITY (checkbtn_imapport, spinbtn_imapport);
gtk_size_group_add_widget(size_group, checkbtn_imapport);
alertpanel_error(_("Mail address is not entered."));
return -1;
}
+
if (((protocol == A_POP3) ||
(protocol == A_LOCAL && !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(basic_page.mailcmd_checkbtn))) ||
(protocol == A_NONE)) &&
}
if (protocol == A_POP3 &&
*gtk_entry_get_text(GTK_ENTRY(basic_page.recvserv_entry)) == '\0') {
- alertpanel_error(_("POP3 server is not entered."));
+ alertpanel_error(_("POP server is not entered."));
return -1;
}
if (protocol == A_POP3 || protocol == A_LOCAL) {
}
if (protocol == A_IMAP4 &&
*gtk_entry_get_text(GTK_ENTRY(basic_page.recvserv_entry)) == '\0') {
- alertpanel_error(_("IMAP4 server is not entered."));
+ alertpanel_error(_("IMAP server is not entered."));
return -1;
}
if (protocol == A_NNTP &&
protocol == A_IMAP4 ? "imap":"news",
tmp_ac_prefs.account_name ? tmp_ac_prefs.account_name : "(null)");
+ if (strchr(gtk_entry_get_text(GTK_ENTRY(basic_page.uid_entry)), '\n') != NULL) {
+ alertpanel_error(_("User ID cannot contain a newline character."));
+ return -1;
+ }
+
+ if (strchr(gtk_entry_get_text(GTK_ENTRY(basic_page.pass_entry)), '\n') != NULL) {
+ alertpanel_error(_("Password cannot contain a newline character."));
+ return -1;
+ }
+
prefs_set_data_from_dialog(basic_param);
/* Passwords are stored outside of PrefParams. */
static gint prefs_receive_apply(void)
{
+ if (strchr(gtk_entry_get_text(GTK_ENTRY(send_page.smtp_uid_entry)), '\n') != NULL) {
+ alertpanel_error(_("SMTP user ID cannot contain a newline character."));
+ return -1;
+ }
+
+ if (strchr(gtk_entry_get_text(GTK_ENTRY(send_page.smtp_pass_entry)), '\n') != NULL) {
+ alertpanel_error(_("SMTP password cannot contain a newline character."));
+ return -1;
+ }
+
prefs_set_data_from_dialog(receive_param);
return 0;
}
static gchar *path[3];
path[0] = _("Account");
- path[1] = _("SSL");
+ path[1] = _("SSL/TLS");
path[2] = NULL;
ssl_page.page.path = path;
return ac_prefs;
}
-void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label)
+PrefsAccount *prefs_account_new_from_config(const gchar *label)
{
const gchar *p = label;
gchar *rcpath;
gint id;
gchar **strv, **cur;
gsize len;
+ PrefsAccount *ac_prefs;
+
+ cm_return_val_if_fail(label != NULL, NULL);
- cm_return_if_fail(ac_prefs != NULL);
- cm_return_if_fail(label != NULL);
+ ac_prefs = g_new0(PrefsAccount, 1);
+ /* Load default values to tmp_ac_prefs first, ... */
memset(&tmp_ac_prefs, 0, sizeof(PrefsAccount));
- tmp_ac_prefs.privacy_prefs = ac_prefs->privacy_prefs;
+ prefs_set_default(basic_param);
+ prefs_set_default(receive_param);
+ prefs_set_default(send_param);
+ prefs_set_default(compose_param);
+ prefs_set_default(templates_param);
+ prefs_set_default(privacy_param);
+ prefs_set_default(ssl_param);
+ prefs_set_default(advanced_param);
+ /* ... overriding them with values from stored config file. */
rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACCOUNT_RC, NULL);
prefs_read_config(basic_param, label, rcpath, NULL);
prefs_read_config(receive_param, label, rcpath, NULL);
g_free(rcpath);
*ac_prefs = tmp_ac_prefs;
+
while (*p && !g_ascii_isdigit(*p)) p++;
id = atoi(p);
if (id < 0) g_warning("wrong account id: %d", id);
ac_prefs->account_id = id;
+ /* Now parse privacy_prefs. */
+ ac_prefs->privacy_prefs = g_hash_table_new(g_str_hash, g_str_equal);
if (privacy_prefs != NULL) {
strv = g_strsplit(privacy_prefs, ",", 0);
for (cur = strv; *cur != NULL; cur++) {
privacy_prefs = NULL;
}
+ /* For older configurations, move stored passwords into the
+ * password store. */
gboolean passwords_migrated = FALSE;
if (ac_prefs->passwd != NULL && strlen(ac_prefs->passwd) > 1) {
passwords_migrated = TRUE;
}
- /* Write out password store to file immediately after their move
- * from accountrc there. */
+ /* Write out password store to file immediately, to prevent
+ * their loss. */
if (passwords_migrated)
passwd_store_write_config();
ac_prefs->receive_in_progress = FALSE;
prefs_custom_header_read_config(ac_prefs);
+
+ return ac_prefs;
}
static void create_privacy_prefs(gpointer key, gpointer _value, gpointer user_data)
FolderItem *item;
gchar *id;
- item = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL, FALSE);
+ item = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL, FALSE, NULL);
if (item && item->path) {
id = folder_item_get_identifier(item);
if (id) {
send_data->set_port = GTK_TOGGLE_BUTTON(advanced_page.smtpport_checkbtn);
send_data->port = GTK_SPIN_BUTTON(advanced_page.smtpport_spinbtn);
send_data->tls_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.smtp_starttls_radiobtn);
- send_data->ssl_checkbtn = NULL;
+ send_data->ssl_checkbtn = GTK_TOGGLE_BUTTON(ssl_page.smtp_ssltunnel_radiobtn);
send_data->default_port = 25;
send_data->default_ssl_port = -1;
send_data->uid_entry = NULL;
gtk_widget_show(basic_page.pass_label);
gtk_widget_show(basic_page.uid_entry);
gtk_widget_show(basic_page.pass_entry);
+ gtk_widget_show(basic_page.showpwd_checkbtn);
gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table),
7, VSPACING_NARROW);
gtk_widget_set_sensitive(basic_page.pass_label, TRUE);
gtk_widget_set_sensitive(basic_page.uid_entry, TRUE);
gtk_widget_set_sensitive(basic_page.pass_entry, TRUE);
+ gtk_widget_set_sensitive(basic_page.showpwd_checkbtn, TRUE);
/* update userid/passwd sensitive state */
gtk_widget_hide(basic_page.pass_label);
gtk_widget_hide(basic_page.uid_entry);
gtk_widget_hide(basic_page.pass_entry);
+ gtk_widget_hide(basic_page.showpwd_checkbtn);
gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table),
7, 0);
gtk_widget_set_sensitive(basic_page.pass_label, TRUE);
gtk_widget_set_sensitive(basic_page.uid_entry, TRUE);
gtk_widget_set_sensitive(basic_page.pass_entry, TRUE);
+ gtk_widget_set_sensitive(basic_page.showpwd_checkbtn, TRUE);
gtk_widget_hide(receive_page.pop3_frame);
gtk_widget_hide(receive_page.imap_frame);
gtk_widget_show(receive_page.local_frame);
gtk_widget_show(basic_page.pass_label);
gtk_widget_show(basic_page.uid_entry);
gtk_widget_show(basic_page.pass_entry);
+ gtk_widget_show(basic_page.showpwd_checkbtn);
gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table),
7, VSPACING_NARROW);
gtk_widget_set_sensitive(basic_page.pass_label, TRUE);
gtk_widget_set_sensitive(basic_page.uid_entry, TRUE);
gtk_widget_set_sensitive(basic_page.pass_entry, TRUE);
+ gtk_widget_set_sensitive(basic_page.showpwd_checkbtn, TRUE);
gtk_widget_hide(receive_page.pop3_frame);
gtk_widget_show(receive_page.imap_frame);
gtk_widget_hide(receive_page.local_frame);
gtk_widget_hide(basic_page.pass_label);
gtk_widget_hide(basic_page.uid_entry);
gtk_widget_hide(basic_page.pass_entry);
+ gtk_widget_hide(basic_page.showpwd_checkbtn);
gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table),
7, VSPACING_NARROW);
gtk_widget_set_sensitive(basic_page.pass_label, FALSE);
gtk_widget_set_sensitive(basic_page.uid_entry, FALSE);
gtk_widget_set_sensitive(basic_page.pass_entry, FALSE);
+ gtk_widget_set_sensitive(basic_page.showpwd_checkbtn, FALSE);
gtk_widget_set_sensitive(receive_page.pop3_frame, FALSE);
gtk_widget_hide(receive_page.pop3_frame);
gtk_widget_hide(receive_page.imap_frame);
gtk_widget_show(basic_page.pass_label);
gtk_widget_show(basic_page.uid_entry);
gtk_widget_show(basic_page.pass_entry);
+ gtk_widget_show(basic_page.showpwd_checkbtn);
gtk_table_set_row_spacing (GTK_TABLE (basic_page.serv_table),
7, VSPACING_NARROW);
gtk_widget_set_sensitive(basic_page.pass_label, TRUE);
gtk_widget_set_sensitive(basic_page.uid_entry, TRUE);
gtk_widget_set_sensitive(basic_page.pass_entry, TRUE);
+ gtk_widget_set_sensitive(basic_page.showpwd_checkbtn, TRUE);
gtk_widget_set_sensitive(receive_page.pop3_frame, TRUE);
gtk_widget_show(receive_page.pop3_frame);
gtk_widget_hide(receive_page.imap_frame);
gtk_widget_set_sensitive(basic_page.pass_label, auth);
gtk_widget_set_sensitive(basic_page.uid_entry, auth);
gtk_widget_set_sensitive(basic_page.pass_entry, auth);
+ gtk_widget_set_sensitive(basic_page.showpwd_checkbtn, auth);
gtk_widget_set_sensitive(basic_page.nntpauth_onconnect_checkbtn, auth);
}
gtk_widget_set_sensitive(basic_page.smtpserv_label, !use_mailcmd);
gtk_widget_set_sensitive(basic_page.uid_entry, !use_mailcmd);
gtk_widget_set_sensitive(basic_page.pass_entry, !use_mailcmd);
+ gtk_widget_set_sensitive(basic_page.showpwd_checkbtn, !use_mailcmd);
+}
+
+static void prefs_account_showpwd_checkbtn_toggled(GtkToggleButton *button,
+ gpointer user_data)
+{
+ gboolean active = gtk_toggle_button_get_active(button);
+ GtkWidget *entry = GTK_WIDGET(user_data);
+
+ gtk_entry_set_visibility(GTK_ENTRY(entry), active);
+}
+
+static void prefs_account_entry_changed_newline_check_cb(GtkWidget *entry,
+ gpointer user_data)
+{
+#if !GTK_CHECK_VERSION(3, 0, 0)
+ static GdkColor red;
+ static gboolean colors_initialised = FALSE;
+#else
+ static GdkColor red = { (guint32)0, (guint16)0xff, (guint16)0x70, (guint16)0x70 };
+#endif
+
+#if !GTK_CHECK_VERSION(3, 0, 0)
+ if (strchr(gtk_entry_get_text(GTK_ENTRY(entry)), '\n') != NULL) {
+ /* Entry contains a newline, light it up. */
+ debug_print("found newline in string, painting entry red\n");
+ if (!colors_initialised) {
+ if (!gdk_color_parse("#ff7070", &red)) {
+ g_warning("color parse failed: red");
+ return;
+ }
+ colors_initialised = gdk_colormap_alloc_color(
+ gdk_colormap_get_system(), &red, FALSE, TRUE);
+ }
+
+ if (colors_initialised) {
+ gtk_widget_modify_base(entry, GTK_STATE_NORMAL, &red);
+ }
+ } else {
+ gtk_widget_modify_base(entry, GTK_STATE_NORMAL, NULL);
+ }
+#endif
}
static void prefs_account_filter_on_recv_toggled(GtkToggleButton *button,
}
#endif
+gchar *prefs_account_generate_msgid(PrefsAccount *account)
+{
+ gchar *addr, *tmbuf, *buf = NULL;
+ GDateTime *now;
+ gchar *user_addr = account->msgid_with_addr ? g_strdup(account->address) : NULL;
+
+ if (account->set_domain && account->domain) {
+ buf = g_strdup(account->domain);
+ } else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
+ buf = g_strdup(
+ strchr(account->address, '@') ?
+ strchr(account->address, '@')+1 :
+ account->address);
+ }
+
+ if (user_addr != NULL) {
+ addr = g_strdup_printf(".%s", user_addr);
+ } else {
+ addr = g_strdup_printf("@%s",
+ buf != NULL && strlen(buf) > 0 ?
+ buf : get_domain_name());
+ }
+
+ if (buf != NULL)
+ g_free(buf);
+ if (user_addr != NULL)
+ g_free(user_addr);
+
+ /* Replace all @ but the last one in addr, with underscores.
+ * RFC 2822 States that msg-id syntax only allows one @.
+ */
+ while (strchr(addr, '@') != NULL && strchr(addr, '@') != strrchr(addr, '@'))
+ *(strchr(addr, '@')) = '_';
+
+ now = g_date_time_new_now_local();
+ tmbuf = g_date_time_format(now, "%Y%m%d%H%M%S");
+ buf = g_strdup_printf("%s.%08x%s",
+ tmbuf, (guint)rand(), addr);
+ g_date_time_unref(now);
+ g_free(tmbuf);
+ g_free(addr);
+
+ debug_print("Generated Message-ID string '%s'\n", buf);
+ return buf;
+}
+
void prefs_account_register_page(PrefsPage *page)
{
prefs_pages = g_slist_append(prefs_pages, page);
{
prefs_pages = g_slist_remove(prefs_pages, page);
}
+
+gchar *prefs_account_cache_dir(PrefsAccount *ac_prefs, gboolean for_server)
+{
+ gchar *dir = NULL;
+#ifdef G_OS_WIN32
+ gchar *sanitized_server;
+#endif
+
+ if (ac_prefs->protocol == A_IMAP4) {
+#ifdef G_OS_WIN32
+ sanitized_server = g_strdup(ac_prefs->recv_server);
+ g_strdelimit(sanitized_server, ":", ',');
+#endif
+ if (for_server) {
+ dir = g_strconcat(get_imap_cache_dir(),
+ G_DIR_SEPARATOR_S,
+#ifdef G_OS_WIN32
+ sanitized_server,
+#else
+ ac_prefs->recv_server,
+#endif
+ NULL);
+ } else {
+ dir = g_strconcat(get_imap_cache_dir(),
+ G_DIR_SEPARATOR_S,
+#ifdef G_OS_WIN32
+ sanitized_server,
+#else
+ ac_prefs->recv_server,
+#endif
+ G_DIR_SEPARATOR_S,
+ ac_prefs->userid,
+ NULL);
+ }
+#ifdef G_OS_WIN32
+ g_free(sanitized_server);
+#endif
+ }
+
+ return dir;
+}