| Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
|
| diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
|
| index 76b5f13e359db807d8f61ff14723a002205353e9..9de260a325590655f1b9467623c86c5a90cd2888 100644
|
| --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
|
| +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc
|
| @@ -298,17 +298,33 @@ ash::ShelfID ChromeLauncherControllerImpl::CreateAppLauncherItem(
|
| const std::string& app_id,
|
| ash::ShelfItemStatus status) {
|
| return InsertAppLauncherItem(controller, app_id, status, model_->item_count(),
|
| - controller->GetShelfItemType());
|
| + ash::TYPE_APP);
|
| +}
|
| +
|
| +const ash::ShelfItem& ChromeLauncherControllerImpl::GetItem(
|
| + ash::ShelfID id) const {
|
| + const int index = model_->ItemIndexByID(id);
|
| + DCHECK_GE(index, 0);
|
| + return model_->items()[index];
|
| +}
|
| +
|
| +void ChromeLauncherControllerImpl::SetItemType(ash::ShelfID id,
|
| + ash::ShelfItemType type) {
|
| + const int index = model_->ItemIndexByID(id);
|
| + DCHECK_GE(index, 0);
|
| + ash::ShelfItem item = model_->items()[index];
|
| + if (item.type != type) {
|
| + item.type = type;
|
| + model_->Set(index, item);
|
| + }
|
| }
|
|
|
| void ChromeLauncherControllerImpl::SetItemStatus(ash::ShelfID id,
|
| ash::ShelfItemStatus status) {
|
| - int index = model_->ItemIndexByID(id);
|
| - ash::ShelfItemStatus old_status = model_->items()[index].status;
|
| - // Since ordinary browser windows are not registered, we might get a negative
|
| - // index here.
|
| - if (index >= 0 && old_status != status) {
|
| - ash::ShelfItem item = model_->items()[index];
|
| + const int index = model_->ItemIndexByID(id);
|
| + DCHECK_GE(index, 0);
|
| + ash::ShelfItem item = model_->items()[index];
|
| + if (item.status != status) {
|
| item.status = status;
|
| model_->Set(index, item);
|
| }
|
| @@ -378,12 +394,10 @@ void ChromeLauncherControllerImpl::UnpinAndUpdatePrefs(ash::ShelfID id,
|
| GetLaunchIDForShelfID(id)));
|
| }
|
|
|
| - if (controller->type() == LauncherItemController::TYPE_APP ||
|
| - controller->locked()) {
|
| + if (GetItem(id).status != ash::STATUS_CLOSED || controller->locked())
|
| UnpinRunningAppInternal(model_->ItemIndexByID(id));
|
| - } else {
|
| + else
|
| LauncherItemClosed(id);
|
| - }
|
| }
|
|
|
| bool ChromeLauncherControllerImpl::IsPinned(ash::ShelfID id) {
|
| @@ -686,27 +700,25 @@ std::vector<content::WebContents*>
|
| ChromeLauncherControllerImpl::GetV1ApplicationsFromAppId(
|
| const std::string& app_id) {
|
| ash::ShelfID id = GetShelfIDForAppID(app_id);
|
| -
|
| - // If there is no such an item pinned to the launcher, no menu gets created.
|
| - if (id) {
|
| + // If there is no such item pinned to the launcher, no menu gets created.
|
| + if (id != ash::kInvalidShelfID &&
|
| + GetItem(id).type == ash::TYPE_APP_SHORTCUT) {
|
| LauncherItemController* controller = GetLauncherItemController(id);
|
| - DCHECK(controller);
|
| - if (controller->type() == LauncherItemController::TYPE_SHORTCUT)
|
| - return GetV1ApplicationsFromController(controller);
|
| + AppShortcutLauncherItemController* app_controller =
|
| + static_cast<AppShortcutLauncherItemController*>(controller);
|
| + return app_controller->GetRunningApplications();
|
| }
|
| return std::vector<content::WebContents*>();
|
| }
|
|
|
| void ChromeLauncherControllerImpl::ActivateShellApp(const std::string& app_id,
|
| - int index) {
|
| + int window_index) {
|
| ash::ShelfID id = GetShelfIDForAppID(app_id);
|
| - if (id) {
|
| + if (id != ash::kInvalidShelfID && GetItem(id).type == ash::TYPE_APP) {
|
| LauncherItemController* controller = GetLauncherItemController(id);
|
| - if (controller && controller->type() == LauncherItemController::TYPE_APP) {
|
| - AppWindowLauncherItemController* app_window_controller =
|
| - static_cast<AppWindowLauncherItemController*>(controller);
|
| - app_window_controller->ActivateIndexedApp(index);
|
| - }
|
| + AppWindowLauncherItemController* app_window_controller =
|
| + static_cast<AppWindowLauncherItemController*>(controller);
|
| + app_window_controller->ActivateIndexedApp(window_index);
|
| }
|
| }
|
|
|
| @@ -1262,8 +1274,7 @@ void ChromeLauncherControllerImpl::UpdateAppLaunchersFromPref() {
|
| DCHECK(controller);
|
| DCHECK_NE(controller->app_id(), extension_misc::kChromeAppId);
|
|
|
| - if (controller->locked() ||
|
| - controller->type() == LauncherItemController::TYPE_APP) {
|
| + if (item.status != ash::STATUS_CLOSED || controller->locked()) {
|
| UnpinRunningAppInternal(index);
|
| // Note, item can be moved to the right due weighting in shelf model.
|
| DCHECK_GE(model_->ItemIndexByID(item.id), index);
|
| @@ -1326,7 +1337,7 @@ ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem(
|
| CHECK(!HasShelfIDToAppIDMapping(id));
|
| CHECK(controller);
|
| // Ash's ShelfWindowWatcher handles app panel windows separately.
|
| - DCHECK_NE(ash::TYPE_APP_PANEL, controller->GetShelfItemType());
|
| + DCHECK_NE(ash::TYPE_APP_PANEL, shelf_item_type);
|
| id_to_item_controller_map_[id] = controller;
|
| controller->set_shelf_id(id);
|
|
|
| @@ -1352,15 +1363,6 @@ ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem(
|
| return id;
|
| }
|
|
|
| -std::vector<content::WebContents*>
|
| -ChromeLauncherControllerImpl::GetV1ApplicationsFromController(
|
| - LauncherItemController* controller) {
|
| - DCHECK(controller->type() == LauncherItemController::TYPE_SHORTCUT);
|
| - AppShortcutLauncherItemController* app_controller =
|
| - static_cast<AppShortcutLauncherItemController*>(controller);
|
| - return app_controller->GetRunningApplications();
|
| -}
|
| -
|
| void ChromeLauncherControllerImpl::CreateBrowserShortcutLauncherItem() {
|
| ash::ShelfItem browser_shortcut;
|
| browser_shortcut.type = ash::TYPE_BROWSER_SHORTCUT;
|
|
|