diff --git a/ChangeLog b/ChangeLog index 290915dd5..579d71938 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-01-16 Richard Frith-Macdonald + + * Source/NSAnimation.m: _gs_startAnimationInOwnLoop hopefully fixed + bug #25327 + 2009-01-12 Richard Frith-Macdonald * Source/NSTextStorage.m: Change to use new GC finalization API. diff --git a/Source/NSAnimation.m b/Source/NSAnimation.m index 1bb099921..b17988619 100644 --- a/Source/NSAnimation.m +++ b/Source/NSAnimation.m @@ -1132,12 +1132,28 @@ nsanimation_progressMarkSorter ( NSAnimationProgress first,NSAnimationProgress s - (void) _gs_startAnimationInOwnLoop { + NSRunLoop *loop; + NSDate *end; + [_animator setRunLoopModesForAnimating: [NSArray arrayWithObject: NSAnimationBlockingRunLoopMode]]; [_animator startAnimation]; - while ( [[NSRunLoop currentRunLoop] - runMode: NSAnimationBlockingRunLoopMode - beforeDate: [NSDate distantFuture]] ) + loop = [NSRunLoop currentRunLoop]; + end = [NSDate distantFuture]; + for (;;) + { + if ([loop runMode: NSAnimationBlockingRunLoopMode beforeDate: end] == NO) + { + NSDate *d; + + d = [loop limitDateForMode: NSAnimationBlockingRunLoopMode]; + if (d == nil) + { + break; // No inputs and no timers. + } + [NSThread sleepUntilDate: d]; + } + } /* do nothing */; }