mirror of
https://github.com/textmate/textmate.git
synced 2026-01-21 04:38:13 -05:00
@@ -51,7 +51,7 @@ static BOOL IsInShouldTerminateEventLoop = NO;
|
||||
}
|
||||
@end
|
||||
|
||||
@interface DocumentController () <NSWindowDelegate, OakTabBarViewDelegate, OakTabBarViewDataSource, OakTextViewDelegate, OakFileBrowserDelegate, QLPreviewPanelDelegate, QLPreviewPanelDataSource>
|
||||
@interface DocumentController () <NSWindowDelegate, OakTabBarViewDelegate, OakTabBarViewDataSource, OakTextViewDelegate, OakFileBrowserDelegate, OakWindowFrameHelperDelegate, QLPreviewPanelDelegate, QLPreviewPanelDataSource>
|
||||
@property (nonatomic) ProjectLayoutView* layoutView;
|
||||
@property (nonatomic) OakTabBarView* tabBarView;
|
||||
@property (nonatomic) OakDocumentView* documentView;
|
||||
@@ -291,10 +291,11 @@ namespace
|
||||
|
||||
- (void)windowWillClose:(NSNotification*)aNotification
|
||||
{
|
||||
self.documents = std::vector<document::document_ptr>();
|
||||
self.selectedDocument = document::document_ptr();
|
||||
self.window.delegate = nil;
|
||||
self.identifier = nil; // This removes us from AllControllers and causes a release
|
||||
self.documents = std::vector<document::document_ptr>();
|
||||
self.selectedDocument = document::document_ptr();
|
||||
self.window.delegate = nil;
|
||||
self.fileBrowserVisible = NO; // Make window frame small as we no longer respond to savableWindowFrame
|
||||
self.identifier = nil; // This removes us from AllControllers and causes a release
|
||||
}
|
||||
|
||||
- (void)showWindow:(id)sender
|
||||
@@ -1524,7 +1525,7 @@ namespace
|
||||
self.fileBrowser.view.nextResponder = self.fileBrowser;
|
||||
}
|
||||
|
||||
if(!self.disableFileBrowserWindowResize && [self.window isVisible] && ([self.window styleMask] & NSFullScreenWindowMask) != NSFullScreenWindowMask)
|
||||
if(!self.disableFileBrowserWindowResize && ([self.window styleMask] & NSFullScreenWindowMask) != NSFullScreenWindowMask)
|
||||
{
|
||||
NSRect windowFrame = self.window.frame;
|
||||
if(makeVisibleFlag)
|
||||
@@ -2028,8 +2029,6 @@ static NSUInteger DisableSessionSavingCount = 0;
|
||||
{
|
||||
DocumentController* controller = [DocumentController new];
|
||||
|
||||
if(NSString* windowFrame = project[@"windowFrame"])
|
||||
[controller.window setFrame:NSRectFromString(windowFrame) display:NO];
|
||||
if(NSString* fileBrowserWidth = project[@"fileBrowserWidth"])
|
||||
controller.fileBrowserWidth = [fileBrowserWidth floatValue];
|
||||
if(NSString* htmlOutputSize = project[@"htmlOutputSize"])
|
||||
@@ -2039,6 +2038,9 @@ static NSUInteger DisableSessionSavingCount = 0;
|
||||
controller.fileBrowserHistory = project[@"fileBrowserState"];
|
||||
controller.fileBrowserVisible = [project[@"fileBrowserVisible"] boolValue];
|
||||
|
||||
if(NSString* windowFrame = project[@"windowFrame"])
|
||||
[controller.window setFrame:NSRectFromString(windowFrame) display:NO];
|
||||
|
||||
std::vector<document::document_ptr> documents;
|
||||
NSInteger selectedTabIndex = 0;
|
||||
|
||||
@@ -2135,6 +2137,18 @@ static NSUInteger DisableSessionSavingCount = 0;
|
||||
return [session writeToFile:[self sessionPath] atomically:YES];
|
||||
}
|
||||
|
||||
// ================================
|
||||
// = OakWindowFrameHelperDelegate =
|
||||
// ================================
|
||||
|
||||
- (NSRect)savableWindowFrame
|
||||
{
|
||||
NSRect res = [self.window frame];
|
||||
if(self.fileBrowserVisible)
|
||||
res.size.width -= self.fileBrowserWidth;
|
||||
return res;
|
||||
}
|
||||
|
||||
// ==========
|
||||
// = Legacy =
|
||||
// ==========
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
#import <oak/debug.h>
|
||||
|
||||
@protocol OakWindowFrameHelperDelegate <NSObject>
|
||||
- (NSRect)savableWindowFrame;
|
||||
@end
|
||||
|
||||
PUBLIC @interface OakWindowFrameHelper : NSObject
|
||||
{
|
||||
OBJC_WATCH_LEAKS(OakWindowFrameHelper);
|
||||
|
||||
@@ -85,10 +85,17 @@ OAK_DEBUG_VAR(WindowFrameHelper);
|
||||
// = The Actual Logic =
|
||||
// ====================
|
||||
|
||||
- (NSRect)windowFrame:(NSWindow*)aWindow
|
||||
{
|
||||
if([[aWindow delegate] conformsToProtocol:@protocol(OakWindowFrameHelperDelegate)])
|
||||
return [(id <OakWindowFrameHelperDelegate>)[aWindow delegate] savableWindowFrame];
|
||||
return [aWindow frame];
|
||||
}
|
||||
|
||||
- (void)snapshotWindowFrame
|
||||
{
|
||||
if((([window styleMask] & NSFullScreenWindowMask) != NSFullScreenWindowMask))
|
||||
[[NSUserDefaults standardUserDefaults] setObject:NSStringFromRect([window frame]) forKey:self.autosaveName];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:NSStringFromRect([self windowFrame:window]) forKey:self.autosaveName];
|
||||
}
|
||||
|
||||
- (BOOL)ignoreWindow:(NSWindow*)aWindow
|
||||
@@ -115,10 +122,10 @@ OAK_DEBUG_VAR(WindowFrameHelper);
|
||||
if([self ignoreWindow:win])
|
||||
continue;
|
||||
|
||||
D(DBF_WindowFrameHelper, bug("window @ %s (%s)\n", [NSStringFromRect([win frame]) UTF8String], [[[[win delegate] class] description] UTF8String]););
|
||||
if(NSMaxY([win frame]) < winYPos)
|
||||
D(DBF_WindowFrameHelper, bug("window @ %s (%s)\n", [NSStringFromRect([self windowFrame:win) UTF8String], [[[[win delegate] class] description] UTF8String]););
|
||||
if(NSMaxY([self windowFrame:win]) < winYPos)
|
||||
{
|
||||
winYPos = NSMaxY([win frame]);
|
||||
winYPos = NSMaxY([self windowFrame:win]);
|
||||
lowerWin = win;
|
||||
}
|
||||
}
|
||||
@@ -126,7 +133,7 @@ OAK_DEBUG_VAR(WindowFrameHelper);
|
||||
if(lowerWin)
|
||||
{
|
||||
D(DBF_WindowFrameHelper, bug("cascade window\n"););
|
||||
r = [lowerWin frame];
|
||||
r = [self windowFrame:lowerWin];
|
||||
[aWindow setFrame:r display:NO];
|
||||
r.origin = [aWindow cascadeTopLeftFromPoint:NSMakePoint(NSMinX(r), NSMaxY(r))];
|
||||
r.origin.y -= r.size.height;
|
||||
@@ -143,7 +150,7 @@ OAK_DEBUG_VAR(WindowFrameHelper);
|
||||
if([self ignoreWindow:win])
|
||||
continue;
|
||||
|
||||
if(NSEqualPoints([win frame].origin, r.origin))
|
||||
if(NSEqualPoints([self windowFrame:win].origin, r.origin))
|
||||
alreadyHasWrappedWindow = true;
|
||||
}
|
||||
|
||||
@@ -152,7 +159,7 @@ OAK_DEBUG_VAR(WindowFrameHelper);
|
||||
NSWindow* win = [NSApp mainWindow];
|
||||
if([[win delegate] isKindOfClass:windowDelegateClass])
|
||||
{
|
||||
r = [win frame];
|
||||
r = [self windowFrame:win];
|
||||
[aWindow setFrame:r display:NO];
|
||||
r.origin = [aWindow cascadeTopLeftFromPoint:NSMakePoint(NSMinX(r), NSMaxY(r))];
|
||||
r.origin.y -= r.size.height;
|
||||
|
||||
Reference in New Issue
Block a user