Ken Thomases : winemac: Defer minimizing hidden windows until they are shown.
Module: wine Branch: master Commit: b285c5706efd0678376fcc11619f4aa8536d4370 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b285c5706efd0678376fcc1161... Author: Ken Thomases <ken(a)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
participants (1)
-
Alexandre Julliard