diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index 4070100e..cdfcfb14 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -50,10 +50,6 @@ struct _MidoriBrowser
GtkWidget* popup_history;
GtkWidget* throbber;
GtkWidget* navigationbar;
- GtkWidget* button_tab_new;
- GtkWidget* button_homepage;
- GtkWidget* search;
- GtkWidget* button_trash;
GtkWidget* button_fullscreen;
GtkWidget* bookmarkbar;
@@ -1400,6 +1396,31 @@ midori_browser_navigationbar_notify_style_cb (GObject* object,
}
}
+static gboolean
+midori_browser_toolbar_popup_context_menu_cb (GtkWidget* toolbar,
+ gint x,
+ gint y,
+ gint button,
+ MidoriBrowser* browser)
+{
+ GtkWidget* menu;
+ GtkWidget* menuitem;
+
+ menu = gtk_menu_new ();
+ menuitem = sokoke_action_create_popup_menu_item (
+ _action_by_name (browser, "Navigationbar"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_show (menuitem);
+ menuitem = sokoke_action_create_popup_menu_item (
+ _action_by_name (browser, "Bookmarkbar"));
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ gtk_widget_show (menuitem);
+
+ katze_widget_popup (toolbar, GTK_MENU (menu), NULL,
+ button == -1 ? KATZE_MENU_POSITION_LEFT : KATZE_MENU_POSITION_CURSOR);
+ return TRUE;
+}
+
static void
_action_trash_populate_popup (GtkAction* action,
GtkMenu* menu,
@@ -3141,14 +3162,6 @@ static const gchar* ui_markup =
""
""
""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
- ""
""
""
""
@@ -3414,16 +3427,7 @@ midori_browser_init (MidoriBrowser* browser)
G_CALLBACK (midori_browser_navigationbar_notify_style_cb), browser);
gtk_toolbar_set_show_arrow (GTK_TOOLBAR (browser->navigationbar), TRUE);
gtk_box_pack_start (GTK_BOX (vbox), browser->navigationbar, FALSE, FALSE, 0);
- browser->button_tab_new = gtk_ui_manager_get_widget (
- ui_manager, "/toolbar_navigation/TabNew");
g_object_set (_action_by_name (browser, "Back"), "is-important", TRUE, NULL);
- browser->button_homepage = gtk_ui_manager_get_widget (
- ui_manager, "/toolbar_navigation/Homepage");
- browser->search = gtk_ui_manager_get_widget (
- ui_manager, "/toolbar_navigation/Search");
- browser->button_trash = gtk_ui_manager_get_widget (
- ui_manager, "/toolbar_navigation/Trash");
-
sokoke_container_show_children (GTK_CONTAINER (browser->navigationbar));
gtk_widget_hide (browser->navigationbar);
action = gtk_action_group_get_action (browser->action_group, "Fullscreen");
@@ -3433,6 +3437,8 @@ midori_browser_init (MidoriBrowser* browser)
G_CALLBACK (_action_fullscreen_activate), browser);
gtk_toolbar_insert (GTK_TOOLBAR (browser->navigationbar),
GTK_TOOL_ITEM (browser->button_fullscreen), -1);
+ g_signal_connect (browser->navigationbar, "popup-context-menu",
+ G_CALLBACK (midori_browser_toolbar_popup_context_menu_cb), browser);
/* Bookmarkbar */
browser->bookmarkbar = gtk_toolbar_new ();
@@ -3441,6 +3447,8 @@ midori_browser_init (MidoriBrowser* browser)
gtk_toolbar_set_style (GTK_TOOLBAR (browser->bookmarkbar),
GTK_TOOLBAR_BOTH_HORIZ);
gtk_box_pack_start (GTK_BOX (vbox), browser->bookmarkbar, FALSE, FALSE, 0);
+ g_signal_connect (browser->bookmarkbar, "popup-context-menu",
+ G_CALLBACK (midori_browser_toolbar_popup_context_menu_cb), browser);
/* Superuser warning */
GtkWidget* hbox;
@@ -3764,20 +3772,68 @@ _midori_browser_set_toolbar_style (MidoriBrowser* browser,
gtk_toolbar_style);
}
+static gboolean
+midori_browser_toolbar_item_button_press_event_cb (GtkWidget* toolitem,
+ GdkEventButton* event,
+ MidoriBrowser* browser)
+{
+ if (event->button == 3)
+ {
+ midori_browser_toolbar_popup_context_menu_cb (browser->navigationbar,
+ event->x, event->y, event->button, browser);
+
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void
+_midori_browser_set_toolbar_items (MidoriBrowser* browser,
+ const gchar* items)
+{
+ gchar** names;
+ gchar** name;
+ GtkAction* action;
+ GtkWidget* toolitem;
+
+ gtk_container_foreach (GTK_CONTAINER (browser->navigationbar),
+ (GtkCallback)gtk_widget_destroy, NULL);
+
+ names = g_strsplit (items ? items : "", ",", 0);
+ name = names;
+ while (*name)
+ {
+ action = _action_by_name (browser, *name);
+ if (action)
+ {
+ toolitem = gtk_action_create_tool_item (action);
+ g_signal_connect (gtk_bin_get_child (GTK_BIN (toolitem)),
+ "button-press-event",
+ G_CALLBACK (midori_browser_toolbar_item_button_press_event_cb),
+ browser);
+ gtk_toolbar_insert (GTK_TOOLBAR (browser->navigationbar),
+ GTK_TOOL_ITEM (toolitem), -1);
+ }
+ name++;
+ }
+ g_strfreev (names);
+}
+
static void
_midori_browser_update_settings (MidoriBrowser* browser)
{
- KatzeItem* item;
-
gboolean remember_last_window_size;
gint last_window_width, last_window_height;
gint last_panel_position, last_panel_page;
gboolean show_navigationbar, show_bookmarkbar, show_panel, show_statusbar;
- gboolean show_new_tab, show_homepage, show_web_search, show_trash;
MidoriToolbarStyle toolbar_style;
+ gchar* toolbar_items;
gint last_web_search;
gchar* last_pageholder_uri;
gboolean close_buttons_on_tabs;
+ GdkScreen* screen;
+ gint default_width, default_height;
+ KatzeItem* item;
g_object_get (browser->settings,
"remember-last-window-size", &remember_last_window_size,
@@ -3789,19 +3845,16 @@ _midori_browser_update_settings (MidoriBrowser* browser)
"show-bookmarkbar", &show_bookmarkbar,
"show-panel", &show_panel,
"show-statusbar", &show_statusbar,
- "show-new-tab", &show_new_tab,
- "show-homepage", &show_homepage,
- "show-web-search", &show_web_search,
- "show-trash", &show_trash,
"toolbar-style", &toolbar_style,
+ "toolbar-items", &toolbar_items,
"last-web-search", &last_web_search,
"last-pageholder-uri", &last_pageholder_uri,
"close-buttons-on-tabs", &close_buttons_on_tabs,
NULL);
- GdkScreen* screen = gtk_window_get_screen (GTK_WINDOW (browser));
- const gint default_width = (gint)gdk_screen_get_width (screen) / 1.7;
- const gint default_height = (gint)gdk_screen_get_height (screen) / 1.7;
+ screen = gtk_window_get_screen (GTK_WINDOW (browser));
+ default_width = gdk_screen_get_width (screen) / 1.7;
+ default_height = gdk_screen_get_height (screen) / 1.7;
if (remember_last_window_size)
{
@@ -3815,6 +3868,7 @@ _midori_browser_update_settings (MidoriBrowser* browser)
_midori_browser_set_toolbar_style (browser, toolbar_style);
_toggle_tabbar_smartly (browser);
+ _midori_browser_set_toolbar_items (browser, toolbar_items);
if (browser->search_engines)
{
@@ -3836,11 +3890,7 @@ _midori_browser_update_settings (MidoriBrowser* browser)
_action_set_active (browser, "Panel", show_panel);
_action_set_active (browser, "Statusbar", show_statusbar);
- sokoke_widget_set_visible (browser->button_tab_new, show_new_tab);
- sokoke_widget_set_visible (browser->button_homepage, show_homepage);
- sokoke_widget_set_visible (browser->search, show_web_search);
- sokoke_widget_set_visible (browser->button_trash, show_trash);
-
+ g_free (toolbar_items);
g_free (last_pageholder_uri);
}
@@ -3858,20 +3908,10 @@ midori_browser_settings_notify (MidoriWebSettings* web_settings,
if (name == g_intern_string ("toolbar-style"))
_midori_browser_set_toolbar_style (browser, g_value_get_enum (&value));
+ else if (name == g_intern_string ("toolbar-items"))
+ _midori_browser_set_toolbar_items (browser, g_value_get_string (&value));
else if (name == g_intern_string ("always-show-tabbar"))
_toggle_tabbar_smartly (browser);
- else if (name == g_intern_string ("show-new-tab"))
- sokoke_widget_set_visible (browser->button_tab_new,
- g_value_get_boolean (&value));
- else if (name == g_intern_string ("show-homepage"))
- sokoke_widget_set_visible (browser->button_homepage,
- g_value_get_boolean (&value));
- else if (name == g_intern_string ("show-web-search"))
- sokoke_widget_set_visible (browser->search,
- g_value_get_boolean (&value));
- else if (name == g_intern_string ("show-trash"))
- sokoke_widget_set_visible (browser->button_trash,
- g_value_get_boolean (&value));
else if (!g_object_class_find_property (G_OBJECT_GET_CLASS (web_settings),
name))
g_warning (_("Unexpected setting '%s'"), name);
diff --git a/midori/midori-preferences.c b/midori/midori-preferences.c
index 2ea831b8..702962e7 100644
--- a/midori/midori-preferences.c
+++ b/midori/midori-preferences.c
@@ -339,20 +339,15 @@ midori_preferences_set_settings (MidoriPreferences* preferences,
/* Page "Interface" */
PAGE_NEW (_("Interface"));
FRAME_NEW (_("Navigationbar"));
- TABLE_NEW (4, 2);
+ TABLE_NEW (3, 2);
INDENTED_ADD (katze_property_label (settings, "toolbar-style"), 0, 1, 0, 1);
button = katze_property_proxy (settings, "toolbar-style", NULL);
FILLED_ADD (button, 1, 2, 0, 1);
+ INDENTED_ADD (katze_property_label (settings, "toolbar-items"), 0, 1, 1, 2);
+ button = katze_property_proxy (settings, "toolbar-items", NULL);
+ FILLED_ADD (button, 1, 2, 1, 2);
button = katze_property_proxy (settings, "always-show-tabbar", NULL);
- INDENTED_ADD (button, 0, 1, 1, 2);
- button = katze_property_proxy (settings, "show-new-tab", NULL);
INDENTED_ADD (button, 0, 1, 2, 3);
- button = katze_property_proxy (settings, "show-web-search", NULL);
- SPANNED_ADD (button, 1, 2, 2, 3);
- button = katze_property_proxy (settings, "show-homepage", NULL);
- INDENTED_ADD (button, 0, 1, 3, 4);
- button = katze_property_proxy (settings, "show-trash", NULL);
- SPANNED_ADD (button, 1, 2, 3, 4);
FRAME_NEW (_("Browsing"));
TABLE_NEW (3, 2);
/* label = katze_property_label (settings, "open-new-pages-in");
diff --git a/midori/midori-websettings.c b/midori/midori-websettings.c
index 70613ed2..8ea61b21 100644
--- a/midori/midori-websettings.c
+++ b/midori/midori-websettings.c
@@ -34,6 +34,7 @@ struct _MidoriWebSettings
gboolean show_statusbar;
MidoriToolbarStyle toolbar_style;
+ gchar* toolbar_items;
gboolean always_show_tabbar;
gboolean show_new_tab;
gboolean show_homepage;
@@ -87,6 +88,7 @@ enum
PROP_SHOW_STATUSBAR,
PROP_TOOLBAR_STYLE,
+ PROP_TOOLBAR_ITEMS,
PROP_ALWAYS_SHOW_TABBAR,
PROP_SHOW_NEW_TAB,
PROP_SHOW_HOMEPAGE,
@@ -347,6 +349,15 @@ midori_web_settings_class_init (MidoriWebSettingsClass* class)
MIDORI_TOOLBAR_DEFAULT,
flags));
+ g_object_class_install_property (gobject_class,
+ PROP_TOOLBAR_ITEMS,
+ g_param_spec_string (
+ "toolbar-items",
+ _("Toolbar Items"),
+ _("The items to show on the toolbar"),
+ "Back,Forward,ReloadStop,Location,Trash",
+ flags));
+
g_object_class_install_property (gobject_class,
PROP_ALWAYS_SHOW_TABBAR,
g_param_spec_boolean (
@@ -682,6 +693,9 @@ midori_web_settings_set_property (GObject* object,
case PROP_TOOLBAR_STYLE:
web_settings->toolbar_style = g_value_get_enum (value);
break;
+ case PROP_TOOLBAR_ITEMS:
+ katze_assign (web_settings->toolbar_items, g_value_dup_string (value));
+ break;
case PROP_ALWAYS_SHOW_TABBAR:
web_settings->always_show_tabbar = g_value_get_boolean (value);
break;
@@ -839,6 +853,9 @@ midori_web_settings_get_property (GObject* object,
case PROP_TOOLBAR_STYLE:
g_value_set_enum (value, web_settings->toolbar_style);
break;
+ case PROP_TOOLBAR_ITEMS:
+ g_value_set_string (value, web_settings->toolbar_items);
+ break;
case PROP_ALWAYS_SHOW_TABBAR:
g_value_set_boolean (value, web_settings->always_show_tabbar);
break;
@@ -970,6 +987,7 @@ midori_web_settings_copy (MidoriWebSettings* web_settings)
"preferred-encoding", web_settings->preferred_encoding,
"toolbar-style", web_settings->toolbar_style,
+ "toolbar-items", web_settings->toolbar_items,
"show-web-search", web_settings->show_web_search,
"show-new-tab", web_settings->show_new_tab,
"show-trash", web_settings->show_trash,