diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2012-05-02 13:24:53 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-03 02:58:54 +0200 |
commit | 9beba94649372be56f7811562d2df03a923e39e2 (patch) | |
tree | c9b11b1094431fa15cb02e7dd7cb438ba8bef262 | |
parent | adba472bbc645898990c802d9fdf621438d6f88d (diff) | |
download | qtlocation-9beba94649372be56f7811562d2df03a923e39e2.tar.gz |
Port qtlocation to QMetaMethod-based connectNotify() API
The const char *-based API is deprecated and will be removed in Qt5.
Also use the new QObject::isSignalConnected(QMetaMethod) function;
it's a lot faster than QObject::receivers(const char *).
Change-Id: I51253f63025641411b8b1ef984271f16e139fc1f
Reviewed-by: Alex Wilson <alex.wilson@nokia.com>
-rw-r--r-- | src/location/qgeoareamonitor_polling.cpp | 30 | ||||
-rw-r--r-- | src/location/qgeoareamonitor_polling_p.h | 4 |
2 files changed, 24 insertions, 10 deletions
diff --git a/src/location/qgeoareamonitor_polling.cpp b/src/location/qgeoareamonitor_polling.cpp index cadbbff2..2135948e 100644 --- a/src/location/qgeoareamonitor_polling.cpp +++ b/src/location/qgeoareamonitor_polling.cpp @@ -42,6 +42,8 @@ #include "qgeoareamonitor_polling_p.h" #include "qgeocoordinate.h" +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE #define UPDATE_INTERVAL_5S 5000 @@ -77,17 +79,29 @@ void QGeoAreaMonitorPolling::setRadius(qreal radius) checkStartStop(); } -void QGeoAreaMonitorPolling::connectNotify(const char *signal) +static QMetaMethod areaEnteredSignal() +{ + static QMetaMethod signal = QMetaMethod::fromSignal(&QGeoAreaMonitorPolling::areaEntered); + return signal; +} + +static QMetaMethod areaExitedSignal() +{ + static QMetaMethod signal = QMetaMethod::fromSignal(&QGeoAreaMonitorPolling::areaExited); + return signal; +} + +void QGeoAreaMonitorPolling::connectNotify(const QMetaMethod &signal) { - if (signal == SIGNAL(areaEntered(QGeoPositionInfo)) || - signal == SIGNAL(areaExited(QGeoPositionInfo))) + if (signal == areaEnteredSignal() || + signal == areaExitedSignal()) checkStartStop(); } -void QGeoAreaMonitorPolling::disconnectNotify(const char *signal) +void QGeoAreaMonitorPolling::disconnectNotify(const QMetaMethod &signal) { - if (signal == SIGNAL(areaEntered(QGeoPositionInfo)) || - signal == SIGNAL(areaExited(QGeoPositionInfo))) + if (signal == areaEnteredSignal() || + signal == areaExitedSignal()) checkStartStop(); } @@ -95,8 +109,8 @@ void QGeoAreaMonitorPolling::checkStartStop() { if (!location) return; - if ((QObject::receivers(SIGNAL(areaEntered(QGeoPositionInfo))) > 0 || - QObject::receivers(SIGNAL(areaExited(QGeoPositionInfo))) > 0) && + if ((isSignalConnected(areaEnteredSignal()) || + isSignalConnected(areaExitedSignal())) && QGeoAreaMonitor::center().isValid() && QGeoAreaMonitor::radius() > qreal(0.0)) { location->startUpdates(); diff --git a/src/location/qgeoareamonitor_polling_p.h b/src/location/qgeoareamonitor_polling_p.h index 5017c118..a913b8ad 100644 --- a/src/location/qgeoareamonitor_polling_p.h +++ b/src/location/qgeoareamonitor_polling_p.h @@ -81,8 +81,8 @@ private: bool insideArea; QGeoPositionInfoSource *location; - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); void checkStartStop(); }; |