diff options
Diffstat (limited to 'src/prefs_account_dialog.c')
-rw-r--r-- | src/prefs_account_dialog.c | 123 |
1 files changed, 119 insertions, 4 deletions
diff --git a/src/prefs_account_dialog.c b/src/prefs_account_dialog.c index a9cb5335..89a78439 100644 --- a/src/prefs_account_dialog.c +++ b/src/prefs_account_dialog.c @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2014 Hiroyuki Yamamoto + * Copyright (C) 1999-2017 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -122,6 +122,8 @@ static struct Send { static struct Compose { GtkWidget *sig_radiobtn; + GtkWidget *sig_combo; + GtkWidget *signame_entry; GtkWidget *sig_text; GtkTextBuffer *sig_buffer; GtkWidget *sigpath_entry; @@ -135,6 +137,9 @@ static struct Compose { GtkWidget *autoreplyto_entry; gboolean sig_modified; + gchar *sig_names[10]; + gchar *sig_texts[10]; + gint sig_selected; } compose; #if USE_GPGME @@ -319,8 +324,6 @@ static PrefsUIData ui_data[] = { prefs_account_enum_set_radiobtn}, {"signature_path", &compose.sigpath_entry, prefs_set_data_from_entry, prefs_set_entry}, - {"signature_text", &compose.sig_text, - prefs_set_data_from_text, prefs_set_text}, {"signature_before_quote", &compose.sig_before_quote_chkbtn, prefs_set_data_from_toggle, prefs_set_toggle}, {"set_autocc", &compose.autocc_chkbtn, @@ -463,6 +466,8 @@ static void prefs_account_name_entry_changed_cb (GtkWidget *widget, gpointer data); static void prefs_account_sig_changed_cb (GtkWidget *widget, gpointer data); +static void prefs_account_sig_combo_changed_cb (GtkWidget *widget, + gpointer data); static gint prefs_account_deleted (GtkWidget *widget, GdkEventAny *event, @@ -539,6 +544,9 @@ PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs) (GTK_OPTION_MENU (basic.protocol_optmenu))), TRUE); + + gtk_combo_box_set_active(GTK_COMBO_BOX(compose.sig_combo), 0); + gtk_window_set_title(GTK_WINDOW(dialog.window), _("Preferences for new account")); gtk_widget_hide(dialog.apply_btn); @@ -547,6 +555,24 @@ PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs) (G_OBJECT(compose.sig_buffer), G_CALLBACK(prefs_account_sig_changed_cb), NULL); } else { + gint i; + + for (i = 0; i < 10; i++) { + g_free(compose.sig_names[i]); + compose.sig_names[i] = g_strdup(ac_prefs->sig_names[i]); + } + g_free(compose.sig_texts[0]); + compose.sig_texts[0] = g_strdup(ac_prefs->sig_text); + for (i = 1; i < 10; i++) { + g_free(compose.sig_texts[i]); + compose.sig_texts[i] = g_strdup(ac_prefs->sig_texts[i]); + } + + gtk_combo_box_set_active(GTK_COMBO_BOX(compose.sig_combo), 0); + gtk_entry_set_text(GTK_ENTRY(compose.signame_entry), + compose.sig_names[0] ? compose.sig_names[0] : ""); + prefs_set_escaped_str_to_text(compose.sig_text, compose.sig_texts[0]); + prefs_set_dialog(prefs_account_get_params()); gtk_window_set_title(GTK_WINDOW(dialog.window), _("Account preferences")); @@ -1273,9 +1299,13 @@ static void prefs_account_compose_create(void) GtkWidget *vbox1; GtkWidget *sig_vbox; GtkWidget *sig_radiobtn; + GtkWidget *sig_hbox; + GtkWidget *sig_combo; + GtkWidget *signame_label; + GtkWidget *signame_entry; + GtkWidget *sigtext_label; GtkWidget *sigtext_scrwin; GtkWidget *sig_text; - GtkWidget *sig_hbox; GtkWidget *sigfile_radiobtn; GtkWidget *sigcmd_radiobtn; GtkWidget *sigpath_entry; @@ -1288,6 +1318,7 @@ static void prefs_account_compose_create(void) GtkWidget *autobcc_entry; GtkWidget *autoreplyto_chkbtn; GtkWidget *autoreplyto_entry; + gint i; vbox1 = gtk_vbox_new (FALSE, VSPACING); gtk_widget_show (vbox1); @@ -1308,6 +1339,43 @@ static void prefs_account_compose_create(void) g_object_set_data (G_OBJECT (sig_radiobtn), MENU_VAL_ID, GINT_TO_POINTER (SIG_DIRECT)); + sig_hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (sig_hbox); + gtk_box_pack_start (GTK_BOX (sig_vbox), sig_hbox, FALSE, FALSE, 0); + + sig_combo = gtk_combo_box_new_text(); + gtk_widget_show (sig_combo); + gtk_box_pack_start (GTK_BOX (sig_hbox), sig_combo, FALSE, FALSE, 0); + + for (i = 0; i < 10; i++) { + gchar buf[256]; + g_snprintf(buf, sizeof(buf), _("Signature %d"), i + 1); + gtk_combo_box_append_text(GTK_COMBO_BOX(sig_combo), buf); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(sig_combo), 0); + g_signal_connect(GTK_COMBO_BOX(sig_combo), "changed", + G_CALLBACK(prefs_account_sig_combo_changed_cb), NULL); + + signame_label = gtk_label_new(_("Name:")); + gtk_widget_show (signame_label); + gtk_box_pack_start (GTK_BOX (sig_hbox), signame_label, FALSE, FALSE, 0); + + signame_entry = gtk_entry_new (); + gtk_widget_show (signame_entry); + gtk_box_pack_start (GTK_BOX (sig_hbox), signame_entry, TRUE, TRUE, 0); + + sig_hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (sig_hbox); + gtk_box_pack_start (GTK_BOX (sig_vbox), sig_hbox, FALSE, FALSE, 0); + + sigtext_label = gtk_label_new + (_("'Signature 1' will be used by default.")); + gtk_widget_show (sigtext_label); + gtk_box_pack_start (GTK_BOX (sig_hbox), sigtext_label, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (sigtext_label), GTK_JUSTIFY_LEFT); + gtk_label_set_line_wrap (GTK_LABEL (sigtext_label), TRUE); + gtkut_widget_set_small_font_size (sigtext_label); + sigtext_scrwin = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (sigtext_scrwin); gtk_box_pack_start (GTK_BOX (sig_vbox), sigtext_scrwin, TRUE, TRUE, 0); @@ -1409,6 +1477,8 @@ static void prefs_account_compose_create(void) SET_TOGGLE_SENSITIVITY (autoreplyto_chkbtn, autoreplyto_entry); compose.sig_radiobtn = sig_radiobtn; + compose.sig_combo = sig_combo; + compose.signame_entry = signame_entry; compose.sig_text = sig_text; compose.sigpath_entry = sigpath_entry; @@ -2101,6 +2171,8 @@ static gint prefs_account_apply(void) RecvProtocol protocol; GtkWidget *menu; GtkWidget *menuitem; + PrefsAccount *tmp_ac_prefs; + gint i; menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(basic.protocol_optmenu)); menuitem = gtk_menu_get_active(GTK_MENU(menu)); @@ -2147,6 +2219,19 @@ static gint prefs_account_apply(void) } prefs_set_data_from_dialog(prefs_account_get_params()); + + prefs_account_sig_combo_changed_cb(compose.sig_combo, NULL); + + tmp_ac_prefs = prefs_account_get_tmp_prefs(); + g_free(tmp_ac_prefs->sig_text); + tmp_ac_prefs->sig_text = g_strdup(compose.sig_texts[0]); + for (i = 0; i < 10; i++) { + g_free(tmp_ac_prefs->sig_names[i]); + tmp_ac_prefs->sig_names[i] = g_strdup(compose.sig_names[i]); + g_free(tmp_ac_prefs->sig_texts[i]); + tmp_ac_prefs->sig_texts[i] = g_strdup(compose.sig_texts[i]); + } + return 0; } @@ -2221,6 +2306,36 @@ static void prefs_account_sig_changed_cb(GtkWidget *widget, gpointer data) compose.sig_modified = TRUE; } +static void prefs_account_sig_combo_changed_cb(GtkWidget *widget, gpointer data) +{ + gint cur_page; + gint new_page; + + g_print("combo changed\n"); + + cur_page = compose.sig_selected; + new_page = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); + g_print(" cur page: %d\n", cur_page); + g_print(" new page: %d\n", new_page); + + /* Save current one */ + g_free(compose.sig_names[cur_page]); + compose.sig_names[cur_page] = + gtk_editable_get_chars(GTK_EDITABLE(compose.signame_entry), 0, -1); + g_free(compose.sig_texts[cur_page]); + compose.sig_texts[cur_page] = + prefs_get_escaped_str_from_text(compose.sig_text); + + /* Restore another one */ + if (cur_page != new_page) { + gtk_entry_set_text(GTK_ENTRY(compose.signame_entry), + compose.sig_names[new_page] ? compose.sig_names[new_page] : ""); + prefs_set_escaped_str_to_text(compose.sig_text, + compose.sig_texts[new_page]); + compose.sig_selected = new_page; + } +} + static void prefs_account_enum_set_data_from_radiobtn(PrefParam *pparam) { PrefsUIData *ui_data; |