diff --git a/ChangeLog b/ChangeLog index 94b47e3cb..a8d1e9b32 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-10-31 Fred Kiefer + + * Source/NSTabView.m (-dealloc): Reset _selected to nil at top of dealloc. + * Source/NSBox.m(-drawRect:, -initWithCoder:): Implement + transparent handling for custom boxes. + Patch by Marcian Lytwyn + * Source/NSTabView.m (-selectTabViewItem:): Remove duplicated code. + * Source/NSTabView.m (-removeTabViewItem:): Retain the item while + removing it. + 2012-10-26 German A. Arias * Source/GSThemeMenu.m (-setMenu:forWindow:): Revert last change. After diff --git a/Source/NSBox.m b/Source/NSBox.m index f004c3227..f0eec216f 100644 --- a/Source/NSBox.m +++ b/Source/NSBox.m @@ -457,7 +457,14 @@ rect = NSIntersectionRect(_bounds, rect); if (_box_type == NSBoxCustom) { - color = _fill_color; + if (_transparent) + { + color = [NSColor clearColor]; + } + else + { + color = _fill_color; + } } else { @@ -582,7 +589,7 @@ [aCoder encodeInt: [self borderType] forKey: @"NSBorderType"]; [aCoder encodeInt: [self boxType] forKey: @"NSBoxType"]; [aCoder encodeInt: [self titlePosition] forKey: @"NSTitlePosition"]; - [aCoder encodeBool: _transparent forKey: @"NSTransparent"]; + [aCoder encodeBool: _transparent forKey: @"NSFullyTransparent"]; [aCoder encodeSize: [self contentViewMargins] forKey: @"NSOffsets"]; } else @@ -623,9 +630,14 @@ } if ([aDecoder containsValueForKey: @"NSTransparent"]) { + // On Apple this is always NO, we keep it for old GNUstep archives _transparent = [aDecoder decodeBoolForKey: @"NSTransparent"]; } - if ([aDecoder containsValueForKey: @"NSOffsets"]) + if ([aDecoder containsValueForKey: @"NSFullyTransparent"]) + { + _transparent = [aDecoder decodeBoolForKey: @"NSFullyTransparent"]; + } + if ([aDecoder containsValueForKey: @"NSOffsets"]) { [self setContentViewMargins: [aDecoder decodeSizeForKey: @"NSOffsets"]]; } diff --git a/Source/NSTabView.m b/Source/NSTabView.m index 87eaaceb2..9f3d4028a 100644 --- a/Source/NSTabView.m +++ b/Source/NSTabView.m @@ -86,11 +86,11 @@ - (void) dealloc { - RELEASE(_items); - RELEASE(_font); // Reset the _selected attribute to prevent crash when -dealloc calls // -setNextKeyView: _selected = nil; + RELEASE(_items); + RELEASE(_font); [super dealloc]; } @@ -139,8 +139,9 @@ if (i == NSNotFound) return; + RETAIN(tabViewItem); // Do this BEFORE removing from array...in case it gets released... - [tabViewItem _setTabView:nil]; + [tabViewItem _setTabView: nil]; [_items removeObjectAtIndex: i]; if (tabViewItem == _selected) @@ -156,6 +157,7 @@ [self selectTabViewItem: [_items objectAtIndex: newIndex]]; } } + RELEASE(tabViewItem); if ([_delegate respondsToSelector: @selector(tabViewDidChangeNumberOfTabViewItems:)]) { @@ -237,14 +239,14 @@ BOOL canSelect = YES; NSView *selectedView = nil; - if ([_delegate respondsToSelector: @selector(tabView: shouldSelectTabViewItem:)]) + if ([_delegate respondsToSelector: @selector(tabView:shouldSelectTabViewItem:)]) { canSelect = [_delegate tabView: self shouldSelectTabViewItem: tabViewItem]; } if (canSelect) { - if ([_delegate respondsToSelector: @selector(tabView: willSelectTabViewItem:)]) + if ([_delegate respondsToSelector: @selector(tabView:willSelectTabViewItem:)]) { [_delegate tabView: self willSelectTabViewItem: tabViewItem]; } @@ -256,21 +258,11 @@ /* NB: If [_selected view] is nil this does nothing, which is fine. */ [[_selected view] removeFromSuperview]; - _selected = nil; - } - - if ([_delegate respondsToSelector: - @selector(tabView: willSelectTabViewItem:)]) - { - [_delegate tabView: self willSelectTabViewItem: tabViewItem]; } _selected = tabViewItem; - _selected_item = [_items indexOfObject: _selected]; [_selected _setTabState: NSSelectedTab]; - selectedView = [_selected view]; - if (selectedView != nil) { NSView *firstResponder; @@ -296,7 +288,7 @@ [self setNeedsDisplay: YES]; if ([_delegate respondsToSelector: - @selector(tabView: didSelectTabViewItem:)]) + @selector(tabView:didSelectTabViewItem:)]) { [_delegate tabView: self didSelectTabViewItem: _selected]; }