summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensors/blackberry/bbsensorbackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/sensors/blackberry/bbsensorbackend.cpp')
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.cpp40
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());
+ }
}