#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;
gtk_widget_show(templates.window);
}
-#define ADD_ENTRY(vbox, entry, str) \
+#define ADD_ENTRY(entry, str, row) \
{ \
- hbox1 = gtk_hbox_new(FALSE, 8); \
- gtk_widget_show(hbox1); \
- gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); \
- gtk_container_set_border_width(GTK_CONTAINER(hbox1), 2); \
- \
label1 = gtk_label_new(str); \
gtk_widget_show(label1); \
- gtk_box_pack_start(GTK_BOX(hbox1), label1, FALSE, FALSE, 0); \
+ 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_box_pack_start(GTK_BOX(hbox1), entry, TRUE, TRUE, 0); \
+ 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)
GtkWidget *hbox1;
GtkWidget *label1;
GtkWidget *entry_name;
- GtkWidget *vbox_hdr;
- GtkWidget *entry_to;
- GtkWidget *entry_subject;
+ GtkWidget *table;
+ GtkWidget *entry_to;
+ GtkWidget *entry_subject;
GtkWidget *scroll2;
GtkWidget *text_value;
GtkWidget *vbox2;
gtk_container_set_border_width(GTK_CONTAINER(vbox1), 8);
gtk_paned_pack1(GTK_PANED(vpaned), vbox1, FALSE, FALSE);
- ADD_ENTRY(vbox1, entry_name, _("Template name"));
+ hbox1 = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox1);
+ gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 0);
+
+ label1 = gtk_label_new(_("Template name"));
+ gtk_widget_show(label1);
+ gtk_box_pack_start(GTK_BOX(hbox1), label1, FALSE, FALSE, 0);
- /* vbox to handle headers */
- vbox_hdr = gtk_vbox_new(FALSE, 2);
- gtk_widget_show(vbox_hdr);
- gtk_box_pack_start(GTK_BOX(vbox1), vbox_hdr, FALSE, FALSE, 0);
+ entry_name = gtk_entry_new();
+ gtk_widget_show(entry_name);
+ gtk_box_pack_start(GTK_BOX(hbox1), entry_name, TRUE, TRUE, 0);
- ADD_ENTRY(vbox_hdr, entry_to, _("To:"));
- ADD_ENTRY(vbox_hdr, entry_subject, _("Subject:"));
+ /* 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);
+
+ ADD_ENTRY(entry_to, _("To:"), 0);
+ address_completion_register_entry(GTK_ENTRY(entry_to));
+ ADD_ENTRY(entry_subject, _("Subject:"), 1);
#undef ADD_ENTRY
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;
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 : "");
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);
+ 0, -1);
to = gtk_editable_get_chars(GTK_EDITABLE(templates.entry_to),
0, -1);
- value = gtk_editable_get_chars(GTK_EDITABLE(templates.text_value),
- 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;