| 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..9801719aee4412b50a5340952cedcc74cdfa3f38 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* anchor_view)
|
| + : bubble_(bubble),
|
| + anchor_widget_(anchor_view->GetWidget()) {
|
| + AddKeyboardEventObserver();
|
| +}
|
| +
|
| +FirstRunBubble::FirstRunBubbleCloser::~FirstRunBubbleCloser() {
|
| + if (anchor_widget_)
|
| + RemoveKeyboardEventObserver();
|
| +}
|
| +
|
| +void FirstRunBubble::FirstRunBubbleCloser::OnKeyEvent(ui::KeyEvent* event) {
|
| + if (!anchor_widget_)
|
| + return;
|
| +
|
| + RemoveKeyboardEventObserver();
|
| + DCHECK(bubble_);
|
| + bubble_->GetWidget()->Close();
|
| + bubble_ = nullptr;
|
| +}
|
| +
|
| +void FirstRunBubble::FirstRunBubbleCloser::AddKeyboardEventObserver() {
|
| + anchor_widget_->GetRootView()->AddPreTargetHandler(this);
|
| +}
|
| +
|
| +void FirstRunBubble::FirstRunBubbleCloser::RemoveKeyboardEventObserver() {
|
| + DCHECK(anchor_widget_);
|
| + anchor_widget_->GetRootView()->RemovePreTargetHandler(this);
|
| + anchor_widget_ = nullptr;
|
| +}
|
|
|