gaim/gaim

bf13e1214c1d
Parents 6b88a193cd97
Children a4c1f1255c0c
this should fix some annoying scrolling bugs, its what i initially did to
HEAD, before adding the smooth scrolling.
--- a/src/gtkimhtml.c Fri Apr 08 23:26:11 2005 -0400
+++ b/src/gtkimhtml.c Sat Apr 09 10:02:59 2005 -0400
@@ -953,6 +953,9 @@
GList *scalables;
GSList *l;
+ if (imhtml->scroll_src)
+ g_source_remove(imhtml->scroll_src);
+
g_hash_table_destroy(imhtml->smiley_data);
gtk_smiley_tree_destroy(imhtml->default_smilies);
gdk_cursor_unref(imhtml->hand_cursor);
@@ -2016,20 +2019,23 @@
}
}
+gboolean scroll_idle_cb(gpointer data)
+{
+ GtkTextView *imhtml = data;
+ GtkAdjustment *adj;
+
+ gaim_debug_info("gtkimhtml", "in scroll_idle_cb\n");
+ adj = GTK_TEXT_VIEW(imhtml)->vadjustment;
+ gtk_adjustment_set_value(adj, adj->upper - adj->page_size);
+
+ return FALSE;
+}
+
void gtk_imhtml_scroll_to_end(GtkIMHtml *imhtml)
{
- GtkTextIter iter;
- /* If this seems backwards at first glance, well it's not.
- * It means scroll such that the mark is closest to the top,
- * and closest to the right as possible. Remember kids, you have
- * to scroll left to move a given spot closest to the right,
- * and scroll down to move a spot closest to the top.
- */
- gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
- gtk_text_iter_set_line_offset(&iter, 0);
- gtk_text_buffer_move_mark(imhtml->text_buffer, imhtml->scrollpoint, &iter);
- gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(imhtml), imhtml->scrollpoint,
- 0, TRUE, 1.0, 0.0);
+ if (imhtml->scroll_src)
+ g_source_remove(imhtml->scroll_src);
+ imhtml->scroll_src = g_idle_add_full(GTK_TEXT_VIEW_PRIORITY_VALIDATE + 10, scroll_idle_cb, imhtml, NULL);
}
void gtk_imhtml_insert_html_at_iter(GtkIMHtml *imhtml,
--- a/src/gtkimhtml.h Fri Apr 08 23:26:11 2005 -0400
+++ b/src/gtkimhtml.h Sat Apr 09 10:02:59 2005 -0400
@@ -122,6 +122,7 @@
GSList *im_images;
GtkIMHtmlFuncs *funcs;
+ guint scroll_src;
};
struct _GtkIMHtmlClass {