diff --git a/Changelog b/Changelog index 12104bbd..e949a22c 100644 --- a/Changelog +++ b/Changelog @@ -6,6 +6,7 @@ - Added Config::setDropIndicatorAllowedFunc() and corresponding example (kddockwidgets_example --hide-certain-docking-indicators) - Fixed case where unfloating wouldn't restore to the main window (#44 and #96) + - Fixed MainWindow not propagating close events to docked widgets * v1.5.1 (unreleased) - X11: Improved detecting which window is under the cursor, by using native X11 API diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 995d6211..02cf8ac5 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -156,3 +156,8 @@ QRect MainWindow::centralAreaGeometry() const { return centralWidget()->geometry(); } + +void MainWindow::closeEvent(QCloseEvent *ev) +{ + onCloseEvent(ev); +} diff --git a/src/MainWindow.h b/src/MainWindow.h index 8543d18e..dd9c6f50 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -57,6 +57,7 @@ public: void setCenterWidgetMargins(const QMargins &margins); protected: + void closeEvent(QCloseEvent *) override; void resizeEvent(QResizeEvent *) override; QRect centralAreaGeometry() const override; diff --git a/src/MainWindowBase.cpp b/src/MainWindowBase.cpp index 332d886f..c0f80562 100644 --- a/src/MainWindowBase.cpp +++ b/src/MainWindowBase.cpp @@ -39,6 +39,8 @@ # include "DockWidget.h" #endif +#include + using namespace KDDockWidgets; static LayoutWidget *createLayoutWidget(MainWindowBase *mainWindow, MainWindowOptions options) @@ -791,3 +793,8 @@ QWidgetOrQuick *MainWindowBase::persistentCentralWidget() const return nullptr; } + +void MainWindowBase::onCloseEvent(QCloseEvent *e) +{ + d->m_layoutWidget->onCloseEvent(e); +} diff --git a/src/MainWindowBase.h b/src/MainWindowBase.h index af79abc5..ae67ea19 100644 --- a/src/MainWindowBase.h +++ b/src/MainWindowBase.h @@ -223,6 +223,7 @@ public: QRect windowGeometry() const; protected: + void onCloseEvent(QCloseEvent *); void setUniqueName(const QString &uniqueName); void onResized(QResizeEvent *); // Because QtQuick doesn't have resizeEvent() virtual QMargins centerWidgetMargins() const = 0; diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index afd8d683..4ea17412 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -2989,8 +2989,11 @@ void TestDocks::tst_preventClose() fw->close(); QVERIFY(dock1->isVisible()); - dock1->deleteLater(); - QVERIFY(Testing::waitForDeleted(dock1)); + // Put into a main window + auto m = createMainWindow(); + m->addDockWidget(dock1, KDDockWidgets::Location_OnRight); + m->close(); + QVERIFY(dock1->isVisible()); } void TestDocks::tst_propagateMinSize()