summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/sensorgestures/qtsensors/qtsensors.pro9
-rw-r--r--src/plugins/sensorgestures/shake/shake.pro9
-rw-r--r--src/plugins/sensors/android/src/src.pro9
-rw-r--r--src/plugins/sensors/dummy/dummy.pro8
-rw-r--r--src/plugins/sensors/generic/generic.pro8
-rw-r--r--src/plugins/sensors/generic/generictiltsensor.h3
-rw-r--r--src/plugins/sensors/ios/ios.pro8
-rw-r--r--src/plugins/sensors/linux/linux.pro8
-rw-r--r--src/plugins/sensors/sensorfw/sensorfw.pro8
-rw-r--r--src/plugins/sensors/simulator/simulator.pro8
-rw-r--r--src/plugins/sensors/winrt/winrt.pro10
-rw-r--r--src/plugins/sensors/winrt/winrtaccelerometer.cpp42
-rw-r--r--src/plugins/sensors/winrt/winrtambientlightsensor.cpp42
-rw-r--r--src/plugins/sensors/winrt/winrtcompass.cpp45
-rw-r--r--src/plugins/sensors/winrt/winrtgyroscope.cpp42
-rw-r--r--src/plugins/sensors/winrt/winrtorientationsensor.cpp42
-rw-r--r--src/plugins/sensors/winrt/winrtrotationsensor.cpp42
17 files changed, 199 insertions, 144 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qtsensors.pro b/src/plugins/sensorgestures/qtsensors/qtsensors.pro
index 3f8df03..44f18ff 100644
--- a/src/plugins/sensorgestures/qtsensors/qtsensors.pro
+++ b/src/plugins/sensorgestures/qtsensors/qtsensors.pro
@@ -1,11 +1,6 @@
TARGET = qtsensorgestures_plugin
QT = core sensors
-PLUGIN_TYPE = sensorgestures
-PLUGIN_CLASS_NAME = QtSensorGesturePlugin
-PLUGIN_EXTENDS = -
-load(qt_plugin)
-
# Input
HEADERS += qtsensorgestureplugin.h \
qcoversensorgesturerecognizer.h \
@@ -36,3 +31,7 @@ SOURCES += qtsensorgestureplugin.cpp \
OTHER_FILES += \
plugin.json
+PLUGIN_TYPE = sensorgestures
+PLUGIN_CLASS_NAME = QtSensorGesturePlugin
+PLUGIN_EXTENDS = -
+load(qt_plugin)
diff --git a/src/plugins/sensorgestures/shake/shake.pro b/src/plugins/sensorgestures/shake/shake.pro
index d7d8f92..efa2a0c 100644
--- a/src/plugins/sensorgestures/shake/shake.pro
+++ b/src/plugins/sensorgestures/shake/shake.pro
@@ -1,11 +1,6 @@
TARGET = qtsensorgestures_shakeplugin
QT = core sensors
-PLUGIN_TYPE = sensorgestures
-PLUGIN_CLASS_NAME = QShakeSensorGesturePlugin
-PLUGIN_EXTENDS = -
-load(qt_plugin)
-
# Input
HEADERS += qshakesensorgestureplugin.h \
qshakerecognizer.h
@@ -15,3 +10,7 @@ SOURCES += qshakesensorgestureplugin.cpp \
OTHER_FILES += \
plugin.json
+PLUGIN_TYPE = sensorgestures
+PLUGIN_CLASS_NAME = QShakeSensorGesturePlugin
+PLUGIN_EXTENDS = -
+load(qt_plugin)
diff --git a/src/plugins/sensors/android/src/src.pro b/src/plugins/sensors/android/src/src.pro
index 23a6bea..8366944 100644
--- a/src/plugins/sensors/android/src/src.pro
+++ b/src/plugins/sensors/android/src/src.pro
@@ -1,9 +1,6 @@
TARGET = qtsensors_android
-QT = sensors core
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = QCounterGesturePlugin
-load(qt_plugin)
+QT = sensors core
# STATICPLUGIN needed because there's a Q_IMPORT_PLUGIN in main.cpp
# Yes, the plugin imports itself statically
@@ -36,3 +33,7 @@ SOURCES = \
androidlight.cpp
OTHER_FILES = plugin.json
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = QCounterGesturePlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/dummy/dummy.pro b/src/plugins/sensors/dummy/dummy.pro
index 93f54dc..b4ef2fd 100644
--- a/src/plugins/sensors/dummy/dummy.pro
+++ b/src/plugins/sensors/dummy/dummy.pro
@@ -1,10 +1,6 @@
TARGET = qtsensors_dummy
QT = sensors core
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = dummySensorPlugin
-load(qt_plugin)
-
HEADERS += dummycommon.h\
dummyaccelerometer.h\
dummylightsensor.h
@@ -17,3 +13,7 @@ SOURCES += dummycommon.cpp\
OTHER_FILES = plugin.json
unix:!mac:!qnx:!android:LIBS+=-lrt
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = dummySensorPlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/generic/generic.pro b/src/plugins/sensors/generic/generic.pro
index cdb9300..cf87ccf 100644
--- a/src/plugins/sensors/generic/generic.pro
+++ b/src/plugins/sensors/generic/generic.pro
@@ -1,10 +1,6 @@
TARGET = qtsensors_generic
QT = core sensors
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = genericSensorPlugin
-load(qt_plugin)
-
HEADERS += generictiltsensor.h
SOURCES += main.cpp\
@@ -27,3 +23,7 @@ DEFINES += QTSENSORS_GENERICORIENTATIONSENSOR QTSENSORS_GENERICALSSENSOR
}
OTHER_FILES = plugin.json
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = genericSensorPlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/generic/generictiltsensor.h b/src/plugins/sensors/generic/generictiltsensor.h
index 52c5f7c..9562aca 100644
--- a/src/plugins/sensors/generic/generictiltsensor.h
+++ b/src/plugins/sensors/generic/generictiltsensor.h
@@ -48,6 +48,7 @@ QT_BEGIN_NAMESPACE
class GenericTiltSensor : public QSensorBackend, public QAccelerometerFilter
{
+ Q_OBJECT
public:
static char const * const id;
@@ -57,7 +58,7 @@ public:
void start() Q_DECL_OVERRIDE;
void stop() Q_DECL_OVERRIDE;
- void calibrate();
+ Q_INVOKABLE void calibrate();
bool filter(QAccelerometerReading *reading) Q_DECL_OVERRIDE;
diff --git a/src/plugins/sensors/ios/ios.pro b/src/plugins/sensors/ios/ios.pro
index 4197b14..17ff009 100644
--- a/src/plugins/sensors/ios/ios.pro
+++ b/src/plugins/sensors/ios/ios.pro
@@ -1,10 +1,6 @@
TARGET = qtsensors_ios
QT = core sensors
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = IOSSensorPlugin
-load(qt_plugin)
-
OTHER_FILES = plugin.json
HEADERS += iosaccelerometer.h \
@@ -23,3 +19,7 @@ OBJECTIVE_SOURCES += main.mm \
iosproximitysensor.mm
LIBS += -framework UIKit -framework CoreMotion -framework CoreLocation
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = IOSSensorPlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/linux/linux.pro b/src/plugins/sensors/linux/linux.pro
index 636bd1b..33706e7 100644
--- a/src/plugins/sensors/linux/linux.pro
+++ b/src/plugins/sensors/linux/linux.pro
@@ -1,13 +1,13 @@
TARGET = qtsensors_linuxsys
QT = core sensors
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = LinuxSensorPlugin
-load(qt_plugin)
-
OTHER_FILES = plugin.json
!android:LIBS += -lrt
HEADERS += linuxsysaccelerometer.h
SOURCES += linuxsysaccelerometer.cpp \
main.cpp
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = LinuxSensorPlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/sensorfw/sensorfw.pro b/src/plugins/sensors/sensorfw/sensorfw.pro
index 6c1408b..b30b362 100644
--- a/src/plugins/sensors/sensorfw/sensorfw.pro
+++ b/src/plugins/sensors/sensorfw/sensorfw.pro
@@ -1,10 +1,6 @@
TARGET = qtsensors_sensorfw
QT = core sensors network dbus
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = sensorfwSensorPlugin
-load(qt_plugin)
-
include(sensorfw.pri)
@@ -16,3 +12,7 @@ CONFIGFILES.path = /etc/xdg/QtProject/
INSTALLS += CONFIGFILES
OTHER_FILES = plugin.json
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = sensorfwSensorPlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/simulator/simulator.pro b/src/plugins/sensors/simulator/simulator.pro
index b110137..ac8ea50 100644
--- a/src/plugins/sensors/simulator/simulator.pro
+++ b/src/plugins/sensors/simulator/simulator.pro
@@ -1,9 +1,5 @@
TARGET = qtsensors_simulator
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = SimulatorSensorPlugin
-load(qt_plugin)
-
QT=core gui network sensors simulator
HEADERS += \
@@ -30,3 +26,7 @@ SOURCES += \
main.cpp
OTHER_FILES = plugin.json
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = SimulatorSensorPlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/winrt/winrt.pro b/src/plugins/sensors/winrt/winrt.pro
index 4a03bf2..21996fd 100644
--- a/src/plugins/sensors/winrt/winrt.pro
+++ b/src/plugins/sensors/winrt/winrt.pro
@@ -1,9 +1,5 @@
TARGET = qtsensors_winrt
-QT = sensors core
-
-PLUGIN_TYPE = sensors
-PLUGIN_CLASS_NAME = WinRtSensorPlugin
-load(qt_plugin)
+QT = sensors core core_private
HEADERS += \
winrtaccelerometer.h \
@@ -25,3 +21,7 @@ SOURCES += \
winrtgyroscope.cpp
OTHER_FILES = plugin.json
+
+PLUGIN_TYPE = sensors
+PLUGIN_CLASS_NAME = WinRtSensorPlugin
+load(qt_plugin)
diff --git a/src/plugins/sensors/winrt/winrtaccelerometer.cpp b/src/plugins/sensors/winrt/winrtaccelerometer.cpp
index f2728a8..fba9594 100644
--- a/src/plugins/sensors/winrt/winrtaccelerometer.cpp
+++ b/src/plugins/sensors/winrt/winrtaccelerometer.cpp
@@ -38,7 +38,9 @@
#include "winrtcommon.h"
#include <QtSensors/QAccelerometerReading>
+#include <private/qeventdispatcher_winrt_p.h>
+#include <functional>
#include <wrl.h>
#include <windows.devices.sensors.h>
using namespace Microsoft::WRL;
@@ -114,20 +116,24 @@ WinRtAccelerometer::WinRtAccelerometer(QSensor *sensor)
: QSensorBackend(sensor), d_ptr(new WinRtAccelerometerPrivate(this))
{
Q_D(WinRtAccelerometer);
- HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Accelerometer);
- ComPtr<IAccelerometerStatics> factory;
- HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
- if (FAILED(hr)) {
- qCWarning(lcWinRtSensors) << "Unable to initialize accelerometer factory."
- << qt_error_string(hr);
- sensorError(hr);
- return;
- }
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Accelerometer);
+ ComPtr<IAccelerometerStatics> factory;
+ HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to initialize accelerometer factory."
+ << qt_error_string(hr);
+ return hr;
+ }
- hr = factory->GetDefault(&d->sensor);
+ hr = factory->GetDefault(&d->sensor);
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to get default accelerometer."
+ << qt_error_string(hr);
+ }
+ return hr;
+ });
if (FAILED(hr) || !d->sensor) {
- qCWarning(lcWinRtSensors) << "Unable to get default accelerometer."
- << qt_error_string(hr);
sensorError(hr);
return;
}
@@ -158,9 +164,11 @@ void WinRtAccelerometer::start()
if (d->token.value)
return;
- ComPtr<AccelerometerReadingHandler> callback =
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ ComPtr<AccelerometerReadingHandler> callback =
Callback<AccelerometerReadingHandler>(d, &WinRtAccelerometerPrivate::readingChanged);
- HRESULT hr = d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ return d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to attach to reading changed event."
<< qt_error_string(hr);
@@ -189,14 +197,16 @@ void WinRtAccelerometer::stop()
if (!d->token.value)
return;
- HRESULT hr = d->sensor->remove_ReadingChanged(d->token);
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ return d->sensor->remove_ReadingChanged(d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to detach from reading changed event."
<< qt_error_string(hr);
sensorError(hr);
return;
}
- d->sensor->put_ReportInterval(0);
+ hr = d->sensor->put_ReportInterval(0);
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to reset report interval."
<< qt_error_string(hr);
diff --git a/src/plugins/sensors/winrt/winrtambientlightsensor.cpp b/src/plugins/sensors/winrt/winrtambientlightsensor.cpp
index b1e1c52..d0d7fd7 100644
--- a/src/plugins/sensors/winrt/winrtambientlightsensor.cpp
+++ b/src/plugins/sensors/winrt/winrtambientlightsensor.cpp
@@ -38,7 +38,9 @@
#include "winrtcommon.h"
#include <QtSensors/QAmbientLightSensor>
+#include <private/qeventdispatcher_winrt_p.h>
+#include <functional>
#include <wrl.h>
#include <windows.devices.sensors.h>
using namespace Microsoft::WRL;
@@ -113,20 +115,24 @@ WinRtAmbientLightSensor::WinRtAmbientLightSensor(QSensor *sensor)
: QSensorBackend(sensor), d_ptr(new WinRtAmbientLightSensorPrivate(this))
{
Q_D(WinRtAmbientLightSensor);
- HStringReference classId(RuntimeClass_Windows_Devices_Sensors_LightSensor);
- ComPtr<ILightSensorStatics> factory;
- HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
- if (FAILED(hr)) {
- qCWarning(lcWinRtSensors) << "Unable to initialize light sensor factory."
- << qt_error_string(hr);
- sensorError(hr);
- return;
- }
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ HStringReference classId(RuntimeClass_Windows_Devices_Sensors_LightSensor);
+ ComPtr<ILightSensorStatics> factory;
+ HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to initialize light sensor factory."
+ << qt_error_string(hr);
+ return hr;
+ }
- hr = factory->GetDefault(&d->sensor);
+ hr = factory->GetDefault(&d->sensor);
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to get default light sensor."
+ << qt_error_string(hr);
+ }
+ return hr;
+ });
if (FAILED(hr) || !d->sensor) {
- qCWarning(lcWinRtSensors) << "Unable to get default light sensor."
- << qt_error_string(hr);
sensorError(hr);
return;
}
@@ -157,9 +163,11 @@ void WinRtAmbientLightSensor::start()
if (d->token.value)
return;
- ComPtr<LightSensorReadingHandler> callback =
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ ComPtr<LightSensorReadingHandler> callback =
Callback<LightSensorReadingHandler>(d, &WinRtAmbientLightSensorPrivate::readingChanged);
- HRESULT hr = d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ return d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to attach to reading changed event."
<< qt_error_string(hr);
@@ -188,14 +196,16 @@ void WinRtAmbientLightSensor::stop()
if (!d->token.value)
return;
- HRESULT hr = d->sensor->remove_ReadingChanged(d->token);
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ return d->sensor->remove_ReadingChanged(d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to detach from reading changed event."
<< qt_error_string(hr);
sensorError(hr);
return;
}
- d->sensor->put_ReportInterval(0);
+ hr = d->sensor->put_ReportInterval(0);
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to reset report interval."
<< qt_error_string(hr);
diff --git a/src/plugins/sensors/winrt/winrtcompass.cpp b/src/plugins/sensors/winrt/winrtcompass.cpp
index 9c57db9..22f4ac5 100644
--- a/src/plugins/sensors/winrt/winrtcompass.cpp
+++ b/src/plugins/sensors/winrt/winrtcompass.cpp
@@ -38,9 +38,9 @@
#include "winrtcommon.h"
#include <QtSensors/QCompass>
+#include <private/qeventdispatcher_winrt_p.h>
-QT_USE_NAMESPACE
-
+#include <functional>
#include <wrl.h>
#include <windows.devices.sensors.h>
using namespace Microsoft::WRL;
@@ -133,20 +133,24 @@ WinRtCompass::WinRtCompass(QSensor *sensor)
: QSensorBackend(sensor), d_ptr(new WinRtCompassPrivate(this))
{
Q_D(WinRtCompass);
- HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Compass);
- ComPtr<ICompassStatics> factory;
- HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
- if (FAILED(hr)) {
- qCWarning(lcWinRtSensors) << "Unable to initialize light sensor factory."
- << qt_error_string(hr);
- sensorError(hr);
- return;
- }
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Compass);
+ ComPtr<ICompassStatics> factory;
+ HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to initialize light sensor factory."
+ << qt_error_string(hr);
+ return hr;
+ }
- hr = factory->GetDefault(&d->sensor);
+ hr = factory->GetDefault(&d->sensor);
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to get default compass."
+ << qt_error_string(hr);
+ }
+ return hr;
+ });
if (FAILED(hr) || !d->sensor) {
- qCWarning(lcWinRtSensors) << "Unable to get default compass."
- << qt_error_string(hr);
sensorError(hr);
return;
}
@@ -177,9 +181,11 @@ void WinRtCompass::start()
if (d->token.value)
return;
- ComPtr<CompassReadingHandler> callback =
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ ComPtr<CompassReadingHandler> callback =
Callback<CompassReadingHandler>(d, &WinRtCompassPrivate::readingChanged);
- HRESULT hr = d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ return d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to attach to reading changed event."
<< qt_error_string(hr);
@@ -207,15 +213,16 @@ void WinRtCompass::stop()
return;
if (!d->token.value)
return;
-
- HRESULT hr = d->sensor->remove_ReadingChanged(d->token);
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ return d->sensor->remove_ReadingChanged(d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to detach from reading changed event."
<< qt_error_string(hr);
sensorError(hr);
return;
}
- d->sensor->put_ReportInterval(0);
+ hr = d->sensor->put_ReportInterval(0);
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to reset report interval."
<< qt_error_string(hr);
diff --git a/src/plugins/sensors/winrt/winrtgyroscope.cpp b/src/plugins/sensors/winrt/winrtgyroscope.cpp
index e7910ab..70d7980 100644
--- a/src/plugins/sensors/winrt/winrtgyroscope.cpp
+++ b/src/plugins/sensors/winrt/winrtgyroscope.cpp
@@ -38,7 +38,9 @@
#include "winrtcommon.h"
#include <QtSensors/QGyroscope>
+#include <private/qeventdispatcher_winrt_p.h>
+#include <functional>
#include <wrl.h>
#include <windows.devices.sensors.h>
using namespace Microsoft::WRL;
@@ -111,20 +113,24 @@ WinRtGyroscope::WinRtGyroscope(QSensor *sensor)
: QSensorBackend(sensor), d_ptr(new WinRtGyroscopePrivate(this))
{
Q_D(WinRtGyroscope);
- HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Gyrometer);
- ComPtr<IGyrometerStatics> factory;
- HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
- if (FAILED(hr)) {
- qCWarning(lcWinRtSensors) << "Unable to initialize gyroscope sensor factory."
- << qt_error_string(hr);
- sensorError(hr);
- return;
- }
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Gyrometer);
+ ComPtr<IGyrometerStatics> factory;
+ HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to initialize gyroscope sensor factory."
+ << qt_error_string(hr);
+ return hr;
+ }
- hr = factory->GetDefault(&d->sensor);
+ hr = factory->GetDefault(&d->sensor);
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to get default gyroscope sensor."
+ << qt_error_string(hr);
+ }
+ return hr;
+ });
if (FAILED(hr) || !d->sensor) {
- qCWarning(lcWinRtSensors) << "Unable to get default gyroscope sensor."
- << qt_error_string(hr);
sensorError(hr);
return;
}
@@ -155,9 +161,11 @@ void WinRtGyroscope::start()
if (d->token.value)
return;
- ComPtr<InclinometerReadingHandler> callback =
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ ComPtr<InclinometerReadingHandler> callback =
Callback<InclinometerReadingHandler>(d, &WinRtGyroscopePrivate::readingChanged);
- HRESULT hr = d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ return d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to attach to reading changed event."
<< qt_error_string(hr);
@@ -186,14 +194,16 @@ void WinRtGyroscope::stop()
if (!d->token.value)
return;
- HRESULT hr = d->sensor->remove_ReadingChanged(d->token);
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ return d->sensor->remove_ReadingChanged(d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to detach from reading changed event."
<< qt_error_string(hr);
sensorError(hr);
return;
}
- d->sensor->put_ReportInterval(0);
+ hr = d->sensor->put_ReportInterval(0);
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to reset report interval."
<< qt_error_string(hr);
diff --git a/src/plugins/sensors/winrt/winrtorientationsensor.cpp b/src/plugins/sensors/winrt/winrtorientationsensor.cpp
index a40dbb9..c679d92 100644
--- a/src/plugins/sensors/winrt/winrtorientationsensor.cpp
+++ b/src/plugins/sensors/winrt/winrtorientationsensor.cpp
@@ -38,9 +38,9 @@
#include "winrtcommon.h"
#include <QtSensors/QOrientationSensor>
+#include <private/qeventdispatcher_winrt_p.h>
-QT_USE_NAMESPACE
-
+#include <functional>
#include <wrl.h>
#include <windows.devices.sensors.h>
using namespace Microsoft::WRL;
@@ -119,20 +119,24 @@ WinRtOrientationSensor::WinRtOrientationSensor(QSensor *sensor)
: QSensorBackend(sensor), d_ptr(new WinRtOrientationSensorPrivate(this))
{
Q_D(WinRtOrientationSensor);
- HStringReference classId(RuntimeClass_Windows_Devices_Sensors_SimpleOrientationSensor);
- ComPtr<ISimpleOrientationSensorStatics> factory;
- HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
- if (FAILED(hr)) {
- qCWarning(lcWinRtSensors) << "Unable to initialize orientation sensor factory."
- << qt_error_string(hr);
- sensorError(hr);
- return;
- }
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ HStringReference classId(RuntimeClass_Windows_Devices_Sensors_SimpleOrientationSensor);
+ ComPtr<ISimpleOrientationSensorStatics> factory;
+ HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to initialize orientation sensor factory."
+ << qt_error_string(hr);
+ return hr;
+ }
- hr = factory->GetDefault(&d->sensor);
+ hr = factory->GetDefault(&d->sensor);
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to get default orientation sensor."
+ << qt_error_string(hr);
+ }
+ return hr;
+ });
if (FAILED(hr) || !d->sensor) {
- qCWarning(lcWinRtSensors) << "Unable to get default orientation sensor."
- << qt_error_string(hr);
sensorError(hr);
return;
}
@@ -152,9 +156,11 @@ void WinRtOrientationSensor::start()
if (d->token.value)
return;
- ComPtr<SimpleOrientationReadingHandler> callback =
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ ComPtr<SimpleOrientationReadingHandler> callback =
Callback<SimpleOrientationReadingHandler>(d, &WinRtOrientationSensorPrivate::readingChanged);
- HRESULT hr = d->sensor->add_OrientationChanged(callback.Get(), &d->token);
+ return d->sensor->add_OrientationChanged(callback.Get(), &d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to attach to reading changed event."
<< qt_error_string(hr);
@@ -171,7 +177,9 @@ void WinRtOrientationSensor::stop()
if (!d->token.value)
return;
- HRESULT hr = d->sensor->remove_OrientationChanged(d->token);
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ return d->sensor->remove_OrientationChanged(d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to detach from reading changed event."
<< qt_error_string(hr);
diff --git a/src/plugins/sensors/winrt/winrtrotationsensor.cpp b/src/plugins/sensors/winrt/winrtrotationsensor.cpp
index 93c19b0..570ef0b 100644
--- a/src/plugins/sensors/winrt/winrtrotationsensor.cpp
+++ b/src/plugins/sensors/winrt/winrtrotationsensor.cpp
@@ -38,7 +38,9 @@
#include "winrtcommon.h"
#include <QtSensors/QRotationSensor>
+#include <private/qeventdispatcher_winrt_p.h>
+#include <functional>
#include <wrl.h>
#include <windows.devices.sensors.h>
using namespace Microsoft::WRL;
@@ -109,20 +111,24 @@ WinRtRotationSensor::WinRtRotationSensor(QSensor *sensor)
: QSensorBackend(sensor), d_ptr(new WinRtRotationSensorPrivate(this))
{
Q_D(WinRtRotationSensor);
- HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Inclinometer);
- ComPtr<IInclinometerStatics> factory;
- HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
- if (FAILED(hr)) {
- qCWarning(lcWinRtSensors) << "Unable to initialize rotation sensor factory."
- << qt_error_string(hr);
- sensorError(hr);
- return;
- }
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ HStringReference classId(RuntimeClass_Windows_Devices_Sensors_Inclinometer);
+ ComPtr<IInclinometerStatics> factory;
+ HRESULT hr = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to initialize rotation sensor factory."
+ << qt_error_string(hr);
+ return hr;
+ }
- hr = factory->GetDefault(&d->sensor);
+ hr = factory->GetDefault(&d->sensor);
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtSensors) << "Unable to get default rotation sensor."
+ << qt_error_string(hr);
+ }
+ return hr;
+ });
if (FAILED(hr) || !d->sensor) {
- qCWarning(lcWinRtSensors) << "Unable to get default rotation sensor."
- << qt_error_string(hr);
sensorError(hr);
return;
}
@@ -153,9 +159,11 @@ void WinRtRotationSensor::start()
if (d->token.value)
return;
- ComPtr<InclinometerReadingHandler> callback =
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ ComPtr<InclinometerReadingHandler> callback =
Callback<InclinometerReadingHandler>(d, &WinRtRotationSensorPrivate::readingChanged);
- HRESULT hr = d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ return d->sensor->add_ReadingChanged(callback.Get(), &d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to attach to reading changed event."
<< qt_error_string(hr);
@@ -184,14 +192,16 @@ void WinRtRotationSensor::stop()
if (!d->token.value)
return;
- HRESULT hr = d->sensor->remove_ReadingChanged(d->token);
+ HRESULT hr = QEventDispatcherWinRT::runOnXamlThread([d]() {
+ return d->sensor->remove_ReadingChanged(d->token);
+ });
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to detach from reading changed event."
<< qt_error_string(hr);
sensorError(hr);
return;
}
- d->sensor->put_ReportInterval(0);
+ hr = d->sensor->put_ReportInterval(0);
if (FAILED(hr)) {
qCWarning(lcWinRtSensors) << "Unable to reset report interval."
<< qt_error_string(hr);