Index: chrome/renderer/searchbox/searchbox.cc |
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc |
index d72a60cb974e1980cc468d7c80dacee9f005c40e..88e983584de4a89c7ee23e269ee510d8090db8d5 100644 |
--- a/chrome/renderer/searchbox/searchbox.cc |
+++ b/chrome/renderer/searchbox/searchbox.cc |
@@ -64,7 +64,7 @@ SearchBox::SearchBox(content::RenderView* render_view) |
selection_start_(0), |
selection_end_(0), |
start_margin_(0), |
- is_key_capture_enabled_(false), |
+ omnibox_focus_state_(OMNIBOX_FOCUS_NONE), |
display_instant_results_(false), |
omnibox_font_size_(0), |
autocomplete_results_cache_(kMaxInstantAutocompleteResultItemCacheSize), |
@@ -157,6 +157,14 @@ int SearchBox::GetStartMargin() const { |
return static_cast<int>(start_margin_ / GetZoom()); |
} |
+bool SearchBox::is_focused() const { |
+ return omnibox_focus_state_ == OMNIBOX_FOCUS_VISIBLE; |
+} |
+ |
+bool SearchBox::is_key_capture_enabled() const { |
+ return omnibox_focus_state_ == OMNIBOX_FOCUS_INVISIBLE; |
+} |
+ |
gfx::Rect SearchBox::GetPopupBounds() const { |
double zoom = GetZoom(); |
return gfx::Rect(static_cast<int>(popup_bounds_.x() / zoom), |
@@ -353,13 +361,24 @@ void SearchBox::OnCancelSelection(const string16& query, |
} |
} |
-void SearchBox::OnKeyCaptureChange(bool is_key_capture_enabled) { |
- if (is_key_capture_enabled != is_key_capture_enabled_ && |
- render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { |
- is_key_capture_enabled_ = is_key_capture_enabled; |
- DVLOG(1) << render_view() << " OnKeyCaptureChange"; |
- extensions_v8::SearchBoxExtension::DispatchKeyCaptureChange( |
- render_view()->GetWebView()->mainFrame()); |
+void SearchBox::OnKeyCaptureChange(OmniboxFocusState new_focus_state, |
+ OmniboxFocusChangeReason reason) { |
+ if (new_focus_state != omnibox_focus_state_) { |
samarth
2013/05/13 20:56:53
Sorry, this is all a little confusing so let me gi
Donn Denman
2013/05/13 23:44:50
Thanks for explaining this. Done.
|
+ OmniboxFocusState previous_focus_state = omnibox_focus_state_; |
+ omnibox_focus_state_ = new_focus_state; |
+ if (render_view()->GetWebView() && |
+ render_view()->GetWebView()->mainFrame()) { |
+ DVLOG(1) << render_view() << " OnKeyCaptureChange"; |
+ extensions_v8::SearchBoxExtension::DispatchKeyCaptureChange( |
+ render_view()->GetWebView()->mainFrame()); |
+ if (omnibox_focus_state_ == OMNIBOX_FOCUS_VISIBLE || |
+ previous_focus_state == OMNIBOX_FOCUS_VISIBLE) { |
+ // Focus moved into, or out of, the real omnibox. |
+ DVLOG(1) << render_view() << " OnFocusChange"; |
+ extensions_v8::SearchBoxExtension::DispatchFocusChange( |
+ render_view()->GetWebView()->mainFrame()); |
+ } |
+ } |
} |
} |
@@ -401,7 +420,7 @@ void SearchBox::Reset() { |
selection_end_ = 0; |
popup_bounds_ = gfx::Rect(); |
start_margin_ = 0; |
- is_key_capture_enabled_ = false; |
+ omnibox_focus_state_ = OMNIBOX_FOCUS_NONE; |
theme_info_ = ThemeBackgroundInfo(); |
// Don't reset display_instant_results_ to prevent clearing it on committed |
// results pages in extended mode. Otherwise resetting it is a no-op because |