Index: chrome/browser/ui/omnibox/omnibox_edit_model.cc |
diff --git a/chrome/browser/ui/omnibox/omnibox_edit_model.cc b/chrome/browser/ui/omnibox/omnibox_edit_model.cc |
index 5a896518b4950c158196721bb311b55483a2f4cf..668d9a820ea8ff5b715b1dba83d0cf0d3f6ab002 100644 |
--- a/chrome/browser/ui/omnibox/omnibox_edit_model.cc |
+++ b/chrome/browser/ui/omnibox/omnibox_edit_model.cc |
@@ -70,11 +70,13 @@ using predictors::AutocompleteActionPredictorFactory; |
OmniboxEditModel::State::State(bool user_input_in_progress, |
const string16& user_text, |
const string16& keyword, |
- bool is_keyword_hint) |
+ bool is_keyword_hint, |
+ bool is_caret_visible) |
: user_input_in_progress(user_input_in_progress), |
user_text(user_text), |
keyword(keyword), |
- is_keyword_hint(is_keyword_hint) { |
+ is_keyword_hint(is_keyword_hint), |
+ is_caret_visible(is_caret_visible) { |
} |
OmniboxEditModel::State::~State() { |
@@ -90,6 +92,7 @@ OmniboxEditModel::OmniboxEditModel(OmniboxView* view, |
popup_(NULL), |
controller_(controller), |
has_focus_(false), |
+ is_caret_visible_(true), |
user_input_in_progress_(false), |
just_deleted_text_(false), |
has_temporary_text_(false), |
@@ -128,10 +131,12 @@ const OmniboxEditModel::State OmniboxEditModel::GetStateForTabSwitch() { |
} |
} |
- return State(user_input_in_progress_, user_text_, keyword_, is_keyword_hint_); |
+ return State(user_input_in_progress_, user_text_, keyword_, is_keyword_hint_, |
+ is_caret_visible_); |
} |
void OmniboxEditModel::RestoreState(const State& state) { |
+ SetCaretVisibility(state.is_caret_visible); |
// Restore any user editing. |
if (state.user_input_in_progress) { |
// NOTE: Be sure and set keyword-related state BEFORE invoking |
@@ -710,6 +715,8 @@ const AutocompleteResult& OmniboxEditModel::result() const { |
void OmniboxEditModel::OnSetFocus(bool control_down) { |
has_focus_ = true; |
control_key_state_ = control_down ? DOWN_WITHOUT_CHANGE : UP; |
+ // Restore caret visibility whenever the user focuses back into the omnibox. |
+ SetCaretVisibility(true); |
if (InstantController* instant = controller_->GetInstant()) |
instant->OmniboxGotFocus(); |
@@ -728,6 +735,13 @@ void OmniboxEditModel::OnSetFocus(bool control_down) { |
NotifySearchTabHelper(); |
} |
+void OmniboxEditModel::SetCaretVisibility(bool visible) { |
+ if (has_focus_ && visible != is_caret_visible_) { |
+ is_caret_visible_ = visible; |
+ view_->ApplyCaretVisibility(); |
+ } |
+} |
+ |
void OmniboxEditModel::OnWillKillFocus(gfx::NativeView view_gaining_focus) { |
SetInstantSuggestion(InstantSuggestion()); |
@@ -935,6 +949,11 @@ bool OmniboxEditModel::OnAfterPossibleChange(const string16& old_text, |
else if (text_differs) |
paste_state_ = NONE; |
+ // Restore caret visibility whenever the user changes text or selection in the |
+ // omnibox. |
+ if (text_differs || selection_differs) |
+ SetCaretVisibility(true); |
+ |
// Modifying the selection counts as accepting the autocompleted text. |
const bool user_text_changed = |
text_differs || (selection_differs && !inline_autocomplete_text_.empty()); |