diff options
Diffstat (limited to 'src/compose.c')
-rw-r--r-- | src/compose.c | 111 |
1 files changed, 107 insertions, 4 deletions
diff --git a/src/compose.c b/src/compose.c index edbff207..fceb8ddb 100644 --- a/src/compose.c +++ b/src/compose.c @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2016 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 @@ -198,6 +198,8 @@ static void compose_set_toolbar_button_visibility static GtkWidget *compose_account_option_menu_create (Compose *compose, GtkWidget *hbox); +static GtkWidget *compose_signature_menu_create(Compose *compose, + GtkWidget *hbox); static void compose_set_out_encoding (Compose *compose); static void compose_set_template_menu (Compose *compose); static void compose_template_apply (Compose *compose, @@ -257,6 +259,7 @@ static void compose_set_title (Compose *compose); static void compose_select_account (Compose *compose, PrefsAccount *account, gboolean init); +static void compose_update_signature_menu (Compose *compose); static gboolean compose_check_for_valid_recipient (Compose *compose); @@ -376,6 +379,8 @@ static gboolean toolbar_button_pressed (GtkWidget *widget, static void account_activated (GtkMenuItem *menuitem, gpointer data); +static void sig_combo_changed (GtkComboBox *combo, + gpointer data); static void attach_selection_changed (GtkTreeSelection *selection, gpointer data); @@ -1998,6 +2003,9 @@ static void compose_insert_sig(Compose *compose, gboolean append, gchar *sig_str; gboolean prev_autowrap; + debug_print("compose_insert_sig: append:%d replace:%d scroll:%d\n", + append, replace, scroll); + g_return_if_fail(compose->account != NULL); prev_autowrap = compose->autowrap; @@ -2091,13 +2099,20 @@ static gchar *compose_get_signature_str(Compose *compose) g_return_val_if_fail(compose->account != NULL, NULL); if (compose->account->sig_type == SIG_DIRECT) { + gchar *sig_text; gchar *p, *sp; + gint sig_index; - if (!compose->account->sig_text) + sig_index = gtk_combo_box_get_active(GTK_COMBO_BOX(compose->sig_combo)); + if (sig_index > 0) + sig_text = compose->account->sig_texts[sig_index]; + else + sig_text = compose->account->sig_text; + if (!sig_text) return NULL; - sp = compose->account->sig_text; - p = sig_body = g_malloc(strlen(compose->account->sig_text) + 1); + sp = sig_text; + p = sig_body = g_malloc(strlen(sig_text) + 1); while (*sp) { if (*sp == '\\' && *(sp + 1) == 'n') { *p++ = '\n'; @@ -2946,10 +2961,56 @@ static void compose_select_account(Compose *compose, PrefsAccount *account, } #endif /* USE_GPGME */ + compose_update_signature_menu(compose); + if (!init && compose->mode != COMPOSE_REDIRECT && prefs_common.auto_sig) compose_insert_sig(compose, TRUE, TRUE, FALSE); } +static void compose_update_signature_menu(Compose *compose) +{ + GtkTreeModel *model; + GtkListStore *store; + GtkTreeIter iter; + gboolean valid; + gint i; + gchar *name; + + if (!compose->account) + return; + + model = gtk_combo_box_get_model(GTK_COMBO_BOX(compose->sig_combo)); + store = GTK_LIST_STORE(model); + valid = gtk_tree_model_get_iter_first(model, &iter); + + for (i = 0; valid && i < sizeof(compose->account->sig_names) / + sizeof(compose->account->sig_names[0]); i++) { + if (compose->account->sig_names[i] && + compose->account->sig_names[i][0] != '\0') { + name = g_strdup_printf + ("%s", compose->account->sig_names[i]); + } else { + name = g_strdup_printf(_("Signature %d"), i + 1); + } + gtk_list_store_set(store, &iter, 0, name, -1); + g_free(name); + valid = gtk_tree_model_iter_next(model, &iter); + } + + g_signal_handlers_block_by_func(G_OBJECT(compose->sig_combo), + G_CALLBACK(sig_combo_changed), compose); + gtk_combo_box_set_active(GTK_COMBO_BOX(compose->sig_combo), 0); + g_signal_handlers_unblock_by_func(G_OBJECT(compose->sig_combo), + G_CALLBACK(sig_combo_changed), + compose); + + if (compose->account->sig_type != SIG_DIRECT) { + gtk_widget_set_sensitive(compose->sig_combo, FALSE); + } else { + gtk_widget_set_sensitive(compose->sig_combo, TRUE); + } +} + static gboolean compose_check_for_valid_recipient(Compose *compose) { const gchar *to_raw = "", *cc_raw = "", *bcc_raw = ""; @@ -5193,6 +5254,7 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) GtkWidget *hbox; GtkWidget *label; GtkWidget *from_optmenu_hbox; + GtkWidget *sig_combo; GtkWidget *to_entry; GtkWidget *to_hbox; GtkWidget *newsgroups_entry; @@ -5320,9 +5382,13 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) from_optmenu_hbox = gtk_hbox_new(FALSE, 0); gtk_table_attach_defaults(GTK_TABLE(table), from_optmenu_hbox, 1, 2, count, count + 1); + //gtk_table_attach(GTK_TABLE(table), from_optmenu_hbox, + //1, 2, count, count + 1, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + gtk_widget_set_size_request(from_optmenu_hbox, 300, -1); gtk_table_set_row_spacing(GTK_TABLE(table), 0, 4); count++; compose_account_option_menu_create(compose, from_optmenu_hbox); + sig_combo = compose_signature_menu_create(compose, from_optmenu_hbox); /* header labels and entries */ compose_add_entry_field(table, &to_hbox, &to_entry, &count, @@ -5621,6 +5687,8 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode) compose->followup_hbox = followup_hbox; compose->followup_entry = followup_entry; + compose->sig_combo = sig_combo; + /* compose->attach_toggle = attach_toggle; */ #if USE_GPGME compose->misc_hbox = misc_hbox; @@ -6043,6 +6111,33 @@ static GtkWidget *compose_account_option_menu_create(Compose *compose, return optmenu; } +static GtkWidget *compose_signature_menu_create(Compose *compose, + GtkWidget *hbox) +{ + GtkWidget *label; + GtkWidget *combo; + gint i; + + label = gtk_label_new(_("Signature:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 4); + + combo = gtk_combo_box_new_text(); + gtk_box_pack_start(GTK_BOX(hbox), 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(combo), buf); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); + g_signal_connect(GTK_COMBO_BOX(combo), "changed", + G_CALLBACK(sig_combo_changed), compose); + + gtk_widget_set_tooltip_text(combo, _("Change signature")); + + return combo; +} + static void compose_set_out_encoding(Compose *compose) { GtkItemFactoryEntry *entry; @@ -7319,6 +7414,14 @@ static void account_activated(GtkMenuItem *menuitem, gpointer data) compose_select_account(compose, ac, FALSE); } +static void sig_combo_changed(GtkComboBox *combo, gpointer data) +{ + Compose *compose = (Compose *)data; + + if (compose->mode != COMPOSE_REDIRECT && prefs_common.auto_sig) + compose_insert_sig(compose, TRUE, TRUE, FALSE); +} + static void attach_selection_changed(GtkTreeSelection *selection, gpointer data) { } |