Index: chrome/browser/ui/views/first_run_bubble.cc |
diff --git a/chrome/browser/ui/views/first_run_bubble.cc b/chrome/browser/ui/views/first_run_bubble.cc |
index c086fdeae46636e7fd654c95f7e2bb8681768079..96d89ee3dcfd05cbad541dd2c9a775be00452822 100644 |
--- a/chrome/browser/ui/views/first_run_bubble.cc |
+++ b/chrome/browser/ui/views/first_run_bubble.cc |
@@ -32,7 +32,7 @@ FirstRunBubble* FirstRunBubble::ShowBubble(Browser* browser, |
first_run::LogFirstRunMetric(first_run::FIRST_RUN_BUBBLE_SHOWN); |
FirstRunBubble* delegate = new FirstRunBubble(browser, anchor_view); |
- views::BubbleDelegateView::CreateBubble(delegate)->Show(); |
+ views::BubbleDelegateView::CreateBubble(delegate)->ShowInactive(); |
return delegate; |
} |
@@ -80,7 +80,8 @@ void FirstRunBubble::Init() { |
FirstRunBubble::FirstRunBubble(Browser* browser, views::View* anchor_view) |
: views::BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_LEFT), |
- browser_(browser) { |
+ browser_(browser), |
+ bubble_closer_(this, anchor_view) { |
// Compensate for built-in vertical padding in the anchor view's image. |
set_anchor_view_insets( |
gfx::Insets(kAnchorVerticalInset, 0, kAnchorVerticalInset, 0)); |
@@ -96,3 +97,36 @@ void FirstRunBubble::LinkClicked(views::Link* source, int event_flags) { |
if (browser_) |
chrome::ShowSearchEngineSettings(browser_); |
} |
+ |
+FirstRunBubble::FirstRunBubbleCloser::FirstRunBubbleCloser( |
+ FirstRunBubble* bubble, |
+ views::View* target_view) |
sky
2015/11/11 18:45:52
It's ok to take target_view, but you shouldn't cac
ananta
2015/11/12 20:19:16
Done.
|
+ : bubble_(bubble), |
+ target_view_(target_view) { |
+ AddKeyboardEventObserver(); |
+} |
+ |
+FirstRunBubble::FirstRunBubbleCloser::~FirstRunBubbleCloser() { |
+ if (target_view_) |
+ RemoveKeyboardEventObserver(); |
+} |
+ |
+void FirstRunBubble::FirstRunBubbleCloser::OnKeyEvent(ui::KeyEvent* event) { |
+ if (!target_view_) |
+ return; |
+ |
+ RemoveKeyboardEventObserver(); |
+ DCHECK(bubble_); |
+ bubble_->GetWidget()->Close(); |
+ bubble_ = nullptr; |
+} |
+ |
+void FirstRunBubble::FirstRunBubbleCloser::AddKeyboardEventObserver() { |
+ target_view_->GetWidget()->GetRootView()->AddPreTargetHandler(this); |
+} |
+ |
+void FirstRunBubble::FirstRunBubbleCloser::RemoveKeyboardEventObserver() { |
+ DCHECK(target_view_); |
+ target_view_->GetWidget()->GetRootView()->RemovePreTargetHandler(this); |
+ target_view_ = nullptr; |
+} |