141 explicit QEventDispatcherCoreFoundation(QObject *parent =
nullptr);
142 void startingUp() override;
143 ~QEventDispatcherCoreFoundation();
145 bool processEvents(QEventLoop::ProcessEventsFlags flags) override;
147 void registerSocketNotifier(QSocketNotifier *notifier) override;
148 void unregisterSocketNotifier(QSocketNotifier *notifier) override;
150 void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
151 QObject *object) override final;
152 bool unregisterTimer(Qt::TimerId timerId) override final;
153 bool unregisterTimers(QObject *object) override final;
154 QList<TimerInfoV2> timersForObject(QObject *object)
const override final;
155 Duration remainingTime(Qt::TimerId timerId)
const override final;
157 void wakeUp() override;
158 void interrupt() override;
161 QEventLoop *currentEventLoop()
const;
163 virtual bool processPostedEvents();
165 struct ProcessEventsState
167 ProcessEventsState(QEventLoop::ProcessEventsFlags f)
168 : flags(f.toInt()), wasInterrupted(
false)
169 , processedPostedEvents(
false), processedTimers(
false)
170 , deferredWakeUp(
false), deferredUpdateTimers(
false) {}
172 ProcessEventsState(
const ProcessEventsState &other)
173 : flags(other.flags.loadAcquire())
174 , wasInterrupted(other.wasInterrupted.loadAcquire())
175 , processedPostedEvents(other.processedPostedEvents.loadAcquire())
176 , processedTimers(other.processedTimers.loadAcquire())
177 , deferredWakeUp(other.deferredWakeUp.loadAcquire())
178 , deferredUpdateTimers(other.deferredUpdateTimers) {}
180 ProcessEventsState &operator=(
const ProcessEventsState &other)
182 flags.storeRelease(other.flags.loadAcquire());
183 wasInterrupted.storeRelease(other.wasInterrupted.loadAcquire());
184 processedPostedEvents.storeRelease(other.processedPostedEvents.loadAcquire());
185 processedTimers.storeRelease(other.processedTimers.loadAcquire());
186 deferredWakeUp.storeRelease(other.deferredWakeUp.loadAcquire());
187 deferredUpdateTimers = other.deferredUpdateTimers;
192 QAtomicInteger<
char> wasInterrupted;
193 QAtomicInteger<
char> processedPostedEvents;
194 QAtomicInteger<
char> processedTimers;
195 QAtomicInteger<
char> deferredWakeUp;
196 bool deferredUpdateTimers;
199 ProcessEventsState m_processEvents;
202 RunLoopSource<> m_postedEventsRunLoopSource;
203 RunLoopObserver<> m_runLoopActivityObserver;
205 QT_MANGLE_NAMESPACE(RunLoopModeTracker) *m_runLoopModeTracker;
207 QTimerInfoList m_timerInfoList;
208 CFRunLoopTimerRef m_runLoopTimer;
209 CFRunLoopTimerRef m_blockedRunLoopTimer;
210 QCFType<CFRunLoopRef> m_runLoop;
211 bool m_overdueTimerScheduled;
213 QCFSocketNotifier m_cfSocketNotifier;
215 void processTimers(CFRunLoopTimerRef);
217 void handleRunLoopActivity(CFRunLoopActivity activity);
220 void invalidateTimer();