+2001-05-01 [hoa]
+ * src/Makefile.am added prefs_display_headers.[ch] headers_display.[ch]
+ * src/defs.h added HEADERS_DISPLAY_RC : name of the config file
+ for displaying of headers
+ * src/grouplist_dialog.[ch] minor changes to remove warnings
+ * src/prefs_display_headers.[ch] dialog to choose the
+ headers to display in the mail viewer.
+ * src/headers.h correction of #define
+ * src/headers_display.[ch] configuration for displaying of headers.
+ * src/main.c read config of displaying of headers
+ * src/prefs_common.c add a button to access the config dialog
+ for displaying of headers
+ * src/prefs_display_headers.[ch] dialog for configuration for
+ displaying of the headers.
+ * src/prefs_headers.c cleaning of code
+ * src/procheader.c comments added to code
+ * src/textview.c changes to reorder the headers depending
+ on the config for displaying of headers
+
2001-04-30 [alfons]
0.4.65claws7
* src/news.c (news_session_new_for_folder): set userid=NULL if
password dialog is cancelled.
+>>>>>>> 1.29
2001-04-30 [sergey]
* src/nntp.h (NNTPSockInfo): new type.
gtkstext.c gtkstext.h \
grouplist_dialog.c grouplist_dialog.h \
headers.c headers.h \
- prefs_headers.c prefs_headers.h
+ prefs_headers.c prefs_headers.h \
+ headers_display.c headers_display.h \
+ prefs_display_headers.c prefs_display_headers.h
EXTRA_DIST = \
pixmaps/clip.xpm \
#define ACCOUNT_RC "accountrc"
#define FILTER_RC "filterrc"
#define HEADERS_RC "headersrc"
+#define HEADERS_DISPLAY_RC "headersdisplayrc"
#define MENU_RC "menurc"
#define ADDRESS_BOOK "addressbook.xml"
#define MANUAL_HTML_INDEX "sylpheed.html"
gtk_clist_clear(GTK_CLIST(group_clist));
for(elt = group_list; elt != NULL ; elt = elt->next)
{
- row = gtk_clist_append(GTK_CLIST(group_clist), &(elt->data));
+ row = gtk_clist_append(GTK_CLIST(group_clist),
+ (void *) &(elt->data));
gtk_clist_set_row_data(GTK_CLIST(group_clist), row, elt->data);
}
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ifndef __INPUTDIALOG_H__
-#define __INPUTDIALOG_H__
+#ifndef __GROUPLISTDIALOG_H__
+#define __GROUPLISTDIALOG_H__
#include <glib.h>
#include "folder.h"
gchar *grouplist_dialog (FolderItem * item);
-#endif /* __INPUTDIALOG_H__ */
+#endif /* __GROUPLISTDIALOG_H__ */
CustomHeader * custom_header_read_str(gchar * buf);
void custom_header_free(CustomHeader *ch);
-#endif /* __FILTER_H__ */
+#endif /* __HEADERS_H__ */
--- /dev/null
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+
+#include "intl.h"
+#include "headers_display.h"
+#include "utils.h"
+
+
+gchar * header_display_prop_get_str(HeaderDisplayProp *dp)
+{
+ return g_strdup_printf
+ ("%s%s", dp->hidden?"-":"", dp->name);
+}
+
+HeaderDisplayProp * header_display_prop_read_str(gchar * buf)
+{
+ HeaderDisplayProp * dp;
+
+ dp = g_new0(HeaderDisplayProp, 1);
+
+ dp->hidden = 0;
+ if (*buf == '-') {
+ dp->hidden = 1;
+ buf ++;
+ }
+ if (*buf == 0) {
+ g_free(dp);
+ return NULL;
+ }
+ dp->name = g_strdup(buf);
+
+ return dp;
+}
+
+void header_display_prop_free(HeaderDisplayProp *dp)
+{
+ if (!dp) return;
+
+ if (dp->name)
+ g_free(dp->name);
+
+ g_free(dp);
+}
--- /dev/null
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999,2000 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __HEADERS_DISPLAY_H__
+#define __HEADERS_DISPLAY_H__
+
+struct _HeaderDisplayProp
+{
+ gchar *name;
+ int hidden;
+};
+
+typedef struct _HeaderDisplayProp HeaderDisplayProp;
+
+gchar * header_display_prop_get_str(HeaderDisplayProp *dp);
+HeaderDisplayProp * header_display_prop_read_str(gchar * buf);
+void header_display_prop_free(HeaderDisplayProp *dp);
+
+#endif /* __DISPLAY_H__ */
prefs_common_save_config();
prefs_filter_read_config();
prefs_filter_write_config();
+ prefs_display_headers_read_config();
+ prefs_display_headers_write_config();
gtkut_widget_init();
#include "gtkutils.h"
#include "alertpanel.h"
#include "folder.h"
+#include "prefs_display_headers.h"
PrefsCommon prefs_common;
GtkWidget *label_datefmt;
GtkWidget *entry_datefmt;
GtkWidget *button_dispitem;
+ GtkWidget *button_headers_display;
vbox1 = gtk_vbox_new (FALSE, VSPACING);
gtk_widget_show (vbox1);
GTK_SIGNAL_FUNC (prefs_summary_display_item_set),
NULL);
+ hbox1 = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (hbox1);
+ gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0);
+
+ button_headers_display = gtk_button_new_with_label
+ (_(" Set displaying of headers... "));
+ gtk_widget_show (button_headers_display);
+ gtk_box_pack_start (GTK_BOX (hbox1), button_headers_display, FALSE,
+ TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT (button_headers_display), "clicked",
+ GTK_SIGNAL_FUNC (prefs_display_headers_open),
+ NULL);
+
display.entry_textfont = entry_textfont;
display.button_textfont = button_textfont;
--- /dev/null
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "defs.h"
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "intl.h"
+#include "main.h"
+#include "prefs.h"
+#include "prefs_display_headers.h"
+#include "prefs_common.h"
+#include "mainwindow.h"
+#include "foldersel.h"
+#include "manage_window.h"
+#include "utils.h"
+#include "gtkutils.h"
+#include "alertpanel.h"
+#include "folder.h"
+#include "headers_display.h"
+
+static struct Headers {
+ GtkWidget *window;
+
+ GtkWidget *close_btn;
+
+ GtkWidget *hdr_combo;
+ GtkWidget *hdr_entry;
+ GtkWidget *key_check;
+ GtkWidget *headers_clist;
+} headers;
+
+/*
+ parameter name, default value, pointer to the prefs variable, data type,
+ pointer to the widget pointer,
+ pointer to the function for data setting,
+ pointer to the function for widget setting
+ */
+
+#define VSPACING 12
+#define VSPACING_NARROW 4
+#define DEFAULT_ENTRY_WIDTH 80
+#define PREFSBUFSIZE 1024
+
+/* widget creating functions */
+static void prefs_display_headers_create (void);
+
+static void prefs_display_headers_set_dialog (void);
+static void prefs_display_headers_set_list (void);
+static gint prefs_display_headers_clist_set_row (gint row);
+
+/* callback functions */
+static void prefs_display_headers_select_dest_cb (void);
+static void prefs_display_headers_register_cb (void);
+static void prefs_display_headers_substitute_cb (void);
+static void prefs_display_headers_delete_cb (void);
+static void prefs_display_headers_up (void);
+static void prefs_display_headers_down (void);
+static void prefs_display_headers_select (GtkCList *clist,
+ gint row,
+ gint column,
+ GdkEvent *event);
+
+static void prefs_display_headers_dest_radio_button_toggled (void);
+static void prefs_display_headers_notrecv_radio_button_toggled (void);
+
+static void prefs_display_headers_key_pressed (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data);
+static void prefs_display_headers_close (GtkButton *button);
+
+GSList * prefs_display_headers = NULL;
+
+static char * defaults[] =
+{
+ "Sender",
+ "From",
+ "Reply-To",
+ "To",
+ "Cc",
+ "Subject",
+ "Date",
+ "-Received",
+ "-Message-Id",
+ "-In-Reply-To",
+ "-References",
+ "-Mime-Version",
+ "-Content-Type",
+ "-Content-Transfer-Encoding",
+ "-X-UIDL",
+ "-Precedence",
+ "-Status",
+ "-Priority"
+};
+
+static void prefs_display_headers_set_default(void)
+{
+ int i;
+
+ for(i = 0 ; i < sizeof(defaults) / sizeof(char *) ; i++) {
+ HeaderDisplayProp * dp =
+ header_display_prop_read_str(defaults[i]);
+ prefs_display_headers =
+ g_slist_append(prefs_display_headers, dp);
+ }
+}
+
+void prefs_display_headers_open(void)
+{
+ if (!headers.window) {
+ prefs_display_headers_create();
+ }
+
+ manage_window_set_transient(GTK_WINDOW(headers.window));
+ gtk_widget_grab_focus(headers.close_btn);
+
+ prefs_display_headers_set_dialog();
+
+ gtk_widget_show(headers.window);
+}
+
+static void prefs_display_headers_create(void)
+{
+ GtkWidget *window;
+ GtkWidget *vbox;
+ GtkWidget *close_btn;
+ GtkWidget *confirm_area;
+
+ GtkWidget *vbox1;
+
+ GtkWidget *table1;
+ GtkWidget *hdr_label;
+ GtkWidget *hdr_combo;
+ GtkWidget *key_label;
+ GtkWidget *key_check;
+
+ GtkWidget *reg_hbox;
+ GtkWidget *btn_hbox;
+ GtkWidget *arrow;
+ GtkWidget *reg_btn;
+ GtkWidget *subst_btn;
+ GtkWidget *del_btn;
+
+ GtkWidget *ch_hbox;
+ GtkWidget *ch_scrolledwin;
+ GtkWidget *headers_clist;
+
+ GtkWidget *btn_vbox;
+ GtkWidget *up_btn;
+ GtkWidget *down_btn;
+
+ gchar *title[] = {_("Custom headers")};
+
+ debug_print(_("Creating headers setting window...\n"));
+
+ window = gtk_window_new (GTK_WINDOW_DIALOG);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 8);
+ gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
+ gtk_window_set_modal (GTK_WINDOW (window), TRUE);
+ gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_widget_show (vbox);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ gtkut_button_set_create (&confirm_area, &close_btn, _("Close"),
+ NULL, NULL, NULL, NULL);
+ gtk_widget_show (confirm_area);
+ gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0);
+ gtk_widget_grab_default (close_btn);
+
+ gtk_window_set_title (GTK_WINDOW(window),
+ _("Headers setting"));
+ gtk_signal_connect (GTK_OBJECT(window), "delete_event",
+ GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "key_press_event",
+ GTK_SIGNAL_FUNC(prefs_display_headers_key_pressed),
+ NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "focus_in_event",
+ GTK_SIGNAL_FUNC(manage_window_focus_in), NULL);
+ gtk_signal_connect (GTK_OBJECT(window), "focus_out_event",
+ GTK_SIGNAL_FUNC(manage_window_focus_out), NULL);
+ gtk_signal_connect (GTK_OBJECT(close_btn), "clicked",
+ GTK_SIGNAL_FUNC(prefs_display_headers_close),
+ NULL);
+
+ vbox1 = gtk_vbox_new (FALSE, VSPACING);
+ gtk_widget_show (vbox1);
+ gtk_box_pack_start (GTK_BOX (vbox), vbox1, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2);
+
+ table1 = gtk_table_new (2, 2, FALSE);
+ gtk_widget_show (table1);
+ gtk_box_pack_start (GTK_BOX (vbox1), table1,
+ FALSE, FALSE, 0);
+ gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
+ gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
+
+ hdr_label = gtk_label_new (_("Header"));
+ gtk_widget_show (hdr_label);
+ gtk_table_attach (GTK_TABLE (table1), hdr_label, 0, 1, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (hdr_label), 0, 0.5);
+
+ hdr_combo = gtk_combo_new ();
+ gtk_widget_show (hdr_combo);
+ gtk_table_attach (GTK_TABLE (table1), hdr_combo, 0, 1, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+ gtk_widget_set_usize (hdr_combo, 150 /* 96 */, -1);
+ gtkut_combo_set_items (GTK_COMBO (hdr_combo),
+ "From", "To", "Subject", "Date", NULL);
+
+ key_label = gtk_label_new (_("Hide"));
+ gtk_widget_show (key_label);
+ gtk_table_attach (GTK_TABLE (table1), key_label, 1, 2, 0, 1,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (key_label), 0, 0.5);
+
+ // key_entry = gtk_entry_new ();
+ key_check = gtk_check_button_new();
+ gtk_widget_show (key_check);
+ gtk_table_attach (GTK_TABLE (table1), key_check, 1, 2, 1, 2,
+ GTK_EXPAND | GTK_SHRINK | GTK_FILL,
+ 0, 0, 0);
+
+ /* register / substitute / delete */
+
+ reg_hbox = gtk_hbox_new (FALSE, 4);
+ gtk_widget_show (reg_hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), reg_hbox,
+ FALSE, FALSE, 0);
+
+ arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_widget_show (arrow);
+ gtk_box_pack_start (GTK_BOX (reg_hbox), arrow, FALSE, FALSE, 0);
+ gtk_widget_set_usize (arrow, -1, 16);
+
+ btn_hbox = gtk_hbox_new (TRUE, 4);
+ gtk_widget_show (btn_hbox);
+ gtk_box_pack_start (GTK_BOX (reg_hbox), btn_hbox, FALSE, FALSE, 0);
+
+ reg_btn = gtk_button_new_with_label (_("Add"));
+ gtk_widget_show (reg_btn);
+ gtk_box_pack_start (GTK_BOX (btn_hbox), reg_btn, FALSE, TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT (reg_btn), "clicked",
+ GTK_SIGNAL_FUNC
+ (prefs_display_headers_register_cb), NULL);
+
+ subst_btn = gtk_button_new_with_label (_(" Substitute "));
+ gtk_widget_show (subst_btn);
+ gtk_box_pack_start (GTK_BOX (btn_hbox), subst_btn, FALSE, TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT (subst_btn), "clicked",
+ GTK_SIGNAL_FUNC
+ (prefs_display_headers_substitute_cb),
+ NULL);
+
+ del_btn = gtk_button_new_with_label (_("Delete"));
+ gtk_widget_show (del_btn);
+ gtk_box_pack_start (GTK_BOX (btn_hbox), del_btn, FALSE, TRUE, 0);
+ gtk_signal_connect (GTK_OBJECT (del_btn), "clicked",
+ GTK_SIGNAL_FUNC (prefs_display_headers_delete_cb),
+ NULL);
+
+
+ ch_hbox = gtk_hbox_new (FALSE, 8);
+ gtk_widget_show (ch_hbox);
+ gtk_box_pack_start (GTK_BOX (vbox1), ch_hbox,
+ TRUE, TRUE, 0);
+
+ ch_scrolledwin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_usize (ch_scrolledwin, -1, 100);
+ gtk_widget_show (ch_scrolledwin);
+ gtk_box_pack_start (GTK_BOX (ch_hbox), ch_scrolledwin,
+ TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ch_scrolledwin),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ headers_clist = gtk_clist_new_with_titles(1, title);
+ gtk_widget_show (headers_clist);
+ gtk_container_add (GTK_CONTAINER (ch_scrolledwin), headers_clist);
+ gtk_clist_set_column_width (GTK_CLIST (headers_clist), 0, 80);
+ gtk_clist_set_selection_mode (GTK_CLIST (headers_clist),
+ GTK_SELECTION_BROWSE);
+ GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (headers_clist)->column[0].button,
+ GTK_CAN_FOCUS);
+ gtk_signal_connect (GTK_OBJECT (headers_clist), "select_row",
+ GTK_SIGNAL_FUNC (prefs_display_headers_select),
+ NULL);
+
+
+ btn_vbox = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (btn_vbox);
+ gtk_box_pack_start (GTK_BOX (ch_hbox), btn_vbox, FALSE, FALSE, 0);
+
+ up_btn = gtk_button_new_with_label (_("Up"));
+ gtk_widget_show (up_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), up_btn, FALSE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (up_btn), "clicked",
+ GTK_SIGNAL_FUNC (prefs_display_headers_up), NULL);
+
+ down_btn = gtk_button_new_with_label (_("Down"));
+ gtk_widget_show (down_btn);
+ gtk_box_pack_start (GTK_BOX (btn_vbox), down_btn, FALSE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (down_btn), "clicked",
+ GTK_SIGNAL_FUNC (prefs_display_headers_down), NULL);
+
+
+ gtk_widget_show_all(window);
+
+ headers.window = window;
+ headers.close_btn = close_btn;
+
+ headers.hdr_combo = hdr_combo;
+ headers.hdr_entry = GTK_COMBO (hdr_combo)->entry;
+ headers.key_check = key_check;
+ headers.headers_clist = headers_clist;
+}
+
+void prefs_display_headers_read_config(void)
+{
+ gchar *rcpath;
+ FILE *fp;
+ gchar buf[PREFSBUFSIZE];
+ HeaderDisplayProp *dp;
+
+ debug_print(_("Reading configuration for displaying of headers...\n"));
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ HEADERS_DISPLAY_RC, NULL);
+ if ((fp = fopen(rcpath, "r")) == NULL) {
+ if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen");
+ g_free(rcpath);
+ prefs_display_headers = NULL;
+ prefs_display_headers_set_default();
+ return;
+ }
+ g_free(rcpath);
+
+ /* remove all previous headers list */
+ while (prefs_display_headers != NULL) {
+ dp = (HeaderDisplayProp *)prefs_display_headers->data;
+ header_display_prop_free(dp);
+ prefs_display_headers =
+ g_slist_remove(prefs_display_headers, dp);
+ }
+
+ while (fgets(buf, sizeof(buf), fp) != NULL) {
+ g_strchomp(buf);
+ dp = header_display_prop_read_str(buf);
+ if (dp) {
+ prefs_display_headers =
+ g_slist_append(prefs_display_headers, dp);
+ }
+ }
+
+ fclose(fp);
+}
+
+void prefs_display_headers_write_config(void)
+{
+ gchar *rcpath;
+ PrefFile *pfile;
+ GSList *cur;
+ gchar buf[PREFSBUFSIZE];
+ FILE * fp;
+ HeaderDisplayProp *dp;
+
+ debug_print(_("Writing configuration for displaying of headers...\n"));
+
+ rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S,
+ HEADERS_DISPLAY_RC, NULL);
+
+ if ((pfile = prefs_write_open(rcpath)) == NULL) {
+ g_warning(_("failed to write configuration to file\n"));
+ g_free(rcpath);
+ return;
+ }
+
+ for (cur = prefs_display_headers; cur != NULL; cur = cur->next) {
+ HeaderDisplayProp *hdr = (HeaderDisplayProp *)cur->data;
+ gchar *dpstr;
+
+ dpstr = header_display_prop_get_str(hdr);
+ if (fputs(dpstr, pfile->fp) == EOF ||
+ fputc('\n', pfile->fp) == EOF) {
+ FILE_OP_ERROR(rcpath, "fputs || fputc");
+ prefs_write_close_revert(pfile);
+ g_free(rcpath);
+ g_free(dpstr);
+ return;
+ }
+ g_free(dpstr);
+ }
+
+ g_free(rcpath);
+
+ if (prefs_write_close(pfile) < 0) {
+ g_warning(_("failed to write configuration to file\n"));
+ return;
+ }
+}
+
+static void prefs_display_headers_set_dialog()
+{
+ GtkCList *clist = GTK_CLIST(headers.headers_clist);
+ GSList *cur;
+ gchar *dp_str[1];
+ gint row;
+
+ gtk_clist_freeze(clist);
+ gtk_clist_clear(clist);
+
+ dp_str[0] = _("(New)");
+ row = gtk_clist_append(clist, dp_str);
+ gtk_clist_set_row_data(clist, row, NULL);
+
+ for (cur = prefs_display_headers; cur != NULL; cur = cur->next) {
+ HeaderDisplayProp *dp = (HeaderDisplayProp *)cur->data;
+
+ if (dp->hidden)
+ dp_str[0] = g_strdup_printf("(%s)", dp->name);
+ else
+ dp_str[0] = g_strdup_printf("%s", dp->name);
+ row = gtk_clist_append(clist, dp_str);
+ gtk_clist_set_row_data(clist, row, dp);
+
+ g_free(dp_str[0]);
+ }
+
+ gtk_clist_thaw(clist);
+}
+
+static void prefs_display_headers_set_list()
+{
+ gint row = 1;
+ HeaderDisplayProp *dp;
+
+ g_slist_free(prefs_display_headers);
+ prefs_display_headers = NULL;
+
+ while ((dp = gtk_clist_get_row_data(GTK_CLIST(headers.headers_clist),
+ row)) != NULL) {
+ prefs_display_headers = g_slist_append(prefs_display_headers,
+ dp);
+ row++;
+ }
+}
+
+#define GET_ENTRY(entry) \
+ entry_text = gtk_entry_get_text(GTK_ENTRY(entry))
+
+static gint prefs_display_headers_clist_set_row(gint row)
+{
+ GtkCList *clist = GTK_CLIST(headers.headers_clist);
+ HeaderDisplayProp *dp;
+ gchar *entry_text;
+ gchar *dp_str[1];
+
+ g_return_val_if_fail(row != 0, -1);
+
+ GET_ENTRY(headers.hdr_entry);
+ if (entry_text[0] == '\0') {
+ alertpanel_error(_("Header name is not set."));
+ return -1;
+ }
+
+ dp = g_new0(HeaderDisplayProp, 1);
+
+ dp->name = g_strdup(entry_text);
+
+ dp->hidden = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(headers.key_check));
+
+ if (dp->hidden)
+ dp_str[0] = g_strdup_printf("(%s)", dp->name);
+ else
+ dp_str[0] = g_strdup_printf("%s", dp->name);
+
+ if (row < 0)
+ row = gtk_clist_append(clist, dp_str);
+ else {
+ HeaderDisplayProp *tmpdp;
+
+ gtk_clist_set_text(clist, row, 0, dp_str[0]);
+ tmpdp = gtk_clist_get_row_data(clist, row);
+ if (tmpdp)
+ header_display_prop_free(tmpdp);
+ }
+
+ gtk_clist_set_row_data(clist, row, dp);
+
+ g_free(dp_str[0]);
+
+ prefs_display_headers_set_list();
+
+ return row;
+}
+
+static void prefs_display_headers_register_cb(void)
+{
+ prefs_display_headers_clist_set_row(-1);
+}
+
+static void prefs_display_headers_substitute_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(headers.headers_clist);
+ HeaderDisplayProp *dp;
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row == 0) return;
+
+ dp = gtk_clist_get_row_data(clist, row);
+ if (!dp) return;
+
+ prefs_display_headers_clist_set_row(row);
+}
+
+static void prefs_display_headers_delete_cb(void)
+{
+ GtkCList *clist = GTK_CLIST(headers.headers_clist);
+ HeaderDisplayProp *dp;
+ gint row;
+
+ if (!clist->selection) return;
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row == 0) return;
+
+ if (alertpanel(_("Delete header"),
+ _("Do you really want to delete this header?"),
+ _("Yes"), _("No"), NULL) == G_ALERTALTERNATE)
+ return;
+
+ dp = gtk_clist_get_row_data(clist, row);
+ header_display_prop_free(dp);
+ gtk_clist_remove(clist, row);
+ prefs_display_headers = g_slist_remove(prefs_display_headers, dp);
+}
+
+static void prefs_display_headers_up(void)
+{
+ GtkCList *clist = GTK_CLIST(headers.headers_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 1) {
+ gtk_clist_row_move(clist, row, row - 1);
+ prefs_display_headers_set_list();
+ }
+}
+
+static void prefs_display_headers_down(void)
+{
+ GtkCList *clist = GTK_CLIST(headers.headers_clist);
+ gint row;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ if (row > 0 && row < clist->rows - 1) {
+ gtk_clist_row_move(clist, row, row + 1);
+ prefs_display_headers_set_list();
+ }
+}
+
+#define ENTRY_SET_TEXT(entry, str) \
+ gtk_entry_set_text(GTK_ENTRY(entry), str ? str : "")
+
+static void prefs_display_headers_select(GtkCList *clist, gint row,
+ gint column, GdkEvent *event)
+{
+ HeaderDisplayProp *dp;
+ HeaderDisplayProp default_dp = { "", 0 };
+
+ dp = gtk_clist_get_row_data(clist, row);
+ if (!dp)
+ dp = &default_dp;
+
+ ENTRY_SET_TEXT(headers.hdr_entry, dp->name);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(headers.key_check),
+ dp->hidden);
+}
+
+static void prefs_display_headers_key_pressed(GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer data)
+{
+ if (event && event->keyval == GDK_Escape)
+ gtk_widget_hide(headers.window);
+}
+
+static void prefs_display_headers_close(GtkButton *button)
+{
+ prefs_display_headers_write_config();
+ gtk_widget_hide(headers.window);
+}
--- /dev/null
+/*
+ * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2001 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
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __PREFS_DISPLAY_HEADERS_H__
+#define __PREFS_DISPLAY_HEADERS_H__
+
+void prefs_display_headers_read_config (void);
+void prefs_display_headers_write_config (void);
+void prefs_display_headers_open (void);
+
+extern GSList * prefs_display_headers;
+
+#endif /* __PREFS_DISPLAY_HEADERS_H__ */
GtkWidget *hdr_entry;
GtkWidget *key_entry;
GtkWidget *headers_clist;
-
- /*
- GtkWidget *hdr_combo1;
- GtkWidget *hdr_combo2;
- GtkWidget *hdr_entry1;
- GtkWidget *hdr_entry2;
- GtkWidget *key_entry1;
- GtkWidget *key_entry2;
- GtkWidget *pred_combo1;
- GtkWidget *pred_combo2;
- GtkWidget *pred_entry1;
- GtkWidget *pred_entry2;
- GtkWidget *op_combo;
- GtkWidget *op_entry;
-
- GtkWidget *dest_entry;
- GtkWidget *regex_chkbtn;
-
- GtkWidget *destsel_btn;
- GtkWidget *dest_radiobtn;
- GtkWidget *notrecv_radiobtn;
-
- GtkWidget *cond_clist;
- */
} headers;
/*
GtkWidget *btn_vbox;
GtkWidget *up_btn;
GtkWidget *down_btn;
- /*
-
- GtkWidget *table1;
- GtkWidget *op_label;
- GtkWidget *op_combo;
- GtkWidget *op_entry;
- GtkWidget *hdr_label;
- GtkWidget *hdr_combo1;
- GtkWidget *hdr_combo2;
- GtkWidget *key_label;
- GtkWidget *key_entry1;
- GtkWidget *key_entry2;
- GtkWidget *pred_label;
- GtkWidget *pred_combo1;
- GtkWidget *pred_entry1;
- GtkWidget *pred_combo2;
- GtkWidget *pred_entry2;
-
- GtkWidget *vbox2;
- GtkWidget *dest_hbox;
- GtkWidget *dest_entry;
- GtkWidget *destsel_btn;
- GtkWidget *dest_radiobtn;
- GtkWidget *notrecv_radiobtn;
- GSList *recv_group = NULL;
-
- GtkWidget *regex_chkbtn;
-
- GtkWidget *reg_hbox;
- GtkWidget *btn_hbox;
- GtkWidget *arrow;
- GtkWidget *reg_btn;
- GtkWidget *subst_btn;
- GtkWidget *del_btn;
-
- GtkWidget *cond_hbox;
- GtkWidget *cond_scrolledwin;
- GtkWidget *cond_clist;
-
- GtkWidget *btn_vbox;
- GtkWidget *up_btn;
- GtkWidget *down_btn;
- */
gchar *title[] = {_("Custom headers")};
gtk_table_set_row_spacings (GTK_TABLE (table1), 8);
gtk_table_set_col_spacings (GTK_TABLE (table1), 8);
- /*
- op_label = gtk_label_new (_("Operator"));
- gtk_widget_show (op_label);
- gtk_table_attach (GTK_TABLE (table1), op_label, 0, 1, 0, 1,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (op_label), 0, 0.5);
-
- op_combo = gtk_combo_new ();
- gtk_widget_show (op_combo);
- gtk_table_attach (GTK_TABLE (table1), op_combo, 0, 1, 2, 3,
- 0, 0, 0, 0);
- gtk_widget_set_usize (op_combo, 52, -1);
- gtkut_combo_set_items (GTK_COMBO (op_combo), "and", "or", NULL);
-
- op_entry = GTK_COMBO (op_combo)->entry;
- gtk_entry_set_editable (GTK_ENTRY (op_entry), FALSE);
-
- hdr_label = gtk_label_new (_("Header"));
- gtk_widget_show (hdr_label);
- gtk_table_attach (GTK_TABLE (table1), hdr_label, 1, 2, 0, 1,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (hdr_label), 0, 0.5);
-
- hdr_combo1 = gtk_combo_new ();
- gtk_widget_show (hdr_combo1);
- gtk_table_attach (GTK_TABLE (table1), hdr_combo1, 1, 2, 1, 2,
- 0, 0, 0, 0);
- gtk_widget_set_usize (hdr_combo1, 96, -1);
- gtkut_combo_set_items (GTK_COMBO (hdr_combo1),
- "Subject", "From", "To", "Cc", "Reply-To",
- "Sender", "X-ML-Name", "X-List", "X-Sequence",
- "X-Mailer",
- NULL);
-
- hdr_combo2 = gtk_combo_new ();
- gtk_widget_show (hdr_combo2);
- gtk_table_attach (GTK_TABLE (table1), hdr_combo2, 1, 2, 2, 3,
- 0, 0, 0, 0);
- gtk_widget_set_usize (hdr_combo2, 96, -1);
- gtkut_combo_set_items (GTK_COMBO (hdr_combo2), _("(none)"),
- "Subject", "From", "To", "Cc", "Reply-To",
- "Sender", "X-ML-Name", "X-List", "X-Sequence",
- "X-Mailer",
- NULL);
-
- key_label = gtk_label_new (_("Keyword"));
- gtk_widget_show (key_label);
- gtk_table_attach (GTK_TABLE (table1), key_label, 2, 3, 0, 1,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL,
- 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (key_label), 0, 0.5);
-
- key_entry1 = gtk_entry_new ();
- gtk_widget_show (key_entry1);
- gtk_widget_set_usize (key_entry1, 128, -1);
- gtk_table_attach (GTK_TABLE (table1), key_entry1, 2, 3, 1, 2,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL,
- 0, 0, 0);
-
- key_entry2 = gtk_entry_new ();
- gtk_widget_show (key_entry2);
- gtk_widget_set_usize (key_entry2, 128, -1);
- gtk_table_attach (GTK_TABLE (table1), key_entry2, 2, 3, 2, 3,
- GTK_EXPAND | GTK_SHRINK | GTK_FILL,
- 0, 0, 0);
-
- pred_label = gtk_label_new (_("Predicate"));
- gtk_widget_show (pred_label);
- gtk_table_attach (GTK_TABLE (table1), pred_label, 3, 4, 0, 1,
- GTK_FILL, 0, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (pred_label), 0, 0.5);
-
- pred_combo1 = gtk_combo_new ();
- gtk_widget_show (pred_combo1);
- gtk_table_attach (GTK_TABLE (table1), pred_combo1, 3, 4, 1, 2,
- 0, 0, 0, 0);
- gtk_widget_set_usize (pred_combo1, 92, -1);
- gtkut_combo_set_items (GTK_COMBO (pred_combo1),
- _("contains"), _("not contain"), NULL);
-
- pred_entry1 = GTK_COMBO (pred_combo1)->entry;
- gtk_entry_set_editable (GTK_ENTRY (pred_entry1), FALSE);
-
- pred_combo2 = gtk_combo_new ();
- gtk_widget_show (pred_combo2);
- gtk_table_attach (GTK_TABLE (table1), pred_combo2, 3, 4, 2, 3,
- 0, 0, 0, 0);
- gtk_widget_set_usize (pred_combo2, 92, -1);
- gtkut_combo_set_items (GTK_COMBO (pred_combo2),
- _("contains"), _("not contain"), NULL);
-
- pred_entry2 = GTK_COMBO (pred_combo2)->entry;
- gtk_entry_set_editable (GTK_ENTRY (pred_entry2), FALSE);
- */
-
- /* destination */
-
- /*
- vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
- gtk_widget_show (vbox2);
- gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0);
-
- dest_hbox = gtk_hbox_new (FALSE, 8);
- gtk_widget_show (dest_hbox);
- gtk_box_pack_start (GTK_BOX (vbox2), dest_hbox, FALSE, TRUE, 0);
-
- dest_radiobtn =
- gtk_radio_button_new_with_label (recv_group, _("Destination"));
- recv_group = gtk_radio_button_group (GTK_RADIO_BUTTON (dest_radiobtn));
- gtk_widget_show (dest_radiobtn);
- gtk_box_pack_start (GTK_BOX (dest_hbox), dest_radiobtn,
- FALSE, FALSE, 0);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dest_radiobtn), TRUE);
- gtk_signal_connect
- (GTK_OBJECT (dest_radiobtn), "toggled",
- GTK_SIGNAL_FUNC (prefs_headers_dest_radio_button_toggled),
- NULL);
-
- dest_entry = gtk_entry_new ();
- gtk_widget_show (dest_entry);
- gtk_widget_set_usize (dest_entry, DEFAULT_ENTRY_WIDTH, -1);
- gtk_box_pack_start (GTK_BOX (dest_hbox), dest_entry, TRUE, TRUE, 0);
- gtk_entry_set_editable (GTK_ENTRY (dest_entry), FALSE);
-
- destsel_btn = gtk_button_new_with_label (_(" Select... "));
- gtk_widget_show (destsel_btn);
- gtk_box_pack_start (GTK_BOX (dest_hbox), destsel_btn, FALSE, FALSE, 0);
- gtk_signal_connect (GTK_OBJECT (destsel_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_headers_select_dest_cb),
- NULL);
-
- PACK_CHECK_BUTTON (dest_hbox, regex_chkbtn, _("Use regex"));
- gtk_widget_set_sensitive(regex_chkbtn, FALSE);
-
- notrecv_radiobtn = gtk_radio_button_new_with_label
- (recv_group, _("Don't receive"));
- recv_group = gtk_radio_button_group
- (GTK_RADIO_BUTTON (notrecv_radiobtn));
- gtk_widget_show (notrecv_radiobtn);
- gtk_box_pack_start (GTK_BOX (vbox2), notrecv_radiobtn, FALSE, FALSE, 0);
- gtk_signal_connect
- (GTK_OBJECT (notrecv_radiobtn), "toggled",
- GTK_SIGNAL_FUNC (prefs_headers_notrecv_radio_button_toggled),
- NULL);
- */
-
- /* register / substitute / delete */
-
- /*
- reg_hbox = gtk_hbox_new (FALSE, 4);
- gtk_widget_show (reg_hbox);
- gtk_box_pack_start (GTK_BOX (vbox1), reg_hbox, FALSE, FALSE, 0);
-
- arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
- gtk_widget_show (arrow);
- gtk_box_pack_start (GTK_BOX (reg_hbox), arrow, FALSE, FALSE, 0);
- gtk_widget_set_usize (arrow, -1, 16);
-
- btn_hbox = gtk_hbox_new (TRUE, 4);
- gtk_widget_show (btn_hbox);
- gtk_box_pack_start (GTK_BOX (reg_hbox), btn_hbox, FALSE, FALSE, 0);
-
- reg_btn = gtk_button_new_with_label (_("Register"));
- gtk_widget_show (reg_btn);
- gtk_box_pack_start (GTK_BOX (btn_hbox), reg_btn, FALSE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (reg_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_headers_register_cb), NULL);
-
- subst_btn = gtk_button_new_with_label (_(" Substitute "));
- gtk_widget_show (subst_btn);
- gtk_box_pack_start (GTK_BOX (btn_hbox), subst_btn, FALSE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (subst_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_headers_substitute_cb),
- NULL);
-
- del_btn = gtk_button_new_with_label (_("Delete"));
- gtk_widget_show (del_btn);
- gtk_box_pack_start (GTK_BOX (btn_hbox), del_btn, FALSE, TRUE, 0);
- gtk_signal_connect (GTK_OBJECT (del_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_headers_delete_cb), NULL);
-
- cond_hbox = gtk_hbox_new (FALSE, 8);
- gtk_widget_show (cond_hbox);
- gtk_box_pack_start (GTK_BOX (vbox1), cond_hbox, TRUE, TRUE, 0);
-
- cond_scrolledwin = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_show (cond_scrolledwin);
- gtk_widget_set_usize (cond_scrolledwin, -1, 150);
- gtk_box_pack_start (GTK_BOX (cond_hbox), cond_scrolledwin,
- TRUE, TRUE, 0);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (cond_scrolledwin),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-
- cond_clist = gtk_clist_new_with_titles(1, title);
- gtk_widget_show (cond_clist);
- gtk_container_add (GTK_CONTAINER (cond_scrolledwin), cond_clist);
- gtk_clist_set_column_width (GTK_CLIST (cond_clist), 0, 80);
- gtk_clist_set_selection_mode (GTK_CLIST (cond_clist),
- GTK_SELECTION_BROWSE);
- GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (cond_clist)->column[0].button,
- GTK_CAN_FOCUS);
- gtk_signal_connect (GTK_OBJECT (cond_clist), "select_row",
- GTK_SIGNAL_FUNC (prefs_headers_select), NULL);
-
- btn_vbox = gtk_vbox_new (FALSE, 8);
- gtk_widget_show (btn_vbox);
- gtk_box_pack_start (GTK_BOX (cond_hbox), btn_vbox, FALSE, FALSE, 0);
-
- up_btn = gtk_button_new_with_label (_("Up"));
- gtk_widget_show (up_btn);
- gtk_box_pack_start (GTK_BOX (btn_vbox), up_btn, FALSE, FALSE, 0);
- gtk_signal_connect (GTK_OBJECT (up_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_headers_up), NULL);
-
- down_btn = gtk_button_new_with_label (_("Down"));
- gtk_widget_show (down_btn);
- gtk_box_pack_start (GTK_BOX (btn_vbox), down_btn, FALSE, FALSE, 0);
- gtk_signal_connect (GTK_OBJECT (down_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_headers_down), NULL);
- */
-
hdr_label = gtk_label_new (_("Header"));
gtk_widget_show (hdr_label);
gtk_table_attach (GTK_TABLE (table1), hdr_label, 0, 1, 0, 1,
headers.hdr_entry = GTK_COMBO (hdr_combo)->entry;
headers.key_entry = key_entry;
headers.headers_clist = headers_clist;
-
- /*
- headers.hdr_combo1 = hdr_combo1;
- headers.hdr_combo2 = hdr_combo2;
- headers.hdr_entry1 = GTK_COMBO (hdr_combo1)->entry;
- headers.hdr_entry2 = GTK_COMBO (hdr_combo2)->entry;
- headers.key_entry1 = key_entry1;
- headers.key_entry2 = key_entry2;
- headers.pred_combo1 = pred_combo1;
- headers.pred_combo2 = pred_combo2;
- headers.pred_entry1 = pred_entry1;
- headers.pred_entry2 = pred_entry2;
- headers.op_combo = op_combo;
- headers.op_entry = op_entry;
-
- headers.dest_entry = dest_entry;
- headers.destsel_btn = destsel_btn;
- headers.dest_radiobtn = dest_radiobtn;
- headers.notrecv_radiobtn = notrecv_radiobtn;
- headers.regex_chkbtn = regex_chkbtn;
-
- headers.headers_clist = headers_clist;
- */
}
void prefs_headers_read_config(PrefsAccount * ac)
#define BUFFSIZE 8192
+/*
+ procheader_get_one_field
+ - reads fp and puts the header and the corresponding content into buf
+ if one of these is one of hentry table.
+ - if hentry is NULL, ignores no headers
+ */
+
gint procheader_get_one_field(gchar *buf, gint len, FILE *fp,
HeaderEntry hentry[])
{
#include "html.h"
#include "compose.h"
#include "addressbook.h"
+#include "headers_display.h"
+#include "prefs_display_headers.h"
#define FONT_LOAD(font, s) \
{ \
H_ORGANIZATION = 11,
};
+static gboolean hdrequal(char * hdr1, char * hdr2)
+{
+ int len1;
+ int len2;
+
+ len1 = strlen(hdr1);
+ len2 = strlen(hdr2);
+ if (hdr1[len1 - 1] == ':')
+ len1--;
+ if (hdr2[len2 - 1] == ':')
+ len2--;
+ if (len1 != len2)
+ return 0;
+ return (strncasecmp(hdr1, hdr2, len1) == 0);
+}
+
static GPtrArray *textview_scan_header(TextView *textview, FILE *fp)
{
+ /*
static HeaderEntry hentry[] = {{"Date:", NULL, FALSE},
{"From:", NULL, TRUE},
{"To:", NULL, FALSE},
{"User-Agent:", NULL, TRUE},
{"Organization:", NULL, TRUE},
{NULL, NULL, FALSE}};
+ */
gchar buf[BUFFSIZE], tmp[BUFFSIZE];
gint hnum;
HeaderEntry *hp;
GPtrArray *headers;
+ GSList * l;
+
+ int i;
+ GPtrArray *sorted_headers;
g_return_val_if_fail(fp != NULL, NULL);
headers = g_ptr_array_new();
+ /*
while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry))
!= -1) {
Header *header;
g_ptr_array_add(headers, header);
}
+ */
+ // while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) {
+ while (procheader_get_one_field(buf, sizeof(buf), fp, NULL) != -1) {
+ gchar * p;
+ Header *header;
+
+ if (*buf == ':') continue;
+ for (p = buf; *p && *p != ' '; p++) {
+ if (*p == ':') {
+ header = g_new(Header, 1);
+ header->name = g_strndup(buf, p - buf + 1);
+ p++;
+ /* while (*p == ' ' || *p == '\t') p++; */
+ conv_unmime_header(tmp, sizeof(tmp), p, NULL);
+ header->body = g_strdup(tmp);
+
+ g_ptr_array_add(headers, header);
+ break;
+ }
+ }
+ }
- return headers;
+ sorted_headers = g_ptr_array_new();
+ for(l = prefs_display_headers ; l != NULL ; l = g_slist_next(l)) {
+ HeaderDisplayProp * dp = (HeaderDisplayProp *) l->data;
+ for(i = 0 ; i < headers->len ; i++) {
+ Header * header = g_ptr_array_index(headers, i);
+ if (hdrequal(header->name, dp->name)) {
+ if (dp->hidden) {
+ g_ptr_array_remove_index(headers, i);
+ g_free(header->body);
+ g_free(header->name);
+ g_free(header);
+ i--;
+ }
+ else {
+ g_ptr_array_add(sorted_headers,
+ header);
+ g_ptr_array_remove_index(headers, i);
+ i--;
+ }
+ }
+ }
+ }
+
+ for(i = 0 ; i < headers->len ; i++) {
+ Header * header = g_ptr_array_index(headers, i);
+ g_ptr_array_add(sorted_headers, header);
+ }
+
+ g_ptr_array_free(headers, TRUE);
+
+ return sorted_headers;
}
static void textview_show_header(TextView *textview, GPtrArray *headers)