diff options
Diffstat (limited to 'src/plugins/position')
3 files changed, 24 insertions, 12 deletions
diff --git a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp index 34a1a035..3c78a075 100644 --- a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp +++ b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2.cpp @@ -68,6 +68,7 @@ enum GClueAccuracyLevel { const char GEOCLUE2_SERVICE_NAME[] = "org.freedesktop.GeoClue2"; const int MINIMUM_UPDATE_INTERVAL = 1000; const int UPDATE_TIMEOUT_COLD_START = 120000; +static const auto desktopIdParameter = "desktopId"; static QString lastPositionFilePath() { @@ -77,7 +78,8 @@ static QString lastPositionFilePath() } // namespace -QGeoPositionInfoSourceGeoclue2::QGeoPositionInfoSourceGeoclue2(QObject *parent) +QGeoPositionInfoSourceGeoclue2::QGeoPositionInfoSourceGeoclue2(const QVariantMap ¶meters, + QObject *parent) : QGeoPositionInfoSource(parent) , m_requestTimer(new QTimer(this)) , m_manager(QLatin1String(GEOCLUE2_SERVICE_NAME), @@ -85,6 +87,8 @@ QGeoPositionInfoSourceGeoclue2::QGeoPositionInfoSourceGeoclue2(QObject *parent) QDBusConnection::systemBus(), this) { + parseParameters(parameters); + qDBusRegisterMetaType<Timestamp>(); restoreLastPosition(); @@ -347,19 +351,15 @@ bool QGeoPositionInfoSourceGeoclue2::configureClient() if (!m_client) return false; - auto desktopId = QString::fromUtf8(qgetenv("QT_GEOCLUE_APP_DESKTOP_ID")); - if (desktopId.isEmpty()) - desktopId = QCoreApplication::applicationName(); - if (desktopId.isEmpty()) { - qCCritical(lcPositioningGeoclue2) << "Unable to configure the client " - "due to the application desktop id " - "is not set via QT_GEOCLUE_APP_DESKTOP_ID " - "envirorment variable or QCoreApplication::applicationName"; + if (m_desktopId.isEmpty()) { + qCCritical(lcPositioningGeoclue2) + << "Unable to configure the client due to the desktop id is not set via" + << desktopIdParameter << "plugin parameter or QCoreApplication::applicationName"; setError(AccessError); return false; } - m_client->setDesktopId(desktopId); + m_client->setDesktopId(m_desktopId); const auto msecs = updateInterval(); const uint secs = qMax(uint(msecs), 0u) / 1000u; @@ -446,4 +446,13 @@ void QGeoPositionInfoSourceGeoclue2::handleNewLocation(const QDBusObjectPath &ol stopClient(); } +void QGeoPositionInfoSourceGeoclue2::parseParameters(const QVariantMap ¶meters) +{ + if (parameters.contains(desktopIdParameter)) + m_desktopId = parameters.value(desktopIdParameter).toString(); + + if (m_desktopId.isEmpty()) + m_desktopId = QCoreApplication::applicationName(); +} + QT_END_NAMESPACE diff --git a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2_p.h b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2_p.h index 16f5b9a1..f5ec2b06 100644 --- a/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2_p.h +++ b/src/plugins/position/geoclue2/qgeopositioninfosource_geoclue2_p.h @@ -55,7 +55,8 @@ class QGeoPositionInfoSourceGeoclue2 : public QGeoPositionInfoSource Q_OBJECT public: - explicit QGeoPositionInfoSourceGeoclue2(QObject *parent = nullptr); + explicit QGeoPositionInfoSourceGeoclue2(const QVariantMap ¶meters, + QObject *parent = nullptr); ~QGeoPositionInfoSourceGeoclue2(); // From QGeoPositionInfoSource @@ -82,6 +83,7 @@ private: void requestUpdateTimeout(); void handleNewLocation(const QDBusObjectPath &oldLocation, const QDBusObjectPath &newLocation); + void parseParameters(const QVariantMap ¶meters); QTimer *m_requestTimer = nullptr; OrgFreedesktopGeoClue2ManagerInterface m_manager; @@ -90,6 +92,7 @@ private: bool m_lastPositionFromSatellite = false; QGeoPositionInfoSource::Error m_error = NoError; QGeoPositionInfo m_lastPosition; + QString m_desktopId; }; QT_END_NAMESPACE diff --git a/src/plugins/position/geoclue2/qgeopositioninfosourcefactory_geoclue2.cpp b/src/plugins/position/geoclue2/qgeopositioninfosourcefactory_geoclue2.cpp index 68caba3a..68161f41 100644 --- a/src/plugins/position/geoclue2/qgeopositioninfosourcefactory_geoclue2.cpp +++ b/src/plugins/position/geoclue2/qgeopositioninfosourcefactory_geoclue2.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE QGeoPositionInfoSource *QGeoPositionInfoSourceFactoryGeoclue2::positionInfoSource(QObject *parent, const QVariantMap ¶meters) { Q_UNUSED(parameters) - return new QGeoPositionInfoSourceGeoclue2(parent); + return new QGeoPositionInfoSourceGeoclue2(parameters, parent); } QGeoSatelliteInfoSource *QGeoPositionInfoSourceFactoryGeoclue2::satelliteInfoSource(QObject *parent, const QVariantMap ¶meters) |