diff options
author | Kai Köhne <kai.koehne@qt.io> | 2021-11-15 13:28:17 +0100 |
---|---|---|
committer | Kai Koehne <kai.koehne@qt.io> | 2021-11-16 17:26:04 +0000 |
commit | b99adf7a8101b48c3acd246baeacec9a5f871acd (patch) | |
tree | 1d10cf945a9ce48794627306c1977238727f931d | |
parent | 61d5783ba87a4eaed01b5756970e4852d74b85a6 (diff) |
Do not include qloggingcategory.h in public headers
Reduce overhead for including qguiapplication.h by splitting
up qnativeinterface.h into a public and a private part.
[ChangeLog][Potentially Source-Incompatible Changes] The
qguiapplication.h header no longer implicitly includes
qloggingcategory.h. If your code depends on the transitive
include, explicitly include <QLoggingCategory> where needed.
Pick-to: 6.2
Task-number: QTBUG-97601
Change-Id: Ic02327a1c3092e21730160af5c59a9d58dc1239c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r-- | src/corelib/global/qglobal.cpp | 5 | ||||
-rw-r--r-- | src/corelib/global/qnativeinterface.h | 33 | ||||
-rw-r--r-- | src/corelib/global/qnativeinterface_p.h | 99 | ||||
-rw-r--r-- | src/corelib/platform/android/qandroidnativeinterface.cpp | 1 | ||||
-rw-r--r-- | src/gui/kernel/qguiapplication_p.h | 1 | ||||
-rw-r--r-- | tests/auto/corelib/global/qnativeinterface/CMakeLists.txt | 2 | ||||
-rw-r--r-- | tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp | 1 |
7 files changed, 107 insertions, 35 deletions
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index d455f887ed..c8f97c7148 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -52,6 +52,7 @@ #endif // Q_OS_WIN || Q_OS_CYGWIN #include <private/qlocale_tools_p.h> #include "qnativeinterface.h" +#include "qnativeinterface_p.h" #include <qmutex.h> #include <QtCore/private/qlocking_p.h> @@ -4923,8 +4924,8 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters) declares __CFMutableString and CFMutableStringRef. */ -namespace QNativeInterface::Private { - Q_LOGGING_CATEGORY(lcNativeInterface, "qt.nativeinterface") +namespace QtPrivate { +Q_LOGGING_CATEGORY(lcNativeInterface, "qt.nativeinterface") } QT_END_NAMESPACE diff --git a/src/corelib/global/qnativeinterface.h b/src/corelib/global/qnativeinterface.h index 56805d5a6e..bc25600efc 100644 --- a/src/corelib/global/qnativeinterface.h +++ b/src/corelib/global/qnativeinterface.h @@ -41,7 +41,6 @@ #define QNATIVEINTERFACE_H #include <QtCore/qglobal.h> -#include <QtCore/qloggingcategory.h> QT_BEGIN_NAMESPACE @@ -159,9 +158,6 @@ namespace QNativeInterface::Private { // of incompatible interface types read better. template <typename I> struct NativeInterface : TypeInfo<I> {}; - - Q_CORE_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcNativeInterface) - } // QNativeInterface::Private // Declares an accessor for the native interface @@ -183,35 +179,6 @@ namespace QNativeInterface::Private { public: #endif -// Provides a definition for the interface destructor -#define QT_DEFINE_NATIVE_INTERFACE_2(Namespace, InterfaceClass) \ - QT_PREPEND_NAMESPACE(Namespace)::InterfaceClass::~InterfaceClass() = default - -#define QT_DEFINE_NATIVE_INTERFACE(...) QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface, __VA_ARGS__) -#define QT_DEFINE_PRIVATE_NATIVE_INTERFACE(...) QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface::Private, __VA_ARGS__) - -#define QT_NATIVE_INTERFACE_RETURN_IF(NativeInterface, baseType) \ - { \ - using QNativeInterface::Private::lcNativeInterface; \ - using QNativeInterface::Private::TypeInfo; \ - qCDebug(lcNativeInterface, "Comparing requested interface name %s with available %s", \ - name, TypeInfo<NativeInterface>::name()); \ - if (qstrcmp(name, TypeInfo<NativeInterface>::name()) == 0) { \ - qCDebug(lcNativeInterface, "Match for interface %s. Comparing revisions (requested %d / available %d)", \ - name, revision, TypeInfo<NativeInterface>::revision()); \ - if (revision == TypeInfo<NativeInterface>::revision()) { \ - qCDebug(lcNativeInterface) << "Full match. Returning dynamic cast of" << baseType; \ - return dynamic_cast<NativeInterface*>(baseType); \ - } else { \ - qCWarning(lcNativeInterface, "Native interface revision mismatch (requested %d / available %d) for interface %s", \ - revision, TypeInfo<NativeInterface>::revision(), name); \ - return nullptr; \ - } \ - } else { \ - qCDebug(lcNativeInterface, "No match for requested interface name %s", name); \ - } \ - } - QT_END_NAMESPACE #endif // QNATIVEINTERFACE_H diff --git a/src/corelib/global/qnativeinterface_p.h b/src/corelib/global/qnativeinterface_p.h new file mode 100644 index 0000000000..65332eeecb --- /dev/null +++ b/src/corelib/global/qnativeinterface_p.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** 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$ +** +****************************************************************************/ + +#ifndef QNATIVEINTERFACE_P_H +#define QNATIVEINTERFACE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <QtCore/qglobal.h> +#include <QtCore/qloggingcategory.h> + +QT_BEGIN_NAMESPACE + +namespace QtPrivate { +Q_CORE_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcNativeInterface) +} + +// Provides a definition for the interface destructor +#define QT_DEFINE_NATIVE_INTERFACE_2(Namespace, InterfaceClass) \ + QT_PREPEND_NAMESPACE(Namespace)::InterfaceClass::~InterfaceClass() = default + +#define QT_DEFINE_NATIVE_INTERFACE(...) \ + QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface, __VA_ARGS__) +#define QT_DEFINE_PRIVATE_NATIVE_INTERFACE(...) \ + QT_OVERLOADED_MACRO(QT_DEFINE_NATIVE_INTERFACE, QNativeInterface::Private, __VA_ARGS__) + +#define QT_NATIVE_INTERFACE_RETURN_IF(NativeInterface, baseType) \ + { \ + using QtPrivate::lcNativeInterface; \ + using QNativeInterface::Private::TypeInfo; \ + qCDebug(lcNativeInterface, "Comparing requested interface name %s with available %s", \ + name, TypeInfo<NativeInterface>::name()); \ + if (qstrcmp(name, TypeInfo<NativeInterface>::name()) == 0) { \ + qCDebug(lcNativeInterface, \ + "Match for interface %s. Comparing revisions (requested %d / available %d)", \ + name, revision, TypeInfo<NativeInterface>::revision()); \ + if (revision == TypeInfo<NativeInterface>::revision()) { \ + qCDebug(lcNativeInterface) << "Full match. Returning dynamic cast of" << baseType; \ + return dynamic_cast<NativeInterface *>(baseType); \ + } else { \ + qCWarning(lcNativeInterface, \ + "Native interface revision mismatch (requested %d / available %d) for " \ + "interface %s", \ + revision, TypeInfo<NativeInterface>::revision(), name); \ + return nullptr; \ + } \ + } else { \ + qCDebug(lcNativeInterface, "No match for requested interface name %s", name); \ + } \ + } + +QT_END_NAMESPACE + +#endif // QNATIVEINTERFACE_P_H diff --git a/src/corelib/platform/android/qandroidnativeinterface.cpp b/src/corelib/platform/android/qandroidnativeinterface.cpp index a3a10091cb..b8e2cbb424 100644 --- a/src/corelib/platform/android/qandroidnativeinterface.cpp +++ b/src/corelib/platform/android/qandroidnativeinterface.cpp @@ -39,6 +39,7 @@ #include <QtCore/qcoreapplication_platform.h> +#include <QtCore/private/qnativeinterface_p.h> #include <QtCore/private/qjnihelpers_p.h> #include <QtCore/qjniobject.h> #if QT_CONFIG(future) && !defined(QT_NO_QOBJECT) diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h index 7616d59ed1..6bb973ee75 100644 --- a/src/gui/kernel/qguiapplication_p.h +++ b/src/gui/kernel/qguiapplication_p.h @@ -59,6 +59,7 @@ #include <QtCore/private/qcoreapplication_p.h> #include <QtCore/qnativeinterface.h> +#include <QtCore/private/qnativeinterface_p.h> #include <QtCore/private/qthread_p.h> #include <qpa/qwindowsysteminterface.h> diff --git a/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt b/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt index 639c7c3ec7..52242b4292 100644 --- a/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt +++ b/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt @@ -1,4 +1,6 @@ qt_internal_add_test(tst_qnativeinterface SOURCES tst_qnativeinterface.cpp + LIBRARIES + Qt::CorePrivate ) diff --git a/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp b/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp index dd4cc4755b..5291133406 100644 --- a/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp +++ b/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp @@ -29,6 +29,7 @@ #include <QTest> #include <QtCore/qnativeinterface.h> +#include <QtCore/private/qnativeinterface_p.h> class tst_QNativeInterface: public QObject { |