aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ephy-go-action.c49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/ephy-go-action.c b/src/ephy-go-action.c
index ab291cfa4..2c7949ae5 100644
--- a/src/ephy-go-action.c
+++ b/src/ephy-go-action.c
@@ -28,6 +28,8 @@
#include "eggtoolitem.h"
#include "ephy-debug.h"
+#define MENU_ID "ephy-go-action-menu-id"
+
static void ephy_go_action_init (EphyGoAction *action);
static void ephy_go_action_class_init (EphyGoActionClass *class);
static void ephy_go_action_finalize (GObject *object);
@@ -62,7 +64,7 @@ ephy_go_action_get_type (void)
}
static void
-button_clicked (GtkWidget *widget, EggAction *action)
+activate_cb (GtkWidget *widget, EggAction *action)
{
g_signal_emit_by_name (action, "activate");
}
@@ -79,7 +81,7 @@ create_tool_item (EggAction *action)
gtk_button_set_relief(GTK_BUTTON (button), GTK_RELIEF_NONE);
g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (button_clicked), action);
+ G_CALLBACK (activate_cb), action);
gtk_container_add (GTK_CONTAINER (item), button);
gtk_widget_show (button);
@@ -87,6 +89,46 @@ create_tool_item (EggAction *action)
return item;
}
+static GtkWidget *
+create_menu_item (EggAction *action)
+{
+ GtkWidget *menu_item;
+
+ menu_item = gtk_menu_item_new_with_label (_("Go"));
+ g_signal_connect (G_OBJECT (menu_item), "activate",
+ G_CALLBACK (activate_cb), action);
+
+ return menu_item;
+}
+
+static gboolean
+create_menu_proxy_cb (EggToolItem *item, EggAction *action)
+{
+ GtkWidget *menu_item;
+
+ menu_item = EGG_ACTION_GET_CLASS (action)->create_menu_item (action);
+
+ EGG_ACTION_GET_CLASS (action)->connect_proxy (action, menu_item);
+
+ egg_tool_item_set_proxy_menu_item (item, MENU_ID, menu_item);
+
+ return TRUE;
+}
+
+static void
+connect_proxy (EggAction *action, GtkWidget *proxy)
+{
+ (* EGG_ACTION_CLASS (parent_class)->connect_proxy) (action, proxy);
+
+ g_return_if_fail (EPHY_IS_GO_ACTION (action));
+
+ if (EGG_IS_TOOL_ITEM (proxy))
+ {
+ g_signal_connect (proxy, "create_menu_proxy",
+ G_CALLBACK (create_menu_proxy_cb), action);
+ }
+}
+
static void
ephy_go_action_class_init (EphyGoActionClass *class)
{
@@ -99,6 +141,9 @@ ephy_go_action_class_init (EphyGoActionClass *class)
action_class = EGG_ACTION_CLASS (class);
action_class->create_tool_item = create_tool_item;
+ action_class->menu_item_type = GTK_TYPE_MENU_ITEM;
+ action_class->create_menu_item = create_menu_item;
+ action_class->connect_proxy = connect_proxy;
}
static void