38#ifndef QEVENTDISPATCHER_CF_P_H
39#define QEVENTDISPATCHER_CF_P_H
52#include <QtCore/qabstracteventdispatcher.h>
53#include <QtCore/private/qtimerinfo_unix_p.h>
54#include <QtCore/private/qcfsocketnotifier_p.h>
55#include <QtCore/private/qcore_mac_p.h>
56#include <QtCore/qdebug.h>
57#include <QtCore/qloggingcategory.h>
59#include <CoreFoundation/CoreFoundation.h>
72template <
class T = QEventDispatcherCoreFoundation>
81 : m_delegate(delegate), m_callback(callback)
83 CFRunLoopSourceContext
context = {};
85 context.perform = RunLoopSource::process;
93 CFRunLoopSourceInvalidate(m_source);
100 runLoop = CFRunLoopGetCurrent();
102 CFRunLoopAddSource(runLoop, m_source,
mode);
105 void signal() { CFRunLoopSourceSignal(m_source); }
108 static void process(
void *
info)
111 ((self->m_delegate)->*(self->m_callback))();
116 CFRunLoopSourceRef m_source;
119template <
class T = QEventDispatcherCoreFoundation>
126 : m_delegate(delegate), m_callback(callback)
128 CFRunLoopObserverContext
context = {};
131 m_observer = CFRunLoopObserverCreate(kCFAllocatorDefault, activities,
true, 0, process, &
context);
137 CFRunLoopObserverInvalidate(m_observer);
138 CFRelease(m_observer);
144 runLoop = CFRunLoopGetCurrent();
146 if (!CFRunLoopContainsObserver(runLoop, m_observer,
mode))
147 CFRunLoopAddObserver(runLoop, m_observer,
mode);
153 runLoop = CFRunLoopGetCurrent();
155 if (CFRunLoopContainsObserver(runLoop, m_observer,
mode))
156 CFRunLoopRemoveObserver(runLoop, m_observer,
mode);
160 static void process(CFRunLoopObserverRef, CFRunLoopActivity activity,
void *
info)
163 ((self->m_delegate)->*(self->m_callback))(activity);
168 CFRunLoopObserverRef m_observer;
186 QObject *
object)
override final;
204 , processedPostedEvents(
false), processedTimers(
false)
205 , deferredWakeUp(
false), deferredUpdateTimers(
false) {}
209 , wasInterrupted(
other.wasInterrupted.loadAcquire())
210 , processedPostedEvents(
other.processedPostedEvents.loadAcquire())
211 , processedTimers(
other.processedTimers.loadAcquire())
212 , deferredWakeUp(
other.deferredWakeUp.loadAcquire())
213 , deferredUpdateTimers(
other.deferredUpdateTimers) {}
217 flags.storeRelease(
other.flags.loadAcquire());
218 wasInterrupted.storeRelease(
other.wasInterrupted.loadAcquire());
219 processedPostedEvents.storeRelease(
other.processedPostedEvents.loadAcquire());
220 processedTimers.storeRelease(
other.processedTimers.loadAcquire());
221 deferredWakeUp.storeRelease(
other.deferredWakeUp.loadAcquire());
222 deferredUpdateTimers =
other.deferredUpdateTimers;
237 RunLoopSource<> m_postedEventsRunLoopSource;
238 RunLoopObserver<> m_runLoopActivityObserver;
243 CFRunLoopTimerRef m_runLoopTimer;
244 CFRunLoopTimerRef m_blockedRunLoopTimer;
245 QCFType<CFRunLoopRef> m_runLoop;
246 bool m_overdueTimerScheduled;
250 void processTimers(CFRunLoopTimerRef);
252 void handleRunLoopActivity(CFRunLoopActivity activity);
255 void invalidateTimer();
DarwinBluetooth::LECBManagerNotifier * notifier
std::chrono::nanoseconds Duration
A {std::chrono::duration} type that is used in various API in this class.
~QEventDispatcherCoreFoundation()
void interrupt() override
Interrupts event dispatching.
virtual bool processPostedEvents()
ProcessEventsState m_processEvents
void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object) override final
void registerSocketNotifier(QSocketNotifier *notifier) override
Registers notifier with the event loop.
bool processEvents(QEventLoop::ProcessEventsFlags flags) override
Processes pending events that match flags until there are no more events to process.
void wakeUp() override
\threadsafe
QEventDispatcherCoreFoundation(QObject *parent=nullptr)
QList< TimerInfoV2 > timersForObject(QObject *object) const override final
bool unregisterTimer(Qt::TimerId timerId) override final
void unregisterSocketNotifier(QSocketNotifier *notifier) override
Unregisters notifier from the event dispatcher.
void startingUp() override
QEventLoop * currentEventLoop() const
Duration remainingTime(Qt::TimerId timerId) const override final
Returns the remaining time of the timer with the given timerId.
bool unregisterTimers(QObject *object) override final
Unregisters all the timers associated with the given object.
void(T::* CallbackFunction)(CFRunLoopActivity activity)
void addToMode(CFStringRef mode, CFRunLoopRef runLoop=0)
RunLoopObserver(T *delegate, CallbackFunction callback, CFOptionFlags activities)
void removeFromMode(CFStringRef mode, CFRunLoopRef runLoop=0)
void addToMode(CFStringRef mode, CFRunLoopRef runLoop=0)
RunLoopSource(T *delegate, CallbackFunction callback)
enum RunLoopSource::@34 RunLoopSourcePriority
bool(T::* CallbackFunction)()
Combined button and popup list for selecting options.
#define Q_FORWARD_DECLARE_OBJC_CLASS(classname)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define Q_DECLARE_EXPORTED_LOGGING_CATEGORY(name, export_macro)
#define QT_MANGLE_NAMESPACE(name)
static int toInt(const QChar &qc, int R)
QAtomicInteger< char > processedPostedEvents
ProcessEventsState(QEventLoop::ProcessEventsFlags f)
bool deferredUpdateTimers
ProcessEventsState(const ProcessEventsState &other)
QAtomicInteger< char > deferredWakeUp
QAtomicInteger< char > wasInterrupted
ProcessEventsState & operator=(const ProcessEventsState &other)
QAtomicInteger< char > processedTimers