Skip to content
Snippets Groups Projects
Commit 1895c60d authored by George Nachman's avatar George Nachman
Browse files

Fix bug where toolbar becomes visible after exiting lion fullscreen

parent b0d14d8c
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -62,6 +62,7 @@
defer:(BOOL)flag;
 
- (void)toggleToolbarShown:(id)sender;
- (void)toggleToolbarShownNoSave:(id)sender;
 
- (void)smartLayout;
- (void)setLayoutDone;
Loading
Loading
Loading
Loading
@@ -29,6 +29,7 @@
*/
 
#import "iTerm.h"
#import "iTermApplication.h"
#import "PTYWindow.h"
#import "PreferencePanel.h"
#import "PseudoTerminal.h"
Loading
Loading
@@ -373,12 +374,9 @@ end:
[super makeKeyAndOrderFront:sender];
}
 
- (void)toggleToolbarShown:(id)sender
- (void)toggleToolbarShownSavingState:(BOOL)shouldSave
sender:(id)sender
{
#if DEBUG_METHOD_TRACE
NSLog(@"%s(%d):-[PTYWindow toggleToolbarShown]",
__FILE__, __LINE__);
#endif
id delegate = [self delegate];
 
// Let our delegate know
Loading
Loading
@@ -386,13 +384,30 @@ end:
[delegate windowWillToggleToolbarVisibility:self];
}
[super toggleToolbarShown:sender];
// Let our delegate know
if (shouldSave) {
iTermApplicationDelegate *itad =
(iTermApplicationDelegate *)[[iTermApplication sharedApplication] delegate];
[itad setToolbarShouldBeVisible:[[self toolbar] isVisible]];
}
// Let our delegate know (but not right away; it takes a while for the change to take effect apparently)
if ([delegate conformsToProtocol:@protocol(PTYWindowDelegateProtocol)]) {
[delegate windowDidToggleToolbarVisibility:self];
[delegate performSelector:@selector(windowDidToggleToolbarVisibility:)
withObject:self
afterDelay:0];
}
}
 
- (void)toggleToolbarShownNoSave:(id)sender
{
[self toggleToolbarShownSavingState:NO sender:sender];
}
- (void)toggleToolbarShown:(id)sender
{
[self toggleToolbarShownSavingState:YES sender:sender];
}
- (BOOL)canBecomeKeyWindow
{
return YES;
Loading
Loading
Loading
Loading
@@ -2113,7 +2113,10 @@ NSString *sessionsKey = @"sessions";
 
- (void)saveFrameBeforeToolbarToggle {
if (!preToolbarToggleFrame_.size.width) {
PtyLog(@"Save frame of %@", NSStringFromRect(self.window.frame));
preToolbarToggleFrame_ = self.window.frame;
} else {
PtyLog(@"Not saving the frame");
}
}
 
Loading
Loading
@@ -2121,17 +2124,21 @@ NSString *sessionsKey = @"sessions";
if (preToolbarToggleFrame_.size.width) {
[[self window] setFrame:preToolbarToggleFrame_ display:YES];
}
PtyLog(@"Restoring the frame");
preToolbarToggleFrame_ = NSZeroRect;
}
 
// PTYWindowDelegateProtocol
- (void)windowWillToggleToolbarVisibility:(id)sender
{
PtyLog(@"-- windowWillToggleToolbarVisibility from %@", [NSThread callStackSymbols]);
// All fullscreen windows need to save their frames because the OS will shrink them when you
// toggle the toolbar while in lion fullscreen. We restore it for all fullscreen windows in
// -windowDidToggleToolbarVisibility.
for (PseudoTerminal *term in [[iTermController sharedInstance] terminals]) {
PtyLog(@" consider term %@", term);
if ([term lionFullScreen]) {
PtyLog(@" is lion fullscreen. Save its frame");
[term saveFrameBeforeToolbarToggle];
}
}
Loading
Loading
@@ -2139,19 +2146,21 @@ NSString *sessionsKey = @"sessions";
 
- (void)windowDidToggleToolbarVisibility:(id)sender
{
PtyLog(@"windowDidToggleToolbarVisibility");
iTermApplicationDelegate *itad = (iTermApplicationDelegate *)[[iTermApplication sharedApplication] delegate];
[itad setToolbarShouldBeVisible:[[[self window] toolbar] isVisible]];
// Fix up the frames of all lion fullscreen windows.
for (PseudoTerminal *term in [[iTermController sharedInstance] terminals]) {
if ([term lionFullScreen]) {
[term restoreFrameAfterToolbarToggle];
} else {
PtyLog(@"zeroing preToolbarToggleFrame_");
preToolbarToggleFrame_ = NSZeroRect;
}
if ([[[term window] toolbar] isVisible] != [itad toolbarShouldBeVisible]) {
// Sometimes a window will have its toolbar left unchanged after another one is toggled!
// This can happen if you hide the toolbar by clicking the menu in a lion fullscreen
// window; it will change but a non-fullscreen window won't.
[term wrapToggleToolbarShown:nil];
[[term ptyWindow] toggleToolbarShownNoSave:nil];
}
}
 
Loading
Loading
@@ -2481,7 +2490,10 @@ NSString *sessionsKey = @"sessions";
- (void)windowDidEnterFullScreen:(NSNotification *)notification
{
// The OS kindly toggles the toolbar for you when entering fullscreen. Undo that.
[self forceToolbarIntoCorrectState];
[self performSelector:@selector(forceToolbarIntoCorrectState)
withObject:nil
afterDelay:0];
zooming_ = NO;
togglingLionFullScreen_ = NO;
lionFullScreen_ = YES;
Loading
Loading
@@ -4327,7 +4339,7 @@ NSString *sessionsKey = @"sessions";
iTermApplicationDelegate *itad = (iTermApplicationDelegate *)[[iTermApplication sharedApplication] delegate];
if ([itad toolbarShouldBeVisible] != [[[self window] toolbar] isVisible]) {
PtyLog(@"Force-toggling toolbar");
[[self window] toggleToolbarShown:nil];
[[self ptyWindow] toggleToolbarShownNoSave:nil];
}
}
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment