diff options
4 files changed, 60 insertions, 31 deletions
diff --git a/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc b/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc index 66cd9fd..80e9b3a 100644 --- a/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc +++ b/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc @@ -312,6 +312,13 @@ void ChromeLauncherDelegate::PinAppWithID(const std::string& app_id, PersistPinnedState(); } +void ChromeLauncherDelegate::SetAppType(ash::LauncherID id, AppType app_type) { + if (id_to_item_map_.find(id) == id_to_item_map_.end()) + return; + + id_to_item_map_[id].app_type = app_type; +} + void ChromeLauncherDelegate::UnpinAppsWithID(const std::string& app_id) { for (IDToItemMap::iterator i = id_to_item_map_.begin(); i != id_to_item_map_.end(); ) { @@ -363,7 +370,7 @@ string16 ChromeLauncherDelegate::GetTitle(const ash::LauncherItem& item) { ui::MenuModel* ChromeLauncherDelegate::CreateContextMenu( const ash::LauncherItem& item) { - return new LauncherContextMenu(this, item.id); + return new LauncherContextMenu(this, item); } ash::LauncherID ChromeLauncherDelegate::GetIDByWindow( diff --git a/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.h b/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.h index 652e4cb..29946f1 100644 --- a/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.h +++ b/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.h @@ -138,6 +138,9 @@ class ChromeLauncherDelegate : public ash::LauncherDelegate, // a new launcher item is created with |app_type| and pinned. void PinAppWithID(const std::string& app_id, AppType app_type); + // Modifies an app shortcut to open with the new |app_type|. + void SetAppType(ash::LauncherID id, AppType app_type); + // Unpins any app items whose id is |app_id|. void UnpinAppsWithID(const std::string& app_id); diff --git a/chrome/browser/ui/views/ash/launcher/launcher_context_menu.cc b/chrome/browser/ui/views/ash/launcher/launcher_context_menu.cc index 8c89bf9..80b8403 100644 --- a/chrome/browser/ui/views/ash/launcher/launcher_context_menu.cc +++ b/chrome/browser/ui/views/ash/launcher/launcher_context_menu.cc @@ -9,22 +9,29 @@ #include "ui/base/l10n/l10n_util.h" LauncherContextMenu::LauncherContextMenu(ChromeLauncherDelegate* delegate, - ash::LauncherID id) + const ash::LauncherItem& item) : ui::SimpleMenuModel(NULL), delegate_(delegate), - id_(id) { + item_(item) { set_delegate(this); - ash::LauncherItem item; - item.id = id; - AddItem(MENU_OPEN, - delegate->GetTitle(item)); - AddItem(MENU_PIN, - delegate->IsPinned(id) ? - l10n_util::GetStringUTF16(IDS_LAUNCHER_CONTEXT_MENU_UNPIN) : - l10n_util::GetStringUTF16(IDS_LAUNCHER_CONTEXT_MENU_PIN)); - if (delegate->IsOpen(id)) { - AddItem(MENU_CLOSE, - l10n_util::GetStringUTF16(IDS_LAUNCHER_CONTEXT_MENU_CLOSE)); + + if (item_.type == ash::TYPE_APP_SHORTCUT) { + DCHECK(delegate->IsPinned(item_.id)); + AddItem( + MENU_PIN, + l10n_util::GetStringUTF16(IDS_LAUNCHER_CONTEXT_MENU_UNPIN)); + AddCheckItemWithStringId( + LAUNCH_TYPE_REGULAR_TAB, + IDS_APP_CONTEXT_MENU_OPEN_REGULAR); + AddCheckItemWithStringId( + LAUNCH_TYPE_WINDOW, + IDS_APP_CONTEXT_MENU_OPEN_WINDOW); + } else { + AddItem(MENU_OPEN, delegate->GetTitle(item)); + if (delegate->IsOpen(item_.id)) { + AddItem(MENU_CLOSE, + l10n_util::GetStringUTF16(IDS_LAUNCHER_CONTEXT_MENU_CLOSE)); + } } } @@ -32,19 +39,20 @@ LauncherContextMenu::~LauncherContextMenu() { } bool LauncherContextMenu::IsCommandIdChecked(int command_id) const { - return false; + switch (command_id) { + case LAUNCH_TYPE_REGULAR_TAB: + return delegate_->GetAppType(item_.id) == + ChromeLauncherDelegate::APP_TYPE_TAB; + case LAUNCH_TYPE_WINDOW: + return delegate_->GetAppType(item_.id) == + ChromeLauncherDelegate::APP_TYPE_WINDOW; + default: + return false; + } } bool LauncherContextMenu::IsCommandIdEnabled(int command_id) const { - switch (static_cast<MenuItem>(command_id)) { - case MENU_OPEN: - return true; - case MENU_CLOSE: - return true; - case MENU_PIN: - return delegate_->IsPinnable(id_); - } - return false; + return true; } bool LauncherContextMenu::GetAcceleratorForCommandId( @@ -56,13 +64,21 @@ bool LauncherContextMenu::GetAcceleratorForCommandId( void LauncherContextMenu::ExecuteCommand(int command_id) { switch (static_cast<MenuItem>(command_id)) { case MENU_OPEN: - delegate_->Open(id_); + delegate_->Open(item_.id); break; case MENU_CLOSE: - delegate_->Close(id_); + delegate_->Close(item_.id); break; case MENU_PIN: - delegate_->TogglePinned(id_); + delegate_->TogglePinned(item_.id); + break; + case LAUNCH_TYPE_REGULAR_TAB: + delegate_->SetAppType(item_.id, ChromeLauncherDelegate::APP_TYPE_TAB); + break; + case LAUNCH_TYPE_WINDOW: + delegate_->SetAppType(item_.id, ChromeLauncherDelegate::APP_TYPE_WINDOW); + break; + default: break; } } diff --git a/chrome/browser/ui/views/ash/launcher/launcher_context_menu.h b/chrome/browser/ui/views/ash/launcher/launcher_context_menu.h index 366e3e5..b45b101 100644 --- a/chrome/browser/ui/views/ash/launcher/launcher_context_menu.h +++ b/chrome/browser/ui/views/ash/launcher/launcher_context_menu.h @@ -25,11 +25,12 @@ class ChromeLauncherDelegate; class LauncherContextMenu : public ui::SimpleMenuModel, public ui::SimpleMenuModel::Delegate { public: - LauncherContextMenu(ChromeLauncherDelegate* delegate, ash::LauncherID id); + LauncherContextMenu(ChromeLauncherDelegate* delegate, + const ash::LauncherItem& item); virtual ~LauncherContextMenu(); // ID of the item we're showing the context menu for. - ash::LauncherID id() const { return id_; } + ash::LauncherID id() const { return item_.id; } // ui::SimpleMenuModel::Delegate overrides: virtual bool IsCommandIdChecked(int command_id) const OVERRIDE; @@ -42,12 +43,14 @@ class LauncherContextMenu : public ui::SimpleMenuModel, private: enum MenuItem { MENU_OPEN, + MENU_CLOSE, MENU_PIN, - MENU_CLOSE + LAUNCH_TYPE_REGULAR_TAB, + LAUNCH_TYPE_WINDOW, }; ChromeLauncherDelegate* delegate_; - const ash::LauncherID id_; + ash::LauncherItem item_; DISALLOW_COPY_AND_ASSIGN(LauncherContextMenu); }; |