]> git.pld-linux.org Git - packages/netsurf.git/blob - scroll.patch
- BR: libnsfb-devel
[packages/netsurf.git] / scroll.patch
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
5 @@ -79,13 +79,13 @@
6        </object>
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>
13    </object>
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>
20    </object>
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,
26         return TRUE;
27  }
28  
29 -static gboolean nsgtk_window_scroll_event(GtkWidget *widget,
30 -                               GdkEventScroll *event, gpointer data)
31 +static gboolean
32 +nsgtk_window_scroll_event(GtkWidget *widget,
33 +                         GdkEventScroll *event,
34 +                         gpointer data)
35  {
36         struct gui_window *g = data;
37         double value;
38 +       double deltax = 0;
39 +       double deltay = 0;
40         GtkAdjustment *vscroll = nsgtk_layout_get_vadjustment(g->layout);
41         GtkAdjustment *hscroll = nsgtk_layout_get_hadjustment(g->layout);
42         GtkAllocation alloc;
43  
44 -       LOG(("%d", event->direction));
45         switch (event->direction) {
46         case GDK_SCROLL_LEFT:
47 -               if (browser_window_scroll_at_point(g->bw,
48 -                               event->x / g->bw->scale,
49 -                               event->y / g->bw->scale,
50 -                               -100, 0) != true) {
51 -                       /* core did not handle event do horizontal scroll */
52 -
53 -                       value = gtk_adjustment_get_value(hscroll) -
54 -                               (nsgtk_adjustment_get_step_increment(hscroll) *2);
55 -
56 -                       if (value < nsgtk_adjustment_get_lower(hscroll)) {
57 -                               value = nsgtk_adjustment_get_lower(hscroll);
58 -                       }
59 -
60 -                       gtk_adjustment_set_value(hscroll, value);
61 -               }
62 +               deltax = -1.0;
63                 break;
64  
65         case GDK_SCROLL_UP:
66 -               if (browser_window_scroll_at_point(g->bw,
67 -                               event->x / g->bw->scale,
68 -                               event->y / g->bw->scale,
69 -                               0, -100) != true) {
70 -                       /* core did not handle event change vertical
71 -                        * adjustment. 
72 -                        */
73 +               deltay = -1.0;
74 +               break;
75  
76 -                       value = gtk_adjustment_get_value(vscroll) -
77 -                               (nsgtk_adjustment_get_step_increment(vscroll) * 2);
78 +       case GDK_SCROLL_RIGHT:
79 +               deltax = 1.0;
80 +               break;
81  
82 -                       if (value < nsgtk_adjustment_get_lower(vscroll)) {
83 -                               value = nsgtk_adjustment_get_lower(vscroll);
84 -                       }
85 +       case GDK_SCROLL_DOWN:
86 +               deltay = 1.0;
87 +               break;
88  
89 -                       gtk_adjustment_set_value(vscroll, value);
90 -               }
91 +#if GTK_CHECK_VERSION(3,4,0)
92 +       case GDK_SCROLL_SMOOTH:
93 +               gdk_event_get_scroll_deltas((GdkEvent *)event, &deltax, &deltay);
94                 break;
95 +#endif
96 +       default:
97 +               LOG(("Unhandled mouse scroll direction"));
98 +               return TRUE;
99 +       }
100  
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,
105 -                               100, 0) != true) {
106 +       deltax *= nsgtk_adjustment_get_step_increment(hscroll);
107 +       deltay *= nsgtk_adjustment_get_step_increment(vscroll);
108 +
109 +       LOG(("Scrolling %f, %f", deltax, deltay));
110  
111 -                       /* core did not handle event change horizontal
112 -                        * adjustment. 
113 -                        */
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) {
118  
119 -                       value = gtk_adjustment_get_value(hscroll) +
120 -                               (nsgtk_adjustment_get_step_increment(hscroll) * 2);
121 +               /* core did not handle event so change adjustments */
122 +
123 +               /* Horizontal */
124 +               if (deltax != 0) {
125 +                       value = gtk_adjustment_get_value(hscroll) + deltax;
126  
127                         /* @todo consider gtk_widget_get_allocated_width() */
128                         nsgtk_widget_get_allocation(GTK_WIDGET(g->layout), &alloc);
129  
130                         if (value > nsgtk_adjustment_get_upper(hscroll) - alloc.width) {
131 -                               value = nsgtk_adjustment_get_upper(hscroll) - 
132 -                                       alloc.width;
133 +                               value = nsgtk_adjustment_get_upper(hscroll) - alloc.width;
134 +                       }
135 +                       if (value < nsgtk_adjustment_get_lower(hscroll)) {
136 +                               value = nsgtk_adjustment_get_lower(hscroll);
137                         }
138  
139                         gtk_adjustment_set_value(hscroll, value);
140                 }
141 -               break;
142  
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,
147 -                               0, 100) != true) {
148 -                       /* core did not handle event change vertical
149 -                        * adjustment. 
150 -                        */
151 -
152 -                       value = gtk_adjustment_get_value(vscroll) +
153 -                               (nsgtk_adjustment_get_step_increment(vscroll) * 2);
154 +               /* Vertical */
155 +               if (deltay != 0) {
156 +                       value = gtk_adjustment_get_value(vscroll) + deltay;
157 +
158                         /* @todo consider gtk_widget_get_allocated_height */
159                         nsgtk_widget_get_allocation(GTK_WIDGET(g->layout), &alloc);
160  
161 -                       if (value > nsgtk_adjustment_get_upper(vscroll) - alloc.height) {
162 -                               value = nsgtk_adjustment_get_upper(vscroll) - 
163 -                                       alloc.height;
164 +                       if (value > (nsgtk_adjustment_get_upper(vscroll) - alloc.height)) {
165 +                               value = nsgtk_adjustment_get_upper(vscroll) - alloc.height;
166 +                       }
167 +                       if (value < nsgtk_adjustment_get_lower(vscroll)) {
168 +                               value = nsgtk_adjustment_get_lower(vscroll);
169                         }
170  
171                         gtk_adjustment_set_value(vscroll, value);
172                 }
173 -               break;
174 -
175 -       default:
176 -               break;
177         }
178  
179         return TRUE;
This page took 0.106506 seconds and 3 git commands to generate.