| Index: content/browser/theme_helper_mac.mm
|
| diff --git a/content/browser/theme_helper_mac.mm b/content/browser/theme_helper_mac.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3b952cc79b8e48d39e86bb6e6ce6b72d474d8001
|
| --- /dev/null
|
| +++ b/content/browser/theme_helper_mac.mm
|
| @@ -0,0 +1,117 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/browser/theme_helper_mac.h"
|
| +
|
| +#include <Foundation/Foundation.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"
|
| +
|
| +@interface ScrollbarPrefsObserver : NSObject
|
| +
|
| ++ (void)registerAsObserver;
|
| ++ (void)appearancePrefsChanged:(NSNotification*)notification;
|
| ++ (void)behaviorPrefsChanged:(NSNotification*)notification;
|
| ++ (void)notifyPrefsChangedWithRedraw:(BOOL)redraw;
|
| +
|
| +@end
|
| +
|
| +@implementation ScrollbarPrefsObserver
|
| +
|
| ++ (void)registerAsObserver {
|
| + [[NSDistributedNotificationCenter defaultCenter]
|
| + addObserver:self
|
| + selector:@selector(appearancePrefsChanged:)
|
| + name:@"AppleAquaScrollBarVariantChanged"
|
| + object:nil
|
| +suspensionBehavior:NSNotificationSuspensionBehaviorDeliverImmediately];
|
| +
|
| + [[NSDistributedNotificationCenter defaultCenter]
|
| + addObserver:self
|
| + selector:@selector(behaviorPrefsChanged:)
|
| + name:@"AppleNoRedisplayAppearancePreferenceChanged"
|
| + object:nil
|
| +suspensionBehavior:NSNotificationSuspensionBehaviorCoalesce];
|
| +}
|
| +
|
| ++ (void)appearancePrefsChanged:(NSNotification*)notification {
|
| + [self notifyPrefsChangedWithRedraw:YES];
|
| +}
|
| +
|
| ++ (void)behaviorPrefsChanged:(NSNotification*)notification {
|
| + [self notifyPrefsChangedWithRedraw:NO];
|
| +}
|
| +
|
| ++ (void)notifyPrefsChangedWithRedraw:(BOOL)redraw {
|
| + DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
|
| + NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
|
| + [defaults synchronize];
|
| +
|
| + content::ThemeHelperMac::SendThemeChangeToAllRenderers(
|
| + [defaults floatForKey:@"NSScrollerButtonDelay"],
|
| + [defaults floatForKey:@"NSScrollerButtonPeriod"],
|
| + [defaults boolForKey:@"AppleScrollerPagingBehavior"],
|
| + redraw);
|
| +}
|
| +
|
| +@end
|
| +
|
| +namespace content {
|
| +
|
| +ThemeHelperMac::ThemeHelperMac() {
|
| + [ScrollbarPrefsObserver registerAsObserver];
|
| + registrar_.Add(this,
|
| + NOTIFICATION_RENDERER_PROCESS_CREATED,
|
| + NotificationService::AllSources());
|
| +}
|
| +
|
| +ThemeHelperMac::~ThemeHelperMac() {
|
| +}
|
| +
|
| +// static
|
| +ThemeHelperMac* ThemeHelperMac::GetInstance() {
|
| + return Singleton<ThemeHelperMac,
|
| + LeakySingletonTraits<ThemeHelperMac> >::get();
|
| +}
|
| +
|
| +
|
| +void ThemeHelperMac::Observe(int type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + DCHECK_EQ(NOTIFICATION_RENDERER_PROCESS_CREATED, type);
|
| +
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
|
| + [defaults synchronize];
|
| +
|
| + RenderProcessHost* rph = Source<RenderProcessHost>(source).ptr();
|
| + rph->Send(new ViewMsg_UpdateScrollbarTheme(
|
| + [defaults floatForKey:@"NSScrollerButtonDelay"],
|
| + [defaults floatForKey:@"NSScrollerButtonPeriod"],
|
| + [defaults boolForKey:@"AppleScrollerPagingBehavior"],
|
| + 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
|
|
|