summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc9
-rw-r--r--chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.h3
-rw-r--r--chrome/browser/ui/views/ash/launcher/launcher_context_menu.cc68
-rw-r--r--chrome/browser/ui/views/ash/launcher/launcher_context_menu.h11
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);
};