diff options
Diffstat (limited to 'src/plugins/sensors/blackberry/bbsensorbackend.cpp')
-rw-r--r-- | src/plugins/sensors/blackberry/bbsensorbackend.cpp | 40 |
1 files changed, 40 insertions, 0 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()); + } } |