aboutsummaryrefslogtreecommitdiffstats
path: root/src/bookmarks/ephy-bookmark-action.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks/ephy-bookmark-action.c')
-rw-r--r--src/bookmarks/ephy-bookmark-action.c96
1 files changed, 45 insertions, 51 deletions
diff --git a/src/bookmarks/ephy-bookmark-action.c b/src/bookmarks/ephy-bookmark-action.c
index f7459c477..a4154b298 100644
--- a/src/bookmarks/ephy-bookmark-action.c
+++ b/src/bookmarks/ephy-bookmark-action.c
@@ -305,83 +305,77 @@ ephy_bookmark_action_sync_label (GtkAction *gaction,
}
static void
-open_in_tab_activate_cb (GtkWidget *widget,
- EphyBookmarkAction *action)
+bookmark_activate_with_flags (GtkWidget *widget,
+ EphyBookmarkAction *action,
+ EphyLinkFlags flags)
{
EphyBookmarkActionPrivate *priv = action->priv;
EphyBookmarks *bookmarks;
const char *location;
- char *address;
+ char *address = NULL, *text = NULL;
g_return_if_fail (priv->node != NULL);
location = ephy_node_get_property_string
(priv->node, EPHY_NODE_BMK_PROP_LOCATION);
g_return_if_fail (location != NULL);
-
+
bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
- address = ephy_bookmarks_resolve_address (bookmarks, location, NULL);
+
+ if (GTK_IS_EDITABLE (widget))
+ {
+ text = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1);
+ }
+
+ /* The entered search term is empty, and we have a smart bookmark */
+ if ((text == NULL || text[0] == '\0') && strstr (location, "%s") != NULL)
+ {
+ GnomeVFSURI *uri = gnome_vfs_uri_new (location);
+ if (uri != NULL)
+ {
+ address = g_strconcat (
+ gnome_vfs_uri_get_scheme (uri),
+ "://",
+ gnome_vfs_uri_get_host_name (uri),
+ NULL);
+ gnome_vfs_uri_unref (uri);
+ }
+ }
+
+ if (address == NULL)
+ {
+ address = ephy_bookmarks_resolve_address (bookmarks, location, text);
+ }
g_return_if_fail (address != NULL);
- ephy_link_open (EPHY_LINK (action), address, NULL,
- EPHY_LINK_NEW_TAB | EPHY_LINK_JUMP_TO);
+ ephy_link_open (EPHY_LINK (action), address, NULL, flags);
g_free (address);
+ g_free (text);
}
static void
-open_in_window_activate_cb (GtkWidget *widget, EphyBookmarkAction *action)
+open_in_tab_activate_cb (GtkWidget *widget,
+ EphyBookmarkAction *action)
{
- EphyBookmarkActionPrivate *priv = action->priv;
- EphyBookmarks *bookmarks;
- const char *location;
- char *address;
-
- g_return_if_fail (priv->node != NULL);
-
- location = ephy_node_get_property_string
- (priv->node, EPHY_NODE_BMK_PROP_LOCATION);
- g_return_if_fail (location != NULL);
-
- bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
- address = ephy_bookmarks_resolve_address (bookmarks, location, NULL);
- g_return_if_fail (address != NULL);
-
- ephy_link_open (EPHY_LINK (action), address, NULL, EPHY_LINK_NEW_WINDOW);
+ bookmark_activate_with_flags(widget, action,
+ EPHY_LINK_NEW_TAB | EPHY_LINK_JUMP_TO);
+}
- g_free (address);
+static void
+open_in_window_activate_cb (GtkWidget *widget,
+ EphyBookmarkAction *action)
+{
+ bookmark_activate_with_flags(widget, action,
+ EPHY_LINK_NEW_WINDOW);
}
static void
activate_cb (GtkWidget *widget,
- EphyBookmarkAction *action)
+ EphyBookmarkAction *action)
{
- EphyBookmarkActionPrivate *priv = action->priv;
- EphyBookmarks *bookmarks;
- const char *location;
- char *address, *text = NULL;
-
- g_return_if_fail (priv->node != NULL);
-
- location = ephy_node_get_property_string
- (priv->node, EPHY_NODE_BMK_PROP_LOCATION);
- g_return_if_fail (location != NULL);
-
- if (GTK_IS_EDITABLE (widget))
- {
- text = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1);
- }
-
- bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
-
- address = ephy_bookmarks_resolve_address (bookmarks, location, text);
- g_return_if_fail (address != NULL);
-
- ephy_link_open (EPHY_LINK (action), address, NULL,
+ bookmark_activate_with_flags(widget, action,
ephy_gui_is_middle_click () ? EPHY_LINK_NEW_TAB : 0);
-
- g_free (address);
- g_free (text);
}
static void