diff options
author | Kevin Ottens <kevin.ottens.qnx@kdab.com> | 2012-04-30 17:20:24 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-03 01:36:02 +0200 |
commit | bf3dde61cc7d611b1e5f2a18e533c535c4cd7ff8 (patch) | |
tree | ce3dd02d357b374c48c125f6f6c8ca05579f9c7e /src | |
parent | 78eb8007edde7f9403e148b8d4a3a65e57155427 (diff) |
Pause/resume sensor on application (de)activation
Each sensor now installs itself as an event filter of the application
object waiting to (de)activation events. When an ApplicationDeactivate
event arrives sensors are paused, they get resumed on
ApplicationActivate.
This behavior is inhibited by the alwaysOn property.
Change-Id: I559239f279d9412d8836efad08e6688019504b16
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reviewed-by: Tennessee Carmel-Veilleux <tcarmelveilleux@rim.com>
Reviewed-by: Lincoln Ramsay <lincoln.ramsay@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/sensors/blackberry/bbsensorbackend.cpp | 40 | ||||
-rw-r--r-- | src/plugins/sensors/blackberry/bbsensorbackend.h | 3 | ||||
-rw-r--r-- | src/plugins/sensors/blackberry/blackberry.pro | 2 |
3 files changed, 44 insertions, 1 deletions
diff --git a/src/plugins/sensors/blackberry/bbsensorbackend.cpp b/src/plugins/sensors/blackberry/bbsensorbackend.cpp index d39f6e4a..7a8a2933 100644 --- a/src/plugins/sensors/blackberry/bbsensorbackend.cpp +++ b/src/plugins/sensors/blackberry/bbsensorbackend.cpp @@ -41,6 +41,7 @@ #include "bbsensorbackend.h" #include <QtCore/QDebug> +#include <QtGui/QGuiApplication> #include <fcntl.h> static const int microSecondsPerSecond = 1000 * 1000; @@ -59,6 +60,7 @@ BbSensorBackendBase::BbSensorBackendBase(const QString &devicePath, sensor_type_ QSensor *sensor) : QSensorBackend(sensor), m_deviceFile(devicePath), m_sensorType(sensorType) { + QCoreApplication::instance()->installEventFilter(this); connect(sensor, SIGNAL(alwaysOnChanged()), this, SLOT(applyAlwaysOnProperty())); } @@ -114,6 +116,25 @@ qreal BbSensorBackendBase::convertValue(float bbValue) return bbValue; } +bool BbSensorBackendBase::eventFilter(QObject *object, QEvent *event) +{ + if (object == QCoreApplication::instance()) { + switch (event->type()) { + case QEvent::ApplicationActivate: + setPaused(false); + break; + case QEvent::ApplicationDeactivate: + if (!sensor()->isAlwaysOn()) + setPaused(true); + break; + default: + break; + } + } + + return QSensorBackend::eventFilter(object, event); +} + void BbSensorBackendBase::start() { if (!m_deviceFile.open(QFile::ReadOnly | QFile::Unbuffered)) { @@ -190,4 +211,23 @@ void BbSensorBackendBase::applyAlwaysOnProperty() perror(QString::fromLatin1("Setting sensor always on for %1 failed") .arg(m_deviceFile.fileName()).toLocal8Bit()); } + + // We might need to pause now + setPaused(QGuiApplication::focusWindow() == 0 && !sensor()->isAlwaysOn()); +} + +void BbSensorBackendBase::setPaused(bool paused) +{ + if (!m_deviceFile.isOpen()) + return; + + sensor_devctl_enable_u enableState; + enableState.tx.enable = paused ? 0 : 1; + + const int result = devctl(m_deviceFile.handle(), DCMD_SENSOR_ENABLE, &enableState, sizeof(enableState), NULL); + if (result != EOK) { + perror(QString::fromLatin1("Setting sensor enabled (%1) for %2 failed") + .arg(paused) + .arg(m_deviceFile.fileName()).toLocal8Bit()); + } } diff --git a/src/plugins/sensors/blackberry/bbsensorbackend.h b/src/plugins/sensors/blackberry/bbsensorbackend.h index a3afb372..4e4406a4 100644 --- a/src/plugins/sensors/blackberry/bbsensorbackend.h +++ b/src/plugins/sensors/blackberry/bbsensorbackend.h @@ -79,9 +79,12 @@ protected: virtual void processEvent(const sensor_event_t &sensorEvent) = 0; + virtual bool eventFilter(QObject *object, QEvent *event); + private slots: void dataAvailable(); void applyAlwaysOnProperty(); + void setPaused(bool paused); private: QFile m_deviceFile; diff --git a/src/plugins/sensors/blackberry/blackberry.pro b/src/plugins/sensors/blackberry/blackberry.pro index b5c339c4..15c6626d 100644 --- a/src/plugins/sensors/blackberry/blackberry.pro +++ b/src/plugins/sensors/blackberry/blackberry.pro @@ -1,7 +1,7 @@ load(qt_module) TARGET = qtsensors_blackberry -QT = sensors core +QT = sensors core gui DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII load(qt_plugin) |