diff -u -d -r1.4 ephy-topics-entry.c
--- src/bookmarks/ephy-topics-entry.c	29 Jan 2006 15:30:40 -0000	1.4
+++ src/bookmarks/ephy-topics-entry.c	1 Feb 2006 10:47:53 -0000
@@ -455,6 +455,45 @@
 	return TRUE;
 }
 
+static void
+activate_cb (GtkEditable *editable,
+	     gpointer user_data)
+{	
+	EphyTopicsEntry *entry = EPHY_TOPICS_ENTRY (editable);
+	EphyTopicsEntryPrivate *priv = entry->priv;
+	GtkEntryCompletion *completion = gtk_entry_get_completion (GTK_ENTRY (entry));
+
+	GValue value = { 0, };
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	gboolean valid;
+	
+	if (priv->key == NULL || priv->key[0] == '\0')
+	{
+		gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
+		return;
+	}
+	else
+	{
+		gtk_entry_set_activates_default (GTK_ENTRY (entry), FALSE);
+	}
+	
+	/* Loop through the completion model and find the first item to use, if any. */
+	model = GTK_TREE_MODEL (priv->store);
+	valid = gtk_tree_model_get_iter_first (model, &iter);
+	while (valid && !match_func (completion, NULL, &iter, NULL))
+	{
+		valid = gtk_tree_model_iter_next (model, &iter);
+	}
+
+	if (valid)
+	{
+		gtk_tree_model_get_value (model, &iter, COLUMN_TITLE, &value);
+		insert_text (EPHY_TOPICS_ENTRY (editable), g_value_get_string (&value));
+		g_value_unset (&value);		
+	}	
+}
+
 static gboolean
 focus_out_cb (GtkEditable *editable,
 	      GdkEventFocus *event,
@@ -561,14 +600,17 @@
 	
 	g_signal_connect (object, "focus-out-event",
 			  G_CALLBACK (focus_out_cb), NULL);
+	g_signal_connect (object, "activate",
+			  G_CALLBACK (activate_cb), NULL);
+	
 	g_signal_connect (object, "changed",
 			  G_CALLBACK (update_database), NULL);
-
 	g_signal_connect (object, "notify::cursor-position",
 			  G_CALLBACK (update_key), NULL);
 	g_signal_connect (object, "notify::text",
 			  G_CALLBACK (update_key), NULL);
 	
+	update_key (entry);
 	update_widget (entry);
 	
 	return object;
