summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-10 22:38:07 +0000
committersail@chromium.org <sail@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-10 22:38:07 +0000
commit72e07fa93c4b41694b53ff2f10c799d8b29fadb7 (patch)
treea82122a457993fec56b37fdf1dc30b76a5d876a6
parenta79e6f1695c6ec8685b8535494e1e395f1972957 (diff)
downloadchromium_src-72e07fa93c4b41694b53ff2f10c799d8b29fadb7.zip
chromium_src-72e07fa93c4b41694b53ff2f10c799d8b29fadb7.tar.gz
chromium_src-72e07fa93c4b41694b53ff2f10c799d8b29fadb7.tar.bz2
Views: Rebuild wrench menu if error is added or removed
This CL rebuilds the wrench menu model if a new GlobalError object is added or removed. BUG=96608 TEST= Review URL: http://codereview.chromium.org/8201006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104808 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/ui/views/toolbar_view.cc4
-rw-r--r--chrome/browser/ui/views/toolbar_view.h3
-rw-r--r--chrome/browser/ui/views/wrench_menu.cc18
-rw-r--r--chrome/browser/ui/views/wrench_menu.h12
4 files changed, 31 insertions, 6 deletions
diff --git a/chrome/browser/ui/views/toolbar_view.cc b/chrome/browser/ui/views/toolbar_view.cc
index a22bccf..fc45d50 100644
--- a/chrome/browser/ui/views/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar_view.cc
@@ -133,7 +133,6 @@ void ToolbarView::Init() {
browser_, BackForwardMenuModel::BACKWARD_MENU));
forward_menu_model_.reset(new BackForwardMenuModel(
browser_, BackForwardMenuModel::FORWARD_MENU));
- wrench_menu_model_.reset(new WrenchMenuModel(this, browser_));
back_ = new views::ButtonDropDown(this, back_menu_model_.get());
back_->set_triggerable_event_flags(ui::EF_LEFT_BUTTON_DOWN |
ui::EF_MIDDLE_BUTTON_DOWN);
@@ -337,7 +336,8 @@ void ToolbarView::RunMenu(views::View* source, const gfx::Point& /* pt */) {
DCHECK_EQ(VIEW_ID_APP_MENU, source->id());
wrench_menu_.reset(new WrenchMenu(browser_));
- wrench_menu_->Init(wrench_menu_model_.get());
+ WrenchMenuModel model(this, browser_);
+ wrench_menu_->Init(&model);
FOR_EACH_OBSERVER(views::MenuListener, menu_listeners_, OnMenuOpened());
diff --git a/chrome/browser/ui/views/toolbar_view.h b/chrome/browser/ui/views/toolbar_view.h
index 2fa54b5..59dfbdc 100644
--- a/chrome/browser/ui/views/toolbar_view.h
+++ b/chrome/browser/ui/views/toolbar_view.h
@@ -199,9 +199,6 @@ class ToolbarView : public AccessiblePaneView,
// The display mode used when laying out the toolbar.
DisplayMode display_mode_;
- // The contents of the wrench menu.
- scoped_ptr<ui::SimpleMenuModel> wrench_menu_model_;
-
// Wrench menu.
scoped_ptr<WrenchMenu> wrench_menu_;
diff --git a/chrome/browser/ui/views/wrench_menu.cc b/chrome/browser/ui/views/wrench_menu.cc
index 5d546d96..55d8986 100644
--- a/chrome/browser/ui/views/wrench_menu.cc
+++ b/chrome/browser/ui/views/wrench_menu.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/views/bookmarks/bookmark_menu_delegate.h"
+#include "chrome/common/chrome_notification_types.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/user_metrics.h"
#include "content/common/content_notification_types.h"
@@ -569,6 +570,8 @@ WrenchMenu::WrenchMenu(Browser* browser)
selected_index_(0),
bookmark_menu_(NULL),
first_bookmark_command_id_(0) {
+ registrar_.Add(this, chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED,
+ Source<Profile>(browser_->profile()));
}
WrenchMenu::~WrenchMenu() {
@@ -770,6 +773,21 @@ void WrenchMenu::BookmarkModelChanged() {
root_->Cancel();
}
+
+void WrenchMenu::Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ switch (type) {
+ case chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED:
+ // A change in the global errors list can add or remove items from the
+ // menu. Close the menu to avoid have a stale menu on-screen.
+ root_->Cancel();
+ break;
+ default:
+ NOTREACHED();
+ }
+}
+
void WrenchMenu::PopulateMenu(MenuItemView* parent,
MenuModel* model,
int* next_id) {
diff --git a/chrome/browser/ui/views/wrench_menu.h b/chrome/browser/ui/views/wrench_menu.h
index 231f379..469c67f 100644
--- a/chrome/browser/ui/views/wrench_menu.h
+++ b/chrome/browser/ui/views/wrench_menu.h
@@ -11,6 +11,8 @@
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
+#include "content/common/notification_observer.h"
+#include "content/common/notification_registrar.h"
#include "ui/base/models/menu_model.h"
#include "views/controls/menu/menu_delegate.h"
@@ -26,7 +28,8 @@ class View;
// WrenchMenu adapts the WrenchMenuModel to view's menu related classes.
class WrenchMenu : public views::MenuDelegate,
- public BaseBookmarkModelObserver {
+ public BaseBookmarkModelObserver,
+ public NotificationObserver {
public:
explicit WrenchMenu(Browser* browser);
virtual ~WrenchMenu();
@@ -71,6 +74,11 @@ class WrenchMenu : public views::MenuDelegate,
// BaseBookmarkModelObserver overrides:
virtual void BookmarkModelChanged() OVERRIDE;
+ // NotificationObserver overrides:
+ virtual void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) OVERRIDE;
+
private:
class CutCopyPasteView;
class ZoomView;
@@ -134,6 +142,8 @@ class WrenchMenu : public views::MenuDelegate,
// ID to use for the items representing bookmarks in the bookmark menu.
int first_bookmark_command_id_;
+ NotificationRegistrar registrar_;
+
DISALLOW_COPY_AND_ASSIGN(WrenchMenu);
};