2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2001 Hiroyuki Yamamoto
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 #include <gdk/gdkkeysyms.h>
24 #include <gtk/gtkwidget.h>
25 #include <gtk/gtkwindow.h>
26 #include <gtk/gtksignal.h>
27 #include <gtk/gtkcontainer.h>
28 #include <gtk/gtkscrolledwindow.h>
29 #include <gtk/gtktext.h>
35 #include "headerwindow.h"
36 #include "mainwindow.h"
37 #include "procheader.h"
40 #include "prefs_common.h"
43 static GdkFont
*normalfont
;
44 static GdkFont
*boldfont
;
46 static void key_pressed(GtkWidget
*widget
, GdkEventKey
*event
,
47 HeaderWindow
*headerwin
);
49 HeaderWindow
*header_window_create(void)
51 HeaderWindow
*headerwin
;
53 GtkWidget
*scrolledwin
;
56 debug_print(_("Creating header window...\n"));
57 headerwin
= g_new0(HeaderWindow
, 1);
59 window
= gtk_window_new(GTK_WINDOW_TOPLEVEL
);
60 gtk_window_set_title(GTK_WINDOW(window
), _("All header"));
61 gtk_window_set_policy(GTK_WINDOW(window
), TRUE
, TRUE
, FALSE
);
62 gtk_widget_set_usize(window
, 600, 500);
63 gtk_signal_connect(GTK_OBJECT(window
), "delete_event",
64 GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete
), NULL
);
65 gtk_signal_connect(GTK_OBJECT(window
), "key_press_event",
66 GTK_SIGNAL_FUNC(key_pressed
), headerwin
);
67 gtk_widget_realize(window
);
69 scrolledwin
= gtk_scrolled_window_new(NULL
, NULL
);
70 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin
),
71 GTK_POLICY_NEVER
, GTK_POLICY_ALWAYS
);
72 gtk_container_add(GTK_CONTAINER(window
), scrolledwin
);
73 gtk_widget_show(scrolledwin
);
75 text
= gtk_text_new(gtk_scrolled_window_get_hadjustment
76 (GTK_SCROLLED_WINDOW(scrolledwin
)),
77 gtk_scrolled_window_get_vadjustment
78 (GTK_SCROLLED_WINDOW(scrolledwin
)));
79 gtk_container_add(GTK_CONTAINER(scrolledwin
), text
);
80 gtk_widget_show(text
);
82 headerwin
->window
= window
;
83 headerwin
->scrolledwin
= scrolledwin
;
84 headerwin
->text
= text
;
89 void header_window_init(HeaderWindow
*headerwin
)
92 normalfont = gdk_fontset_load(prefs_common.normalfont); */
94 boldfont
= gdk_fontset_load(BOLD_FONT
);
97 void header_window_show(HeaderWindow
*headerwin
, MsgInfo
*msginfo
)
101 gchar buf
[BUFFSIZE
], tmp
[BUFFSIZE
];
102 GtkText
*text
= GTK_TEXT(headerwin
->text
);
105 g_return_if_fail(msginfo
!= NULL
);
107 file
= procmsg_get_message_file_path(msginfo
);
108 if ((fp
= fopen(file
, "r")) == NULL
) {
109 FILE_OP_ERROR(file
, "fopen");
114 debug_print(_("Displaying the header of %s ...\n"), file
);
116 g_snprintf(buf
, sizeof(buf
), _("%s - All header"), file
);
117 gtk_window_set_title(GTK_WINDOW(headerwin
->window
), buf
);
120 gtk_text_freeze(text
);
121 gtk_text_backward_delete(text
, gtk_text_get_length(text
));
123 gtk_text_freeze(text
);
125 parse_next
= MSG_IS_QUEUED(msginfo
->flags
);
131 val
= procheader_get_one_field(buf
, sizeof(buf
), fp
, NULL
);
135 gtk_text_insert(text
, normalfont
, NULL
, NULL
,
141 conv_unmime_header(tmp
, sizeof(tmp
), buf
, NULL
);
142 if ((p
= strchr(tmp
, ':')) != NULL
) {
143 gtk_text_insert(text
, boldfont
, NULL
, NULL
,
145 gtk_text_insert(text
, normalfont
, NULL
, NULL
,
148 gtk_text_insert(text
, normalfont
, NULL
, NULL
, tmp
, -1);
149 gtk_text_insert(text
, NULL
, NULL
, NULL
, "\n", 1);
156 void header_window_show_cb(gpointer data
, guint action
, GtkWidget
*widget
)
158 MainWindow
*mainwin
= data
;
159 GtkCTreeNode
*node
= mainwin
->summaryview
->selected
;
163 msginfo
= gtk_ctree_node_get_row_data
164 (GTK_CTREE(mainwin
->summaryview
->ctree
), node
);
165 header_window_show(mainwin
->headerwin
, msginfo
);
168 gtk_widget_hide(mainwin
->headerwin
->window
);
169 gtk_widget_show(mainwin
->headerwin
->window
);
172 static void key_pressed(GtkWidget
*widget
, GdkEventKey
*event
,
173 HeaderWindow
*headerwin
)
175 if (event
&& event
->keyval
== GDK_Escape
)
176 gtk_widget_hide(headerwin
->window
);