summaryrefslogtreecommitdiffstats
path: root/chrome/browser/aeropeek_manager.cc
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-03 17:46:37 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-03 17:46:37 +0000
commitb13dee3299a400d604038b6a49a161a1048a2373 (patch)
treebdc5b2f562f5fa716161fb3e308cd07cbd40f374 /chrome/browser/aeropeek_manager.cc
parent74392c5335d534902360f9817382dfd73302af7f (diff)
downloadchromium_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.cc81
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,