diff options
author | Aaron McCarthy <aaron.mccarthy@jollamobile.com> | 2013-11-27 12:37:27 +1000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-12-03 03:20:50 +0100 |
commit | 5708dfcc80ac4eb029bab6af9b9fbee148da0786 (patch) | |
tree | fbf196592f59ae79828aa39c537cfdd33339986f | |
parent | 7e0283264806e16fc7373e1c05588bddce6c79a8 (diff) | |
download | qtlocation-5708dfcc80ac4eb029bab6af9b9fbee148da0786.tar.gz |
Fix incorrect accuracy values reported by Geoclue plugin.
Initialize variables to valid (unknown) values as they will not be
assigned to if accuracy data is not available with the current position
update from Geoclue.
Change-Id: Icdca528da86df9a2a95acf1cc6704a9c39485fe2
Reviewed-by: Alex Blasche <alexander.blasche@digia.com>
-rw-r--r-- | src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp index c6920c33..fc0b8b99 100644 --- a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp +++ b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp @@ -47,6 +47,7 @@ #include <QtCore/QFile> #include <QtCore/QSaveFile> #include <QtCore/QStandardPaths> +#include <QtCore/QtNumeric> #ifdef Q_LOCATION_GEOCLUE_DEBUG #include <QDebug> @@ -497,21 +498,19 @@ QGeoPositionInfo QGeoPositionInfoSourceGeoclueMaster::geoclueToPositionInfo( } QGeoPositionInfo info(coordinate, dateTime); if (accuracy) { - double horizontalAccuracy; - double verticalAccuracy; - GeoclueAccuracyLevel accuracyLevel; + double horizontalAccuracy = qQNaN(); + double verticalAccuracy = qQNaN(); + GeoclueAccuracyLevel accuracyLevel = GEOCLUE_ACCURACY_LEVEL_NONE; geoclue_accuracy_get_details(accuracy, &accuracyLevel, &horizontalAccuracy, &verticalAccuracy); #ifdef Q_LOCATION_GEOCLUE_DEBUG qDebug() << "QGeoPositionInfoSourceGeoclueMaster::accuracy horizontal vertical level: " << horizontalAccuracy << verticalAccuracy << accuracyLevel; #endif - if (accuracyLevel & GEOCLUE_ACCURACY_LEVEL_DETAILED) - m_lastPositionFromSatellite = true; - else - m_lastPositionFromSatellite = false; - if (accuracyLevel != GEOCLUE_ACCURACY_LEVEL_NONE) { + m_lastPositionFromSatellite = accuracyLevel & GEOCLUE_ACCURACY_LEVEL_DETAILED; + + if (!qIsNaN(horizontalAccuracy)) info.setAttribute(QGeoPositionInfo::HorizontalAccuracy, horizontalAccuracy); + if (!qIsNaN(verticalAccuracy)) info.setAttribute(QGeoPositionInfo::VerticalAccuracy, verticalAccuracy); - } } return info; } |