Index: lib/ephy-marshal.list
===================================================================
RCS file: /cvs/gnome/epiphany/lib/ephy-marshal.list,v
retrieving revision 1.5
diff -u -p -r1.5 ephy-marshal.list
--- lib/ephy-marshal.list	20 Nov 2003 19:12:19 -0000	1.5
+++ lib/ephy-marshal.list	29 Nov 2003 00:09:20 -0000
@@ -6,3 +6,4 @@ VOID:POINTER,INT
 VOID:POINTER,POINTER
 VOID:STRING,INT
 VOID:STRING,INT,INT
+VOID:STRING,BOOLEAN
Index: src/ephy-location-action.c
===================================================================
RCS file: /cvs/gnome/epiphany/src/ephy-location-action.c,v
retrieving revision 1.17
diff -u -p -r1.17 ephy-location-action.c
--- src/ephy-location-action.c	22 Nov 2003 13:52:34 -0000	1.17
+++ src/ephy-location-action.c	29 Nov 2003 00:09:21 -0000
@@ -24,9 +24,12 @@
 #include "ephy-shell.h"
 #include "ephy-completion-model.h"
 #include "ephy-debug.h"
+#include "ephy-marshal.h"
 
 #include <gtk/gtkentry.h>
 #include <gtk/gtkentrycompletion.h>
+#include <gdk/gdkkeysyms.h>
+#include <string.h>
 
 #define EPHY_LOCATION_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_LOCATION_ACTION, EphyLocationActionPrivate))
 
