diff options
-rw-r--r-- | chrome/browser/browser.cc | 9 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_view.cc | 11 |
2 files changed, 7 insertions, 13 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index dc86bcb..6d50e66 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -2601,15 +2601,8 @@ void Browser::BuildPopupWindowHelper(TabContents* source, browser->set_maximized_state(MAXIMIZED_STATE_UNMAXIMIZED); browser->CreateBrowserWindow(); - // We need to Show before AddNewContents, otherwise AddNewContents will focus - // it (via BrowserView::TabSelectedAt calling RestoreFocus), triggering any - // onblur="" handlers. + browser->tabstrip_model()->AppendTabContents(new_contents, true); browser->window()->Show(); - - // TODO(beng): See if this can be made to use - // TabStripModel::AppendTabContents. - browser->AddNewContents(source, new_contents, NEW_FOREGROUND_TAB, - gfx::Rect(), true); } GURL Browser::GetHomePage() const { diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc index aebb183..6f1ce19 100644 --- a/chrome/browser/views/frame/browser_view.cc +++ b/chrome/browser/views/frame/browser_view.cc @@ -901,9 +901,8 @@ void BrowserView::TabSelectedAt(TabContents* old_contents, // We do not store the focus when closing the tab to work-around bug 4633. // Some reports seem to show that the focus manager and/or focused view can // be garbage at that point, it is not clear why. - if (old_contents && !old_contents->is_being_destroyed() && - old_contents->AsWebContents()) - old_contents->AsWebContents()->view()->StoreFocus(); + if (old_contents && !old_contents->is_being_destroyed()) + old_contents->view()->StoreFocus(); // Update various elements that are interested in knowing the current // TabContents. @@ -916,8 +915,10 @@ void BrowserView::TabSelectedAt(TabContents* old_contents, new_contents->DidBecomeSelected(); if (BrowserList::GetLastActive() == browser_ && !browser_->tabstrip_model()->closing_all() && - new_contents->AsWebContents()) { - new_contents->AsWebContents()->view()->RestoreFocus(); + GetWidget()->GetWindow()->IsVisible()) { + // We only restore focus if our window is visible, to avoid invoking blur + // handlers when we are eventually shown. + new_contents->view()->RestoreFocus(); } // Update all the UI bits. |