Merge lp:~midori/midori/headerBarSupport into lp:midori

Proposed by Cris Dywan
Status: Merged
Approved by: Paweł Forysiuk
Approved revision: 6968
Merged at revision: 6961
Proposed branch: lp:~midori/midori/headerBarSupport
Merge into: lp:midori
Diff against target: 1091 lines (+370/-376)
12 files modified
extensions/adblock/extension.vala (+2/-5)
extensions/adblock/widgets.vala (+38/-72)
extensions/statusbar-features.c (+4/-7)
midori/midori-browser.c (+58/-289)
midori/midori-browser.h (+1/-1)
midori/midori-contextaction.vala (+12/-0)
midori/midori-frontend.c (+3/-1)
midori/midori-panedaction.vala (+4/-0)
midori/midori-preferences.c (+7/-0)
midori/midori-window.vala (+239/-0)
midori/midori.vapi (+1/-1)
po/POTFILES.in (+1/-0)
To merge this branch: bzr merge lp:~midori/midori/headerBarSupport
Reviewer Review Type Date Requested Status
Paweł Forysiuk Approve
Danielle Foré (community) ux, testing Approve
Review via email: mp+260017@code.launchpad.net

Commit message

Implement Midori.Window class with toolbar/ headerbar

To post a comment you must log in.
Revision history for this message
Danielle Foré (danrabbit) wrote :

Packing the urlbar into the title are looks weird and means autocompletion results just aren't legible. I think it would make more sense to just pack it left and expand like you'd do in a regular toolbar.

Since the "Toolbar Editor" extension exposes itself through right clicking on the toolbar, there's now no way to use this extension. It should probably get a little settings icon like other extensions with settings have

review: Needs Fixing
lp:~midori/midori/headerBarSupport updated
6958. By Cris Dywan

Fix position of extra actions and paned children

6959. By Cris Dywan

Implement search entry width correctly

6960. By Cris Dywan

Use max width instead of width for URL entry

Revision history for this message
Cris Dywan (kalikiana) wrote :

I'm not sure if I understand the comments fully - I changed the property used to size the URL entry so it expands fully. Is that what you meant by packing?

Right-click on buttons works perfectly for me, like with the classic toolbar, you get the menu to toggle toolbars and the toolbar editor is the last item in it.

Revision history for this message
Danielle Foré (danrabbit) wrote :

URL bar looks right here now :)

Can you possibly add a 1px top and bottom margin to the url entry? It looks like without that box-shadow is clipped.

Ah, if you right click the items themselves you'll get the menu. But if you click the headerbar itself, you only get the window menu. I guess I can file this separately. I personally think it's a little counter-intuitive.

I'm not sure how much you care about the separate web search these days. I added it just for kicks and it's really tiny. Also, there's no pane handle to resize like there used to be.

lp:~midori/midori/headerBarSupport updated
6961. By Cris Dywan

Add and bottom margin to headerbar title

Revision history for this message
Danielle Foré (danrabbit) wrote :

Hey Christian, the last revision didn't seem to fix the issue. The space needs to be reserved for the entry itself. So instead of headerbar.custom_title, you would need to use (widget as Gtk.Entry) directly.

lp:~midori/midori/headerBarSupport updated
6962. By Cris Dywan

No toolbar style without a toolbar

6963. By Cris Dywan

Use original order of actions in HeaderBar

6964. By Cris Dywan

Pixel margins for the entry

Revision history for this message
Cris Dywan (kalikiana) wrote :

Right-click to edit has always been on the buttons themselves. Also it's not officially possible to extend the headerbar context menu - so I'd say that should be discussed and dealt with separately.

Revision history for this message
Cris Dywan (kalikiana) wrote :

Regarding resizing of web search: I'm not sure if it's worth porting the existing design as-is because it can only work if both entries sit in the headerbar which seems conceptually wrong. If interest is there it can certainly be looked into later.

Revision history for this message
Danielle Foré (danrabbit) wrote :

Yeah I'm of the opinion still that the separate web search should just be removed since that functionality is already provided in the urlbar. Just wanted to test possible cases :)

I agree the right click menu bit can/should be a different issue.

Revision history for this message
Danielle Foré (danrabbit) wrote :

Crashes when enabling "statusbar features" extension:

ERROR:/home/daniel/Projects/headerBarSupport/extensions/statusbar-features.c:59:statusbar_features_toolbar_notify_toolbar_style_cb: code should not be reached

Revision history for this message
Danielle Foré (danrabbit) wrote :

Thoughts on moving the extensions area of the toolbar to the right? This would seem to follow with Chrome and Firefox

lp:~midori/midori/headerBarSupport updated
6965. By Cris Dywan

Let statusbar features handle toolbar not being toolbar

6966. By Cris Dywan

Always put extra actions on the headerbar's tail

Revision history for this message
Danielle Foré (danrabbit) wrote :

Everything working as expected here :D

review: Approve (ux, testing)
Revision history for this message
Cody Garver (codygarver) wrote :

I made some comments throughout the diff about code style inconsistencies

Be sure to update the translation template after you commit new string(s) to trunk

lp:~midori/midori/headerBarSupport updated
6967. By Cris Dywan

Fix spacing in lambdas

6968. By Cris Dywan

Only connect buttons to toolbar style

