Skip to content

Commit a0f0640

Browse files
Fixed CustomCloseHandling for floating widgets
1 parent df74686 commit a0f0640

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

demo/MainWindow.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,21 @@ void MainWindowPrivate::createContent()
458458
DockManager->addDockWidget(ads::TopDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
459459
auto BottomDockArea = DockManager->addDockWidget(ads::BottomDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
460460
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(), RighDockArea);
461-
DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(), BottomDockArea);
461+
auto LabelDockWidget = createLongTextLabelDockWidget();
462+
std::cout << "DockWidget " << LabelDockWidget->objectName().toStdString() << std::endl;
463+
DockManager->addDockWidget(ads::CenterDockWidgetArea, LabelDockWidget, BottomDockArea);
464+
465+
// Tests CustomCloseHandling without DeleteOnClose
466+
LabelDockWidget->setFeature(ads::CDockWidget::CustomCloseHandling, true);
467+
QObject::connect(LabelDockWidget, &ads::CDockWidget::closeRequested, [LabelDockWidget, this]()
468+
{
469+
int Result = QMessageBox::question(_this, "Custom Close Request",
470+
"Do you really want to close this dock widget?");
471+
if (QMessageBox::Yes == Result)
472+
{
473+
LabelDockWidget->closeDockWidget();
474+
}
475+
});
462476

463477
Action = ui.menuTests->addAction(QString("Set %1 Floating").arg(DockWidget->windowTitle()));
464478
DockWidget->connect(Action, SIGNAL(triggered()), SLOT(setFloating()));

src/FloatingDockContainer.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -807,18 +807,28 @@ void CFloatingDockContainer::closeEvent(QCloseEvent *event)
807807
return;
808808
}
809809

810+
bool HasOpenDockWidgets = false;
810811
for (auto DockWidget : d->DockContainer->openedDockWidgets())
811812
{
812813
if (DockWidget->features().testFlag(CDockWidget::DockWidgetDeleteOnClose) || DockWidget->features().testFlag(CDockWidget::CustomCloseHandling))
813814
{
814-
DockWidget->closeDockWidgetInternal();
815+
bool Closed = DockWidget->closeDockWidgetInternal();
816+
if (!Closed)
817+
{
818+
HasOpenDockWidgets = true;
819+
}
815820
}
816821
else
817822
{
818823
DockWidget->toggleView(false);
819824
}
820825
}
821826

827+
if (HasOpenDockWidgets)
828+
{
829+
return;
830+
}
831+
822832
// In Qt version after 5.9.2 there seems to be a bug that causes the
823833
// QWidget::event() function to not receive any NonClientArea mouse
824834
// events anymore after a close/show cycle. The bug is reported here:

0 commit comments

Comments
 (0)