aboutsummaryrefslogtreecommitdiffstats
path: root/lib/widgets/ephy-location-entry.c
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@it.gnome.org>2003-02-23 10:20:51 +0800
committerMarco Pesenti Gritti <mpeseng@src.gnome.org>2003-02-23 10:20:51 +0800
commitdb0e48d09abcc0134efac3ce2717c42a216b18e3 (patch)
treeb44b835ecd180d5efc0d3822613837c0c95131a5 /lib/widgets/ephy-location-entry.c
parent6fb4ac671cbcfdd90fffb7752f3fdce8f80cc30e (diff)
downloadgsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar
gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.gz
gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.bz2
gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.lz
gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.xz
gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.zst
gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.zip
Update location entry with the urls selected on the drop down. Implement
2003-02-23 Marco Pesenti Gritti <marco@it.gnome.org> * lib/widgets/ephy-autocompletion-window.c: (ephy_autocompletion_window_class_init), (ephy_autocompletion_window_key_press_hack): * lib/widgets/ephy-autocompletion-window.h: * lib/widgets/ephy-editable-toolbar.c: (drag_data_delete_cb), (drag_data_get_cb), (connect_toolbar_drag_source), (disconnect_toolbar_drag_source), (do_merge), (editor_close_cb), (button_press_cb), (ephy_editable_toolbar_edit): * lib/widgets/ephy-location-entry.c: (location_focus_out_cb), (ephy_location_entry_init), (real_entry_set_location), (ephy_location_entry_key_press_event_cb), (ephy_location_entry_activate_cb), (ephy_location_entry_set_location), (ephy_location_entry_autocompletion_window_url_selected_cb), (ephy_location_entry_set_autocompletion), (ephy_location_entry_autocompletion_window_url_activated_cb), (ephy_location_entry_autocompletion_window_hidden_cb), (ephy_location_entry_edit): * lib/widgets/ephy-location-entry.h: * src/ephy-shell.c: (ephy_shell_new_tab): * src/ephy-window.c: (add_widget): * src/toolbar.c: (toolbar_edit_location): * src/toolbar.h: Update location entry with the urls selected on the drop down. Implement editing mode in location entry == when the user is typing an url try to do not disturb (mozilla still grab the focus damnit). Dont put the homepage url in the location. I'm not sure if this is a good behavior for normal urls (I dont see problems, but please prove me wrong), but for about:blank it's needed.
Diffstat (limited to 'lib/widgets/ephy-location-entry.c')
-rw-r--r--lib/widgets/ephy-location-entry.c70
1 files changed, 62 insertions, 8 deletions
diff --git a/lib/widgets/ephy-location-entry.c b/lib/widgets/ephy-location-entry.c
index fbd8a8216..a2e86e345 100644
--- a/lib/widgets/ephy-location-entry.c
+++ b/lib/widgets/ephy-location-entry.c
@@ -45,6 +45,7 @@ struct _EphyLocationEntryPrivate {
gint show_alternatives_timeout;
gboolean block_set_autocompletion_key;
gboolean going_to_site;
+ gboolean editing;
gchar *autocompletion_key;
gchar *last_completion;
@@ -125,14 +126,28 @@ ephy_location_entry_class_init (EphyLocationEntryClass *klass)
G_TYPE_STRING);
}
+static gboolean
+location_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, EphyLocationEntry *w)
+{
+ w->priv->editing = FALSE;
+
+ return FALSE;
+}
+
static void
ephy_location_entry_init (EphyLocationEntry *w)
{
EphyLocationEntryPrivate *p = g_new0 (EphyLocationEntryPrivate, 1);
w->priv = p;
p->last_action_target = NULL;
+ p->editing = FALSE;
ephy_location_entry_build (w);
+
+ g_signal_connect (w->priv->entry,
+ "focus_out_event",
+ G_CALLBACK (location_focus_out_cb),
+ w);
}
static void
@@ -360,6 +375,18 @@ position_is_at_end (GtkEditable *editable)
return gtk_editable_get_position (editable) == end;
}
+static void
+real_entry_set_location (EphyLocationEntry *w,
+ const gchar *new_location)
+{
+ EphyLocationEntryPrivate *p = w->priv;
+ int pos;
+
+ gtk_editable_delete_text (GTK_EDITABLE (p->entry), 0, -1);
+ gtk_editable_insert_text (GTK_EDITABLE (p->entry), new_location, g_utf8_strlen (new_location, -1),
+ &pos);
+}
+
/* this is from the old location entry, need to do the autocompletion before implementing this */
static gboolean
ephy_location_entry_key_press_event_cb (GtkWidget *entry, GdkEventKey *event, EphyLocationEntry *w)
@@ -428,7 +455,6 @@ ephy_location_entry_key_press_event_cb (GtkWidget *entry, GdkEventKey *event, Ep
case GDK_Page_Up:
case GDK_Page_Down:
ephy_location_entry_autocompletion_hide_alternatives (w);
- //ephy_embed_grab_focus (window->active_embed);
return FALSE;
case GDK_Tab:
{
@@ -479,7 +505,7 @@ ephy_location_entry_key_press_event_cb (GtkWidget *entry, GdkEventKey *event, Ep
ephy_location_entry_autocompletion_hide_alternatives (w);
if (p->before_completion)
{
- ephy_location_entry_set_location (w, p->before_completion);
+ real_entry_set_location (w, p->before_completion);
g_free (p->before_completion);
p->before_completion = NULL;
gtk_editable_set_position (GTK_EDITABLE (p->entry), -1);
@@ -487,6 +513,7 @@ ephy_location_entry_key_press_event_cb (GtkWidget *entry, GdkEventKey *event, Ep
}
break;
default:
+ w->priv->editing = TRUE;
ephy_location_entry_autocompletion_unselect_alternatives (w);
if ((event->string[0] > 32) && (event->string[0] < 126) &&
position_is_at_end (GTK_EDITABLE (entry)))
@@ -524,6 +551,8 @@ ephy_location_entry_activate_cb (GtkEntry *entry, EphyLocationEntry *w)
LOG ("In ephy_location_entry_activate_cb, activating %s", content)
+ w->priv->editing = FALSE;
+
g_signal_emit (w, EphyLocationEntrySignals[ACTIVATED], 0, target, content);
g_free (content);
}
@@ -558,11 +587,10 @@ void
ephy_location_entry_set_location (EphyLocationEntry *w,
const gchar *new_location)
{
- EphyLocationEntryPrivate *p = w->priv;
- int pos;
- gtk_editable_delete_text (GTK_EDITABLE (p->entry), 0, -1);
- gtk_editable_insert_text (GTK_EDITABLE (p->entry), new_location, g_utf8_strlen (new_location, -1),
- &pos);
+ if (!w->priv->editing)
+ {
+ real_entry_set_location (w, new_location);
+ }
}
gchar *
@@ -572,6 +600,15 @@ ephy_location_entry_get_location (EphyLocationEntry *w)
return location;
}
+static void
+ephy_location_entry_autocompletion_window_url_selected_cb (EphyAutocompletionWindow *aw,
+ const char *target,
+ int action,
+ EphyLocationEntry *w)
+{
+ real_entry_set_location (w, target);
+}
+
void
ephy_location_entry_set_autocompletion (EphyLocationEntry *w,
EphyAutocompletion *ac)
@@ -598,6 +635,10 @@ ephy_location_entry_set_autocompletion (EphyLocationEntry *w,
G_CALLBACK (ephy_location_entry_autocompletion_window_url_activated_cb),
w);
+ g_signal_connect (p->autocompletion_window, "selected",
+ G_CALLBACK (ephy_location_entry_autocompletion_window_url_selected_cb),
+ w);
+
g_signal_connect (p->autocompletion_window, "hidden",
G_CALLBACK (ephy_location_entry_autocompletion_window_hidden_cb),
w);
@@ -627,7 +668,7 @@ ephy_location_entry_autocompletion_window_url_activated_cb (EphyAutocompletionWi
}
else
{
- ephy_location_entry_set_location (w, target);
+ real_entry_set_location (w, target);
}
content = gtk_editable_get_chars (GTK_EDITABLE(w->priv->entry), 0, -1);
@@ -666,6 +707,19 @@ ephy_location_entry_autocompletion_window_hidden_cb (EphyAutocompletionWindow *a
}
void
+ephy_location_entry_edit (EphyLocationEntry *w)
+{
+ GtkWidget *toplevel;
+
+ w->priv->editing = TRUE;
+
+ toplevel = gtk_widget_get_toplevel (w->priv->entry);
+
+ gtk_window_set_focus (GTK_WINDOW(toplevel),
+ w->priv->entry);
+}
+
+void
ephy_location_entry_activate (EphyLocationEntry *w)
{
GtkWidget *toplevel;