diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/sensorgestures/qtsensors/qtsensors.pro | 9 | ||||
-rw-r--r-- | src/plugins/sensorgestures/shake/shake.pro | 9 | ||||
-rw-r--r-- | src/plugins/sensors/android/src/src.pro | 9 | ||||
-rw-r--r-- | src/plugins/sensors/dummy/dummy.pro | 8 | ||||
-rw-r--r-- | src/plugins/sensors/generic/generic.pro | 8 | ||||
-rw-r--r-- | src/plugins/sensors/generic/generictiltsensor.h | 3 | ||||
-rw-r--r-- | src/plugins/sensors/ios/ios.pro | 8 | ||||
-rw-r--r-- | src/plugins/sensors/linux/linux.pro | 8 | ||||
-rw-r--r-- | src/plugins/sensors/sensorfw/sensorfw.pro | 8 | ||||
-rw-r--r-- | src/plugins/sensors/simulator/simulator.pro | 8 | ||||
-rw-r--r-- | src/plugins/sensors/winrt/winrt.pro | 10 | ||||
-rw-r--r-- | src/plugins/sensors/winrt/winrtaccelerometer.cpp | 42 | ||||
-rw-r--r-- | src/plugins/sensors/winrt/winrtambientlightsensor.cpp | 42 | ||||
-rw-r--r-- | src/plugins/sensors/winrt/winrtcompass.cpp | 45 | ||||
-rw-r--r-- | src/plugins/sensors/winrt/winrtgyroscope.cpp | 42 | ||||
-rw-r--r-- | src/plugins/sensors/winrt/winrtorientationsensor.cpp | 42 | ||||
-rw-r--r-- | src/plugins/sensors/winrt/winrtrotationsensor.cpp | 42 |
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); |