diff options
author | Marco Pesenti Gritti <marco@it.gnome.org> | 2003-02-23 10:20:51 +0800 |
---|---|---|
committer | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2003-02-23 10:20:51 +0800 |
commit | db0e48d09abcc0134efac3ce2717c42a216b18e3 (patch) | |
tree | b44b835ecd180d5efc0d3822613837c0c95131a5 /lib/widgets/ephy-location-entry.c | |
parent | 6fb4ac671cbcfdd90fffb7752f3fdce8f80cc30e (diff) | |
download | gsoc2013-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.c | 70 |
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; |