summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-02-12 14:11:27 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-02-12 14:13:25 +0100
commitc0a9f3da16960fa6ab4d240aa7fbe72b74a841ba (patch)
tree0bb3edd460630a18edfcc3e5c04ef94c4c755d37
parent14dc46ee4dc05e78b227910f38e7f97f87004290 (diff)
parent2ba9fd5550eb7766c20b3a61679e88ec4a6c8a54 (diff)
downloadqtlocation-c0a9f3da16960fa6ab4d240aa7fbe72b74a841ba.tar.gz
Merge remote-tracking branch 'origin/stable' into dev
Change-Id: I1de140f15e028425e888e6ef52d9f2ff11fd9d5b
-rw-r--r--.gitignore10
-rw-r--r--dist/changes-5.2.138
-rw-r--r--src/imports/location/qdeclarativegeomapitemview.cpp1
-rw-r--r--src/imports/positioning/qdeclarativegeoshape.cpp2
-rw-r--r--src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp62
-rw-r--r--src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h5
-rw-r--r--tests/auto/declarative_core/tst_coordinate.qml22
-rw-r--r--tests/auto/declarative_geoshape/tst_locationsingleton.qml27
-rw-r--r--tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro8
-rw-r--r--tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro8
-rw-r--r--tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro8
-rw-r--r--tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro8
-rw-r--r--tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro8
13 files changed, 159 insertions, 48 deletions
diff --git a/.gitignore b/.gitignore
index b8e2a5f0..ba9e2d85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -43,11 +43,11 @@ qrc_*.cpp
doc/src/snippets/cpp/cppsnippet
doc/src/snippets/places/placescppsnippet
-examples/declarative/places_list/places_list
-examples/declarative/flickr/qml_position_flickr
-examples/declarative/places_map/places_map
-examples/logfilepositionsource/logfilepositionsource
-examples/weatherinfo/weatherinfo
+examples/location/places_list/places_list
+examples/positioning/flickr/qml_position_flickr
+examples/location/places_map/places_map
+examples/positioning/logfilepositionsource/logfilepositionsource
+examples/positioning/weatherinfo/weatherinfo
config.tests/geoclue/geoclue
config.tests/gypsy/gypsy
diff --git a/dist/changes-5.2.1 b/dist/changes-5.2.1
index a3e7058c..37a1f553 100644
--- a/dist/changes-5.2.1
+++ b/dist/changes-5.2.1
@@ -4,7 +4,10 @@ compatibility (source and binary) with Qt 5.2.0.
For more details, refer to the online documentation included in this
distribution. The documentation is also available online:
- http://qt-project.org/doc/qt-5.2/
+ http://qt-project.org/doc/qt-5.2
+
+The Qt version 5.2 series is binary compatible with the 5.1.x series.
+Applications compiled for 5.1 will continue to run with 5.2.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
@@ -14,7 +17,6 @@ corresponding to tasks in the Qt Bug Tracker:
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
-
****************************************************************************
* General *
****************************************************************************
@@ -22,44 +24,28 @@ information about a particular change.
General Improvements
--------------------
- - [QTBUG-34910]
- * Fix too long weather status string in weatherinfo example (UI change).
-
- - [QTBUG-36187]
- * Byte order marker removed from positionpoll plugin which caused compile
- errors on some older compilers.
-
- - Fix make install rules for all examples.
-
+ - [QTBUG-34910] Fixed too long weather status string in weatherinfo
+ example (UI change).
+ - [QTBUG-36187] Byte order marker removed from positionpoll plugin
+ which caused compile errors on some older compilers.
+ - Fixed make install rules for all examples.
- declarative_core unit test was fixed and re-enabled.
-Third party components
-----------------------
-
-****************************************************************************
-* Important Behavior Changes *
-****************************************************************************
-
****************************************************************************
* Library *
****************************************************************************
QtPositioning
-------
+-------------
- - [QTBUG-33220]
- * Removes QtQml dependency from QtPositioning.
-
-****************************************************************************
-* Platform Specific Changes *
-****************************************************************************
+ - [QTBUG-33220] Removed QtQml dependency from QtPositioning.
****************************************************************************
* Plugin Specific Changes *
****************************************************************************
GeoClue
-------
+-------
- Delay satellite provider until requested.
- Sets the default preferred positioning method to AllPositioningMethods.
diff --git a/src/imports/location/qdeclarativegeomapitemview.cpp b/src/imports/location/qdeclarativegeomapitemview.cpp
index b737f9da..ccfc4537 100644
--- a/src/imports/location/qdeclarativegeomapitemview.cpp
+++ b/src/imports/location/qdeclarativegeomapitemview.cpp
@@ -323,6 +323,7 @@ QDeclarativeGeoMapItemBase *QDeclarativeGeoMapItemView::createItemFromItemModel(
modelMetaObject->setValue(iterator.value(), modelData);
}
itemContext->setContextProperty(QLatin1String("model"), model);
+ itemContext->setContextProperty(QLatin1String("index"), modelRow);
QObject *obj = delegate_->create(itemContext);
diff --git a/src/imports/positioning/qdeclarativegeoshape.cpp b/src/imports/positioning/qdeclarativegeoshape.cpp
index 4c4d32cc..dbde1c09 100644
--- a/src/imports/positioning/qdeclarativegeoshape.cpp
+++ b/src/imports/positioning/qdeclarativegeoshape.cpp
@@ -64,7 +64,7 @@ QT_BEGIN_NAMESPACE
The \l isEmpty attribute can be used to test if the geoshape represents a region with a
geomatrical area of 0.
- The \l contains() method can be used to test if a \l {coordinate} is
+ The \l {contains}{contains()} method can be used to test if a \l {coordinate} is
within the geoshape.
\section2 Example Usage
diff --git a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp
index 8401f187..259dde6d 100644
--- a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp
+++ b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp
@@ -90,14 +90,15 @@ static void velocity_changed (GeoclueVelocity *velocity,
gpointer userdata) // Ptr to this
{
Q_UNUSED(velocity)
- Q_UNUSED(timestamp)
- Q_UNUSED(direction)
- Q_UNUSED(climb)
- if (!(fields & GEOCLUE_VELOCITY_FIELDS_SPEED)) {
- static_cast<QGeoPositionInfoSourceGeoclueMaster *>(userdata)->velocityUpdateFailed();
+
+ QGeoPositionInfoSourceGeoclueMaster *master =
+ static_cast<QGeoPositionInfoSourceGeoclueMaster *>(userdata);
+
+ if (fields == GEOCLUE_VELOCITY_FIELDS_NONE) {
+ master->velocityUpdateFailed();
return;
}
- static_cast<QGeoPositionInfoSourceGeoclueMaster *>(userdata)->velocityUpdateSucceeded(speed);
+ master->velocityUpdateSucceeded(fields, timestamp, speed, direction, climb);
}
// Callback for single async update
@@ -117,10 +118,16 @@ static void position_callback (GeocluePosition *pos, GeocluePositionFields field
}
}
+static double knotsToMetersPerSecond(double knots)
+{
+ return knots * 1852.0 / 3600.0;
+}
+
QGeoPositionInfoSourceGeoclueMaster::QGeoPositionInfoSourceGeoclueMaster(QObject *parent)
: QGeoPositionInfoSource(parent), QGeoclueMaster(this), m_updateInterval(0), m_pos(0), m_vel(0),
- m_lastPositionIsFresh(false), m_lastVelocityIsFresh(false), m_lastVelocity(0),
- m_lastPositionFromSatellite(false), m_methods(AllPositioningMethods), m_running(false)
+ m_lastPositionIsFresh(false), m_lastVelocityIsFresh(false), m_lastVelocity(qQNaN()),
+ m_lastDirection(qQNaN()), m_lastClimb(qQNaN()), m_lastPositionFromSatellite(false),
+ m_methods(AllPositioningMethods), m_running(false)
{
#ifndef QT_NO_DATASTREAM
// Load the last known location
@@ -169,13 +176,31 @@ void QGeoPositionInfoSourceGeoclueMaster::velocityUpdateFailed()
m_lastVelocityIsFresh = false;
}
-void QGeoPositionInfoSourceGeoclueMaster::velocityUpdateSucceeded(double speed)
+void QGeoPositionInfoSourceGeoclueMaster::velocityUpdateSucceeded(GeoclueVelocityFields fields,
+ int timestamp, double speed,
+ double direction, double climb)
{
+ Q_UNUSED(timestamp);
+
#ifdef Q_LOCATION_GEOCLUE_DEBUG
qDebug() << "QGeoPositionInfoSourceGeoclueMaster velocity update succeeded, speed: " << speed;
#endif
// Store the velocity and mark it as fresh. Simple but hopefully adequate.
- m_lastVelocity = speed * 0.514444; // convert knots to m/s
+ if (fields & GEOCLUE_VELOCITY_FIELDS_SPEED)
+ m_lastVelocity = knotsToMetersPerSecond(speed);
+ else
+ m_lastVelocity = qQNaN();
+
+ if (fields & GEOCLUE_VELOCITY_FIELDS_DIRECTION)
+ m_lastDirection = direction;
+ else
+ m_lastDirection = qQNaN();
+
+ if (fields & GEOCLUE_VELOCITY_FIELDS_CLIMB)
+ m_lastClimb = climb;
+ else
+ m_lastClimb = qQNaN();
+
m_lastVelocityIsFresh = true;
}
@@ -190,8 +215,14 @@ void QGeoPositionInfoSourceGeoclueMaster::singleUpdateSucceeded(GeocluePositionF
m_lastPosition = info;
if (m_requestTimer.isActive())
m_requestTimer.stop();
- if (m_lastVelocityIsFresh)
- info.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity); // assume groundspeed
+ if (m_lastVelocityIsFresh) {
+ if (!qIsNaN(m_lastVelocity))
+ info.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity);
+ if (!qIsNaN(m_lastDirection))
+ info.setAttribute(QGeoPositionInfo::Direction, m_lastDirection);
+ if (!qIsNaN(m_lastClimb))
+ info.setAttribute(QGeoPositionInfo::VerticalSpeed, m_lastClimb);
+ }
#ifdef Q_LOCATION_GEOCLUE_DEBUG
qDebug() << "QGeoPositionInfoSourceGeoclueMaster single update succeeded: ";
qDebug() << "Lat, lon, alt, speed:" << info.coordinate().latitude() << info.coordinate().longitude() << info.coordinate().altitude() << info.attribute(QGeoPositionInfo::GroundSpeed);
@@ -230,7 +261,12 @@ void QGeoPositionInfoSourceGeoclueMaster::regularUpdateSucceeded(GeocluePosition
m_lastPosition = geoclueToPositionInfo(fields, timestamp, latitude, longitude, altitude, accuracy);
m_lastPositionIsFresh = true;
if (m_lastVelocityIsFresh) {
- m_lastPosition.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity); // assume groundspeed
+ if (!qIsNaN(m_lastVelocity))
+ m_lastPosition.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity);
+ if (!qIsNaN(m_lastDirection))
+ m_lastPosition.setAttribute(QGeoPositionInfo::Direction, m_lastDirection);
+ if (!qIsNaN(m_lastClimb))
+ m_lastPosition.setAttribute(QGeoPositionInfo::VerticalSpeed, m_lastClimb);
m_lastVelocityIsFresh = false;
}
// If a non-intervalled startUpdates has been issued, send an update.
diff --git a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h
index 912f32c1..7e980317 100644
--- a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h
+++ b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h
@@ -93,7 +93,8 @@ public:
double altitude,
GeoclueAccuracy *accuracy);
void velocityUpdateFailed();
- void velocityUpdateSucceeded(double speed);
+ void velocityUpdateSucceeded(GeoclueVelocityFields fields, int timestamp, double speed,
+ double direction, double climb);
Error error() const;
@@ -125,6 +126,8 @@ private:
bool m_lastPositionIsFresh;
bool m_lastVelocityIsFresh;
double m_lastVelocity;
+ double m_lastDirection;
+ double m_lastClimb;
bool m_lastPositionFromSatellite;
QGeoPositionInfo m_lastPosition;
PositioningMethods m_methods;
diff --git a/tests/auto/declarative_core/tst_coordinate.qml b/tests/auto/declarative_core/tst_coordinate.qml
index 1541be39..19bdd572 100644
--- a/tests/auto/declarative_core/tst_coordinate.qml
+++ b/tests/auto/declarative_core/tst_coordinate.qml
@@ -138,6 +138,26 @@ Item {
compare(coordSpy.count, 3)
}
+ function test_comparison_data() {
+ return [
+ { tag: "empty", coord1: empty, coord2: QtPositioning.coordinate(), result: true },
+ { tag: "zero", coord1: zero, coord2: QtPositioning.coordinate(0, 0), result: true },
+ { tag: "plusone", coord1: plusone, coord2: QtPositioning.coordinate(0, 1), result: true },
+ { tag: "minusone", coord1: minusone, coord2: QtPositioning.coordinate(0, -1), result: true },
+ { tag: "north", coord1: north, coord2: QtPositioning.coordinate(3, 0), result: true },
+ { tag: "lat,long.alt", coord1: QtPositioning.coordinate(1.1, 2.2, 3.3), coord2: QtPositioning.coordinate(1.1, 2.2, 3.3), result: true },
+ { tag: "not equal1", coord1: plusone, coord2: minusone, result: false },
+ { tag: "not equal2", coord1: plusone, coord2: north, result: false }
+ ]
+ }
+
+ function test_comparison(data) {
+ compare(data.coord1 === data.coord2, data.result)
+ compare(data.coord1 !== data.coord2, !data.result)
+ compare(data.coord1 == data.coord2, data.result)
+ compare(data.coord1 != data.coord2, !data.result)
+ }
+
function test_distance() {
compare(zero.distanceTo(plusone), zero.distanceTo(minusone))
compare(2*plusone.distanceTo(zero), plusone.distanceTo(minusone))
@@ -178,8 +198,6 @@ Item {
var coord_30d2 = coord_30d.atDistanceAndAzimuth(200, 30)
compare(zero.distanceTo(coord_30d2), 20200)
-
}
-
}
}
diff --git a/tests/auto/declarative_geoshape/tst_locationsingleton.qml b/tests/auto/declarative_geoshape/tst_locationsingleton.qml
index 37210cb1..b12fc710 100644
--- a/tests/auto/declarative_geoshape/tst_locationsingleton.qml
+++ b/tests/auto/declarative_geoshape/tst_locationsingleton.qml
@@ -134,4 +134,31 @@ Item {
compare (widthBox.contains(outside), false)
}
}
+
+ TestCase {
+ name: "Shape"
+
+ function test_shape_comparison_data() {
+ return [
+ { tag: "invalid shape", shape1: QtPositioning.shape(), shape2: QtPositioning.shape(), result: true },
+ { tag: "box equal", shape1: box, shape2: QtPositioning.rectangle(tl, br), result: true },
+ { tag: "box not equal", shape1: box, shape2: QtPositioning.rectangle([inside, outside]), result: false },
+ { tag: "box invalid shape", rect1: box, shape2: QtPositioning.shape(), result: false },
+ { tag: "invalid rectangle", shape1: QtPositioning.rectangle(), shape2: QtPositioning.rectangle(), result: true },
+ { tag: "invalid rectangle2", shape1: QtPositioning.rectangle(), shape2: QtPositioning.shape(), result: false },
+ { tag: "circle1 equal", shape1: circle1, shape2: QtPositioning.circle(coordinate1, 200000), result: true },
+ { tag: "circle1 not equal", shape1: circle1, shape2: QtPositioning.circle(coordinate2, 2000), result: false },
+ { tag: "circle1 invalid shape", shape1: circle1, shape2: QtPositioning.shape(), result: false },
+ { tag: "invalid circle", shape1: QtPositioning.circle(), shape2: QtPositioning.circle(), result: true },
+ { tag: "invalid circle2", shape1: QtPositioning.circle(), shape2: QtPositioning.shape(), result: false }
+ ]
+ }
+
+ function test_shape_comparison(data) {
+ compare(data.shape1 === data.shape2, data.result)
+ compare(data.shape1 !== data.shape2, !data.result)
+ compare(data.shape1 == data.shape2, data.result)
+ compare(data.shape1 != data.shape2, !data.result)
+ }
+ }
}
diff --git a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro
index b8338f90..f2645820 100644
--- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro
+++ b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro
@@ -14,3 +14,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \
../qnmeapositioninfosourceproxyfactory.cpp \
tst_dummynmeapositioninfosource.cpp
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
+
+# This test relies on a working local QTcpSocket(Server). When the CI is under
+# heavy load the socket code cannot establish a connection which leads to flaky
+# test results. We make this test insiginficant as there is currently no known
+# solution to this problem. On the positive side QNmeaPositionInfoSource
+# does not have a platform specific implementation. Other platforms should provide
+# a close enough test approximation.
+win32:CONFIG+=insignificant_test
diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro
index 83e6bf16..cb721b29 100644
--- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro
+++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro
@@ -16,3 +16,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \
../tst_qnmeapositioninfosource.cpp \
tst_qnmeapositioninfosource_realtime.cpp
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
+
+# This test relies on a working local QTcpSocket(Server). When the CI is under
+# heavy load the socket code cannot establish a connection which leads to flaky
+# test results. We make this test insiginficant as there is currently no known
+# solution to this problem. On the positive side QNmeaPositionInfoSource
+# does not have a platform specific implementation. Other platforms should provide
+# a close enough test approximation.
+win32:CONFIG+=insignificant_test
diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro
index ca1c258f..c6105d82 100644
--- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro
+++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro
@@ -17,3 +17,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \
../tst_qnmeapositioninfosource.cpp \
tst_qnmeapositioninfosource_realtime_generic.cpp
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
+
+# This test relies on a working local QTcpSocket(Server). When the CI is under
+# heavy load the socket code cannot establish a connection which leads to flaky
+# test results. We make this test insiginficant as there is currently no known
+# solution to this problem. On the positive side QNmeaPositionInfoSource
+# does not have a platform specific implementation. Other platforms should provide
+# a close enough test approximation.
+win32:CONFIG+=insignificant_test
diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro
index 655a5f10..d1f8941d 100644
--- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro
+++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro
@@ -16,3 +16,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \
../tst_qnmeapositioninfosource.cpp \
tst_qnmeapositioninfosource_simulation.cpp
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
+
+# This test relies on a working local QTcpSocket(Server). When the CI is under
+# heavy load the socket code cannot establish a connection which leads to flaky
+# test results. We make this test insiginficant as there is currently no known
+# solution to this problem. On the positive side QNmeaPositionInfoSource
+# does not have a platform specific implementation. Other platforms should provide
+# a close enough test approximation.
+win32:CONFIG+=insignificant_test
diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro
index cf94e7f8..f3bd50a0 100644
--- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro
+++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro
@@ -17,3 +17,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \
../tst_qnmeapositioninfosource.cpp \
tst_qnmeapositioninfosource_simulation_generic.cpp
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
+
+# This test relies on a working local QTcpSocket(Server). When the CI is under
+# heavy load the socket code cannot establish a connection which leads to flaky
+# test results. We make this test insiginficant as there is currently no known
+# solution to this problem. On the positive side QNmeaPositionInfoSource
+# does not have a platform specific implementation. Other platforms should provide
+# a close enough test approximation.
+win32:CONFIG+=insignificant_test