Index: chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.cc |
=================================================================== |
--- chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.cc (revision 117892) |
+++ chrome/browser/ui/gtk/omnibox/omnibox_view_gtk.cc (working copy) |
@@ -555,16 +555,22 @@ |
bool update_popup) { |
model_->SetUserText(text); |
// TODO(deanm): something about selection / focus change here. |
- SetWindowTextAndCaretPos(display_text, display_text.length()); |
- if (update_popup) |
- UpdatePopup(); |
- TextChanged(); |
+ SetWindowTextAndCaretPos(display_text, display_text.length(), update_popup, |
+ true); |
} |
void OmniboxViewGtk::SetWindowTextAndCaretPos(const string16& text, |
- size_t caret_pos) { |
+ size_t caret_pos, |
+ bool update_popup, |
+ bool notify_text_changed) { |
CharRange range(static_cast<int>(caret_pos), static_cast<int>(caret_pos)); |
SetTextAndSelectedRange(text, range); |
+ |
+ if (update_popup) |
+ UpdatePopup(); |
+ |
+ if (notify_text_changed) |
+ TextChanged(); |
} |
void OmniboxViewGtk::SetForcedQuery() { |
@@ -639,7 +645,7 @@ |
saved_temporary_selection_ = GetSelection(); |
StartUpdatingHighlightedText(); |
- SetWindowTextAndCaretPos(display_text, display_text.length()); |
+ SetWindowTextAndCaretPos(display_text, display_text.length(), false, false); |
FinishUpdatingHighlightedText(); |
TextChanged(); |
} |
@@ -1078,7 +1084,8 @@ |
// if IME did not handle it then "move-focus" signal will be emitted by the |
// default signal handler of |text_view_|. So we can intercept "move-focus" |
// signal of |text_view_| to know if a Tab key press event was handled by IME, |
- // and trigger Tab to search behavior when necessary in the signal handler. |
+ // and trigger Tab to search or result traversal behavior when necessary in |
+ // the signal handler. |
// |
// But for Enter key, if IME did not handle the key event, the default signal |
// handler will delete current selection range and insert '\n' and always |
@@ -1120,8 +1127,10 @@ |
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)); |
+ !(event->state & GDK_CONTROL_MASK); |
+ shift_was_pressed_ = event->state & GDK_SHIFT_MASK; |
+ |
delete_was_pressed_ = event->keyval == GDK_Delete || |
event->keyval == GDK_KP_Delete; |
@@ -1716,8 +1725,19 @@ |
bool handled = false; |
// Trigger Tab to search behavior only when Tab key is pressed. |
- if (model_->is_keyword_hint()) |
+ if (model_->is_keyword_hint() && !shift_was_pressed_) { |
handled = model_->AcceptKeyword(); |
+ } else if (model_->popup_model()->IsOpen()) { |
+ if (shift_was_pressed_ && |
+ model_->popup_model()->selected_line_state() == |
+ AutocompletePopupModel::KEYWORD) { |
+ model_->ClearKeyword(GetText()); |
+ handled = true; |
Peter Kasting
2012/01/24 19:14:44
Nit: Factor this line down below the conditional s
|
+ } else { |
+ model_->OnUpOrDownKeyPressed(shift_was_pressed_ ? -1 : 1); |
+ handled = true; |
+ } |
+ } |
if (supports_pre_edit_ && !handled && !pre_edit_.empty()) |
handled = true; |
@@ -1725,15 +1745,6 @@ |
if (!handled && gtk_widget_get_visible(instant_view_)) |
handled = model_->CommitSuggestedText(true); |
- if (!handled) { |
- if (!IsCaretAtEnd()) { |
- OnBeforePossibleChange(); |
- PlaceCaretAt(GetTextLength()); |
- OnAfterPossibleChange(); |
- handled = true; |
- } |
- } |
- |
if (!handled) |
handled = model_->AcceptCurrentInstantPreview(); |