diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 8a2f6e43f..d133d41d0 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -466,12 +466,26 @@ CPTexturedBackgroundWindowMask return _platformWindow; } +/*! + Sets the platform window of the reciver. + This method will first close the reciever, + change the platform window, then reopen the window (if it was originally open). +*/ - (void)setPlatformWindow:(CPPlatformWindow)aPlatformWindow { - // FIXME: already visible. + var wasVisible = [self isVisible]; + + // we have to close it first, otherwise we get a DOM exception. + if (wasVisible) + [self close]; + _platformWindow = aPlatformWindow; + + if (wasVisible) + [self orderFront:self]; } + /*! @ignore */ diff --git a/Foundation/CPIndexPath.j b/Foundation/CPIndexPath.j index a7ee64137..720d859c8 100644 --- a/Foundation/CPIndexPath.j +++ b/Foundation/CPIndexPath.j @@ -83,6 +83,16 @@ return [_indexes objectAtIndex:position]; } +- (void)setIndexes:(CPArray)theIndexes +{ + _indexes = [theIndexes copy]; +} + +- (CPArray)indexes +{ + return [_indexes copy]; +} + #pragma mark - #pragma mark Modification @@ -93,7 +103,7 @@ - (CPIndexPath)indexPathByRemovingLastIndex { - return [CPIndexPath indexPathWithIndexes:_indexes length:[self length]]; + return [CPIndexPath indexPathWithIndexes:_indexes length:[self length] - 1]; } #pragma mark - diff --git a/Tests/Foundation/CPIndexPathTest.j b/Tests/Foundation/CPIndexPathTest.j index 4c85f9d30..49bc5a851 100644 --- a/Tests/Foundation/CPIndexPathTest.j +++ b/Tests/Foundation/CPIndexPathTest.j @@ -35,11 +35,23 @@ - (void)testIndexPathByRemovingLastIndex { - var ip = [indexPath indexes]; - [ip removeLastObject]; + // Keep removing indexes until the indexPath is empty + while ([indexPath length] > 0) + { + var expectedIndexes = [[indexPath indexes] copy]; + [expectedIndexes removeObject:[expectedIndexes lastObject]]; - [self assert:[CPIndexPath indexPathWithIndexes:ip] - equals:[indexPath indexPathByRemovingLastIndex]]; + indexPath = [indexPath indexPathByRemovingLastIndex]; + [self assert:[CPIndexPath indexPathWithIndexes:expectedIndexes] equals:indexPath]; + } +} + +- (void)testIndexes +{ + var newIndexes = [indexPath indexes]; + [newIndexes removeObjectAtIndex:0]; + + [self assert:[indexPath indexes] notEqual:newIndexes]; } - (void)testCompareThrowsOnNil