diff options
author | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2007-08-22 19:43:50 +0000 |
---|---|---|
committer | Daniel Silverstone <dsilvers@netsurf-browser.org> | 2007-08-22 19:43:50 +0000 |
commit | 65c8a8d8f21b8a43b324af392ec4836f84c1030c (patch) | |
tree | ec94c648057fd355b15aee8752fc6b8dd6192880 /gtk | |
parent | 21db9de5f8ede54e042a111f6a753cd43816530b (diff) | |
download | netsurf-65c8a8d8f21b8a43b324af392ec4836f84c1030c.tar.gz netsurf-65c8a8d8f21b8a43b324af392ec4836f84c1030c.tar.bz2 |
Ensure that when directly setting scroll extents, we clamp them to the GtkAdjustment range properly
svn path=/trunk/netsurf/; revision=3530
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtk_window.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gtk/gtk_window.c b/gtk/gtk_window.c index e59e5c081..41a43c48c 100644 --- a/gtk/gtk_window.c +++ b/gtk/gtk_window.c @@ -629,12 +629,21 @@ void gui_window_set_scroll(struct gui_window *g, int sx, int sy) { GtkAdjustment *vadj = gtk_viewport_get_vadjustment(g->viewport); GtkAdjustment *hadj = gtk_viewport_get_hadjustment(g->viewport); - + gdouble vlower, vpage, vupper, hlower, hpage, hupper, x = (double)sx, y = (double)sy; + assert(vadj); assert(hadj); - - gtk_adjustment_set_value(vadj, (double)sy); - gtk_adjustment_set_value(hadj, (double)sx); + + g_object_get(vadj, "page-size", &vpage, "lower", &vlower, "upper", &vupper, NULL); + g_object_get(hadj, "page-size", &hpage, "lower", &hlower, "upper", &hupper, NULL); + + if (x < hlower) x = hlower; + if (x > (hupper - hpage)) x = hupper - hpage; + if (y < vlower) y = vlower; + if (y > (vupper - vpage)) y = vupper - vpage; + + gtk_adjustment_set_value(vadj, y); + gtk_adjustment_set_value(hadj, x); } |