You can create a custom NSWindowDelegate
to save the NSWindow
frame just before it's maximized:
@interface MyWindowDelegate : NSObject {
@private
NSRect m_maximizedFrame;
NSRect m_restoredFrame;
}
- (NSRect)windowWillUseStandardFrame:(NSWindow*)window
defaultFrame:(NSRect)newFrame
{
// Save the expected frame when the window is maximized
m_maximizedFrame = newFrame;
return newFrame;
}
- (BOOL)windowShouldZoom:(NSWindow*)window
toFrame:(NSRect)newFrame
{
// The NSWindow is going to be maximized...
if (NSEqualRects(newFrame, m_maximizedFrame)) {
// Save the frame before it's maximized
m_restoredFrame = [window frame];
}
return YES;
}
@end
The m_restoredFrame
will be valid only if the window is not resized after that (i.e. [window isZoomed]
must be true). I'm not sure if there is a better way.
setFrameAutosaveName
: developer.apple.com/library/mac/documentation/Cocoa/Conceptual/… – l'L'l