Module: wine Branch: master Commit: b285c5706efd0678376fcc11619f4aa8536d4370 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b285c5706efd0678376fcc1161...
Author: Ken Thomases ken@codeweavers.com Date: Tue Jun 4 04:59:42 2013 -0500
winemac: Defer minimizing hidden windows until they are shown.
Minimizing invisible windows causes weird phantoms to appear in Exposé, the Window menu, and the Dock.
---
dlls/winemac.drv/cocoa_window.h | 1 + dlls/winemac.drv/cocoa_window.m | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_window.h b/dlls/winemac.drv/cocoa_window.h index e1af247..0f7e084 100644 --- a/dlls/winemac.drv/cocoa_window.h +++ b/dlls/winemac.drv/cocoa_window.h @@ -29,6 +29,7 @@ BOOL disabled; BOOL noActivate; BOOL floating; + BOOL pendingMinimize; WineWindow* latentParentWindow;
void* hwnd; diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 2da8a08..035576e 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -636,10 +636,16 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers) } [self setCollectionBehavior:behavior];
+ pendingMinimize = FALSE; if (state->minimized && ![self isMiniaturized]) { - ignore_windowMiniaturize = TRUE; - [self miniaturize:nil]; + if ([self isVisible]) + { + ignore_windowMiniaturize = TRUE; + [self miniaturize:nil]; + } + else + pendingMinimize = TRUE; } else if (!state->minimized && [self isMiniaturized]) { @@ -754,6 +760,13 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers) if (needAdjustWindowLevels) [controller adjustWindowLevels];
+ if (pendingMinimize) + { + ignore_windowMiniaturize = TRUE; + [self miniaturize:nil]; + pendingMinimize = FALSE; + } + NSEnableScreenUpdates();
/* Cocoa may adjust the frame when the window is ordered onto the screen. @@ -770,6 +783,8 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
- (void) doOrderOut { + if ([self isMiniaturized]) + pendingMinimize = TRUE; self.latentParentWindow = [self parentWindow]; [latentParentWindow removeChildWindow:self]; [self orderOut:nil]; @@ -948,6 +963,13 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers) [self orderFront:nil]; [controller adjustWindowLevels];
+ if (pendingMinimize) + { + ignore_windowMiniaturize = TRUE; + [self miniaturize:nil]; + pendingMinimize = FALSE; + } + NSEnableScreenUpdates();
causing_becomeKeyWindow = TRUE; @@ -1057,6 +1079,13 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers) [self setLevel:[front level]]; [self orderFront:nil]; [controller adjustWindowLevels]; + + if (pendingMinimize) + { + ignore_windowMiniaturize = TRUE; + [self miniaturize:nil]; + pendingMinimize = FALSE; + } }
- (void) sendEvent:(NSEvent*)event