From 353b836087ec62765798221d162e098a5f973217 Mon Sep 17 00:00:00 2001 From: Bjorn Winckler Date: Sun, 9 Jan 2011 12:34:41 +0100 Subject: [PATCH] No partially grey window when leaving full screen --- src/MacVim/MMFullscreenWindow.h | 1 + src/MacVim/MMFullscreenWindow.m | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/MacVim/MMFullscreenWindow.h b/src/MacVim/MMFullscreenWindow.h index 6ac2008b71..c8c9624c8a 100644 --- a/src/MacVim/MMFullscreenWindow.h +++ b/src/MacVim/MMFullscreenWindow.h @@ -20,6 +20,7 @@ NSPoint oldPosition; NSString *oldTabBarStyle; int options; + int state; // These are only valid in fullscreen mode and store pre-fu vim size int nonFuRows, nonFuColumns; diff --git a/src/MacVim/MMFullscreenWindow.m b/src/MacVim/MMFullscreenWindow.m index fcba9dbbeb..33dc78b513 100644 --- a/src/MacVim/MMFullscreenWindow.m +++ b/src/MacVim/MMFullscreenWindow.m @@ -37,6 +37,13 @@ #define FUOPT_MAXHORZ 0x002 #define FUOPT_BGCOLOR_HLGROUP 0x004 +// Used for 'state' variable +enum { + BeforeFullScreen = 0, + InFullScreen, + LeftFullScreen +}; + @interface MMFullscreenWindow (Private) - (BOOL)isOnPrimaryScreen; @@ -207,6 +214,8 @@ kCGDisplayBlendNormal, .0, .0, .0, false); CGReleaseDisplayFadeReservation(token); } + + state = InFullScreen; } - (void)leaveFullscreen @@ -303,6 +312,7 @@ [self autorelease]; // Balance the above retain + state = LeftFullScreen; ASLogDebug(@"Left full screen"); } @@ -402,6 +412,9 @@ - (void)windowDidMove:(NSNotification *)notification { + if (state != InFullScreen) + return; + // Window may move as a result of being dragged between Spaces. ASLogDebug(@"Full screen window moved, ensuring it covers the screen..."); @@ -413,9 +426,13 @@ - (void)applicationDidChangeScreenParameters:(NSNotification *)notification { + if (state != InFullScreen) + return; + // This notification is sent when screen resolution may have changed (e.g. // due to a monitor being unplugged or the resolution being changed - // manually). + // manually) but it also seems to get called when the Dock is + // hidden/displayed. ASLogDebug(@"Screen unplugged / resolution changed"); NSScreen *screen = [target screen];