]> spindle.queued.net Git - midori/commitdiff
Implement 'Customize...' on toolbar right-click
authorTomasz Szatkowski <szatkus@gmail.com>
Sun, 17 Apr 2011 20:43:54 +0000 (22:43 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 17 Apr 2011 20:43:54 +0000 (22:43 +0200)
The new MidoriBrowser::populate-toolbar-menu allows
extensions to add menu items.

Fixes: https://bugs.launchpad.net/midori/+bug/699933
extensions/toolbar-editor.c
midori/midori-browser.c

index e7d9da668daa444e0677280aa854ed5663da04b8..e83fce08a52451ce44a942d0c0796ca033b52df9 100644 (file)
@@ -48,6 +48,9 @@ static const gint tb_editor_dnd_targets_len = G_N_ELEMENTS(tb_editor_dnd_targets
 
 static void tb_editor_browser_populate_tool_menu_cb(MidoriBrowser *browser, GtkWidget *menu, MidoriExtension *ext);
 
+static void tb_editor_browser_populate_toolbar_menu_cb(MidoriBrowser *browser, GtkWidget *menu,
+                                                       MidoriExtension *ext);
+
 static void tb_editor_app_add_browser_cb(MidoriApp *app, MidoriBrowser *browser, MidoriExtension *ext);
 
 
@@ -56,6 +59,7 @@ static void tb_editor_deactivate_cb(MidoriExtension *extension, MidoriBrowser *b
        MidoriApp *app = midori_extension_get_app(extension);
 
        g_signal_handlers_disconnect_by_func(browser, tb_editor_browser_populate_tool_menu_cb, extension);
+       g_signal_handlers_disconnect_by_func(browser, tb_editor_browser_populate_toolbar_menu_cb, extension);
        g_signal_handlers_disconnect_by_func(extension, tb_editor_deactivate_cb, browser);
        g_signal_handlers_disconnect_by_func(app, tb_editor_app_add_browser_cb, extension);
 }
@@ -579,10 +583,27 @@ static void tb_editor_browser_populate_tool_menu_cb(MidoriBrowser *browser, GtkW
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 }
 
+static void tb_editor_browser_populate_toolbar_menu_cb(MidoriBrowser *browser, GtkWidget *menu,
+                                                       MidoriExtension *ext)
+{
+    GtkWidget* separator;
+    GtkWidget* menuitem;
+
+    separator = gtk_separator_menu_item_new ();
+    gtk_widget_show (separator);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), separator);
+    menuitem = gtk_menu_item_new_with_mnemonic (_("_Customize..."));
+    g_signal_connect (menuitem, "activate",
+        G_CALLBACK (tb_editor_menu_configure_toolbar_activate_cb), browser);
+    gtk_widget_show (menuitem);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+}
+
 static void tb_editor_app_add_browser_cb(MidoriApp *app, MidoriBrowser *browser, MidoriExtension *ext)
 {
-       g_signal_connect(browser, "populate-tool-menu", G_CALLBACK(tb_editor_browser_populate_tool_menu_cb), ext);
-       g_signal_connect(ext, "deactivate", G_CALLBACK(tb_editor_deactivate_cb), browser);
+    g_signal_connect(browser, "populate-tool-menu", G_CALLBACK(tb_editor_browser_populate_tool_menu_cb), ext);
+    g_signal_connect(browser, "populate-toolbar-menu", G_CALLBACK(tb_editor_browser_populate_toolbar_menu_cb), ext);
+    g_signal_connect(ext, "deactivate", G_CALLBACK(tb_editor_deactivate_cb), browser);
 }
 
 
index 4fbb409ce5ff845d9274c5d6f02067c837ff9983..9234a966b88df326e2384f5294d5ba6b994636d6 100644 (file)
@@ -143,6 +143,7 @@ enum
     ADD_DOWNLOAD,
     SEND_NOTIFICATION,
     POPULATE_TOOL_MENU,
+    POPULATE_TOOLBAR_MENU,
     QUIT,
     SHOW_PREFERENCES,
 
@@ -1852,6 +1853,25 @@ midori_browser_class_init (MidoriBrowserClass* class)
         g_cclosure_marshal_VOID__OBJECT,
         G_TYPE_NONE, 1,
         GTK_TYPE_MENU);
+    /**
+     * MidoriBrowser::populate-toolbar-menu:
+     * @browser: the object on which the signal is emitted
+     * @menu: the #GtkMenu to populate
+     *
+     * Emitted when a toolbar menu is displayed on right-click.
+     *
+     * Since: 0.3.4
+     */
+    signals[POPULATE_TOOLBAR_MENU] = g_signal_new (
+        "populate-toolbar-menu",
+        G_TYPE_FROM_CLASS (class),
+        (GSignalFlags)(G_SIGNAL_RUN_LAST),
+        0,
+        0,
+        NULL,
+        g_cclosure_marshal_VOID__OBJECT,
+        G_TYPE_NONE, 1,
+        GTK_TYPE_MENU);
 
     signals[QUIT] = g_signal_new (
         "quit",
@@ -2676,6 +2696,8 @@ midori_browser_toolbar_popup_context_menu_cb (GtkWidget*     widget,
         _action_by_name (browser, "Statusbar"));
     gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
+    g_signal_emit (browser, signals[POPULATE_TOOLBAR_MENU], 0, menu);
+
     katze_widget_popup (widget, GTK_MENU (menu), NULL,
         button == -1 ? KATZE_MENU_POSITION_LEFT : KATZE_MENU_POSITION_CURSOR);
     return TRUE;