#include <glib.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
+#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
#include "manage_window.h"
#include "prefs_common.h"
#include "compose.h"
+#include "addr_compl.h"
+#include "quote_fmt.h"
static struct Templates {
GtkWidget *window;
GtkWidget *clist_tmpls;
GtkWidget *entry_name;
GtkWidget *entry_subject;
+ GtkWidget *entry_to;
GtkWidget *text_value;
} templates;
gtk_widget_show(templates.window);
}
+#define ADD_ENTRY(entry, str, row) \
+{ \
+ label1 = gtk_label_new(str); \
+ gtk_widget_show(label1); \
+ gtk_table_attach(GTK_TABLE(table), label1, 0, 1, row, (row + 1), \
+ GTK_FILL, 0, 0, 0); \
+ gtk_misc_set_alignment(GTK_MISC(label1), 1, 0.5); \
+ \
+ entry = gtk_entry_new(); \
+ gtk_widget_show(entry); \
+ gtk_table_attach(GTK_TABLE(table), entry, 1, 2, row, (row + 1), \
+ GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); \
+}
+
static void prefs_template_window_create(void)
{
/* window structure ;) */
GtkWidget *hbox1;
GtkWidget *label1;
GtkWidget *entry_name;
+ GtkWidget *table;
+ GtkWidget *entry_to;
GtkWidget *entry_subject;
GtkWidget *scroll2;
GtkWidget *text_value;
gtk_container_set_border_width(GTK_CONTAINER(vbox1), 8);
gtk_paned_pack1(GTK_PANED(vpaned), vbox1, FALSE, FALSE);
- /* hbox for a label and template name entry */
hbox1 = gtk_hbox_new(FALSE, 8);
gtk_widget_show(hbox1);
gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(hbox1), 2);
- /* self-documenting */
label1 = gtk_label_new(_("Template name"));
gtk_widget_show(label1);
gtk_box_pack_start(GTK_BOX(hbox1), label1, FALSE, FALSE, 0);
- /* holds template name */
entry_name = gtk_entry_new();
gtk_widget_show(entry_name);
gtk_box_pack_start(GTK_BOX(hbox1), entry_name, TRUE, TRUE, 0);
- /* hbox for a label and subject entry */
- hbox1 = gtk_hbox_new(FALSE, 8);
- gtk_widget_show(hbox1);
- gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(hbox1), 2);
+ /* table for headers */
+ table = gtk_table_new(2, 2, FALSE);
+ gtk_widget_show(table);
+ gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0);
+ gtk_table_set_row_spacings(GTK_TABLE(table), 4);
+ gtk_table_set_col_spacings(GTK_TABLE(table), 4);
- /* self-documenting */
- label1 = gtk_label_new(_("Subject"));
- gtk_widget_show(label1);
- gtk_box_pack_start(GTK_BOX(hbox1), label1, FALSE, FALSE, 0);
+ ADD_ENTRY(entry_to, _("To:"), 0);
+ address_completion_register_entry(GTK_ENTRY(entry_to));
+ ADD_ENTRY(entry_subject, _("Subject:"), 1);
- /* holds subject */
- entry_subject = gtk_entry_new();
- gtk_widget_show(entry_subject);
- gtk_box_pack_start(GTK_BOX(hbox1), entry_subject, TRUE, TRUE, 0);
+#undef ADD_ENTRY
/* template content */
scroll2 = gtk_scrolled_window_new(NULL, NULL);
gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
GTK_SIGNAL_FUNC(prefs_template_cancel_cb), NULL);
+ address_completion_start(window);
+
templates.window = window;
templates.ok_btn = ok_btn;
templates.clist_tmpls = clist_tmpls;
templates.entry_name = entry_name;
templates.entry_subject = entry_subject;
+ templates.entry_to = entry_to;
templates.text_value = text_value;
}
tmpl_def.name = _("Template");
tmpl_def.subject = "";
+ tmpl_def.to = "";
tmpl_def.value = "";
if (!(tmpl = gtk_clist_get_row_data(clist, row)))
tmpl = &tmpl_def;
gtk_entry_set_text(GTK_ENTRY(templates.entry_name), tmpl->name);
+ gtk_entry_set_text(GTK_ENTRY(templates.entry_to),
+ tmpl->to ? tmpl->to : "");
gtk_entry_set_text(GTK_ENTRY(templates.entry_subject),
tmpl->subject ? tmpl->subject : "");
Template *tmp_tmpl;
gchar *name;
gchar *subject;
+ gchar *to;
gchar *value;
gchar *title[1];
g_return_val_if_fail(row != 0, -1);
+ value = gtk_editable_get_chars(GTK_EDITABLE(templates.text_value),
+ 0, -1);
+
+ if (value && *value != '\0') {
+ gchar *parsed_buf;
+ MsgInfo dummyinfo;
+
+ memset(&dummyinfo, 0, sizeof(MsgInfo));
+ quote_fmt_init(&dummyinfo, NULL);
+ quote_fmt_scan_string(value);
+ quote_fmt_parse();
+ parsed_buf = quote_fmt_get_buffer();
+ if (!parsed_buf) {
+ alertpanel_error(_("Template format error."));
+ g_free(value);
+ return -1;
+ }
+ }
+
name = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_name),
0, -1);
subject = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_subject),
- 0, -1);
- value = gtk_editable_get_chars(GTK_EDITABLE(templates.text_value),
- 0, -1);
+ 0, -1);
+ to = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_to),
+ 0, -1);
+
+ if (subject && *subject == '\0') {
+ g_free(subject);
+ subject = NULL;
+ }
+ if (to && *to == '\0') {
+ g_free(to);
+ to = NULL;
+ }
tmpl = g_new(Template, 1);
tmpl->name = name;
tmpl->subject = subject;
+ tmpl->to = to;
tmpl->value = value;
title[0] = name;