balsa r7937 - in trunk: . src
- From: PeterB svn gnome org
- To: svn-commits-list gnome org
- Subject: balsa r7937 - in trunk: . src
- Date: Tue, 3 Jun 2008 02:17:27 +0000 (UTC)
Author: PeterB
Date: Tue Jun 3 02:17:27 2008
New Revision: 7937
URL: http://svn.gnome.org/viewvc/balsa?rev=7937&view=rev
Log:
let GtkTextView wrap headers
Modified:
trunk/ChangeLog
trunk/src/balsa-mime-widget-message.c
Modified: trunk/src/balsa-mime-widget-message.c
==============================================================================
--- trunk/src/balsa-mime-widget-message.c (original)
+++ trunk/src/balsa-mime-widget-message.c Tue Jun 3 02:17:27 2008
@@ -474,11 +474,20 @@
gtk_widget_show(menu_item);
}
+/* Indents in pixels: */
+#define BALSA_ONE_CHAR 7
+#define BALSA_INDENT_CHARS 15
+#define BALSA_TAB1 (BALSA_ONE_CHAR * BALSA_INDENT_CHARS)
+#define BALSA_TAB2 (BALSA_TAB1 + BALSA_ONE_CHAR)
+
static GtkWidget *
bm_header_widget_new(BalsaMessage * bm, GtkWidget * buttons)
{
GtkWidget *widget;
GtkWidget *text_view;
+ GtkTextView *view;
+ GtkTextBuffer *buffer;
+ PangoTabArray *tab;
GtkWidget *hbox;
widget = gtk_frame_new(NULL);
@@ -499,12 +508,29 @@
G_CALLBACK(balsa_mime_widget_unlimit_focus),
(gpointer) bm);
bm_modify_font_from_string(text_view, balsa_app.message_font);
- gtk_text_view_set_editable(GTK_TEXT_VIEW(text_view), FALSE);
- gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_view),
- BMW_HEADER_MARGIN_LEFT);
- gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_view),
- BMW_HEADER_MARGIN_RIGHT);
- gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_view), GTK_WRAP_WORD);
+
+ view = GTK_TEXT_VIEW(text_view);
+ gtk_text_view_set_editable(view, FALSE);
+ gtk_text_view_set_left_margin(view, BMW_HEADER_MARGIN_LEFT);
+ gtk_text_view_set_right_margin(view, BMW_HEADER_MARGIN_RIGHT);
+ gtk_text_view_set_wrap_mode(view, GTK_WRAP_WORD);
+
+ tab = pango_tab_array_new_with_positions(2, TRUE,
+ PANGO_TAB_LEFT, BALSA_TAB1,
+ PANGO_TAB_LEFT, BALSA_TAB2);
+ gtk_text_view_set_tabs(view, tab);
+ pango_tab_array_free(tab);
+
+ buffer = gtk_text_view_get_buffer(view);
+ gtk_text_buffer_create_tag(buffer, "subject-font",
+ "font", balsa_app.subject_font,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "hanging-indent",
+ "indent", -BALSA_TAB1,
+ NULL);
+ gtk_text_buffer_create_tag(buffer, "url",
+ "foreground-gdk", &balsa_app.url_color,
+ NULL);
g_signal_connect(text_view, "key_press_event",
G_CALLBACK(balsa_mime_widget_key_press_event), bm);
@@ -515,97 +541,67 @@
g_object_set_data(G_OBJECT(widget), BALSA_MESSAGE_TEXT_VIEW,
text_view);
- gtk_text_buffer_create_tag
- (gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)), "url",
- "foreground-gdk", &balsa_app.url_color, NULL);
return widget;
}
-
-/* Indents in pixels: */
-#define BALSA_ONE_CHAR 7
-#define BALSA_INDENT_CHARS 15
-#define BALSA_TAB1 (BALSA_ONE_CHAR * BALSA_INDENT_CHARS)
-#define BALSA_TAB2 (BALSA_TAB1 + BALSA_ONE_CHAR)
-
static void
add_header_gchar(BalsaMessage * bm, GtkTextView * view,
const gchar * header, const gchar * label,
const gchar * value)
{
static const gchar * all_tag_const = N_("... [truncated]");
- PangoTabArray *tab;
GtkTextBuffer *buffer;
- GtkTextTag *font_tag;
GtkTextIter insert;
+ const gchar *font;
gboolean truncated = FALSE;
if (!(bm->shown_headers == HEADERS_ALL ||
libbalsa_find_word(header, balsa_app.selected_headers)))
return;
- tab = pango_tab_array_new_with_positions(2, TRUE,
- PANGO_TAB_LEFT, BALSA_TAB1,
- PANGO_TAB_LEFT, BALSA_TAB2);
- gtk_text_view_set_tabs(view, tab);
- pango_tab_array_free(tab);
-
/* always display the label in the predefined font */
buffer = gtk_text_view_get_buffer(view);
- font_tag = NULL;
- if (strcmp(header, "subject") == 0)
- font_tag =
- gtk_text_buffer_create_tag(buffer, NULL,
- "font", balsa_app.subject_font,
- NULL);
gtk_text_buffer_get_iter_at_mark(buffer, &insert,
gtk_text_buffer_get_insert(buffer));
- if (gtk_text_buffer_get_char_count(buffer))
+ if (gtk_text_buffer_get_char_count(buffer) > 0)
gtk_text_buffer_insert(buffer, &insert, "\n", 1);
- gtk_text_buffer_insert_with_tags(buffer, &insert,
- label, -1, font_tag, NULL);
+ font = strcmp(header, "subject") == 0 ? "subject-font" : NULL;
+ gtk_text_buffer_insert_with_tags_by_name(buffer, &insert, label, -1,
+ "hanging-indent", font,
+ NULL);
if (value && *value != '\0') {
- GtkTextTagTable *table;
- GtkTextTag *indent_tag;
- gchar *wrapped_value;
-
- table = gtk_text_buffer_get_tag_table(buffer);
- indent_tag = gtk_text_tag_table_lookup(table, "indent");
- if (!indent_tag)
- indent_tag =
- gtk_text_buffer_create_tag(buffer, "indent",
- "indent", BALSA_TAB1, NULL);
+ gchar *sanitized;
+ const gchar *all_tag = _(all_tag_const);
gtk_text_buffer_insert(buffer, &insert, "\t", 1);
- wrapped_value = g_strdup(value);
- libbalsa_utf8_sanitize(&wrapped_value,
- balsa_app.convert_unknown_8bit, NULL);
+
+ sanitized = g_strdup(value);
+ libbalsa_utf8_sanitize(&sanitized,
+ balsa_app.convert_unknown_8bit, NULL);
if(bm->shown_headers != HEADERS_ALL) {
static const gssize MAXLEN = 160;
- const gchar *all_tag = _(all_tag_const);
ssize_t all_tag_len = strlen(all_tag)+1;
glong header_length = g_utf8_strlen(value, MAXLEN+all_tag_len+5);
if(header_length > MAXLEN+all_tag_len) {
- gchar *p = g_utf8_offset_to_pointer(wrapped_value, MAXLEN);
+ gchar *p = g_utf8_offset_to_pointer(sanitized, MAXLEN);
*p = '\0';
truncated = TRUE;
}
}
- libbalsa_wrap_string(wrapped_value,
- balsa_app.wraplength - BALSA_INDENT_CHARS);
- gtk_text_buffer_insert_with_tags(buffer, &insert, wrapped_value,
- -1, indent_tag, font_tag, NULL);
- if(truncated) {
- GtkTextTag *url_tag = gtk_text_tag_table_lookup(table, "url");
- gtk_text_buffer_insert_with_tags(buffer, &insert, _(all_tag_const),
- -1, indent_tag, url_tag, NULL);
- }
- g_free(wrapped_value);
+ gtk_text_buffer_insert_with_tags_by_name(buffer, &insert,
+ sanitized, -1,
+ font, NULL);
+ g_free(sanitized);
+
+ if (truncated)
+ gtk_text_buffer_insert_with_tags_by_name(buffer, &insert,
+ all_tag, -1,
+ "url", NULL);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]