diff --git a/qrenderdoc/Code/CaptureContext.cpp b/qrenderdoc/Code/CaptureContext.cpp index b632b3b1d..05c277bd7 100644 --- a/qrenderdoc/Code/CaptureContext.cpp +++ b/qrenderdoc/Code/CaptureContext.cpp @@ -25,6 +25,7 @@ #include "CaptureContext.h" #include #include +#include #include #include #include @@ -282,6 +283,18 @@ void GUIInvoke::blockcall(const std::function &f) QMetaObject::invokeMethod(invoke, "doInvoke", Qt::BlockingQueuedConnection); } +void RDDialog::show(QMenu *menu, QPoint pos) +{ + menu->setWindowModality(Qt::ApplicationModal); + menu->popup(pos); + QEventLoop loop; + while(menu->isVisible()) + { + loop.processEvents(QEventLoop::WaitForMoreEvents); + QCoreApplication::sendPostedEvents(); + } +} + void RDDialog::show(QDialog *dialog) { dialog->setWindowModality(Qt::ApplicationModal); diff --git a/qrenderdoc/Code/CaptureContext.h b/qrenderdoc/Code/CaptureContext.h index fa8272e57..993480283 100644 --- a/qrenderdoc/Code/CaptureContext.h +++ b/qrenderdoc/Code/CaptureContext.h @@ -253,9 +253,12 @@ public: bool isRunning() { return m_Thread; } }; +class QMenu; + // helper for doing a manual blocking invoke of a dialog struct RDDialog { + static void show(QMenu *menu, QPoint pos); static void show(QDialog *dialog); static QMessageBox::StandardButton messageBox( QMessageBox::Icon, QWidget *parent, const QString &title, const QString &text,