diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-02 02:25:02 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-02 02:25:02 +0000 |
commit | 0c32e4fce582eb2192c7aeb470d325cf33c23759 (patch) | |
tree | ca5cee680d3e7a8265ce99d91d903af702cf2cab | |
parent | b6789b83c2d73cfc50642eb9101233e7b6325b00 (diff) | |
download | chromium_src-0c32e4fce582eb2192c7aeb470d325cf33c23759.zip chromium_src-0c32e4fce582eb2192c7aeb470d325cf33c23759.tar.gz chromium_src-0c32e4fce582eb2192c7aeb470d325cf33c23759.tar.bz2 |
[gtk] tab in omnibox
BUG=64340
TEST=see bug
Review URL: http://codereview.chromium.org/5339014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67949 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/autocomplete/autocomplete_edit.h | 4 | ||||
-rw-r--r-- | chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc | 46 | ||||
-rw-r--r-- | chrome/browser/gtk/location_bar_view_gtk.cc | 9 | ||||
-rw-r--r-- | chrome/browser/gtk/location_bar_view_gtk.h | 1 |
4 files changed, 44 insertions, 16 deletions
diff --git a/chrome/browser/autocomplete/autocomplete_edit.h b/chrome/browser/autocomplete/autocomplete_edit.h index 90fc643..b9854ff 100644 --- a/chrome/browser/autocomplete/autocomplete_edit.h +++ b/chrome/browser/autocomplete/autocomplete_edit.h @@ -50,6 +50,10 @@ class AutocompleteEditController { // autocomplete. Returns true if the text was committed. virtual bool OnCommitSuggestedText(const std::wstring& typed_text) = 0; + // Accepts the currently showing instant preview, if any, and returns true. + // Returns false if there is no instant preview showing. + virtual bool AcceptCurrentInstantPreview() { return false; } + // Sets the suggested search text to |suggested_text|. virtual void OnSetSuggestedSearchText(const string16& suggested_text) = 0; diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc index 5bad09c..6e47128 100644 --- a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc +++ b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc @@ -892,20 +892,20 @@ gboolean AutocompleteEditViewGtk::HandleKeyPress(GtkWidget* widget, GtkWidgetClass* klass = GTK_WIDGET_GET_CLASS(widget); - enter_was_pressed_ = (event->keyval == GDK_Return || - event->keyval == GDK_ISO_Enter || - event->keyval == GDK_KP_Enter); + enter_was_pressed_ = event->keyval == GDK_Return || + event->keyval == GDK_ISO_Enter || + event->keyval == GDK_KP_Enter; // Set |tab_was_pressed_| to true if it's a Tab key press event, so that our // handler of "move-focus" signal can trigger Tab to search behavior when // necessary. - tab_was_pressed_ = ((event->keyval == GDK_Tab || - event->keyval == GDK_ISO_Left_Tab || - event->keyval == GDK_KP_Tab) && - !(event->state & GDK_CONTROL_MASK)); + tab_was_pressed_ = (event->keyval == GDK_Tab || + event->keyval == GDK_ISO_Left_Tab || + event->keyval == GDK_KP_Tab) && + !(event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)); - delete_was_pressed_ = (event->keyval == GDK_Delete || - event->keyval == GDK_KP_Delete); + delete_was_pressed_ = event->keyval == GDK_Delete || + event->keyval == GDK_KP_Delete; // Reset |enter_was_inserted_|, which may be set in the "insert-text" signal // handler, so that we'll know if an Enter key event was handled by IME. @@ -1385,18 +1385,32 @@ void AutocompleteEditViewGtk::HandleBackSpace(GtkWidget* sender) { void AutocompleteEditViewGtk::HandleViewMoveFocus(GtkWidget* widget, GtkDirectionType direction) { + if (!tab_was_pressed_) + return; + + // If special behavior is triggered, then stop the signal emission to + // prevent the focus from being moved. + bool handled = false; + // Trigger Tab to search behavior only when Tab key is pressed. - if (tab_was_pressed_ && enable_tab_to_search_ && - model_->is_keyword_hint() && !model_->keyword().empty()) { - model_->AcceptKeyword(); + if (model_->is_keyword_hint() && !model_->keyword().empty()) { + if (enable_tab_to_search_) { + model_->AcceptKeyword(); + handled = true; + } + } else { + if (GTK_WIDGET_VISIBLE(instant_view_)) { + controller_->OnCommitSuggestedText(GetText()); + handled = true; + } else { + handled = controller_->AcceptCurrentInstantPreview(); + } + } - // If Tab to search behavior is triggered, then stop the signal emission to - // prevent the focus from being moved. + if (handled) { static guint signal_id = g_signal_lookup("move-focus", GTK_TYPE_WIDGET); g_signal_stop_emission(widget, signal_id, 0); } - - // Propagate the signal so that focus can be moved as normal. } void AutocompleteEditViewGtk::HandleCopyClipboard(GtkWidget* sender) { diff --git a/chrome/browser/gtk/location_bar_view_gtk.cc b/chrome/browser/gtk/location_bar_view_gtk.cc index 6447df6..ca26d43 100644 --- a/chrome/browser/gtk/location_bar_view_gtk.cc +++ b/chrome/browser/gtk/location_bar_view_gtk.cc @@ -467,6 +467,15 @@ bool LocationBarViewGtk::OnCommitSuggestedText( return rv; } +bool LocationBarViewGtk::AcceptCurrentInstantPreview() { + InstantController* instant = browser_->instant(); + if (instant && instant->IsCurrent()) { + instant->CommitCurrentPreview(INSTANT_COMMIT_PRESSED_ENTER); + return true; + } + return false; +} + void LocationBarViewGtk::OnSetSuggestedSearchText( const string16& suggested_text) { SetSuggestedText(suggested_text); diff --git a/chrome/browser/gtk/location_bar_view_gtk.h b/chrome/browser/gtk/location_bar_view_gtk.h index 566886f..bab0279 100644 --- a/chrome/browser/gtk/location_bar_view_gtk.h +++ b/chrome/browser/gtk/location_bar_view_gtk.h @@ -96,6 +96,7 @@ class LocationBarViewGtk : public AutocompleteEditController, virtual void OnAutocompleteWillAccept(); // For this implementation, the parameter is ignored. virtual bool OnCommitSuggestedText(const std::wstring& typed_text); + virtual bool AcceptCurrentInstantPreview(); virtual void OnSetSuggestedSearchText(const string16& suggested_text); virtual void OnPopupBoundsChanged(const gfx::Rect& bounds); virtual void OnAutocompleteAccept(const GURL& url, |