X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0b6d471427717055bcc483a244311687d603a0a6..fa28826dd3836d6d50c92ca8de1e97dd4c8cf3bc:/src/cocoa/timer.mm diff --git a/src/cocoa/timer.mm b/src/cocoa/timer.mm index 9cef73ce20..2dfe2cb30a 100644 --- a/src/cocoa/timer.mm +++ b/src/cocoa/timer.mm @@ -2,7 +2,7 @@ // Name: src/cocoa/timer.mm // Purpose: wxTimer for wxCocoa // Author: Ryan Norton -// Modified by: +// Modified by: David Elliott // Created: 2005-02-04 // RCS-ID: $Id$ // Copyright: (c) Ryan Norton @@ -36,16 +36,6 @@ IMPLEMENT_CLASS(wxTimer, wxTimerBase) -// ======================================================================== -// wxNSTimerDelegate -// ======================================================================== -@interface wxNSTimerDelegate : NSObject -{ -} - -- (void)onNotify:(NSTimer *)theTimer; -@end // interface wxNSTimerDelegate : NSObject - // ======================================================================== // wxNSTimerData // ======================================================================== @@ -54,27 +44,37 @@ IMPLEMENT_CLASS(wxTimer, wxTimerBase) wxTimer* m_timer; } -- (id)setTimer:(wxTimer*)theTimer; +- (id)init; +- (id)initWithWxTimer:(wxTimer*)theTimer; - (wxTimer*)timer; +- (void)onNotify:(NSTimer *)theTimer; @end // interface wxNSTimerData : NSObject @implementation wxNSTimerData : NSObject -- (id)setTimer:(wxTimer*)theTimer; +- (id)init { + if(!(self = [super init])) + return nil; + m_timer = NULL; + return self; +} + +- (id)initWithWxTimer:(wxTimer*)theTimer; +{ + if(!(self = [super init])) + return nil; m_timer = theTimer; return self; } + - (wxTimer*)timer { return m_timer; } -@end -@implementation wxNSTimerDelegate : NSObject - (void)onNotify:(NSTimer *)theTimer { - wxNSTimerData* theData = [theTimer userInfo]; - [theData timer]->Notify(); //wxTimerBase method + m_timer->Notify(); //wxTimerBase method } @end @@ -82,8 +82,6 @@ IMPLEMENT_CLASS(wxTimer, wxTimerBase) // wxTimer // ---------------------------------------------------------------------------- -const wxObjcAutoRefFromAlloc wxTimer::sm_cocoaDelegate = [[wxNSTimerDelegate alloc] init]; - wxTimer::~wxTimer() { Stop(); @@ -100,12 +98,14 @@ bool wxTimer::Start(int millisecs, bool oneShot) wxAutoNSAutoreleasePool thePool; + wxNSTimerData *timerData = [[wxNSTimerData alloc] initWithWxTimer:this]; m_cocoaNSTimer = [[NSTimer scheduledTimerWithTimeInterval: millisecs / 1000.0 //seconds - target: wxTimer::sm_cocoaDelegate + target: timerData selector: @selector(onNotify:) - userInfo: [[wxNSTimerData alloc] setTimer:this] + userInfo: nil repeats: oneShot == false] retain]; + [timerData release]; return IsRunning(); } @@ -114,9 +114,8 @@ void wxTimer::Stop() { if (m_cocoaNSTimer) { - NSObject* theUserInfo = [m_cocoaNSTimer userInfo]; + // FIXME: Is this safe to do if !isValid ? [m_cocoaNSTimer invalidate]; - [theUserInfo release]; [m_cocoaNSTimer release]; m_cocoaNSTimer = NULL; }