mirror of https://github.com/libsdl-org/SDL.git
cocoa: Run pending events to completion
Fullscreen spaces and miniaturization will always give us some notification that they succeeded or failed, so the timeout isn't required. This prevents errant timeouts when live-resize is active.
(cherry picked from commit 078d737a27)
This commit is contained in:
parent
bc6307a872
commit
4e3058ce82
|
|
@ -915,7 +915,8 @@ static NSCursor *Cocoa_GetDesiredCursor(void)
|
|||
|
||||
- (BOOL)hasPendingWindowOperation
|
||||
{
|
||||
return pendingWindowOperation != PENDING_OPERATION_NONE ||
|
||||
// A pending zoom may be deferred until leaving fullscreen, so don't block on it.
|
||||
return (pendingWindowOperation & ~PENDING_OPERATION_ZOOM) != PENDING_OPERATION_NONE ||
|
||||
isMiniaturizing || inFullscreenTransition;
|
||||
}
|
||||
|
||||
|
|
@ -3263,24 +3264,11 @@ bool Cocoa_SyncWindow(SDL_VideoDevice *_this, SDL_Window *window)
|
|||
bool result = true;
|
||||
|
||||
@autoreleasepool {
|
||||
/* The timeout needs to be high enough that animated fullscreen
|
||||
* spaces transitions won't cause it to time out.
|
||||
*/
|
||||
Uint64 timeout = SDL_GetTicksNS() + SDL_MS_TO_NS(2000);
|
||||
SDL_CocoaWindowData *data = (__bridge SDL_CocoaWindowData *)window->internal;
|
||||
while (true) {
|
||||
|
||||
do {
|
||||
SDL_PumpEvents();
|
||||
|
||||
if (SDL_GetTicksNS() >= timeout) {
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
if (![data.listener hasPendingWindowOperation]) {
|
||||
break;
|
||||
}
|
||||
|
||||
SDL_Delay(10);
|
||||
}
|
||||
} while ([data.listener hasPendingWindowOperation]);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
|||
Loading…
Reference in New Issue