diff options
Diffstat (limited to 'chromium/content/browser/theme_helper_mac.mm')
-rw-r--r-- | chromium/content/browser/theme_helper_mac.mm | 83 |
1 files changed, 58 insertions, 25 deletions
diff --git a/chromium/content/browser/theme_helper_mac.mm b/chromium/content/browser/theme_helper_mac.mm index 3b952cc79b8..9f0f86d1a59 100644 --- a/chromium/content/browser/theme_helper_mac.mm +++ b/chromium/content/browser/theme_helper_mac.mm @@ -4,13 +4,25 @@ #include "content/browser/theme_helper_mac.h" -#include <Foundation/Foundation.h> +#import <Cocoa/Cocoa.h> +#include "base/command_line.h" +#include "base/mac/sdk_forward_declarations.h" #include "content/common/view_messages.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_types.h" #include "content/public/browser/render_process_host.h" +#include "content/public/common/content_switches.h" + +// Declare notification names from the 10.7 SDK. +#if !defined(MAC_OS_X_VERSION_10_7) || \ + MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 + +NSString* NSPreferredScrollerStyleDidChangeNotification = + @"NSPreferredScrollerStyleDidChangeNotification"; + +#endif @interface ScrollbarPrefsObserver : NSObject @@ -37,6 +49,17 @@ suspensionBehavior:NSNotificationSuspensionBehaviorDeliverImmediately]; name:@"AppleNoRedisplayAppearancePreferenceChanged" object:nil suspensionBehavior:NSNotificationSuspensionBehaviorCoalesce]; + + // In single-process mode, renderers will catch these notifications + // themselves and listening for them here may trigger the DCHECK in Observe(). + if ([NSScroller respondsToSelector:@selector(preferredScrollerStyle)] && + !CommandLine::ForCurrentProcess()->HasSwitch(switches::kSingleProcess)) { + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(behaviorPrefsChanged:) + name:NSPreferredScrollerStyleDidChangeNotification + object:nil]; + } } + (void)appearancePrefsChanged:(NSNotification*)notification { @@ -56,6 +79,7 @@ suspensionBehavior:NSNotificationSuspensionBehaviorCoalesce]; [defaults floatForKey:@"NSScrollerButtonDelay"], [defaults floatForKey:@"NSScrollerButtonPeriod"], [defaults boolForKey:@"AppleScrollerPagingBehavior"], + content::ThemeHelperMac::GetPreferredScrollerStyle(), redraw); } @@ -63,6 +87,38 @@ suspensionBehavior:NSNotificationSuspensionBehaviorCoalesce]; namespace content { +// static +ThemeHelperMac* ThemeHelperMac::GetInstance() { + return Singleton<ThemeHelperMac, + LeakySingletonTraits<ThemeHelperMac> >::get(); +} + +// static +blink::ScrollerStyle ThemeHelperMac::GetPreferredScrollerStyle() { + if (![NSScroller respondsToSelector:@selector(preferredScrollerStyle)]) + return blink::ScrollerStyleLegacy; + return static_cast<blink::ScrollerStyle>([NSScroller preferredScrollerStyle]); +} + +// static +void ThemeHelperMac::SendThemeChangeToAllRenderers( + float initial_button_delay, + float autoscroll_button_delay, + bool jump_on_track_click, + blink::ScrollerStyle preferred_scroller_style, + bool redraw) { + for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); + !it.IsAtEnd(); + it.Advance()) { + it.GetCurrentValue()->Send(new ViewMsg_UpdateScrollbarTheme( + initial_button_delay, + autoscroll_button_delay, + jump_on_track_click, + preferred_scroller_style, + redraw)); + } +} + ThemeHelperMac::ThemeHelperMac() { [ScrollbarPrefsObserver registerAsObserver]; registrar_.Add(this, @@ -73,13 +129,6 @@ ThemeHelperMac::ThemeHelperMac() { ThemeHelperMac::~ThemeHelperMac() { } -// static -ThemeHelperMac* ThemeHelperMac::GetInstance() { - return Singleton<ThemeHelperMac, - LeakySingletonTraits<ThemeHelperMac> >::get(); -} - - void ThemeHelperMac::Observe(int type, const NotificationSource& source, const NotificationDetails& details) { @@ -94,24 +143,8 @@ void ThemeHelperMac::Observe(int type, [defaults floatForKey:@"NSScrollerButtonDelay"], [defaults floatForKey:@"NSScrollerButtonPeriod"], [defaults boolForKey:@"AppleScrollerPagingBehavior"], + GetPreferredScrollerStyle(), false)); } -// static -void ThemeHelperMac::SendThemeChangeToAllRenderers( - float initial_button_delay, - float autoscroll_button_delay, - bool jump_on_track_click, - bool redraw) { - for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); - !it.IsAtEnd(); - it.Advance()) { - it.GetCurrentValue()->Send(new ViewMsg_UpdateScrollbarTheme( - initial_button_delay, - autoscroll_button_delay, - jump_on_track_click, - redraw)); - } -} - } // namespace content |