Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-15 09:07:17

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