summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtk_window.c17
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);
}