From 97c0b4d257243bc8db241e861a5fc18bc43b8fc9 Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Mon, 22 Jun 2009 21:47:42 +0200 Subject: [PATCH] Add a compact menu to the navigationbar if the menubar is hidden The compact menu item provides functionality that is not accessible via the context menu. The item is added when the menubar is hidden and removed when the menubar is shown. It can be removed via right-click > Remove. --- midori/midori-browser.c | 82 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/midori/midori-browser.c b/midori/midori-browser.c index 0eeea6dd..ae0cef25 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -2560,6 +2560,41 @@ _action_window_activate_item (GtkAction* action, } } +static void +_action_compact_menu_populate_popup (GtkAction* action, + GtkMenu* menu, + MidoriBrowser* browser) +{ + static const GtkActionEntry actions[] = { + { "TabNew" }, + { "WindowNew" }, + { "Open" }, + { "PrivateBrowsing" }, + { NULL }, + { "Bookmarkbar" }, + { "Panel" }, + { "Statusbar" }, + { NULL }, + { "Fullscreen" }, + { "Preferences" }, + { "ClearPrivateData" }, + }; + guint i; + + for (i = 0; i < G_N_ELEMENTS (actions); i++) + { + GtkWidget* menuitem; + if (actions[i].name != NULL) + menuitem = sokoke_action_create_popup_menu_item ( + _action_by_name (browser, actions[i].name)); + else + menuitem = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem); + } + + gtk_widget_show_all (GTK_WIDGET (menu)); +} + static void midori_preferences_response_help_cb (GtkWidget* preferences, gint response, @@ -2601,6 +2636,39 @@ _action_menubar_activate (GtkToggleAction* action, g_object_set (browser->settings, "show-menubar", active, NULL); #if !HAVE_HILDON sokoke_widget_set_visible (browser->menubar, active); + if (browser->settings) + { + if (active) + { + GtkContainer* navigationbar = GTK_CONTAINER (browser->navigationbar); + GList* children = gtk_container_get_children (navigationbar); + GtkAction* menu_action = _action_by_name (browser, "CompactMenu"); + for (; children != NULL; children = g_list_next (children)) + { + GtkAction* action_; + action_ = gtk_widget_get_action (GTK_WIDGET (children->data)); + if (action_ == menu_action) + { + gtk_container_remove (navigationbar, + GTK_WIDGET (children->data)); + _midori_browser_save_toolbar_items (browser); + break; + } + } + } + else + { + GtkAction* widget_action = _action_by_name (browser, "CompactMenu"); + GtkWidget* toolitem = gtk_action_create_tool_item (widget_action); + gtk_toolbar_insert (GTK_TOOLBAR (browser->navigationbar), + GTK_TOOL_ITEM (toolitem), -1); + g_signal_connect (gtk_bin_get_child (GTK_BIN (toolitem)), + "button-press-event", + G_CALLBACK (midori_browser_toolbar_item_button_press_event_cb), + browser); + _midori_browser_save_toolbar_items (browser); + } + } #endif } @@ -4697,6 +4765,20 @@ midori_browser_init (MidoriBrowser* browser) gtk_action_group_add_action_with_accel (browser->action_group, action, ""); g_object_unref (action); + action = g_object_new (KATZE_TYPE_ARRAY_ACTION, + "name", "CompactMenu", + "label", _("_Menu"), + "stock-id", STOCK_WEB_BROWSER, + "tooltip", NULL, /* FIXME */ + "array", katze_array_new (KATZE_TYPE_ITEM), + NULL); + g_object_connect (action, + "signal::populate-popup", + _action_compact_menu_populate_popup, browser, + NULL); + gtk_action_group_add_action (browser->action_group, action); + g_object_unref (action); + /* Create the menubar */ browser->menubar = gtk_ui_manager_get_widget (ui_manager, "/menubar"); #if HAVE_HILDON