Revision history for this message
Paweł Forysiuk (tuxator) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'extensions/adblock/extension.vala'
--- extensions/adblock/extension.vala 2015-04-18 21:38:47 +0000
+++ extensions/adblock/extension.vala 2015-06-06 12:33:01 +0000
@@ -115,8 +115,6 @@
115 browser_removed (browser);115 browser_removed (browser);
116 app.add_browser.disconnect (browser_added);116 app.add_browser.disconnect (browser_added);
117 app.remove_browser.disconnect (browser_removed);117 app.remove_browser.disconnect (browser_removed);
118 foreach (var button in status_icon.toggle_buttons)
119 button.destroy ();
120 }118 }
121119
122 void browser_added (Midori.Browser browser) {120 void browser_added (Midori.Browser browser) {
@@ -125,9 +123,7 @@
125 browser.add_tab.connect (tab_added);123 browser.add_tab.connect (tab_added);
126 browser.remove_tab.connect (tab_removed);124 browser.remove_tab.connect (tab_removed);
127125
128 var toggle_button = status_icon.add_button ();126 browser.add_action (status_icon);
129 browser.statusbar.pack_end (toggle_button, false, false, 3);
130 toggle_button.show ();
131 }127 }
132128
133 void browser_removed (Midori.Browser browser) {129 void browser_removed (Midori.Browser browser) {
@@ -135,6 +131,7 @@
135 tab_removed (tab);131 tab_removed (tab);
136 browser.add_tab.disconnect (tab_added);132 browser.add_tab.disconnect (tab_added);
137 browser.remove_tab.disconnect (tab_removed);133 browser.remove_tab.disconnect (tab_removed);
134 browser.remove_action (status_icon);
138 }135 }
139136
140 void tab_added (Midori.View view) {137 void tab_added (Midori.View view) {
141138
=== modified file 'extensions/adblock/widgets.vala'
--- extensions/adblock/widgets.vala 2014-04-03 17:07:04 +0000
+++ extensions/adblock/widgets.vala 2015-06-06 12:33:01 +0000
@@ -13,99 +13,65 @@
13namespace Adblock {13namespace Adblock {
1414
1515
16 public class StatusIcon {16 public class StatusIcon : Midori.ContextAction {
17 Config config;17 Config config;
18 SubscriptionManager manager;18 SubscriptionManager manager;
19 public State state;19 public State state;
20 public bool debug_element_toggled;20 public bool debug_element_toggled;
21 public List<IconButton> toggle_buttons;
2221
23 public StatusIcon (Adblock.Config config, SubscriptionManager manager) {22 public StatusIcon (Adblock.Config config, SubscriptionManager manager) {
23 GLib.Object (name: "AdblockStatusMenu");
24
24 this.config = config;25 this.config = config;
25 this.manager = manager;26 this.manager = manager;
26 this.debug_element_toggled = false;27 this.debug_element_toggled = false;
27 }28
2829 var item = new Midori.ContextAction ("Preferences",
29 public void set_state (Adblock.State state) {30 _("Preferences"), null, Gtk.STOCK_PREFERENCES);
30 this.state = state;31 item.activate.connect (() => {
31 update_buttons ();
32 }
33
34 public class IconButton : Gtk.Button {
35 Gtk.Image icon;
36
37 public IconButton () {
38 icon = new Gtk.Image ();
39 add (icon);
40 icon.show ();
41 }
42
43 public void set_status (string status) {
44 icon.set_from_file (Midori.Paths.get_res_filename ("adblock/%s.png".printf (status)));
45 }
46 }
47
48 public IconButton add_button () {
49 var button = new IconButton ();
50 button.set_status (config.enabled ? "enabled" : "disabled");
51 button.clicked.connect (icon_clicked);
52 button.destroy.connect (()=> { toggle_buttons.remove (button); });
53 toggle_buttons.append (button);
54 return button;
55 }
56
57 public void update_buttons () {
58 string state = "";
59 foreach (var toggle_button in toggle_buttons) {
60 if (this.state == State.BLOCKED) {
61 toggle_button.set_status ("blocked");
62 state = _("Blocking");
63 }
64 if (this.state == State.ENABLED) {
65 toggle_button.set_status ("enabled");
66 state = _("Enabled");
67 }
68 if (this.state == State.DISABLED) {
69 toggle_button.set_status ("disabled");
70 state = _("Disabled");
71 }
72 toggle_button.set_tooltip_text (_("Adblock state: %s").printf (state));
73 }
74 }
75
76 public void icon_clicked (Gtk.Button toggle_button) {
77 var menu = new Gtk.Menu ();
78
79 var menuitem = new Gtk.ImageMenuItem.with_label (_("Preferences"));
80 var image = new Gtk.Image.from_stock (Gtk.STOCK_PREFERENCES, Gtk.IconSize.MENU);
81 menuitem.always_show_image = true;
82 menuitem.set_image (image);
83 menuitem.activate.connect (() => {
84 manager.add_subscription (null);32 manager.add_subscription (null);
85 });33 });
86 menu.append (menuitem);34 add (item);
8735
88 var separator = new Gtk.SeparatorMenuItem ();36 add (null);
89 menu.append (separator);37
9038 var checkitem = new Gtk.ToggleAction ("Disable", _("Disable"), null, null);
91 var checkitem = new Gtk.CheckMenuItem.with_label (_("Disable"));
92 checkitem.set_active (!config.enabled);39 checkitem.set_active (!config.enabled);
93 checkitem.toggled.connect (() => {40 checkitem.toggled.connect (() => {
94 config.enabled = !checkitem.active;41 config.enabled = !checkitem.active;
95 set_state (config.enabled ? Adblock.State.ENABLED : Adblock.State.DISABLED);42 set_state (config.enabled ? Adblock.State.ENABLED : Adblock.State.DISABLED);
96 });43 });
97 menu.append (checkitem);44 add (checkitem);
9845
99 var hideritem = new Gtk.CheckMenuItem.with_label (_("Display hidden elements"));46 var hideritem = new Gtk.ToggleAction ("HiddenElements",
47 _("Display hidden elements"), null, null);
100 hideritem.set_active (debug_element_toggled);48 hideritem.set_active (debug_element_toggled);
101 hideritem.toggled.connect (() => {49 hideritem.toggled.connect (() => {
102 this.debug_element_toggled = hideritem.active;50 this.debug_element_toggled = hideritem.active;
103 });51 });
104 menu.append (hideritem);52 add (hideritem);
10553 set_status (config.enabled ? "enabled" : "disabled");
106 menu.show_all ();54 }
107 menu.attach_to_widget (toggle_button, null);55
108 menu.popup (null, null, null, 1, Gtk.get_current_event_time ());56 void set_status (string status) {
57 gicon = new GLib.FileIcon (File.new_for_path (
58 Midori.Paths.get_res_filename ("adblock/%s.png".printf (status))));
59 }
60
61 public void set_state (Adblock.State state) {
62 this.state = state;
63
64 if (this.state == State.BLOCKED) {
65 set_status ("blocked");
66 tooltip = _("Blocking");
67 } else if (this.state == State.ENABLED) {
68 set_status ("enabled");
69 tooltip = _("Enabled");
70 } else if (this.state == State.DISABLED) {
71 set_status ("disabled");
72 tooltip = _("Disabled");
73 } else
74 assert_not_reached ();
109 }75 }
110 }76 }
11177
11278
=== modified file 'extensions/statusbar-features.c'
--- extensions/statusbar-features.c 2013-10-30 00:05:40 +0000
+++ extensions/statusbar-features.c 2015-06-06 12:33:01 +0000
@@ -153,19 +153,13 @@
153 image = gtk_image_new_from_stock (STOCK_IMAGE, GTK_ICON_SIZE_MENU);153 image = gtk_image_new_from_stock (STOCK_IMAGE, GTK_ICON_SIZE_MENU);
154 gtk_button_set_image (GTK_BUTTON (button), image);154 gtk_button_set_image (GTK_BUTTON (button), image);
155 gtk_widget_set_tooltip_text (button, _("Load images automatically"));155 gtk_widget_set_tooltip_text (button, _("Load images automatically"));
156 statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button);
157 g_signal_connect (toolbar, "notify::toolbar-style",
158 G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button);
159 }156 }
160 if (!strcmp (property, "enable-javascript"))157 else if (!strcmp (property, "enable-javascript"))
161 {158 {
162 g_object_set_data (G_OBJECT (button), "feature-label", _("Scripts"));159 g_object_set_data (G_OBJECT (button), "feature-label", _("Scripts"));
163 image = gtk_image_new_from_stock (STOCK_SCRIPT, GTK_ICON_SIZE_MENU);160 image = gtk_image_new_from_stock (STOCK_SCRIPT, GTK_ICON_SIZE_MENU);
164 gtk_button_set_image (GTK_BUTTON (button), image);161 gtk_button_set_image (GTK_BUTTON (button), image);
165 gtk_widget_set_tooltip_text (button, _("Enable scripts"));162 gtk_widget_set_tooltip_text (button, _("Enable scripts"));
166 statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button);
167 g_signal_connect (toolbar, "notify::toolbar-style",
168 G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button);
169 }163 }
170 else if (!strcmp (property, "enable-plugins"))164 else if (!strcmp (property, "enable-plugins"))
171 {165 {
@@ -175,6 +169,9 @@
175 image = gtk_image_new_from_stock (MIDORI_STOCK_PLUGINS, GTK_ICON_SIZE_MENU);169 image = gtk_image_new_from_stock (MIDORI_STOCK_PLUGINS, GTK_ICON_SIZE_MENU);
176 gtk_button_set_image (GTK_BUTTON (button), image);170 gtk_button_set_image (GTK_BUTTON (button), image);
177 gtk_widget_set_tooltip_text (button, _("Enable Netscape plugins"));171 gtk_widget_set_tooltip_text (button, _("Enable Netscape plugins"));
172 }
173 if (GTK_IS_TOOLBAR (toolbar) && GTK_IS_BUTTON (button))
174 {
178 statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button);175 statusbar_features_toolbar_notify_toolbar_style_cb (toolbar, NULL, button);
179 g_signal_connect (toolbar, "notify::toolbar-style",176 g_signal_connect (toolbar, "notify::toolbar-style",
180 G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button);177 G_CALLBACK (statusbar_features_toolbar_notify_toolbar_style_cb), button);
181178
=== modified file 'midori/midori-browser.c'
--- midori/midori-browser.c 2015-04-28 22:01:05 +0000
+++ midori/midori-browser.c 2015-06-06 12:33:01 +0000
@@ -61,7 +61,7 @@
6161
62struct _MidoriBrowser62struct _MidoriBrowser
63{63{
64 GtkWindow parent_instance;64 MidoriWindow parent_instance;
65 GtkActionGroup* action_group;65 GtkActionGroup* action_group;
66 GtkWidget* menubar;66 GtkWidget* menubar;
67 GtkWidget* throbber;67 GtkWidget* throbber;
@@ -102,7 +102,7 @@
102 gboolean bookmarkbar_populate;102 gboolean bookmarkbar_populate;
103};103};
104104
105G_DEFINE_TYPE (MidoriBrowser, midori_browser, GTK_TYPE_WINDOW)105G_DEFINE_TYPE (MidoriBrowser, midori_browser, MIDORI_TYPE_WINDOW)
106106
107enum107enum
108{108{
@@ -192,6 +192,12 @@
192 GParamSpec* pspec,192 GParamSpec* pspec,
193 MidoriBrowser* browser);193 MidoriBrowser* browser);
194194
195static void
196midori_browser_toolbar_popup_context_menu_history (MidoriBrowser* browser,
197 GtkWidget* widget,
198 gboolean back,
199 gint x,
200 gint y);
195void201void
196midori_panel_set_toolbar_style (MidoriPanel* panel,202midori_panel_set_toolbar_style (MidoriPanel* panel,
197 GtkToolbarStyle style);203 GtkToolbarStyle style);
@@ -1710,10 +1716,6 @@
1710}1716}
17111717
1712static void1718static void
1713_midori_browser_set_toolbar_items (MidoriBrowser* browser,
1714 const gchar* items);
1715
1716static void
1717midori_view_new_view_cb (GtkWidget* view,1719midori_view_new_view_cb (GtkWidget* view,
1718 GtkWidget* new_view,1720 GtkWidget* new_view,
1719 MidoriNewView where,1721 MidoriNewView where,
@@ -1735,7 +1737,8 @@
1735 sokoke_widget_set_visible (new_browser->bookmarkbar, FALSE);1737 sokoke_widget_set_visible (new_browser->bookmarkbar, FALSE);
1736 sokoke_widget_set_visible (new_browser->statusbar, FALSE);1738 sokoke_widget_set_visible (new_browser->statusbar, FALSE);
1737 _action_set_visible (new_browser, "CompactMenu", FALSE);1739 _action_set_visible (new_browser, "CompactMenu", FALSE);
1738 _midori_browser_set_toolbar_items (new_browser, "Location");1740 _action_set_sensitive (new_browser, "Location", FALSE);
1741 midori_window_set_actions (MIDORI_WINDOW (new_browser), "Location");
1739 sokoke_widget_set_visible (new_browser->panel, FALSE);1742 sokoke_widget_set_visible (new_browser->panel, FALSE);
1740 midori_browser_add_tab (new_browser, new_view);1743 midori_browser_add_tab (new_browser, new_view);
1741 midori_browser_set_current_tab (new_browser, new_view);1744 midori_browser_set_current_tab (new_browser, new_view);
@@ -2463,7 +2466,7 @@
2463 "navigationbar",2466 "navigationbar",
2464 "Navigationbar",2467 "Navigationbar",
2465 "The navigationbar",2468 "The navigationbar",
2466 GTK_TYPE_TOOLBAR,2469 GTK_TYPE_CONTAINER,
2467 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));2470 G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
24682471
2469 g_object_class_install_property (gobject_class,2472 g_object_class_install_property (gobject_class,
@@ -3111,22 +3114,6 @@
3111 midori_findbar_continue (MIDORI_FINDBAR (browser->find), FALSE);3114 midori_findbar_continue (MIDORI_FINDBAR (browser->find), FALSE);
3112}3115}
31133116
3114static void
3115midori_browser_navigationbar_notify_style_cb (GObject* object,
3116 GParamSpec* arg1,
3117 MidoriBrowser* browser)
3118{
3119 MidoriToolbarStyle toolbar_style;
3120
3121 g_object_get (browser->settings, "toolbar-style", &toolbar_style, NULL);
3122 _midori_browser_set_toolbar_style (browser, toolbar_style);
3123}
3124
3125static gboolean
3126midori_browser_toolbar_item_button_press_event_cb (GtkWidget* toolitem,
3127 GdkEventButton* event,
3128 MidoriBrowser* browser);
3129
3130/**3117/**
3131 * midori_browser_get_toolbar_actions:3118 * midori_browser_get_toolbar_actions:
3132 *3119 *
@@ -3176,7 +3163,8 @@
3176 MidoriContextAction* menu = midori_context_action_new ("ToolbarContextMenu", NULL, NULL, NULL);3163 MidoriContextAction* menu = midori_context_action_new ("ToolbarContextMenu", NULL, NULL, NULL);
3177 midori_context_action_add_action_group (menu, browser->action_group);3164 midori_context_action_add_action_group (menu, browser->action_group);
3178 midori_context_action_add_by_name (menu, "Menubar");3165 midori_context_action_add_by_name (menu, "Menubar");
3179 midori_context_action_add_by_name (menu, "Navigationbar");3166 if (GTK_IS_TOOLBAR (browser->navigationbar))
3167 midori_context_action_add_by_name (menu, "Navigationbar");
3180 midori_context_action_add_by_name (menu, "Bookmarkbar");3168 midori_context_action_add_by_name (menu, "Bookmarkbar");
3181 midori_context_action_add_by_name (menu, "Statusbar");3169 midori_context_action_add_by_name (menu, "Statusbar");
31823170
@@ -3460,7 +3448,7 @@
3460}3448}
34613449
3462static gboolean3450static gboolean
3463midori_browser_has_native_menubar (void)3451midori_browser_has_native_menubar (MidoriBrowser* browser)
3464{3452{
3465 static const gchar* ubuntu_menuproxy = NULL;3453 static const gchar* ubuntu_menuproxy = NULL;
3466 if (ubuntu_menuproxy == NULL)3454 if (ubuntu_menuproxy == NULL)
@@ -3480,51 +3468,13 @@
3480 MidoriBrowser* browser)3468 MidoriBrowser* browser)
3481{3469{
3482 gboolean active = gtk_toggle_action_get_active (menubar_action);3470 gboolean active = gtk_toggle_action_get_active (menubar_action);
3483 GtkAction* menu_action = _action_by_name (browser, "CompactMenu");
3484 GString* toolbar_items;
3485 GList* children;
3486 gchar* items;
34873471
3488 if (midori_browser_has_native_menubar ())3472 if (midori_browser_has_native_menubar (browser))
3489 active = FALSE;3473 active = FALSE;
34903474 midori_window_set_show_menubar (MIDORI_WINDOW (browser), active);
3491 toolbar_items = g_string_new (NULL);
3492 children = gtk_container_get_children (GTK_CONTAINER (browser->navigationbar));
3493 for (; children != NULL; children = g_list_next (children))
3494 {
3495 GtkAction* action = gtk_activatable_get_related_action (
3496 GTK_ACTIVATABLE (children->data));
3497 if (!action)
3498 continue;
3499 if (action == ((GtkAction*)menu_action))
3500 {
3501 if (active)
3502 {
3503 gtk_container_remove (GTK_CONTAINER (browser->navigationbar),
3504 GTK_WIDGET (children->data));
3505 }
3506 continue;
3507 }
3508 else if (MIDORI_IS_PANED_ACTION (action))
3509 {
3510 MidoriPanedAction* paned_action = MIDORI_PANED_ACTION (action);
3511 g_string_append_printf (toolbar_items, "%s,%s",
3512 midori_paned_action_get_child1_name (paned_action),
3513 midori_paned_action_get_child2_name (paned_action));
3514 }
3515 else
3516 g_string_append (toolbar_items, gtk_action_get_name (action));
3517 g_string_append_c (toolbar_items, ',');
3518 }
3519 g_list_free (children);
3520
3521 if (katze_object_get_boolean (browser->settings, "show-menubar") != active)3475 if (katze_object_get_boolean (browser->settings, "show-menubar") != active)
3522 g_object_set (browser->settings, "show-menubar", active, NULL);3476 g_object_set (browser->settings, "show-menubar", active, NULL);
35233477
3524 items = g_string_free (toolbar_items, FALSE);
3525 g_object_set (browser->settings, "toolbar-items", items, NULL);
3526 g_free (items);
3527
3528 sokoke_widget_set_visible (browser->menubar, active);3478 sokoke_widget_set_visible (browser->menubar, active);
3529 g_object_set_data (G_OBJECT (browser), "midori-toolbars-visible",3479 g_object_set_data (G_OBJECT (browser), "midori-toolbars-visible",
3530 gtk_widget_get_visible (browser->menubar)3480 gtk_widget_get_visible (browser->menubar)
@@ -4396,6 +4346,26 @@
4396 midori_bookmarks_db_remove_item (browser->bookmarks, item);4346 midori_bookmarks_db_remove_item (browser->bookmarks, item);
4397}4347}
43984348
4349static gboolean
4350midori_browser_toolbar_context_menu_cb (GtkWidget* toolbar,
4351 GtkWidget* widget,
4352 GtkAction* action,
4353 MidoriBrowser* browser)
4354{
4355 const gchar* name = gtk_action_get_name (action);
4356 gboolean back = !g_strcmp0 (name, "Back");
4357 if (back
4358 || g_str_has_suffix (name, "Forward"))
4359 {
4360 midori_browser_toolbar_popup_context_menu_history (
4361 browser,
4362 widget,
4363 back, 0, 0);
4364 return TRUE;
4365 }
4366 return midori_browser_toolbar_popup_context_menu_cb (widget, 0, 0, 0, browser);
4367}
4368
4399static void4369static void
4400midori_browser_bookmark_popup (GtkWidget* widget,4370midori_browser_bookmark_popup (GtkWidget* widget,
4401 GdkEventButton* event,4371 GdkEventButton* event,
@@ -5958,7 +5928,6 @@
5958 GtkWidget* homepage;5928 GtkWidget* homepage;
5959 GtkWidget* back;5929 GtkWidget* back;
5960 GtkWidget* forward;5930 GtkWidget* forward;
5961 GtkSettings* gtk_settings;
5962 GtkWidget* hpaned;5931 GtkWidget* hpaned;
5963 GtkWidget* vpaned;5932 GtkWidget* vpaned;
5964 GtkWidget* scrolled;5933 GtkWidget* scrolled;
@@ -5990,12 +5959,14 @@
5990 #endif5959 #endif
5991 #endif5960 #endif
5992 vbox = gtk_vbox_new (FALSE, 0);5961 vbox = gtk_vbox_new (FALSE, 0);
5993 gtk_container_add (GTK_CONTAINER (browser), vbox);5962 /* gtk_container_add (GTK_CONTAINER (browser), vbox);
5994 gtk_widget_show (vbox);5963 gtk_widget_show (vbox); */
5964 midori_window_set_contents (MIDORI_WINDOW (browser), vbox);
59955965
5996 /* Let us see some ui manager magic */5966 /* Let us see some ui manager magic */
5997 browser->action_group = gtk_action_group_new ("Browser");5967 browser->action_group = gtk_action_group_new ("Browser");
5998 gtk_action_group_set_translation_domain (browser->action_group, GETTEXT_PACKAGE);5968 gtk_action_group_set_translation_domain (browser->action_group, GETTEXT_PACKAGE);
5969 midori_window_add_action_group (MIDORI_WINDOW (browser), browser->action_group);
5999 midori_browser_add_actions (browser);5970 midori_browser_add_actions (browser);
6000 ui_manager = gtk_ui_manager_new ();5971 ui_manager = gtk_ui_manager_new ();
6001 accel_group = gtk_ui_manager_get_accel_group (ui_manager);5972 accel_group = gtk_ui_manager_get_accel_group (ui_manager);
@@ -6174,9 +6145,9 @@
61746145
6175 /* Create the menubar */6146 /* Create the menubar */
6176 browser->menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar");6147 browser->menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar");
6177 gtk_box_pack_start (GTK_BOX (vbox), browser->menubar, FALSE, FALSE, 0);6148 midori_window_add_toolbar (MIDORI_WINDOW (browser), browser->menubar);
6178 gtk_widget_hide (browser->menubar);6149 gtk_widget_hide (browser->menubar);
6179 _action_set_visible (browser, "Menubar", !midori_browser_has_native_menubar ());6150 _action_set_visible (browser, "Menubar", !midori_browser_has_native_menubar (browser));
6180 g_signal_connect (browser->menubar, "button-press-event",6151 g_signal_connect (browser->menubar, "button-press-event",
6181 G_CALLBACK (midori_browser_menu_button_press_event_cb), browser);6152 G_CALLBACK (midori_browser_menu_button_press_event_cb), browser);
61826153
@@ -6235,30 +6206,18 @@
6235 _action_set_visible (browser, "UndoTabClose", browser->trash != NULL);6206 _action_set_visible (browser, "UndoTabClose", browser->trash != NULL);
62366207
6237 /* Create the navigationbar */6208 /* Create the navigationbar */
6238 browser->navigationbar = gtk_ui_manager_get_widget (6209 browser->navigationbar = midori_window_get_toolbar (MIDORI_WINDOW (browser));
6239 ui_manager, "/toolbar_navigation");6210 g_signal_connect (browser, "context-menu",
6240 katze_widget_add_class (browser->navigationbar, "primary-toolbar");6211 G_CALLBACK (midori_browser_toolbar_context_menu_cb), browser);
6241 /* FIXME: Settings should be connected with screen changes */
6242 gtk_settings = gtk_widget_get_settings (GTK_WIDGET (browser));
6243 if (gtk_settings)
6244 g_signal_connect (gtk_settings, "notify::gtk-toolbar-style",
6245 G_CALLBACK (midori_browser_navigationbar_notify_style_cb), browser);
6246 gtk_toolbar_set_show_arrow (GTK_TOOLBAR (browser->navigationbar), TRUE);
6247 g_object_set (_action_by_name (browser, "Back"), "is-important", TRUE, NULL);
6248 gtk_widget_hide (browser->navigationbar);
6249 g_signal_connect (browser->navigationbar, "popup-context-menu",
6250 G_CALLBACK (midori_browser_toolbar_popup_context_menu_cb), browser);
6251 gtk_box_pack_start (GTK_BOX (vbox), browser->navigationbar, FALSE, FALSE, 0);
62526212
6253 /* Bookmarkbar */6213 /* Bookmarkbar */
6254 browser->bookmarkbar = gtk_toolbar_new ();6214 browser->bookmarkbar = gtk_toolbar_new ();
6255 katze_widget_add_class (browser->bookmarkbar, "secondary-toolbar");
6256 gtk_widget_set_name (browser->bookmarkbar, "MidoriBookmarkbar");6215 gtk_widget_set_name (browser->bookmarkbar, "MidoriBookmarkbar");
6257 gtk_toolbar_set_icon_size (GTK_TOOLBAR (browser->bookmarkbar),6216 gtk_toolbar_set_icon_size (GTK_TOOLBAR (browser->bookmarkbar),
6258 GTK_ICON_SIZE_MENU);6217 GTK_ICON_SIZE_MENU);
6259 gtk_toolbar_set_style (GTK_TOOLBAR (browser->bookmarkbar),6218 gtk_toolbar_set_style (GTK_TOOLBAR (browser->bookmarkbar),
6260 GTK_TOOLBAR_BOTH_HORIZ);6219 GTK_TOOLBAR_BOTH_HORIZ);
6261 gtk_box_pack_start (GTK_BOX (vbox), browser->bookmarkbar, FALSE, FALSE, 0);6220 midori_window_add_toolbar (MIDORI_WINDOW (browser), browser->bookmarkbar);
6262 g_signal_connect (browser->bookmarkbar, "popup-context-menu",6221 g_signal_connect (browser->bookmarkbar, "popup-context-menu",
6263 G_CALLBACK (midori_browser_toolbar_popup_context_menu_cb), browser);6222 G_CALLBACK (midori_browser_toolbar_popup_context_menu_cb), browser);
62646223
@@ -6407,9 +6366,12 @@
6407 gtk_toolbar_style = GTK_TOOLBAR_BOTH_HORIZ;6366 gtk_toolbar_style = GTK_TOOLBAR_BOTH_HORIZ;
6408 }6367 }
6409 }6368 }
6410 gtk_toolbar_set_style (GTK_TOOLBAR (browser->navigationbar),6369 if (GTK_IS_TOOLBAR (browser->navigationbar))
6411 gtk_toolbar_style);6370 {
6412 gtk_toolbar_set_icon_size (GTK_TOOLBAR (browser->navigationbar), icon_size);6371 gtk_toolbar_set_style (GTK_TOOLBAR (browser->navigationbar),
6372 gtk_toolbar_style);
6373 gtk_toolbar_set_icon_size (GTK_TOOLBAR (browser->navigationbar), icon_size);
6374 }
6413 midori_panel_set_toolbar_style (MIDORI_PANEL (browser->panel),6375 midori_panel_set_toolbar_style (MIDORI_PANEL (browser->panel),
6414 gtk_toolbar_style);6376 gtk_toolbar_style);
6415}6377}
@@ -6489,201 +6451,6 @@
6489#endif6451#endif
6490}6452}
64916453
6492static gboolean
6493midori_browser_toolbar_item_button_press_event_cb (GtkWidget* toolitem,
6494 GdkEventButton* event,
6495 MidoriBrowser* browser)
6496{
6497 if (MIDORI_EVENT_NEW_TAB (event))
6498 {
6499 /* check if the middle-click was performed over reload button */
6500 if (g_object_get_data (G_OBJECT (toolitem), "reload-middle-click"))
6501 {
6502 gtk_action_activate (_action_by_name (browser, "TabDuplicate"));
6503 }
6504
6505 GtkWidget* parent = gtk_widget_get_parent (toolitem);
6506 GtkAction* action = gtk_activatable_get_related_action (
6507 GTK_ACTIVATABLE (parent));
6508
6509 g_object_set_data (G_OBJECT (action),
6510 "midori-middle-click",
6511 GINT_TO_POINTER (1));
6512
6513 return _action_navigation_activate (action, browser);
6514 }
6515 else if (MIDORI_EVENT_CONTEXT_MENU (event))
6516 {
6517 if (g_object_get_data (G_OBJECT (toolitem), "history-back"))
6518 {
6519 midori_browser_toolbar_popup_context_menu_history (
6520 browser,
6521 GTK_IS_BIN (toolitem) && gtk_bin_get_child (GTK_BIN (toolitem)) ?
6522 gtk_widget_get_parent (toolitem) : toolitem,
6523 TRUE, event->x, event->y);
6524 }
6525 else if (g_object_get_data (G_OBJECT (toolitem), "history-forward"))
6526 {
6527 midori_browser_toolbar_popup_context_menu_history (
6528 browser,
6529 GTK_IS_BIN (toolitem) && gtk_bin_get_child (GTK_BIN (toolitem)) ?
6530 gtk_widget_get_parent (toolitem) : toolitem,
6531 FALSE, event->x, event->y);
6532 }
6533 else
6534 {
6535 midori_browser_toolbar_popup_context_menu_cb (
6536 GTK_IS_BIN (toolitem) && gtk_bin_get_child (GTK_BIN (toolitem)) ?
6537 gtk_widget_get_parent (toolitem) : toolitem,
6538 event->x, event->y, event->button, browser);
6539 }
6540 return TRUE;
6541 }
6542 return FALSE;
6543}
6544
6545static void
6546_midori_browser_search_item_allocate_cb (GtkWidget* widget,
6547 GdkRectangle* allocation,
6548 gpointer user_data)
6549{
6550 MidoriBrowser* browser = MIDORI_BROWSER (user_data);
6551 MidoriWebSettings* settings = browser->settings;
6552 g_object_set (settings, "search-width", allocation->width, NULL);
6553}
6554
6555static void
6556_midori_browser_set_toolbar_items (MidoriBrowser* browser,
6557 const gchar* items)
6558{
6559 gchar** names;
6560 gchar** name;
6561 GtkAction* action;
6562 GtkWidget* toolitem;
6563 const char* token_location = g_intern_static_string ("Location");
6564 const char* token_search = g_intern_static_string ("Search");
6565 const char* token_dontcare = g_intern_static_string ("Dontcare");
6566 const char* token_current = token_dontcare;
6567 const char* token_last;
6568
6569 gtk_container_foreach (GTK_CONTAINER (browser->navigationbar),
6570 (GtkCallback)gtk_widget_destroy, NULL);
6571
6572 names = g_strsplit (items ? items : "", ",", 0);
6573 name = names;
6574 for (; *name; ++name)
6575 {
6576 action = _action_by_name (browser, *name);
6577 if (action && strstr (*name, "CompactMenu") == NULL)
6578 {
6579 token_last = token_current;
6580
6581 /* Decide, what kind of token (item) we got now */
6582 if (name && !g_strcmp0 (*name, "Location"))
6583 token_current = token_location;
6584 else if (name && !g_strcmp0 (*name, "Search"))
6585 token_current = token_search;
6586 else
6587 token_current = token_dontcare;
6588
6589 if ((token_current == token_location || token_current == token_search) &&
6590 (token_last == token_location || token_last == token_search))
6591 {
6592 GtkWidget* toolitem_first = gtk_action_create_tool_item (
6593 _action_by_name (browser, token_last));
6594 GtkWidget* toolitem_second = gtk_action_create_tool_item (
6595 _action_by_name (browser, token_current));
6596 MidoriPanedAction* paned_action = MIDORI_PANED_ACTION (
6597 _action_by_name (browser, "LocationSearch"));
6598 MidoriWebSettings* midori_settings = browser->settings;
6599 midori_paned_action_set_child1 (paned_action, toolitem_first, token_last,
6600 token_last == token_search ? FALSE : TRUE, TRUE);
6601 midori_paned_action_set_child2 (paned_action, toolitem_second, token_current,
6602 token_current == token_search ? FALSE : TRUE, TRUE);
6603 g_signal_connect (G_OBJECT (token_current == token_search ? toolitem_second : toolitem_first),
6604 "size-allocate", G_CALLBACK (_midori_browser_search_item_allocate_cb), (gpointer) browser);
6605
6606 gtk_widget_set_size_request (
6607 token_last == token_search ? toolitem_first : toolitem_second,
6608 katze_object_get_int ((gpointer) midori_settings,
6609 "search-width"),
6610 -1);
6611
6612 toolitem = gtk_action_create_tool_item (GTK_ACTION (paned_action));
6613 token_current = token_dontcare;
6614 }
6615 else if (token_current == token_dontcare && token_last != token_dontcare)
6616 {
6617 /* There was a location or search item, but was not followed by
6618 the other one, that form a couple */
6619 gtk_toolbar_insert (GTK_TOOLBAR (browser->navigationbar),
6620 GTK_TOOL_ITEM (gtk_action_create_tool_item (
6621 _action_by_name (browser, token_last))),
6622 -1);
6623
6624 toolitem = gtk_action_create_tool_item (action);
6625 }
6626 else if (token_current != token_dontcare && token_last == token_dontcare)
6627 continue;
6628 /* A "new tab" button is already part of the notebook */
6629 else if (!strcmp (gtk_action_get_name (action), "TabNew"))
6630 continue;
6631 else
6632 toolitem = gtk_action_create_tool_item (action);
6633
6634 if (gtk_bin_get_child (GTK_BIN (toolitem)))
6635 {
6636 if (!g_strcmp0 (*name, "Back"))
6637 g_object_set_data (G_OBJECT (gtk_bin_get_child (GTK_BIN (toolitem))),
6638 "history-back", (void*) 0xdeadbeef);
6639 else if (g_str_has_suffix (*name, "Forward"))
6640 g_object_set_data (G_OBJECT (gtk_bin_get_child (GTK_BIN (toolitem))),
6641 "history-forward", (void*) 0xdeadbeef);
6642 else if (g_strcmp0 (*name, "Reload"))
6643 g_object_set_data (G_OBJECT (gtk_bin_get_child (GTK_BIN (toolitem))),
6644 "reload-middle-click", (void*) 0xdeadbeef);
6645
6646 g_signal_connect (gtk_bin_get_child (GTK_BIN (toolitem)),
6647 "button-press-event",
6648 G_CALLBACK (midori_browser_toolbar_item_button_press_event_cb),
6649 browser);
6650 }
6651 else
6652 {
6653 gtk_tool_item_set_use_drag_window (GTK_TOOL_ITEM (toolitem), TRUE);
6654 g_signal_connect (toolitem,
6655 "button-press-event",
6656 G_CALLBACK (midori_browser_toolbar_item_button_press_event_cb),
6657 browser);
6658 }
6659 gtk_toolbar_insert (GTK_TOOLBAR (browser->navigationbar),
6660 GTK_TOOL_ITEM (toolitem), -1);
6661 }
6662 }
6663 g_strfreev (names);
6664
6665 /* There was a last item, which could have formed a couple, but
6666 there is no item left, we add that last item to toolbar as is */
6667 if (token_current != token_dontcare)
6668 {
6669 gtk_toolbar_insert (GTK_TOOLBAR (browser->navigationbar),
6670 GTK_TOOL_ITEM (gtk_action_create_tool_item (
6671 _action_by_name (browser, token_current))), -1);
6672 }
6673
6674 if (!katze_object_get_boolean (browser->settings, "show-menubar"))
6675 {
6676 toolitem = gtk_action_create_tool_item (
6677 GTK_ACTION (_action_by_name (browser, "CompactMenu")));
6678 gtk_toolbar_insert (GTK_TOOLBAR (browser->navigationbar),
6679 GTK_TOOL_ITEM (toolitem), -1);
6680 g_signal_connect (gtk_bin_get_child (GTK_BIN (toolitem)),
6681 "button-press-event",
6682 G_CALLBACK (midori_browser_toolbar_item_button_press_event_cb),
6683 browser);
6684 }
6685}
6686
6687static void6454static void
6688_midori_browser_update_settings (MidoriBrowser* browser)6455_midori_browser_update_settings (MidoriBrowser* browser)
6689{6456{
@@ -6758,7 +6525,7 @@
67586525
6759 _midori_browser_set_toolbar_style (browser, toolbar_style);6526 _midori_browser_set_toolbar_style (browser, toolbar_style);
6760 _toggle_tabbar_smartly (browser, FALSE);6527 _toggle_tabbar_smartly (browser, FALSE);
6761 _midori_browser_set_toolbar_items (browser, toolbar_items);6528 midori_window_set_actions (MIDORI_WINDOW (browser), toolbar_items);
67626529
6763 if (browser->search_engines)6530 if (browser->search_engines)
6764 {6531 {
@@ -6791,7 +6558,8 @@
6791 GINT_TO_POINTER (last_panel_page));6558 GINT_TO_POINTER (last_panel_page));
67926559
6793 _action_set_active (browser, "Menubar", show_menubar);6560 _action_set_active (browser, "Menubar", show_menubar);
6794 _action_set_active (browser, "Navigationbar", browser->show_navigationbar);6561 if (GTK_IS_TOOLBAR (browser->navigationbar))
6562 _action_set_active (browser, "Navigationbar", browser->show_navigationbar);
6795 _action_set_active (browser, "Bookmarkbar", show_bookmarkbar6563 _action_set_active (browser, "Bookmarkbar", show_bookmarkbar
6796 && browser->bookmarks != NULL);6564 && browser->bookmarks != NULL);
6797 _action_set_active (browser, "Panel", show_panel);6565 _action_set_active (browser, "Panel", show_panel);
@@ -6815,7 +6583,7 @@
6815 if (name == g_intern_string ("toolbar-style"))6583 if (name == g_intern_string ("toolbar-style"))
6816 _midori_browser_set_toolbar_style (browser, g_value_get_enum (&value));6584 _midori_browser_set_toolbar_style (browser, g_value_get_enum (&value));
6817 else if (name == g_intern_string ("toolbar-items"))6585 else if (name == g_intern_string ("toolbar-items"))
6818 _midori_browser_set_toolbar_items (browser, g_value_get_string (&value));6586 midori_window_set_actions (MIDORI_WINDOW (browser), g_value_get_string (&value));
6819 else if (name == g_intern_string ("compact-sidepanel"))6587 else if (name == g_intern_string ("compact-sidepanel"))
6820 {6588 {
6821 g_signal_handlers_block_by_func (browser->panel,6589 g_signal_handlers_block_by_func (browser->panel,
@@ -6837,7 +6605,8 @@
6837 else if (name == g_intern_string ("show-navigationbar"))6605 else if (name == g_intern_string ("show-navigationbar"))
6838 {6606 {
6839 browser->show_navigationbar = g_value_get_boolean (&value);6607 browser->show_navigationbar = g_value_get_boolean (&value);
6840 _action_set_active (browser, "Navigationbar", g_value_get_boolean (&value));6608 if (GTK_IS_TOOLBAR (browser->navigationbar))
6609 _action_set_active (browser, "Navigationbar", g_value_get_boolean (&value));
6841 }6610 }
6842 else if (name == g_intern_string ("show-bookmarkbar"))6611 else if (name == g_intern_string ("show-bookmarkbar"))
6843 {6612 {
68446613
=== modified file 'midori/midori-browser.h'
--- midori/midori-browser.h 2013-03-26 23:09:09 +0000
+++ midori/midori-browser.h 2015-06-06 12:33:01 +0000
@@ -35,7 +35,7 @@
3535
36struct _MidoriBrowserClass36struct _MidoriBrowserClass
37{37{
38 GtkWindowClass parent_class;38 MidoriWindowClass parent_class;
3939
40 /* Signals */40 /* Signals */
41 void41 void
4242
=== modified file 'midori/midori-contextaction.vala'
--- midori/midori-contextaction.vala 2014-03-29 21:28:08 +0000
+++ midori/midori-contextaction.vala 2015-06-06 12:33:01 +0000
@@ -92,6 +92,18 @@
92 }92 }
93#endif93#endif
9494
95 Gtk.ToolButton toolitem;
96 public override unowned Gtk.Widget create_tool_item () {
97 toolitem = base.create_tool_item () as Gtk.ToolButton;
98 toolitem.clicked.connect (() => {
99 var popup = create_menu (null, false);
100 popup.show ();
101 popup.attach_to_widget (toolitem, null);
102 popup.popup (null, null, null, 1, Gtk.get_current_event_time ());
103 });
104 return toolitem;
105 }
106
95 public new Gtk.Menu create_menu (Gtk.Menu? default_menu, bool accels) {107 public new Gtk.Menu create_menu (Gtk.Menu? default_menu, bool accels) {
96 var menu = default_menu ?? new Gtk.Menu ();108 var menu = default_menu ?? new Gtk.Menu ();
97 foreach (var action in children) {109 foreach (var action in children) {
98110
=== modified file 'midori/midori-frontend.c'
--- midori/midori-frontend.c 2015-03-23 11:33:24 +0000
+++ midori/midori-frontend.c 2015-06-06 12:33:01 +0000
@@ -74,11 +74,13 @@
74 midori_browser_set_action_visible (browser, "CompactMenu", FALSE);74 midori_browser_set_action_visible (browser, "CompactMenu", FALSE);
75 midori_browser_set_action_visible (browser, "AddSpeedDial", FALSE);75 midori_browser_set_action_visible (browser, "AddSpeedDial", FALSE);
76 midori_browser_set_action_visible (browser, "Navigationbar", FALSE);76 midori_browser_set_action_visible (browser, "Navigationbar", FALSE);
77 GtkActionGroup* action_group = midori_browser_get_action_group (browser);
78 GtkAction* action = gtk_action_group_get_action (action_group, "Location");
79 gtk_action_set_sensitive (action, FALSE);
7780
78 MidoriWebSettings* settings = midori_settings_new_full (NULL);81 MidoriWebSettings* settings = midori_settings_new_full (NULL);
79 g_object_set (settings,82 g_object_set (settings,
80 "show-menubar", FALSE,83 "show-menubar", FALSE,
81 "show-navigationbar", FALSE,
82 "toolbar-items", "Back,Forward,ReloadStop,Location,Homepage,Preferences",84 "toolbar-items", "Back,Forward,ReloadStop,Location,Homepage,Preferences",
83 "show-statusbar", FALSE,85 "show-statusbar", FALSE,
84 "show-panel", FALSE,86 "show-panel", FALSE,
8587
=== modified file 'midori/midori-panedaction.vala'
--- midori/midori-panedaction.vala 2014-11-05 20:56:37 +0000
+++ midori/midori-panedaction.vala 2015-06-06 12:33:01 +0000
@@ -16,6 +16,10 @@
16 Child child1 = new Child();16 Child child1 = new Child();
17 Child child2 = new Child();17 Child child2 = new Child();
1818
19 public PanedAction () {
20 GLib.Object (name: "LocationSearch");
21 }
22
19 private struct Child {23 private struct Child {
20 public Gtk.Widget widget;24 public Gtk.Widget widget;
21 string name;25 string name;
2226
=== modified file 'midori/midori-preferences.c'
--- midori/midori-preferences.c 2015-03-23 11:33:24 +0000
+++ midori/midori-preferences.c 2015-06-06 12:33:01 +0000
@@ -415,6 +415,10 @@
415415
416 /* Page "Interface" */416 /* Page "Interface" */
417 PAGE_NEW (GTK_STOCK_CONVERT, _("Browsing"));417 PAGE_NEW (GTK_STOCK_CONVERT, _("Browsing"));
418 gboolean has_toolbar = parent && MIDORI_IS_BROWSER (parent) && GTK_IS_TOOLBAR (katze_object_get_object (parent, "toolbar"));
419 #ifndef G_OS_WIN32
420 if (has_toolbar)
421 #endif
418 FRAME_NEW (NULL);422 FRAME_NEW (NULL);
419 #ifdef G_OS_WIN32423 #ifdef G_OS_WIN32
420 INDENTED_ADD (gtk_label_new (_("Theme:")));424 INDENTED_ADD (gtk_label_new (_("Theme:")));
@@ -449,9 +453,12 @@
449 }453 }
450 g_free (theme_path);454 g_free (theme_path);
451 #endif455 #endif
456 if (has_toolbar)
457 {
452 INDENTED_ADD (gtk_label_new (_("Toolbar Style:")));458 INDENTED_ADD (gtk_label_new (_("Toolbar Style:")));
453 button = katze_property_proxy (settings, "toolbar-style", NULL);459 button = katze_property_proxy (settings, "toolbar-style", NULL);
454 SPANNED_ADD (button);460 SPANNED_ADD (button);
461 }
455 FRAME_NEW (NULL);462 FRAME_NEW (NULL);
456 label = gtk_label_new (_("Open new pages in:"));463 label = gtk_label_new (_("Open new pages in:"));
457 INDENTED_ADD (label);464 INDENTED_ADD (label);
458465
=== added file 'midori/midori-window.vala'
--- midori/midori-window.vala 1970-01-01 00:00:00 +0000
+++ midori/midori-window.vala 2015-06-06 12:33:01 +0000
@@ -0,0 +1,239 @@
1/*
2 Copyright (C) 2015 Christian Dywan <christian@twotoasts.de>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 See the file COPYING for the full license text.
10*/
11
12namespace Midori {
13 public class Window : Gtk.Window {
14 Gtk.Widget? _toolbar = null;
15 public Gtk.Widget? toolbar { get {
16 if (_toolbar == null) {
17#if HAVE_GTK3
18 if (strcmp (Environment.get_variable ("GTK_CSD"), "1") == 0) {
19 var toolbar = new Gtk.HeaderBar ();
20 toolbar.show_close_button = true;
21 toolbar.show ();
22 toolbar.get_style_context ().add_class ("midori-titlebar");
23 _toolbar = toolbar;
24 return _toolbar;
25 }
26#endif
27 var toolbar = new Gtk.Toolbar ();
28 toolbar.show_arrow = true;
29#if HAVE_GTK3
30 toolbar.get_style_context ().add_class ("primary-toolbar");
31 hide_titlebar_when_maximized = true;
32#endif
33 toolbar.popup_context_menu.connect ((x, y, button) => {
34 return button == 3 && context_menu (toolbar); });
35 _toolbar = toolbar;
36 }
37 return _toolbar;
38 } }
39
40 public string actions { get; set; default = ""; }
41 string extra_actions { get; set; default = ""; }
42 List<Gtk.ActionGroup> action_groups;
43 public signal bool context_menu (Gtk.Widget widget, Gtk.Action? action=null);
44 Gtk.Box? box = null;
45 List<Gtk.Widget> toolbars;
46
47 Gtk.Widget? _contents = null;
48 public Gtk.Widget? contents { get {
49 return _contents;
50 } set {
51 if (_contents != null)
52 box.remove (_contents);
53 _contents = value;
54 _contents.show ();
55 if (box != null)
56 box.pack_end (_contents, true, true, 0);
57 } }
58
59 public void add_action_group (Gtk.ActionGroup action_group) {
60 action_groups.append (action_group);
61 }
62
63 public bool show_menubar { get; set; default = false; }
64
65 [CCode (type = "GtkWidget*")]
66 public Window () {
67 }
68
69 Gtk.ToolItem? get_tool_item (string name) {
70 /* Name is the empty string if actions has ,, or trailing , */
71 if (name == "")
72 return null;
73 /* Shown in the notebook, no need to include in the toolbar */
74 if (name == "TabNew")
75 return null;
76 foreach (var action_group in action_groups) {
77 var action = action_group.get_action (name);
78 if (action != null) {
79 return create_tool_item (action);
80 }
81 }
82 warning ("Action %s not known to Window", name);
83 return null;
84 }
85
86 Gtk.ToolItem create_tool_item (Gtk.Action action) {
87 var toolitem = action.create_tool_item () as Gtk.ToolItem;
88 /* Show label if button has no icon of any kind */
89 if (action.icon_name == null && action.stock_id == null && action.gicon == null)
90 toolitem.is_important = true;
91 toolitem.get_child ().button_press_event.connect ((event) => {
92 return event.button == 3 && context_menu (toolitem, action); });
93 if (name == "CompactMenu")
94 bind_property ("show-menubar", toolitem, "visible");
95 return toolitem;
96 }
97
98 /**
99 * Adds an action to the (browser) window.
100 * Typically it will be displayed in the primary toolbar or headerbar.
101 *
102 * If @action is a ContextAction a menu will be displayed.
103 *
104 * Since: 0.6.0
105 **/
106 public void add_action (Gtk.Action action) {
107 action_groups.nth_data (0).add_action (action);
108 extra_actions += "," + action.name;
109 update_toolbar ();
110 }
111
112 /**
113 * Remove an action from the (browser) window.
114 *
115 * Since: 0.6.0
116 **/
117 public void remove_action (Gtk.Action action) {
118 action_groups.nth_data (0).remove_action (action);
119 extra_actions = extra_actions.replace ("," + action.name, "");
120 update_toolbar ();
121 }
122
123 void update_toolbar () {
124 var container = _toolbar as Gtk.Container;
125 foreach (var toolitem in container.get_children ())
126 container.remove (toolitem);
127
128 string[] names = actions.replace ("CompactMenu", extra_actions + ",CompactMenu").split (",");
129#if HAVE_GTK3
130 if (_toolbar is Gtk.HeaderBar) {
131 var headerbar = _toolbar as Gtk.HeaderBar;
132 List<Gtk.ToolItem> tail = new List<Gtk.ToolItem> ();
133 foreach (string name in names) {
134 var toolitem = get_tool_item (name);
135 if (toolitem == null)
136 continue;
137 var widget = toolitem.get_child ();
138 if (widget is Gtk.Alignment)
139 widget = (widget as Gtk.Bin).get_child ();
140 if (name == "Location") {
141 widget.set ("margin-top", 1, "margin-bottom", 1);
142 (widget as Gtk.Entry).max_width_chars = 256;
143 headerbar.custom_title = toolitem;
144 headerbar.custom_title.set (
145 "margin-start", 25, "margin-end", 25,
146 "margin-top", 5, "margin-bottom", 5);
147 } else if (name == "Search") {
148 (widget as Gtk.Entry).width_chars = 12;
149 tail.append (toolitem);
150 } else if (actions.index_of (name) > actions.index_of ("Location"))
151 tail.append (toolitem);
152 else if (name in extra_actions)
153 tail.append (toolitem);
154 else
155 headerbar.pack_start (toolitem);
156 }
157
158 /* Pack end appends, so we need to pack in reverse order */
159 tail.reverse ();
160 foreach (var toolitem in tail)
161 headerbar.pack_end (toolitem);
162
163 set_titlebar (headerbar);
164 return;
165 }
166#endif
167
168 var toolbar = _toolbar as Gtk.Toolbar;
169 string? previous = null;
170 Gtk.ToolItem? toolitem_previous = null;
171 foreach (string name in names) {
172 var toolitem = get_tool_item (name);
173 if (toolitem == null)
174 continue;
175 if ((name == "Location" || name == "Search")
176 && (previous == "Location" || previous == "Search")) {
177 toolitem_previous.ref ();
178 toolbar.remove (toolitem_previous);
179 var paned = new Midori.PanedAction ();
180 paned.set_child1 (toolitem_previous, previous, previous != "Search", true);
181 paned.set_child2 (toolitem, name, name != "Search", true);
182 /* Midori.Settings.search-width on Midori.Browser.settings */
183 Midori.Settings? settings = null;
184 get ("settings", ref settings);
185 var sizeable = name == "Search" ? toolitem : toolitem_previous;
186 sizeable.size_allocate.connect ((allocation) => {
187 settings.set ("search-width", allocation.width);
188 });
189 var requester = previous == "Search" ? toolitem_previous : toolitem;
190 requester.set_size_request (settings.search_width, -1);
191 toolitem = paned.create_tool_item () as Gtk.ToolItem;
192 previous = null;
193 toolitem_previous.unref ();
194 toolitem_previous = null;
195 } else {
196 previous = name;
197 toolitem_previous = toolitem;
198 }
199 toolbar.insert (toolitem, -1);
200 }
201 }
202
203 public void add_toolbar (Gtk.Widget toolbar) {
204 if (toolbar is Gtk.Toolbar) {
205#if HAVE_GTK3
206 get_style_context ().add_class ("secondary-toolbar");
207#endif
208 (toolbar as Gtk.Toolbar).popup_context_menu.connect ((x, y, button) => {
209 return button == 3 && context_menu (toolbar);
210 });
211 }
212 if (box == null)
213 toolbars.append (toolbar);
214 else
215 box.pack_start (toolbar, false, false);
216 }
217
218 construct {
219 box = new Gtk.VBox (false, 0);
220 box.show ();
221 add (box);
222 foreach (var toolbar in toolbars) {
223 if (toolbar is Gtk.MenuBar)
224 box.pack_start (toolbar, false, false);
225 }
226 if (toolbar is Gtk.Toolbar)
227 box.pack_start (toolbar, false, false);
228 foreach (var toolbar in toolbars) {
229 if (!(toolbar is Gtk.MenuBar))
230 box.pack_start (toolbar, false, false);
231 }
232 if (_contents != null)
233 box.pack_end (_contents, true, true, 0);
234 if (actions != "")
235 update_toolbar ();
236 notify["actions"].connect ((pspec) => { update_toolbar (); });
237 }
238 }
239}
0240
=== modified file 'midori/midori.vapi'
--- midori/midori.vapi 2015-03-15 17:20:46 +0000
+++ midori/midori.vapi 2015-06-06 12:33:01 +0000
@@ -62,7 +62,7 @@
62 }62 }
6363
64 [CCode (cheader_filename = "midori/midori-browser.h")]64 [CCode (cheader_filename = "midori/midori-browser.h")]
65 public class Browser : Gtk.Window {65 public class Browser : Window {
66 public Browser ();66 public Browser ();
67 public unowned Gtk.Widget add_item (Katze.Item item);67 public unowned Gtk.Widget add_item (Katze.Item item);
68 public unowned Gtk.Widget add_uri (string uri);68 public unowned Gtk.Widget add_uri (string uri);
6969
=== modified file 'po/POTFILES.in'
--- po/POTFILES.in 2015-04-18 19:36:29 +0000
+++ po/POTFILES.in 2015-06-06 12:33:01 +0000
@@ -7,6 +7,7 @@
7midori/midori-array.c7midori/midori-array.c
8midori/midori-bookmarksdatabase.vala8midori/midori-bookmarksdatabase.vala
9midori/midori-browser.c9midori/midori-browser.c
10midori/midori-window.vala
10midori/midori-database.vala11midori/midori-database.vala
11midori/midori-extension.c12midori/midori-extension.c
12midori/midori-locationaction.c13midori/midori-locationaction.c

Subscribers

People subscribed via source and target branches

to all changes: