| Index: chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
|
| diff --git a/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc b/chrome/browser/autocomplete/autocomplete_edit_view_gtk.cc
|
| index 5bad09c6fed0e8747efbecc6771d620af0f77b66..6e47128b6549f5c0ef85ae32b6b01a58996311f7 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) {
|
|
|