1 diff --git a/gtk/res/tabcontents.gtk2.ui b/gtk/res/tabcontents.gtk2.ui
2 index e87249e..63e290e 100644
3 --- a/src/netsurf-3.0/gtk/res/tabcontents.gtk2.ui
4 +++ b/src/netsurf-3.0/gtk/res/tabcontents.gtk2.ui
7 <object class="GtkAdjustment" id="layouthadjustment">
8 <property name="upper">100</property>
9 - <property name="step_increment">1</property>
10 + <property name="step_increment">30</property>
11 <property name="page_increment">10</property>
12 <property name="page_size">10</property>
14 <object class="GtkAdjustment" id="layoutvadjustment">
15 <property name="upper">100</property>
16 - <property name="step_increment">1</property>
17 + <property name="step_increment">30</property>
18 <property name="page_increment">10</property>
19 <property name="page_size">10</property>
21 diff --git a/gtk/window.c b/gtk/window.c
22 index 7642e3b..663ff32 100644
23 --- a/src/netsurf-3.0/gtk/window.c
24 +++ b/src/netsurf-3.0/gtk/window.c
25 @@ -384,105 +384,91 @@ static gboolean nsgtk_window_button_release_event(GtkWidget *widget,
29 -static gboolean nsgtk_window_scroll_event(GtkWidget *widget,
30 - GdkEventScroll *event, gpointer data)
32 +nsgtk_window_scroll_event(GtkWidget *widget,
33 + GdkEventScroll *event,
36 struct gui_window *g = data;
40 GtkAdjustment *vscroll = nsgtk_layout_get_vadjustment(g->layout);
41 GtkAdjustment *hscroll = nsgtk_layout_get_hadjustment(g->layout);
44 - LOG(("%d", event->direction));
45 switch (event->direction) {
47 - if (browser_window_scroll_at_point(g->bw,
48 - event->x / g->bw->scale,
49 - event->y / g->bw->scale,
51 - /* core did not handle event do horizontal scroll */
53 - value = gtk_adjustment_get_value(hscroll) -
54 - (nsgtk_adjustment_get_step_increment(hscroll) *2);
56 - if (value < nsgtk_adjustment_get_lower(hscroll)) {
57 - value = nsgtk_adjustment_get_lower(hscroll);
60 - gtk_adjustment_set_value(hscroll, value);
66 - if (browser_window_scroll_at_point(g->bw,
67 - event->x / g->bw->scale,
68 - event->y / g->bw->scale,
70 - /* core did not handle event change vertical
76 - value = gtk_adjustment_get_value(vscroll) -
77 - (nsgtk_adjustment_get_step_increment(vscroll) * 2);
78 + case GDK_SCROLL_RIGHT:
82 - if (value < nsgtk_adjustment_get_lower(vscroll)) {
83 - value = nsgtk_adjustment_get_lower(vscroll);
85 + case GDK_SCROLL_DOWN:
89 - gtk_adjustment_set_value(vscroll, value);
91 +#if GTK_CHECK_VERSION(3,4,0)
92 + case GDK_SCROLL_SMOOTH:
93 + gdk_event_get_scroll_deltas((GdkEvent *)event, &deltax, &deltay);
97 + LOG(("Unhandled mouse scroll direction"));
101 - case GDK_SCROLL_RIGHT:
102 - if (browser_window_scroll_at_point(g->bw,
103 - event->x / g->bw->scale,
104 - event->y / g->bw->scale,
106 + deltax *= nsgtk_adjustment_get_step_increment(hscroll);
107 + deltay *= nsgtk_adjustment_get_step_increment(vscroll);
109 + LOG(("Scrolling %f, %f", deltax, deltay));
111 - /* core did not handle event change horizontal
114 + if (browser_window_scroll_at_point(g->bw,
115 + event->x / g->bw->scale,
116 + event->y / g->bw->scale,
117 + deltax, deltay) != true) {
119 - value = gtk_adjustment_get_value(hscroll) +
120 - (nsgtk_adjustment_get_step_increment(hscroll) * 2);
121 + /* core did not handle event so change adjustments */
125 + value = gtk_adjustment_get_value(hscroll) + deltax;
127 /* @todo consider gtk_widget_get_allocated_width() */
128 nsgtk_widget_get_allocation(GTK_WIDGET(g->layout), &alloc);
130 if (value > nsgtk_adjustment_get_upper(hscroll) - alloc.width) {
131 - value = nsgtk_adjustment_get_upper(hscroll) -
133 + value = nsgtk_adjustment_get_upper(hscroll) - alloc.width;
135 + if (value < nsgtk_adjustment_get_lower(hscroll)) {
136 + value = nsgtk_adjustment_get_lower(hscroll);
139 gtk_adjustment_set_value(hscroll, value);
143 - case GDK_SCROLL_DOWN:
144 - if (browser_window_scroll_at_point(g->bw,
145 - event->x / g->bw->scale,
146 - event->y / g->bw->scale,
148 - /* core did not handle event change vertical
152 - value = gtk_adjustment_get_value(vscroll) +
153 - (nsgtk_adjustment_get_step_increment(vscroll) * 2);
156 + value = gtk_adjustment_get_value(vscroll) + deltay;
158 /* @todo consider gtk_widget_get_allocated_height */
159 nsgtk_widget_get_allocation(GTK_WIDGET(g->layout), &alloc);
161 - if (value > nsgtk_adjustment_get_upper(vscroll) - alloc.height) {
162 - value = nsgtk_adjustment_get_upper(vscroll) -
164 + if (value > (nsgtk_adjustment_get_upper(vscroll) - alloc.height)) {
165 + value = nsgtk_adjustment_get_upper(vscroll) - alloc.height;
167 + if (value < nsgtk_adjustment_get_lower(vscroll)) {
168 + value = nsgtk_adjustment_get_lower(vscroll);
171 gtk_adjustment_set_value(vscroll, value);