diff --git a/qrenderdoc/Code/Interface/Extensions.h b/qrenderdoc/Code/Interface/Extensions.h index e64be9767..2a6448a26 100644 --- a/qrenderdoc/Code/Interface/Extensions.h +++ b/qrenderdoc/Code/Interface/Extensions.h @@ -381,6 +381,15 @@ added in a vertical layout. )"); virtual QWidget *CreateToplevelWidget(const rdcstr &windowTitle, WidgetCallback closed) = 0; + DOCUMENT(R"(Closes a top-level widget as if the user had clicked to close. + +This function is undefined if used on a non top-level widget. It will invoke the closed widget +callback. + +:param QWidget widget: The top-level widget to close. +)"); + virtual void CloseToplevelWidget(QWidget *widget) = 0; + // widget hierarchy DOCUMENT(R"(Set the internal name of a widget. This is not displayed anywhere but can be used by diff --git a/qrenderdoc/Code/MiniQtHelper.cpp b/qrenderdoc/Code/MiniQtHelper.cpp index 26fa9eeb0..bfcb4837e 100644 --- a/qrenderdoc/Code/MiniQtHelper.cpp +++ b/qrenderdoc/Code/MiniQtHelper.cpp @@ -42,6 +42,7 @@ #include "Widgets/Extended/RDLineEdit.h" #include "Widgets/Extended/RDTextEdit.h" #include "Widgets/Extended/RDToolButton.h" +#include "toolwindowmanager/ToolWindowManager.h" MiniQtHelper::MiniQtHelper(ICaptureContext &ctx) : m_Ctx(ctx) { @@ -98,6 +99,12 @@ QWidget *MiniQtHelper::CreateToplevelWidget(const rdcstr &windowTitle, WidgetCal return ret; } +void MiniQtHelper::CloseToplevelWidget(QWidget *widget) +{ + if(widget) + ToolWindowManager::closeToolWindow(widget); +} + void MiniQtHelper::SetWidgetName(QWidget *widget, const rdcstr &name) { if(widget) diff --git a/qrenderdoc/Code/MiniQtHelper.h b/qrenderdoc/Code/MiniQtHelper.h index 9dbb6686f..05cb351da 100644 --- a/qrenderdoc/Code/MiniQtHelper.h +++ b/qrenderdoc/Code/MiniQtHelper.h @@ -38,6 +38,7 @@ public: void InvokeOntoUIThread(std::function callback) override; QWidget *CreateToplevelWidget(const rdcstr &windowTitle, WidgetCallback closed) override; + void CloseToplevelWidget(QWidget *widget) override; // widget hierarchy diff --git a/qrenderdoc/Windows/PythonShell.cpp b/qrenderdoc/Windows/PythonShell.cpp index 2344f238a..047f70a5f 100644 --- a/qrenderdoc/Windows/PythonShell.cpp +++ b/qrenderdoc/Windows/PythonShell.cpp @@ -99,6 +99,10 @@ struct MiniQtInvoker : ObjectForwarder { return InvokeRetFunction(&IMiniQtHelper::CreateToplevelWidget, windowTitle, closed); } + void CloseToplevelWidget(QWidget *widget) + { + InvokeVoidFunction(&IMiniQtHelper::CloseToplevelWidget, widget); + } // widget hierarchy