Fix sorting issues in chrome_browser.gypi restructuring
[chromium-blink-merge.git] / chrome / browser / idle_mac.mm
blob1825c83816e2bbc13f693871c4e4f35d06128901
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 "chrome/browser/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 static MacScreenMonitor* g_screenMonitor = nil;
77 void InitIdleMonitor() {
78   if (!g_screenMonitor)
79     g_screenMonitor = [[MacScreenMonitor alloc] init];
82 void CalculateIdleTime(IdleTimeCallback notify) {
83   CFTimeInterval idle_time = CGEventSourceSecondsSinceLastEventType(
84       kCGEventSourceStateCombinedSessionState,
85       kCGAnyInputEventType);
86   notify.Run(static_cast<int>(idle_time));
89 bool CheckIdleStateIsLocked() {
90   return [g_screenMonitor isScreensaverRunning] ||
91       [g_screenMonitor isScreenLocked];