Mercurial > pidgin
diff src/gtkimhtml.c @ 12553:9d7fb0b21d9f
[gaim-migrate @ 14871]
one reactionary pref down, eleventy billion to go
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Mon, 19 Dec 2005 05:55:30 +0000 |
parents | a88ca6da0b38 |
children | e856f985a0b9 |
line wrap: on
line diff
--- a/src/gtkimhtml.c Mon Dec 19 01:19:56 2005 +0000 +++ b/src/gtkimhtml.c Mon Dec 19 05:55:30 2005 +0000 @@ -2313,7 +2313,7 @@ } if (!(options & GTK_IMHTML_NO_SCROLL)) { - gtk_imhtml_scroll_to_end(imhtml); + gtk_imhtml_scroll_to_end(imhtml, (options & GTK_IMHTML_USE_SMOOTHSCROLLING)); } } @@ -2346,21 +2346,37 @@ return TRUE; } -static gboolean scroll_idle_cb(gpointer data) +static gboolean smooth_scroll_idle_cb(gpointer data) { GtkIMHtml *imhtml = data; imhtml->scroll_src = g_timeout_add(SCROLL_DELAY, scroll_cb, imhtml); return FALSE; } -void gtk_imhtml_scroll_to_end(GtkIMHtml *imhtml) +static gboolean scroll_idle_cb(gpointer data) +{ + GtkIMHtml *imhtml = data; + GtkAdjustment *adj = GTK_TEXT_VIEW(imhtml)->vadjustment; + if(adj) { + gtk_adjustment_set_value(adj, adj->upper - adj->page_size); + } + imhtml->scroll_src = 0; + return FALSE; +} + +void gtk_imhtml_scroll_to_end(GtkIMHtml *imhtml, gboolean smooth) { if (imhtml->scroll_time) g_timer_destroy(imhtml->scroll_time); - imhtml->scroll_time = g_timer_new(); if (imhtml->scroll_src) g_source_remove(imhtml->scroll_src); - imhtml->scroll_src = g_idle_add_full(G_PRIORITY_LOW, scroll_idle_cb, imhtml, NULL); + if(smooth) { + imhtml->scroll_time = g_timer_new(); + imhtml->scroll_src = g_idle_add_full(G_PRIORITY_LOW, smooth_scroll_idle_cb, imhtml, NULL); + } else { + imhtml->scroll_time = NULL; + imhtml->scroll_src = g_idle_add_full(G_PRIORITY_LOW, scroll_idle_cb, imhtml, NULL); + } } void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml,