* 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 <marcian.lytwyn@advcsi.com>

* Source/NSTabView.m (-selectTabViewItem:): Remove duplicated
code.
* Source/NSTabView.m (-removeTabViewItem:): Retain the item
while removing it.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@35773 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
fredkiefer 2012-11-01 00:06:46 +00:00
parent 1a9eba9fa5
commit e04be1c03e
3 changed files with 33 additions and 19 deletions

View file

@ -1,3 +1,13 @@
2012-10-31 Fred Kiefer <FredKiefer@gmx.de>
* 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 <marcian.lytwyn@advcsi.com>
* Source/NSTabView.m (-selectTabViewItem:): Remove duplicated code.
* Source/NSTabView.m (-removeTabViewItem:): Retain the item while
removing it.
2012-10-26 German A. Arias <german@xelalug.org> 2012-10-26 German A. Arias <german@xelalug.org>
* Source/GSThemeMenu.m (-setMenu:forWindow:): Revert last change. After * Source/GSThemeMenu.m (-setMenu:forWindow:): Revert last change. After

View file

@ -457,7 +457,14 @@
rect = NSIntersectionRect(_bounds, rect); rect = NSIntersectionRect(_bounds, rect);
if (_box_type == NSBoxCustom) if (_box_type == NSBoxCustom)
{ {
color = _fill_color; if (_transparent)
{
color = [NSColor clearColor];
}
else
{
color = _fill_color;
}
} }
else else
{ {
@ -582,7 +589,7 @@
[aCoder encodeInt: [self borderType] forKey: @"NSBorderType"]; [aCoder encodeInt: [self borderType] forKey: @"NSBorderType"];
[aCoder encodeInt: [self boxType] forKey: @"NSBoxType"]; [aCoder encodeInt: [self boxType] forKey: @"NSBoxType"];
[aCoder encodeInt: [self titlePosition] forKey: @"NSTitlePosition"]; [aCoder encodeInt: [self titlePosition] forKey: @"NSTitlePosition"];
[aCoder encodeBool: _transparent forKey: @"NSTransparent"]; [aCoder encodeBool: _transparent forKey: @"NSFullyTransparent"];
[aCoder encodeSize: [self contentViewMargins] forKey: @"NSOffsets"]; [aCoder encodeSize: [self contentViewMargins] forKey: @"NSOffsets"];
} }
else else
@ -623,9 +630,14 @@
} }
if ([aDecoder containsValueForKey: @"NSTransparent"]) if ([aDecoder containsValueForKey: @"NSTransparent"])
{ {
// On Apple this is always NO, we keep it for old GNUstep archives
_transparent = [aDecoder decodeBoolForKey: @"NSTransparent"]; _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"]]; [self setContentViewMargins: [aDecoder decodeSizeForKey: @"NSOffsets"]];
} }

View file

@ -86,11 +86,11 @@
- (void) dealloc - (void) dealloc
{ {
RELEASE(_items);
RELEASE(_font);
// Reset the _selected attribute to prevent crash when -dealloc calls // Reset the _selected attribute to prevent crash when -dealloc calls
// -setNextKeyView: // -setNextKeyView:
_selected = nil; _selected = nil;
RELEASE(_items);
RELEASE(_font);
[super dealloc]; [super dealloc];
} }
@ -139,8 +139,9 @@
if (i == NSNotFound) if (i == NSNotFound)
return; return;
RETAIN(tabViewItem);
// Do this BEFORE removing from array...in case it gets released... // Do this BEFORE removing from array...in case it gets released...
[tabViewItem _setTabView:nil]; [tabViewItem _setTabView: nil];
[_items removeObjectAtIndex: i]; [_items removeObjectAtIndex: i];
if (tabViewItem == _selected) if (tabViewItem == _selected)
@ -156,6 +157,7 @@
[self selectTabViewItem: [_items objectAtIndex: newIndex]]; [self selectTabViewItem: [_items objectAtIndex: newIndex]];
} }
} }
RELEASE(tabViewItem);
if ([_delegate respondsToSelector: @selector(tabViewDidChangeNumberOfTabViewItems:)]) if ([_delegate respondsToSelector: @selector(tabViewDidChangeNumberOfTabViewItems:)])
{ {
@ -237,14 +239,14 @@
BOOL canSelect = YES; BOOL canSelect = YES;
NSView *selectedView = nil; NSView *selectedView = nil;
if ([_delegate respondsToSelector: @selector(tabView: shouldSelectTabViewItem:)]) if ([_delegate respondsToSelector: @selector(tabView:shouldSelectTabViewItem:)])
{ {
canSelect = [_delegate tabView: self shouldSelectTabViewItem: tabViewItem]; canSelect = [_delegate tabView: self shouldSelectTabViewItem: tabViewItem];
} }
if (canSelect) if (canSelect)
{ {
if ([_delegate respondsToSelector: @selector(tabView: willSelectTabViewItem:)]) if ([_delegate respondsToSelector: @selector(tabView:willSelectTabViewItem:)])
{ {
[_delegate tabView: self willSelectTabViewItem: tabViewItem]; [_delegate tabView: self willSelectTabViewItem: tabViewItem];
} }
@ -256,21 +258,11 @@
/* NB: If [_selected view] is nil this does nothing, which /* NB: If [_selected view] is nil this does nothing, which
is fine. */ is fine. */
[[_selected view] removeFromSuperview]; [[_selected view] removeFromSuperview];
_selected = nil;
}
if ([_delegate respondsToSelector:
@selector(tabView: willSelectTabViewItem:)])
{
[_delegate tabView: self willSelectTabViewItem: tabViewItem];
} }
_selected = tabViewItem; _selected = tabViewItem;
_selected_item = [_items indexOfObject: _selected];
[_selected _setTabState: NSSelectedTab]; [_selected _setTabState: NSSelectedTab];
selectedView = [_selected view]; selectedView = [_selected view];
if (selectedView != nil) if (selectedView != nil)
{ {
NSView *firstResponder; NSView *firstResponder;
@ -296,7 +288,7 @@
[self setNeedsDisplay: YES]; [self setNeedsDisplay: YES];
if ([_delegate respondsToSelector: if ([_delegate respondsToSelector:
@selector(tabView: didSelectTabViewItem:)]) @selector(tabView:didSelectTabViewItem:)])
{ {
[_delegate tabView: self didSelectTabViewItem: _selected]; [_delegate tabView: self didSelectTabViewItem: _selected];
} }