summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-06 23:36:41 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-06 23:36:41 +0000
commit07dafe91f549036ec6d29afe9d82b45a73ec92ac (patch)
tree74286a6d88fb29b43601b08cd9948c3ed6adc5ac
parent611d16ba6c2e37a08e0fb5c64ae6d25ed3eb249c (diff)
downloadchromium_src-07dafe91f549036ec6d29afe9d82b45a73ec92ac.zip
chromium_src-07dafe91f549036ec6d29afe9d82b45a73ec92ac.tar.gz
chromium_src-07dafe91f549036ec6d29afe9d82b45a73ec92ac.tar.bz2
Merge 68124 - retry 67949 - [gtk] tab in omnibox
With a fix for linux/views (no_show_all prevents |instant_view_| from being shown at the wrong times and making the edit think there's a suggestion). BUG=64340 Review URL: http://codereview.chromium.org/5588002 TBR=estade@chromium.org Review URL: http://codereview.chromium.org/5661002 git-svn-id: svn://svn.chromium.org/chrome/branches/597/src@68401 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit.h4
-rw-r--r--chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc50
-rw-r--r--chrome/browser/gtk/location_bar_view_gtk.cc9
-rw-r--r--chrome/browser/gtk/location_bar_view_gtk.h1
4 files changed, 48 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..b4898c3 100644
--- a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
+++ b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
@@ -336,6 +336,7 @@ void AutocompleteEditViewGtk::Init() {
// Setup for the Instant suggestion text view.
// GtkLabel is used instead of GtkTextView to get transparent background.
instant_view_ = gtk_label_new(NULL);
+ gtk_widget_set_no_show_all(instant_view_, TRUE);
GtkTextIter end_iter;
gtk_text_buffer_get_end_iter(text_buffer_, &end_iter);
@@ -892,20 +893,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 +1386,35 @@ 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 {
+ // TODO(estade): this only works for linux/gtk; linux/views doesn't use
+ // |instant_view_| so its visibility is not an indicator of whether we
+ // have a suggestion.
+ 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,