diff --git a/src/lib_gui/qt/utility/QtThreadedFunctor.h b/src/lib_gui/qt/utility/QtThreadedFunctor.h index 8edbbcb3..42e80ebe 100644 --- a/src/lib_gui/qt/utility/QtThreadedFunctor.h +++ b/src/lib_gui/qt/utility/QtThreadedFunctor.h @@ -1,12 +1,11 @@ #ifndef QT_THREADED_FUCTOR_H #define QT_THREADED_FUCTOR_H -#include #include -#include #include #include +#include #include "MessageListener.h" #include "MessageWindowClosed.h" @@ -23,19 +22,30 @@ signals: private slots: void execute() { - m_callback(); + std::function callback = m_callback; m_freeCallbacks.release(); + callback(); } public: QtThreadedFunctorHelper(): m_freeCallbacks(1) { QObject::connect( - this, &QtThreadedFunctorHelper::signalExecution, this, &QtThreadedFunctorHelper::execute); + this, + &QtThreadedFunctorHelper::signalExecution, + this, + &QtThreadedFunctorHelper::execute, + Qt::QueuedConnection); } void operator()(std::function callback) { + if (QThread::currentThread() == this->thread()) + { + callback(); + return; + } + m_freeCallbacks.acquire(); m_callback = callback; emit signalExecution();