Ken Thomases : winemac: Fix hiding windows that are minimized using -close instead of -orderOut:.
Alexandre Julliard
julliard at winehq.org
Fri Sep 27 11:33:13 CDT 2013
Module: wine
Branch: master
Commit: d7f4d67514b3febac084d48d22fef67fd328fdce
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d7f4d67514b3febac084d48d22fef67fd328fdce
Author: Ken Thomases <ken at codeweavers.com>
Date: Thu Sep 26 23:46:31 2013 -0500
winemac: Fix hiding windows that are minimized using -close instead of -orderOut:.
Cocoa won't order a minimized window out of the screen list using -orderOut:.
This leaves a window that should be hidden still visible in the Dock, where
it can be unminimized.
---
dlls/winemac.drv/cocoa_app.m | 2 ++
dlls/winemac.drv/cocoa_window.h | 2 ++
dlls/winemac.drv/cocoa_window.m | 14 ++++++++++++--
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m
index afe0608..e6e5c2e 100644
--- a/dlls/winemac.drv/cocoa_app.m
+++ b/dlls/winemac.drv/cocoa_app.m
@@ -1809,6 +1809,8 @@ int macdrv_err_on;
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *note){
NSWindow* window = [note object];
+ if ([window isKindOfClass:[WineWindow class]] && [(WineWindow*)window isFakingClose])
+ return;
[keyWindows removeObjectIdenticalTo:window];
if (window == lastTargetWindow)
lastTargetWindow = nil;
diff --git a/dlls/winemac.drv/cocoa_window.h b/dlls/winemac.drv/cocoa_window.h
index 8893f85..8f60275 100644
--- a/dlls/winemac.drv/cocoa_window.h
+++ b/dlls/winemac.drv/cocoa_window.h
@@ -60,6 +60,7 @@
BOOL ignore_windowMiniaturize;
BOOL ignore_windowDeminiaturize;
+ BOOL fakingClose;
}
@property (retain, readonly, nonatomic) WineEventQueue* queue;
@@ -67,6 +68,7 @@
@property (readonly, nonatomic) BOOL noActivate;
@property (readonly, nonatomic) BOOL floating;
@property (readonly, getter=isFullscreen, nonatomic) BOOL fullscreen;
+ at property (readonly, getter=isFakingClose, nonatomic) BOOL fakingClose;
- (NSInteger) minimumLevelForActive:(BOOL)active;
- (void) updateFullscreen;
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m
index 43be5d5..74bbdc7 100644
--- a/dlls/winemac.drv/cocoa_window.m
+++ b/dlls/winemac.drv/cocoa_window.m
@@ -139,6 +139,7 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
@property (readwrite, nonatomic) BOOL disabled;
@property (readwrite, nonatomic) BOOL noActivate;
@property (readwrite, nonatomic) BOOL floating;
+ at property (readwrite, getter=isFakingClose, nonatomic) BOOL fakingClose;
@property (retain, nonatomic) NSWindow* latentParentWindow;
@property (nonatomic) void* hwnd;
@@ -466,7 +467,7 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
static WineWindow* causing_becomeKeyWindow;
- @synthesize disabled, noActivate, floating, fullscreen, latentParentWindow, hwnd, queue;
+ @synthesize disabled, noActivate, floating, fullscreen, fakingClose, latentParentWindow, hwnd, queue;
@synthesize surface, surface_mutex;
@synthesize shape, shapeChangedSinceLastDraw;
@synthesize colorKeyed, colorKeyRed, colorKeyGreen, colorKeyBlue;
@@ -497,6 +498,7 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
[window setHidesOnDeactivate:NO];
[window setReleasedWhenClosed:NO];
+ [window setOneShot:YES];
[window disableCursorRects];
[window setShowsResizeIndicator:NO];
[window setHasShadow:wf->shadow];
@@ -1039,7 +1041,14 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
pendingMinimize = TRUE;
[self becameIneligibleParentOrChild];
- [self orderOut:nil];
+ if ([self isMiniaturized])
+ {
+ fakingClose = TRUE;
+ [self close];
+ fakingClose = FALSE;
+ }
+ else
+ [self orderOut:nil];
if (wasVisible && wasOnActiveSpace && fullscreen)
[controller updateFullscreenWindows];
[controller adjustWindowLevels];
@@ -1548,6 +1557,7 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
{
WineWindow* child;
+ if (fakingClose) return;
if (latentParentWindow)
{
[latentParentWindow->latentChildWindows removeObjectIdenticalTo:self];
More information about the wine-cvs
mailing list