Chromium Code Reviews| 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..9e2fe8b9f4565ef2b5c779fd034dd00e1495f55e 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,31 @@ void FirstRunBubble::LinkClicked(views::Link* source, int event_flags) { |
| if (browser_) |
| chrome::ShowSearchEngineSettings(browser_); |
| } |
| + |
| +FirstRunBubble::FirstRunBubbleCloser::FirstRunBubbleCloser( |
| + FirstRunBubble* bubble, |
| + views::View* target_view) |
| + : bubble_(bubble), |
| + target_view_(target_view) { |
| + AddKeyboardEventObserver(); |
| +} |
|
sky
2015/11/10 22:45:26
What about if FirstBubbleCloser is destroyed becau
ananta
2015/11/10 23:00:12
Done.
|
| + |
| +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; |
| +} |