winemac: Stop the display link after 2 seconds of idleness, not the first time it's idle.

Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Ken Thomases 2017-12-08 02:54:08 -06:00 committed by Alexandre Julliard
parent 4e9c3444fb
commit 5f80cc43bf
1 changed files with 9 additions and 2 deletions

View File

@ -166,6 +166,8 @@ @interface WineDisplayLink : NSObject
NSTimeInterval _actualRefreshPeriod; NSTimeInterval _actualRefreshPeriod;
NSTimeInterval _nominalRefreshPeriod; NSTimeInterval _nominalRefreshPeriod;
NSTimeInterval _lastDisplayTime;
} }
- (id) initWithDisplayID:(CGDirectDisplayID)displayID; - (id) initWithDisplayID:(CGDirectDisplayID)displayID;
@ -224,7 +226,7 @@ - (void) addWindow:(WineWindow*)window
[_windows addObject:window]; [_windows addObject:window];
} }
if (firstWindow || !CVDisplayLinkIsRunning(_link)) if (firstWindow || !CVDisplayLinkIsRunning(_link))
CVDisplayLinkStart(_link); [self start];
} }
- (void) removeWindow:(WineWindow*)window - (void) removeWindow:(WineWindow*)window
@ -256,7 +258,11 @@ - (void) fire
anyDisplayed = YES; anyDisplayed = YES;
} }
} }
if (!anyDisplayed)
NSTimeInterval now = [[NSProcessInfo processInfo] systemUptime];
if (anyDisplayed)
_lastDisplayTime = now;
else if (_lastDisplayTime + 2.0 < now)
CVDisplayLinkStop(_link); CVDisplayLinkStop(_link);
}); });
[windows release]; [windows release];
@ -279,6 +285,7 @@ - (NSTimeInterval) refreshPeriod
- (void) start - (void) start
{ {
_lastDisplayTime = [[NSProcessInfo processInfo] systemUptime];
CVDisplayLinkStart(_link); CVDisplayLinkStart(_link);
} }