diff --git a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp index 8d9f1d136..6e5fabedc 100644 --- a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp +++ b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.cpp @@ -275,6 +275,15 @@ void ToolWindowManager::removeToolWindow(QWidget *toolWindow) { delete toolWindow; } +ToolWindowManager* ToolWindowManager::managerOf(QWidget* toolWindow) { + if (!toolWindow) { + qWarning("NULL tool window"); + return NULL; + } + + return findClosestParent(toolWindow); +} + void ToolWindowManager::closeToolWindow(QWidget *toolWindow) { if (!toolWindow) { qWarning("NULL tool window"); @@ -282,16 +291,11 @@ void ToolWindowManager::closeToolWindow(QWidget *toolWindow) { } // search up to find the first parent manager - QWidget *parent = toolWindow->parentWidget(); - while(parent) { - ToolWindowManager *manager = qobject_cast(parent); + ToolWindowManager *manager = findClosestParent(toolWindow); - if(manager) { - manager->removeToolWindow(toolWindow); - return; - } - - parent = parent->parentWidget(); + if(manager) { + manager->removeToolWindow(toolWindow); + return; } qWarning("window not child of any tool window"); diff --git a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h index 662b22fde..8b6050f00 100644 --- a/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h +++ b/qrenderdoc/3rdparty/toolwindowmanager/ToolWindowManager.h @@ -233,7 +233,8 @@ public: * \a toolWindow must be added to the manager prior to calling this function. */ void hideToolWindow(QWidget* toolWindow) { moveToolWindow(toolWindow, NoArea); } - + + static ToolWindowManager* managerOf(QWidget* toolWindow); static void closeToolWindow(QWidget *toolWindow); static void raiseToolWindow(QWidget *toolWindow);