# HG changeset patch # User Sean Egan # Date 1182979725 0 # Node ID dd8602271dc5ddd16978bf5608c4e22b041d5edb # Parent e92ae9e3d9feaaf18a63d398e2394c3927c366f5# Parent 477a6ddd56a021bc0dd34bd67c4563dff26dac49 merge of 'e5b0331c61159ba11ebeab0839f13f073a8d4b22' and 'e6525b99c7f300bc3b845ad7f5f7597daca5dc9a' diff -r e92ae9e3d9fe -r dd8602271dc5 finch/gntblist.c --- a/finch/gntblist.c Wed Jun 27 20:43:47 2007 +0000 +++ b/finch/gntblist.c Wed Jun 27 21:28:45 2007 +0000 @@ -1422,9 +1422,10 @@ str = make_sure_text_fits(str); gnt_util_get_text_bound(str->str, &w, &h); - h = MAX(2, h); + h = MAX(1, h); tv = gnt_text_view_new(); gnt_widget_set_size(tv, w + 1, h); + gnt_text_view_set_flag(GNT_TEXT_VIEW(tv), GNT_TEXT_VIEW_NO_SCROLL); gnt_box_add_widget(GNT_BOX(box), tv); gnt_widget_set_position(box, x, y); diff -r e92ae9e3d9fe -r dd8602271dc5 finch/libgnt/gntstyle.c --- a/finch/libgnt/gntstyle.c Wed Jun 27 20:43:47 2007 +0000 +++ b/finch/libgnt/gntstyle.c Wed Jun 27 21:28:45 2007 +0000 @@ -45,7 +45,7 @@ return str_styles[style]; } -const char *gnt_style_get_from_name(const char *group, const char *key) +char *gnt_style_get_from_name(const char *group, const char *key) { #if GLIB_CHECK_VERSION(2,6,0) return g_key_file_get_value(gkfile, group, key, NULL); diff -r e92ae9e3d9fe -r dd8602271dc5 finch/libgnt/gntstyle.h --- a/finch/libgnt/gntstyle.h Wed Jun 27 20:43:47 2007 +0000 +++ b/finch/libgnt/gntstyle.h Wed Jun 27 21:28:45 2007 +0000 @@ -45,7 +45,7 @@ const char *gnt_style_get(GntStyle style); -const char *gnt_style_get_from_name(const char *group, const char *key); +char *gnt_style_get_from_name(const char *group, const char *key); /** * diff -r e92ae9e3d9fe -r dd8602271dc5 finch/libgnt/gnttextview.c --- a/finch/libgnt/gnttextview.c Wed Jun 27 20:43:47 2007 +0000 +++ b/finch/libgnt/gnttextview.c Wed Jun 27 21:28:45 2007 +0000 @@ -65,6 +65,7 @@ int i = 0; GList *lines; int rows, scrcol; + gboolean has_scroll = !(view->flags & GNT_TEXT_VIEW_NO_SCROLL); wbkgd(widget->window, COLOR_PAIR(GNT_COLOR_NORMAL)); werase(widget->window); @@ -111,12 +112,12 @@ *end = back; } wattroff(widget->window, A_UNDERLINE | A_BLINK | A_REVERSE); - whline(widget->window, ' ', widget->priv.width - line->length - 1); + whline(widget->window, ' ', widget->priv.width - line->length - has_scroll); } scrcol = widget->priv.width - 1; rows = widget->priv.height - 2; - if (rows > 0) + if (has_scroll && rows > 0) { int total = g_list_length(g_list_first(view->list)); int showing, position, up, down; @@ -143,11 +144,13 @@ ACS_CKBOARD | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D), showing); } - mvwaddch(widget->window, 0, scrcol, - (lines ? ACS_UARROW : ' ') | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); - mvwaddch(widget->window, widget->priv.height - 1, scrcol, - ((view->list && view->list->prev) ? ACS_DARROW : ' ') | - COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); + if (has_scroll) { + mvwaddch(widget->window, 0, scrcol, + (lines ? ACS_UARROW : ' ') | COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); + mvwaddch(widget->window, widget->priv.height - 1, scrcol, + ((view->list && view->list->prev) ? ACS_DARROW : ' ') | + COLOR_PAIR(GNT_COLOR_HIGHLIGHT_D)); + } GNTDEBUG; } @@ -483,6 +486,8 @@ GList *list = view->list; GntTextLine *line; int len; + gboolean has_scroll = !(view->flags & GNT_TEXT_VIEW_NO_SCROLL); + gboolean wrap_word = !(view->flags & GNT_TEXT_VIEW_WRAP_CHAR); if (text == NULL || *text == '\0') return; @@ -519,7 +524,7 @@ } line = view->list->data; - if (line->length == widget->priv.width - 1) { + if (line->length == widget->priv.width - has_scroll) { /* The last added line was exactly the same width as the widget */ line = g_new0(GntTextLine, 1); line->soft = TRUE; @@ -528,15 +533,15 @@ if ((end = strchr(start, '\r')) != NULL || (end = strchr(start, '\n')) != NULL) { - len = gnt_util_onscreen_width(start, end - 1); - if (len >= widget->priv.width - line->length - 1) { + len = gnt_util_onscreen_width(start, end - has_scroll); + if (len >= widget->priv.width - line->length - has_scroll) { end = NULL; } } if (end == NULL) end = gnt_util_onscreen_width_to_pointer(start, - widget->priv.width - line->length - 1, &len); + widget->priv.width - line->length - has_scroll, &len); /* Try to append to the previous segment if possible */ if (line->segments) { @@ -554,7 +559,7 @@ } oldl = line; - if (*end && *end != '\n' && *end != '\r') { + if (wrap_word && *end && *end != '\n' && *end != '\r') { const char *tmp = end; while (end && *end != '\n' && *end != '\r' && !g_ascii_isspace(*end)) { end = g_utf8_find_prev_char(seg->start + view->string->str, end); @@ -783,3 +788,8 @@ g_signal_connect(G_OBJECT(widget), "key_pressed", G_CALLBACK(scroll_tv), view); } +void gnt_text_view_set_flag(GntTextView *view, GntTextViewFlag flag) +{ + view->flags |= flag; +} + diff -r e92ae9e3d9fe -r dd8602271dc5 finch/libgnt/gnttextview.h --- a/finch/libgnt/gnttextview.h Wed Jun 27 20:43:47 2007 +0000 +++ b/finch/libgnt/gnttextview.h Wed Jun 27 21:28:45 2007 +0000 @@ -47,6 +47,11 @@ typedef struct _GntTextViewPriv GntTextViewPriv; typedef struct _GntTextViewClass GntTextViewClass; +typedef enum { + GNT_TEXT_VIEW_NO_SCROLL = 1 << 0, + GNT_TEXT_VIEW_WRAP_CHAR = 1 << 1, +} GntTextViewFlag; + struct _GntTextView { GntWidget parent; @@ -55,6 +60,7 @@ GList *list; /* List of GntTextLine */ GList *tags; /* A list of tags */ + GntTextViewFlag flags; }; typedef enum @@ -177,6 +183,14 @@ */ void gnt_text_view_attach_scroll_widget(GntTextView *view, GntWidget *widget); +/** + * Set a GntTextViewFlag for the textview widget. + * + * @param view The textview widget + * @param flag The flag to set + */ +void gnt_text_view_set_flag(GntTextView *view, GntTextViewFlag flag); + G_END_DECLS #endif /* GNT_TEXT_VIEW_H */ diff -r e92ae9e3d9fe -r dd8602271dc5 finch/libgnt/wms/irssi.c --- a/finch/libgnt/wms/irssi.c Wed Jun 27 20:43:47 2007 +0000 +++ b/finch/libgnt/wms/irssi.c Wed Jun 27 21:28:45 2007 +0000 @@ -274,7 +274,7 @@ void gntwm_init(GntWM **wm) { - const char *style = NULL; + char *style = NULL; Irssi *irssi; irssi = g_object_new(TYPE_IRSSI, NULL); @@ -282,9 +282,11 @@ style = gnt_style_get_from_name("irssi", "split-v"); irssi->vert = style ? atoi(style) : 1; + g_free(style); style = gnt_style_get_from_name("irssi", "split-h"); irssi->horiz = style ? atoi(style) : 1; + g_free(style); irssi->vert = MAX(irssi->vert, 1); irssi->horiz = MAX(irssi->horiz, 1);