X-Git-Url: http://git.ithinksw.org/ITKit.git/blobdiff_plain/94f93e907b2e3e32a2c23188dc8063f2a800e3e8..d89a0ca515b4db2cb0f4bbe6b7e4d709c5296eba:/ITCoreImageWindowEffect.m diff --git a/ITCoreImageWindowEffect.m b/ITCoreImageWindowEffect.m index 9fd49aa..ea68c84 100644 --- a/ITCoreImageWindowEffect.m +++ b/ITCoreImageWindowEffect.m @@ -14,6 +14,8 @@ - (void)setupEffect; @end +static BOOL _running = NO; + @implementation ITCoreImageWindowEffect + (NSString *)effectName @@ -96,6 +98,7 @@ [self setWindowVisibility:ITWindowVisibleState]; __idle = YES; + if ( __shouldReleaseWhenIdle ) { [self release]; } @@ -119,10 +122,10 @@ - (void)performVanish { - __idle = NO; + __idle = NO; - [self setWindowVisibility:ITWindowVanishingState]; - [self performVanishFromProgress:1.0 effectTime:_effectTime]; + [self setWindowVisibility:ITWindowVanishingState]; + [self performVanishFromProgress:1.0 effectTime:_effectTime]; } - (void)performVanishFromProgress:(float)progress effectTime:(float)time @@ -166,7 +169,7 @@ [self setWindowVisibility:ITWindowHiddenState]; __idle = YES; - + if ( __shouldReleaseWhenIdle ) { [self release]; } @@ -192,6 +195,12 @@ NSRect rippleRect = [_window frame]; NSRect screenRect = [[_window screen] frame]; + if (_running) { + //Short-circuit to avoid layering effects and crashing + return; + } + + _running = YES; _ripple = YES; rippleRect.origin.y = - (NSMaxY(rippleRect) - screenRect.size.height); @@ -259,6 +268,8 @@ [[_effectWindow contentView] release]; [_effectWindow release]; [pool release]; + + _running = NO; } @end