]> spindle.queued.net Git - midori/commitdiff
Create navigationbar from a string of actions
authorChristian Dywan <christian@twotoasts.de>
Sun, 12 Oct 2008 16:14:57 +0000 (18:14 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 12 Oct 2008 16:25:26 +0000 (18:25 +0200)
midori/midori-browser.c
midori/midori-preferences.c
midori/midori-websettings.c

index 4070100e2792dc9bd4d5db1a2d4edd5b15ea0c75..cdfcfb14e0a97a4f41385d3f0931f6d00964ff29 100644 (file)
@@ -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 =
    "</menu>"
   "</menubar>"
   "<toolbar name='toolbar_navigation'>"
-   "<toolitem action='TabNew'/>"
-   "<toolitem action='Back'/>"
-   "<toolitem action='Forward'/>"
-   "<toolitem action='ReloadStop'/>"
-   "<toolitem action='Homepage'/>"
-   "<toolitem action='Location'/>"
-   "<toolitem action='Search'/>"
-   "<toolitem action='Trash'/>"
   "</toolbar>"
   "<toolbar name='toolbar_bookmarks'>"
    "<toolitem action='BookmarkAdd'/>"
@@ -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_update_settings (MidoriBrowser* browser)
+_midori_browser_set_toolbar_items (MidoriBrowser* browser,
+                                   const gchar*   items)
 {
-    KatzeItem* item;
+    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)
+{
     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);
index 2ea831b8a3d9e7eef96aa5245688fe382645c1e8..702962e750df2170734cdc13aca39cd7dfd69fdb 100644 (file)
@@ -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");
index 70613ed2833d1e01581b053991f7d8f5003bc4e7..8ea61b218f12bcb2fa2e106b062a454ba8a29467 100644 (file)
@@ -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,