Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-04 09:22:38

0001 // Copyright (C) 2020 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:header-decls-only
0004 
0005 #ifndef QABSTRACTEVENTDISPATCHER_H
0006 #define QABSTRACTEVENTDISPATCHER_H
0007 
0008 #include <QtCore/qobject.h>
0009 #include <QtCore/qeventloop.h>
0010 
0011 QT_BEGIN_NAMESPACE
0012 
0013 class QAbstractNativeEventFilter;
0014 class QAbstractEventDispatcherPrivate;
0015 class QSocketNotifier;
0016 
0017 class Q_CORE_EXPORT QAbstractEventDispatcher : public QObject
0018 {
0019     Q_OBJECT
0020     Q_DECLARE_PRIVATE(QAbstractEventDispatcher)
0021 
0022 public:
0023     using Duration = std::chrono::nanoseconds;
0024     struct TimerInfo
0025     {
0026         int timerId;
0027         int interval;
0028         Qt::TimerType timerType;
0029 #ifndef Q_QDOC
0030 #ifndef __cpp_aggregate_paren_init
0031         TimerInfo() = default;
0032         inline TimerInfo(int id, int i, Qt::TimerType t)
0033             : timerId(id), interval(i), timerType(t) { }
0034 #endif
0035 #endif
0036     };
0037     struct TimerInfoV2
0038     {
0039         Duration interval;
0040         Qt::TimerId timerId;
0041         Qt::TimerType timerType;
0042     };
0043 
0044     explicit QAbstractEventDispatcher(QObject *parent = nullptr);
0045     ~QAbstractEventDispatcher();
0046 
0047     static QAbstractEventDispatcher *instance(QThread *thread = nullptr);
0048 
0049     virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0;
0050 
0051     virtual void registerSocketNotifier(QSocketNotifier *notifier) = 0;
0052     virtual void unregisterSocketNotifier(QSocketNotifier *notifier) = 0;
0053 
0054     Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object);
0055 
0056 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
0057     int registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object);
0058 
0059     // old, integer-based API
0060     virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0;
0061     virtual bool unregisterTimer(int timerId) = 0;
0062     virtual bool unregisterTimers(QObject *object) = 0;
0063     virtual QList<TimerInfo> registeredTimers(QObject *object) const = 0;
0064     virtual int remainingTime(int timerId) = 0;
0065 
0066     void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object);
0067     bool unregisterTimer(Qt::TimerId timerId);
0068     QList<TimerInfoV2> timersForObject(QObject *object) const;
0069     Duration remainingTime(Qt::TimerId timerId) const;
0070 #else
0071     virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object) = 0;
0072     virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
0073     virtual bool unregisterTimers(QObject *object) = 0;
0074     virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0;
0075     virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
0076 #endif
0077 
0078     virtual void wakeUp() = 0;
0079     virtual void interrupt() = 0;
0080 
0081     virtual void startingUp();
0082     virtual void closingDown();
0083 
0084     void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
0085     void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj);
0086     bool filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result);
0087 
0088 Q_SIGNALS:
0089     void aboutToBlock();
0090     void awake();
0091 
0092 protected:
0093     QAbstractEventDispatcher(QAbstractEventDispatcherPrivate &,
0094                              QObject *parent);
0095 };
0096 
0097 Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfo, Q_PRIMITIVE_TYPE);
0098 Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfoV2, Q_PRIMITIVE_TYPE);
0099 
0100 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
0101 class Q_CORE_EXPORT QAbstractEventDispatcherV2 : public QAbstractEventDispatcher
0102 {
0103     Q_OBJECT
0104     Q_DECLARE_PRIVATE(QAbstractEventDispatcher) // not V2
0105 
0106 public:
0107     explicit QAbstractEventDispatcherV2(QObject *parent = nullptr);
0108     ~QAbstractEventDispatcherV2() override;
0109 
0110     // new virtuals
0111     virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
0112                                QObject *object) = 0;
0113     virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
0114     virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0;
0115     virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
0116     virtual bool processEventsWithDeadline(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); // reserved for 6.9
0117 
0118 protected:
0119     QAbstractEventDispatcherV2(QAbstractEventDispatcherPrivate &, QObject *parent);
0120 
0121 private:
0122 QT_WARNING_PUSH
0123 QT_WARNING_DISABLE_GCC("-Woverloaded-virtual")
0124 QT_WARNING_DISABLE_CLANG("-Woverloaded-virtual")
0125     // final overrides from V1
0126     void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType,
0127                        QObject *object) final;
0128     bool unregisterTimer(int timerId) final;
0129     QList<TimerInfo> registeredTimers(QObject *object) const final;
0130     int remainingTime(int timerId) final;
0131 QT_WARNING_POP
0132 };
0133 #else
0134 using QAbstractEventDispatcherV2 = QAbstractEventDispatcher;
0135 #endif // Qt 7
0136 
0137 QT_END_NAMESPACE
0138 
0139 #endif // QABSTRACTEVENTDISPATCHER_H