diff options
Diffstat (limited to 'src/corelib/kernel/qcoreapplication.h')
-rw-r--r-- | src/corelib/kernel/qcoreapplication.h | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h index f31fd203b9..0078dc3295 100644 --- a/src/corelib/kernel/qcoreapplication.h +++ b/src/corelib/kernel/qcoreapplication.h @@ -8,6 +8,7 @@ #include <QtCore/qstring.h> #ifndef QT_NO_QOBJECT #include <QtCore/qcoreevent.h> +#include <QtCore/qdeadlinetimer.h> #include <QtCore/qeventloop.h> #include <QtCore/qobject.h> #else @@ -32,6 +33,11 @@ class QTranslator; class QPostEventList; class QAbstractEventDispatcher; class QAbstractNativeEventFilter; +class QEventLoopLocker; + +#if QT_CONFIG(permissions) || defined(Q_QDOC) +class QPermission; +#endif #define qApp QCoreApplication::instance() @@ -54,6 +60,11 @@ class Q_CORE_EXPORT QCoreApplication #endif Q_DECLARE_PRIVATE(QCoreApplication) + friend class QEventLoopLocker; +#if QT_CONFIG(permissions) + using RequestPermissionPrototype = void(*)(QPermission); +#endif + public: enum { ApplicationFlags = QT_VERSION }; @@ -83,12 +94,13 @@ public: static void setSetuidAllowed(bool allow); static bool isSetuidAllowed(); - static QCoreApplication *instance() { return self; } + static QCoreApplication *instance() noexcept { return self; } #ifndef QT_NO_QOBJECT static int exec(); static void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents); static void processEvents(QEventLoop::ProcessEventsFlags flags, int maxtime); + static void processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); static bool sendEvent(QObject *receiver, QEvent *event); static void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority); @@ -107,6 +119,53 @@ public: static QString applicationFilePath(); static qint64 applicationPid() Q_DECL_CONST_FUNCTION; +#if QT_CONFIG(permissions) || defined(Q_QDOC) + Qt::PermissionStatus checkPermission(const QPermission &permission); + +# ifdef Q_QDOC + template <typename Functor> + void requestPermission(const QPermission &permission, const QObject *context, Functor functor); +# else + // requestPermission with context or receiver object; need to require here that receiver is the + // right type to avoid ambiguity with the private implementation function. + template <typename Functor, + std::enable_if_t< + QtPrivate::AreFunctionsCompatible<RequestPermissionPrototype, Functor>::value, + bool> = true> + void requestPermission(const QPermission &permission, + const typename QtPrivate::ContextTypeForFunctor<Functor>::ContextType *receiver, + Functor &&func) + { + requestPermission(permission, + QtPrivate::makeCallableObject<RequestPermissionPrototype>(std::forward<Functor>(func)), + receiver); + } +# endif // Q_QDOC + +#ifndef QT_NO_CONTEXTLESS_CONNECT + #ifdef Q_QDOC + template <typename Functor> + #else + // requestPermission to a functor or function pointer (without context) + template <typename Functor, + std::enable_if_t< + QtPrivate::AreFunctionsCompatible<RequestPermissionPrototype, Functor>::value, + bool> = true> + #endif + void requestPermission(const QPermission &permission, Functor &&func) + { + requestPermission(permission, nullptr, std::forward<Functor>(func)); + } +#endif // QT_NO_CONTEXTLESS_CONNECT + +private: + // ### Qt 7: rename to requestPermissionImpl to avoid ambiguity + void requestPermission(const QPermission &permission, + QtPrivate::QSlotObjectBase *slotObj, const QObject *context); +public: + +#endif // QT_CONFIG(permission) + #if QT_CONFIG(library) static void setLibraryPaths(const QStringList &); static QStringList libraryPaths(); |