diff options
Diffstat (limited to 'src/corelib/kernel/qabstracteventdispatcher.h')
-rw-r--r-- | src/corelib/kernel/qabstracteventdispatcher.h | 131 |
1 files changed, 62 insertions, 69 deletions
diff --git a/src/corelib/kernel/qabstracteventdispatcher.h b/src/corelib/kernel/qabstracteventdispatcher.h index 4ef9c068df..ad97a93ba2 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.h +++ b/src/corelib/kernel/qabstracteventdispatcher.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2020 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QABSTRACTEVENTDISPATCHER_H #define QABSTRACTEVENTDISPATCHER_H @@ -49,16 +13,13 @@ class QAbstractNativeEventFilter; class QAbstractEventDispatcherPrivate; class QSocketNotifier; -#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC) -class QWinEventNotifier; -#endif - class Q_CORE_EXPORT QAbstractEventDispatcher : public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QAbstractEventDispatcher) public: + using Duration = std::chrono::nanoseconds; struct TimerInfo { int timerId; @@ -66,8 +27,13 @@ public: Qt::TimerType timerType; inline TimerInfo(int id, int i, Qt::TimerType t) - : timerId(id), interval(i), timerType(t) - { } + : timerId(id), interval(i), timerType(t) { } + }; + struct TimerInfoV2 + { + Duration interval; + Qt::TimerId timerId; + Qt::TimerType timerType; }; explicit QAbstractEventDispatcher(QObject *parent = nullptr); @@ -76,49 +42,42 @@ public: static QAbstractEventDispatcher *instance(QThread *thread = nullptr); virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0; - virtual bool hasPendingEvents() = 0; // ### Qt6: remove, mark final or make protected virtual void registerSocketNotifier(QSocketNotifier *notifier) = 0; virtual void unregisterSocketNotifier(QSocketNotifier *notifier) = 0; -#if QT_DEPRECATED_SINCE(5,0) - QT_DEPRECATED inline int registerTimer(int interval, QObject *object) - { return registerTimer(interval, Qt::CoarseTimer, object); } - QT_DEPRECATED inline void registerTimer(int timerId, int interval, QObject *object) - { registerTimer(timerId, interval, Qt::CoarseTimer, object); } -#endif - // ### Qt6: change interval range to qint64 (or use QDeadlineTimer) - int registerTimer(int interval, Qt::TimerType timerType, QObject *object); - virtual void registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) = 0; + Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object); + +#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) + int registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object); + + // old, integer-based API + virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0; virtual bool unregisterTimer(int timerId) = 0; - virtual bool unregisterTimers(QObject *object) = 0; virtual QList<TimerInfo> registeredTimers(QObject *object) const = 0; - virtual int remainingTime(int timerId) = 0; -#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC) - virtual bool registerEventNotifier(QWinEventNotifier *notifier) = 0; - virtual void unregisterEventNotifier(QWinEventNotifier *notifier) = 0; + void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object); + bool unregisterTimer(Qt::TimerId timerId); + QList<TimerInfoV2> timersForObject(QObject *object) const; + Duration remainingTime(Qt::TimerId timerId) const; +#else + virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object) = 0; + virtual bool unregisterTimer(Qt::TimerId timerId) = 0; + virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0; + virtual Duration remainingTime(Qt::TimerId timerId) const = 0; #endif + virtual bool unregisterTimers(QObject *object) = 0; virtual void wakeUp() = 0; virtual void interrupt() = 0; - virtual void flush() = 0; // ### Qt6: remove, mark final or make protected virtual void startingUp(); virtual void closingDown(); void installNativeEventFilter(QAbstractNativeEventFilter *filterObj); void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj); -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) bool filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result); -#else - bool filterNativeEvent(const QByteArray &eventType, void *message, long *result); -#endif -#if QT_DEPRECATED_SINCE(5, 0) - QT_DEPRECATED bool filterEvent(void *message) - { return filterNativeEvent("", message, nullptr); } -#endif Q_SIGNALS: void aboutToBlock(); @@ -129,7 +88,41 @@ protected: QObject *parent); }; -Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfo, (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) ? Q_PRIMITIVE_TYPE : Q_RELOCATABLE_TYPE)); +Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfo, Q_PRIMITIVE_TYPE); +Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfoV2, Q_PRIMITIVE_TYPE); + +#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) +class Q_CORE_EXPORT QAbstractEventDispatcherV2 : public QAbstractEventDispatcher +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QAbstractEventDispatcher) // not V2 + +public: + explicit QAbstractEventDispatcherV2(QObject *parent = nullptr); + ~QAbstractEventDispatcherV2(); + + // new virtuals + virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, + QObject *object) = 0; + virtual bool unregisterTimer(Qt::TimerId timerId) = 0; + virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0; + virtual Duration remainingTime(Qt::TimerId timerId) const = 0; + +protected: + QAbstractEventDispatcherV2(QAbstractEventDispatcherPrivate &, QObject *parent); + +private: + // final overrides from V1 + virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, + QObject *object) override final; + virtual bool unregisterTimer(int timerId) override final; + virtual QList<TimerInfo> registeredTimers(QObject *object) const override final; + + virtual int remainingTime(int timerId) override final; +}; +#else +using QAbstractEventDispatcherV2 = QAbstractEventDispatcher; +#endif // Qt 7 QT_END_NAMESPACE |