diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-03 17:46:37 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-03 17:46:37 +0000 |
commit | b13dee3299a400d604038b6a49a161a1048a2373 (patch) | |
tree | bdc5b2f562f5fa716161fb3e308cd07cbd40f374 /chrome/browser/aeropeek_manager.cc | |
parent | 74392c5335d534902360f9817382dfd73302af7f (diff) | |
download | chromium_src-b13dee3299a400d604038b6a49a161a1048a2373.zip chromium_src-b13dee3299a400d604038b6a49a161a1048a2373.tar.gz chromium_src-b13dee3299a400d604038b6a49a161a1048a2373.tar.bz2 |
Makes aero peek and instant work well together. Aero peek needed to
override TabReplacedAt to correctly update internal state. I also
removed the implementation of TabClosingAt as TabDetachedAt covers it.
BUG=74370
TEST=see bug
Review URL: http://codereview.chromium.org/6602105
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76762 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/aeropeek_manager.cc')
-rw-r--r-- | chrome/browser/aeropeek_manager.cc | 81 |
1 files changed, 42 insertions, 39 deletions
diff --git a/chrome/browser/aeropeek_manager.cc b/chrome/browser/aeropeek_manager.cc index 4d1159d..fd5312a 100644 --- a/chrome/browser/aeropeek_manager.cc +++ b/chrome/browser/aeropeek_manager.cc @@ -1034,6 +1034,19 @@ void AeroPeekManager::DeleteAeroPeekWindow(int tab_id) { } } } + +void AeroPeekManager::DeleteAeroPeekWindowForTab(TabContentsWrapper* tab) { + // Delete the AeroPeekWindow object associated with this tab and all its + // resources. (AeroPeekWindow::Destory() also removes this tab from the tab + // list of Windows.) + AeroPeekWindow* window = GetAeroPeekWindow(GetTabID(tab->tab_contents())); + if (!window) + return; + + window->Destroy(); + DeleteAeroPeekWindow(GetTabID(tab->tab_contents())); +} + AeroPeekWindow* AeroPeekManager::GetAeroPeekWindow(int tab_id) const { size_t size = tab_list_.size(); for (std::list<AeroPeekWindow*>::const_iterator i = tab_list_.begin(); @@ -1045,6 +1058,21 @@ AeroPeekWindow* AeroPeekManager::GetAeroPeekWindow(int tab_id) const { return NULL; } +void AeroPeekManager::CreateAeroPeekWindowIfNecessary(TabContentsWrapper* tab, + bool foreground) { + if (GetAeroPeekWindow(GetTabID(tab->tab_contents()))) + return; + + AeroPeekWindow* window = + new AeroPeekWindow(application_window_, + this, + GetTabID(tab->tab_contents()), + foreground, + tab->tab_contents()->GetTitle(), + tab->tab_contents()->GetFavIcon()); + tab_list_.push_back(window); +} + TabContents* AeroPeekManager::GetTabContents(int tab_id) const { for (TabContentsIterator iterator; !iterator.done(); ++iterator) { TabContents* target_contents = *iterator; @@ -1069,54 +1097,17 @@ void AeroPeekManager::TabInsertedAt(TabContentsWrapper* contents, if (!contents) return; - // If there are not any AeroPeekWindow objects associated with the given - // tab, Create a new AeroPeekWindow object and add it to the list. - if (GetAeroPeekWindow(GetTabID(contents->tab_contents()))) - return; - - AeroPeekWindow* window = - new AeroPeekWindow(application_window_, - this, - GetTabID(contents->tab_contents()), - foreground, - contents->tab_contents()->GetTitle(), - contents->tab_contents()->GetFavIcon()); - if (!window) - return; - - tab_list_.push_back(window); -} - -void AeroPeekManager::TabClosingAt(TabStripModel* tab_strip_model, - TabContentsWrapper* contents, - int index) { - if (!contents) - return; - - // |tab_strip_model| is NULL when this is being called from TabDetachedAt - // below. - // Delete the AeroPeekWindow object associated with this tab and all its - // resources. (AeroPeekWindow::Destory() also removes this tab from the tab - // list of Windows.) - AeroPeekWindow* window = - GetAeroPeekWindow(GetTabID(contents->tab_contents())); - if (!window) - return; - - window->Destroy(); - DeleteAeroPeekWindow(GetTabID(contents->tab_contents())); + CreateAeroPeekWindowIfNecessary(contents, foreground); } void AeroPeekManager::TabDetachedAt(TabContentsWrapper* contents, int index) { if (!contents) return; - // Same as TabClosingAt(), we remove this tab from the tab list and delete - // its AeroPeekWindow. // Chrome will call TabInsertedAt() when this tab is inserted to another // TabStrip. We will re-create an AeroPeekWindow object for this tab and // re-add it to the tab list there. - TabClosingAt(NULL, contents, index); + DeleteAeroPeekWindowForTab(contents); } void AeroPeekManager::TabSelectedAt(TabContentsWrapper* old_contents, @@ -1143,6 +1134,18 @@ void AeroPeekManager::TabSelectedAt(TabContentsWrapper* old_contents, } } +void AeroPeekManager::TabReplacedAt(TabStripModel* tab_strip_model, + TabContentsWrapper* old_contents, + TabContentsWrapper* new_contents, + int index) { + DeleteAeroPeekWindowForTab(old_contents); + + CreateAeroPeekWindowIfNecessary(new_contents, + (index == tab_strip_model->selected_index())); + // We don't need to update the selection as if |new_contents| is selected the + // TabStripModel will send TabSelectedAt. +} + void AeroPeekManager::TabMoved(TabContentsWrapper* contents, int from_index, int to_index, |