BTW, I didn't test this but mine is (translated from AP3 lib) like this, I think it's close to the specs.
- (void) setSubviews: (NSArray *)newSubviews { NSEnumerator *en; NSView* aView; NSMutableArray *uniqNew = [NSMutableArray array]; en = [newSubviews objectEnumerator]; while ((aView = [en nextObject])) { id supersub = [aView superview]; if (supersub != nil && supersub != self) { [NSException raise:NSInvalidArgumentException format:@"Superviews of new subviews must be either nil or receiver."]; } if ([uniqNew containsObject:aView]) { [NSException raise:NSInvalidArgumentException format:@"Duplicated new subviews."]; } if (NO == [_subviews containsObject:aView]) { [self addSubview:aView]; } [uniqNew addObject:aView]; } en = [_subviews objectEnumerator]; while ((aView = [en nextObject])) { if (NO == [newSubviews containsObject:aView]) { [aView removeFromSuperview]; } } ASSIGN(_subviews, uniqNew); //sorting } _______________________________________________ Gnustep-dev mailing list Gnustep-dev@gnu.org https://lists.gnu.org/mailman/listinfo/gnustep-dev