summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/toolbar_controller.mm
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-19 16:14:47 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-19 16:14:47 +0000
commite90fa89d1e52b1b081c42267cdf1bb76c8f9a0db (patch)
treec571c898d7dcbc53d3bb289fa93d29a67c84df0b /chrome/browser/cocoa/toolbar_controller.mm
parent652725dca523e36d14e6cf98d6e9fcf3a1db822c (diff)
downloadchromium_src-e90fa89d1e52b1b081c42267cdf1bb76c8f9a0db.zip
chromium_src-e90fa89d1e52b1b081c42267cdf1bb76c8f9a0db.tar.gz
chromium_src-e90fa89d1e52b1b081c42267cdf1bb76c8f9a0db.tar.bz2
[Mac] Implement the update available notification in the wrench menu.
The changes to restart_browser.mm also affect the sheet displayed in the About window. Note that the badge on the wrench menu looks bad. BUG=45147 TEST=difficult Review URL: http://codereview.chromium.org/2856042 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52911 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/toolbar_controller.mm')
-rw-r--r--chrome/browser/cocoa/toolbar_controller.mm58
1 files changed, 49 insertions, 9 deletions
diff --git a/chrome/browser/cocoa/toolbar_controller.mm b/chrome/browser/cocoa/toolbar_controller.mm
index cfa75f9..66010bd 100644
--- a/chrome/browser/cocoa/toolbar_controller.mm
+++ b/chrome/browser/cocoa/toolbar_controller.mm
@@ -17,6 +17,7 @@
#include "chrome/app/chrome_dll_resource.h"
#include "chrome/browser/autocomplete/autocomplete_edit_view.h"
#include "chrome/browser/browser.h"
+#include "chrome/browser/browser_theme_provider.h"
#include "chrome/browser/browser_window.h"
#import "chrome/browser/cocoa/accelerators_cocoa.h"
#import "chrome/browser/cocoa/back_forward_menu_controller.h"
@@ -39,14 +40,17 @@
#include "chrome/browser/search_engines/template_url_model.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/browser/toolbar_model.h"
+#include "chrome/browser/upgrade_detector.h"
#include "chrome/browser/wrench_menu_model.h"
#include "chrome/common/notification_details.h"
#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_service.h"
#include "chrome/common/notification_type.h"
#include "chrome/common/pref_names.h"
#include "gfx/rect.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
+#include "grit/theme_resources.h"
namespace {
@@ -85,6 +89,7 @@ const CGFloat kWrenchMenuLeftPadding = 3.0;
- (void)browserActionsContainerDragFinished:(NSNotification*)notification;
- (void)browserActionsVisibilityChanged:(NSNotification*)notification;
- (void)adjustLocationSizeBy:(CGFloat)dX animate:(BOOL)animate;
+- (void)badgeWrenchMenu;
@end
namespace ToolbarControllerInternal {
@@ -144,21 +149,31 @@ class MenuDelegate : public menus::SimpleMenuModel::Delegate {
Browser* browser_;
};
-// A C++ class registered for changes in preferences. Bridges the
-// notification back to the ToolbarController.
-class PrefObserverBridge : public NotificationObserver {
+// A class registered for C++ notifications. This is used to detect changes in
+// preferences and upgrade available notifications. Bridges the notification
+// back to the ToolbarController.
+class NotificationBridge : public NotificationObserver {
public:
- explicit PrefObserverBridge(ToolbarController* controller)
- : controller_(controller) { }
+ explicit NotificationBridge(ToolbarController* controller)
+ : controller_(controller) {
+ registrar_.Add(this, NotificationType::UPGRADE_RECOMMENDED,
+ NotificationService::AllSources());
+ }
+
// Overridden from NotificationObserver:
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details) {
if (type == NotificationType::PREF_CHANGED)
[controller_ prefChanged:Details<std::wstring>(details).ptr()];
+ else if (type == NotificationType::UPGRADE_RECOMMENDED)
+ [controller_ badgeWrenchMenu];
}
+
private:
ToolbarController* controller_; // weak, owns us
+
+ NotificationRegistrar registrar_;
};
} // namespace ToolbarControllerInternal
@@ -235,7 +250,13 @@ class PrefObserverBridge : public NotificationObserver {
[reloadButton_
setImage:nsimage_cache::ImageNamed(kReloadButtonReloadImageName)];
[homeButton_ setImage:nsimage_cache::ImageNamed(kHomeButtonImageName)];
- [wrenchButton_ setImage:nsimage_cache::ImageNamed(kWrenchButtonImageName)];
+
+ if (Singleton<UpgradeDetector>::get()->notify_upgrade()) {
+ [self badgeWrenchMenu];
+ } else {
+ NSImage* wrenchImage = nsimage_cache::ImageNamed(kWrenchButtonImageName);
+ [wrenchButton_ setImage:wrenchImage];
+ }
[backButton_ setShowsBorderOnlyWhileMouseInside:YES];
[forwardButton_ setShowsBorderOnlyWhileMouseInside:YES];
@@ -250,11 +271,13 @@ class PrefObserverBridge : public NotificationObserver {
[locationBar_ setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
// Register pref observers for the optional home and page/options buttons
// and then add them to the toolbar based on those prefs.
- prefObserver_.reset(new ToolbarControllerInternal::PrefObserverBridge(self));
+ notificationBridge_.reset(
+ new ToolbarControllerInternal::NotificationBridge(self));
PrefService* prefs = profile_->GetPrefs();
- showHomeButton_.Init(prefs::kShowHomeButton, prefs, prefObserver_.get());
+ showHomeButton_.Init(prefs::kShowHomeButton, prefs,
+ notificationBridge_.get());
showPageOptionButtons_.Init(prefs::kShowPageOptionsButtons, prefs,
- prefObserver_.get());
+ notificationBridge_.get());
[self showOptionalHomeButton];
[self installWrenchMenu];
@@ -524,6 +547,23 @@ class PrefObserverBridge : public NotificationObserver {
return wrenchMenuController_;
}
+- (void)badgeWrenchMenu {
+ // The wrench menu gets an upgrade dot. Currently, it's ugly.
+ // http://crbug.com/49370
+ NSImage* wrenchImage = nsimage_cache::ImageNamed(kWrenchButtonImageName);
+ ThemeProvider* theme_provider = profile_->GetThemeProvider();
+ NSImage* badge = theme_provider->GetNSImageNamed(IDR_UPGRADE_DOT_ACTIVE,
+ true);
+ [wrenchImage lockFocus];
+ [badge drawAtPoint:NSMakePoint(1, 1)
+ fromRect:NSZeroRect
+ operation:NSCompositeSourceOver
+ fraction:1.0];
+ [wrenchImage unlockFocus];
+ [wrenchButton_ setImage:wrenchImage];
+ [wrenchButton_ setNeedsDisplay:YES];
+}
+
- (void)prefChanged:(std::wstring*)prefName {
if (!prefName) return;
if (*prefName == prefs::kShowHomeButton) {