From 0c8b98774cd0f3dad939d31e820e7e47c1da088a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 13 Jul 2021 16:53:03 +0200 Subject: [PATCH] QtWidgets: clean up API removals As suggested by Peppe and Lars, use one file per module to hold the removed functions, not one per major version and subdir. Also, make the remove macro more like QT_DEPRECATED_SINCE. Change-Id: I2ade51ccc8cb8720ece493936775dfd3b5d438d7 Reviewed-by: Qt CI Bot Reviewed-by: Friedemann Kleint Reviewed-by: Lars Knoll --- src/corelib/global/qglobal.h | 36 +++++++++++++++++++ src/widgets/CMakeLists.txt | 4 +-- .../removed_api.cpp} | 6 ++-- src/widgets/widgets/qmenu.h | 2 +- src/widgets/widgets/qtoolbar.h | 2 +- 5 files changed, 43 insertions(+), 7 deletions(-) rename src/widgets/{widgets/qtwidgets_widgets_removed_functions_in_6_3.cpp => compat/removed_api.cpp} (96%) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index ff0da86f65..8bc7181633 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -440,6 +440,42 @@ typedef double qreal; #define QT_DEPRECATED_VERSION_5(minor) QT_DEPRECATED_VERSION_5_##minor #define QT_DEPRECATED_VERSION(major, minor) QT_DEPRECATED_VERSION_##major##_##minor +/* + QT_REMOVED_SINCE(major, minor) evaluates as true if the Qt version is greater than + the deprecation point specified \e and QT_BUILD_REMOVED_API is defined. + + Use it to remove functions from the API, but not the ABI, by moving their definitions + into the module's \c{removed_api/} subdir and defining QT_BUILD_REMOVED_API. + + Example: + + // header + #if QT_REMOVED_SINCE(6, 3) + void removedFunction(); // function removed since Qt 6.3 + #endif + + // implementation + // ... moved from here ... + + // removed_api/some.cpp + #define QT_BUILD_REMOVED_API + #include + + #include + + #if QT_REMOVED_SINCE(6, 3) + void removedFunction() { newFunction(); } + #endif + + The function is now removed from the API, but remains in the ABI until + the deprecation point moves past 6.3. +*/ +#ifdef QT_BUILD_REMOVED_API +#define QT_REMOVED_SINCE(major, minor) QT_DEPRECATED_SINCE(major, minor) +#else +#define QT_REMOVED_SINCE(major, minor) 0 +#endif + #ifdef __cplusplus // A tag to help mark stuff deprecated (cf. QStringViewLiteral) namespace QtPrivate { diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 324a26d07d..f2bb1e58a1 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -8,6 +8,7 @@ qt_internal_add_module(Widgets QMAKE_MODULE_CONFIG uic PLUGIN_TYPES styles SOURCES + compat/removed_api.cpp itemviews/qfileiconprovider.cpp itemviews/qfileiconprovider.h itemviews/qfileiconprovider_p.h kernel/qapplication.cpp kernel/qapplication.h kernel/qapplication_p.h kernel/qboxlayout.cpp kernel/qboxlayout.h @@ -47,7 +48,6 @@ qt_internal_add_module(Widgets widgets/qabstractscrollarea.cpp widgets/qabstractscrollarea.h widgets/qabstractscrollarea_p.h widgets/qfocusframe.cpp widgets/qfocusframe.h widgets/qframe.cpp widgets/qframe.h widgets/qframe_p.h - widgets/qtwidgets_widgets_removed_functions_in_6_3.cpp widgets/qwidgetanimator.cpp widgets/qwidgetanimator_p.h DEFINES QT_NO_USING_NAMESPACE @@ -239,7 +239,7 @@ set(qstyle_resource_files ) set(widgets_no_pch_sources - widgets/qtwidgets_widgets_removed_functions_in_6_3.cpp + compat/removed_api.cpp ) foreach(src ${widgets_no_pch_sources}) diff --git a/src/widgets/widgets/qtwidgets_widgets_removed_functions_in_6_3.cpp b/src/widgets/compat/removed_api.cpp similarity index 96% rename from src/widgets/widgets/qtwidgets_widgets_removed_functions_in_6_3.cpp rename to src/widgets/compat/removed_api.cpp index 535aec8ce4..3af337d853 100644 --- a/src/widgets/widgets/qtwidgets_widgets_removed_functions_in_6_3.cpp +++ b/src/widgets/compat/removed_api.cpp @@ -37,13 +37,13 @@ ** ****************************************************************************/ -#define QT_BUILD_FUNCTIONS_REMOVED_IN_6_3 +#define QT_BUILD_REMOVED_API #include "qglobal.h" QT_USE_NAMESPACE -#if QT_DEPRECATED_SINCE(6, 3) +#if QT_REMOVED_SINCE(6, 3) #include "qmenu.h" @@ -99,4 +99,4 @@ QAction *QToolBar::addAction(const QIcon &icon, const QString &text, // #include // // implement removed functions from qotherheader.h -#endif // QT_DEPRECATED_SINCE(6, 3) +#endif // QT_REMOVED_SINCE(6, 3) diff --git a/src/widgets/widgets/qmenu.h b/src/widgets/widgets/qmenu.h index 7d502f9f1b..68481308fb 100644 --- a/src/widgets/widgets/qmenu.h +++ b/src/widgets/widgets/qmenu.h @@ -76,7 +76,7 @@ public: ~QMenu(); using QWidget::addAction; -#ifdef QT_BUILD_FUNCTIONS_REMOVED_IN_6_3 +#if QT_REMOVED_SINCE(6, 3) QAction *addAction(const QString &text); QAction *addAction(const QIcon &icon, const QString &text); #if !QT_CONFIG(shortcut) diff --git a/src/widgets/widgets/qtoolbar.h b/src/widgets/widgets/qtoolbar.h index caca716d2e..09f639d3e7 100644 --- a/src/widgets/widgets/qtoolbar.h +++ b/src/widgets/widgets/qtoolbar.h @@ -90,7 +90,7 @@ public: void clear(); using QWidget::addAction; -#ifdef QT_BUILD_FUNCTIONS_REMOVED_IN_6_3 +#if QT_REMOVED_SINCE(6, 3) QAction *addAction(const QString &text); QAction *addAction(const QIcon &icon, const QString &text); QAction *addAction(const QString &text, const QObject *receiver, const char* member);