@@ -117,7 +120,7 @@ action_activated_cb (GtkEntryCompletion 
 			(action->priv->bookmarks, smart_url, content);
 		g_return_if_fail (url != NULL);
 
-		g_signal_emit (action, signals[GO_LOCATION], 0, url);
+		g_signal_emit (action, signals[GO_LOCATION], 0, url, FALSE); 
 
 		g_free (url);
 		g_free (content);
@@ -133,11 +136,30 @@ location_url_activate_cb (EphyLocationEn
 	content = gtk_editable_get_chars (GTK_EDITABLE(entry), 0, -1);
 	if (content)
 	{
-		g_signal_emit (action, signals[GO_LOCATION], 0, content);
+		g_signal_emit (action, signals[GO_LOCATION], 0, content, FALSE);
 		g_free (content);
 	}
 }
 
+static gboolean
+location_url_key_press_event_cb (EphyLocationEntry *entry, GdkEventKey *event,
+			         EphyLocationAction *action)
+{
+	char *content;
+
+        if (event->state & GDK_CONTROL_MASK && ((event->keyval == GDK_Return) || 
+	   (event->keyval == GDK_KP_Enter)))         
+	{
+		content = gtk_editable_get_chars (GTK_EDITABLE(entry), 0, -1);
+		if (content && strlen(content)>0)
+		{
+			g_signal_emit (action, signals[GO_LOCATION], 0, content, TRUE);
+			g_free (content);
+		}
+	}
+	return FALSE; 
+}
+
 static void
 user_changed_cb (GtkWidget *proxy, EphyLocationAction *action)
 {
@@ -254,6 +276,9 @@ connect_proxy (GtkAction *action, GtkWid
 		g_signal_connect_object (entry, "activate",
 					 G_CALLBACK (location_url_activate_cb),
 					 action, 0);
+		g_signal_connect_object (entry, "key-press-event",
+					 G_CALLBACK (location_url_key_press_event_cb),
+					 action, 0);
 		g_signal_connect_object (proxy, "user_changed",
 					 G_CALLBACK (user_changed_cb), action, 0);
 	}
@@ -357,10 +382,11 @@ ephy_location_action_class_init (EphyLoc
                               G_SIGNAL_RUN_FIRST,
                               G_STRUCT_OFFSET (EphyLocationActionClass, go_location),
                               NULL, NULL,
-                              g_cclosure_marshal_VOID__STRING,
+                              ephy_marshal_VOID__STRING_BOOLEAN,
                               G_TYPE_NONE,
-                              1,
-			      G_TYPE_STRING);
+                              2,
+                              G_TYPE_STRING,
+                              G_TYPE_BOOLEAN);
 
 	g_object_class_install_property (object_class,
 					 PROP_ADDRESS,
Index: src/toolbar.c
===================================================================
RCS file: /cvs/gnome/epiphany/src/toolbar.c,v
retrieving revision 1.72
diff -u -p -r1.72 toolbar.c
--- src/toolbar.c	22 Nov 2003 13:52:34 -0000	1.72
+++ src/toolbar.c	29 Nov 2003 00:09:22 -0000
@@ -161,9 +161,21 @@ arbitrary_url_notifier (GConfClient *cli
 }
 
 static void
-go_location_cb (GtkAction *action, char *location, EphyWindow *window)
+go_location_cb (GtkAction *action, char *location, gboolean in_new, EphyWindow *window)
 {
-	ephy_window_load_url (window, location);
+	EphyTab *tab;
+	if (in_new == TRUE) 
+	{
+		tab = ephy_window_get_active_tab (window);
+		ephy_shell_new_tab (ephy_shell, window, tab,
+				    location,
+				    EPHY_NEW_TAB_OPEN_PAGE |
+				    EPHY_NEW_TAB_IN_EXISTING_WINDOW);
+	}
+	else
+	{
+		ephy_window_load_url (window, location);
+	}
 }
 
 static void
Index: src/bookmarks/ephy-bookmark-action.c
===================================================================
RCS file: /cvs/gnome/epiphany/src/bookmarks/ephy-bookmark-action.c,v
retrieving revision 1.24
diff -u -p -r1.24 ephy-bookmark-action.c
--- src/bookmarks/ephy-bookmark-action.c	5 Nov 2003 22:56:16 -0000	1.24
+++ src/bookmarks/ephy-bookmark-action.c	29 Nov 2003 00:09:23 -0000
@@ -30,6 +30,8 @@
 #include "ephy-shell.h"
 #include "ephy-string.h"
 #include "ephy-debug.h"
+#include "ephy-marshal.h"
+#include "gdk/gdkkeysyms.h"
 
 #define MAX_LABEL_LENGTH 30
 
@@ -244,7 +246,7 @@ ephy_bookmark_action_sync_label (GtkActi
 }
 
 static void
-activate_cb (GtkWidget *widget, GtkAction *action)
+emit_go_location (GtkWidget *widget, GtkAction *action, gboolean in_new)
 {
 	char *location = NULL;
 	char *text = NULL;
@@ -291,12 +293,46 @@ activate_cb (GtkWidget *widget, GtkActio
 
 	g_signal_emit (action,
 		       ephy_bookmark_action_signals[GO_LOCATION],
-		       0, location);
+		       0, location, in_new);
 
 	g_free (location);
 	g_free (text);
 }
 
+static void
+activate_cb (GtkWidget *widget, GtkAction *action)
+{
+	emit_go_location (widget, action, FALSE);
+}
+
+static void
+button_press_cb (GtkWidget *widget, GdkEventButton *event, GtkAction *action)
+{
+	gboolean in_new = FALSE;
+
+	if (event->button == 2)	
+	{
+		in_new = TRUE;	
+	}
+	else if (event->button == 3)	
+	{
+		return;
+	}
+
+	emit_go_location (widget, action, in_new);
+}
+
+static gboolean
+key_press_event_cb (GtkWidget *widget, GdkEventKey *event, GtkAction *action)
+{
+        if (event->state & GDK_CONTROL_MASK && ((event->keyval == GDK_Return) ||
+	   (event->keyval == GDK_KP_Enter)))
+	{
+		emit_go_location (widget, action, TRUE);
+	}
+	return FALSE;
+}
+
 static gboolean
 create_menu_proxy (GtkToolItem *item, GtkAction *action)
 {
@@ -344,10 +380,12 @@ connect_proxy (GtkAction *action, GtkWid
 	if (GTK_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);
+		g_signal_connect (button, "clicked", G_CALLBACK (activate_cb), action); 
+		g_signal_connect (button, "button-press-event", G_CALLBACK (button_press_cb), action);
 
 		entry = GTK_WIDGET (g_object_get_data (G_OBJECT (proxy), "entry"));
 		g_signal_connect (entry, "activate", G_CALLBACK (activate_cb), action);
+		g_signal_connect (entry, "key-press-event", G_CALLBACK (key_press_event_cb), action);
 
 		g_signal_connect (proxy, "create_menu_proxy", G_CALLBACK (create_menu_proxy), action);
 	}
@@ -442,10 +480,11 @@ ephy_bookmark_action_class_init (EphyBoo
                               G_SIGNAL_RUN_FIRST,
                               G_STRUCT_OFFSET (EphyBookmarkActionClass, go_location),
                               NULL, NULL,
-                              g_cclosure_marshal_VOID__STRING,
+                              ephy_marshal_VOID__STRING_BOOLEAN,
                               G_TYPE_NONE,
-                              1,
-			      G_TYPE_STRING);
+                              2,
+                              G_TYPE_STRING,
+                              G_TYPE_BOOLEAN);
 
 	g_object_class_install_property (object_class,
                                          PROP_BOOKMARK_ID,
Index: src/bookmarks/ephy-bookmarks-menu.c
===================================================================
RCS file: /cvs/gnome/epiphany/src/bookmarks/ephy-bookmarks-menu.c,v
retrieving revision 1.19
diff -u -p -r1.19 ephy-bookmarks-menu.c
--- src/bookmarks/ephy-bookmarks-menu.c	5 Nov 2003 22:56:16 -0000	1.19
+++ src/bookmarks/ephy-bookmarks-menu.c	29 Nov 2003 00:09:23 -0000
@@ -112,7 +112,7 @@ ephy_bookmarks_menu_clean (EphyBookmarks
 }
 
 static void
-go_location_cb (GtkAction *action, char *location, EphyWindow *window)
+go_location_cb (GtkAction *action, char *location, gboolean in_new, EphyWindow *window)
 {
 	ephy_window_load_url (window, location);
 }
Index: src/bookmarks/ephy-topic-action.c
===================================================================
RCS file: /cvs/gnome/epiphany/src/bookmarks/ephy-topic-action.c,v
retrieving revision 1.33
diff -u -p -r1.33 ephy-topic-action.c
--- src/bookmarks/ephy-topic-action.c	5 Nov 2003 22:56:16 -0000	1.33
+++ src/bookmarks/ephy-topic-action.c	29 Nov 2003 00:09:24 -0000
@@ -33,6 +33,7 @@
 #include "ephy-debug.h"
 #include "ephy-gui.h"
 #include "ephy-string.h"
+#include "ephy-marshal.h"
 
 static void ephy_topic_action_init       (EphyTopicAction *action);
 static void ephy_topic_action_class_init (EphyTopicActionClass *class);
@@ -141,7 +142,7 @@ menu_activate_cb (GtkWidget *item, GtkAc
 	location = ephy_node_get_property_string
 		(node, EPHY_NODE_BMK_PROP_LOCATION);
 	g_signal_emit (action, ephy_topic_action_signals[GO_LOCATION],
-		       0, location);
+		       0, location, FALSE);
 }
 
 static void
@@ -591,10 +592,11 @@ ephy_topic_action_class_init (EphyTopicA
                               G_SIGNAL_RUN_FIRST,
                               G_STRUCT_OFFSET (EphyTopicActionClass, go_location),
                               NULL, NULL,
-                              g_cclosure_marshal_VOID__STRING,
+                              ephy_marshal_VOID__STRING_BOOLEAN,
                               G_TYPE_NONE,
-                              1,
-			      G_TYPE_STRING);
+                              2,
+                              G_TYPE_STRING,
+                              G_TYPE_BOOLEAN);
 
 	g_object_class_install_property (object_class,
                                          PROP_TOPIC_ID,
