Merge lp:~midori/midori/navigationAction into lp:midori
- navigationAction
- Merge into trunk
Status: | Work in progress | ||||
---|---|---|---|---|---|
Proposed branch: | lp:~midori/midori/navigationAction | ||||
Merge into: | lp:midori | ||||
Diff against target: |
953 lines (+326/-419) 5 files modified
midori/midori-browser.c (+29/-416) midori/midori-navigationaction.vala (+293/-0) midori/midori-view.c (+3/-0) midori/midori-window.vala (+0/-3) po/POTFILES.in (+1/-0) |
||||
To merge this branch: | bzr merge lp:~midori/midori/navigationAction | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Danielle Foré (community) | Needs Fixing | ||
Review via email:
|
Commit message
Split Back, Forward and friends into NavigationAction
Description of the change
- 6950. By Cris Dywan
-
Merge lp:midori
- 6951. By Cris Dywan
-
Remaining NavigationAction subclasses
- 6952. By Cris Dywan
-
Coding style fixes
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Cris Dywan (kalikiana) wrote : | # |
In 10 minutes I couldn't find a way to use GLib.Icon with ThemedIcon.
- 6953. By Cris Dywan
-
Related page boilerplate in NavigationAction
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Danielle Foré (danrabbit) wrote : | # |
For what it's worth, Gtk.Action is also deprecated :p The only thing I can really figure out so far is that the button itself is visible but the Gtk.Image packed into it is set visible = false.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Cris Dywan (kalikiana) wrote : | # |
The slight predicament is that there's nothing replacing Gtk.Action. We need something with an icon, a short cut, sub menus and a label. We have Midori.
That said, what I would like to see is icon names on ContextAction that automatically append -symbolic, alternate icon names and an accelerators property (plural). I did the midori_
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Danielle Foré (danrabbit) wrote : | # |
Hrm accoring to valadoc, GLib.Action replaces it http://
Unmerged revisions
- 6953. By Cris Dywan
-
Related page boilerplate in NavigationAction
- 6952. By Cris Dywan
-
Coding style fixes
- 6951. By Cris Dywan
-
Remaining NavigationAction subclasses
- 6950. By Cris Dywan
-
Merge lp:midori
- 6949. By Cris Dywan
-
Split Back, Forward and friends into NavigationAction
Preview Diff
1 | === modified file 'midori/midori-browser.c' |
2 | --- midori/midori-browser.c 2015-06-03 02:05:28 +0000 |
3 | +++ midori/midori-browser.c 2015-06-07 21:30:55 +0000 |
4 | @@ -192,12 +192,6 @@ |
5 | GParamSpec* pspec, |
6 | MidoriBrowser* browser); |
7 | |
8 | -static void |
9 | -midori_browser_toolbar_popup_context_menu_history (MidoriBrowser* browser, |
10 | - GtkWidget* widget, |
11 | - gboolean back, |
12 | - gint x, |
13 | - gint y); |
14 | void |
15 | midori_panel_set_toolbar_style (MidoriPanel* panel, |
16 | GtkToolbarStyle style); |
17 | @@ -292,13 +286,6 @@ |
18 | { |
19 | GtkAction* action; |
20 | |
21 | - _action_set_sensitive (browser, "Back", midori_view_can_go_back (view)); |
22 | - _action_set_sensitive (browser, "Forward", midori_tab_can_go_forward (MIDORI_TAB (view))); |
23 | - _action_set_sensitive (browser, "Previous", |
24 | - midori_view_get_previous_page (view) != NULL); |
25 | - _action_set_sensitive (browser, "Next", |
26 | - midori_view_get_next_page (view) != NULL); |
27 | - |
28 | _action_set_sensitive (browser, "AddSpeedDial", !midori_view_is_blank (view)); |
29 | _action_set_sensitive (browser, "BookmarkAdd", !midori_view_is_blank (view)); |
30 | _action_set_sensitive (browser, "MailTo", !midori_view_is_blank (view)); |
31 | @@ -314,22 +301,6 @@ |
32 | _action_set_sensitive (browser, "SourceViewDom", |
33 | midori_tab_can_view_source (MIDORI_TAB (view))); |
34 | |
35 | - action = _action_by_name (browser, "NextForward"); |
36 | - if (midori_tab_can_go_forward (MIDORI_TAB (view))) |
37 | - { |
38 | - g_object_set (action, |
39 | - "stock-id", GTK_STOCK_GO_FORWARD, |
40 | - "tooltip", _("Go forward to the next page"), |
41 | - "sensitive", TRUE, NULL); |
42 | - } |
43 | - else |
44 | - { |
45 | - g_object_set (action, |
46 | - "stock-id", GTK_STOCK_MEDIA_NEXT, |
47 | - "tooltip", _("Go to the next sub-page"), |
48 | - "sensitive", midori_view_get_next_page (view) != NULL, NULL); |
49 | - } |
50 | - |
51 | action = _action_by_name (browser, "Location"); |
52 | if (midori_tab_is_blank (MIDORI_TAB (view))) |
53 | { |
54 | @@ -432,23 +403,6 @@ |
55 | action = _action_by_name (browser, "Location"); |
56 | midori_location_action_set_progress (MIDORI_LOCATION_ACTION (action), progress); |
57 | |
58 | - _action_set_sensitive (browser, "Reload", !loading); |
59 | - _action_set_sensitive (browser, "Stop", loading); |
60 | - |
61 | - action = _action_by_name (browser, "ReloadStop"); |
62 | - if (!loading) |
63 | - { |
64 | - g_object_set (action, |
65 | - "stock-id", GTK_STOCK_REFRESH, |
66 | - "tooltip", _("Reload the current page"), NULL); |
67 | - } |
68 | - else |
69 | - { |
70 | - g_object_set (action, |
71 | - "stock-id", GTK_STOCK_STOP, |
72 | - "tooltip", _("Stop loading the current page"), NULL); |
73 | - } |
74 | - |
75 | g_object_set (browser->throbber, "active", loading, "visible", loading, NULL); |
76 | } |
77 | |
78 | @@ -734,8 +688,6 @@ |
79 | const gchar* uri = midori_view_get_display_uri (view); |
80 | GtkAction* action = _action_by_name (browser, "Location"); |
81 | midori_location_action_set_text (MIDORI_LOCATION_ACTION (action), uri); |
82 | - _action_set_sensitive (browser, "Back", midori_view_can_go_back (view)); |
83 | - _action_set_sensitive (browser, "Forward", midori_tab_can_go_forward (MIDORI_TAB (view))); |
84 | g_object_notify (G_OBJECT (browser), "uri"); |
85 | } |
86 | } |
87 | @@ -2059,53 +2011,6 @@ |
88 | /* Nothing to do */ |
89 | } |
90 | |
91 | -static void |
92 | -_update_tooltip_if_changed (GtkAction* action, |
93 | - const gchar* text) |
94 | -{ |
95 | - gchar *old; |
96 | - g_object_get (action, "tooltip", &old, NULL); |
97 | - if (g_strcmp0(old, text)) { |
98 | - g_object_set (action, |
99 | - "tooltip", text, NULL); |
100 | - } |
101 | - g_free (old); |
102 | -} |
103 | - |
104 | -static void |
105 | -_update_reload_tooltip (GtkWidget* widget, |
106 | - GdkEventKey* event, |
107 | - gboolean released) |
108 | -{ |
109 | - MidoriBrowser* browser = MIDORI_BROWSER (widget); |
110 | - |
111 | - /* Update the reload/stop tooltip in case we are holding the hard refresh modifiers*/ |
112 | - GtkAction *reload_stop = _action_by_name (browser, "ReloadStop"); |
113 | - GtkAction *reload = _action_by_name (browser, "Reload"); |
114 | - GdkModifierType mask; |
115 | - gdk_window_get_pointer (gtk_widget_get_window (widget), NULL, NULL, &mask); |
116 | - const gchar *target; |
117 | - |
118 | - if ( mask & GDK_SHIFT_MASK) |
119 | - { |
120 | - target = _("Reload page without caching"); |
121 | - } |
122 | - else |
123 | - { |
124 | - target = _("Reload the current page"); |
125 | - } |
126 | - _update_tooltip_if_changed (reload_stop, target); |
127 | - _update_tooltip_if_changed (reload, target); |
128 | -} |
129 | - |
130 | -static gboolean |
131 | -midori_browser_key_release_event (GtkWidget* widget, |
132 | - GdkEventKey* event) |
133 | -{ |
134 | - _update_reload_tooltip (widget, event, TRUE); |
135 | - return GTK_WIDGET_CLASS (midori_browser_parent_class)->key_release_event (widget, event); |
136 | -} |
137 | - |
138 | static gboolean |
139 | midori_browser_key_press_event (GtkWidget* widget, |
140 | GdkEventKey* event) |
141 | @@ -2115,7 +2020,6 @@ |
142 | GtkWidgetClass* widget_class; |
143 | guint clean_state; |
144 | |
145 | - _update_reload_tooltip(widget, event, FALSE); |
146 | /* Interpret Ctrl(+Shift)+Tab as tab switching for compatibility */ |
147 | if (midori_browser_get_nth_tab (browser, 1) != NULL |
148 | && event->keyval == GDK_KEY_Tab |
149 | @@ -2156,18 +2060,15 @@ |
150 | && !webkit_web_view_can_paste_clipboard (WEBKIT_WEB_VIEW (focus))) |
151 | { |
152 | /* Space at the bottom of the page: Go to next page */ |
153 | - MidoriView* view = midori_view_get_for_widget (focus); |
154 | GtkScrolledWindow* scrolled = GTK_SCROLLED_WINDOW (gtk_widget_get_parent (focus)); |
155 | GtkAdjustment* vadjust = gtk_scrolled_window_get_vadjustment (scrolled); |
156 | if (gtk_adjustment_get_value (vadjust) |
157 | == (gtk_adjustment_get_upper (vadjust) - gtk_adjustment_get_page_size (vadjust))) |
158 | { |
159 | - /* Duplicate here because the URI pointer might change */ |
160 | - gchar* uri = g_strdup (midori_view_get_next_page (view)); |
161 | - if (uri != NULL) |
162 | + GtkAction* next = _action_by_name (browser, "Next"); |
163 | + if (gtk_action_get_sensitive (next)) |
164 | { |
165 | - midori_view_set_uri (view, uri); |
166 | - g_free (uri); |
167 | + gtk_action_activate (next); |
168 | return TRUE; |
169 | } |
170 | } |
171 | @@ -2441,7 +2342,6 @@ |
172 | |
173 | gtkwidget_class = GTK_WIDGET_CLASS (class); |
174 | gtkwidget_class->key_press_event = midori_browser_key_press_event; |
175 | - gtkwidget_class->key_release_event = midori_browser_key_release_event; |
176 | |
177 | gobject_class = G_OBJECT_CLASS (class); |
178 | gobject_class->dispose = midori_browser_dispose; |
179 | @@ -3515,37 +3415,6 @@ |
180 | } |
181 | |
182 | static void |
183 | -_action_reload_stop_activate (GtkAction* action, |
184 | - MidoriBrowser* browser) |
185 | -{ |
186 | - GtkWidget* view = midori_browser_get_current_tab (browser); |
187 | - gchar* stock_id; |
188 | - g_object_get (action, "stock-id", &stock_id, NULL); |
189 | - |
190 | - /* Refresh or stop, depending on the stock id */ |
191 | - if (!strcmp (stock_id, GTK_STOCK_REFRESH)) |
192 | - { |
193 | - GdkModifierType state = (GdkModifierType)0; |
194 | - gint x, y; |
195 | - GdkWindow* window; |
196 | - gboolean from_cache = TRUE; |
197 | - |
198 | - if (!strcmp (gtk_action_get_name (action), "ReloadUncached")) |
199 | - from_cache = FALSE; |
200 | - else if ((window = gtk_widget_get_window (GTK_WIDGET (browser)))) |
201 | - { |
202 | - gdk_window_get_pointer (window, &x, &y, &state); |
203 | - if (state & GDK_SHIFT_MASK) |
204 | - from_cache = FALSE; |
205 | - } |
206 | - midori_view_reload (MIDORI_VIEW (view), from_cache); |
207 | - } |
208 | - else |
209 | - midori_tab_stop_loading (MIDORI_TAB (view)); |
210 | - g_free (stock_id); |
211 | -} |
212 | - |
213 | -static void |
214 | _action_zoom_activate (GtkAction* action, |
215 | MidoriBrowser* browser) |
216 | { |
217 | @@ -3792,129 +3661,6 @@ |
218 | g_free (stylesheet); |
219 | } |
220 | |
221 | -static gboolean |
222 | -_action_navigation_activate (GtkAction* action, |
223 | - MidoriBrowser* browser) |
224 | -{ |
225 | - MidoriView* view; |
226 | - GtkWidget* tab; |
227 | - gchar* uri; |
228 | - const gchar* name; |
229 | - gboolean middle_click; |
230 | - |
231 | - g_assert (GTK_IS_ACTION (action)); |
232 | - |
233 | - if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action), |
234 | - "midori-middle-click"))) |
235 | - { |
236 | - middle_click = TRUE; |
237 | - g_object_set_data (G_OBJECT (action), |
238 | - "midori-middle-click", |
239 | - GINT_TO_POINTER(0)); |
240 | - } |
241 | - else |
242 | - middle_click = FALSE; |
243 | - |
244 | - tab = midori_browser_get_current_tab (browser); |
245 | - view = MIDORI_VIEW (tab); |
246 | - name = gtk_action_get_name (action); |
247 | - |
248 | - if (!strcmp (name, "NextForward")) |
249 | - name = midori_tab_can_go_forward (MIDORI_TAB (view)) ? "Forward" : "Next"; |
250 | - |
251 | - if (g_str_equal (name, "Back")) |
252 | - { |
253 | - if (middle_click) |
254 | - { |
255 | - WebKitWebView* web_view = WEBKIT_WEB_VIEW (midori_view_get_web_view (view)); |
256 | - #ifdef HAVE_WEBKIT2 |
257 | - WebKitBackForwardList* list = webkit_web_view_get_back_forward_list (web_view); |
258 | - WebKitBackForwardListItem* item = webkit_back_forward_list_get_back_item (list); |
259 | - const gchar* back_uri = webkit_back_forward_list_item_get_uri (item); |
260 | - #else |
261 | - WebKitWebBackForwardList* list = webkit_web_view_get_back_forward_list (web_view); |
262 | - WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_forward_item (list); |
263 | - const gchar* back_uri = webkit_web_history_item_get_uri (item); |
264 | - #endif |
265 | - |
266 | - GtkWidget* new_view = midori_browser_add_uri (browser, back_uri); |
267 | - midori_browser_set_current_tab_smartly (browser, new_view); |
268 | - } |
269 | - else |
270 | - midori_view_go_back (view); |
271 | - |
272 | - return TRUE; |
273 | - } |
274 | - else if (g_str_equal (name, "Forward")) |
275 | - { |
276 | - if (middle_click) |
277 | - { |
278 | - WebKitWebView* web_view = WEBKIT_WEB_VIEW (midori_view_get_web_view (view)); |
279 | - #ifdef HAVE_WEBKIT2 |
280 | - WebKitBackForwardList* list = webkit_web_view_get_back_forward_list (web_view); |
281 | - WebKitBackForwardListItem* item = webkit_back_forward_list_get_forward_item (list); |
282 | - const gchar* forward_uri = webkit_back_forward_list_item_get_uri (item); |
283 | - #else |
284 | - WebKitWebBackForwardList* list = webkit_web_view_get_back_forward_list (web_view); |
285 | - WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_forward_item (list); |
286 | - const gchar* forward_uri = webkit_web_history_item_get_uri (item); |
287 | - #endif |
288 | - |
289 | - GtkWidget* new_view = midori_browser_add_uri (browser, forward_uri); |
290 | - midori_browser_set_current_tab_smartly (browser, new_view); |
291 | - } |
292 | - else |
293 | - midori_tab_go_forward (MIDORI_TAB (view)); |
294 | - |
295 | - return TRUE; |
296 | - } |
297 | - else if (g_str_equal (name, "Previous")) |
298 | - { |
299 | - /* Duplicate here because the URI pointer might change */ |
300 | - uri = g_strdup (midori_view_get_previous_page (view)); |
301 | - |
302 | - if (middle_click) |
303 | - { |
304 | - GtkWidget* new_view = midori_browser_add_uri (browser, uri); |
305 | - midori_browser_set_current_tab_smartly (browser, new_view); |
306 | - } |
307 | - else |
308 | - midori_view_set_uri (view, uri); |
309 | - |
310 | - g_free (uri); |
311 | - return TRUE; |
312 | - } |
313 | - else if (g_str_equal (name, "Next")) |
314 | - { |
315 | - /* Duplicate here because the URI pointer might change */ |
316 | - uri = g_strdup (midori_view_get_next_page (view)); |
317 | - |
318 | - if (middle_click) |
319 | - { |
320 | - GtkWidget* new_view = midori_browser_add_uri (browser, uri); |
321 | - midori_browser_set_current_tab_smartly (browser, new_view); |
322 | - } |
323 | - else |
324 | - midori_view_set_uri (view, uri); |
325 | - |
326 | - g_free (uri); |
327 | - return TRUE; |
328 | - } |
329 | - else if (g_str_equal (name, "Homepage")) |
330 | - { |
331 | - if (middle_click) |
332 | - { |
333 | - GtkWidget* new_view = midori_browser_add_uri (browser, "about:home"); |
334 | - midori_browser_set_current_tab_smartly (browser, new_view); |
335 | - } |
336 | - else |
337 | - midori_view_set_uri (view, "about:home"); |
338 | - |
339 | - return TRUE; |
340 | - } |
341 | - return FALSE; |
342 | -} |
343 | - |
344 | static void |
345 | _action_location_activate (GtkAction* action, |
346 | MidoriBrowser* browser) |
347 | @@ -4352,17 +4098,6 @@ |
348 | GtkAction* action, |
349 | MidoriBrowser* browser) |
350 | { |
351 | - const gchar* name = gtk_action_get_name (action); |
352 | - gboolean back = !g_strcmp0 (name, "Back"); |
353 | - if (back |
354 | - || g_str_has_suffix (name, "Forward")) |
355 | - { |
356 | - midori_browser_toolbar_popup_context_menu_history ( |
357 | - browser, |
358 | - widget, |
359 | - back, 0, 0); |
360 | - return TRUE; |
361 | - } |
362 | return midori_browser_toolbar_popup_context_menu_cb (widget, 0, 0, 0, browser); |
363 | } |
364 | |
365 | @@ -4455,23 +4190,6 @@ |
366 | return FALSE; |
367 | } |
368 | |
369 | -static gboolean |
370 | -midori_browser_menu_item_middle_click_event_cb (GtkWidget* toolitem, |
371 | - GdkEventButton* event, |
372 | - MidoriBrowser* browser) |
373 | -{ |
374 | - if (MIDORI_EVENT_NEW_TAB (event)) |
375 | - { |
376 | - GtkAction* action; |
377 | - |
378 | - action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (toolitem)); |
379 | - g_object_set_data (G_OBJECT (action), "midori-middle-click", GINT_TO_POINTER (1)); |
380 | - |
381 | - return _action_navigation_activate (action, browser); |
382 | - } |
383 | - return FALSE; |
384 | -} |
385 | - |
386 | static void |
387 | _action_bookmark_add_activate (GtkAction* action, |
388 | MidoriBrowser* browser) |
389 | @@ -5305,18 +5023,6 @@ |
390 | |
391 | { "View", NULL, N_("_View") }, |
392 | { "Toolbars", NULL, N_("_Toolbars") }, |
393 | - { "Reload", GTK_STOCK_REFRESH, |
394 | - NULL, "<Ctrl>r", |
395 | - N_("Reload the current page"), G_CALLBACK (_action_reload_stop_activate) }, |
396 | - { "ReloadUncached", GTK_STOCK_REFRESH, |
397 | - N_("Reload page without caching"), "<Ctrl><Shift>r", |
398 | - NULL, G_CALLBACK (_action_reload_stop_activate) }, |
399 | - { "Stop", GTK_STOCK_STOP, |
400 | - NULL, "Escape", |
401 | - N_("Stop loading the current page"), G_CALLBACK (_action_reload_stop_activate) }, |
402 | - { "ReloadStop", GTK_STOCK_STOP, |
403 | - NULL, "", |
404 | - N_("Reload the current page"), G_CALLBACK (_action_reload_stop_activate) }, |
405 | { "ZoomIn", GTK_STOCK_ZOOM_IN, |
406 | NULL, "<Ctrl>plus", |
407 | N_("Increase the zoom level"), G_CALLBACK (_action_zoom_activate) }, |
408 | @@ -5356,26 +5062,6 @@ |
409 | NULL, G_CALLBACK (_action_readable_activate) }, |
410 | |
411 | { "Go", NULL, N_("_Go") }, |
412 | - { "Back", GTK_STOCK_GO_BACK, |
413 | - NULL, "<Alt>Left", |
414 | - N_("Go back to the previous page"), G_CALLBACK (_action_navigation_activate) }, |
415 | - { "Forward", GTK_STOCK_GO_FORWARD, |
416 | - NULL, "<Alt>Right", |
417 | - N_("Go forward to the next page"), G_CALLBACK (_action_navigation_activate) }, |
418 | - { "Previous", GTK_STOCK_MEDIA_PREVIOUS, |
419 | - NULL, "<Alt><Shift>Left", |
420 | - /* i18n: Visit the previous logical page, ie. in a forum or blog */ |
421 | - N_("Go to the previous sub-page"), G_CALLBACK (_action_navigation_activate) }, |
422 | - { "Next", GTK_STOCK_MEDIA_NEXT, |
423 | - NULL, "<Alt><Shift>Right", |
424 | - /* i18n: Visit the following logical page, ie. in a forum or blog */ |
425 | - N_("Go to the next sub-page"), G_CALLBACK (_action_navigation_activate) }, |
426 | - { "NextForward", GTK_STOCK_MEDIA_NEXT, |
427 | - N_("Next or Forward"), "", |
428 | - N_("Go to the next sub-page or next page in history"), G_CALLBACK (_action_navigation_activate) }, |
429 | - { "Homepage", GTK_STOCK_HOME, |
430 | - N_("_Homepage"), "<Alt>Home", |
431 | - N_("Go to your homepage"), G_CALLBACK (_action_navigation_activate) }, |
432 | { "TrashEmpty", GTK_STOCK_CLEAR, |
433 | N_("Empty Trash"), "", |
434 | NULL, G_CALLBACK (_action_trash_empty_activate) }, |
435 | @@ -5914,6 +5600,20 @@ |
436 | return FALSE; |
437 | } |
438 | |
439 | +static GtkAction* |
440 | +midori_browser_add_action (MidoriBrowser* browser, |
441 | + GType type, |
442 | + const gchar* accelerator) |
443 | +{ |
444 | + GtkAction* action = g_object_new (type, NULL); |
445 | + g_return_val_if_fail (gtk_action_get_name (action) != NULL, action); |
446 | + gtk_action_group_add_action_with_accel (browser->action_group, action, accelerator); |
447 | + if (MIDORI_IS_NAVIGATION_ACTION (action)) |
448 | + g_object_bind_property (browser, "tab", action, "tab", 0); |
449 | + g_object_unref (action); |
450 | + return action; |
451 | +} |
452 | + |
453 | static void |
454 | midori_browser_init (MidoriBrowser* browser) |
455 | { |
456 | @@ -5925,9 +5625,6 @@ |
457 | GError* error; |
458 | GtkAction* action; |
459 | GtkWidget* menuitem; |
460 | - GtkWidget* homepage; |
461 | - GtkWidget* back; |
462 | - GtkWidget* forward; |
463 | GtkWidget* hpaned; |
464 | GtkWidget* vpaned; |
465 | GtkWidget* scrolled; |
466 | @@ -5995,6 +5692,17 @@ |
467 | /* Hide the 'Dummy' which only holds otherwise unused actions */ |
468 | _action_set_visible (browser, "Dummy", FALSE); |
469 | |
470 | + midori_browser_add_action (browser, MIDORI_TYPE_BACK_ACTION, "<Alt>Left"); |
471 | + midori_browser_add_action (browser, MIDORI_TYPE_PREVIOUS_ACTION, "<Alt><Shift>Left"); |
472 | + midori_browser_add_action (browser, MIDORI_TYPE_FORWARD_ACTION, "<Alt>Right"); |
473 | + midori_browser_add_action (browser, MIDORI_TYPE_NEXT_ACTION, "<Alt><Shift>Right"); |
474 | + midori_browser_add_action (browser, MIDORI_TYPE_NEXT_FORWARD_ACTION, ""); |
475 | + midori_browser_add_action (browser, MIDORI_TYPE_HOMEPAGE_ACTION, "<Alt>Home"); |
476 | + midori_browser_add_action (browser, MIDORI_TYPE_STOP_ACTION, "Escape"); |
477 | + midori_browser_add_action (browser, MIDORI_TYPE_RELOAD_ACTION, "<Ctrl>r"); |
478 | + midori_browser_add_action (browser, MIDORI_TYPE_RELOAD_UNCACHED_ACTION, "<Ctrl><Shift>r"); |
479 | + midori_browser_add_action (browser, MIDORI_TYPE_RELOAD_STOP_ACTION, ""); |
480 | + |
481 | action = g_object_new (KATZE_TYPE_SEPARATOR_ACTION, |
482 | "name", "Separator", |
483 | "label", _("_Separator"), |
484 | @@ -6049,11 +5757,7 @@ |
485 | action, "<Ctrl>K"); |
486 | g_object_unref (action); |
487 | |
488 | - action = g_object_new (MIDORI_TYPE_PANED_ACTION, |
489 | - "name", "LocationSearch", |
490 | - NULL); |
491 | - gtk_action_group_add_action (browser->action_group, action); |
492 | - g_object_unref (action); |
493 | + midori_browser_add_action (browser, MIDORI_TYPE_PANED_ACTION, ""); |
494 | |
495 | action = g_object_new (KATZE_TYPE_ARRAY_ACTION, |
496 | "name", "Trash", |
497 | @@ -6178,22 +5882,6 @@ |
498 | gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM ( |
499 | gtk_ui_manager_get_widget (ui_manager, "/menubar/Go/Location")), NULL); |
500 | |
501 | - homepage = gtk_ui_manager_get_widget (ui_manager, "/menubar/Go/Homepage"); |
502 | - g_signal_connect (homepage, "button-press-event", |
503 | - G_CALLBACK (midori_browser_menu_item_middle_click_event_cb), browser); |
504 | - back = gtk_ui_manager_get_widget (ui_manager, "/menubar/Go/Back"); |
505 | - g_signal_connect (back, "button-press-event", |
506 | - G_CALLBACK (midori_browser_menu_item_middle_click_event_cb), browser); |
507 | - forward = gtk_ui_manager_get_widget (ui_manager, "/menubar/Go/Forward"); |
508 | - g_signal_connect (forward, "button-press-event", |
509 | - G_CALLBACK (midori_browser_menu_item_middle_click_event_cb), browser); |
510 | - forward = gtk_ui_manager_get_widget (ui_manager, "/menubar/Go/Previous"); |
511 | - g_signal_connect (forward, "button-press-event", |
512 | - G_CALLBACK (midori_browser_menu_item_middle_click_event_cb), browser); |
513 | - forward = gtk_ui_manager_get_widget (ui_manager, "/menubar/Go/Next"); |
514 | - g_signal_connect (forward, "button-press-event", |
515 | - G_CALLBACK (midori_browser_menu_item_middle_click_event_cb), browser); |
516 | - |
517 | _action_set_sensitive (browser, "EncodingCustom", FALSE); |
518 | _action_set_visible (browser, "LastSession", FALSE); |
519 | |
520 | @@ -6376,81 +6064,6 @@ |
521 | gtk_toolbar_style); |
522 | } |
523 | |
524 | -#ifndef HAVE_WEBKIT2 |
525 | -static void |
526 | -midori_browser_toolbar_popup_context_menu_history_cb (GtkMenuItem* menu_item, |
527 | - MidoriBrowser* browser) |
528 | -{ |
529 | - gint steps = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item), "steps")); |
530 | - MidoriView* view = MIDORI_VIEW (midori_browser_get_current_tab (browser)); |
531 | - midori_view_go_back_or_forward (view, steps); |
532 | -} |
533 | -#endif |
534 | - |
535 | -static void |
536 | -midori_browser_toolbar_popup_context_menu_history (MidoriBrowser* browser, |
537 | - GtkWidget* widget, |
538 | - gboolean back, |
539 | - gint x, |
540 | - gint y) |
541 | -{ |
542 | -#ifndef HAVE_WEBKIT2 |
543 | - const gint step = back ? -1 : 1; |
544 | - gint steps = step; |
545 | - GtkWidget* menu; |
546 | - WebKitWebBackForwardList* list; |
547 | - WebKitWebHistoryItem* current_item; |
548 | - WebKitWebHistoryItem* history_item; |
549 | - WebKitWebHistoryItem* (*history_next)(WebKitWebBackForwardList*); |
550 | - void (*history_action)(WebKitWebBackForwardList*); |
551 | - |
552 | - list = webkit_web_view_get_back_forward_list ( |
553 | - WEBKIT_WEB_VIEW (midori_view_get_web_view ( |
554 | - MIDORI_VIEW (midori_browser_get_current_tab (browser))))); |
555 | - |
556 | - if (!list) |
557 | - return; |
558 | - |
559 | - menu = gtk_menu_new (); |
560 | - |
561 | - history_action = back ? |
562 | - webkit_web_back_forward_list_go_back : |
563 | - webkit_web_back_forward_list_go_forward; |
564 | - history_next = back ? |
565 | - webkit_web_back_forward_list_get_back_item : |
566 | - webkit_web_back_forward_list_get_forward_item; |
567 | - current_item = webkit_web_back_forward_list_get_current_item (list); |
568 | - |
569 | - for (; (history_item = history_next (list)); history_action (list), steps += step) |
570 | - { |
571 | - const gchar* uri = webkit_web_history_item_get_uri (history_item); |
572 | - GtkWidget* menu_item = gtk_image_menu_item_new_with_label ( |
573 | - webkit_web_history_item_get_title (history_item)); |
574 | - GdkPixbuf* pixbuf; |
575 | - if ((pixbuf = midori_paths_get_icon (uri, widget))) |
576 | - { |
577 | - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), |
578 | - gtk_image_new_from_pixbuf (pixbuf)); |
579 | - g_object_unref (pixbuf); |
580 | - } |
581 | - g_object_set_data (G_OBJECT (menu_item), "uri", (gpointer)uri); |
582 | - g_object_set_data (G_OBJECT (menu_item), "steps", GINT_TO_POINTER (steps)); |
583 | - gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); |
584 | - g_signal_connect (G_OBJECT (menu_item), "activate", |
585 | - G_CALLBACK (midori_browser_toolbar_popup_context_menu_history_cb), |
586 | - browser); |
587 | - if (steps == (10 - 1)) |
588 | - break; |
589 | - } |
590 | - |
591 | - webkit_web_back_forward_list_go_to_item (list, current_item); |
592 | - gtk_widget_show_all (menu); |
593 | - |
594 | - katze_widget_popup (widget, GTK_MENU (menu), NULL, |
595 | - KATZE_MENU_POSITION_LEFT); |
596 | -#endif |
597 | -} |
598 | - |
599 | static void |
600 | _midori_browser_update_settings (MidoriBrowser* browser) |
601 | { |
602 | |
603 | === added file 'midori/midori-navigationaction.vala' |
604 | --- midori/midori-navigationaction.vala 1970-01-01 00:00:00 +0000 |
605 | +++ midori/midori-navigationaction.vala 2015-06-07 21:30:55 +0000 |
606 | @@ -0,0 +1,293 @@ |
607 | +/* |
608 | + Copyright (C) 2015 Christian Dywan <christian@twotoasts.de> |
609 | + |
610 | + This library is free software; you can redistribute it and/or |
611 | + modify it under the terms of the GNU Lesser General Public |
612 | + License as published by the Free Software Foundation; either |
613 | + version 2.1 of the License, or (at your option) any later version. |
614 | + |
615 | + See the file COPYING for the full license text. |
616 | +*/ |
617 | + |
618 | +namespace Midori { |
619 | + /* Back or forward action, with a submenu |
620 | + Since: 0.6.0 */ |
621 | + protected abstract class NavigationAction : Gtk.Action { |
622 | + protected string uri { get; set; } |
623 | + protected double progress { get; set; } |
624 | + |
625 | + public Midori.Tab? tab { get; set; } |
626 | + public signal string? middle_click_uri (); |
627 | + public signal Gtk.Menu? context_menu (); |
628 | + |
629 | + Gtk.ToolButton? toolitem; |
630 | + public override unowned Gtk.Widget create_tool_item () { |
631 | + toolitem = new Gtk.ToolButton (null, null); |
632 | + toolitem.icon_widget = create_icon (Gtk.IconSize.LARGE_TOOLBAR); |
633 | + bind_property ("label", toolitem, "label"); |
634 | + bind_property ("tooltip", toolitem, "tooltip-text"); |
635 | + bind_property ("is-important", toolitem, "is-important"); |
636 | + // Connect to child because ToolItem blocks button-press-event |
637 | + toolitem.get_child ().button_press_event.connect ((event) => { |
638 | + // Ctrl+click or middle click |
639 | + string? uri = event.button == 2 |
640 | + || (event.button == 1 && (bool)(event.state & Gdk.ModifierType.CONTROL_MASK)) |
641 | + ? middle_click_uri () : null; |
642 | + if (uri != null) { |
643 | + Midori.Settings? settings = null; |
644 | + /* Midori.View.settings */ |
645 | + tab.get ("settings", ref settings); |
646 | + GLib.Signal.emit_by_name (tab, "new-tab", uri, settings.open_tabs_in_the_background); |
647 | + return true; |
648 | + } |
649 | + Gtk.Menu? menu = event.button == 3 ? context_menu () : null; |
650 | + if (menu != null) { |
651 | + menu.show (); |
652 | + menu.attach_to_widget (toolitem, null); |
653 | + menu.popup (null, null, null, 1, Gtk.get_current_event_time ()); |
654 | + return true; |
655 | + } |
656 | + return false; |
657 | + }); |
658 | + return toolitem; |
659 | + } |
660 | + |
661 | + construct { |
662 | + notify["tab"].connect (tab_changed); |
663 | + } |
664 | + |
665 | + void tab_changed (ParamSpec pspec) { |
666 | + tab.bind_property ("uri", this, "uri", 0); |
667 | + tab.bind_property ("progress", this, "progress", 0); |
668 | + } |
669 | + |
670 | + string? related_page (string rel, string local) { |
671 | +#if HAVE_WEBKIT2 |
672 | + return null; |
673 | +#else |
674 | + return null; |
675 | +#endif |
676 | + } |
677 | + |
678 | + string next_page () { |
679 | + /* i18n: word stem of "next page" type links, case is not important */ |
680 | + return related_page ("next", _("next")); |
681 | + } |
682 | + |
683 | + string previous_page () { |
684 | + /* i18n: word stem of "previous page" type links, case is not important */ |
685 | + return related_page ("prev", _("previous")); |
686 | + } |
687 | + |
688 | + protected bool can_go_next () { |
689 | + return next_page () != null; |
690 | + } |
691 | + |
692 | + protected void go_next () { |
693 | + tab.web_view.load_uri (next_page ()); |
694 | + } |
695 | + |
696 | + protected void go_next_or_forward () { |
697 | + if (tab.web_view.can_go_forward ()) |
698 | + tab.web_view.go_forward (); |
699 | + else |
700 | + go_next (); |
701 | + } |
702 | + |
703 | + protected bool can_go_previous () { |
704 | + return previous_page () != null; |
705 | + } |
706 | + |
707 | + protected void go_previous () { |
708 | + tab.web_view.load_uri (previous_page ()); |
709 | + } |
710 | + |
711 | + GLib.Icon? scale_if_needed (GLib.Icon? icon) { |
712 | + if (icon is Gdk.Pixbuf) { |
713 | + var pixbuf = icon as Gdk.Pixbuf; |
714 | + int icon_width = 16, icon_height = 16; |
715 | + Gtk.icon_size_lookup (Gtk.IconSize.MENU, out icon_width, out icon_height); |
716 | + if (pixbuf.width > icon_width || pixbuf.height > icon_height) |
717 | + return pixbuf.scale_simple (icon_width, icon_height, Gdk.InterpType.BILINEAR); |
718 | + } |
719 | + return icon; |
720 | + } |
721 | + |
722 | +#if HAVE_WEBKIT2 |
723 | + protected Gtk.Menu? build_menu (List<weak WebKit.BackForwardListItem> items) { |
724 | +#else |
725 | + protected Gtk.Menu? build_menu (List<weak WebKit.WebHistoryItem> items) { |
726 | +#endif |
727 | + var menu = new Gtk.Menu (); |
728 | + foreach (var item in items) { |
729 | + var menuitem = new Gtk.ImageMenuItem.with_label (item.get_title ()); |
730 | + var icon = new Midori.URI.Icon (item.get_uri ()); |
731 | + menuitem.image = new Gtk.Image.from_gicon (scale_if_needed (icon), Gtk.IconSize.MENU); |
732 | + menuitem.always_show_image = true; |
733 | + menuitem.show_all (); |
734 | + menuitem.activate.connect (() =>{ tab.web_view.load_uri (item.get_uri ()); }); |
735 | + menu.append (menuitem); |
736 | + } |
737 | + return menu; |
738 | + } |
739 | + } |
740 | + |
741 | + public class BackAction : NavigationAction { |
742 | + construct { |
743 | + set ("name", "Back", |
744 | + "tooltip", _("Go back to the previous page"), |
745 | + "stock-id", Gtk.Stock.GO_BACK, |
746 | + "is-important", true); |
747 | + |
748 | + bind_property ("uri", this, "sensitive", 0, |
749 | + (binding, source, ref target) => { target = tab.web_view.can_go_back (); return true; }); |
750 | + activate.connect (() => { tab.web_view.go_back (); }); |
751 | + middle_click_uri.connect (() => { return tab.web_view.get_back_forward_list ().get_back_item ().get_uri (); }); |
752 | + context_menu.connect (() => { return build_menu (tab.web_view.get_back_forward_list ().get_back_list_with_limit (10)); }); |
753 | + } |
754 | + } |
755 | + |
756 | + public class PreviousAction : NavigationAction { |
757 | + construct { |
758 | + set ("name", "Previous", |
759 | + /* i18n: Visit the previous logical page, ie. in a forum or blog */ |
760 | + "tooltip", _("Go to the previous sub-page"), |
761 | + "stock-id", Gtk.Stock.MEDIA_PREVIOUS); |
762 | + |
763 | + bind_property ("uri", this, "sensitive", 0, |
764 | + (binding, source, ref target) => { target = can_go_previous (); return true; }); |
765 | + activate.connect (() => { go_previous (); }); |
766 | + context_menu.connect (() => { return build_menu (tab.web_view.get_back_forward_list ().get_back_list_with_limit (10)); }); |
767 | + } |
768 | + } |
769 | + |
770 | + public class ForwardAction : NavigationAction { |
771 | + construct { |
772 | + set ("name", "Forward", |
773 | + "tooltip", _("Go forward to the next page"), |
774 | + "stock-id", Gtk.Stock.GO_FORWARD); |
775 | + |
776 | + bind_property ("uri", this, "sensitive", 0, |
777 | + (binding, source, ref target) => { target = tab.web_view.can_go_forward (); return true; }); |
778 | + activate.connect (() => { tab.web_view.go_forward (); }); |
779 | + middle_click_uri.connect (() => { return tab.web_view.get_back_forward_list ().get_forward_item ().get_uri (); }); |
780 | + context_menu.connect (() => { return build_menu (tab.web_view.get_back_forward_list ().get_forward_list_with_limit (10)); }); |
781 | + } |
782 | + } |
783 | + |
784 | + public class NextAction : NavigationAction { |
785 | + construct { |
786 | + set ("name", "Next", |
787 | + /* i18n: Visit the following logical page, ie. in a forum or blog */ |
788 | + "tooltip", _("Go to the next sub-page"), |
789 | + "stock-id", Gtk.Stock.MEDIA_NEXT); |
790 | + |
791 | + bind_property ("uri", this, "sensitive", 0, |
792 | + (binding, source, ref target) => { target = can_go_next (); return true; }); |
793 | + activate.connect (() => { go_next (); }); |
794 | + context_menu.connect (() => { return build_menu (tab.web_view.get_back_forward_list ().get_forward_list_with_limit (10)); }); |
795 | + } |
796 | + } |
797 | + |
798 | + public class NextForwardAction : NavigationAction { |
799 | + construct { |
800 | + set ("name", "NextForward", |
801 | + "label", _("Next or Forward")); |
802 | + |
803 | + bind_property ("uri", this, "sensitive", 0, |
804 | + (binding, source, ref target) => { |
805 | + target = (tab.web_view.can_go_forward () || can_go_next ()); |
806 | + stock_id = (can_go_next () ? Gtk.Stock.GO_FORWARD : Gtk.Stock.MEDIA_NEXT); |
807 | + tooltip = (can_go_next () ? _("Go forward to the next page") : _("Go to the next sub-page")); |
808 | + return true; |
809 | + }); |
810 | + activate.connect (() => { go_next_or_forward (); }); |
811 | + context_menu.connect (() => { return build_menu (tab.web_view.get_back_forward_list ().get_forward_list_with_limit (10)); }); |
812 | + } |
813 | + } |
814 | + |
815 | + public class HomepageAction : NavigationAction { |
816 | + construct { |
817 | + set ("name", "Homepage", |
818 | + "label", _("_Homepage"), |
819 | + "tooltip", _("Go to your homepage"), |
820 | + "stock-id", Gtk.Stock.HOME); |
821 | + |
822 | + activate.connect (() => { tab.web_view.load_uri ("about:home"); }); |
823 | + middle_click_uri.connect (() => { return "about:home"; }); |
824 | + } |
825 | + } |
826 | + |
827 | + public class StopAction : NavigationAction { |
828 | + construct { |
829 | + set ("name", "Stop", |
830 | + "tooltip",_("Stop loading the current page"), |
831 | + "stock-id", Gtk.Stock.STOP); |
832 | + |
833 | + bind_property ("progress", this, "sensitive", 0, |
834 | + (binding, source, ref target) =>{ |
835 | + target = progress > 0.0; |
836 | + return true; |
837 | + }); |
838 | + activate.connect (() => { tab.web_view.stop_loading (); }); |
839 | + } |
840 | + } |
841 | + |
842 | + public class ReloadAction : NavigationAction { |
843 | + construct { |
844 | + set ("name", "Reload", |
845 | + "tooltip", _("Reload the current page"), |
846 | + "stock-id", Gtk.Stock.REFRESH); |
847 | + |
848 | + bind_property ("progress", this, "sensitive", 0, |
849 | + (binding, source, ref target) =>{ |
850 | + target = progress == 0.0; |
851 | + return true; |
852 | + }); |
853 | + activate.connect (() => { tab.web_view.reload (); }); |
854 | + middle_click_uri.connect (() => { return tab.uri; }); |
855 | + } |
856 | + } |
857 | + |
858 | + public class ReloadUncachedAction : NavigationAction { |
859 | + construct { |
860 | + set ("name", "ReloadUncached", |
861 | + "tooltip", _("Reload page without caching"), |
862 | + "stock-id", Gtk.Stock.REFRESH); |
863 | + |
864 | + bind_property ("progress", this, "sensitive", 0, |
865 | + (binding, source, ref target) =>{ |
866 | + target = progress == 0.0; |
867 | + return true; |
868 | + }); |
869 | + activate.connect (() => { tab.web_view.reload_bypass_cache (); }); |
870 | + middle_click_uri.connect (() => { return tab.uri; }); |
871 | + } |
872 | + } |
873 | + |
874 | + public class ReloadStopAction : NavigationAction { |
875 | + construct { |
876 | + set ("name", "ReloadStop"); |
877 | + |
878 | + bind_property ("progress", this, "stock-id", 0, |
879 | + (binding, source, ref target) => { |
880 | + target = progress > 0.0 ? Gtk.Stock.STOP : Gtk.Stock.REFRESH; |
881 | + tooltip = progress > 0.0 ? _("Stop loading the current page") : _("Reload the current page"); |
882 | + return true; |
883 | + }); |
884 | + activate.connect (() => { |
885 | + if (progress > 0.0) |
886 | + tab.web_view.stop_loading (); |
887 | + else { |
888 | + int x, y, state; |
889 | + tab.get_window ().get_pointer (out x, out y, out state); |
890 | + if ((bool)(state & Gdk.ModifierType.SHIFT_MASK)) |
891 | + tab.web_view.reload_bypass_cache (); |
892 | + else |
893 | + tab.web_view.reload (); |
894 | + } |
895 | + }); |
896 | + middle_click_uri.connect (() => { return tab.uri; }); |
897 | + } |
898 | + } |
899 | +} |
900 | |
901 | === modified file 'midori/midori-view.c' |
902 | --- midori/midori-view.c 2015-03-23 11:33:24 +0000 |
903 | +++ midori/midori-view.c 2015-06-07 21:30:55 +0000 |
904 | @@ -4638,6 +4638,7 @@ |
905 | * Goes back or forward in history. |
906 | * |
907 | * Since: 0.4.5 |
908 | + * Deprecated: 0.6.0 |
909 | **/ |
910 | void |
911 | midori_view_go_back_or_forward (MidoriView* view, |
912 | @@ -4722,6 +4723,7 @@ |
913 | * Return value: an URI, or %NULL |
914 | * |
915 | * Since: 0.2.3 |
916 | + * Deprecated: 0.6.0 |
917 | **/ |
918 | const gchar* |
919 | midori_view_get_previous_page (MidoriView* view) |
920 | @@ -4741,6 +4743,7 @@ |
921 | * Return value: an URI, or %NULL |
922 | * |
923 | * Since: 0.2.3 |
924 | + * Deprecated: 0.6.0 |
925 | **/ |
926 | const gchar* |
927 | midori_view_get_next_page (MidoriView* view) |
928 | |
929 | === modified file 'midori/midori-window.vala' |
930 | --- midori/midori-window.vala 2015-06-06 12:20:44 +0000 |
931 | +++ midori/midori-window.vala 2015-06-07 21:30:55 +0000 |
932 | @@ -85,9 +85,6 @@ |
933 | |
934 | Gtk.ToolItem create_tool_item (Gtk.Action action) { |
935 | var toolitem = action.create_tool_item () as Gtk.ToolItem; |
936 | - /* Show label if button has no icon of any kind */ |
937 | - if (action.icon_name == null && action.stock_id == null && action.gicon == null) |
938 | - toolitem.is_important = true; |
939 | toolitem.get_child ().button_press_event.connect ((event) => { |
940 | return event.button == 3 && context_menu (toolitem, action); }); |
941 | if (name == "CompactMenu") |
942 | |
943 | === modified file 'po/POTFILES.in' |
944 | --- po/POTFILES.in 2015-05-24 00:19:21 +0000 |
945 | +++ po/POTFILES.in 2015-06-07 21:30:55 +0000 |
946 | @@ -11,6 +11,7 @@ |
947 | midori/midori-database.vala |
948 | midori/midori-extension.c |
949 | midori/midori-locationaction.c |
950 | +midori/midori-navigationaction.vala |
951 | midori/midori-panel.c |
952 | midori/midori-settings.vala |
953 | midori/midori-websettings.c |
Gtk.Stock is deprecated. Relevant icon names are "go-next", "go-previous", "go-home", "media- skip-forward" , "media- skip-backward" , "view-refresh"