Added gtkhtml,libhildonhelp and maemopad
[oespirit1] / gtkhtml / gtkhtml_180_dont_click_link_when_panning.diff
1 diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml.c gtkhtml-3.24.4/gtkhtml/gtkhtml.c
2 --- gtkhtml-3.24.4/gtkhtml/gtkhtml.c    2008-10-16 12:07:24.000000000 +0200
3 +++ gtkhtml-3.24.4/gtkhtml/gtkhtml.c    2008-10-16 12:09:36.000000000 +0200
4 @@ -1712,10 +1712,11 @@
5         GdkWindow *window = widget->window;
6         HTMLEngine *engine;
7         gint x, y;
8         guint mouse_double_click_threshold = MOUSE_DBLCLK_THRESHOLD ;
9         GtkSettings *gtk_settings = gtk_widget_get_settings (widget) ;
10 +       GtkHTML *html = NULL ;
11  
12         if (NULL != gtk_settings)
13                 g_object_get (G_OBJECT (gtk_settings), "gtk-double-click-distance", &mouse_double_click_threshold, NULL) ;
14  
15         g_return_val_if_fail (widget != NULL, 0);
16 @@ -1731,55 +1732,60 @@
17  
18         gdk_window_get_pointer (GTK_LAYOUT (widget)->bin_window, &x, &y, NULL);
19         if (event->is_hint)
20                 gdk_device_get_state (event->device, GTK_LAYOUT (widget)->bin_window, NULL, NULL) ;
21  
22 +       html = GTK_HTML (widget) ;
23 +
24         /* If there is only a small motion from the origin and simple 
25            doubleclick is active, abort the motion, otherwise clear simple_dblclick flag */
26 -       if (GTK_HTML (widget)->simple_dblclick) {
27 -           GtkHTML *html = GTK_HTML (widget);
28 -           
29 +       if (html->simple_dblclick) {
30             if (abs(x - html->selection_x1) <= mouse_double_click_threshold && 
31                 abs(y - html->selection_y1) <= mouse_double_click_threshold)
32                 return TRUE;
33                 
34             html->simple_dblclick = FALSE;
35         }
36         
37         if (!mouse_change_pos (widget, window, x, y, event->state))
38                 return FALSE;
39  
40 -       engine = GTK_HTML (widget)->engine;
41 -       if (GTK_HTML (widget)->in_selection_drag && html_engine_get_editable (engine))
42 +       engine = html->engine;
43 +       if (html->in_selection_drag && html_engine_get_editable (engine))
44                 html_engine_jump_at (engine, x, y);
45  
46         /* (TL 18-Nov-05) Added panning feature */
47 -       if (GTK_HTML (widget)->panning) {
48 +       if (html->panning) {
49                 GtkAdjustment *adj;
50                 gint dx, dy;
51                 gdouble value;
52  
53 -               dx = x - GTK_HTML (widget)->lastx;
54 -               dy = y - GTK_HTML (widget)->lasty;
55 +               dx = x - html->lastx;
56 +               dy = y - html->lasty;
57  
58                 /* Vertical panning */
59                 adj = gtk_layout_get_vadjustment(GTK_LAYOUT(widget));
60                 value = adj->value - (gdouble) dy;
61                 if (value < adj->lower)
62                         value = adj->lower;
63                 else if (value > (adj->upper - adj->page_size))
64                         value = adj->upper - adj->page_size;
65 +               if (ABS (html->y_amount_panned) < mouse_double_click_threshold)
66 +                       html->y_amount_panned += (gint)(value - adj->value) ;
67                 gtk_adjustment_set_value(adj, value);
68  
69                 /* Horizontal panning */
70                 adj = gtk_layout_get_hadjustment(GTK_LAYOUT(widget));
71                 value = adj->value - (gdouble) dx;
72                 if (value < adj->lower)
73                         value = adj->lower;
74                 else if (value > (adj->upper - adj->page_size))
75                         value = adj->upper - adj->page_size;
76 +               if (ABS (html->x_amount_panned) < mouse_double_click_threshold)
77 +                       html->x_amount_panned += (gint)(value - adj->value) ;
78                 gtk_adjustment_set_value(adj, value);
79 +
80         }
81  
82         return TRUE;
83  }
84  
85 @@ -1830,18 +1836,20 @@
86                     GdkEventButton *event)
87  {
88         GtkHTML *html;
89         GtkWidget *orig_widget = widget;
90         HTMLEngine *engine;
91 -       gint value, x, y;
92 +       gint value, x, y, xWnd, yWnd;
93  
94         /* printf ("button_press_event\n"); */
95  
96         x = event->x;
97         y = event->y;
98  
99 +       gdk_window_get_pointer (widget->window, &xWnd, &yWnd, NULL) ;
100         widget = shift_to_iframe_parent (widget, &x, &y);
101 +       shift_to_iframe_parent (orig_widget, &xWnd, &yWnd) ;
102         html   = GTK_HTML (widget);
103         engine = html->engine;
104  
105         if (event->button == 1 || ((event->button == 2 || event->button == 3)
106                                    && html_engine_get_editable (engine)))
107 @@ -1897,12 +1905,14 @@
108                 case 1:
109                         /*html->in_selection_drag = TRUE;*/
110                         /* (TL 18-Nov-05) First click starts panning, not selection */
111                         html->in_selection_drag = FALSE;
112                         html->panning = TRUE;
113 -                       html->lastx = x;
114 -                       html->lasty = y;
115 +                       html->x_amount_panned =
116 +                       html->y_amount_panned = 0 ;
117 +                       html->lastx = xWnd + gtk_adjustment_get_value (gtk_layout_get_hadjustment (GTK_LAYOUT (widget)));
118 +                       html->lasty = yWnd + gtk_adjustment_get_value (gtk_layout_get_vadjustment (GTK_LAYOUT (widget)));
119  
120                         if (html_engine_get_editable (engine)) {
121                                 HTMLObject *obj;
122  
123                                 obj = html_engine_get_object_at (engine, x, y, NULL, FALSE);
124 @@ -1970,10 +1980,12 @@
125                         /*html->in_selection_drag = FALSE;
126                         gtk_html_select_word (html);*/
127                         /* (TL 18-Nov-05) Second click starts selection and stops panning */
128                         html->in_selection_drag = TRUE;
129                         html->panning = FALSE;
130 +                       html->x_amount_panned =
131 +                       html->y_amount_panned = 0 ;
132                         html->in_selection = TRUE;
133                         /* Check for simple double click, for selecting a word */
134                         html->simple_dblclick = TRUE;
135                         html->selection_x1 = x;
136                         html->selection_y1 = y;
137 @@ -1982,10 +1994,12 @@
138                         /*html->in_selection_drag = FALSE;
139                         gtk_html_select_line (html);*/
140                         /* (TL 18-Nov-05) Third click starts selection and stops panning */
141                         html->in_selection_drag = TRUE;
142                         html->panning = FALSE;
143 +                       html->x_amount_panned =
144 +                       html->y_amount_panned = 0 ;
145                         html->in_selection = TRUE;
146                 }
147         }
148  
149         return FALSE;
150 @@ -2025,10 +2039,16 @@
151                 update_primary_selection (html);
152                 queue_draw (html);
153         }
154  
155         if (event->button == 1) {
156 +         guint mouse_double_click_threshold = MOUSE_DBLCLK_THRESHOLD ;
157 +         GtkSettings *gtk_settings = gtk_widget_get_settings (widget) ;
158 +
159 +         if (NULL != gtk_settings)
160 +                 g_object_get (G_OBJECT (gtk_settings), "gtk-double-click-distance", &mouse_double_click_threshold, NULL) ;
161 +
162  
163                 if (html->in_selection_drag && html_engine_get_editable (engine))
164                         html_engine_jump_at (engine, x, y);
165  
166                 html->in_selection_drag = FALSE;
167 @@ -2056,6 +2056,8 @@
168                 html->panning = FALSE;
169  
170                 if (!html->priv->dnd_in_progress
171 +                   && ABS (html->x_amount_panned) < mouse_double_click_threshold
172 +                   && ABS (html->y_amount_panned) < mouse_double_click_threshold
173                     && html->pointer_url != NULL && ! html->in_selection
174                     && (!gtk_html_get_editable (html) || html->priv->in_url_test_mode)) {
175                         g_signal_emit (widget,  signals[LINK_CLICKED], 0, html->pointer_url);
176 @@ -2059,11 +2079,14 @@
177                                 focus_object = html_engine_get_object_at (html->engine, x, y, &offset, TRUE);
178                                 if (HTML_IS_TEXT (focus_object))
179                                         html_text_set_link_visited (HTML_TEXT (focus_object), (gint) offset, html->engine, TRUE);
180                         }
181                 }
182 -               
183 +
184 +               html->x_amount_panned =
185 +               html->y_amount_panned = 0 ;
186 +
187                 /* If it was a simple doubleclick select a word */
188                 if (html->simple_dblclick) {
189                     html->simple_dblclick = FALSE;
190                     gtk_html_select_word(html);
191                 }
192 @@ -3399,10 +3422,12 @@
193         html->selection_x1 = 0;
194         html->selection_y1 = 0;
195  
196         /* (TL 18-Nov-05) For panning */
197         html->panning = FALSE;
198 +       html->x_amount_panned =
199 +       html->y_amount_panned = 0 ;
200         html->lastx = 0;
201         html->lasty = 0;
202  
203         html->in_selection = FALSE;
204         html->in_selection_drag = FALSE;
205 diff -r -U5 gtkhtml-3.24.4/gtkhtml/gtkhtml.h gtkhtml-3.24.4/gtkhtml/gtkhtml.h
206 --- gtkhtml-3.24.4/gtkhtml/gtkhtml.h    2008-10-16 12:07:24.000000000 +0200
207 +++ gtkhtml-3.24.4/gtkhtml/gtkhtml.h    2008-10-16 12:09:41.000000000 +0200
208 @@ -58,10 +58,12 @@
209  
210         /* (TL 18-Nov-05) Panning variables */
211         gboolean panning;
212         gint lastx;
213         gint lasty;
214 +       gint x_amount_panned ;
215 +       gint y_amount_panned ;
216  
217         guint in_selection : 1;
218         guint in_selection_drag : 1;
219  
220         guint debug : 1;