diff options
Diffstat (limited to 'compat/win32-com.cpp')
-rw-r--r-- | compat/win32-com.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/compat/win32-com.cpp b/compat/win32-com.cpp index 689e1411..7bebc500 100644 --- a/compat/win32-com.cpp +++ b/compat/win32-com.cpp @@ -5,11 +5,24 @@ #include "compat/util.hpp" #include <QString> +#include <QCoreApplication> +#include <QApplication> #include <QThread> #include <QDebug> -bool OPENTRACK_COMPAT_EXPORT init_com_threading(com_type t) +bool OPENTRACK_COMPAT_EXPORT init_com_threading(com_type t_) { + const com_type t = progn( + if (t_ != com_invalid) + return t_; + if (QCoreApplication::instance() == nullptr) + return com_apartment; + if (qApp->thread() == QThread::currentThread()) + return com_apartment; + else + return com_multithreaded; + ); + HRESULT ret = CoInitializeEx(0, t); if (ret != S_OK && ret != S_FALSE) |