summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/frame/browser_view.cc99
-rw-r--r--chrome/browser/chromeos/frame/browser_view.h17
2 files changed, 90 insertions, 26 deletions
diff --git a/chrome/browser/chromeos/frame/browser_view.cc b/chrome/browser/chromeos/frame/browser_view.cc
index 2134ee6..82b8056 100644
--- a/chrome/browser/chromeos/frame/browser_view.cc
+++ b/chrome/browser/chromeos/frame/browser_view.cc
@@ -29,12 +29,14 @@
#include "grit/generated_resources.h"
#include "grit/theme_resources_standard.h"
#include "third_party/cros/chromeos_wm_ipc_enums.h"
+#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/simple_menu_model.h"
#include "ui/base/theme_provider.h"
#include "ui/gfx/canvas.h"
#include "views/controls/button/button.h"
#include "views/controls/button/image_button.h"
-#include "views/controls/menu/menu_2.h"
+#include "views/controls/menu/menu_delegate.h"
+#include "views/controls/menu/menu_item_view.h"
#include "views/screen.h"
#include "views/widget/root_view.h"
#include "views/window/hit_test.h"
@@ -51,6 +53,58 @@ const int kStatusAreaVerticalAdjustment = -1;
const float kPopupMaxWidthFactor = 0.5;
const float kPopupMaxHeightFactor = 0.6;
+// This MenuItemView delegate class forwards to the
+// SimpleMenuModel::Delegate() implementation.
+class SimpleMenuModelDelegateAdapter : public views::MenuDelegate {
+ public:
+ explicit SimpleMenuModelDelegateAdapter(
+ ui::SimpleMenuModel::Delegate* simple_menu_model_delegate);
+
+ // views::MenuDelegate implementation.
+ virtual bool GetAccelerator(int id,
+ views::Accelerator* accelerator) OVERRIDE;
+ virtual std::wstring GetLabel(int id) const OVERRIDE;
+ virtual bool IsCommandEnabled(int id) const OVERRIDE;
+ virtual bool IsItemChecked(int id) const OVERRIDE;
+ virtual void ExecuteCommand(int id) OVERRIDE;
+
+ private:
+ ui::SimpleMenuModel::Delegate* simple_menu_model_delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(SimpleMenuModelDelegateAdapter);
+};
+
+// SimpleMenuModelDelegateAdapter:
+SimpleMenuModelDelegateAdapter::SimpleMenuModelDelegateAdapter(
+ ui::SimpleMenuModel::Delegate* simple_menu_model_delegate)
+ : simple_menu_model_delegate_(simple_menu_model_delegate) {
+}
+
+// SimpleMenuModelDelegateAdapter, views::MenuDelegate implementation.
+
+bool SimpleMenuModelDelegateAdapter::GetAccelerator(
+ int id,
+ views::Accelerator* accelerator) {
+ return simple_menu_model_delegate_->GetAcceleratorForCommandId(
+ id, accelerator);
+}
+
+std::wstring SimpleMenuModelDelegateAdapter::GetLabel(int id) const {
+ return UTF16ToWide(simple_menu_model_delegate_->GetLabelForCommandId(id));
+}
+
+bool SimpleMenuModelDelegateAdapter::IsCommandEnabled(int id) const {
+ return simple_menu_model_delegate_->IsCommandIdEnabled(id);
+}
+
+bool SimpleMenuModelDelegateAdapter::IsItemChecked(int id) const {
+ return simple_menu_model_delegate_->IsCommandIdChecked(id);
+}
+
+void SimpleMenuModelDelegateAdapter::ExecuteCommand(int id) {
+ simple_menu_model_delegate_->ExecuteCommand(id);
+}
+
} // namespace
namespace chromeos {
@@ -218,10 +272,13 @@ class BrowserViewLayout : public ::BrowserViewLayout {
DISALLOW_COPY_AND_ASSIGN(BrowserViewLayout);
};
+// BrowserView
+
BrowserView::BrowserView(Browser* browser)
: ::BrowserView(browser),
status_area_(NULL),
saved_focused_widget_(NULL) {
+ system_menu_delegate_.reset(new SimpleMenuModelDelegateAdapter(this));
}
BrowserView::~BrowserView() {
@@ -229,7 +286,6 @@ BrowserView::~BrowserView() {
toolbar()->RemoveMenuListener(this);
}
-////////////////////////////////////////////////////////////////////////////////
// BrowserView, ::BrowserView overrides:
void BrowserView::Init() {
@@ -238,7 +294,6 @@ void BrowserView::Init() {
status_area_->SetID(VIEW_ID_STATUS_AREA);
AddChildView(status_area_);
status_area_->Init();
- InitSystemMenu();
frame()->non_client_view()->SetContextMenuController(this);
@@ -338,7 +393,7 @@ WindowOpenDisposition BrowserView::GetDispositionForPopupBounds(
return NEW_POPUP;
}
-// views::ContextMenuController overrides.
+// views::ContextMenuController implementation.
void BrowserView::ShowContextMenuForView(views::View* source,
const gfx::Point& p,
bool is_mouse_gesture) {
@@ -349,16 +404,24 @@ void BrowserView::ShowContextMenuForView(views::View* source,
gfx::Point point_in_parent_coords(p);
views::View::ConvertPointToView(NULL, parent(), &point_in_parent_coords);
int hit_test = NonClientHitTest(point_in_parent_coords);
- if (hit_test == HTCAPTION || hit_test == HTNOWHERE)
- system_menu_menu_->RunMenuAt(p, views::Menu2::ALIGN_TOPLEFT);
+ if (hit_test == HTCAPTION || hit_test == HTNOWHERE) {
+ // rebuild menu so it reflects current application state
+ InitSystemMenu();
+ system_menu_->RunMenuAt(source->GetWindow()->GetNativeWindow(), NULL,
+ gfx::Rect(p, gfx::Size(0,0)),
+ views::MenuItemView::TOPLEFT,
+ true);
+ }
}
+// BrowserView, views::MenuListener implementation.
void BrowserView::OnMenuOpened() {
// Save the focused widget before wrench menu opens.
saved_focused_widget_ = gtk_window_get_focus(GetNativeHandle());
}
-// StatusAreaHost overrides.
+// BrowserView, StatusAreaHost implementation.
+
Profile* BrowserView::GetProfile() const {
return browser()->profile();
}
@@ -397,7 +460,6 @@ StatusAreaHost::TextStyle BrowserView::GetTextStyle() const {
StatusAreaHost::kWhitePlain : StatusAreaHost::kGrayEmbossed);
}
-////////////////////////////////////////////////////////////////////////////////
// BrowserView protected:
void BrowserView::GetAccessiblePanes(
@@ -406,18 +468,19 @@ void BrowserView::GetAccessiblePanes(
panes->push_back(status_area_);
}
-////////////////////////////////////////////////////////////////////////////////
-// BrowserView private:
+// BrowserView private.
void BrowserView::InitSystemMenu() {
- system_menu_contents_.reset(new ui::SimpleMenuModel(this));
- system_menu_contents_->AddItemWithStringId(IDC_RESTORE_TAB,
- IDS_RESTORE_TAB);
- system_menu_contents_->AddItemWithStringId(IDC_NEW_TAB, IDS_NEW_TAB);
- system_menu_contents_->AddSeparator();
- system_menu_contents_->AddItemWithStringId(IDC_TASK_MANAGER,
- IDS_TASK_MANAGER);
- system_menu_menu_.reset(new views::Menu2(system_menu_contents_.get()));
+ system_menu_.reset(new views::MenuItemView(system_menu_delegate_.get()));
+ system_menu_->AppendDelegateMenuItem(IDC_RESTORE_TAB);
+
+ system_menu_->AppendMenuItemWithLabel(
+ IDC_NEW_TAB,
+ UTF16ToWide(l10n_util::GetStringUTF16(IDS_NEW_TAB)));
+ system_menu_->AppendSeparator();
+ system_menu_->AppendMenuItemWithLabel(
+ IDC_TASK_MANAGER,
+ UTF16ToWide(l10n_util::GetStringUTF16(IDS_TASK_MANAGER)));
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/frame/browser_view.h b/chrome/browser/chromeos/frame/browser_view.h
index 4da430b..957d07e 100644
--- a/chrome/browser/chromeos/frame/browser_view.h
+++ b/chrome/browser/chromeos/frame/browser_view.h
@@ -23,7 +23,8 @@ class SimpleMenuModel;
namespace views {
class ImageButton;
class ImageView;
-class Menu2;
+class MenuDelegate;
+class MenuItemView;
} // namespace views
namespace chromeos {
@@ -37,7 +38,7 @@ class StatusAreaButton;
// ____ __ __
// / \ \ \ [StatusArea]
//
-// and adds the system context menu to the remaining arae of the titlebar.
+// and adds the system context menu to the remaining area of the titlebar.
class BrowserView : public ::BrowserView,
public views::ContextMenuController,
public views::MenuListener,
@@ -46,7 +47,7 @@ class BrowserView : public ::BrowserView,
explicit BrowserView(Browser* browser);
virtual ~BrowserView();
- // BrowserView overrides.
+ // BrowserView implementation.
virtual void Init() OVERRIDE;
virtual void Show() OVERRIDE;
virtual void ShowInactive() OVERRIDE;
@@ -60,7 +61,7 @@ class BrowserView : public ::BrowserView,
virtual WindowOpenDisposition GetDispositionForPopupBounds(
const gfx::Rect& bounds) OVERRIDE;
- // views::ContextMenuController overrides.
+ // views::ContextMenuController implementation.
virtual void ShowContextMenuForView(views::View* source,
const gfx::Point& p,
bool is_mouse_gesture) OVERRIDE;
@@ -94,11 +95,11 @@ class BrowserView : public ::BrowserView,
// Status Area view.
StatusAreaView* status_area_;
- // System menus.
- scoped_ptr<ui::SimpleMenuModel> system_menu_contents_;
- scoped_ptr<views::Menu2> system_menu_menu_;
+ // System menu.
+ scoped_ptr<views::MenuItemView> system_menu_;
+ scoped_ptr<views::MenuDelegate> system_menu_delegate_;
- // Focused native widget before wench menu shows up. We need this to properly
+ // Focused native widget before wrench menu shows up. We need this to properly
// perform cut, copy and paste. See http://crosbug.com/8496
gfx::NativeView saved_focused_widget_;