diff --git a/gui/include/DragAndDrop/DragDropHelper.h b/gui/include/DragAndDrop/DragDropHelper.h index c557cb5..7274376 100644 --- a/gui/include/DragAndDrop/DragDropHelper.h +++ b/gui/include/DragAndDrop/DragDropHelper.h @@ -63,6 +63,10 @@ public: void setHightlightedDragWidget(VisualizationDragWidget *dragWidget); VisualizationDragWidget *getHightlightedDragWidget() const; + /// Delays the closing of a widget during a drag&drop operation + void delayedCloseWidget(QWidget *widget); + void doCloseWidgets(); + private: class DragDropHelperPrivate; spimpl::unique_impl_ptr impl; diff --git a/gui/src/DragAndDrop/DragDropHelper.cpp b/gui/src/DragAndDrop/DragDropHelper.cpp index dd2b000..4958a75 100644 --- a/gui/src/DragAndDrop/DragDropHelper.cpp +++ b/gui/src/DragAndDrop/DragDropHelper.cpp @@ -38,6 +38,8 @@ struct DragDropHelper::DragDropHelperPrivate { QMetaObject::Connection m_DragWidgetDestroyedConnection; QMetaObject::Connection m_HighlightedWidgetDestroyedConnection; + QList m_WidgetToClose; + explicit DragDropHelperPrivate() : m_PlaceHolder{std::make_unique()}, m_DragDropScroller{std::make_unique()}, @@ -209,6 +211,21 @@ VisualizationDragWidget *DragDropHelper::getHightlightedDragWidget() const return impl->m_HighlightedDragWidget; } +void DragDropHelper::delayedCloseWidget(QWidget *widget) +{ + widget->hide(); + impl->m_WidgetToClose << widget; +} + +void DragDropHelper::doCloseWidgets() +{ + for (auto widget : impl->m_WidgetToClose) { + widget->close(); + } + + impl->m_WidgetToClose.clear(); +} + bool DragDropHelper::checkMimeDataForVisualization(const QMimeData *mimeData, VisualizationDragDropContainer *dropContainer) { diff --git a/gui/src/Visualization/VisualizationDragDropContainer.cpp b/gui/src/Visualization/VisualizationDragDropContainer.cpp index 07e5b4e..e8136ba 100644 --- a/gui/src/Visualization/VisualizationDragDropContainer.cpp +++ b/gui/src/Visualization/VisualizationDragDropContainer.cpp @@ -210,8 +210,9 @@ void VisualizationDragDropContainer::startDrag(VisualizationDragWidget *dragWidg // do not add the placeHolder } - // Note: The exec() is blocking on windows but not on linux and macOS - drag->exec(Qt::MoveAction | Qt::CopyAction); + drag->exec(Qt::MoveAction | Qt::CopyAction, Qt::MoveAction); + + helper.doCloseWidgets(); } else { qCWarning(LOG_VisualizationDragDropContainer()) diff --git a/gui/src/Visualization/VisualizationTabWidget.cpp b/gui/src/Visualization/VisualizationTabWidget.cpp index 9c6d8ab..b706f40 100644 --- a/gui/src/Visualization/VisualizationTabWidget.cpp +++ b/gui/src/Visualization/VisualizationTabWidget.cpp @@ -237,11 +237,11 @@ void VisualizationTabWidget::VisualizationTabWidgetPrivate::dropGraph( if (nbGraph == 1) { // This is the only graph in the previous zone, close the zone - graphWidget->parentZoneWidget()->close(); + helper.delayedCloseWidget(graphWidget->parentZoneWidget()); } else { // Close the graph - graphWidget->close(); + helper.delayedCloseWidget(graphWidget); } tabWidget->createZone(variables, index); @@ -258,7 +258,7 @@ void VisualizationTabWidget::VisualizationTabWidgetPrivate::dropGraph( // Close the old zone if it was the only graph inside if (nbGraph == 1) { - parentZoneWidget->close(); + helper.delayedCloseWidget(parentZoneWidget); } } } diff --git a/gui/src/Visualization/VisualizationZoneWidget.cpp b/gui/src/Visualization/VisualizationZoneWidget.cpp index 365012f..f32c34d 100644 --- a/gui/src/Visualization/VisualizationZoneWidget.cpp +++ b/gui/src/Visualization/VisualizationZoneWidget.cpp @@ -452,11 +452,11 @@ void VisualizationZoneWidget::VisualizationZoneWidgetPrivate::dropGraph( auto nbGraph = parentDragDropContainer->countDragWidget(); if (nbGraph == 1) { // This is the only graph in the previous zone, close the zone - previousParentZoneWidget->close(); + helper.delayedCloseWidget(previousParentZoneWidget); } else { // Close the graph - graphWidget->close(); + helper.delayedCloseWidget(graphWidget); } // Creates the new graph in the zone