summaryrefslogtreecommitdiffhomepage
path: root/compat/win32-com.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'compat/win32-com.cpp')
-rw-r--r--compat/win32-com.cpp15
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)