mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-05-31 20:00:48 +00:00
Full support for view hiding.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@25775 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
53bd65a477
commit
151e2f87f7
3 changed files with 81 additions and 17 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2007-12-22 Fred Kiefer <FredKiefer@gmx.de>
|
||||||
|
|
||||||
|
* Source/NSView.m (-visibleRect:, -setHidden:, -hitTest:): Full
|
||||||
|
support for hidding.
|
||||||
|
* Source/NSWindow.m (-_checkCursorRectangles:forEvent:,
|
||||||
|
-_checkTrackingRectangles:forEvent:): Ignore hidden views.
|
||||||
|
|
||||||
2007-12-19 Richard Frith-Macdonald <rfm@gnu.org>
|
2007-12-19 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Tools/gopen.m: slight tidyup, improve comments,no functional changes.
|
* Tools/gopen.m: slight tidyup, improve comments,no functional changes.
|
||||||
|
|
|
@ -2466,6 +2466,11 @@ convert_rect_using_matrices(NSRect aRect, NSAffineTransform *matrix1,
|
||||||
|
|
||||||
- (NSRect) visibleRect
|
- (NSRect) visibleRect
|
||||||
{
|
{
|
||||||
|
if ([self isHiddenOrHasHiddenAncestor])
|
||||||
|
{
|
||||||
|
return NSZeroRect;
|
||||||
|
}
|
||||||
|
|
||||||
if (_coordinates_valid == NO)
|
if (_coordinates_valid == NO)
|
||||||
{
|
{
|
||||||
[self _rebuildCoordinates];
|
[self _rebuildCoordinates];
|
||||||
|
@ -2700,7 +2705,48 @@ in the main thread.
|
||||||
*/
|
*/
|
||||||
- (void) setHidden: (BOOL)flag
|
- (void) setHidden: (BOOL)flag
|
||||||
{
|
{
|
||||||
|
id view;
|
||||||
|
|
||||||
|
if (_is_hidden == flag)
|
||||||
|
return;
|
||||||
|
|
||||||
_is_hidden = flag;
|
_is_hidden = flag;
|
||||||
|
|
||||||
|
if (_is_hidden)
|
||||||
|
{
|
||||||
|
for (view = [_window firstResponder];
|
||||||
|
view != nil && [view respondsToSelector: @selector(superview)];
|
||||||
|
view = [view superview])
|
||||||
|
{
|
||||||
|
if (view == self)
|
||||||
|
{
|
||||||
|
[_window makeFirstResponder: [self nextValidKeyView]];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_rFlags.has_draginfo)
|
||||||
|
{
|
||||||
|
if (_window != nil)
|
||||||
|
{
|
||||||
|
NSArray *t = GSGetDragTypes(self);
|
||||||
|
|
||||||
|
[GSDisplayServer removeDragTypes: t fromWindow: _window];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (_rFlags.has_draginfo)
|
||||||
|
{
|
||||||
|
if (_window != nil)
|
||||||
|
{
|
||||||
|
NSArray *t = GSGetDragTypes(self);
|
||||||
|
|
||||||
|
[GSDisplayServer addDragTypes: t toWindow: _window];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
[self setNeedsDisplay: YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isHidden
|
- (BOOL) isHidden
|
||||||
|
@ -3134,13 +3180,18 @@ static NSView* findByTag(NSView *view, int aTag, unsigned *level)
|
||||||
ie. if we're the top-level view in a window.
|
ie. if we're the top-level view in a window.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if ([self isHidden])
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
if (_is_rotated_or_scaled_from_base)
|
if (_is_rotated_or_scaled_from_base)
|
||||||
{
|
{
|
||||||
p = [self convertPoint: aPoint fromView: _super_view];
|
p = [self convertPoint: aPoint fromView: _super_view];
|
||||||
if (!NSPointInRect (p, _bounds))
|
if (!NSPointInRect (p, _bounds))
|
||||||
{
|
{
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (_super_view && ![_super_view mouse: aPoint inRect: _frame])
|
else if (_super_view && ![_super_view mouse: aPoint inRect: _frame])
|
||||||
{
|
{
|
||||||
|
@ -3155,19 +3206,19 @@ static NSView* findByTag(NSView *view, int aTag, unsigned *level)
|
||||||
{
|
{
|
||||||
count = [_sub_views count];
|
count = [_sub_views count];
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
{
|
{
|
||||||
NSView *array[count];
|
NSView *array[count];
|
||||||
|
|
||||||
[_sub_views getObjects: array];
|
[_sub_views getObjects: array];
|
||||||
|
|
||||||
while (count > 0)
|
while (count > 0)
|
||||||
{
|
{
|
||||||
w = array[--count];
|
w = array[--count];
|
||||||
v = [w hitTest: p];
|
v = [w hitTest: p];
|
||||||
if (v)
|
if (v)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* mouse is either in the subview or within self
|
* mouse is either in the subview or within self
|
||||||
|
|
|
@ -3302,7 +3302,10 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
[sb getObjects: subs];
|
[sb getObjects: subs];
|
||||||
for (i = 0; i < count; ++i)
|
for (i = 0; i < count; ++i)
|
||||||
(*ctImp)(self, ctSel, subs[i], theEvent);
|
{
|
||||||
|
if (![subs[i] isHidden])
|
||||||
|
(*ctImp)(self, ctSel, subs[i], theEvent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3389,7 +3392,10 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
[sb getObjects: subs];
|
[sb getObjects: subs];
|
||||||
for (i = 0; i < count; ++i)
|
for (i = 0; i < count; ++i)
|
||||||
(*ccImp)(self, ccSel, subs[i], theEvent);
|
{
|
||||||
|
if (![subs[i] isHidden])
|
||||||
|
(*ccImp)(self, ccSel, subs[i], theEvent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue