Mercurial > pidgin
changeset 15317:d928cf5ead1b
[gaim-migrate @ 18108]
bug fix. Breaks 'don't scroll if you're not already scrolled at the bottom' and selecton. I'll look at those tomorrow, but amd committing it in case someone knowledgable wants to beat me to it.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Thu, 11 Jan 2007 08:43:34 +0000 |
parents | a92c64f06995 |
children | b17a907065cc |
files | gtk/gtkimhtml.c gtk/gtkimhtml.h |
diffstat | 2 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk/gtkimhtml.c Thu Jan 11 07:43:03 2007 +0000 +++ b/gtk/gtkimhtml.c Thu Jan 11 08:43:34 2007 +0000 @@ -1220,6 +1220,8 @@ g_slist_free(imhtml->im_images); g_free(imhtml->protocol_name); g_free(imhtml->search_string); + g_object_unref(imhtml->empty_buffer); + g_object_unref(imhtml->text_buffer); G_OBJECT_CLASS(parent_class)->finalize (object); } @@ -1317,6 +1319,7 @@ { GtkTextIter iter; imhtml->text_buffer = gtk_text_buffer_new(NULL); + imhtml->empty_buffer = gtk_text_buffer_new(NULL); gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter); gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR); @@ -2355,12 +2358,21 @@ } } +static gboolean +set_adj_idle_cb(gpointer data) +{ + GtkIMHtml *imhtml = data; + gtk_adjustment_set_value(GTK_TEXT_VIEW(imhtml)->vadjustment, imhtml->adj); + return FALSE; +} + void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml, const gchar *text, GtkIMHtmlOptions options, GtkTextIter *iter) { GdkRectangle rect; + GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment; gint pos = 0; gchar *ws; gchar *tag; @@ -2372,6 +2384,7 @@ gchar *amp; gint len_protocol; + guint bold = 0, italics = 0, underline = 0, @@ -2395,6 +2408,9 @@ ws = g_malloc(len + 1); ws[0] = 0; + imhtml->adj = gtk_adjustment_get_value(adj); + gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->empty_buffer); + while (pos < len) { if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) { c++; @@ -3052,6 +3068,8 @@ gtk_imhtml_close_tags(imhtml, iter); object = g_object_ref(G_OBJECT(imhtml)); + gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer); + g_idle_add(set_adj_idle_cb, imhtml); g_signal_emit(object, signals[UPDATE_FORMAT], 0); g_object_unref(object);
--- a/gtk/gtkimhtml.h Thu Jan 11 07:43:03 2007 +0000 +++ b/gtk/gtkimhtml.h Thu Jan 11 08:43:34 2007 +0000 @@ -79,6 +79,7 @@ struct _GtkIMHtml { GtkTextView text_view; GtkTextBuffer *text_buffer; + GtkTextBuffer *empty_buffer; GdkCursor *hand_cursor; GdkCursor *arrow_cursor; GdkCursor *text_cursor; @@ -87,6 +88,7 @@ char *protocol_name; guint scroll_src; GTimer *scroll_time; + gdouble adj; gboolean show_comments;