UKIdleTimer
Language: Objective-C, Author: Uli Kusterer
License: MIT/X11
This is a wrapper around the Carbon EventLoopIdleTimer, intended to be used just like an NSTimer. An Idle Timer doesn't trigger until the user has been idle for a while, doing nothing in the GUI of the current application.
UKIdleTimer source preview
// // UKIdleTimer.m // CocoaMoose // // Created by Uli Kusterer on Tue Apr 06 2004. // Copyright (c) 2004 M. Uli Kusterer. All rights reserved. // #import "UKIdleTimer.h" #include <Carbon/Carbon.h> pascal void UKIdleTimerProc( EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inMessage, void *refCon ); @implementation UKIdleTimer -(id) initWithTimeInterval: (NSTimeInterval)interval { self = [super init]; if( !self ) return nil; static EventLoopIdleTimerUPP eventLoopIdleTimerUPP = NULL; if( !eventLoopIdleTimerUPP ) eventLoopIdleTimerUPP = NewEventLoopIdleTimerUPP(UKIdleTimerProc); if( InstallEventLoopIdleTimer( GetCurrentEventLoop(), kEventDurationSecond * interval, kEventDurationSecond * interval, eventLoopIdleTimerUPP, self, (EventLoopTimerRef*) &carbonTimerRef) != noErr ) { [self release]; return nil; } return self; } -(void) dealloc { RemoveEventLoopTimer( (EventLoopTimerRef) carbonTimerRef ); [super dealloc]; } -(void) setFireTime: (NSTimeInterval)foo { SetEventLoopTimerNextFireTime( (EventLoopTimerRef) carbonTimerRef, kEventDurationSecond * foo ); } -(id) delegate { return delegate; } -(void) setDelegate: (id)newDelegate { delegate = newDelegate; } -(void) timerBeginsIdling: (id)sender { if( [delegate respondsToSelector: @selector(timerBeginsIdling:)] ) [delegate timerBeginsIdling: self]; } -(void) timerContinuesIdling: (id)sender { if( [delegate respondsToSelector: @selector(timerContinuesIdling:)] ) [delegate timerContinuesIdling: self]; } -(void) timerFinishedIdling: (id)sender { if( [delegate respondsToSelector: @selector(timerFinishedIdling:)] ) [delegate timerFinishedIdling: self]; } @end pascal void UKIdleTimerProc( EventLoopTimerRef inTimer, EventLoopIdleTimerMessage inMessage, void *refCon ) { switch( inMessage ) { case kEventLoopIdleTimerStarted: [((UKIdleTimer*)refCon) timerBeginsIdling: nil]; break; case kEventLoopIdleTimerIdling: [((UKIdleTimer*)refCon) timerContinuesIdling: nil]; break; case kEventLoopIdleTimerStopped: [((UKIdleTimer*)refCon) timerFinishedIdling: nil]; break; } }
UKIdleTimer header preview
// // UKIdleTimer.h // CocoaMoose // // Created by Uli Kusterer on Tue Apr 06 2004. // Copyright (c) 2004 M. Uli Kusterer. All rights reserved. // #import <Foundation/Foundation.h> @interface UKIdleTimer : NSObject { void* carbonTimerRef; id delegate; } -(id) initWithTimeInterval: (NSTimeInterval)interval; // After this much inactivity, the timer will fire, then periodically again with this interval until the user does something. -(id) delegate; -(void) setDelegate: (id)newDelegate; -(void) setFireTime: (NSTimeInterval)foo; // The following three messages are sent to the delegate if it handles them: -(void) timerBeginsIdling: (id)sender; -(void) timerContinuesIdling: (id)sender; -(void) timerFinishedIdling: (id)sender; @endDownload Archive
Compatible with:
- Mac OS X 10.3
- Mac OS X 10.4 PPC
- Mac OS X 10.4 Intel
- Mac OS X 10.5 PPC
- Mac OS X 10.5 Intel
Comments
Comment feed
