MDI: Fixed closing dock widget in MDI would close main window

We only close the window when the window is a FloatingWindow and
it's the last frame

(cherry picked from commit 86419fd979)
This commit is contained in:
Sergio Martins
2022-06-18 23:37:02 +01:00
parent 303532483b
commit d5e46dff31
2 changed files with 24 additions and 1 deletions

View File

@@ -320,7 +320,7 @@ void TitleBar::onCloseClicked()
qWarning() << Q_FUNC_INFO << "Frame with no dock widgets";
}
} else {
if (m_frame->isTheOnlyFrame() && !m_frame->isInMainWindow()) {
if (m_frame->isTheOnlyFrame() && m_frame->isInFloatingWindow()) {
m_frame->view()->closeRootView();
} else {
m_frame->view()->close();

View File

@@ -35,6 +35,7 @@
#include "qtwidgets/views/MDIArea_qtwidgets.h"
#include "qtwidgets/views/MainWindow_qtwidgets.h"
#include "qtwidgets/views/ViewWrapper_qtwidgets.h"
#include "qtwidgets/views/DockWidget_qtwidgets.h"
#include "Platform.h"
#include <QObject>
@@ -133,6 +134,7 @@ private Q_SLOTS:
void tst_mdi_mixed_with_docking2();
void tst_mdi_mixed_with_docking_setMDISize();
void tst_deleteOnClose();
void tstCloseNestedMdi();
// But these are fine to be widget only:
void tst_tabsNotClickable();
@@ -1487,6 +1489,27 @@ void TestQtWidgets::tst_deleteOnClose()
saver.restoreLayout(saved);
}
void TestQtWidgets::tstCloseNestedMdi()
{
// Tests a bug where closing a mdi dock widget would close its main window too
EnsureTopLevelsDeleted e;
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"));
dock1->setWidget(new QPushButton("1"));
mdi->addDockWidget(dock1, {});
dock1->dockWidget()->titleBar()->onCloseClicked();
QVERIFY(p);
QVERIFY(m->isVisible());
}
void TestQtWidgets::initTestCase()
{
KDDockWidgets::Platform::instance()->installMessageHandler();