diff --git a/modules/juce_events/native/juce_mac_MessageManager.mm b/modules/juce_events/native/juce_mac_MessageManager.mm index ddc09cf5d1..36359d908a 100644 --- a/modules/juce_events/native/juce_mac_MessageManager.mm +++ b/modules/juce_events/native/juce_mac_MessageManager.mm @@ -389,18 +389,19 @@ bool MessageManager::runDispatchLoopUntil (int millisecondsToRunFor) { JUCE_AUTORELEASEPOOL { - CFRunLoopRunInMode (kCFRunLoopDefaultMode, 0.001, true); + auto msRemaining = endTime - Time::currentTimeMillis(); - NSEvent* e = [NSApp nextEventMatchingMask: NSEventMaskAny - untilDate: [NSDate dateWithTimeIntervalSinceNow: 0.001] - inMode: NSDefaultRunLoopMode - dequeue: YES]; - - if (e != nil && (isEventBlockedByModalComps == nullptr || ! (*isEventBlockedByModalComps) (e))) - [NSApp sendEvent: e]; - - if (Time::currentTimeMillis() >= endTime) + if (msRemaining <= 0) break; + + CFRunLoopRunInMode (kCFRunLoopDefaultMode, jmin (1.0, msRemaining * 0.001), true); + + if (NSEvent* e = [NSApp nextEventMatchingMask: NSEventMaskAny + untilDate: [NSDate dateWithTimeIntervalSinceNow: 0.001] + inMode: NSDefaultRunLoopMode + dequeue: YES]) + if (isEventBlockedByModalComps == nullptr || ! (*isEventBlockedByModalComps) (e)) + [NSApp sendEvent: e]; } }