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.
This commit is contained in:
parent
841f158d81
commit
b285c5706e
|
@ -29,6 +29,7 @@ @interface WineWindow : NSPanel <NSWindowDelegate>
|
|||
BOOL disabled;
|
||||
BOOL noActivate;
|
||||
BOOL floating;
|
||||
BOOL pendingMinimize;
|
||||
WineWindow* latentParentWindow;
|
||||
|
||||
void* hwnd;
|
||||
|
|
|
@ -636,10 +636,16 @@ - (void) setMacDrvState:(const struct macdrv_window_state*)state
|
|||
}
|
||||
[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 @@ - (BOOL) orderBelow:(WineWindow*)prev orAbove:(WineWindow*)next
|
|||
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 @@ - (BOOL) orderBelow:(WineWindow*)prev orAbove:(WineWindow*)next
|
|||
|
||||
- (void) doOrderOut
|
||||
{
|
||||
if ([self isMiniaturized])
|
||||
pendingMinimize = TRUE;
|
||||
self.latentParentWindow = [self parentWindow];
|
||||
[latentParentWindow removeChildWindow:self];
|
||||
[self orderOut:nil];
|
||||
|
@ -948,6 +963,13 @@ - (void) makeFocused:(BOOL)activate
|
|||
[self orderFront:nil];
|
||||
[controller adjustWindowLevels];
|
||||
|
||||
if (pendingMinimize)
|
||||
{
|
||||
ignore_windowMiniaturize = TRUE;
|
||||
[self miniaturize:nil];
|
||||
pendingMinimize = FALSE;
|
||||
}
|
||||
|
||||
NSEnableScreenUpdates();
|
||||
|
||||
causing_becomeKeyWindow = TRUE;
|
||||
|
@ -1057,6 +1079,13 @@ - (void) makeKeyAndOrderFront:(id)sender
|
|||
[self setLevel:[front level]];
|
||||
[self orderFront:nil];
|
||||
[controller adjustWindowLevels];
|
||||
|
||||
if (pendingMinimize)
|
||||
{
|
||||
ignore_windowMiniaturize = TRUE;
|
||||
[self miniaturize:nil];
|
||||
pendingMinimize = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
- (void) sendEvent:(NSEvent*)event
|
||||
|
|
Loading…
Reference in New Issue