diff --git a/src/core/DockRegistry.cpp b/src/core/DockRegistry.cpp index 4edffa1f1..a0ba8775f 100644 --- a/src/core/DockRegistry.cpp +++ b/src/core/DockRegistry.cpp @@ -254,6 +254,20 @@ Core::Group *DockRegistry::groupInMDIResize() const return nullptr; } +Vector DockRegistry::dockwidgetsReferencedByDropArea(Core::DropArea *dropArea) const +{ + Vector dockWidgets; + + for (auto dw : m_dockWidgets) { + auto lastPositions = dw->d->lastPosition(); + if (lastPositions->containsPlaceholderFromLayout(dropArea->asLayoutingHost())) { + dockWidgets.append(dw); + } + } + + return dockWidgets; +} + void DockRegistry::setCurrentCloseReason(CloseReason reason) { d->m_currentCloseReason = reason; diff --git a/src/core/DockRegistry.h b/src/core/DockRegistry.h index 16533267c..f040b4b43 100644 --- a/src/core/DockRegistry.h +++ b/src/core/DockRegistry.h @@ -220,6 +220,13 @@ class DOCKS_EXPORT DockRegistry : public Core::Object, public Core::EventFilterI ///@brief Returns the Group which is being resized in a MDI layout. nullptr if none Core::Group *groupInMDIResize() const; + + /// Returns all dock widgets which have a "previous position" in the specified DropArea + /// A DropArea is a layout of dock widgets, when a dock widget is closed, the layout will + /// still keep a placeholder for it, so it can be restored to the correct place. This function + /// returns all dock widgets that have such placeholder. + Vector dockwidgetsReferencedByDropArea(Core::DropArea *) const; + void setCurrentCloseReason(CloseReason); CloseReason currentCloseReason();