summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.cpp40
-rw-r--r--src/plugins/sensors/blackberry/bbsensorbackend.h3
-rw-r--r--src/plugins/sensors/blackberry/blackberry.pro2
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)