diff options
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) |