diff options
Diffstat (limited to 'src/corelib/global/qoperatingsystemversion.cpp')
-rw-r--r-- | src/corelib/global/qoperatingsystemversion.cpp | 204 |
1 files changed, 117 insertions, 87 deletions
diff --git a/src/corelib/global/qoperatingsystemversion.cpp b/src/corelib/global/qoperatingsystemversion.cpp index 8c4a393742..cf6063fca0 100644 --- a/src/corelib/global/qoperatingsystemversion.cpp +++ b/src/corelib/global/qoperatingsystemversion.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2021 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) 2021 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 #include "qoperatingsystemversion.h" @@ -51,6 +15,7 @@ #include <qdebug.h> #ifdef Q_OS_ANDROID +#include <QtCore/private/qjnihelpers_p.h> #include <QJniObject> #endif @@ -69,7 +34,7 @@ QT_BEGIN_NAMESPACE operating system version (as opposed to the kernel version number or marketing version). - Presently, Android, Apple Platforms (iOS, macOS, tvOS, and watchOS), + Presently, Android, Apple Platforms (iOS, macOS, tvOS, watchOS, and visionOS), and Windows are supported. The \a majorVersion(), \a minorVersion(), and \a microVersion() functions @@ -133,6 +98,7 @@ QT_BEGIN_NAMESPACE \value MacOS The Apple macOS operating system. \value TvOS The Apple tvOS operating system. \value WatchOS The Apple watchOS operating system. + \value VisionOS The Apple visionOS operating system. \value Windows The Microsoft Windows operating system. \value Unknown An unknown or unsupported operating system. @@ -146,13 +112,15 @@ QT_BEGIN_NAMESPACE */ /*! + \fn QOperatingSystemVersion::current() Returns a QOperatingSystemVersion indicating the current OS and its version number. \sa currentType() */ -QOperatingSystemVersion QOperatingSystemVersion::current() +QOperatingSystemVersionBase QOperatingSystemVersionBase::current() { - return QOperatingSystemVersionBase::current(); + static const QOperatingSystemVersionBase v = current_impl(); + return v; } #if !defined(Q_OS_DARWIN) && !defined(Q_OS_WIN) @@ -209,11 +177,13 @@ QOperatingSystemVersionBase QOperatingSystemVersionBase::current_impl() { 9, 0 }, // API level 28 { 10, 0 }, // API level 29 { 11, 0 }, // API level 30 + { 12, 0 }, // API level 31 + { 12, 0 }, // API level 32 + { 13, 0 }, // API level 33 }; // This will give us at least the first 2 version components - const size_t versionIdx = size_t(QJniObject::getStaticField<jint>( - "android/os/Build$VERSION", "SDK_INT")) - 1; + const size_t versionIdx = QtAndroidPrivate::androidSdkVersion() - 1; if (versionIdx < sizeof(versions) / sizeof(versions[0])) { version.m_major = versions[versionIdx].major; version.m_minor = versions[versionIdx].minor; @@ -228,21 +198,15 @@ QOperatingSystemVersionBase QOperatingSystemVersionBase::current_impl() #endif return version; } - -QOperatingSystemVersionBase QOperatingSystemVersionBase::current() -{ - static const QOperatingSystemVersionBase v = current_impl(); - return v; -} #endif -static inline int compareVersionComponents(int lhs, int rhs) +static inline int compareVersionComponents(int lhs, int rhs) noexcept { return lhs >= 0 && rhs >= 0 ? lhs - rhs : 0; } int QOperatingSystemVersionBase::compare(QOperatingSystemVersionBase v1, - QOperatingSystemVersionBase v2) + QOperatingSystemVersionBase v2) noexcept { if (v1.m_major == v2.m_major) { if (v1.m_minor == v2.m_minor) { @@ -253,12 +217,6 @@ int QOperatingSystemVersionBase::compare(QOperatingSystemVersionBase v1, return compareVersionComponents(v1.m_major, v2.m_major); } -int QOperatingSystemVersion::compare(const QOperatingSystemVersion &v1, - const QOperatingSystemVersion &v2) -{ - return QOperatingSystemVersionBase::compare(v1, v2); -} - /*! \fn QVersionNumber QOperatingSystemVersion::version() const @@ -345,11 +303,6 @@ int QOperatingSystemVersion::compare(const QOperatingSystemVersion &v1, \sa type() */ -QString QOperatingSystemVersion::name() const -{ - return QOperatingSystemVersionBase::name(); -} - QString QOperatingSystemVersionBase::name(QOperatingSystemVersionBase osversion) { switch (osversion.type()) { @@ -373,6 +326,8 @@ QString QOperatingSystemVersionBase::name(QOperatingSystemVersionBase osversion) return QStringLiteral("tvOS"); case QOperatingSystemVersionBase::WatchOS: return QStringLiteral("watchOS"); + case QOperatingSystemVersionBase::VisionOS: + return QStringLiteral("visionOS"); case QOperatingSystemVersionBase::Android: return QStringLiteral("Android"); case QOperatingSystemVersionBase::Unknown: @@ -398,6 +353,8 @@ bool QOperatingSystemVersionBase::isAnyOfType(std::initializer_list<OSType> type return std::find(types.begin(), types.end(), type) != types.end(); } +#ifndef QT_BOOTSTRAPPED + /*! \variable QOperatingSystemVersion::Windows7 \brief a version corresponding to Windows 7 (version 6.1). @@ -424,7 +381,7 @@ const QOperatingSystemVersion QOperatingSystemVersion::Windows8_1 = /*! \variable QOperatingSystemVersion::Windows10 - \brief a version corresponding to Windows 10 (version 10.0). + \brief a version corresponding to general Windows 10 (version 10.0). \since 5.9 */ const QOperatingSystemVersion QOperatingSystemVersion::Windows10 = @@ -432,51 +389,95 @@ const QOperatingSystemVersion QOperatingSystemVersion::Windows10 = /*! \variable QOperatingSystemVersion::Windows10_1809 - \brief a version corresponding to Windows 10 1809 (version 10.0.17763). + \brief a version corresponding to Windows 10 October 2018 Update + Version 1809 (version 10.0.17763). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_1809; /*! \variable QOperatingSystemVersion::Windows10_1903 - \brief a version corresponding to Windows 10 1903 (version 10.0.18362). + \brief a version corresponding to Windows 10 May 2019 Update + Version 1903 (version 10.0.18362). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_1903; /*! \variable QOperatingSystemVersion::Windows10_1909 - \brief a version corresponding to Windows 10 1909 (version 10.0.18363). + \brief a version corresponding to Windows 10 November 2019 Update + Version 1909 (version 10.0.18363). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_1909; /*! \variable QOperatingSystemVersion::Windows10_2004 - \brief a version corresponding to Windows 10 2004 (version 10.0.19041). + \brief a version corresponding to Windows 10 May 2020 Update + Version 2004 (version 10.0.19041). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_2004; /*! \variable QOperatingSystemVersion::Windows10_20H2 - \brief a version corresponding to Windows 10 20H2 (version 10.0.19042). + \brief a version corresponding to Windows 10 October 2020 Update + Version 20H2 (version 10.0.19042). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_20H2; /*! \variable QOperatingSystemVersion::Windows10_21H1 - \brief a version corresponding to Windows 10 21H1 (version 10.0.19043). + \brief a version corresponding to Windows 10 May 2021 Update + Version 21H1 (version 10.0.19043). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_21H1; /*! \variable QOperatingSystemVersion::Windows10_21H2 - \brief a version corresponding to Windows 10 21H2 (version 10.0.19044). + \brief a version corresponding to Windows 10 November 2021 Update + Version 21H2 (version 10.0.19044). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_21H2; + +/*! + \variable QOperatingSystemVersion::Windows10_22H2 + \brief a version corresponding to Windows 10 October 2022 Update + Version 22H2 (version 10.0.19045). + \since 6.5 + */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows10_22H2; /*! \variable QOperatingSystemVersion::Windows11 - \brief a version corresponding to Windows 11 (version 10.0.22000). + \brief a version corresponding to the initial release of Windows 11 + (version 10.0.22000). \since 6.3 */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows11; + +/*! + \variable QOperatingSystemVersion::Windows11_21H2 + \brief a version corresponding to Windows 11 Version 21H2 (version 10.0.22000). + \since 6.4 + */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows11_21H2; + +/*! + \variable QOperatingSystemVersion::Windows11_22H2 + \brief a version corresponding to Windows 11 Version 22H2 (version 10.0.22621). + \since 6.4 + */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Windows11_22H2; + +/*! + \variable QOperatingSystemVersion::Windows11_23H2 + \brief a version corresponding to Windows 11 Version 23H2 (version 10.0.22631). + \since 6.6 + */ /*! \variable QOperatingSystemVersion::OSXMavericks @@ -536,24 +537,11 @@ const QOperatingSystemVersion QOperatingSystemVersion::MacOSCatalina = /*! \variable QOperatingSystemVersion::MacOSBigSur - \brief a version corresponding to macOS Big Sur - - The actual version number depends on whether the application was built - using the Xcode 12 SDK. If it was, the version number corresponds - to macOS 11.0. If not it will correspond to macOS 10.16. - - By comparing QOperatingSystemVersion::current() to this constant - you will always end up comparing to the right version number. + \brief a version corresponding to macOS Big Sur (version 11). \since 6.0 */ -const QOperatingSystemVersion QOperatingSystemVersion::MacOSBigSur = [] { -#if defined(Q_OS_DARWIN) - if (QMacVersion::buildSDK(QMacVersion::ApplicationBinary) >= QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 16)) - return QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 11, 0); - else -#endif - return QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 16); -}(); +const QOperatingSystemVersion QOperatingSystemVersion::MacOSBigSur = + QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 11, 0); /*! \variable QOperatingSystemVersion::MacOSMonterey @@ -564,6 +552,19 @@ const QOperatingSystemVersion QOperatingSystemVersion::MacOSMonterey = QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 12, 0); /*! + \variable QOperatingSystemVersion::MacOSVentura + \brief a version corresponding to macOS Ventura (version 13). + \since 6.4 +*/ +const QOperatingSystemVersionBase QOperatingSystemVersion::MacOSVentura; + +/*! + \variable QOperatingSystemVersion::MacOSSonoma + \brief a version corresponding to macOS Sonoma (version 14). + \since 6.5 +*/ + +/*! \variable QOperatingSystemVersion::AndroidJellyBean \brief a version corresponding to Android Jelly Bean (version 4.1, API level 16). \since 5.9 @@ -679,6 +680,35 @@ const QOperatingSystemVersion QOperatingSystemVersion::Android10 = const QOperatingSystemVersion QOperatingSystemVersion::Android11 = QOperatingSystemVersion(QOperatingSystemVersion::Android, 11, 0); +/*! + \variable QOperatingSystemVersion::Android12 + \brief a version corresponding to Android 12 (version 12.0, API level 31). + \since 6.5 + */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Android12; + +/*! + \variable QOperatingSystemVersion::Android12L + \brief a version corresponding to Android 12L (version 12.0, API level 32). + \since 6.5 + */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Android12L; + +/*! + \variable QOperatingSystemVersion::Android13 + \brief a version corresponding to Android 13 (version 13.0, API level 33). + \since 6.5 + */ +const QOperatingSystemVersionBase QOperatingSystemVersion::Android13; + +/*! + \variable QOperatingSystemVersion::Android14 + \brief a version corresponding to Android 14 (version 14.0, API level 34). + \since 6.7 + */ + +#endif // !QT_BOOTSTRAPPED + #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug debug, const QOperatingSystemVersion &ov) { |