Add ICU message format support
[chromium-blink-merge.git] / ui / base / idle / idle_mac.mm
blob4d9e37a7f7346cfac8ae4f5e5cd4047ca40802c6
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/base/idle/idle.h"
7 #include <ApplicationServices/ApplicationServices.h>
8 #import <Cocoa/Cocoa.h>
10 @interface MacScreenMonitor : NSObject {
11  @private
12   BOOL screensaverRunning_;
13   BOOL screenLocked_;
16 @property (readonly,
17            nonatomic,
18            getter=isScreensaverRunning) BOOL screensaverRunning;
19 @property (readonly, nonatomic, getter=isScreenLocked) BOOL screenLocked;
21 @end
23 @implementation MacScreenMonitor
25 @synthesize screensaverRunning = screensaverRunning_;
26 @synthesize screenLocked = screenLocked_;
28 - (id)init {
29   if ((self = [super init])) {
30     NSDistributedNotificationCenter* distCenter =
31           [NSDistributedNotificationCenter defaultCenter];
32     [distCenter addObserver:self
33                    selector:@selector(onScreenSaverStarted:)
34                        name:@"com.apple.screensaver.didstart"
35                      object:nil];
36     [distCenter addObserver:self
37                    selector:@selector(onScreenSaverStopped:)
38                        name:@"com.apple.screensaver.didstop"
39                      object:nil];
40     [distCenter addObserver:self
41                    selector:@selector(onScreenLocked:)
42                        name:@"com.apple.screenIsLocked"
43                      object:nil];
44     [distCenter addObserver:self
45                    selector:@selector(onScreenUnlocked:)
46                        name:@"com.apple.screenIsUnlocked"
47                      object:nil];
48   }
49   return self;
52 - (void)dealloc {
53   [[NSDistributedNotificationCenter defaultCenter] removeObserver:self];
54   [super dealloc];
57 - (void)onScreenSaverStarted:(NSNotification*)notification {
58    screensaverRunning_ = YES;
61 - (void)onScreenSaverStopped:(NSNotification*)notification {
62    screensaverRunning_ = NO;
65 - (void)onScreenLocked:(NSNotification*)notification {
66    screenLocked_ = YES;
69 - (void)onScreenUnlocked:(NSNotification*)notification {
70    screenLocked_ = NO;
73 @end
75 namespace ui {
76 namespace {
78 static MacScreenMonitor* g_screenMonitor = nil;
80 }  // namespace
82 void InitIdleMonitor() {
83   if (!g_screenMonitor)
84     g_screenMonitor = [[MacScreenMonitor alloc] init];
87 void CalculateIdleTime(IdleTimeCallback notify) {
88   CFTimeInterval idle_time = CGEventSourceSecondsSinceLastEventType(
89       kCGEventSourceStateCombinedSessionState,
90       kCGAnyInputEventType);
91   notify.Run(static_cast<int>(idle_time));
94 bool CheckIdleStateIsLocked() {
95   return [g_screenMonitor isScreensaverRunning] ||
96       [g_screenMonitor isScreenLocked];
99 }  // namespace ui