Short live Q_CONSTINIT!
It expands to the first available of - constinit (C++20) - [[clang::require_constant_initialization]] (Clang) - __constinit (GCC >= 10) Use it around the code (on and near static QBasicAtomic; this patch makes no attempt to find all statics in qtbase). [ChangeLog][QtCore][QtGlobal] Added macro Q_CONSTINIT. Fixes: QTBUG-100484 Change-Id: I11e0363a7acb3464476859d12ec7f94319d82be7 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
parent
edb64351cd
commit
80b6bcc385
@ -289,7 +289,7 @@ void QPropertyAnimation::updateState(QAbstractAnimation::State newState,
|
|||||||
|
|
||||||
QPropertyAnimation *animToStop = nullptr;
|
QPropertyAnimation *animToStop = nullptr;
|
||||||
{
|
{
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
auto locker = qt_unique_lock(mutex);
|
auto locker = qt_unique_lock(mutex);
|
||||||
typedef QPair<QObject *, QByteArray> QPropertyAnimationPair;
|
typedef QPair<QObject *, QByteArray> QPropertyAnimationPair;
|
||||||
typedef QHash<QPropertyAnimationPair, QPropertyAnimation*> QPropertyAnimationHash;
|
typedef QHash<QPropertyAnimationPair, QPropertyAnimation*> QPropertyAnimationHash;
|
||||||
|
@ -404,7 +404,7 @@ QBindable<QEasingCurve> QVariantAnimation::bindableEasingCurve()
|
|||||||
|
|
||||||
typedef QList<QVariantAnimation::Interpolator> QInterpolatorVector;
|
typedef QList<QVariantAnimation::Interpolator> QInterpolatorVector;
|
||||||
Q_GLOBAL_STATIC(QInterpolatorVector, registeredInterpolators)
|
Q_GLOBAL_STATIC(QInterpolatorVector, registeredInterpolators)
|
||||||
static QBasicMutex registeredInterpolatorsMutex;
|
Q_CONSTINIT static QBasicMutex registeredInterpolatorsMutex;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn template <typename T> void qRegisterAnimationInterpolator(QVariant (*func)(const T &from, const T &to, qreal progress))
|
\fn template <typename T> void qRegisterAnimationInterpolator(QVariant (*func)(const T &from, const T &to, qreal progress))
|
||||||
|
@ -3344,7 +3344,7 @@ Q_CORE_EXPORT Q_DECL_CONST_FUNCTION unsigned int qt_int_sqrt(unsigned int n)
|
|||||||
|
|
||||||
// In the C runtime on all platforms access to the environment is not thread-safe. We
|
// In the C runtime on all platforms access to the environment is not thread-safe. We
|
||||||
// add thread-safety for the Qt wrappers.
|
// add thread-safety for the Qt wrappers.
|
||||||
static QBasicMutex environmentMutex;
|
Q_CONSTINIT static QBasicMutex environmentMutex;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Wraps tzset(), which accesses the environment, so should only be called while
|
Wraps tzset(), which accesses the environment, so should only be called while
|
||||||
@ -4114,6 +4114,33 @@ bool qunsetenv(const char *varName)
|
|||||||
\sa Q_LIKELY()
|
\sa Q_LIKELY()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\macro Q_CONSTINIT
|
||||||
|
\relates <QtGlobal>
|
||||||
|
\since 6.4
|
||||||
|
|
||||||
|
\brief Enforces constant initialization when supported by the compiler.
|
||||||
|
|
||||||
|
If the compiler supports the C++20 \c{constinit} keyword, Clang's
|
||||||
|
\c{[[clang::require_constant_initialization]]} or GCC's \c{__constinit},
|
||||||
|
then this macro expands to the first one of these that is available,
|
||||||
|
otherwise it expands to nothing.
|
||||||
|
|
||||||
|
Variables marked as \c{constinit} cause a compile-error if their
|
||||||
|
initialization would have to be performed at runtime.
|
||||||
|
|
||||||
|
For constants, you can use \c{constexpr} since C++11, but \c{constexpr}
|
||||||
|
makes variables \c{const}, too, whereas \c{constinit} ensures constant
|
||||||
|
initialization, but doesn't make the variable \c{const}:
|
||||||
|
|
||||||
|
\table
|
||||||
|
\header \li Keyword \li Added \li immutable \li constant-initialized
|
||||||
|
\row \li \c{const} \li C++98 \li yes \li not required
|
||||||
|
\row \li \c{constexpr} \li C++11 \li yes \li required
|
||||||
|
\row \li \c{constinit} \li C++20 \li no \li required
|
||||||
|
\endtable
|
||||||
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\macro QT_POINTER_SIZE
|
\macro QT_POINTER_SIZE
|
||||||
\relates <QtGlobal>
|
\relates <QtGlobal>
|
||||||
|
@ -1165,6 +1165,16 @@ constexpr std::underlying_type_t<Enum> qToUnderlying(Enum e) noexcept
|
|||||||
#define Q_IMPLICIT
|
#define Q_IMPLICIT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cpp_constinit
|
||||||
|
# define Q_CONSTINIT constinit
|
||||||
|
#elif defined(__has_cpp_attribute) && __has_cpp_attribute(clang::require_constant_initialization)
|
||||||
|
# define Q_CONSTINIT [[clang::require_constant_initialization]]
|
||||||
|
#elif defined(Q_CC_GNU) && Q_CC_GNU >= 1000
|
||||||
|
# define Q_CONSTINIT __constinit
|
||||||
|
#else
|
||||||
|
# define Q_CONSTINIT
|
||||||
|
#endif
|
||||||
|
|
||||||
template <typename T> inline T *qGetPtrHelper(T *ptr) noexcept { return ptr; }
|
template <typename T> inline T *qGetPtrHelper(T *ptr) noexcept { return ptr; }
|
||||||
template <typename Ptr> inline auto qGetPtrHelper(Ptr &ptr) noexcept -> decltype(ptr.get())
|
template <typename Ptr> inline auto qGetPtrHelper(Ptr &ptr) noexcept -> decltype(ptr.get())
|
||||||
{ static_assert(noexcept(ptr.get()), "Smart d pointers for Q_DECLARE_PRIVATE must have noexcept get()"); return ptr.get(); }
|
{ static_assert(noexcept(ptr.get()), "Smart d pointers for Q_DECLARE_PRIVATE must have noexcept get()"); return ptr.get(); }
|
||||||
|
@ -63,7 +63,7 @@ template <typename QGS> union Holder
|
|||||||
using PlainType = std::remove_cv_t<Type>;
|
using PlainType = std::remove_cv_t<Type>;
|
||||||
|
|
||||||
static constexpr bool ConstructionIsNoexcept = noexcept(QGS::innerFunction(nullptr));
|
static constexpr bool ConstructionIsNoexcept = noexcept(QGS::innerFunction(nullptr));
|
||||||
static inline QBasicAtomicInteger<qint8> guard = { QtGlobalStatic::Uninitialized };
|
Q_CONSTINIT static inline QBasicAtomicInteger<qint8> guard = { QtGlobalStatic::Uninitialized };
|
||||||
|
|
||||||
// union's sole member
|
// union's sole member
|
||||||
PlainType storage;
|
PlainType storage;
|
||||||
@ -144,7 +144,7 @@ protected:
|
|||||||
new (pointer) QGS_Type ARGS; \
|
new (pointer) QGS_Type ARGS; \
|
||||||
} \
|
} \
|
||||||
}; } \
|
}; } \
|
||||||
static QGlobalStatic<QtGlobalStatic::Holder<Q_QGS_ ## NAME>> NAME; \
|
Q_CONSTINIT static QGlobalStatic<QtGlobalStatic::Holder<Q_QGS_ ## NAME>> NAME; \
|
||||||
QT_WARNING_POP
|
QT_WARNING_POP
|
||||||
/**/
|
/**/
|
||||||
|
|
||||||
|
@ -1096,7 +1096,7 @@ struct QMessagePattern
|
|||||||
Q_DECLARE_TYPEINFO(QMessagePattern::BacktraceParams, Q_RELOCATABLE_TYPE);
|
Q_DECLARE_TYPEINFO(QMessagePattern::BacktraceParams, Q_RELOCATABLE_TYPE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QBasicMutex QMessagePattern::mutex;
|
Q_CONSTINIT QBasicMutex QMessagePattern::mutex;
|
||||||
|
|
||||||
QMessagePattern::QMessagePattern()
|
QMessagePattern::QMessagePattern()
|
||||||
{
|
{
|
||||||
@ -1750,7 +1750,7 @@ static bool android_default_message_handler(QtMsgType type,
|
|||||||
static void win_outputDebugString_helper(const QString &message)
|
static void win_outputDebugString_helper(const QString &message)
|
||||||
{
|
{
|
||||||
const qsizetype maxOutputStringLength = 32766;
|
const qsizetype maxOutputStringLength = 32766;
|
||||||
static QBasicMutex m;
|
Q_CONSTINIT static QBasicMutex m;
|
||||||
auto locker = qt_unique_lock(m);
|
auto locker = qt_unique_lock(m);
|
||||||
// fast path: Avoid string copies if one output is enough
|
// fast path: Avoid string copies if one output is enough
|
||||||
if (message.length() <= maxOutputStringLength) {
|
if (message.length() <= maxOutputStringLength) {
|
||||||
@ -1827,7 +1827,7 @@ static void stderr_message_handler(QtMsgType type, const QMessageLogContext &con
|
|||||||
#ifdef Q_OS_WASM
|
#ifdef Q_OS_WASM
|
||||||
// Prevent thread cross-talk, which causes Emscripten to log
|
// Prevent thread cross-talk, which causes Emscripten to log
|
||||||
// non-valid UTF-8. FIXME: remove once we upgrade to emsdk > 2.0.30
|
// non-valid UTF-8. FIXME: remove once we upgrade to emsdk > 2.0.30
|
||||||
static QBasicMutex m;
|
Q_CONSTINIT static QBasicMutex m;
|
||||||
auto locker = qt_unique_lock(m);
|
auto locker = qt_unique_lock(m);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ using namespace Qt::StringLiterals;
|
|||||||
static const char env_override[] = "QT_NO_BUILTIN_SELECTORS";
|
static const char env_override[] = "QT_NO_BUILTIN_SELECTORS";
|
||||||
|
|
||||||
Q_GLOBAL_STATIC(QFileSelectorSharedData, sharedData);
|
Q_GLOBAL_STATIC(QFileSelectorSharedData, sharedData);
|
||||||
static QBasicMutex sharedDataMutex;
|
Q_CONSTINIT static QBasicMutex sharedDataMutex;
|
||||||
|
|
||||||
QFileSelectorPrivate::QFileSelectorPrivate()
|
QFileSelectorPrivate::QFileSelectorPrivate()
|
||||||
: QObjectPrivate()
|
: QObjectPrivate()
|
||||||
|
@ -424,7 +424,7 @@ static QString resolveExecutable(const QString &program)
|
|||||||
{
|
{
|
||||||
// CFBundle is not reentrant, since CFBundleCreate might return a reference
|
// CFBundle is not reentrant, since CFBundleCreate might return a reference
|
||||||
// to a cached bundle object. Protect the bundle calls with a mutex lock.
|
// to a cached bundle object. Protect the bundle calls with a mutex lock.
|
||||||
static QBasicMutex cfbundleMutex;
|
Q_CONSTINIT static QBasicMutex cfbundleMutex;
|
||||||
const auto locker = qt_scoped_lock(cfbundleMutex);
|
const auto locker = qt_scoped_lock(cfbundleMutex);
|
||||||
QCFType<CFBundleRef> bundle = CFBundleCreate(0, url);
|
QCFType<CFBundleRef> bundle = CFBundleCreate(0, url);
|
||||||
// 'executableURL' can be either relative or absolute ...
|
// 'executableURL' can be either relative or absolute ...
|
||||||
|
@ -132,7 +132,7 @@ Q_GLOBAL_STATIC(ConfFileCache, unusedCacheFunc)
|
|||||||
Q_GLOBAL_STATIC(PathHash, pathHashFunc)
|
Q_GLOBAL_STATIC(PathHash, pathHashFunc)
|
||||||
Q_GLOBAL_STATIC(CustomFormatVector, customFormatVectorFunc)
|
Q_GLOBAL_STATIC(CustomFormatVector, customFormatVectorFunc)
|
||||||
|
|
||||||
static QBasicMutex settingsGlobalMutex;
|
Q_CONSTINIT static QBasicMutex settingsGlobalMutex;
|
||||||
|
|
||||||
static QSettings::Format globalDefaultFormat = QSettings::NativeFormat;
|
static QSettings::Format globalDefaultFormat = QSettings::NativeFormat;
|
||||||
|
|
||||||
|
@ -265,8 +265,8 @@ typedef QList<QtStartUpFunction> QStartUpFuncList;
|
|||||||
Q_GLOBAL_STATIC(QStartUpFuncList, preRList)
|
Q_GLOBAL_STATIC(QStartUpFuncList, preRList)
|
||||||
typedef QList<QtCleanUpFunction> QVFuncList;
|
typedef QList<QtCleanUpFunction> QVFuncList;
|
||||||
Q_GLOBAL_STATIC(QVFuncList, postRList)
|
Q_GLOBAL_STATIC(QVFuncList, postRList)
|
||||||
static QBasicMutex globalRoutinesMutex;
|
Q_CONSTINIT static QBasicMutex globalRoutinesMutex;
|
||||||
static bool preRoutinesCalled = false;
|
Q_CONSTINIT static bool preRoutinesCalled = false;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\internal
|
\internal
|
||||||
|
@ -296,7 +296,7 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context)
|
|||||||
{
|
{
|
||||||
#if GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 32
|
#if GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 32
|
||||||
if (qEnvironmentVariableIsEmpty("QT_NO_THREADED_GLIB")) {
|
if (qEnvironmentVariableIsEmpty("QT_NO_THREADED_GLIB")) {
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
QMutexLocker locker(&mutex);
|
QMutexLocker locker(&mutex);
|
||||||
if (!g_thread_supported())
|
if (!g_thread_supported())
|
||||||
g_thread_init(NULL);
|
g_thread_init(NULL);
|
||||||
|
@ -149,7 +149,7 @@ static int *queuedConnectionTypes(const QArgumentType *argumentTypes, int argc)
|
|||||||
return types.release();
|
return types.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
static QBasicMutex _q_ObjectMutexPool[131];
|
Q_CONSTINIT static QBasicMutex _q_ObjectMutexPool[131];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \internal
|
* \internal
|
||||||
|
@ -354,9 +354,9 @@ private:
|
|||||||
LibraryMap libraryMap;
|
LibraryMap libraryMap;
|
||||||
};
|
};
|
||||||
|
|
||||||
static QBasicMutex qt_library_mutex;
|
Q_CONSTINIT static QBasicMutex qt_library_mutex;
|
||||||
static QLibraryStore *qt_library_data = nullptr;
|
Q_CONSTINIT static QLibraryStore *qt_library_data = nullptr;
|
||||||
static bool qt_library_data_once;
|
Q_CONSTINIT static bool qt_library_data_once;
|
||||||
|
|
||||||
QLibraryStore::~QLibraryStore()
|
QLibraryStore::~QLibraryStore()
|
||||||
{
|
{
|
||||||
|
@ -792,7 +792,7 @@ static const QLocaleData *systemData()
|
|||||||
one thread.
|
one thread.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
static QBasicMutex systemDataMutex;
|
Q_CONSTINIT static QBasicMutex systemDataMutex;
|
||||||
systemDataMutex.lock();
|
systemDataMutex.lock();
|
||||||
if (systemLocaleData.m_language_id == 0)
|
if (systemLocaleData.m_language_id == 0)
|
||||||
updateSystemPrivate();
|
updateSystemPrivate();
|
||||||
|
@ -501,8 +501,8 @@ QThreadPool::~QThreadPool()
|
|||||||
*/
|
*/
|
||||||
QThreadPool *QThreadPool::globalInstance()
|
QThreadPool *QThreadPool::globalInstance()
|
||||||
{
|
{
|
||||||
static QPointer<QThreadPool> theInstance;
|
Q_CONSTINIT static QPointer<QThreadPool> theInstance;
|
||||||
static QBasicMutex theMutex;
|
Q_CONSTINIT static QBasicMutex theMutex;
|
||||||
|
|
||||||
const QMutexLocker locker(&theMutex);
|
const QMutexLocker locker(&theMutex);
|
||||||
if (theInstance.isNull() && !QCoreApplication::closingDown())
|
if (theInstance.isNull() && !QCoreApplication::closingDown())
|
||||||
|
@ -68,7 +68,7 @@ void qtsDebug(const char *fmt, ...)
|
|||||||
# define DEBUG_MSG if (false)qDebug
|
# define DEBUG_MSG if (false)qDebug
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static QBasicMutex destructorsMutex;
|
Q_CONSTINIT static QBasicMutex destructorsMutex;
|
||||||
typedef QList<void (*)(void *)> DestructorMap;
|
typedef QList<void (*)(void *)> DestructorMap;
|
||||||
Q_GLOBAL_STATIC(DestructorMap, destructors)
|
Q_GLOBAL_STATIC(DestructorMap, destructors)
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
|
||||||
#if QT_CONFIG(icu)
|
#if QT_CONFIG(icu)
|
||||||
static QBasicMutex s_icu_mutex;
|
Q_CONSTINIT static QBasicMutex s_icu_mutex;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -79,8 +79,8 @@ bool qdbus_loadLibDBus()
|
|||||||
return false;
|
return false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool triedToLoadLibrary = false;
|
Q_CONSTINIT static bool triedToLoadLibrary = false;
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
const auto locker = qt_scoped_lock(mutex);
|
const auto locker = qt_scoped_lock(mutex);
|
||||||
|
|
||||||
QLibrary *&lib = qdbus_libdbus;
|
QLibrary *&lib = qdbus_libdbus;
|
||||||
|
@ -1991,14 +1991,14 @@ public:
|
|||||||
#if defined(QT_NO_DEBUG)
|
#if defined(QT_NO_DEBUG)
|
||||||
// when in a release build, we default these to off.
|
// when in a release build, we default these to off.
|
||||||
// this means that we only affect code that explicitly enables the warning.
|
// this means that we only affect code that explicitly enables the warning.
|
||||||
static int mainThreadWarningAmount = -1;
|
Q_CONSTINIT static int mainThreadWarningAmount = -1;
|
||||||
static int otherThreadWarningAmount = -1;
|
Q_CONSTINIT static int otherThreadWarningAmount = -1;
|
||||||
#else
|
#else
|
||||||
static int mainThreadWarningAmount = 200;
|
Q_CONSTINIT static int mainThreadWarningAmount = 200;
|
||||||
static int otherThreadWarningAmount = 500;
|
Q_CONSTINIT static int otherThreadWarningAmount = 500;
|
||||||
#endif
|
#endif
|
||||||
static bool initializedAmounts = false;
|
Q_CONSTINIT static bool initializedAmounts = false;
|
||||||
static QBasicMutex initializeMutex;
|
Q_CONSTINIT static QBasicMutex initializeMutex;
|
||||||
auto locker = qt_unique_lock(initializeMutex);
|
auto locker = qt_unique_lock(initializeMutex);
|
||||||
|
|
||||||
if (!initializedAmounts) {
|
if (!initializedAmounts) {
|
||||||
|
@ -144,8 +144,8 @@ static int registerComplexDBusType(const QByteArray &typeName)
|
|||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
static struct Hash : QHash<QByteArray, QMetaType>
|
Q_CONSTINIT static struct Hash : QHash<QByteArray, QMetaType>
|
||||||
{
|
{
|
||||||
~Hash()
|
~Hash()
|
||||||
{
|
{
|
||||||
|
@ -186,7 +186,7 @@ static QImageIOHandler *createReadHandlerHelper(QIODevice *device,
|
|||||||
QByteArray suffix;
|
QByteArray suffix;
|
||||||
|
|
||||||
#ifndef QT_NO_IMAGEFORMATPLUGIN
|
#ifndef QT_NO_IMAGEFORMATPLUGIN
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
const auto locker = qt_scoped_lock(mutex);
|
const auto locker = qt_scoped_lock(mutex);
|
||||||
|
|
||||||
typedef QMultiMap<int, QString> PluginKeyMap;
|
typedef QMultiMap<int, QString> PluginKeyMap;
|
||||||
|
@ -145,79 +145,79 @@ QT_BEGIN_NAMESPACE
|
|||||||
Q_CORE_EXPORT void qt_call_post_routines();
|
Q_CORE_EXPORT void qt_call_post_routines();
|
||||||
Q_GUI_EXPORT bool qt_is_tty_app = false;
|
Q_GUI_EXPORT bool qt_is_tty_app = false;
|
||||||
|
|
||||||
Qt::MouseButtons QGuiApplicationPrivate::mouse_buttons = Qt::NoButton;
|
Q_CONSTINIT Qt::MouseButtons QGuiApplicationPrivate::mouse_buttons = Qt::NoButton;
|
||||||
Qt::KeyboardModifiers QGuiApplicationPrivate::modifier_buttons = Qt::NoModifier;
|
Q_CONSTINIT Qt::KeyboardModifiers QGuiApplicationPrivate::modifier_buttons = Qt::NoModifier;
|
||||||
|
|
||||||
QGuiApplicationPrivate::QLastCursorPosition QGuiApplicationPrivate::lastCursorPosition;
|
Q_CONSTINIT QGuiApplicationPrivate::QLastCursorPosition QGuiApplicationPrivate::lastCursorPosition;
|
||||||
|
|
||||||
QWindow *QGuiApplicationPrivate::currentMouseWindow = nullptr;
|
Q_CONSTINIT QWindow *QGuiApplicationPrivate::currentMouseWindow = nullptr;
|
||||||
|
|
||||||
QString QGuiApplicationPrivate::styleOverride;
|
Q_CONSTINIT QString QGuiApplicationPrivate::styleOverride;
|
||||||
|
|
||||||
Qt::ApplicationState QGuiApplicationPrivate::applicationState = Qt::ApplicationInactive;
|
Q_CONSTINIT Qt::ApplicationState QGuiApplicationPrivate::applicationState = Qt::ApplicationInactive;
|
||||||
|
|
||||||
Qt::HighDpiScaleFactorRoundingPolicy QGuiApplicationPrivate::highDpiScaleFactorRoundingPolicy =
|
Q_CONSTINIT Qt::HighDpiScaleFactorRoundingPolicy QGuiApplicationPrivate::highDpiScaleFactorRoundingPolicy =
|
||||||
Qt::HighDpiScaleFactorRoundingPolicy::PassThrough;
|
Qt::HighDpiScaleFactorRoundingPolicy::PassThrough;
|
||||||
|
|
||||||
QPointer<QWindow> QGuiApplicationPrivate::currentDragWindow;
|
Q_CONSTINIT QPointer<QWindow> QGuiApplicationPrivate::currentDragWindow;
|
||||||
|
|
||||||
QList<QGuiApplicationPrivate::TabletPointData> QGuiApplicationPrivate::tabletDevicePoints; // TODO remove
|
Q_CONSTINIT QList<QGuiApplicationPrivate::TabletPointData> QGuiApplicationPrivate::tabletDevicePoints; // TODO remove
|
||||||
|
|
||||||
QPlatformIntegration *QGuiApplicationPrivate::platform_integration = nullptr;
|
Q_CONSTINIT QPlatformIntegration *QGuiApplicationPrivate::platform_integration = nullptr;
|
||||||
QPlatformTheme *QGuiApplicationPrivate::platform_theme = nullptr;
|
Q_CONSTINIT QPlatformTheme *QGuiApplicationPrivate::platform_theme = nullptr;
|
||||||
|
|
||||||
QList<QObject *> QGuiApplicationPrivate::generic_plugin_list;
|
Q_CONSTINIT QList<QObject *> QGuiApplicationPrivate::generic_plugin_list;
|
||||||
|
|
||||||
enum ApplicationResourceFlags
|
enum ApplicationResourceFlags
|
||||||
{
|
{
|
||||||
ApplicationFontExplicitlySet = 0x2
|
ApplicationFontExplicitlySet = 0x2
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned applicationResourceFlags = 0;
|
Q_CONSTINIT static unsigned applicationResourceFlags = 0;
|
||||||
|
|
||||||
QIcon *QGuiApplicationPrivate::app_icon = nullptr;
|
Q_CONSTINIT QIcon *QGuiApplicationPrivate::app_icon = nullptr;
|
||||||
|
|
||||||
QString *QGuiApplicationPrivate::platform_name = nullptr;
|
Q_CONSTINIT QString *QGuiApplicationPrivate::platform_name = nullptr;
|
||||||
QString *QGuiApplicationPrivate::displayName = nullptr;
|
Q_CONSTINIT QString *QGuiApplicationPrivate::displayName = nullptr;
|
||||||
QString *QGuiApplicationPrivate::desktopFileName = nullptr;
|
Q_CONSTINIT QString *QGuiApplicationPrivate::desktopFileName = nullptr;
|
||||||
|
|
||||||
QPalette *QGuiApplicationPrivate::app_pal = nullptr; // default application palette
|
Q_CONSTINIT QPalette *QGuiApplicationPrivate::app_pal = nullptr; // default application palette
|
||||||
|
|
||||||
Qt::MouseButton QGuiApplicationPrivate::mousePressButton = Qt::NoButton;
|
Q_CONSTINIT Qt::MouseButton QGuiApplicationPrivate::mousePressButton = Qt::NoButton;
|
||||||
|
|
||||||
static int mouseDoubleClickDistance = 0;
|
Q_CONSTINIT static int mouseDoubleClickDistance = 0;
|
||||||
static int touchDoubleTapDistance = 0;
|
Q_CONSTINIT static int touchDoubleTapDistance = 0;
|
||||||
|
|
||||||
QWindow *QGuiApplicationPrivate::currentMousePressWindow = nullptr;
|
Q_CONSTINIT QWindow *QGuiApplicationPrivate::currentMousePressWindow = nullptr;
|
||||||
|
|
||||||
static Qt::LayoutDirection layout_direction = Qt::LayoutDirectionAuto;
|
Q_CONSTINIT static Qt::LayoutDirection layout_direction = Qt::LayoutDirectionAuto;
|
||||||
static Qt::LayoutDirection effective_layout_direction = Qt::LeftToRight;
|
Q_CONSTINIT static Qt::LayoutDirection effective_layout_direction = Qt::LeftToRight;
|
||||||
static bool force_reverse = false;
|
Q_CONSTINIT static bool force_reverse = false;
|
||||||
|
|
||||||
QGuiApplicationPrivate *QGuiApplicationPrivate::self = nullptr;
|
Q_CONSTINIT QGuiApplicationPrivate *QGuiApplicationPrivate::self = nullptr;
|
||||||
int QGuiApplicationPrivate::m_fakeMouseSourcePointId = -1;
|
Q_CONSTINIT int QGuiApplicationPrivate::m_fakeMouseSourcePointId = -1;
|
||||||
|
|
||||||
#ifndef QT_NO_CLIPBOARD
|
#ifndef QT_NO_CLIPBOARD
|
||||||
QClipboard *QGuiApplicationPrivate::qt_clipboard = nullptr;
|
Q_CONSTINIT QClipboard *QGuiApplicationPrivate::qt_clipboard = nullptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QList<QScreen *> QGuiApplicationPrivate::screen_list;
|
Q_CONSTINIT QList<QScreen *> QGuiApplicationPrivate::screen_list;
|
||||||
|
|
||||||
QWindowList QGuiApplicationPrivate::window_list;
|
Q_CONSTINIT QWindowList QGuiApplicationPrivate::window_list;
|
||||||
QWindow *QGuiApplicationPrivate::focus_window = nullptr;
|
Q_CONSTINIT QWindow *QGuiApplicationPrivate::focus_window = nullptr;
|
||||||
|
|
||||||
static QBasicMutex applicationFontMutex;
|
Q_CONSTINIT static QBasicMutex applicationFontMutex;
|
||||||
QFont *QGuiApplicationPrivate::app_font = nullptr;
|
Q_CONSTINIT QFont *QGuiApplicationPrivate::app_font = nullptr;
|
||||||
QStyleHints *QGuiApplicationPrivate::styleHints = nullptr;
|
Q_CONSTINIT QStyleHints *QGuiApplicationPrivate::styleHints = nullptr;
|
||||||
bool QGuiApplicationPrivate::obey_desktop_settings = true;
|
Q_CONSTINIT bool QGuiApplicationPrivate::obey_desktop_settings = true;
|
||||||
|
|
||||||
QInputDeviceManager *QGuiApplicationPrivate::m_inputDeviceManager = nullptr;
|
Q_CONSTINIT QInputDeviceManager *QGuiApplicationPrivate::m_inputDeviceManager = nullptr;
|
||||||
|
|
||||||
qreal QGuiApplicationPrivate::m_maxDevicePixelRatio = 0.0;
|
Q_CONSTINIT qreal QGuiApplicationPrivate::m_maxDevicePixelRatio = 0.0;
|
||||||
|
|
||||||
static qreal fontSmoothingGamma = 1.7;
|
Q_CONSTINIT static qreal fontSmoothingGamma = 1.7;
|
||||||
|
|
||||||
bool QGuiApplicationPrivate::quitOnLastWindowClosed = true;
|
Q_CONSTINIT bool QGuiApplicationPrivate::quitOnLastWindowClosed = true;
|
||||||
|
|
||||||
extern void qRegisterGuiVariant();
|
extern void qRegisterGuiVariant();
|
||||||
#if QT_CONFIG(animation)
|
#if QT_CONFIG(animation)
|
||||||
|
@ -264,7 +264,7 @@ QString QInputDevice::seatName() const
|
|||||||
|
|
||||||
using InputDevicesList = QList<const QInputDevice *>;
|
using InputDevicesList = QList<const QInputDevice *>;
|
||||||
Q_GLOBAL_STATIC(InputDevicesList, deviceList)
|
Q_GLOBAL_STATIC(InputDevicesList, deviceList)
|
||||||
static QBasicMutex devicesMutex;
|
Q_CONSTINIT static QBasicMutex devicesMutex;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns a list of all registered input devices (keyboards and pointing devices).
|
Returns a list of all registered input devices (keyboards and pointing devices).
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
QBasicMutex QColorSpacePrivate::s_lutWriteLock;
|
Q_CONSTINIT QBasicMutex QColorSpacePrivate::s_lutWriteLock;
|
||||||
|
|
||||||
static QAtomicPointer<QColorSpacePrivate> s_predefinedColorspacePrivates[QColorSpace::ProPhotoRgb] = {};
|
static QAtomicPointer<QColorSpacePrivate> s_predefinedColorspacePrivates[QColorSpace::ProPhotoRgb] = {};
|
||||||
static void cleanupPredefinedColorspaces()
|
static void cleanupPredefinedColorspaces()
|
||||||
|
@ -1714,7 +1714,7 @@ QNetworkRequest QNetworkAccessManagerPrivate::prepareMultipart(const QNetworkReq
|
|||||||
*/
|
*/
|
||||||
void QNetworkAccessManagerPrivate::ensureBackendPluginsLoaded()
|
void QNetworkAccessManagerPrivate::ensureBackendPluginsLoaded()
|
||||||
{
|
{
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
std::unique_lock locker(mutex);
|
std::unique_lock locker(mutex);
|
||||||
if (!loader())
|
if (!loader())
|
||||||
return;
|
return;
|
||||||
|
@ -1574,7 +1574,7 @@ static PSecurityFunctionTableW pSecurityFunctionTable = nullptr;
|
|||||||
|
|
||||||
static bool q_SSPI_library_load()
|
static bool q_SSPI_library_load()
|
||||||
{
|
{
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
QMutexLocker l(&mutex);
|
QMutexLocker l(&mutex);
|
||||||
|
|
||||||
if (pSecurityFunctionTable == nullptr)
|
if (pSecurityFunctionTable == nullptr)
|
||||||
|
@ -124,7 +124,7 @@ bool QNetworkInformationPrivate::initializeList()
|
|||||||
return false;
|
return false;
|
||||||
if (!dataHolder())
|
if (!dataHolder())
|
||||||
return false;
|
return false;
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
QMutexLocker initLocker(&mutex);
|
QMutexLocker initLocker(&mutex);
|
||||||
|
|
||||||
#if QT_CONFIG(library)
|
#if QT_CONFIG(library)
|
||||||
|
@ -91,7 +91,7 @@ public:
|
|||||||
if (!loader())
|
if (!loader())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
static QBasicMutex mutex;
|
Q_CONSTINIT static QBasicMutex mutex;
|
||||||
const QMutexLocker locker(&mutex);
|
const QMutexLocker locker(&mutex);
|
||||||
if (backends.size())
|
if (backends.size())
|
||||||
return true;
|
return true;
|
||||||
|
@ -47,8 +47,8 @@
|
|||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
static QBasicMutex qAppExiting;
|
Q_CONSTINIT static QBasicMutex qAppExiting;
|
||||||
static bool dispatcherOwnerDestructing = false;
|
Q_CONSTINIT static bool dispatcherOwnerDestructing = false;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QXcbEventQueue
|
\class QXcbEventQueue
|
||||||
|
@ -868,9 +868,9 @@ static LoadedOpenSsl loadOpenSsl()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static QBasicMutex symbolResolveMutex;
|
Q_CONSTINIT static QBasicMutex symbolResolveMutex;
|
||||||
static QBasicAtomicInt symbolsResolved = Q_BASIC_ATOMIC_INITIALIZER(false);
|
Q_CONSTINIT static QBasicAtomicInt symbolsResolved = Q_BASIC_ATOMIC_INITIALIZER(false);
|
||||||
static bool triedToResolveSymbols = false;
|
Q_CONSTINIT static bool triedToResolveSymbols = false;
|
||||||
|
|
||||||
bool q_resolveOpenSslSymbols()
|
bool q_resolveOpenSslSymbols()
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user