diff --git a/CMakeLists.txt b/CMakeLists.txt index 426d4800..d5c9cc80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,9 @@ macro(set_compiler_flags targetName) target_compile_definitions(${targetName} PRIVATE DOCKS_DEVELOPER_MODE QT_FORCE_ASSERTS) if(NOT MSVC) target_compile_options(${targetName} PRIVATE -Wall -Wextra -Werror -Wno-error=deprecated-declarations) + if (APPLE) + target_compile_options(${targetName} PRIVATE -Wweak-vtables) + endif() endif() endif() endmacro() diff --git a/examples/dockwidgets/MyFrameworkWidgetFactory.cpp b/examples/dockwidgets/MyFrameworkWidgetFactory.cpp index ca5730dc..76e0b814 100644 --- a/examples/dockwidgets/MyFrameworkWidgetFactory.cpp +++ b/examples/dockwidgets/MyFrameworkWidgetFactory.cpp @@ -32,6 +32,8 @@ public: init(); } + ~MyTitleBar() override; + void init() { setFixedHeight(60); @@ -56,6 +58,8 @@ public: } }; +MyTitleBar::~MyTitleBar() = default; + // Inheriting from SeparatorWidget instead of Separator as it handles moving and mouse cursor changing class MySeparator : public Layouting::SeparatorWidget { @@ -65,6 +69,8 @@ public: { } + ~MySeparator() override; + void paintEvent(QPaintEvent *) override { QPainter p(this); @@ -72,6 +78,8 @@ public: } }; +MySeparator::~MySeparator() = default; + KDDockWidgets::TitleBar * CustomWidgetFactory::createTitleBar(KDDockWidgets::Frame *frame) const { return new MyTitleBar(frame); diff --git a/src/FocusScope.cpp b/src/FocusScope.cpp index 53fe9ef6..616c9979 100644 --- a/src/FocusScope.cpp +++ b/src/FocusScope.cpp @@ -40,6 +40,8 @@ public: m_inCtor = false; } + ~Private() override; + void setIsFocused(bool); void onFocusObjectChanged(QObject *); bool isInFocusScope(WidgetType *) const; @@ -51,6 +53,9 @@ public: QPointer m_lastFocusedInScope; }; +FocusScope::Private::~Private() +{ +} FocusScope::FocusScope(QWidgetAdapter *thisWidget) : d(new Private(this, thisWidget)) diff --git a/src/FocusScope.h b/src/FocusScope.h index dbd0bd09..fb152b6c 100644 --- a/src/FocusScope.h +++ b/src/FocusScope.h @@ -30,7 +30,7 @@ class FocusScope public: ///@brief constructor explicit FocusScope(QWidgetAdapter *thisWidget); - ~FocusScope(); + virtual ~FocusScope(); ///@brief Returns true if this FocusScope is focused. ///This is similar to the QWidget::hasFocus(), except that it counts with the children being focused too. diff --git a/src/QWidgetAdapter.h b/src/QWidgetAdapter.h index bbf5ea4a..906f0400 100644 --- a/src/QWidgetAdapter.h +++ b/src/QWidgetAdapter.h @@ -79,6 +79,8 @@ public: , LayoutGuestWidgetBase(this) { } + + ~LayoutGuestWidget() override; }; } diff --git a/src/private/multisplitter/tests/tst_multisplitter.cpp b/src/private/multisplitter/tests/tst_multisplitter.cpp index 92607a70..f5f3daac 100644 --- a/src/private/multisplitter/tests/tst_multisplitter.cpp +++ b/src/private/multisplitter/tests/tst_multisplitter.cpp @@ -207,9 +207,7 @@ class MyHostWidget : public QWidget s_testObject->m_hostWidgets << this; } - ~MyHostWidget() { - s_testObject->m_hostWidgets.removeOne(this); - } + ~MyHostWidget() override; void paintEvent(QPaintEvent *) override { @@ -218,6 +216,10 @@ class MyHostWidget : public QWidget } }; +MyHostWidget::~MyHostWidget() { + s_testObject->m_hostWidgets.removeOne(this); +} + static bool serializeDeserializeTest(const std::unique_ptr &root) { // Serializes and deserializes a layout diff --git a/src/private/widgets/QWidgetAdapter_widgets.cpp b/src/private/widgets/QWidgetAdapter_widgets.cpp index 1d25299e..a94d8cb9 100644 --- a/src/private/widgets/QWidgetAdapter_widgets.cpp +++ b/src/private/widgets/QWidgetAdapter_widgets.cpp @@ -106,3 +106,5 @@ QWidget *KDDockWidgets::Private::widgetForWindow(QWindow *window) return window->property("kddockwidgets_qwidget").value(); } + +LayoutGuestWidget::~LayoutGuestWidget() = default; diff --git a/tests/Testing.cpp b/tests/Testing.cpp index 3f6b00e8..a2d03c08 100644 --- a/tests/Testing.cpp +++ b/tests/Testing.cpp @@ -29,7 +29,8 @@ class EventFilter : public QObject { public: EventFilter(QEvent::Type type) : m_type(type) {} - bool eventFilter(QObject *, QEvent *e) + ~EventFilter() override; + bool eventFilter(QObject *, QEvent *e) override { if (e->type() == m_type) m_got = true; @@ -41,6 +42,8 @@ public: bool m_got = false; }; +EventFilter::~EventFilter() = default; + static bool isGammaray() { static bool is = qtHookData[3] != 0; @@ -142,3 +145,5 @@ void Testing::setWarningObserver(WarningObserver *observer) { s_warningObserver = observer; } + +WarningObserver::~WarningObserver() = default; diff --git a/tests/Testing.h b/tests/Testing.h index c7c8120a..8e090e4d 100644 --- a/tests/Testing.h +++ b/tests/Testing.h @@ -39,6 +39,7 @@ namespace Testing { class WarningObserver { public: + virtual ~WarningObserver(); virtual void onFatal() = 0; }; diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index 9fbc0fb1..e101bb97 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -206,9 +206,13 @@ public: { } + ~EmbeddedWindow() override; + MainWindow *const mainWindow; }; +EmbeddedWindow::~EmbeddedWindow() = default; + struct ExpectedAvailableSize // struct for testing MultiSplitterLayout::availableLengthForDrop() { KDDockWidgets::Location location;