Home | History | Annotate | Download | only in mac
      1 
      2 /*
      3  * Copyright 2011 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #import "SkEventNotifier.h"
     10 #include "SkEvent.h"
     11 #define SkEventClass @"SkEvenClass"
     12 @implementation SkEventNotifier
     13 - (id)init {
     14     self = [super init];
     15     if (self) {
     16         //Register as an observer for SkEventClass events and call
     17         //receiveSkEvent: upon receiving the event
     18         [[NSNotificationCenter defaultCenter] addObserver:self
     19                                                  selector:@selector(receiveSkEvent:)
     20                                                      name:SkEventClass
     21                                                    object:nil];
     22     }
     23     return self;
     24 }
     25 
     26 - (void)dealloc {
     27     [[NSNotificationCenter defaultCenter] removeObserver:self];
     28     [super dealloc];
     29 }
     30 
     31 -(BOOL) acceptsFirstResponder {
     32     return YES;
     33 }
     34 
     35 //SkEvent Handers
     36 - (void)receiveSkEvent:(NSNotification *)notification {
     37     if(SkEvent::ProcessEvent())
     38         SkEvent::SignalNonEmptyQueue();
     39 }
     40 
     41 + (void)postTimedSkEvent:(NSTimeInterval)timeInterval {
     42     [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self
     43                                    selector:@selector(timerFireMethod:)
     44                                    userInfo:nil repeats:NO];
     45 }
     46 
     47 + (void)timerFireMethod:(NSTimer*)theTimer {
     48 	SkEvent::ServiceQueueTimer();
     49 }
     50 
     51 @end
     52 ////////////////////////////////////////////////////////////////////////////////
     53 void SkEvent::SignalNonEmptyQueue() {
     54     //post a SkEventClass event to the default notification queue
     55     NSNotification* notification = [NSNotification notificationWithName:SkEventClass object:nil];
     56     [[NSNotificationQueue defaultQueue] enqueueNotification:notification
     57                                                postingStyle:NSPostWhenIdle
     58                                                coalesceMask:NSNotificationNoCoalescing
     59                                                    forModes:nil];
     60 }
     61 
     62 void SkEvent::SignalQueueTimer(SkMSec delay) {
     63 	if (delay) {
     64         //Convert to seconds
     65         NSTimeInterval ti = delay/(float)SK_MSec1;
     66         [SkEventNotifier postTimedSkEvent:ti];
     67 	}
     68 }
     69