OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 SetVirtualKeyboardBehaviorFromPrefs(); | 290 SetVirtualKeyboardBehaviorFromPrefs(); |
291 | 291 |
292 prefs_observer_ = | 292 prefs_observer_ = |
293 ash::launcher::ChromeLauncherPrefsObserver::CreateIfNecessary(profile()); | 293 ash::launcher::ChromeLauncherPrefsObserver::CreateIfNecessary(profile()); |
294 } | 294 } |
295 | 295 |
296 ash::ShelfID ChromeLauncherControllerImpl::CreateAppLauncherItem( | 296 ash::ShelfID ChromeLauncherControllerImpl::CreateAppLauncherItem( |
297 LauncherItemController* controller, | 297 LauncherItemController* controller, |
298 const std::string& app_id, | 298 const std::string& app_id, |
299 ash::ShelfItemStatus status) { | 299 ash::ShelfItemStatus status) { |
300 CHECK(controller); | 300 return InsertAppLauncherItem(controller, app_id, status, model_->item_count(), |
301 int index = 0; | |
302 // Panels are inserted on the left so as not to push all existing panels over. | |
303 if (controller->GetShelfItemType() != ash::TYPE_APP_PANEL) | |
304 index = model_->item_count(); | |
305 return InsertAppLauncherItem(controller, app_id, status, index, | |
306 controller->GetShelfItemType()); | 301 controller->GetShelfItemType()); |
307 } | 302 } |
308 | 303 |
309 void ChromeLauncherControllerImpl::SetItemStatus(ash::ShelfID id, | 304 void ChromeLauncherControllerImpl::SetItemStatus(ash::ShelfID id, |
310 ash::ShelfItemStatus status) { | 305 ash::ShelfItemStatus status) { |
311 int index = model_->ItemIndexByID(id); | 306 int index = model_->ItemIndexByID(id); |
312 ash::ShelfItemStatus old_status = model_->items()[index].status; | 307 ash::ShelfItemStatus old_status = model_->items()[index].status; |
313 // Since ordinary browser windows are not registered, we might get a negative | 308 // Since ordinary browser windows are not registered, we might get a negative |
314 // index here. | 309 // index here. |
315 if (index >= 0 && old_status != status) { | 310 if (index >= 0 && old_status != status) { |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
424 | 419 |
425 void ChromeLauncherControllerImpl::LockV1AppWithID(const std::string& app_id) { | 420 void ChromeLauncherControllerImpl::LockV1AppWithID(const std::string& app_id) { |
426 ash::ShelfID id = GetShelfIDForAppID(app_id); | 421 ash::ShelfID id = GetShelfIDForAppID(app_id); |
427 if (!IsPinned(id) && !IsWindowedAppInLauncher(app_id)) { | 422 if (!IsPinned(id) && !IsWindowedAppInLauncher(app_id)) { |
428 CreateAppShortcutLauncherItemWithType(ash::launcher::AppLauncherId(app_id), | 423 CreateAppShortcutLauncherItemWithType(ash::launcher::AppLauncherId(app_id), |
429 model_->item_count(), | 424 model_->item_count(), |
430 ash::TYPE_WINDOWED_APP); | 425 ash::TYPE_WINDOWED_APP); |
431 id = GetShelfIDForAppID(app_id); | 426 id = GetShelfIDForAppID(app_id); |
432 } | 427 } |
433 CHECK(id); | 428 CHECK(id); |
434 id_to_item_controller_map_[id]->lock(); | 429 GetLauncherItemController(id)->lock(); |
435 } | 430 } |
436 | 431 |
437 void ChromeLauncherControllerImpl::UnlockV1AppWithID( | 432 void ChromeLauncherControllerImpl::UnlockV1AppWithID( |
438 const std::string& app_id) { | 433 const std::string& app_id) { |
439 ash::ShelfID id = GetShelfIDForAppID(app_id); | 434 ash::ShelfID id = GetShelfIDForAppID(app_id); |
440 CHECK(id); | 435 CHECK(id); |
441 CHECK(IsPinned(id) || IsWindowedAppInLauncher(app_id)); | 436 CHECK(IsPinned(id) || IsWindowedAppInLauncher(app_id)); |
442 LauncherItemController* controller = id_to_item_controller_map_[id]; | 437 LauncherItemController* controller = GetLauncherItemController(id); |
443 controller->unlock(); | 438 controller->unlock(); |
444 if (!controller->locked() && !IsPinned(id)) | 439 if (!controller->locked() && !IsPinned(id)) |
445 CloseLauncherItem(id); | 440 CloseLauncherItem(id); |
446 } | 441 } |
447 | 442 |
448 void ChromeLauncherControllerImpl::Launch(ash::ShelfID id, int event_flags) { | 443 void ChromeLauncherControllerImpl::Launch(ash::ShelfID id, int event_flags) { |
449 LauncherItemController* controller = GetLauncherItemController(id); | 444 LauncherItemController* controller = GetLauncherItemController(id); |
450 if (!controller) | 445 if (!controller) |
451 return; // In case invoked from menu and item closed while menu up. | 446 return; // In case invoked from menu and item closed while menu up. |
452 controller->Launch(ash::LAUNCH_FROM_UNKNOWN, event_flags); | 447 controller->Launch(ash::LAUNCH_FROM_UNKNOWN, event_flags); |
453 } | 448 } |
454 | 449 |
455 void ChromeLauncherControllerImpl::Close(ash::ShelfID id) { | 450 void ChromeLauncherControllerImpl::Close(ash::ShelfID id) { |
456 LauncherItemController* controller = GetLauncherItemController(id); | 451 ash::ShelfItemDelegate* delegate = model_->GetShelfItemDelegate(id); |
457 if (!controller) | 452 if (!delegate) |
458 return; // May happen if menu closed. | 453 return; // May happen if menu closed. |
459 controller->Close(); | 454 delegate->Close(); |
460 } | 455 } |
461 | 456 |
462 bool ChromeLauncherControllerImpl::IsOpen(ash::ShelfID id) { | 457 bool ChromeLauncherControllerImpl::IsOpen(ash::ShelfID id) { |
463 const int index = model_->ItemIndexByID(id); | 458 const int index = model_->ItemIndexByID(id); |
464 return index >= 0 && model_->items()[index].status != ash::STATUS_CLOSED; | 459 return index >= 0 && model_->items()[index].status != ash::STATUS_CLOSED; |
465 } | 460 } |
466 | 461 |
467 bool ChromeLauncherControllerImpl::IsPlatformApp(ash::ShelfID id) { | 462 bool ChromeLauncherControllerImpl::IsPlatformApp(ash::ShelfID id) { |
468 if (!HasShelfIDToAppIDMapping(id)) | 463 if (!HasShelfIDToAppIDMapping(id)) |
469 return false; | 464 return false; |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
796 return static_cast<BrowserShortcutLauncherItemController*>(i->second); | 791 return static_cast<BrowserShortcutLauncherItemController*>(i->second); |
797 } | 792 } |
798 NOTREACHED() | 793 NOTREACHED() |
799 << "There should be always be a BrowserShortcutLauncherItemController."; | 794 << "There should be always be a BrowserShortcutLauncherItemController."; |
800 return nullptr; | 795 return nullptr; |
801 } | 796 } |
802 | 797 |
803 LauncherItemController* ChromeLauncherControllerImpl::GetLauncherItemController( | 798 LauncherItemController* ChromeLauncherControllerImpl::GetLauncherItemController( |
804 const ash::ShelfID id) { | 799 const ash::ShelfID id) { |
805 if (!HasShelfIDToAppIDMapping(id)) | 800 if (!HasShelfIDToAppIDMapping(id)) |
806 return NULL; | 801 return nullptr; |
807 return id_to_item_controller_map_[id]; | 802 return id_to_item_controller_map_[id]; |
808 } | 803 } |
809 | 804 |
810 bool ChromeLauncherControllerImpl::ShelfBoundsChangesProbablyWithUser( | 805 bool ChromeLauncherControllerImpl::ShelfBoundsChangesProbablyWithUser( |
811 ash::WmShelf* shelf, | 806 ash::WmShelf* shelf, |
812 const AccountId& account_id) const { | 807 const AccountId& account_id) const { |
813 Profile* other_profile = multi_user_util::GetProfileFromAccountId(account_id); | 808 Profile* other_profile = multi_user_util::GetProfileFromAccountId(account_id); |
814 if (!other_profile || other_profile == profile()) | 809 if (!other_profile || other_profile == profile()) |
815 return false; | 810 return false; |
816 | 811 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 if (app_service) | 894 if (app_service) |
900 app_service->AddObserverAndStart(this); | 895 app_service->AddObserverAndStart(this); |
901 } | 896 } |
902 | 897 |
903 /////////////////////////////////////////////////////////////////////////////// | 898 /////////////////////////////////////////////////////////////////////////////// |
904 // ash::ShelfDelegate: | 899 // ash::ShelfDelegate: |
905 | 900 |
906 ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForAppID( | 901 ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForAppID( |
907 const std::string& app_id) { | 902 const std::string& app_id) { |
908 // Get shelf id for app_id and empty launch_id. | 903 // Get shelf id for app_id and empty launch_id. |
909 return GetShelfIDForAppIDAndLaunchID(app_id, ""); | 904 return GetShelfIDForAppIDAndLaunchID(app_id, std::string()); |
910 } | 905 } |
911 | 906 |
912 ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForAppIDAndLaunchID( | 907 ash::ShelfID ChromeLauncherControllerImpl::GetShelfIDForAppIDAndLaunchID( |
913 const std::string& app_id, | 908 const std::string& app_id, |
914 const std::string& launch_id) { | 909 const std::string& launch_id) { |
915 const std::string shelf_app_id = | 910 const std::string shelf_app_id = |
916 ArcAppWindowLauncherController::GetShelfAppIdFromArcAppId(app_id); | 911 ArcAppWindowLauncherController::GetShelfAppIdFromArcAppId(app_id); |
917 for (const auto& id_to_item_controller_pair : id_to_item_controller_map_) { | 912 for (const auto& id_to_item_controller_pair : id_to_item_controller_map_) { |
918 if (id_to_item_controller_pair.second->type() == | |
919 LauncherItemController::TYPE_APP_PANEL) | |
920 continue; // Don't include panels | |
921 if (id_to_item_controller_pair.second->app_id() == shelf_app_id && | 913 if (id_to_item_controller_pair.second->app_id() == shelf_app_id && |
922 id_to_item_controller_pair.second->launch_id() == launch_id) { | 914 id_to_item_controller_pair.second->launch_id() == launch_id) { |
923 return id_to_item_controller_pair.first; | 915 return id_to_item_controller_pair.first; |
924 } | 916 } |
925 } | 917 } |
926 return 0; | 918 return ash::kInvalidShelfID; |
927 } | 919 } |
928 | 920 |
929 bool ChromeLauncherControllerImpl::HasShelfIDToAppIDMapping( | 921 bool ChromeLauncherControllerImpl::HasShelfIDToAppIDMapping( |
930 ash::ShelfID id) const { | 922 ash::ShelfID id) const { |
931 return id_to_item_controller_map_.find(id) != | 923 return id_to_item_controller_map_.find(id) != |
932 id_to_item_controller_map_.end(); | 924 id_to_item_controller_map_.end(); |
933 } | 925 } |
934 | 926 |
935 const std::string& ChromeLauncherControllerImpl::GetAppIDForShelfID( | 927 const std::string& ChromeLauncherControllerImpl::GetAppIDForShelfID( |
936 ash::ShelfID id) { | 928 ash::ShelfID id) { |
937 LauncherItemController* controller = GetLauncherItemController(id); | 929 LauncherItemController* controller = GetLauncherItemController(id); |
938 return controller ? controller->app_id() : base::EmptyString(); | 930 if (controller) |
| 931 return controller->app_id(); |
| 932 ash::ShelfItems::const_iterator item = model_->ItemByID(id); |
| 933 return item != model_->items().end() ? item->app_id : base::EmptyString(); |
939 } | 934 } |
940 | 935 |
941 void ChromeLauncherControllerImpl::PinAppWithID(const std::string& app_id) { | 936 void ChromeLauncherControllerImpl::PinAppWithID(const std::string& app_id) { |
942 const std::string shelf_app_id = | 937 const std::string shelf_app_id = |
943 ArcAppWindowLauncherController::GetShelfAppIdFromArcAppId(app_id); | 938 ArcAppWindowLauncherController::GetShelfAppIdFromArcAppId(app_id); |
944 if (GetPinnableForAppID(shelf_app_id, profile()) == | 939 if (GetPinnableForAppID(shelf_app_id, profile()) == |
945 AppListControllerDelegate::PIN_EDITABLE) | 940 AppListControllerDelegate::PIN_EDITABLE) |
946 DoPinAppWithID(shelf_app_id); | 941 DoPinAppWithID(shelf_app_id); |
947 else | 942 else |
948 NOTREACHED(); | 943 NOTREACHED(); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1021 /////////////////////////////////////////////////////////////////////////////// | 1016 /////////////////////////////////////////////////////////////////////////////// |
1022 // ChromeLauncherControllerImpl protected: | 1017 // ChromeLauncherControllerImpl protected: |
1023 | 1018 |
1024 ash::ShelfID ChromeLauncherControllerImpl::CreateAppShortcutLauncherItem( | 1019 ash::ShelfID ChromeLauncherControllerImpl::CreateAppShortcutLauncherItem( |
1025 const ash::launcher::AppLauncherId& app_launcher_id, | 1020 const ash::launcher::AppLauncherId& app_launcher_id, |
1026 int index) { | 1021 int index) { |
1027 return CreateAppShortcutLauncherItemWithType(app_launcher_id, index, | 1022 return CreateAppShortcutLauncherItemWithType(app_launcher_id, index, |
1028 ash::TYPE_APP_SHORTCUT); | 1023 ash::TYPE_APP_SHORTCUT); |
1029 } | 1024 } |
1030 | 1025 |
1031 const std::string& ChromeLauncherControllerImpl::GetAppIdFromShelfIdForTest( | |
1032 ash::ShelfID id) { | |
1033 return id_to_item_controller_map_[id]->app_id(); | |
1034 } | |
1035 | |
1036 /////////////////////////////////////////////////////////////////////////////// | 1026 /////////////////////////////////////////////////////////////////////////////// |
1037 // ChromeLauncherControllerImpl private: | 1027 // ChromeLauncherControllerImpl private: |
1038 | 1028 |
1039 void ChromeLauncherControllerImpl::RememberUnpinnedRunningApplicationOrder() { | 1029 void ChromeLauncherControllerImpl::RememberUnpinnedRunningApplicationOrder() { |
1040 RunningAppListIds list; | 1030 RunningAppListIds list; |
1041 for (int i = 0; i < model_->item_count(); i++) { | 1031 for (int i = 0; i < model_->item_count(); i++) { |
1042 ash::ShelfItemType type = model_->items()[i].type; | 1032 ash::ShelfItemType type = model_->items()[i].type; |
1043 if (type == ash::TYPE_WINDOWED_APP || type == ash::TYPE_PLATFORM_APP) | 1033 if (type == ash::TYPE_WINDOWED_APP || type == ash::TYPE_PLATFORM_APP) |
1044 list.push_back(GetAppIDForShelfID(model_->items()[i].id)); | 1034 list.push_back(GetAppIDForShelfID(model_->items()[i].id)); |
1045 } | 1035 } |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1350 | 1340 |
1351 ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem( | 1341 ash::ShelfID ChromeLauncherControllerImpl::InsertAppLauncherItem( |
1352 LauncherItemController* controller, | 1342 LauncherItemController* controller, |
1353 const std::string& app_id, | 1343 const std::string& app_id, |
1354 ash::ShelfItemStatus status, | 1344 ash::ShelfItemStatus status, |
1355 int index, | 1345 int index, |
1356 ash::ShelfItemType shelf_item_type) { | 1346 ash::ShelfItemType shelf_item_type) { |
1357 ash::ShelfID id = model_->next_id(); | 1347 ash::ShelfID id = model_->next_id(); |
1358 CHECK(!HasShelfIDToAppIDMapping(id)); | 1348 CHECK(!HasShelfIDToAppIDMapping(id)); |
1359 CHECK(controller); | 1349 CHECK(controller); |
| 1350 // Ash's ShelfWindowWatcher handles app panel windows separately. |
| 1351 DCHECK_NE(ash::TYPE_APP_PANEL, controller->GetShelfItemType()); |
1360 id_to_item_controller_map_[id] = controller; | 1352 id_to_item_controller_map_[id] = controller; |
1361 controller->set_shelf_id(id); | 1353 controller->set_shelf_id(id); |
1362 | 1354 |
1363 ash::ShelfItem item; | 1355 ash::ShelfItem item; |
1364 item.type = shelf_item_type; | 1356 item.type = shelf_item_type; |
1365 item.image = extensions::util::GetDefaultAppIcon(); | 1357 item.image = extensions::util::GetDefaultAppIcon(); |
1366 | 1358 |
1367 ash::ShelfItemStatus new_state = GetAppState(app_id); | 1359 ash::ShelfItemStatus new_state = GetAppState(app_id); |
1368 if (new_state != ash::STATUS_CLOSED) | 1360 if (new_state != ash::STATUS_CLOSED) |
1369 status = new_state; | 1361 status = new_state; |
1370 | 1362 |
1371 item.status = status; | 1363 item.status = status; |
1372 | |
1373 model_->AddAt(index, item); | 1364 model_->AddAt(index, item); |
1374 | 1365 |
1375 AppIconLoader* app_icon_loader = GetAppIconLoaderForApp(app_id); | 1366 AppIconLoader* app_icon_loader = GetAppIconLoaderForApp(app_id); |
1376 if (app_icon_loader) { | 1367 if (app_icon_loader) { |
1377 app_icon_loader->FetchImage(app_id); | 1368 app_icon_loader->FetchImage(app_id); |
1378 app_icon_loader->UpdateImage(app_id); | 1369 app_icon_loader->UpdateImage(app_id); |
1379 } | 1370 } |
1380 | 1371 |
1381 SetShelfItemDelegate(id, controller); | 1372 SetShelfItemDelegate(id, controller); |
1382 | 1373 |
1383 return id; | 1374 return id; |
1384 } | 1375 } |
1385 | 1376 |
1386 std::vector<content::WebContents*> | 1377 std::vector<content::WebContents*> |
1387 ChromeLauncherControllerImpl::GetV1ApplicationsFromController( | 1378 ChromeLauncherControllerImpl::GetV1ApplicationsFromController( |
1388 LauncherItemController* controller) { | 1379 LauncherItemController* controller) { |
1389 DCHECK(controller->type() == LauncherItemController::TYPE_SHORTCUT); | 1380 DCHECK(controller->type() == LauncherItemController::TYPE_SHORTCUT); |
1390 AppShortcutLauncherItemController* app_controller = | 1381 AppShortcutLauncherItemController* app_controller = |
1391 static_cast<AppShortcutLauncherItemController*>(controller); | 1382 static_cast<AppShortcutLauncherItemController*>(controller); |
1392 return app_controller->GetRunningApplications(); | 1383 return app_controller->GetRunningApplications(); |
1393 } | 1384 } |
1394 | 1385 |
1395 ash::ShelfID ChromeLauncherControllerImpl::CreateBrowserShortcutLauncherItem() { | 1386 void ChromeLauncherControllerImpl::CreateBrowserShortcutLauncherItem() { |
1396 ash::ShelfItem browser_shortcut; | 1387 ash::ShelfItem browser_shortcut; |
1397 browser_shortcut.type = ash::TYPE_BROWSER_SHORTCUT; | 1388 browser_shortcut.type = ash::TYPE_BROWSER_SHORTCUT; |
1398 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 1389 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
1399 browser_shortcut.image = *rb.GetImageSkiaNamed(IDR_PRODUCT_LOGO_32); | 1390 browser_shortcut.image = *rb.GetImageSkiaNamed(IDR_PRODUCT_LOGO_32); |
1400 ash::ShelfID id = model_->next_id(); | 1391 ash::ShelfID id = model_->next_id(); |
1401 model_->AddAt(0, browser_shortcut); | 1392 model_->AddAt(0, browser_shortcut); |
1402 id_to_item_controller_map_[id] = | 1393 id_to_item_controller_map_[id] = |
1403 new BrowserShortcutLauncherItemController(this, model_); | 1394 new BrowserShortcutLauncherItemController(this, model_); |
1404 id_to_item_controller_map_[id]->set_shelf_id(id); | 1395 id_to_item_controller_map_[id]->set_shelf_id(id); |
1405 // ShelfModel owns BrowserShortcutLauncherItemController. | 1396 // ShelfModel owns BrowserShortcutLauncherItemController. |
1406 SetShelfItemDelegate(id, id_to_item_controller_map_[id]); | 1397 SetShelfItemDelegate(id, id_to_item_controller_map_[id]); |
1407 return id; | |
1408 } | 1398 } |
1409 | 1399 |
1410 bool ChromeLauncherControllerImpl::IsIncognito( | 1400 bool ChromeLauncherControllerImpl::IsIncognito( |
1411 const content::WebContents* web_contents) const { | 1401 const content::WebContents* web_contents) const { |
1412 const Profile* profile = | 1402 const Profile* profile = |
1413 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 1403 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
1414 return profile->IsOffTheRecord() && !profile->IsGuestSession() && | 1404 return profile->IsOffTheRecord() && !profile->IsGuestSession() && |
1415 !profile->IsSystemProfile(); | 1405 !profile->IsSystemProfile(); |
1416 } | 1406 } |
1417 | 1407 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1476 | 1466 |
1477 app_list::AppListSyncableService* app_service = | 1467 app_list::AppListSyncableService* app_service = |
1478 app_list::AppListSyncableServiceFactory::GetForProfile(profile()); | 1468 app_list::AppListSyncableServiceFactory::GetForProfile(profile()); |
1479 if (app_service) | 1469 if (app_service) |
1480 app_service->RemoveObserver(this); | 1470 app_service->RemoveObserver(this); |
1481 } | 1471 } |
1482 | 1472 |
1483 /////////////////////////////////////////////////////////////////////////////// | 1473 /////////////////////////////////////////////////////////////////////////////// |
1484 // ash::ShelfModelObserver: | 1474 // ash::ShelfModelObserver: |
1485 | 1475 |
1486 void ChromeLauncherControllerImpl::ShelfItemAdded(int index) { | 1476 void ChromeLauncherControllerImpl::ShelfItemAdded(int index) {} |
1487 } | |
1488 | 1477 |
1489 void ChromeLauncherControllerImpl::ShelfItemRemoved(int index, | 1478 void ChromeLauncherControllerImpl::ShelfItemRemoved(int index, |
1490 ash::ShelfID id) { | 1479 ash::ShelfID id) { |
1491 // TODO(skuhne): This fixes crbug.com/429870, but it does not answer why we | 1480 // TODO(skuhne): This fixes crbug.com/429870, but it does not answer why we |
1492 // get into this state in the first place. | 1481 // get into this state in the first place. |
1493 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); | 1482 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); |
1494 if (iter == id_to_item_controller_map_.end()) | 1483 if (iter == id_to_item_controller_map_.end()) |
1495 return; | 1484 return; |
1496 | 1485 |
1497 LOG(ERROR) << "Unexpected change of shelf item id: " << id; | 1486 LOG(ERROR) << "Unexpected removal of shelf item, id: " << id; |
1498 | |
1499 id_to_item_controller_map_.erase(iter); | 1487 id_to_item_controller_map_.erase(iter); |
1500 } | 1488 } |
1501 | 1489 |
1502 void ChromeLauncherControllerImpl::ShelfItemMoved(int start_index, | 1490 void ChromeLauncherControllerImpl::ShelfItemMoved(int start_index, |
1503 int target_index) { | 1491 int target_index) { |
1504 const ash::ShelfItem& item = model_->items()[target_index]; | 1492 const ash::ShelfItem& item = model_->items()[target_index]; |
1505 // We remember the moved item position if it is either pinnable or | 1493 // We remember the moved item position if it is either pinnable or |
1506 // it is the app list with the alternate shelf layout. | 1494 // it is the app list with the alternate shelf layout. |
1507 DCHECK_NE(ash::TYPE_APP_LIST, item.type); | 1495 DCHECK_NE(ash::TYPE_APP_LIST, item.type); |
1508 if (HasShelfIDToAppIDMapping(item.id) && IsPinned(item.id)) | 1496 if (HasShelfIDToAppIDMapping(item.id) && IsPinned(item.id)) |
1509 SyncPinPosition(item.id); | 1497 SyncPinPosition(item.id); |
1510 } | 1498 } |
1511 | 1499 |
1512 void ChromeLauncherControllerImpl::ShelfItemChanged( | 1500 void ChromeLauncherControllerImpl::ShelfItemChanged( |
1513 int index, | 1501 int index, |
1514 const ash::ShelfItem& old_item) {} | 1502 const ash::ShelfItem& old_item) {} |
1515 | 1503 |
1516 void ChromeLauncherControllerImpl::OnSetShelfItemDelegate( | 1504 void ChromeLauncherControllerImpl::OnSetShelfItemDelegate( |
1517 ash::ShelfID id, | 1505 ash::ShelfID id, |
1518 ash::ShelfItemDelegate* item_delegate) { | 1506 ash::ShelfItemDelegate* item_delegate) { |
1519 // TODO(skuhne): This fixes crbug.com/429870, but it does not answer why we | 1507 // TODO(skuhne): This fixes crbug.com/429870, but it does not answer why we |
1520 // get into this state in the first place. | 1508 // get into this state in the first place. |
1521 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); | 1509 IDToItemControllerMap::iterator iter = id_to_item_controller_map_.find(id); |
1522 if (iter == id_to_item_controller_map_.end() || item_delegate == iter->second) | 1510 if (iter == id_to_item_controller_map_.end() || item_delegate == iter->second) |
1523 return; | 1511 return; |
1524 LOG(ERROR) << "Unexpected change of shelf item id: " << id; | 1512 LOG(ERROR) << "Unexpected change of shelf item delegate, id: " << id; |
1525 id_to_item_controller_map_.erase(iter); | 1513 id_to_item_controller_map_.erase(iter); |
1526 } | 1514 } |
1527 | 1515 |
1528 /////////////////////////////////////////////////////////////////////////////// | 1516 /////////////////////////////////////////////////////////////////////////////// |
1529 // ash::WindowTreeHostManager::Observer: | 1517 // ash::WindowTreeHostManager::Observer: |
1530 | 1518 |
1531 void ChromeLauncherControllerImpl::OnDisplayConfigurationChanged() { | 1519 void ChromeLauncherControllerImpl::OnDisplayConfigurationChanged() { |
1532 // In BOTTOM_LOCKED state, ignore the call of SetShelfBehaviorsFromPrefs. | 1520 // In BOTTOM_LOCKED state, ignore the call of SetShelfBehaviorsFromPrefs. |
1533 // Because it might be called by some operations, like crbug.com/627040 | 1521 // Because it might be called by some operations, like crbug.com/627040 |
1534 // rotating screen. | 1522 // rotating screen. |
(...skipping 13 matching lines...) Expand all Loading... |
1548 model_->set_status(ash::ShelfModel::STATUS_NORMAL); | 1536 model_->set_status(ash::ShelfModel::STATUS_NORMAL); |
1549 } | 1537 } |
1550 | 1538 |
1551 /////////////////////////////////////////////////////////////////////////////// | 1539 /////////////////////////////////////////////////////////////////////////////// |
1552 // AppIconLoaderDelegate: | 1540 // AppIconLoaderDelegate: |
1553 | 1541 |
1554 void ChromeLauncherControllerImpl::OnAppImageUpdated( | 1542 void ChromeLauncherControllerImpl::OnAppImageUpdated( |
1555 const std::string& id, | 1543 const std::string& id, |
1556 const gfx::ImageSkia& image) { | 1544 const gfx::ImageSkia& image) { |
1557 // TODO: need to get this working for shortcuts. | 1545 // TODO: need to get this working for shortcuts. |
1558 for (IDToItemControllerMap::const_iterator i = | 1546 for (int index = 0; index < model_->item_count(); ++index) { |
1559 id_to_item_controller_map_.begin(); | 1547 ash::ShelfItem item = model_->items()[index]; |
1560 i != id_to_item_controller_map_.end(); ++i) { | 1548 if (GetAppIDForShelfID(item.id) != id) |
1561 LauncherItemController* controller = i->second; | |
1562 if (controller->app_id() != id) | |
1563 continue; | 1549 continue; |
1564 if (controller->image_set_by_controller()) | 1550 LauncherItemController* controller = GetLauncherItemController(item.id); |
| 1551 if (!controller || controller->image_set_by_controller()) |
1565 continue; | 1552 continue; |
1566 int index = model_->ItemIndexByID(i->first); | |
1567 if (index == -1) | |
1568 continue; | |
1569 ash::ShelfItem item = model_->items()[index]; | |
1570 item.image = image; | 1553 item.image = image; |
1571 if (arc_deferred_launcher_) | 1554 if (arc_deferred_launcher_) |
1572 arc_deferred_launcher_->MaybeApplySpinningEffect(id, &item.image); | 1555 arc_deferred_launcher_->MaybeApplySpinningEffect(id, &item.image); |
1573 model_->Set(index, item); | 1556 model_->Set(index, item); |
1574 // It's possible we're waiting on more than one item, so don't break. | 1557 // It's possible we're waiting on more than one item, so don't break. |
1575 } | 1558 } |
1576 } | 1559 } |
OLD | NEW |