Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(412)

Unified Diff: chrome/browser/ui/views/ash/launcher/launcher_updater.cc

Issue 9689047: Added notion of currently active app / browser (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review issues Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/ash/launcher/launcher_updater.cc
diff --git a/chrome/browser/ui/views/ash/launcher/launcher_updater.cc b/chrome/browser/ui/views/ash/launcher/launcher_updater.cc
index 8f3c604710fae8c582a3acac0183eaff55d6780d..46c9777b8281a6781220c6d19e1eca702ada5cd6 100644
--- a/chrome/browser/ui/views/ash/launcher/launcher_updater.cc
+++ b/chrome/browser/ui/views/ash/launcher/launcher_updater.cc
@@ -56,8 +56,11 @@ void LauncherUpdater::Init() {
ChromeLauncherDelegate::AppType app_type =
type_ == TYPE_PANEL ? ChromeLauncherDelegate::APP_TYPE_PANEL
: ChromeLauncherDelegate::APP_TYPE_WINDOW;
+ ash::LauncherItemStatus app_status =
+ ash::wm::IsActiveWindow(window_) ?
+ ash::STATUS_ACTIVE : ash::STATUS_RUNNING;
item_id_ = launcher_delegate_->CreateAppLauncherItem(
- this, app_id_, app_type, ash::STATUS_RUNNING);
+ this, app_id_, app_type, app_status);
} else {
// Determine if we have any tabs that should get launcher items.
std::vector<TabContentsWrapper*> app_tabs;
@@ -74,7 +77,9 @@ void LauncherUpdater::Init() {
for (size_t i = 0; i < app_tabs.size(); ++i)
AddAppItem(app_tabs[i]);
}
- UpdateLauncher(tab_model_->GetActiveTabContents());
+ // In testing scenarios we can get tab strips with no active contents.
+ if (tab_model_->GetActiveTabContents())
+ UpdateLauncher(tab_model_->GetActiveTabContents());
}
// static
@@ -105,10 +110,25 @@ TabContentsWrapper* LauncherUpdater::GetTab(ash::LauncherID id) {
return NULL;
}
+void LauncherUpdater::BrowserActivationStateChanged() {
+ launcher_delegate_->SetItemStatus(
+ GetLauncherID(tab_model_->GetActiveTabContents()),
+ ash::wm::IsActiveWindow(window_) ?
+ ash::STATUS_ACTIVE : ash::STATUS_RUNNING);
+}
+
void LauncherUpdater::ActiveTabChanged(TabContentsWrapper* old_contents,
TabContentsWrapper* new_contents,
int index,
bool user_gesture) {
+ if (ash::wm::IsActiveWindow(window_)) {
+ ash::LauncherID old_id = GetLauncherID(old_contents);
+ ash::LauncherID new_id = GetLauncherID(new_contents);
+
+ // The new_contents state will be handled in UpdateLauncher().
+ if (old_id != new_id && old_id >= 0)
+ launcher_delegate_->SetItemStatus(old_id, ash::STATUS_RUNNING);
sky 2012/03/14 04:05:44 nit: spacing
DaveMoore 2012/03/14 19:54:58 Done.
+ }
// Update immediately on a tab change.
UpdateLauncher(new_contents);
}
@@ -186,6 +206,8 @@ void LauncherUpdater::TabDetachedAt(TabContentsWrapper* contents, int index) {
}
void LauncherUpdater::UpdateLauncher(TabContentsWrapper* tab) {
+ launcher_delegate_->SetItemStatus(GetLauncherID(tab), GetStatusForTab(tab));
+
if (type_ == TYPE_APP)
return; // TYPE_APP is entirely maintained by ChromeLauncherDelegate.
@@ -297,7 +319,7 @@ void LauncherUpdater::UpdateAppTabState(TabContentsWrapper* tab,
launcher_delegate_->GetAppID(tab),
ChromeLauncherDelegate::APP_TYPE_TAB);
RegisterAppItem(item_id_, tab);
- launcher_delegate_->SetItemStatus(item_id_, ash::STATUS_RUNNING);
+ launcher_delegate_->SetItemStatus(item_id_, GetStatusForTab(tab));
}
item_id_ = -1;
} else {
@@ -307,11 +329,12 @@ void LauncherUpdater::UpdateAppTabState(TabContentsWrapper* tab,
}
void LauncherUpdater::AddAppItem(TabContentsWrapper* tab) {
+ ash::LauncherItemStatus status = GetStatusForTab(tab);
ash::LauncherID id = launcher_delegate_->CreateAppLauncherItem(
this,
launcher_delegate_->GetAppID(tab),
ChromeLauncherDelegate::APP_TYPE_TAB,
- ash::STATUS_RUNNING);
+ status);
RegisterAppItem(id, tab);
}
@@ -341,6 +364,22 @@ bool LauncherUpdater::ContainsID(ash::LauncherID id, TabContentsWrapper** tab) {
return false;
}
+ash::LauncherID LauncherUpdater::GetLauncherID(TabContentsWrapper* tab) {
+ if (type_ == TYPE_APP || type_ == TYPE_PANEL)
+ return item_id_;
+ AppTabMap::iterator i = app_map_.find(tab);
+ if (i == app_map_.end())
+ return item_id_;
+ return i->second.id;
+}
+
+ash::LauncherItemStatus LauncherUpdater::GetStatusForTab(
+ TabContentsWrapper* tab) {
+ return ash::wm::IsActiveWindow(window_) &&
+ tab == tab_model_->GetActiveTabContents() ?
+ ash::STATUS_ACTIVE : ash::STATUS_RUNNING;
+}
+
ash::LauncherModel* LauncherUpdater::launcher_model() {
return launcher_delegate_->model();
}

Powered by Google App Engine
This is Rietveld 408576698