diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmark-action.c | 78 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmark-toolitem.c | 37 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmark-toolitem.h | 3 |
3 files changed, 75 insertions, 43 deletions
diff --git a/src/bookmarks/ephy-bookmark-action.c b/src/bookmarks/ephy-bookmark-action.c index 119007818..1362b8d02 100644 --- a/src/bookmarks/ephy-bookmark-action.c +++ b/src/bookmarks/ephy-bookmark-action.c @@ -196,53 +196,45 @@ ephy_bookmark_action_sync_label (EggAction *action, GParamSpec *pspec, GtkWidget } static void -entry_activated_cb (GtkWidget *entry, EggAction *action) +activate_cb (GtkWidget *widget, const char *text, EggAction *action) { - char *text; - char *solved; - char *smart_url; - EphyBookmarks *bookmarks; + char *location = NULL; - bookmarks = ephy_shell_get_bookmarks (ephy_shell); + if (text != NULL && text[0] != '\0') + { + char *smart_url; + EphyBookmarks *bookmarks; - text = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1); - if (text == NULL) return; + bookmarks = ephy_shell_get_bookmarks (ephy_shell); - smart_url = EPHY_BOOKMARK_ACTION (action)->priv->location; - solved = ephy_bookmarks_solve_smart_url (bookmarks, - smart_url, - text); - g_signal_emit (action, - ephy_bookmark_action_signals[GO_LOCATION], - 0, solved); + smart_url = EPHY_BOOKMARK_ACTION (action)->priv->location; + location = ephy_bookmarks_solve_smart_url (bookmarks, + smart_url, + text); + } + else + { + EphyBookmarkAction *baction = EPHY_BOOKMARK_ACTION (action); - g_free (text); -} + if (baction->priv->smart_url) + { + GnomeVFSURI *uri; -static void -activate_cb (GtkWidget *widget, EggAction *action) -{ - EphyBookmarkAction *baction = EPHY_BOOKMARK_ACTION (action); - char *location = NULL; + uri = gnome_vfs_uri_new (baction->priv->location); - if (baction->priv->smart_url) - { - GnomeVFSURI *uri; - - uri = gnome_vfs_uri_new (baction->priv->location); + if (uri) + { + location = g_strdup (gnome_vfs_uri_get_host_name (uri)); + gnome_vfs_uri_unref (uri); + } + } - if (uri) + if (location == NULL) { - location = g_strdup (gnome_vfs_uri_get_host_name (uri)); - gnome_vfs_uri_unref (uri); + location = g_strdup (baction->priv->location); } } - if (location == NULL) - { - location = g_strdup (baction->priv->location); - } - g_signal_emit (action, ephy_bookmark_action_signals[GO_LOCATION], 0, location); @@ -251,10 +243,14 @@ activate_cb (GtkWidget *widget, EggAction *action) } static void -connect_proxy (EggAction *action, GtkWidget *proxy) +menu_activate_cb (GtkWidget *widget, EggAction *action) { - GtkWidget *button, *entry; + activate_cb (widget, NULL, action); +} +static void +connect_proxy (EggAction *action, GtkWidget *proxy) +{ LOG ("Connecting action %p to proxy %p", action, proxy) (* EGG_ACTION_CLASS (parent_class)->connect_proxy) (action, proxy); @@ -273,15 +269,11 @@ connect_proxy (EggAction *action, GtkWidget *proxy) if (EGG_IS_TOOL_ITEM (proxy)) { - button = GTK_WIDGET (g_object_get_data (G_OBJECT (proxy), "button")); - g_signal_connect (button, "clicked", G_CALLBACK (activate_cb), action); - - entry = GTK_WIDGET (g_object_get_data (G_OBJECT (proxy), "entry")); - g_signal_connect (entry, "activate", G_CALLBACK (entry_activated_cb), action); + g_signal_connect (proxy, "activate", G_CALLBACK (activate_cb), action); } else if (GTK_IS_MENU_ITEM (proxy)) { - g_signal_connect (proxy, "activate", G_CALLBACK (activate_cb), action); + g_signal_connect (proxy, "activate", G_CALLBACK (menu_activate_cb), action); } } diff --git a/src/bookmarks/ephy-bookmark-toolitem.c b/src/bookmarks/ephy-bookmark-toolitem.c index 1c21b8f1d..b4245de29 100644 --- a/src/bookmarks/ephy-bookmark-toolitem.c +++ b/src/bookmarks/ephy-bookmark-toolitem.c @@ -32,6 +32,13 @@ static GObjectClass *parent_class = NULL; static void ephy_bookmark_toolitem_class_init (EphyBookmarkToolitemClass *klass); static void ephy_bookmark_toolitem_init (EphyBookmarkToolitem *item); +enum +{ + ACTIVATE, + LAST_SIGNAL +}; +static guint EphyBookmarkToolitemSignals[LAST_SIGNAL]; + #define MENU_ID "ephy-bookmark-toolitem-menu-id" /** @@ -66,6 +73,21 @@ ephy_bookmark_toolitem_get_type (void) return ephy_bookmark_toolitem_type; } +static void +activated_cb (GtkWidget *widget, EggToolItem *item) +{ + char *text = NULL; + + if (GTK_IS_EDITABLE (widget)) + { + text = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1); + } + + g_signal_emit (item, EphyBookmarkToolitemSignals[ACTIVATE], 0, text); + + g_free (text); +} + static gboolean ephy_bookmark_toolitem_create_menu_proxy (EggToolItem *item) { @@ -85,6 +107,8 @@ ephy_bookmark_toolitem_create_menu_proxy (EggToolItem *item) menu_item = gtk_image_menu_item_new_with_mnemonic (text); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); + g_signal_connect (menu_item, "activate", G_CALLBACK (activated_cb), item); + egg_tool_item_set_proxy_menu_item (item, MENU_ID, menu_item); return TRUE; @@ -125,6 +149,9 @@ ephy_bookmark_toolitem_init (EphyBookmarkToolitem *item) gtk_widget_show (label); gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); g_object_set_data (G_OBJECT (item), "label", label); + + g_signal_connect (button, "clicked", G_CALLBACK (activated_cb), item); + g_signal_connect (entry, "activate", G_CALLBACK (activated_cb), item); } static void @@ -137,4 +164,14 @@ ephy_bookmark_toolitem_class_init (EphyBookmarkToolitemClass *klass) tool_item_class = (EggToolItemClass *)klass; tool_item_class->create_menu_proxy = ephy_bookmark_toolitem_create_menu_proxy; + + EphyBookmarkToolitemSignals[ACTIVATE] = g_signal_new ( + "activate", G_OBJECT_CLASS_TYPE (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (EphyBookmarkToolitemClass, activated), + NULL, NULL, + ephy_marshal_VOID__STRING, + G_TYPE_NONE, + 1, + G_TYPE_STRING); } diff --git a/src/bookmarks/ephy-bookmark-toolitem.h b/src/bookmarks/ephy-bookmark-toolitem.h index 1e817b0b7..f8248637e 100644 --- a/src/bookmarks/ephy-bookmark-toolitem.h +++ b/src/bookmarks/ephy-bookmark-toolitem.h @@ -43,6 +43,9 @@ typedef struct _EphyBookmarkToolitemPrivate EphyBookmarkToolitemPrivate; struct _EphyBookmarkToolitemClass { EggToolItemClass parent_class; + + void (* activated) (EphyBookmarkToolitem *item, + const char *text); }; struct _EphyBookmarkToolitem |