| Index: chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc
|
| diff --git a/chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc
|
| index db66d64f5bab82693280673993df471fdaa0840f..bea3081e315705b24230126f50881bd0392d9bc2 100644
|
| --- a/chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc
|
| +++ b/chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc
|
| @@ -4,9 +4,13 @@
|
|
|
| #include "chrome/browser/ui/views/apps/app_info_dialog/app_info_footer_panel.h"
|
|
|
| +#include "ash/shelf/shelf_delegate.h"
|
| +#include "ash/shell.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
|
| #include "chrome/browser/ui/browser_dialogs.h"
|
| +#include "chrome/browser/ui/host_desktop.h"
|
| #include "extensions/browser/extension_system.h"
|
| #include "extensions/browser/management_policy.h"
|
| #include "extensions/common/extension.h"
|
| @@ -19,10 +23,14 @@
|
| #include "ui/views/view.h"
|
| #include "ui/views/widget/widget.h"
|
|
|
| -AppInfoFooterPanel::AppInfoFooterPanel(Profile* profile,
|
| +AppInfoFooterPanel::AppInfoFooterPanel(gfx::NativeWindow parent_window,
|
| + Profile* profile,
|
| const extensions::Extension* app)
|
| : AppInfoPanel(profile, app),
|
| + parent_window_(parent_window),
|
| create_shortcuts_button_(NULL),
|
| + pin_to_shelf_button_(NULL),
|
| + unpin_from_shelf_button_(NULL),
|
| remove_button_(NULL),
|
| weak_ptr_factory_(this) {
|
| CreateButtons();
|
| @@ -47,6 +55,15 @@ void AppInfoFooterPanel::CreateButtons() {
|
| create_shortcuts_button_->SetStyle(views::Button::STYLE_BUTTON);
|
| }
|
|
|
| + if (CanSetPinnedToShelf()) {
|
| + pin_to_shelf_button_ = new views::LabelButton(
|
| + this, l10n_util::GetStringUTF16(IDS_APP_LIST_CONTEXT_MENU_PIN));
|
| + pin_to_shelf_button_->SetStyle(views::Button::STYLE_BUTTON);
|
| + unpin_from_shelf_button_ = new views::LabelButton(
|
| + this, l10n_util::GetStringUTF16(IDS_APP_LIST_CONTEXT_MENU_UNPIN));
|
| + unpin_from_shelf_button_->SetStyle(views::Button::STYLE_BUTTON);
|
| + }
|
| +
|
| if (CanUninstallApp()) {
|
| remove_button_ = new views::LabelButton(
|
| this,
|
| @@ -59,14 +76,33 @@ void AppInfoFooterPanel::LayoutButtons() {
|
| if (create_shortcuts_button_)
|
| AddChildView(create_shortcuts_button_);
|
|
|
| + if (pin_to_shelf_button_)
|
| + AddChildView(pin_to_shelf_button_);
|
| + if (unpin_from_shelf_button_)
|
| + AddChildView(unpin_from_shelf_button_);
|
| + UpdatePinButtons();
|
| +
|
| if (remove_button_)
|
| AddChildView(remove_button_);
|
| }
|
|
|
| +void AppInfoFooterPanel::UpdatePinButtons() {
|
| + if (pin_to_shelf_button_ && unpin_from_shelf_button_) {
|
| + bool is_pinned =
|
| + !ash::Shell::GetInstance()->GetShelfDelegate()->IsAppPinned(app_->id());
|
| + pin_to_shelf_button_->SetVisible(is_pinned);
|
| + unpin_from_shelf_button_->SetVisible(!is_pinned);
|
| + }
|
| +}
|
| +
|
| void AppInfoFooterPanel::ButtonPressed(views::Button* sender,
|
| const ui::Event& event) {
|
| if (sender == create_shortcuts_button_) {
|
| CreateShortcuts();
|
| + } else if (sender == pin_to_shelf_button_) {
|
| + SetPinnedToShelf(true);
|
| + } else if (sender == unpin_from_shelf_button_) {
|
| + SetPinnedToShelf(false);
|
| } else if (sender == remove_button_) {
|
| UninstallApp();
|
| } else {
|
| @@ -96,12 +132,31 @@ void AppInfoFooterPanel::CreateShortcuts() {
|
| }
|
|
|
| bool AppInfoFooterPanel::CanCreateShortcuts() const {
|
| -// ChromeOS can pin apps to the app launcher, but can't create shortcuts.
|
| -#if defined(OS_CHROMEOS)
|
| - return false;
|
| -#else
|
| - return true;
|
| -#endif
|
| + // Ash platforms can't create shortcuts.
|
| + return (chrome::GetHostDesktopTypeForNativeWindow(parent_window_) !=
|
| + chrome::HOST_DESKTOP_TYPE_ASH);
|
| +}
|
| +
|
| +void AppInfoFooterPanel::SetPinnedToShelf(bool value) {
|
| + DCHECK(CanSetPinnedToShelf());
|
| + ash::ShelfDelegate* shelf_delegate =
|
| + ash::Shell::GetInstance()->GetShelfDelegate();
|
| + DCHECK(shelf_delegate);
|
| + if (value)
|
| + shelf_delegate->PinAppWithID(app_->id());
|
| + else
|
| + shelf_delegate->UnpinAppWithID(app_->id());
|
| +
|
| + UpdatePinButtons();
|
| + Layout();
|
| +}
|
| +
|
| +bool AppInfoFooterPanel::CanSetPinnedToShelf() const {
|
| + // Non-Ash platforms don't have a shelf.
|
| + if (chrome::GetHostDesktopTypeForNativeWindow(parent_window_) !=
|
| + chrome::HOST_DESKTOP_TYPE_ASH)
|
| + return false;
|
| + return ash::Shell::GetInstance()->GetShelfDelegate()->CanPin();
|
| }
|
|
|
| void AppInfoFooterPanel::UninstallApp() {
|
|
|