From 00f11f6d078edf6dc0b01da4854dcd0f88d33114 Mon Sep 17 00:00:00 2001 From: rfm Date: Fri, 16 Jan 2009 13:33:33 +0000 Subject: [PATCH] Fix bug #25327 git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@27609 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 5 +++++ Source/NSAnimation.m | 22 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) 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 */; }