Forward QCloseEvent to the MDI widgets too
Fixes case where docked MDI widgets were not able to block a close
(cherry-picked from commit 61cca1e5ec)
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
|
||||
#include "MDIArea_qtwidgets.h"
|
||||
|
||||
#include "private/View_p.h"
|
||||
|
||||
#include "kddockwidgets/ViewFactory.h"
|
||||
#include "kddockwidgets/views/DockWidgetViewInterface.h"
|
||||
#include "kddockwidgets/controllers/DockWidget.h"
|
||||
@@ -50,6 +52,10 @@ MDIArea_qtwidgets::MDIArea_qtwidgets(QWidget *parent)
|
||||
auto vlay = new QVBoxLayout(this);
|
||||
vlay->addWidget(View_qtwidgets::asQWidget(d->layout));
|
||||
|
||||
View::d->closeRequested.connect([this](QCloseEvent *ev) {
|
||||
d->layout->onCloseEvent(ev);
|
||||
});
|
||||
|
||||
// TODOm3: for qtquick:
|
||||
// QWidgetAdapter::makeItemFillParent(d->layout);
|
||||
}
|
||||
|
||||
@@ -135,6 +135,7 @@ private Q_SLOTS:
|
||||
void tst_mdi_mixed_with_docking_setMDISize();
|
||||
void tst_deleteOnClose();
|
||||
void tstCloseNestedMdi();
|
||||
void tstCloseNestedMDIPropagates();
|
||||
|
||||
// But these are fine to be widget only:
|
||||
void tst_tabsNotClickable();
|
||||
@@ -1510,6 +1511,35 @@ void TestQtWidgets::tstCloseNestedMdi()
|
||||
QVERIFY(m->isVisible());
|
||||
}
|
||||
|
||||
void TestQtWidgets::tstCloseNestedMDIPropagates()
|
||||
{
|
||||
auto m = createMainWindow(QSize(1000, 500), MainWindowOption_HasCentralWidget);
|
||||
QPointer<Controllers::MainWindow> p = m.get();
|
||||
|
||||
auto mdi = new KDDockWidgets::Views::MDIArea_qtwidgets();
|
||||
m->setPersistentCentralView(mdi->asWrapper());
|
||||
|
||||
auto dock1 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock1"));
|
||||
auto nonClosableWidget = Platform::instance()->tests_createNonClosableView();
|
||||
dock1->dockWidget()->setGuestView(nonClosableWidget->asWrapper());
|
||||
mdi->addDockWidget(dock1, {});
|
||||
|
||||
auto dock2 = new KDDockWidgets::Views::DockWidget_qtwidgets(QStringLiteral("MyDock2"));
|
||||
auto nonClosableWidget2 = Platform::instance()->tests_createNonClosableView();
|
||||
dock2->dockWidget()->setGuestView(nonClosableWidget2->asWrapper());
|
||||
dock2->show();
|
||||
|
||||
Platform::instance()->tests_waitForEvent(dock1->controller(), QEvent::Show);
|
||||
QVERIFY(dock1->isVisible());
|
||||
QVERIFY(dock2->isVisible());
|
||||
|
||||
m->close();
|
||||
|
||||
QVERIFY(dock2->isVisible());
|
||||
QVERIFY(dock1->isVisible());
|
||||
}
|
||||
|
||||
|
||||
void TestQtWidgets::initTestCase()
|
||||
{
|
||||
KDDockWidgets::Platform::instance()->installMessageHandler();
|
||||
|
||||
Reference in New Issue
Block a user