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;
@end
Download 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
