mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-06-04 15:20:41 +00:00
Misc updates to tidy NSWindow and to correct behavior on app activation
and deactivation. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@5192 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
947dcdb83f
commit
74a48160e6
10 changed files with 270 additions and 226 deletions
|
@ -37,6 +37,7 @@
|
||||||
#include <AppKit/NSMenuView.h>
|
#include <AppKit/NSMenuView.h>
|
||||||
#include <AppKit/PSOperators.h>
|
#include <AppKit/PSOperators.h>
|
||||||
#include <AppKit/NSWindow.h>
|
#include <AppKit/NSWindow.h>
|
||||||
|
#include <AppKit/NSPanel.h>
|
||||||
|
|
||||||
@class NSString;
|
@class NSString;
|
||||||
@class NSEvent;
|
@class NSEvent;
|
||||||
|
@ -44,7 +45,7 @@
|
||||||
@class NSMenuView;
|
@class NSMenuView;
|
||||||
@class NSMenuWindow;
|
@class NSMenuWindow;
|
||||||
|
|
||||||
@interface NSMenuWindow : NSWindow
|
@interface NSMenuWindow : NSPanel
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface NSMenu : NSObject <NSCoding, NSCopying>
|
@interface NSMenu : NSObject <NSCoding, NSCopying>
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
unsigned has_draginfo:1; /* View/window has drag types */
|
unsigned has_draginfo:1; /* View/window has drag types */
|
||||||
unsigned opaque_view:1;
|
unsigned opaque_view:1;
|
||||||
unsigned valid_rects:1; /* Some cursor rects are valid */
|
unsigned valid_rects:1; /* Some cursor rects are valid */
|
||||||
|
unsigned needs_display:1; /* window/view needs display */
|
||||||
} _rFlags;
|
} _rFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,31 +114,29 @@ extern NSSize NSTokenSize;
|
||||||
NSMutableArray *rectsBeingDrawn;
|
NSMutableArray *rectsBeingDrawn;
|
||||||
unsigned disable_flush_window;
|
unsigned disable_flush_window;
|
||||||
|
|
||||||
BOOL accepts_drag;
|
|
||||||
BOOL is_one_shot;
|
|
||||||
BOOL needs_display;
|
|
||||||
BOOL needs_flush;
|
|
||||||
BOOL is_autodisplay;
|
|
||||||
BOOL optimize_drawing;
|
|
||||||
BOOL views_need_display;
|
|
||||||
NSWindowDepth depth_limit;
|
NSWindowDepth depth_limit;
|
||||||
BOOL dynamic_depth_limit;
|
|
||||||
|
|
||||||
BOOL cursor_rects_enabled;
|
|
||||||
BOOL cursor_rects_valid;
|
|
||||||
|
|
||||||
BOOL visible;
|
|
||||||
BOOL is_key;
|
|
||||||
BOOL is_main;
|
|
||||||
BOOL is_edited;
|
|
||||||
BOOL is_released_when_closed;
|
|
||||||
BOOL is_miniaturized;
|
|
||||||
BOOL menu_exclude;
|
|
||||||
BOOL hides_on_deactivate;
|
|
||||||
BOOL accepts_mouse_moved;
|
|
||||||
|
|
||||||
NSWindowController *_windowController;
|
NSWindowController *_windowController;
|
||||||
|
|
||||||
|
struct GSWindowFlagsType {
|
||||||
|
unsigned accepts_drag:1;
|
||||||
|
unsigned is_one_shot:1;
|
||||||
|
unsigned needs_flush:1;
|
||||||
|
unsigned is_autodisplay:1;
|
||||||
|
unsigned optimize_drawing:1;
|
||||||
|
unsigned dynamic_depth_limit:1;
|
||||||
|
unsigned cursor_rects_enabled:1;
|
||||||
|
unsigned cursor_rects_valid:1;
|
||||||
|
unsigned visible:1;
|
||||||
|
unsigned is_key:1;
|
||||||
|
unsigned is_main:1;
|
||||||
|
unsigned is_edited:1;
|
||||||
|
unsigned is_released_when_closed:1;
|
||||||
|
unsigned is_miniaturized:1;
|
||||||
|
unsigned menu_exclude:1;
|
||||||
|
unsigned hides_on_deactivate:1;
|
||||||
|
unsigned accepts_mouse_moved:1;
|
||||||
|
} _f;
|
||||||
|
|
||||||
/* Reserved for back-end use */
|
/* Reserved for back-end use */
|
||||||
void *be_wind_reserved;
|
void *be_wind_reserved;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
static GSHelpManagerPanel* _GSsharedGSHelpPanel;
|
static GSHelpManagerPanel* _GSsharedGSHelpPanel;
|
||||||
|
|
||||||
+sharedHelpManagerPanel
|
+ (id) sharedHelpManagerPanel
|
||||||
{
|
{
|
||||||
if(!_GSsharedGSHelpPanel)
|
if(!_GSsharedGSHelpPanel)
|
||||||
_GSsharedGSHelpPanel = [[GSHelpManagerPanel alloc] init];
|
_GSsharedGSHelpPanel = [[GSHelpManagerPanel alloc] init];
|
||||||
|
@ -16,68 +16,67 @@ static GSHelpManagerPanel* _GSsharedGSHelpPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This window should not be destroyed... So we don't allow it to! */
|
/* This window should not be destroyed... So we don't allow it to! */
|
||||||
-retain
|
- (id) retain
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
-release
|
- (void) release
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) autorelease
|
||||||
{
|
{
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
-autorelease
|
- (id) init
|
||||||
{
|
{
|
||||||
return self;
|
NSScrollView *scrollView;
|
||||||
}
|
|
||||||
|
|
||||||
-init
|
|
||||||
{
|
|
||||||
NSScrollView* scrollView;
|
|
||||||
NSRect scrollViewRect = {{0, 0}, {470, 150}};
|
NSRect scrollViewRect = {{0, 0}, {470, 150}};
|
||||||
NSRect winRect = {{100, 100}, {470, 150}};
|
NSRect winRect = {{100, 100}, {470, 150}};
|
||||||
NSColor* backColor;
|
NSColor *backColor;
|
||||||
unsigned int style = NSTitledWindowMask | NSClosableWindowMask
|
unsigned int style = NSTitledWindowMask | NSClosableWindowMask
|
||||||
| NSMiniaturizableWindowMask | NSResizableWindowMask;
|
| NSMiniaturizableWindowMask | NSResizableWindowMask;
|
||||||
|
|
||||||
[self initWithContentRect:winRect
|
[self initWithContentRect: winRect
|
||||||
styleMask:style
|
styleMask: style
|
||||||
backing:NSBackingStoreRetained
|
backing: NSBackingStoreRetained
|
||||||
defer:NO];
|
defer: NO];
|
||||||
[self setRepresentedFilename: @"Help"];
|
[self setRepresentedFilename: @"Help"];
|
||||||
[self setDocumentEdited: NO];
|
[self setDocumentEdited: NO];
|
||||||
|
|
||||||
scrollView = [[NSScrollView alloc] initWithFrame:scrollViewRect];
|
scrollView = [[NSScrollView alloc] initWithFrame: scrollViewRect];
|
||||||
[scrollView setHasHorizontalScroller:NO];
|
[scrollView setHasHorizontalScroller: NO];
|
||||||
[scrollView setHasVerticalScroller:YES];
|
[scrollView setHasVerticalScroller: YES];
|
||||||
[scrollView setAutoresizingMask: NSViewHeightSizable];
|
[scrollView setAutoresizingMask: NSViewHeightSizable];
|
||||||
|
|
||||||
textView = [NSText new];
|
textView = [NSText new];
|
||||||
[textView setEditable: NO];
|
[textView setEditable: NO];
|
||||||
[textView setRichText: YES];
|
[textView setRichText: YES];
|
||||||
[textView setSelectable: YES];
|
[textView setSelectable: YES];
|
||||||
[textView setFrame:[[scrollView contentView] frame]];
|
[textView setFrame: [[scrollView contentView] frame]];
|
||||||
backColor = [NSColor colorWithCalibratedWhite:0.85 alpha:1.0]; // off white
|
backColor = [NSColor colorWithCalibratedWhite: 0.85 alpha: 1.0]; // off white
|
||||||
[textView setBackgroundColor:backColor];
|
[textView setBackgroundColor: backColor];
|
||||||
[scrollView setDocumentView:textView];
|
[scrollView setDocumentView: textView];
|
||||||
[[self contentView] addSubview: scrollView];
|
[[self contentView] addSubview: scrollView];
|
||||||
|
|
||||||
[self setTitle:@"Help"];
|
[self setTitle: @"Help"];
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)setHelpText: (NSAttributedString*) helpText
|
- (void) setHelpText: (NSAttributedString*) helpText
|
||||||
{
|
{
|
||||||
[textView setText: [helpText string]];
|
[textView setText: [helpText string]];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(BOOL) isFloatingPanel
|
- (BOOL) isFloatingPanel
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void) close
|
- (void) close
|
||||||
{
|
{
|
||||||
[NSApp stopModal];
|
[NSApp stopModal];
|
||||||
[super close];
|
[super close];
|
||||||
|
|
|
@ -107,9 +107,9 @@ NSApplication *NSApp = nil;
|
||||||
- (void) initDefaults
|
- (void) initDefaults
|
||||||
{
|
{
|
||||||
[super initDefaults];
|
[super initDefaults];
|
||||||
menu_exclude = YES; // Don't show in windows menu.
|
[self setExcludedFromWindowsMenu: YES];
|
||||||
|
[self setReleasedWhenClosed: NO];
|
||||||
window_level = NSDockWindowLevel;
|
window_level = NSDockWindowLevel;
|
||||||
is_released_when_closed = NO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
- (void) initDefaults
|
- (void) initDefaults
|
||||||
{
|
{
|
||||||
[super initDefaults];
|
[super initDefaults];
|
||||||
menu_exclude = YES; // Don't show in windows menu.
|
[self setExcludedFromWindowsMenu: YES];
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -182,16 +182,6 @@ static NSString* NSMenuLocationsKey = @"NSMenuLocations";
|
||||||
selector: @selector(_showTornOffMenuIfAny:)
|
selector: @selector(_showTornOffMenuIfAny:)
|
||||||
name: NSApplicationWillFinishLaunchingNotification
|
name: NSApplicationWillFinishLaunchingNotification
|
||||||
object: theApp];
|
object: theApp];
|
||||||
[defaultCenter addObserver: self
|
|
||||||
selector: @selector(_deactivate:)
|
|
||||||
name: NSApplicationWillResignActiveNotification
|
|
||||||
object: theApp];
|
|
||||||
[defaultCenter addObserver: self
|
|
||||||
selector: @selector(_activate:)
|
|
||||||
name: NSApplicationWillBecomeActiveNotification
|
|
||||||
object: theApp];
|
|
||||||
|
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -770,17 +760,6 @@ static NSString* NSMenuLocationsKey = @"NSMenuLocations";
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation NSMenu (GNUstepPrivate)
|
@implementation NSMenu (GNUstepPrivate)
|
||||||
- (void) _activate: (NSNotification*)notification
|
|
||||||
{
|
|
||||||
if (menu_is_visible)
|
|
||||||
[aWindow orderFrontRegardless];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) _deactivate: (NSNotification*)notification
|
|
||||||
{
|
|
||||||
if (menu_is_visible)
|
|
||||||
[aWindow orderOut:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)_showTornOffMenuIfAny: (NSNotification*)notification
|
- (void)_showTornOffMenuIfAny: (NSNotification*)notification
|
||||||
{
|
{
|
||||||
|
@ -971,6 +950,14 @@ NSArray* array;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (id) init
|
||||||
|
{
|
||||||
|
return [self initWithContentRect: NSZeroRect
|
||||||
|
styleMask: NSBorderlessWindowMask
|
||||||
|
backing: NSBackingStoreBuffered
|
||||||
|
defer: NO];
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL) canBecomeMainWindow
|
- (BOOL) canBecomeMainWindow
|
||||||
{
|
{
|
||||||
return NO;
|
return NO;
|
||||||
|
@ -981,14 +968,6 @@ NSArray* array;
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) initDefaults
|
|
||||||
{
|
|
||||||
[super initDefaults];
|
|
||||||
menu_exclude = YES; // Don't show in windows menu.
|
|
||||||
window_level = NSSubmenuWindowLevel;
|
|
||||||
is_released_when_closed = NO;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL) worksWhenModal
|
- (BOOL) worksWhenModal
|
||||||
{
|
{
|
||||||
return YES;
|
return YES;
|
||||||
|
|
|
@ -83,25 +83,12 @@
|
||||||
defer: NO];
|
defer: NO];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) initWithContentRect: (NSRect)contentRect
|
|
||||||
styleMask: (unsigned int)aStyle
|
|
||||||
backing: (NSBackingStoreType)bufferingType
|
|
||||||
defer: (BOOL)flag
|
|
||||||
screen: (NSScreen*)aScreen
|
|
||||||
{
|
|
||||||
self = [super initWithContentRect: contentRect
|
|
||||||
styleMask: aStyle
|
|
||||||
backing: bufferingType
|
|
||||||
defer: flag
|
|
||||||
screen: aScreen];
|
|
||||||
[self setReleasedWhenClosed: NO];
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void) initDefaults
|
- (void) initDefaults
|
||||||
{
|
{
|
||||||
[super initDefaults];
|
[super initDefaults];
|
||||||
menu_exclude = YES; // Don't show panels in windows menu.
|
[self setReleasedWhenClosed: NO];
|
||||||
|
[self setHidesOnDeactivate: YES];
|
||||||
|
[self setExcludedFromWindowsMenu: YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) canBecomeKeyWindow
|
- (BOOL) canBecomeKeyWindow
|
||||||
|
@ -156,7 +143,7 @@
|
||||||
return _becomesKeyOnlyIfNeeded;
|
return _becomesKeyOnlyIfNeeded;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setBecomesKeyOnlyIfNeeded: (BOOL)flag
|
- (void) setBecomesKeyOnlyIfNeeded: (BOOL)flag
|
||||||
{
|
{
|
||||||
_becomesKeyOnlyIfNeeded = flag;
|
_becomesKeyOnlyIfNeeded = flag;
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,7 +221,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
window = nil;
|
window = nil;
|
||||||
is_rotated_from_base = NO;
|
is_rotated_from_base = NO;
|
||||||
is_rotated_or_scaled_from_base = NO;
|
is_rotated_or_scaled_from_base = NO;
|
||||||
needs_display = YES;
|
_rFlags.needs_display = YES;
|
||||||
post_frame_changes = NO;
|
post_frame_changes = NO;
|
||||||
autoresize_subviews = YES;
|
autoresize_subviews = YES;
|
||||||
autoresizingMask = NSViewNotSizable;
|
autoresizingMask = NSViewNotSizable;
|
||||||
|
@ -1312,7 +1312,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
rect = [[window_t->rectsBeingDrawn lastObject] rectValue];
|
rect = [[window_t->rectsBeingDrawn lastObject] rectValue];
|
||||||
window_t->rectNeedingFlush =
|
window_t->rectNeedingFlush =
|
||||||
NSUnionRect(window_t->rectNeedingFlush, rect);
|
NSUnionRect(window_t->rectNeedingFlush, rect);
|
||||||
window_t->needs_flush = YES;
|
window_t->_f.needs_flush = YES;
|
||||||
}
|
}
|
||||||
[window_t->rectsBeingDrawn removeLastObject];
|
[window_t->rectsBeingDrawn removeLastObject];
|
||||||
[ctxt unlockFocusView: self needsFlush: YES ];
|
[ctxt unlockFocusView: self needsFlush: YES ];
|
||||||
|
@ -1346,7 +1346,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
|
|
||||||
- (void) displayIfNeeded
|
- (void) displayIfNeeded
|
||||||
{
|
{
|
||||||
if (needs_display)
|
if (_rFlags.needs_display)
|
||||||
{
|
{
|
||||||
if (_rFlags.opaque_view)
|
if (_rFlags.opaque_view)
|
||||||
{
|
{
|
||||||
|
@ -1380,7 +1380,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
|
|
||||||
- (void) displayIfNeededIgnoringOpacity
|
- (void) displayIfNeededIgnoringOpacity
|
||||||
{
|
{
|
||||||
if (needs_display)
|
if (_rFlags.needs_display)
|
||||||
{
|
{
|
||||||
NSRect rect;
|
NSRect rect;
|
||||||
|
|
||||||
|
@ -1405,7 +1405,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
|
|
||||||
- (void) displayIfNeededInRect: (NSRect)aRect
|
- (void) displayIfNeededInRect: (NSRect)aRect
|
||||||
{
|
{
|
||||||
if (needs_display)
|
if (_rFlags.needs_display)
|
||||||
{
|
{
|
||||||
if (_rFlags.opaque_view)
|
if (_rFlags.opaque_view)
|
||||||
{
|
{
|
||||||
|
@ -1427,7 +1427,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
if (!window)
|
if (!window)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (needs_display)
|
if (_rFlags.needs_display)
|
||||||
{
|
{
|
||||||
NSRect redrawRect;
|
NSRect redrawRect;
|
||||||
|
|
||||||
|
@ -1481,12 +1481,12 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
/*
|
/*
|
||||||
* hack the ivars of the subview directly for speed.
|
* hack the ivars of the subview directly for speed.
|
||||||
*/
|
*/
|
||||||
subview->needs_display = YES;
|
subview->_rFlags.needs_display = YES;
|
||||||
subview->invalidRect = NSUnionRect(subview->invalidRect,
|
subview->invalidRect = NSUnionRect(subview->invalidRect,
|
||||||
isect);
|
isect);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subview->needs_display)
|
if (subview->_rFlags.needs_display)
|
||||||
{
|
{
|
||||||
if (intersectCalculated == NO
|
if (intersectCalculated == NO
|
||||||
|| NSEqualRects(aRect, redrawRect) == NO)
|
|| NSEqualRects(aRect, redrawRect) == NO)
|
||||||
|
@ -1510,7 +1510,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
|| NSEqualRects(aRect, NSUnionRect(visibleRect, aRect)) == YES)
|
|| NSEqualRects(aRect, NSUnionRect(visibleRect, aRect)) == YES)
|
||||||
{
|
{
|
||||||
invalidRect = NSZeroRect;
|
invalidRect = NSZeroRect;
|
||||||
needs_display = NO;
|
_rFlags.needs_display = NO;
|
||||||
}
|
}
|
||||||
[window flushWindow];
|
[window flushWindow];
|
||||||
}
|
}
|
||||||
|
@ -1586,12 +1586,12 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
/*
|
/*
|
||||||
* hack the ivars of the subview directly for speed.
|
* hack the ivars of the subview directly for speed.
|
||||||
*/
|
*/
|
||||||
subview->needs_display = YES;
|
subview->_rFlags.needs_display = YES;
|
||||||
subview->invalidRect = NSUnionRect(subview->invalidRect,
|
subview->invalidRect = NSUnionRect(subview->invalidRect,
|
||||||
isect);
|
isect);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subview->needs_display)
|
if (subview->_rFlags.needs_display)
|
||||||
{
|
{
|
||||||
if (intersectCalculated == NO)
|
if (intersectCalculated == NO)
|
||||||
{
|
{
|
||||||
|
@ -1613,7 +1613,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
|| NSEqualRects(aRect, NSUnionRect(visibleRect, aRect)) == YES)
|
|| NSEqualRects(aRect, NSUnionRect(visibleRect, aRect)) == YES)
|
||||||
{
|
{
|
||||||
invalidRect = NSZeroRect;
|
invalidRect = NSZeroRect;
|
||||||
needs_display = NO;
|
_rFlags.needs_display = NO;
|
||||||
}
|
}
|
||||||
[window flushWindow];
|
[window flushWindow];
|
||||||
}
|
}
|
||||||
|
@ -1636,7 +1636,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
needs_display = NO;
|
_rFlags.needs_display = NO;
|
||||||
invalidRect = NSZeroRect;
|
invalidRect = NSZeroRect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1655,7 +1655,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
NSView *firstOpaque = [self opaqueAncestor];
|
NSView *firstOpaque = [self opaqueAncestor];
|
||||||
NSView *currentView = super_view;
|
NSView *currentView = super_view;
|
||||||
|
|
||||||
needs_display = YES;
|
_rFlags.needs_display = YES;
|
||||||
invalidRect = rect;
|
invalidRect = rect;
|
||||||
if (firstOpaque == self)
|
if (firstOpaque == self)
|
||||||
{
|
{
|
||||||
|
@ -1669,7 +1669,7 @@ GSSetDragTypes(NSView* obj, NSArray *types)
|
||||||
|
|
||||||
while (currentView)
|
while (currentView)
|
||||||
{
|
{
|
||||||
currentView->needs_display = YES;
|
currentView->_rFlags.needs_display = YES;
|
||||||
currentView = currentView->super_view;
|
currentView = currentView->super_view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2366,6 +2366,8 @@ static NSView* findByTag(NSView *view, int aTag, unsigned *level)
|
||||||
*/
|
*/
|
||||||
- (void) encodeWithCoder: (NSCoder*)aCoder
|
- (void) encodeWithCoder: (NSCoder*)aCoder
|
||||||
{
|
{
|
||||||
|
BOOL flag;
|
||||||
|
|
||||||
[super encodeWithCoder: aCoder];
|
[super encodeWithCoder: aCoder];
|
||||||
|
|
||||||
NSDebugLLog(@"NSView", @"NSView: start encoding\n");
|
NSDebugLLog(@"NSView", @"NSView: start encoding\n");
|
||||||
|
@ -2378,7 +2380,8 @@ static NSView* findByTag(NSView *view, int aTag, unsigned *level)
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_rotated_from_base];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_rotated_from_base];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL)
|
[aCoder encodeValueOfObjCType: @encode(BOOL)
|
||||||
at: &is_rotated_or_scaled_from_base];
|
at: &is_rotated_or_scaled_from_base];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &needs_display];
|
flag = _rFlags.needs_display;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &post_frame_changes];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &post_frame_changes];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &autoresize_subviews];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &autoresize_subviews];
|
||||||
[aCoder encodeValueOfObjCType: @encode(unsigned int) at: &autoresizingMask];
|
[aCoder encodeValueOfObjCType: @encode(unsigned int) at: &autoresizingMask];
|
||||||
|
@ -2389,6 +2392,8 @@ static NSView* findByTag(NSView *view, int aTag, unsigned *level)
|
||||||
|
|
||||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
|
BOOL flag;
|
||||||
|
|
||||||
[super initWithCoder: aDecoder];
|
[super initWithCoder: aDecoder];
|
||||||
|
|
||||||
NSDebugLLog(@"NSView", @"NSView: start decoding\n");
|
NSDebugLLog(@"NSView", @"NSView: start decoding\n");
|
||||||
|
@ -2401,7 +2406,8 @@ static NSView* findByTag(NSView *view, int aTag, unsigned *level)
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_rotated_from_base];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_rotated_from_base];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL)
|
[aDecoder decodeValueOfObjCType: @encode(BOOL)
|
||||||
at: &is_rotated_or_scaled_from_base];
|
at: &is_rotated_or_scaled_from_base];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &needs_display];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_rFlags.needs_display = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &post_frame_changes];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &post_frame_changes];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &autoresize_subviews];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &autoresize_subviews];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(unsigned int) at: &autoresizingMask];
|
[aDecoder decodeValueOfObjCType: @encode(unsigned int) at: &autoresizingMask];
|
||||||
|
@ -2482,7 +2488,7 @@ static NSView* findByTag(NSView *view, int aTag, unsigned *level)
|
||||||
|
|
||||||
- (BOOL) needsDisplay
|
- (BOOL) needsDisplay
|
||||||
{
|
{
|
||||||
return needs_display;
|
return _rFlags.needs_display;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (int) tag
|
- (int) tag
|
||||||
|
|
|
@ -289,8 +289,8 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
[self setNextResponder: NSApp];
|
[self setNextResponder: NSApp];
|
||||||
|
|
||||||
cursor_rects_enabled = YES;
|
_f.cursor_rects_enabled = YES;
|
||||||
cursor_rects_valid = NO;
|
_f.cursor_rects_valid = NO;
|
||||||
|
|
||||||
/* Create the content view */
|
/* Create the content view */
|
||||||
cframe.origin = NSZeroPoint;
|
cframe.origin = NSZeroPoint;
|
||||||
|
@ -389,7 +389,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
id old = represented_filename;
|
id old = represented_filename;
|
||||||
|
|
||||||
ASSIGN(represented_filename, aString);
|
ASSIGN(represented_filename, aString);
|
||||||
if (menu_exclude == NO
|
if (_f.menu_exclude == NO
|
||||||
&& ((represented_filename != nil && old == nil)
|
&& ((represented_filename != nil && old == nil)
|
||||||
|| (represented_filename == nil && old != nil)))
|
|| (represented_filename == nil && old != nil)))
|
||||||
{
|
{
|
||||||
|
@ -440,7 +440,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (BOOL) isOneShot
|
- (BOOL) isOneShot
|
||||||
{
|
{
|
||||||
return is_one_shot;
|
return _f.is_one_shot;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setBackingType: (NSBackingStoreType)type
|
- (void) setBackingType: (NSBackingStoreType)type
|
||||||
|
@ -450,7 +450,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (void) setOneShot: (BOOL)flag
|
- (void) setOneShot: (BOOL)flag
|
||||||
{
|
{
|
||||||
is_one_shot = flag;
|
_f.is_one_shot = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (int) windowNumber
|
- (int) windowNumber
|
||||||
|
@ -481,11 +481,11 @@ static NSMapTable* windowmaps = NULL;
|
||||||
BOOL isDoc = NO;
|
BOOL isDoc = NO;
|
||||||
|
|
||||||
ASSIGN(miniaturized_title, title);
|
ASSIGN(miniaturized_title, title);
|
||||||
if (is_miniaturized == NO)
|
if (_f.is_miniaturized == NO)
|
||||||
title = window_title;
|
title = window_title;
|
||||||
if ([title isEqual: represented_filename])
|
if ([title isEqual: represented_filename])
|
||||||
isDoc = YES;
|
isDoc = YES;
|
||||||
if (menu_exclude == NO)
|
if (_f.menu_exclude == NO)
|
||||||
[NSApp changeWindowsItem: self
|
[NSApp changeWindowsItem: self
|
||||||
title: title
|
title: title
|
||||||
filename: isDoc];
|
filename: isDoc];
|
||||||
|
@ -552,7 +552,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
{
|
{
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
is_key = YES;
|
_f.is_key = YES;
|
||||||
[self resetCursorRects];
|
[self resetCursorRects];
|
||||||
[nc postNotificationName: NSWindowDidBecomeKeyNotification object: self];
|
[nc postNotificationName: NSWindowDidBecomeKeyNotification object: self];
|
||||||
}
|
}
|
||||||
|
@ -561,7 +561,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
{
|
{
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
is_main = YES;
|
_f.is_main = YES;
|
||||||
[nc postNotificationName: NSWindowDidBecomeMainNotification object: self];
|
[nc postNotificationName: NSWindowDidBecomeMainNotification object: self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -577,27 +577,27 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (BOOL) hidesOnDeactivate
|
- (BOOL) hidesOnDeactivate
|
||||||
{
|
{
|
||||||
return hides_on_deactivate;
|
return _f.hides_on_deactivate;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isKeyWindow
|
- (BOOL) isKeyWindow
|
||||||
{
|
{
|
||||||
return is_key;
|
return _f.is_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isMainWindow
|
- (BOOL) isMainWindow
|
||||||
{
|
{
|
||||||
return is_main;
|
return _f.is_main;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isMiniaturized
|
- (BOOL) isMiniaturized
|
||||||
{
|
{
|
||||||
return is_miniaturized;
|
return _f.is_miniaturized;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isVisible
|
- (BOOL) isVisible
|
||||||
{
|
{
|
||||||
return visible;
|
return _f.visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (int) level
|
- (int) level
|
||||||
|
@ -667,7 +667,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
{
|
{
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
is_key = NO;
|
_f.is_key = NO;
|
||||||
[self discardCursorRects];
|
[self discardCursorRects];
|
||||||
[nc postNotificationName: NSWindowDidResignKeyNotification object: self];
|
[nc postNotificationName: NSWindowDidResignKeyNotification object: self];
|
||||||
}
|
}
|
||||||
|
@ -676,13 +676,55 @@ static NSMapTable* windowmaps = NULL;
|
||||||
{
|
{
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
is_main = NO;
|
_f.is_main = NO;
|
||||||
[nc postNotificationName: NSWindowDidResignMainNotification object: self];
|
[nc postNotificationName: NSWindowDidResignMainNotification object: self];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) _appWillBecomeActive: (NSNotification*)aNotification
|
||||||
|
{
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
[nc removeObserver: self
|
||||||
|
name: NSApplicationWillBecomeActiveNotification
|
||||||
|
object: NSApp];
|
||||||
|
[self orderFrontRegardless];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) _appWillResignActive: (NSNotification*)aNotification
|
||||||
|
{
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
if (_f.visible)
|
||||||
|
{
|
||||||
|
[nc addObserver: self
|
||||||
|
selector: @selector(_appWillBecomeActive:)
|
||||||
|
name: NSApplicationWillBecomeActiveNotification
|
||||||
|
object: NSApp];
|
||||||
|
[self orderOut: self];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void) setHidesOnDeactivate: (BOOL)flag
|
- (void) setHidesOnDeactivate: (BOOL)flag
|
||||||
{
|
{
|
||||||
hides_on_deactivate = flag;
|
if (flag != _f.hides_on_deactivate)
|
||||||
|
{
|
||||||
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
|
if (flag == YES)
|
||||||
|
{
|
||||||
|
[nc addObserver: self
|
||||||
|
selector: @selector(_appWillResignActive:)
|
||||||
|
name: NSApplicationWillResignActiveNotification
|
||||||
|
object: NSApp];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
[nc removeObserver: self
|
||||||
|
name: NSApplicationWillResignActiveNotification
|
||||||
|
object: NSApp];
|
||||||
|
}
|
||||||
|
_f.hides_on_deactivate = flag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setLevel: (int)newLevel
|
- (void) setLevel: (int)newLevel
|
||||||
|
@ -865,7 +907,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (void) display
|
- (void) display
|
||||||
{
|
{
|
||||||
needs_display = NO;
|
_rFlags.needs_display = NO;
|
||||||
if ((!first_responder) || (first_responder == self))
|
if ((!first_responder) || (first_responder == self))
|
||||||
if (_initial_first_responder)
|
if (_initial_first_responder)
|
||||||
[self makeFirstResponder: _initial_first_responder];
|
[self makeFirstResponder: _initial_first_responder];
|
||||||
|
@ -882,10 +924,10 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (void) displayIfNeeded
|
- (void) displayIfNeeded
|
||||||
{
|
{
|
||||||
if (needs_display)
|
if (_rFlags.needs_display)
|
||||||
{
|
{
|
||||||
[[content_view superview] displayIfNeeded];
|
[[content_view superview] displayIfNeeded];
|
||||||
needs_display = NO;
|
_rFlags.needs_display = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,7 +938,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
/*
|
/*
|
||||||
* if autodisplay is enabled and window display
|
* if autodisplay is enabled and window display
|
||||||
*/
|
*/
|
||||||
if (is_autodisplay && needs_display)
|
if (_f.is_autodisplay && _rFlags.needs_display)
|
||||||
{
|
{
|
||||||
[self disableFlushWindow];
|
[self disableFlushWindow];
|
||||||
[self displayIfNeeded];
|
[self displayIfNeeded];
|
||||||
|
@ -909,9 +951,9 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (void) flushWindowIfNeeded
|
- (void) flushWindowIfNeeded
|
||||||
{
|
{
|
||||||
if (disable_flush_window == 0 && needs_flush == YES)
|
if (disable_flush_window == 0 && _f.needs_flush == YES)
|
||||||
{
|
{
|
||||||
needs_flush = NO;
|
_f.needs_flush = NO;
|
||||||
[self flushWindow];
|
[self flushWindow];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -930,7 +972,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
if (disable_flush_window) // if flushWindow is called
|
if (disable_flush_window) // if flushWindow is called
|
||||||
{ // while flush is disabled
|
{ // while flush is disabled
|
||||||
needs_flush = YES; // mark self as needing a
|
_f.needs_flush = YES; // mark self as needing a
|
||||||
return; // flush, then return
|
return; // flush, then return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,7 +982,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
{
|
{
|
||||||
if ([rectsBeingDrawn count] == 0)
|
if ([rectsBeingDrawn count] == 0)
|
||||||
{
|
{
|
||||||
needs_flush = NO;
|
_f.needs_flush = NO;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -959,7 +1001,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
NSMinX(rectNeedingFlush), NSMinY(rectNeedingFlush),
|
NSMinX(rectNeedingFlush), NSMinY(rectNeedingFlush),
|
||||||
NSWidth(rectNeedingFlush), NSHeight(rectNeedingFlush),
|
NSWidth(rectNeedingFlush), NSHeight(rectNeedingFlush),
|
||||||
window_num);
|
window_num);
|
||||||
needs_flush = NO;
|
_f.needs_flush = NO;
|
||||||
rectNeedingFlush = NSZeroRect;
|
rectNeedingFlush = NSZeroRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -973,7 +1015,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (BOOL) isAutodisplay
|
- (BOOL) isAutodisplay
|
||||||
{
|
{
|
||||||
return is_autodisplay;
|
return _f.is_autodisplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isFlushWindowDisabled
|
- (BOOL) isFlushWindowDisabled
|
||||||
|
@ -983,7 +1025,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (void) setAutodisplay: (BOOL)flag
|
- (void) setAutodisplay: (BOOL)flag
|
||||||
{
|
{
|
||||||
is_autodisplay = flag;
|
_f.is_autodisplay = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) _handleWindowNeedsDisplay: (id)bogus
|
- (void) _handleWindowNeedsDisplay: (id)bogus
|
||||||
|
@ -993,7 +1035,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (void) setViewsNeedDisplay: (BOOL)flag
|
- (void) setViewsNeedDisplay: (BOOL)flag
|
||||||
{
|
{
|
||||||
needs_display = flag;
|
_rFlags.needs_display = flag;
|
||||||
if (flag)
|
if (flag)
|
||||||
{
|
{
|
||||||
[NSApp setWindowsNeedUpdate: YES];
|
[NSApp setWindowsNeedUpdate: YES];
|
||||||
|
@ -1018,12 +1060,12 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (BOOL) viewsNeedDisplay
|
- (BOOL) viewsNeedDisplay
|
||||||
{
|
{
|
||||||
return needs_display;
|
return _rFlags.needs_display;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) useOptimizedDrawing: (BOOL)flag
|
- (void) useOptimizedDrawing: (BOOL)flag
|
||||||
{
|
{
|
||||||
optimize_drawing = flag;
|
_f.optimize_drawing = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) canStoreColor
|
- (BOOL) canStoreColor
|
||||||
|
@ -1046,7 +1088,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (BOOL) hasDynamicDepthLimit
|
- (BOOL) hasDynamicDepthLimit
|
||||||
{
|
{
|
||||||
return dynamic_depth_limit;
|
return _f.dynamic_depth_limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSScreen *) screen
|
- (NSScreen *) screen
|
||||||
|
@ -1061,7 +1103,7 @@ static NSMapTable* windowmaps = NULL;
|
||||||
|
|
||||||
- (void) setDynamicDepthLimit: (BOOL)flag
|
- (void) setDynamicDepthLimit: (BOOL)flag
|
||||||
{
|
{
|
||||||
dynamic_depth_limit = flag;
|
_f.dynamic_depth_limit = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1069,12 +1111,12 @@ static NSMapTable* windowmaps = NULL;
|
||||||
*/
|
*/
|
||||||
- (BOOL) areCursorRectsEnabled
|
- (BOOL) areCursorRectsEnabled
|
||||||
{
|
{
|
||||||
return cursor_rects_enabled;
|
return _f.cursor_rects_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) disableCursorRects
|
- (void) disableCursorRects
|
||||||
{
|
{
|
||||||
cursor_rects_enabled = NO;
|
_f.cursor_rects_enabled = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1114,7 +1156,7 @@ discardCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
- (void) enableCursorRects
|
- (void) enableCursorRects
|
||||||
{
|
{
|
||||||
cursor_rects_enabled = YES;
|
_f.cursor_rects_enabled = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) invalidateCursorRectsForView: (NSView *)aView
|
- (void) invalidateCursorRectsForView: (NSView *)aView
|
||||||
|
@ -1124,7 +1166,7 @@ discardCursorRectsForView(NSView *theView)
|
||||||
[((NSViewPtr)aView)->cursor_rects
|
[((NSViewPtr)aView)->cursor_rects
|
||||||
makeObjectsPerformSelector: @selector(invalidate)];
|
makeObjectsPerformSelector: @selector(invalidate)];
|
||||||
((NSViewPtr)aView)->_rFlags.valid_rects = 0;
|
((NSViewPtr)aView)->_rFlags.valid_rects = 0;
|
||||||
cursor_rects_valid = NO;
|
_f.cursor_rects_valid = NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1159,7 +1201,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
{
|
{
|
||||||
[self discardCursorRects];
|
[self discardCursorRects];
|
||||||
resetCursorRectsForView([content_view superview]);
|
resetCursorRectsForView([content_view superview]);
|
||||||
cursor_rects_valid = YES;
|
_f.cursor_rects_valid = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1170,19 +1212,19 @@ resetCursorRectsForView(NSView *theView)
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If 'is_released_when_closed' then the window will be removed from the
|
* If '_f.is_released_when_closed' then the window will be removed from the
|
||||||
* global list of windows (causing it to be released) - so we must
|
* global list of windows (causing it to be released) - so we must
|
||||||
* bracket any work we do in a retain/release sequence in case that
|
* bracket any work we do in a retain/release sequence in case that
|
||||||
* removal takes place when we post the notification.
|
* removal takes place when we post the notification.
|
||||||
*/
|
*/
|
||||||
if (is_released_when_closed)
|
if (_f.is_released_when_closed)
|
||||||
RETAIN(self);
|
RETAIN(self);
|
||||||
|
|
||||||
[nc postNotificationName: NSWindowWillCloseNotification object: self];
|
[nc postNotificationName: NSWindowWillCloseNotification object: self];
|
||||||
[NSApp removeWindowsItem: self];
|
[NSApp removeWindowsItem: self];
|
||||||
[self orderOut: self];
|
[self orderOut: self];
|
||||||
|
|
||||||
if (is_released_when_closed)
|
if (_f.is_released_when_closed)
|
||||||
RELEASE(self);
|
RELEASE(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1190,7 +1232,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
{
|
{
|
||||||
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
|
||||||
|
|
||||||
is_miniaturized = NO;
|
_f.is_miniaturized = NO;
|
||||||
|
|
||||||
[self performDeminiaturize: self];
|
[self performDeminiaturize: self];
|
||||||
[nc postNotificationName: NSWindowDidDeminiaturizeNotification object: self];
|
[nc postNotificationName: NSWindowDidDeminiaturizeNotification object: self];
|
||||||
|
@ -1198,12 +1240,12 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
- (BOOL) isDocumentEdited
|
- (BOOL) isDocumentEdited
|
||||||
{
|
{
|
||||||
return is_edited;
|
return _f.is_edited;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL) isReleasedWhenClosed
|
- (BOOL) isReleasedWhenClosed
|
||||||
{
|
{
|
||||||
return is_released_when_closed;
|
return _f.is_released_when_closed;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) miniaturize: sender
|
- (void) miniaturize: sender
|
||||||
|
@ -1266,7 +1308,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
- (void) performMiniaturize: (id)sender
|
- (void) performMiniaturize: (id)sender
|
||||||
{
|
{
|
||||||
DPSminiwindow(GSCurrentContext(), window_num);
|
DPSminiwindow(GSCurrentContext(), window_num);
|
||||||
is_miniaturized = YES;
|
_f.is_miniaturized = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (int) resizeFlags
|
- (int) resizeFlags
|
||||||
|
@ -1276,10 +1318,10 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
- (void) setDocumentEdited: (BOOL)flag
|
- (void) setDocumentEdited: (BOOL)flag
|
||||||
{
|
{
|
||||||
if (is_edited != flag)
|
if (_f.is_edited != flag)
|
||||||
{
|
{
|
||||||
is_edited = flag;
|
_f.is_edited = flag;
|
||||||
if (menu_exclude == NO)
|
if (_f.menu_exclude == NO)
|
||||||
{
|
{
|
||||||
[NSApp updateWindowsItem: self];
|
[NSApp updateWindowsItem: self];
|
||||||
}
|
}
|
||||||
|
@ -1288,7 +1330,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
- (void) setReleasedWhenClosed: (BOOL)flag
|
- (void) setReleasedWhenClosed: (BOOL)flag
|
||||||
{
|
{
|
||||||
is_released_when_closed = flag;
|
_f.is_released_when_closed = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1296,7 +1338,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
*/
|
*/
|
||||||
- (BOOL) acceptsMouseMovedEvents
|
- (BOOL) acceptsMouseMovedEvents
|
||||||
{
|
{
|
||||||
return accepts_mouse_moved;
|
return _f.accepts_mouse_moved;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSEvent *) currentEvent
|
- (NSEvent *) currentEvent
|
||||||
|
@ -1448,7 +1490,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
- (void) setAcceptsMouseMovedEvents: (BOOL)flag
|
- (void) setAcceptsMouseMovedEvents: (BOOL)flag
|
||||||
{
|
{
|
||||||
accepts_mouse_moved = flag;
|
_f.accepts_mouse_moved = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) _checkTrackingRectangles: (NSView *)theView
|
- (void) _checkTrackingRectangles: (NSView *)theView
|
||||||
|
@ -1671,7 +1713,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
NSView *v;
|
NSView *v;
|
||||||
NSEventType type;
|
NSEventType type;
|
||||||
|
|
||||||
if (!cursor_rects_valid)
|
if (!_f.cursor_rects_valid)
|
||||||
{
|
{
|
||||||
[self resetCursorRects];
|
[self resetCursorRects];
|
||||||
}
|
}
|
||||||
|
@ -1684,7 +1726,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
if (first_responder != v)
|
if (first_responder != v)
|
||||||
{
|
{
|
||||||
[self makeFirstResponder: v];
|
[self makeFirstResponder: v];
|
||||||
if (is_key || [v acceptsFirstMouse: theEvent] == YES)
|
if (_f.is_key || [v acceptsFirstMouse: theEvent] == YES)
|
||||||
{
|
{
|
||||||
if([NSHelpManager isContextHelpModeActive])
|
if([NSHelpManager isContextHelpModeActive])
|
||||||
{
|
{
|
||||||
|
@ -1742,7 +1784,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
[v rightMouseDragged: theEvent];
|
[v rightMouseDragged: theEvent];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (accepts_mouse_moved)
|
if (_f.accepts_mouse_moved)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* If the window is set to accept mouse movements, we need to
|
* If the window is set to accept mouse movements, we need to
|
||||||
|
@ -1761,7 +1803,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
*/
|
*/
|
||||||
(*ctImp)(self, ctSel, content_view, theEvent);
|
(*ctImp)(self, ctSel, content_view, theEvent);
|
||||||
|
|
||||||
if (is_key)
|
if (_f.is_key)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* We need to go through all of the views, and if there is any with
|
* We need to go through all of the views, and if there is any with
|
||||||
|
@ -1873,13 +1915,13 @@ resetCursorRectsForView(NSView *theView)
|
||||||
if (!v)
|
if (!v)
|
||||||
v = content_view;
|
v = content_view;
|
||||||
dragInfo = [GSCurrentContext() _dragInfo];
|
dragInfo = [GSCurrentContext() _dragInfo];
|
||||||
if (_lastDragView && _lastDragView != v && accepts_drag)
|
if (_lastDragView && _lastDragView != v && _f.accepts_drag)
|
||||||
{
|
{
|
||||||
GSPerformVoidDragSelector(_lastDragView,
|
GSPerformVoidDragSelector(_lastDragView,
|
||||||
@selector(draggingExited:), dragInfo);
|
@selector(draggingExited:), dragInfo);
|
||||||
}
|
}
|
||||||
accepts_drag = GSViewAcceptsDrag(v, dragInfo);
|
_f.accepts_drag = GSViewAcceptsDrag(v, dragInfo);
|
||||||
if (_lastDragView != v && accepts_drag)
|
if (_lastDragView != v && _f.accepts_drag)
|
||||||
{
|
{
|
||||||
GSPerformDragSelector(v, @selector(draggingEntered:),
|
GSPerformDragSelector(v, @selector(draggingEntered:),
|
||||||
dragInfo, action);
|
dragInfo, action);
|
||||||
|
@ -1908,7 +1950,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
case GSAppKitDraggingExit:
|
case GSAppKitDraggingExit:
|
||||||
dragInfo = [GSCurrentContext() _dragInfo];
|
dragInfo = [GSCurrentContext() _dragInfo];
|
||||||
if (_lastDragView && accepts_drag)
|
if (_lastDragView && _f.accepts_drag)
|
||||||
{
|
{
|
||||||
GSPerformDragSelector(_lastDragView,
|
GSPerformDragSelector(_lastDragView,
|
||||||
@selector(draggingExited:), dragInfo,
|
@selector(draggingExited:), dragInfo,
|
||||||
|
@ -1917,7 +1959,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GSAppKitDraggingDrop:
|
case GSAppKitDraggingDrop:
|
||||||
if (_lastDragView && accepts_drag)
|
if (_lastDragView && _f.accepts_drag)
|
||||||
{
|
{
|
||||||
dragInfo = [GSCurrentContext() _dragInfo];
|
dragInfo = [GSCurrentContext() _dragInfo];
|
||||||
GSPerformDragSelector(_lastDragView,
|
GSPerformDragSelector(_lastDragView,
|
||||||
|
@ -2094,12 +2136,12 @@ resetCursorRectsForView(NSView *theView)
|
||||||
*/
|
*/
|
||||||
- (BOOL) isExcludedFromWindowsMenu
|
- (BOOL) isExcludedFromWindowsMenu
|
||||||
{
|
{
|
||||||
return menu_exclude;
|
return _f.menu_exclude;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) setExcludedFromWindowsMenu: (BOOL)flag
|
- (void) setExcludedFromWindowsMenu: (BOOL)flag
|
||||||
{
|
{
|
||||||
menu_exclude = flag;
|
_f.menu_exclude = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) validRequestorForSendType: (NSString *)sendType
|
- (id) validRequestorForSendType: (NSString *)sendType
|
||||||
|
@ -2385,6 +2427,8 @@ resetCursorRectsForView(NSView *theView)
|
||||||
*/
|
*/
|
||||||
- (void) encodeWithCoder: (NSCoder*)aCoder
|
- (void) encodeWithCoder: (NSCoder*)aCoder
|
||||||
{
|
{
|
||||||
|
BOOL flag;
|
||||||
|
|
||||||
[self setNextResponder: nil];
|
[self setNextResponder: nil];
|
||||||
|
|
||||||
[super encodeWithCoder: aCoder];
|
[super encodeWithCoder: aCoder];
|
||||||
|
@ -2398,13 +2442,19 @@ resetCursorRectsForView(NSView *theView)
|
||||||
[aCoder encodeObject: miniaturized_title];
|
[aCoder encodeObject: miniaturized_title];
|
||||||
[aCoder encodeObject: window_title];
|
[aCoder encodeObject: window_title];
|
||||||
[aCoder encodePoint: last_point];
|
[aCoder encodePoint: last_point];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &visible];
|
flag = _f.visible;
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_key];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_main];
|
flag = _f.is_key;
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_edited];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_miniaturized];
|
flag = _f.is_main;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
flag = _f.is_edited;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
flag = _f.is_miniaturized;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(unsigned) at: &style_mask];
|
[aCoder encodeValueOfObjCType: @encode(unsigned) at: &style_mask];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &menu_exclude];
|
flag = _f.menu_exclude;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
|
||||||
// Version 2
|
// Version 2
|
||||||
[aCoder encodeSize: minimum_size];
|
[aCoder encodeSize: minimum_size];
|
||||||
|
@ -2414,21 +2464,31 @@ resetCursorRectsForView(NSView *theView)
|
||||||
[aCoder encodeValueOfObjCType: @encode(NSBackingStoreType) at: &backing_type];
|
[aCoder encodeValueOfObjCType: @encode(NSBackingStoreType) at: &backing_type];
|
||||||
[aCoder encodeValueOfObjCType: @encode(int) at: &window_level];
|
[aCoder encodeValueOfObjCType: @encode(int) at: &window_level];
|
||||||
[aCoder encodeValueOfObjCType: @encode(unsigned) at: &disable_flush_window];
|
[aCoder encodeValueOfObjCType: @encode(unsigned) at: &disable_flush_window];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_one_shot];
|
flag = _f.is_one_shot;
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_autodisplay];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &optimize_drawing];
|
flag = _f.is_autodisplay;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
flag = _f.optimize_drawing;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(NSWindowDepth) at: &depth_limit];
|
[aCoder encodeValueOfObjCType: @encode(NSWindowDepth) at: &depth_limit];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &dynamic_depth_limit];
|
flag = _f.dynamic_depth_limit;
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &cursor_rects_enabled];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_released_when_closed];
|
flag = _f.cursor_rects_enabled;
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &hides_on_deactivate];
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &accepts_mouse_moved];
|
flag = _f.is_released_when_closed;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
flag = _f.hides_on_deactivate;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
flag = _f.accepts_mouse_moved;
|
||||||
|
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
|
||||||
NSDebugLog(@"NSWindow: finish encoding\n");
|
NSDebugLog(@"NSWindow: finish encoding\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) initWithCoder: (NSCoder*)aDecoder
|
- (id) initWithCoder: (NSCoder*)aDecoder
|
||||||
{
|
{
|
||||||
|
BOOL flag;
|
||||||
|
|
||||||
[super initWithCoder: aDecoder];
|
[super initWithCoder: aDecoder];
|
||||||
|
|
||||||
NSDebugLog(@"NSWindow: start decoding\n");
|
NSDebugLog(@"NSWindow: start decoding\n");
|
||||||
|
@ -2440,13 +2500,19 @@ resetCursorRectsForView(NSView *theView)
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &miniaturized_title];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &miniaturized_title];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(id) at: &window_title];
|
[aDecoder decodeValueOfObjCType: @encode(id) at: &window_title];
|
||||||
last_point = [aDecoder decodePoint];
|
last_point = [aDecoder decodePoint];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &visible];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_key];
|
_f.visible = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_main];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_edited];
|
_f.is_key = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_miniaturized];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.is_main = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.is_edited = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.is_miniaturized = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(unsigned) at: &style_mask];
|
[aDecoder decodeValueOfObjCType: @encode(unsigned) at: &style_mask];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &menu_exclude];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.menu_exclude = flag;
|
||||||
|
|
||||||
// Version 2
|
// Version 2
|
||||||
minimum_size = [aDecoder decodeSize];
|
minimum_size = [aDecoder decodeSize];
|
||||||
|
@ -2457,15 +2523,23 @@ resetCursorRectsForView(NSView *theView)
|
||||||
at: &backing_type];
|
at: &backing_type];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(int) at: &window_level];
|
[aDecoder decodeValueOfObjCType: @encode(int) at: &window_level];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(unsigned) at: &disable_flush_window];
|
[aDecoder decodeValueOfObjCType: @encode(unsigned) at: &disable_flush_window];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_one_shot];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_autodisplay];
|
_f.is_one_shot = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &optimize_drawing];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.is_autodisplay = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.optimize_drawing = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(NSWindowDepth) at: &depth_limit];
|
[aDecoder decodeValueOfObjCType: @encode(NSWindowDepth) at: &depth_limit];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &dynamic_depth_limit];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &cursor_rects_enabled];
|
_f.dynamic_depth_limit = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_released_when_closed];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &hides_on_deactivate];
|
_f.cursor_rects_enabled = flag;
|
||||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &accepts_mouse_moved];
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.is_released_when_closed = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.hides_on_deactivate = flag;
|
||||||
|
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &flag];
|
||||||
|
_f.accepts_mouse_moved = flag;
|
||||||
|
|
||||||
NSDebugLog(@"NSWindow: finish decoding\n");
|
NSDebugLog(@"NSWindow: finish decoding\n");
|
||||||
|
|
||||||
|
@ -2524,7 +2598,7 @@ resetCursorRectsForView(NSView *theView)
|
||||||
|
|
||||||
- (void) _setVisible: (BOOL)flag
|
- (void) _setVisible: (BOOL)flag
|
||||||
{
|
{
|
||||||
visible = flag;
|
_f.visible = flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) performDeminiaturize: sender {}
|
- (void) performDeminiaturize: sender {}
|
||||||
|
@ -2551,24 +2625,23 @@ resetCursorRectsForView(NSView *theView)
|
||||||
last_point = NSZeroPoint;
|
last_point = NSZeroPoint;
|
||||||
window_level = NSNormalWindowLevel;
|
window_level = NSNormalWindowLevel;
|
||||||
|
|
||||||
is_one_shot = NO;
|
|
||||||
needs_display = NO;
|
|
||||||
is_autodisplay = YES;
|
|
||||||
optimize_drawing = YES;
|
|
||||||
views_need_display = NO;
|
|
||||||
depth_limit = 8;
|
depth_limit = 8;
|
||||||
dynamic_depth_limit = YES;
|
|
||||||
cursor_rects_enabled = NO;
|
|
||||||
visible = NO;
|
|
||||||
is_key = NO;
|
|
||||||
is_main = NO;
|
|
||||||
is_edited = NO;
|
|
||||||
is_released_when_closed = YES;
|
|
||||||
is_miniaturized = NO;
|
|
||||||
disable_flush_window = 0;
|
disable_flush_window = 0;
|
||||||
menu_exclude = NO;
|
|
||||||
hides_on_deactivate = NO;
|
_f.is_one_shot = NO;
|
||||||
accepts_mouse_moved = NO;
|
_f.is_autodisplay = YES;
|
||||||
|
_f.optimize_drawing = YES;
|
||||||
|
_f.dynamic_depth_limit = YES;
|
||||||
|
_f.cursor_rects_enabled = NO;
|
||||||
|
_f.visible = NO;
|
||||||
|
_f.is_key = NO;
|
||||||
|
_f.is_main = NO;
|
||||||
|
_f.is_edited = NO;
|
||||||
|
_f.is_released_when_closed = YES;
|
||||||
|
_f.is_miniaturized = NO;
|
||||||
|
_f.menu_exclude = NO;
|
||||||
|
_f.hides_on_deactivate = NO;
|
||||||
|
_f.accepts_mouse_moved = NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id) cleanInit
|
- (id) cleanInit
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue