Index: chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc |
diff --git a/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc b/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc |
index 8348f9a2d263de18e1809ffe69e53c37b442a762..b3a8d26e93ac4f1844c860f2353ffe35c7f204ab 100644 |
--- a/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc |
+++ b/chrome/browser/ui/ash/launcher/chrome_mash_shelf_controller.cc |
@@ -20,7 +20,7 @@ |
#include "ui/display/display.h" |
#include "ui/display/screen.h" |
-class ChromeShelfItemDelegate : public mash::shelf::mojom::ShelfItemDelegate { |
+class ChromeShelfItemDelegate : public ash::mojom::ShelfItemDelegate { |
public: |
explicit ChromeShelfItemDelegate(const std::string& app_id, |
ChromeMashShelfController* controller) |
@@ -29,16 +29,16 @@ class ChromeShelfItemDelegate : public mash::shelf::mojom::ShelfItemDelegate { |
controller_(controller) {} |
~ChromeShelfItemDelegate() override {} |
- mash::shelf::mojom::ShelfItemDelegateAssociatedPtrInfo |
- CreateInterfacePtrInfoAndBind(mojo::AssociatedGroup* associated_group) { |
+ ash::mojom::ShelfItemDelegateAssociatedPtrInfo CreateInterfacePtrInfoAndBind( |
+ mojo::AssociatedGroup* associated_group) { |
DCHECK(!item_delegate_binding_.is_bound()); |
- mash::shelf::mojom::ShelfItemDelegateAssociatedPtrInfo ptr_info; |
+ ash::mojom::ShelfItemDelegateAssociatedPtrInfo ptr_info; |
item_delegate_binding_.Bind(&ptr_info, associated_group); |
return ptr_info; |
} |
private: |
- // mash::shelf::mojom::ShelfItemDelegate: |
+ // ash::mojom::ShelfItemDelegate: |
void LaunchItem() override { controller_->LaunchItem(app_id_); } |
void ExecuteCommand(uint32_t command_id, int32_t event_flags) override { |
NOTIMPLEMENTED(); |
@@ -48,8 +48,7 @@ class ChromeShelfItemDelegate : public mash::shelf::mojom::ShelfItemDelegate { |
void ItemReordered(uint32_t order) override { NOTIMPLEMENTED(); } |
std::string app_id_; |
- mojo::AssociatedBinding<mash::shelf::mojom::ShelfItemDelegate> |
- item_delegate_binding_; |
+ mojo::AssociatedBinding<ash::mojom::ShelfItemDelegate> item_delegate_binding_; |
// Not owned. |
ChromeMashShelfController* controller_; |
@@ -74,21 +73,16 @@ void ChromeMashShelfController::Init() { |
content::MojoShellConnection::GetForProcess()->GetConnector(); |
connector->ConnectToInterface("mojo:ash", &shelf_controller_); |
- // Set shelf alignment and auto-hide behavior from preferences. |
- Profile* profile = ProfileManager::GetActiveUserProfile(); |
- int64_t display_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
- shelf_controller_->SetAlignment(static_cast<mash::shelf::mojom::Alignment>( |
- ash::launcher::GetShelfAlignmentPref(profile->GetPrefs(), display_id))); |
- shelf_controller_->SetAutoHideBehavior( |
- static_cast<mash::shelf::mojom::AutoHideBehavior>( |
- ash::launcher::GetShelfAutoHideBehaviorPref(profile->GetPrefs(), |
- display_id))); |
+ // Initialize shelf alignment and auto-hide behavior from preferences. |
+ for (const auto& display : display::Screen::GetScreen()->GetAllDisplays()) |
+ OnShelfCreated(display.id()); |
// TODO(skuhne): The AppIconLoaderImpl has the same problem. Each loaded |
// image is associated with a profile (its loader requires the profile). |
// Since icon size changes are possible, the icon could be requested to be |
// reloaded. However - having it not multi profile aware would cause problems |
// if the icon cache gets deleted upon user switch. |
+ Profile* profile = ProfileManager::GetActiveUserProfile(); |
std::unique_ptr<AppIconLoader> extension_app_icon_loader( |
new extensions::ExtensionAppIconLoader( |
profile, extension_misc::EXTENSION_ICON_SMALL, this)); |
@@ -103,7 +97,7 @@ void ChromeMashShelfController::Init() { |
PinAppsFromPrefs(); |
// Start observing the shelf now that it has been initialized. |
- mash::shelf::mojom::ShelfObserverAssociatedPtrInfo ptr_info; |
+ ash::mojom::ShelfObserverAssociatedPtrInfo ptr_info; |
observer_binding_.Bind(&ptr_info, shelf_controller_.associated_group()); |
shelf_controller_->AddObserver(std::move(ptr_info)); |
} |
@@ -117,7 +111,7 @@ void ChromeMashShelfController::PinAppsFromPrefs() { |
if (app == ash::launcher::kPinnedAppsPlaceholder) |
continue; |
- mash::shelf::mojom::ShelfItemPtr item(mash::shelf::mojom::ShelfItem::New()); |
+ ash::mojom::ShelfItemPtr item(ash::mojom::ShelfItem::New()); |
item->app_id = app; |
item->app_title = mojo::String::From(helper_.GetAppTitle(profile, app)); |
ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
@@ -148,20 +142,37 @@ AppIconLoader* ChromeMashShelfController::GetAppIconLoaderForApp( |
return nullptr; |
} |
+void ChromeMashShelfController::OnShelfCreated(int64_t display_id) { |
+ // The pref helper functions return default values for invalid display ids. |
+ Profile* profile = ProfileManager::GetActiveUserProfile(); |
+ shelf_controller_->SetAlignment( |
+ ash::launcher::GetShelfAlignmentPref(profile->GetPrefs(), display_id), |
+ display_id); |
+ shelf_controller_->SetAutoHideBehavior( |
+ ash::launcher::GetShelfAutoHideBehaviorPref(profile->GetPrefs(), |
+ display_id), |
+ display_id); |
+} |
+ |
void ChromeMashShelfController::OnAlignmentChanged( |
- mash::shelf::mojom::Alignment alignment) { |
+ ash::ShelfAlignment alignment, |
+ int64_t display_id) { |
+ // The locked alignment is set temporarily and not saved to preferences. |
+ if (alignment == ash::SHELF_ALIGNMENT_BOTTOM_LOCKED) |
+ return; |
+ // This will uselessly store a preference value for invalid display ids. |
ash::launcher::SetShelfAlignmentPref( |
- ProfileManager::GetActiveUserProfile()->GetPrefs(), |
- display::Screen::GetScreen()->GetPrimaryDisplay().id(), |
- static_cast<ash::ShelfAlignment>(alignment)); |
+ ProfileManager::GetActiveUserProfile()->GetPrefs(), display_id, |
+ alignment); |
} |
void ChromeMashShelfController::OnAutoHideBehaviorChanged( |
- mash::shelf::mojom::AutoHideBehavior auto_hide) { |
+ ash::ShelfAutoHideBehavior auto_hide, |
+ int64_t display_id) { |
+ // This will uselessly store a preference value for invalid display ids. |
ash::launcher::SetShelfAutoHideBehaviorPref( |
- ProfileManager::GetActiveUserProfile()->GetPrefs(), |
- display::Screen::GetScreen()->GetPrimaryDisplay().id(), |
- static_cast<ash::ShelfAutoHideBehavior>(auto_hide)); |
+ ProfileManager::GetActiveUserProfile()->GetPrefs(), display_id, |
+ auto_hide); |
} |
void ChromeMashShelfController::OnAppImageUpdated(const std::string& app_id, |