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,