diff --git a/qrenderdoc/Code/Core.cpp b/qrenderdoc/Code/Core.cpp index 69b24219d..5da363fd3 100644 --- a/qrenderdoc/Code/Core.cpp +++ b/qrenderdoc/Code/Core.cpp @@ -1,5 +1,7 @@ #include "Core.h" +#include + Core::Core() { @@ -10,3 +12,8 @@ Core::~Core() } + +void QInvoke::call(const std::function &f) +{ + QTimer::singleShot(0, new QInvoke(f), SLOT(doInvoke())); +} diff --git a/qrenderdoc/Code/Core.h b/qrenderdoc/Code/Core.h index f77d8eb41..fbac7468a 100644 --- a/qrenderdoc/Code/Core.h +++ b/qrenderdoc/Code/Core.h @@ -9,10 +9,32 @@ class Core Core(); ~Core(); - const RenderManager *Renderer() { return &m_Renderer; } + RenderManager *Renderer() { return &m_Renderer; } private: RenderManager m_Renderer; }; +// Utility class for invoking a lambda on the GUI thread. +// This is supported by QTimer::singleShot on Qt 5.4 but it's probably +// wise not to require a higher version that necessary. +#include + +class QInvoke : public QObject +{ + Q_OBJECT + QInvoke(const std::function &f) : func(f) {} + std::function func; +public: + static void call(const std::function &f); + +protected slots: + void doInvoke() + { + func(); + deleteLater(); + } +}; + + #endif // CORE_H