macOS: Use single call site for timer processing in event dispatcher

Makes it easier to add shared logic later on.

The call to maybeCancelWaitForMoreEvents() has been left out as it was
not called from all call sites.

Change-Id: Ibcb10ab4d788de80850b0e5a4286b4d49091cddb
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
bb10
Tor Arne Vestbø 2018-09-05 17:21:24 +02:00
parent 5ed48895b6
commit d115196010
2 changed files with 11 additions and 5 deletions

View File

@ -153,6 +153,7 @@ public:
void maybeStopCFRunLoopTimer();
static void runLoopTimerCallback(CFRunLoopTimerRef, void *info);
static void activateTimersSourceCallback(void *info);
bool processTimers();
// Set 'blockSendPostedEvents' to true if you _really_ need
// to make sure that qt events are not posted while calling

View File

@ -120,11 +120,17 @@ void QCocoaEventDispatcherPrivate::runLoopTimerCallback(CFRunLoopTimerRef, void
void QCocoaEventDispatcherPrivate::activateTimersSourceCallback(void *info)
{
QCocoaEventDispatcherPrivate *d = static_cast<QCocoaEventDispatcherPrivate *>(info);
(void) d->timerInfoList.activateTimers();
d->maybeStartCFRunLoopTimer();
d->processTimers();
d->maybeCancelWaitForMoreEvents();
}
bool QCocoaEventDispatcherPrivate::processTimers()
{
int activated = timerInfoList.activateTimers();
maybeStartCFRunLoopTimer();
return activated > 0;
}
void QCocoaEventDispatcherPrivate::maybeStartCFRunLoopTimer()
{
if (timerInfoList.isEmpty()) {
@ -500,10 +506,9 @@ bool QCocoaEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
} while (!d->interrupt && event);
if ((d->processEventsFlags & QEventLoop::EventLoopExec) == 0) {
// when called "manually", always send posted events and timers
// When called "manually", always process posted events and timers
d->processPostedEvents();
retVal = d->timerInfoList.activateTimers() > 0 || retVal;
d->maybeStartCFRunLoopTimer();
retVal = d->processTimers() || retVal;
}
// be sure to return true if the posted event source fired