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.
This commit is contained in:
parent
f78ffb374d
commit
d7f4d67514
|
@ -1809,6 +1809,8 @@ - (void) setupObservations
|
|||
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;
|
||||
|
|
|
@ -60,6 +60,7 @@ @interface WineWindow : NSPanel <NSWindowDelegate>
|
|||
|
||||
BOOL ignore_windowMiniaturize;
|
||||
BOOL ignore_windowDeminiaturize;
|
||||
BOOL fakingClose;
|
||||
}
|
||||
|
||||
@property (retain, readonly, nonatomic) WineEventQueue* queue;
|
||||
|
@ -67,6 +68,7 @@ @interface WineWindow : NSPanel <NSWindowDelegate>
|
|||
@property (readonly, nonatomic) BOOL noActivate;
|
||||
@property (readonly, nonatomic) BOOL floating;
|
||||
@property (readonly, getter=isFullscreen, nonatomic) BOOL fullscreen;
|
||||
@property (readonly, getter=isFakingClose, nonatomic) BOOL fakingClose;
|
||||
|
||||
- (NSInteger) minimumLevelForActive:(BOOL)active;
|
||||
- (void) updateFullscreen;
|
||||
|
|
|
@ -139,6 +139,7 @@ @interface WineWindow ()
|
|||
@property (readwrite, nonatomic) BOOL disabled;
|
||||
@property (readwrite, nonatomic) BOOL noActivate;
|
||||
@property (readwrite, nonatomic) BOOL floating;
|
||||
@property (readwrite, getter=isFakingClose, nonatomic) BOOL fakingClose;
|
||||
@property (retain, nonatomic) NSWindow* latentParentWindow;
|
||||
|
||||
@property (nonatomic) void* hwnd;
|
||||
|
@ -466,7 +467,7 @@ @implementation WineWindow
|
|||
|
||||
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 @@ + (WineWindow*) createWindowWithFeatures:(const struct macdrv_window_features*)w
|
|||
[window setHidesOnDeactivate:NO];
|
||||
[window setReleasedWhenClosed:NO];
|
||||
|
||||
[window setOneShot:YES];
|
||||
[window disableCursorRects];
|
||||
[window setShowsResizeIndicator:NO];
|
||||
[window setHasShadow:wf->shadow];
|
||||
|
@ -1039,7 +1041,14 @@ - (void) doOrderOut
|
|||
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 @@ - (void) windowWillClose:(NSNotification*)notification
|
|||
{
|
||||
WineWindow* child;
|
||||
|
||||
if (fakingClose) return;
|
||||
if (latentParentWindow)
|
||||
{
|
||||
[latentParentWindow->latentChildWindows removeObjectIdenticalTo:self];
|
||||
|
|
Loading…
Reference in New Issue