Index: chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
index cd5a16f8a4cf16c73a878db61bc805fe445b381f..3389d9ba682472e44ae87634834dafd7a0470826 100644 |
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
@@ -14,6 +14,7 @@ |
#include "chrome/browser/chromeos/input_method/input_method_configuration.h" |
#include "chrome/browser/command_updater.h" |
#include "chrome/browser/ui/omnibox/omnibox_edit_controller.h" |
+#include "chrome/browser/ui/omnibox/omnibox_edit_model.h" |
#include "chrome/browser/ui/omnibox/omnibox_popup_model.h" |
#include "chrome/browser/ui/search/search.h" |
#include "chrome/browser/ui/tab_contents/tab_contents.h" |
@@ -362,11 +363,14 @@ bool OmniboxViewViews::HandleKeyReleaseEvent(const ui::KeyEvent& event) { |
void OmniboxViewViews::HandleMousePressEvent(const ui::MouseEvent& event) { |
select_all_on_mouse_release_ = |
(event.IsOnlyLeftMouseButton() || event.IsOnlyRightMouseButton()) && |
- !textfield_->HasFocus(); |
- // Restore caret visibility whenever the user clicks in the the omnibox. This |
- // is not always covered by OnSetFocus() because when clicking while the |
- // omnibox has invisible focus does not trigger a new OnSetFocus() call. |
- model()->SetCaretVisibility(true); |
+ (!textfield_->HasFocus() || |
+ (model()->focus_state() == OMNIBOX_FOCUS_INVISIBLE)); |
+ // Restore caret visibility whenever the user clicks in the omnibox in a way |
+ // that would give it focus. We must handle this case separately here because |
+ // if the omnibox currently has invisible focus, the mouse event won't trigger |
+ // either SetFocus() or OmniboxEditModel::OnSetFocus(). |
+ if (select_all_on_mouse_release_) |
+ model()->SetCaretVisibility(true); |
} |
void OmniboxViewViews::HandleMouseDragEvent(const ui::MouseEvent& event) { |
@@ -573,14 +577,14 @@ void OmniboxViewViews::UpdatePopup() { |
} |
void OmniboxViewViews::SetFocus() { |
- // Restore caret visibility if focused explicitly. We need to do this here |
- // because if we already have invisible focus, the RequestFocus() call below |
- // will short-circuit, preventing us from reaching |
- // OmniboxEditModel::OnSetFocus(), which handles restoring visibility when we |
- // didn't previously have focus. |
- model()->SetCaretVisibility(true); |
// In views-implementation, the focus is on textfield rather than OmniboxView. |
textfield_->RequestFocus(); |
+ // Restore caret visibility if focus is explicitly requested. This is |
+ // necessary because if we already have invisible focus, the RequestFocus() |
+ // call above will short-circuit, preventing us from reaching |
+ // OmniboxEditModel::OnSetFocus(), which handles restoring visibility when the |
+ // omnibox regains focus after losing focus. |
+ model()->SetCaretVisibility(true); |
} |
void OmniboxViewViews::ApplyCaretVisibility() { |