aboutsummaryrefslogtreecommitdiffhomepage
path: root/uzbl.c
diff options
context:
space:
mode:
authorGravatar Dequis <dx@dxzone.com.ar>2009-06-22 16:51:11 -0300
committerGravatar Dequis <dx@dxzone.com.ar>2009-06-22 16:51:11 -0300
commit432aaedb4078bea825451e4df1f681e58456f065 (patch)
tree9cfbcb6eee4c0c32d945c8af54fb4dbf3555f72c /uzbl.c
parentbefe76fad5ebea3f0acbd7da74761863f65637c1 (diff)
parent12af838675fa5eae32a8b97cf8fe81c2c812639f (diff)
Merge commit 'dieterbe/experimental' into experimental
Diffstat (limited to 'uzbl.c')
-rw-r--r--uzbl.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/uzbl.c b/uzbl.c
index 733fef9..af2ea76 100644
--- a/uzbl.c
+++ b/uzbl.c
@@ -445,12 +445,24 @@ download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) {
/* scroll a bar in a given direction */
static void
scroll (GtkAdjustment* bar, GArray *argv) {
- gdouble amount;
gchar *end;
+ gdouble max_value;
- amount = g_ascii_strtod(g_array_index(argv, gchar*, 0), &end);
- if (*end == '%') amount = gtk_adjustment_get_page_size(bar) * amount * 0.01;
- gtk_adjustment_set_value (bar, gtk_adjustment_get_value(bar)+amount);
+ gdouble page_size = gtk_adjustment_get_page_size(bar);
+ gdouble value = gtk_adjustment_get_value(bar);
+ gdouble amount = g_ascii_strtod(g_array_index(argv, gchar*, 0), &end);
+
+ if (*end == '%')
+ value += page_size * amount * 0.01;
+ else
+ value += amount;
+
+ max_value = gtk_adjustment_get_upper(bar) - page_size;
+
+ if (value > max_value)
+ value = max_value; /* don't scroll past the end of the page */
+
+ gtk_adjustment_set_value (bar, value);
}
static void