diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2012-04-25 15:10:05 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-07 09:54:08 +0200 |
commit | 5705ed99390064c57ce7edeeb9f6bb44ecae0a45 (patch) | |
tree | a2d0beb0d68c9dd15032084f1d17857ba50226ec | |
parent | 1a4d498e8dd47775d3c5f0b77a7ee5288639f1b5 (diff) |
Port qtsystems to QMetaMethod-based connectNotify() API
The const char *-based API is deprecated and will be removed in Qt5.
Change-Id: Ia5f89aae65a031575094de5865fbafff34648fe7
Reviewed-by: Johann Specht <johann.specht@nokia.com>
Reviewed-by: Cristiano di Flora <cristiano.di-flora@nokia.com>
48 files changed, 619 insertions, 333 deletions
diff --git a/src/publishsubscribe/qvaluespacepublisher.cpp b/src/publishsubscribe/qvaluespacepublisher.cpp index 2b2e32a2..ee41fe97 100644 --- a/src/publishsubscribe/qvaluespacepublisher.cpp +++ b/src/publishsubscribe/qvaluespacepublisher.cpp @@ -44,6 +44,8 @@ #include "qvaluespace_p.h" #include "qvaluespacemanager_p.h" +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE /*! @@ -328,9 +330,10 @@ void QValueSpacePublisher::resetValue(const QString &name) /*! \reimp */ -void QValueSpacePublisher::connectNotify(const char *signal) +void QValueSpacePublisher::connectNotify(const QMetaMethod &signal) { - if (!d_ptr->hasWatch && isConnected() && qstrcmp(signal, SIGNAL(interestChanged(QString,bool))) == 0) { + static const QMetaMethod interestChangedSignal = QMetaMethod::fromSignal(&QValueSpacePublisher::interestChanged); + if (!d_ptr->hasWatch && isConnected() && signal == interestChangedSignal) { d_ptr->layer->addWatch(this, d_ptr->handle); d_ptr->hasWatch = true; } diff --git a/src/publishsubscribe/qvaluespacepublisher.h b/src/publishsubscribe/qvaluespacepublisher.h index 023b3d1f..00b1d3c3 100644 --- a/src/publishsubscribe/qvaluespacepublisher.h +++ b/src/publishsubscribe/qvaluespacepublisher.h @@ -74,7 +74,7 @@ public Q_SLOTS: void setValue(const QString &name, const QVariant &data); protected: - virtual void connectNotify(const char *); + virtual void connectNotify(const QMetaMethod &); private: Q_DISABLE_COPY(QValueSpacePublisher) diff --git a/src/publishsubscribe/qvaluespacesubscriber.cpp b/src/publishsubscribe/qvaluespacesubscriber.cpp index ab8a8d6b..a179dc87 100644 --- a/src/publishsubscribe/qvaluespacesubscriber.cpp +++ b/src/publishsubscribe/qvaluespacesubscriber.cpp @@ -44,6 +44,7 @@ #include "qvaluespacemanager_p.h" #include "qvaluespacesubscriber_p.h" +#include <QtCore/qmetaobject.h> #include <QtCore/qset.h> #include <QtCore/qstringlist.h> @@ -461,18 +462,20 @@ QVariant QValueSpaceSubscriber::valuex(const QVariant &def) const /*! \reimp */ -void QValueSpaceSubscriber::connectNotify(const char *signal) +void QValueSpaceSubscriber::connectNotify(const QMetaMethod &signal) { - if (isConnected() && qstrcmp(signal, SIGNAL(contentsChanged())) == 0) + static const QMetaMethod contentsChangedSignal = QMetaMethod::fromSignal(&QValueSpaceSubscriber::contentsChanged); + if (isConnected() && signal == contentsChangedSignal) d->connect(this); } /*! \reimp */ -void QValueSpaceSubscriber::disconnectNotify(const char *signal) +void QValueSpaceSubscriber::disconnectNotify(const QMetaMethod &signal) { - if (isConnected() && qstrcmp(signal, SIGNAL(contentsChanged())) == 0) + static const QMetaMethod contentsChangedSignal = QMetaMethod::fromSignal(&QValueSpaceSubscriber::contentsChanged); + if (isConnected() && signal == contentsChangedSignal) d->disconnect(this); } diff --git a/src/publishsubscribe/qvaluespacesubscriber.h b/src/publishsubscribe/qvaluespacesubscriber.h index 9962015c..7c2d2d4a 100644 --- a/src/publishsubscribe/qvaluespacesubscriber.h +++ b/src/publishsubscribe/qvaluespacesubscriber.h @@ -79,8 +79,8 @@ Q_SIGNALS: void contentsChanged(); protected: - virtual void connectNotify(const char *signal); - virtual void disconnectNotify(const char *signal); + virtual void connectNotify(const QMetaMethod &signal); + virtual void disconnectNotify(const QMetaMethod &signal); private: QVariant valuex(const QVariant &def = QVariant()) const; diff --git a/src/serviceframework/ipc/proxyobject.cpp b/src/serviceframework/ipc/proxyobject.cpp index 0b2db76a..7801edbd 100644 --- a/src/serviceframework/ipc/proxyobject.cpp +++ b/src/serviceframework/ipc/proxyobject.cpp @@ -44,6 +44,7 @@ #include "qremoteserviceregisterentry_p.h" #include "qservicedebuglog_p.h" +#include <qmetaobject.h> #include <qtimer.h> #include <qcoreevent.h> @@ -281,6 +282,7 @@ public: QMetaObject* meta; ObjectEndPoint* endPoint; int ipcfailure; + QMetaMethod ipcFailureSignal; int timerId; }; @@ -299,7 +301,8 @@ QServiceProxyBase::QServiceProxyBase(ObjectEndPoint *endpoint, QObject *parent) QMetaMethodBuilder b = sup.addSignal("errorUnrecoverableIPCFault(QService::UnrecoverableIPCError)"); d->ipcfailure = b.index(); d->meta = sup.toMetaObject(); - + d->ipcFailureSignal = d->meta->method(d->meta->methodOffset()); + Q_ASSERT(d->ipcFailureSignal.methodSignature() == "errorUnrecoverableIPCFault(QService::UnrecoverableIPCError)"); } QServiceProxyBase::~QServiceProxyBase() @@ -309,9 +312,9 @@ QServiceProxyBase::~QServiceProxyBase() delete d; } -void QServiceProxyBase::connectNotify(const char *signal) +void QServiceProxyBase::connectNotify(const QMetaMethod &signal) { - if (d->timerId > 0 && strcmp(SIGNAL(errorUnrecoverableIPCFault(QService::UnrecoverableIPCError)), signal) == 0) { + if (d->timerId > 0 && signal == d->ipcFailureSignal) { killTimer(d->timerId); d->timerId = -1; } diff --git a/src/serviceframework/ipc/proxyobject_p.h b/src/serviceframework/ipc/proxyobject_p.h index 70d32480..a01de90c 100644 --- a/src/serviceframework/ipc/proxyobject_p.h +++ b/src/serviceframework/ipc/proxyobject_p.h @@ -68,7 +68,7 @@ public: void *qt_metacast(const char* className); protected: - void connectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); void timerEvent(QTimerEvent *); private: diff --git a/src/serviceframework/qservicemanager.cpp b/src/serviceframework/qservicemanager.cpp index ce1b213c..d64f01ab 100644 --- a/src/serviceframework/qservicemanager.cpp +++ b/src/serviceframework/qservicemanager.cpp @@ -52,6 +52,7 @@ #endif #include <QObject> +#include <QMetaMethod> #include <QPluginLoader> #include <QFile> #include <QCoreApplication> @@ -776,10 +777,12 @@ QServiceManager::Error QServiceManager::error() const /*! \internal */ -void QServiceManager::connectNotify(const char *signal) +void QServiceManager::connectNotify(const QMetaMethod &signal) { - if (QLatin1String(signal) == QLatin1String(SIGNAL(serviceAdded(QString,QService::Scope))) - || QLatin1String(signal) == QLatin1String(SIGNAL(serviceRemoved(QString,QService::Scope)))) { + static const QMetaMethod serviceAddedSignal = QMetaMethod::fromSignal(&QServiceManager::serviceAdded); + static const QMetaMethod serviceRemovedSignal = QMetaMethod::fromSignal(&QServiceManager::serviceRemoved); + if (signal == serviceAddedSignal + || signal == serviceRemovedSignal) { if (d->scope != QService::SystemScope) d->dbManager->setChangeNotificationsEnabled(DatabaseManager::UserScope, true); d->dbManager->setChangeNotificationsEnabled(DatabaseManager::SystemScope, true); @@ -789,12 +792,14 @@ void QServiceManager::connectNotify(const char *signal) /*! \internal */ -void QServiceManager::disconnectNotify(const char *signal) +void QServiceManager::disconnectNotify(const QMetaMethod &signal) { - if (QLatin1String(signal) == QLatin1String(SIGNAL(serviceAdded(QString,QService::Scope))) - || QLatin1String(signal) == QLatin1String(SIGNAL(serviceRemoved(QString,QService::Scope)))) { - if (receivers(SIGNAL(serviceAdded(QString,QService::Scope))) == 0 - && receivers(SIGNAL(serviceRemoved(QString,QService::Scope))) == 0) { + static const QMetaMethod serviceAddedSignal = QMetaMethod::fromSignal(&QServiceManager::serviceAdded); + static const QMetaMethod serviceRemovedSignal = QMetaMethod::fromSignal(&QServiceManager::serviceRemoved); + if (signal == serviceAddedSignal + || signal == serviceRemovedSignal) { + if (!isSignalConnected(serviceAddedSignal) + && !isSignalConnected(serviceRemovedSignal)) { if (d->scope != QService::SystemScope) d->dbManager->setChangeNotificationsEnabled(DatabaseManager::UserScope, false); d->dbManager->setChangeNotificationsEnabled(DatabaseManager::SystemScope, false); diff --git a/src/serviceframework/qservicemanager.h b/src/serviceframework/qservicemanager.h index 318e2280..13c7ddd9 100644 --- a/src/serviceframework/qservicemanager.h +++ b/src/serviceframework/qservicemanager.h @@ -142,8 +142,8 @@ public: bool event(QEvent *); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); Q_SIGNALS: void serviceAdded(const QString& serviceName, QService::Scope scope); diff --git a/src/systeminfo/qbatteryinfo.cpp b/src/systeminfo/qbatteryinfo.cpp index ef13e49d..55018212 100644 --- a/src/systeminfo/qbatteryinfo.cpp +++ b/src/systeminfo/qbatteryinfo.cpp @@ -68,6 +68,8 @@ public: QT_END_NAMESPACE #endif +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE /*! @@ -291,11 +293,30 @@ QBatteryInfo::BatteryStatus QBatteryInfo::batteryStatus(int battery) const /*! \internal + + Returns the signal that corresponds to \a proxySignal in the + meta-object of the \a sourceObject. +*/ +QMetaMethod proxyToSourceSignal(const QMetaMethod &proxySignal, QObject *sourceObject) +{ + if (!proxySignal.isValid()) + return proxySignal; + Q_ASSERT(proxySignal.methodType() == QMetaMethod::Signal); + Q_ASSERT(sourceObject != 0); + const QMetaObject *sourceMeta = sourceObject->metaObject(); + int sourceIndex = sourceMeta->indexOfSignal(proxySignal.methodSignature()); + Q_ASSERT(sourceIndex != -1); + return sourceMeta->method(sourceIndex); +} + +/*! + \internal */ -void QBatteryInfo::connectNotify(const char *signal) +void QBatteryInfo::connectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) || defined(QT_SIMULATOR) - connect(d_ptr, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + connect(d_ptr, sourceSignal, this, signal, Qt::UniqueConnection); #else Q_UNUSED(signal) #endif @@ -304,14 +325,15 @@ void QBatteryInfo::connectNotify(const char *signal) /*! \internal */ -void QBatteryInfo::disconnectNotify(const char *signal) +void QBatteryInfo::disconnectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) || defined(QT_SIMULATOR) // We can only disconnect with the private implementation, when there is no receivers for the signal. - if (receivers(signal) > 0) + if (isSignalConnected(signal)) return; - disconnect(d_ptr, signal, this, signal); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + disconnect(d_ptr, sourceSignal, this, signal); #else Q_UNUSED(signal) #endif diff --git a/src/systeminfo/qbatteryinfo.h b/src/systeminfo/qbatteryinfo.h index ebb129da..973ef99e 100644 --- a/src/systeminfo/qbatteryinfo.h +++ b/src/systeminfo/qbatteryinfo.h @@ -122,8 +122,8 @@ Q_SIGNALS: void batteryStatusChanged(int battery, QBatteryInfo::BatteryStatus); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: Q_DISABLE_COPY(QBatteryInfo) diff --git a/src/systeminfo/qbatteryinfo_linux.cpp b/src/systeminfo/qbatteryinfo_linux.cpp index e4f309ba..809f42f8 100644 --- a/src/systeminfo/qbatteryinfo_linux.cpp +++ b/src/systeminfo/qbatteryinfo_linux.cpp @@ -43,6 +43,7 @@ #include <QtCore/qdir.h> #include <QtCore/qfile.h> +#include <QtCore/qmetaobject.h> #include <QtCore/qtimer.h> #if !defined(QT_NO_UDEV) @@ -175,12 +176,21 @@ QBatteryInfo::BatteryStatus QBatteryInfoPrivate::batteryStatus(int battery) return batteryStatuses.value(battery); } -void QBatteryInfoPrivate::connectNotify(const char *signal) +void QBatteryInfoPrivate::connectNotify(const QMetaMethod &signal) { + static const QMetaMethod batteryCountChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryCountChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargerTypeChanged); + static const QMetaMethod chargingStateChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargingStateChanged); + static const QMetaMethod currentFlowChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::currentFlowChanged); + static const QMetaMethod remainingCapacityChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingCapacityChanged); + static const QMetaMethod remainingChargingTimeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingChargingTimeChanged); + static const QMetaMethod voltageChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::voltageChanged); + static const QMetaMethod batteryStatusChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryStatusChanged); + #if !defined(QT_NO_UDEV) if (!uDevWrapper) uDevWrapper = new QUDevWrapper(this); - if (!watchChargerType && strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0) { + if (!watchChargerType && signal == chargerTypeChangedSignal) { connect(uDevWrapper, SIGNAL(chargerTypeChanged(QByteArray,bool)), this, SLOT(onChargerTypeChanged(QByteArray,bool))); } else if (!watchCurrentFlow && !watchVoltage && !watchChargingState && !watchRemainingCapacity && !watchRemainingChargingTime && !watchBatteryCount && !watchBatteryStatus) { @@ -197,38 +207,38 @@ void QBatteryInfoPrivate::connectNotify(const char *signal) timer->start(); #endif // QT_NO_UDEV - if (strcmp(signal, SIGNAL(batteryCountChanged(int))) == 0) { + if (signal == batteryCountChangedSignal) { watchBatteryCount = true; batteryCounts = getBatteryCount(); - } else if (strcmp(signal, SIGNAL(currentFlowChanged(int,int))) == 0) { + } else if (signal == currentFlowChangedSignal) { watchCurrentFlow = true; int count = batteryCount(); for (int i = 0; i < count; ++i) currentFlows[i] = getCurrentFlow(i); - } else if (strcmp(signal, SIGNAL(voltageChanged(int,int))) == 0) { + } else if (signal == voltageChangedSignal) { watchVoltage = true; int count = batteryCount(); for (int i = 0; i < count; ++i) voltages[i] = getVoltage(i); - } else if (strcmp(signal, SIGNAL(remainingCapacityChanged(int,int))) == 0) { + } else if (signal == remainingCapacityChangedSignal) { watchRemainingCapacity = true; int count = batteryCount(); for (int i = 0; i < count; ++i) remainingCapacities[i] = getRemainingCapacity(i); - } else if (strcmp(signal, SIGNAL(remainingChargingTimeChanged(int,int))) == 0) { + } else if (signal == remainingChargingTimeChangedSignal) { watchRemainingChargingTime = true; int count = batteryCount(); for (int i = 0; i < count; ++i) remainingChargingTimes[i] = getRemainingChargingTime(i); - } else if (strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0) { + } else if (signal == chargerTypeChangedSignal) { watchChargerType = true; currentChargerType = getChargerType(); - } else if (strcmp(signal, SIGNAL(chargingStateChanged(int,QBatteryInfo::ChargingState))) == 0) { + } else if (signal == chargingStateChangedSignal) { watchChargingState = true; int count = batteryCount(); for (int i = 0; i < count; ++i) chargingStates[i] = getChargingState(i); - } else if (strcmp(signal, SIGNAL(batteryStatusChanged(int,QBatteryInfo::BatteryStatus))) == 0) { + } else if (signal == batteryStatusChangedSignal) { watchBatteryStatus = true; int count = batteryCount(); for (int i = 0; i < count; i++) @@ -236,36 +246,44 @@ void QBatteryInfoPrivate::connectNotify(const char *signal) } } -void QBatteryInfoPrivate::disconnectNotify(const char *signal) +void QBatteryInfoPrivate::disconnectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(batteryCountChanged(int))) == 0) { + static const QMetaMethod batteryCountChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryCountChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargerTypeChanged); + static const QMetaMethod chargingStateChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargingStateChanged); + static const QMetaMethod currentFlowChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::currentFlowChanged); + static const QMetaMethod remainingCapacityChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingCapacityChanged); + static const QMetaMethod remainingChargingTimeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingChargingTimeChanged); + static const QMetaMethod voltageChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::voltageChanged); + static const QMetaMethod batteryStatusChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryStatusChanged); + if (signal == batteryCountChangedSignal) { watchBatteryCount = false; batteryCounts = -1; - } else if (strcmp(signal, SIGNAL(currentFlowChanged(int,int))) == 0) { + } else if (signal == currentFlowChangedSignal) { watchCurrentFlow = false; currentFlows.clear(); - } else if (strcmp(signal, SIGNAL(voltageChanged(int,int))) == 0) { + } else if (signal == voltageChangedSignal) { watchVoltage = false; voltages.clear(); - } else if (strcmp(signal, SIGNAL(remainingCapacityChanged(int,int))) == 0) { + } else if (signal == remainingCapacityChangedSignal) { watchRemainingCapacity = false; remainingCapacities.clear(); - } else if (strcmp(signal, SIGNAL(remainingChargingTimeChanged(int,int))) == 0) { + } else if (signal == remainingChargingTimeChangedSignal) { watchRemainingChargingTime = false; remainingChargingTimes.clear(); - } else if (strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0) { + } else if (signal == chargerTypeChangedSignal) { watchChargerType = false; currentChargerType = QBatteryInfo::UnknownCharger; - } else if (strcmp(signal, SIGNAL(chargingStateChanged(int,QBatteryInfo::ChargingState))) == 0) { + } else if (signal == chargingStateChangedSignal) { watchChargingState = false; chargingStates.clear(); - } else if (strcmp(signal, SIGNAL(batteryStatusChanged(int,QBatteryInfo::BatteryStatus))) == 0) { + } else if (signal == batteryStatusChangedSignal) { watchBatteryStatus = false; batteryStatuses.clear(); } #if !defined(QT_NO_UDEV) - if (uDevWrapper && !watchChargerType && strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0) { + if (uDevWrapper && !watchChargerType && signal == chargerTypeChangedSignal) { disconnect(uDevWrapper, SIGNAL(chargerTypeChanged(QByteArray,bool)), this, SLOT(onChargerTypeChanged(QByteArray,bool))); } else if (uDevWrapper && !watchCurrentFlow && !watchVoltage && !watchChargingState && !watchRemainingCapacity diff --git a/src/systeminfo/qbatteryinfo_linux_p.h b/src/systeminfo/qbatteryinfo_linux_p.h index f385b891..b1bf4a09 100644 --- a/src/systeminfo/qbatteryinfo_linux_p.h +++ b/src/systeminfo/qbatteryinfo_linux_p.h @@ -95,8 +95,8 @@ Q_SIGNALS: void batteryStatusChanged(int battery, QBatteryInfo::BatteryStatus); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private Q_SLOTS: #if !defined(QT_NO_UDEV) diff --git a/src/systeminfo/qbatteryinfo_win.cpp b/src/systeminfo/qbatteryinfo_win.cpp index 9b34b64c..3a393a30 100644 --- a/src/systeminfo/qbatteryinfo_win.cpp +++ b/src/systeminfo/qbatteryinfo_win.cpp @@ -44,6 +44,8 @@ #include <windows.h> #include <PowrProf.h> +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE QBatteryInfoPrivate::QBatteryInfoPrivate(QBatteryInfo *parent) @@ -151,29 +153,45 @@ QBatteryInfo::BatteryStatus QBatteryInfoPrivate::batteryStatus(int battery) return QBatteryInfo::BatteryStatusUnknown; } -void QBatteryInfoPrivate::connectNotify(const char *signal) +void QBatteryInfoPrivate::connectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(batteryCountChanged(int))) == 0) { - } else if (strcmp(signal, SIGNAL(currentFlowChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(voltageChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(remainingCapacityChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(remainingChargingTimeChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0) { - } else if (strcmp(signal, SIGNAL(chargingStateChanged(int,QBatteryInfo::ChargingState))) == 0) { - } else if (strcmp(signal, SIGNAL(batteryStatusChanged(int,QBatteryInfo::BatteryStatus))) == 0) { + static const QMetaMethod batteryCountChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryCountChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargerTypeChanged); + static const QMetaMethod chargingStateChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargingStateChanged); + static const QMetaMethod currentFlowChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::currentFlowChanged); + static const QMetaMethod remainingCapacityChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingCapacityChanged); + static const QMetaMethod remainingChargingTimeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingChargingTimeChanged); + static const QMetaMethod voltageChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::voltageChanged); + static const QMetaMethod batteryStatusChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryStatusChanged); + if (signal == batteryCountChangedSignal) { + } else if (signal == currentFlowChangedSignal) { + } else if (signal == voltageChangedSignal) { + } else if (signal == remainingCapacityChangedSignal) { + } else if (signal == remainingChargingTimeChangedSignal) { + } else if (signal == chargerTypeChangedSignal) { + } else if (signal == chargingStateChangedSignal) { + } else if (signal == batteryStatusChangedSignal) { } } -void QBatteryInfoPrivate::disconnectNotify(const char *signal) +void QBatteryInfoPrivate::disconnectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(batteryCountChanged(int))) == 0) { - } else if (strcmp(signal, SIGNAL(currentFlowChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(voltageChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(remainingCapacityChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(remainingChargingTimeChanged(int,int))) == 0) { - } else if (strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0) { - } else if (strcmp(signal, SIGNAL(chargingStateChanged(int,QBatteryInfo::ChargingState))) == 0) { - } else if (strcmp(signal, SIGNAL(batteryStatusChanged(int,QBatteryInfo::BatteryStatus))) == 0) { + static const QMetaMethod batteryCountChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryCountChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargerTypeChanged); + static const QMetaMethod chargingStateChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::chargingStateChanged); + static const QMetaMethod currentFlowChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::currentFlowChanged); + static const QMetaMethod remainingCapacityChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingCapacityChanged); + static const QMetaMethod remainingChargingTimeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::remainingChargingTimeChanged); + static const QMetaMethod voltageChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::voltageChanged); + static const QMetaMethod batteryStatusChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoPrivate::batteryStatusChanged); + if (signal == batteryCountChangedSignal) { + } else if (signal == currentFlowChangedSignal) { + } else if (signal == voltageChangedSignal) { + } else if (signal == remainingCapacityChangedSignal) { + } else if (signal == remainingChargingTimeChangedSignal) { + } else if (signal == chargerTypeChangedSignal) { + } else if (signal == chargingStateChangedSignal) { + } else if (signal == batteryStatusChangedSignal) { } } diff --git a/src/systeminfo/qbatteryinfo_win_p.h b/src/systeminfo/qbatteryinfo_win_p.h index 9bc5b650..51e5c8cf 100644 --- a/src/systeminfo/qbatteryinfo_win_p.h +++ b/src/systeminfo/qbatteryinfo_win_p.h @@ -89,8 +89,8 @@ Q_SIGNALS: void batteryStatusChanged(int battery, QBatteryInfo::BatteryStatus status); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QBatteryInfo * const q_ptr; diff --git a/src/systeminfo/qdeviceinfo.cpp b/src/systeminfo/qdeviceinfo.cpp index 669991c2..70d24009 100644 --- a/src/systeminfo/qdeviceinfo.cpp +++ b/src/systeminfo/qdeviceinfo.cpp @@ -69,6 +69,8 @@ public: QT_END_NAMESPACE #endif +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE /*! @@ -279,13 +281,16 @@ QString QDeviceInfo::version(QDeviceInfo::Version type) const return d_ptr->version(type); } +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + /*! \internal */ -void QDeviceInfo::connectNotify(const char *signal) +void QDeviceInfo::connectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(QT_SIMULATOR) - connect(d_ptr, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + connect(d_ptr, sourceSignal, this, signal, Qt::UniqueConnection); #else Q_UNUSED(signal) #endif @@ -294,14 +299,15 @@ void QDeviceInfo::connectNotify(const char *signal) /*! \internal */ -void QDeviceInfo::disconnectNotify(const char *signal) +void QDeviceInfo::disconnectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(QT_SIMULATOR) // We can only disconnect with the private implementation, when there is no receivers for the signal. - if (receivers(signal) > 0) + if (isSignalConnected(signal)) return; - disconnect(d_ptr, signal, this, signal); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + disconnect(d_ptr, sourceSignal, this, signal); #else Q_UNUSED(signal) #endif diff --git a/src/systeminfo/qdeviceinfo.h b/src/systeminfo/qdeviceinfo.h index c0dc68ef..b7a09bd3 100644 --- a/src/systeminfo/qdeviceinfo.h +++ b/src/systeminfo/qdeviceinfo.h @@ -131,8 +131,8 @@ Q_SIGNALS: void thermalStateChanged(QDeviceInfo::ThermalState state); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: Q_DISABLE_COPY(QDeviceInfo) diff --git a/src/systeminfo/qdeviceinfo_linux.cpp b/src/systeminfo/qdeviceinfo_linux.cpp index 1f603aed..00b63f3c 100644 --- a/src/systeminfo/qdeviceinfo_linux.cpp +++ b/src/systeminfo/qdeviceinfo_linux.cpp @@ -52,6 +52,7 @@ #include "qscreensaver_linux_p.h" #include <QtCore/qdir.h> +#include <QtCore/qmetaobject.h> #include <QtCore/qprocess.h> #include <QtCore/qtextstream.h> #include <QtCore/qtimer.h> @@ -396,14 +397,19 @@ QString QDeviceInfoPrivate::version(QDeviceInfo::Version type) return QString(); } -void QDeviceInfoPrivate::connectNotify(const char *signal) +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + +void QDeviceInfoPrivate::connectNotify(const QMetaMethod &signal) { #if !defined(QT_NO_JSONDB) - if (strcmp(signal, SIGNAL(activatedLocksChanged(QDeviceInfo::LockTypeFlags))) == 0 - || strcmp(signal, SIGNAL(enabledLocksChanged(QDeviceInfo::LockTypeFlags))) == 0) { + static const QMetaMethod activatedLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoPrivate::activatedLocksChanged); + static const QMetaMethod enabledLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoPrivate::enabledLocksChanged); + if (signal == activatedLocksChangedSignal + || signal == enabledLocksChangedSignal) { if (!jsondbWrapper) jsondbWrapper = new QJsonDbWrapper(this); - connect(jsondbWrapper, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, jsondbWrapper); + connect(jsondbWrapper, sourceSignal, this, signal, Qt::UniqueConnection); return; } #endif // // QT_NO_JSONDB @@ -417,24 +423,29 @@ void QDeviceInfoPrivate::connectNotify(const char *signal) if (!timer->isActive()) timer->start(); - if (strcmp(signal, SIGNAL(thermalStateChanged(QDeviceInfo::ThermalState))) == 0) { + static const QMetaMethod thermalStateChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoPrivate::thermalStateChanged); + if (signal == thermalStateChangedSignal) { watchThermalState = true; currentThermalState = getThermalState(); } } -void QDeviceInfoPrivate::disconnectNotify(const char *signal) +void QDeviceInfoPrivate::disconnectNotify(const QMetaMethod &signal) { #if !defined(QT_NO_JSONDB) - if ((strcmp(signal, SIGNAL(activatedLocksChanged(QDeviceInfo::LockTypeFlags))) == 0 - || strcmp(signal, SIGNAL(enabledLocksChanged(QDeviceInfo::LockTypeFlags))) == 0) + static const QMetaMethod activatedLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoPrivate::activatedLocksChanged); + static const QMetaMethod enabledLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoPrivate::enabledLocksChanged); + if ((signal == activatedLocksChangedSignal + || signal == enabledLocksChangedSignal) && jsondbWrapper) { - disconnect(jsondbWrapper, signal, this, signal); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, jsondbWrapper); + disconnect(jsondbWrapper, sourceSignal, this, signal); return; } #endif // QT_NO_JSONDB - if (strcmp(signal, SIGNAL(thermalStateChanged(QDeviceInfo::ThermalState))) == 0) { + static const QMetaMethod thermalStateChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoPrivate::thermalStateChanged); + if (signal == thermalStateChangedSignal) { watchThermalState = false; currentThermalState = QDeviceInfo::UnknownThermal; } diff --git a/src/systeminfo/qdeviceinfo_linux_p.h b/src/systeminfo/qdeviceinfo_linux_p.h index 97a776e5..c4f6c463 100644 --- a/src/systeminfo/qdeviceinfo_linux_p.h +++ b/src/systeminfo/qdeviceinfo_linux_p.h @@ -100,8 +100,8 @@ Q_SIGNALS: void thermalStateChanged(QDeviceInfo::ThermalState state); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private Q_SLOTS: void onTimeout(); diff --git a/src/systeminfo/qdeviceprofile.cpp b/src/systeminfo/qdeviceprofile.cpp index f2e82830..1b867c0e 100644 --- a/src/systeminfo/qdeviceprofile.cpp +++ b/src/systeminfo/qdeviceprofile.cpp @@ -58,6 +58,8 @@ public: QT_END_NAMESPACE #endif +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE /*! @@ -165,13 +167,16 @@ QDeviceProfile::ProfileType QDeviceProfile::currentProfileType() const return d_ptr->currentProfileType(); } +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + /*! \internal */ -void QDeviceProfile::connectNotify(const char *signal) +void QDeviceProfile::connectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(QT_SIMULATOR) - connect(d_ptr, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + connect(d_ptr, sourceSignal, this, signal, Qt::UniqueConnection); #else Q_UNUSED(signal) #endif @@ -180,14 +185,15 @@ void QDeviceProfile::connectNotify(const char *signal) /*! \internal */ -void QDeviceProfile::disconnectNotify(const char *signal) +void QDeviceProfile::disconnectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(QT_SIMULATOR) // We can only disconnect with the private implementation, when there is no receivers for the signal. - if (receivers(signal) > 0) + if (isSignalConnected(signal)) return; - disconnect(d_ptr, signal, this, signal); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + disconnect(d_ptr, sourceSignal, this, signal); #else Q_UNUSED(signal) #endif diff --git a/src/systeminfo/qdeviceprofile.h b/src/systeminfo/qdeviceprofile.h index 4c9ad312..a0640d3b 100644 --- a/src/systeminfo/qdeviceprofile.h +++ b/src/systeminfo/qdeviceprofile.h @@ -84,8 +84,8 @@ Q_SIGNALS: void currentProfileTypeChanged(QDeviceProfile::ProfileType profile); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: Q_DISABLE_COPY(QDeviceProfile) diff --git a/src/systeminfo/qdeviceprofile_linux.cpp b/src/systeminfo/qdeviceprofile_linux.cpp index 79b6af77..5dbcaa12 100644 --- a/src/systeminfo/qdeviceprofile_linux.cpp +++ b/src/systeminfo/qdeviceprofile_linux.cpp @@ -41,6 +41,8 @@ #include "qdeviceprofile_linux_p.h" +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE QDeviceProfilePrivate::QDeviceProfilePrivate(QDeviceProfile *parent) @@ -93,30 +95,42 @@ QDeviceProfile::ProfileType QDeviceProfilePrivate::currentProfileType() return QDeviceProfile::UnknownProfile; } -void QDeviceProfilePrivate::connectNotify(const char *signal) +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + +void QDeviceProfilePrivate::connectNotify(const QMetaMethod &signal) { #if !defined(QT_NO_JSONDB) - if (strcmp(signal, SIGNAL(vibrationActivatedChanged(bool))) == 0 - || strcmp(signal, SIGNAL(currentProfileTypeChanged(QDeviceProfile::ProfileType))) == 0) { - connect(&jsondbWrapper, signal, this, signal, Qt::UniqueConnection); - } else if (strcmp(signal, SIGNAL(messageRingtoneVolumeChanged(int))) == 0) { - connect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, signal, Qt::UniqueConnection); - } else if (strcmp(signal, SIGNAL(voiceRingtoneVolumeChanged(int))) == 0) { - connect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, signal, Qt::UniqueConnection); + static const QMetaMethod vibrationActivatedChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::vibrationActivatedChanged); + static const QMetaMethod messageRingtoneVolumeChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::messageRingtoneVolumeChanged); + static const QMetaMethod voiceRingtoneVolumeChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::voiceRingtoneVolumeChanged); + static const QMetaMethod currentProfileTypeChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::currentProfileTypeChanged); + if (signal == vibrationActivatedChangedSignal + || signal == currentProfileTypeChangedSignal) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, &jsondbWrapper); + connect(&jsondbWrapper, sourceSignal, this, signal, Qt::UniqueConnection); + } else if (signal == messageRingtoneVolumeChangedSignal) { + connect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, SIGNAL(messageRingtoneVolumeChangedSignal(int)), Qt::UniqueConnection); + } else if (signal == voiceRingtoneVolumeChangedSignal) { + connect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, SIGNAL(voiceRingtoneVolumeChangedSignal(int)), Qt::UniqueConnection); } #endif // // QT_NO_JSONDB } -void QDeviceProfilePrivate::disconnectNotify(const char *signal) +void QDeviceProfilePrivate::disconnectNotify(const QMetaMethod &signal) { #if !defined(QT_NO_JSONDB) - if (strcmp(signal, SIGNAL(vibrationActivatedChanged(bool))) == 0 - || strcmp(signal, SIGNAL(currentProfileTypeChanged(QDeviceProfile::ProfileType))) == 0) { - disconnect(&jsondbWrapper, signal, this, signal); - } else if (strcmp(signal, SIGNAL(messageRingtoneVolumeChanged(int))) == 0) { - disconnect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, signal); - } else if (strcmp(signal, SIGNAL(voiceRingtoneVolumeChanged(int))) == 0) { - disconnect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, signal); + static const QMetaMethod vibrationActivatedChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::vibrationActivatedChanged); + static const QMetaMethod messageRingtoneVolumeChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::messageRingtoneVolumeChanged); + static const QMetaMethod voiceRingtoneVolumeChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::voiceRingtoneVolumeChanged); + static const QMetaMethod currentProfileTypeChangedSignal = QMetaMethod::fromSignal(&QDeviceProfilePrivate::currentProfileTypeChanged); + if (signal == vibrationActivatedChangedSignal + || signal == currentProfileTypeChangedSignal) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, &jsondbWrapper); + disconnect(&jsondbWrapper, sourceSignal, this, signal); + } else if (signal == messageRingtoneVolumeChangedSignal) { + disconnect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, SIGNAL(messageRingtoneVolumeChangedSignal(int))); + } else if (signal == voiceRingtoneVolumeChangedSignal) { + disconnect(&jsondbWrapper, SIGNAL(ringtoneVolumeChanged(int)), this, SIGNAL(voiceRingtoneVolumeChangedSignal(int))); } #endif // QT_NO_JSONDB } diff --git a/src/systeminfo/qdeviceprofile_linux_p.h b/src/systeminfo/qdeviceprofile_linux_p.h index 8cbd0911..ab16ff4e 100644 --- a/src/systeminfo/qdeviceprofile_linux_p.h +++ b/src/systeminfo/qdeviceprofile_linux_p.h @@ -81,8 +81,8 @@ Q_SIGNALS: void currentProfileTypeChanged(QDeviceProfile::ProfileType profile); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QDeviceProfile * const q_ptr; diff --git a/src/systeminfo/qdisplayinfo.cpp b/src/systeminfo/qdisplayinfo.cpp index 56f8fcff..ce162d6d 100644 --- a/src/systeminfo/qdisplayinfo.cpp +++ b/src/systeminfo/qdisplayinfo.cpp @@ -41,6 +41,7 @@ #include <qdisplayinfo.h> +#include <QtCore/qmetaobject.h> #include <QtGui/qguiapplication.h> #include <QtGui/qscreen.h> #include <QtGui/qplatformscreen_qpa.h> @@ -210,13 +211,16 @@ int QDisplayInfo::physicalWidth(int screen) const return -1; } +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + /*! \internal */ -void QDisplayInfo::connectNotify(const char *signal) +void QDisplayInfo::connectNotify(const QMetaMethod &signal) { #if (defined(Q_OS_LINUX) || defined(QT_SIMULATOR)) && !defined(QT_NO_JSONDB) - connect(d_ptr, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + connect(d_ptr, sourceSignal, this, signal, Qt::UniqueConnection); #else Q_UNUSED(signal) #endif @@ -225,14 +229,15 @@ void QDisplayInfo::connectNotify(const char *signal) /*! \internal */ -void QDisplayInfo::disconnectNotify(const char *signal) +void QDisplayInfo::disconnectNotify(const QMetaMethod &signal) { #if (defined(Q_OS_LINUX) || defined(QT_SIMULATOR)) && !defined(QT_NO_JSONDB) // We can only disconnect with the private implementation, when there is no receivers for the signal. - if (receivers(signal) > 0) + if (isSignalConnected(signal)) return; - disconnect(d_ptr, signal, this, signal); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + disconnect(d_ptr, sourceSignal, this, signal); #else Q_UNUSED(signal) #endif diff --git a/src/systeminfo/qdisplayinfo.h b/src/systeminfo/qdisplayinfo.h index 0e806bb7..169e3924 100644 --- a/src/systeminfo/qdisplayinfo.h +++ b/src/systeminfo/qdisplayinfo.h @@ -81,8 +81,8 @@ Q_SIGNALS: void backlightStateChanged(int screen, QDisplayInfo::BacklightState state); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: Q_DISABLE_COPY(QDisplayInfo) diff --git a/src/systeminfo/qdisplayinfo_linux.cpp b/src/systeminfo/qdisplayinfo_linux.cpp index f4f9cccb..092cfef2 100644 --- a/src/systeminfo/qdisplayinfo_linux.cpp +++ b/src/systeminfo/qdisplayinfo_linux.cpp @@ -47,6 +47,7 @@ #include <QtCore/qdir.h> #include <QtCore/qmap.h> +#include <QtCore/qmetaobject.h> QT_BEGIN_NAMESPACE @@ -151,18 +152,20 @@ void QDisplayInfoPrivate::onBacklightStateChanged(int screen, QDisplayInfo::Back } } -void QDisplayInfoPrivate::connectNotify(const char *signal) +void QDisplayInfoPrivate::connectNotify(const QMetaMethod &signal) { - if (!backlightStateWatcher && strcmp(signal, SIGNAL(backlightStateChanged(int,QDisplayInfo::BacklightState))) == 0) { + static const QMetaMethod backlightStateChangedSignal = QMetaMethod::fromSignal(&QDisplayInfoPrivate::backlightStateChanged); + if (!backlightStateWatcher && signal == backlightStateChangedSignal) { backlightStateWatcher = true; if (backlightStates.size() == 0) backlightState(0); } } -void QDisplayInfoPrivate::disconnectNotify(const char *signal) +void QDisplayInfoPrivate::disconnectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(backlightStateChanged(int, QDisplayInfo::BacklightState))) == 0 && jsondbWrapper) { + static const QMetaMethod backlightStateChangedSignal = QMetaMethod::fromSignal(&QDisplayInfoPrivate::backlightStateChanged); + if (signal == backlightStateChangedSignal && jsondbWrapper) { backlightStateWatcher = false; } } diff --git a/src/systeminfo/qdisplayinfo_linux_p.h b/src/systeminfo/qdisplayinfo_linux_p.h index 2a44fe5d..e89e3fdf 100644 --- a/src/systeminfo/qdisplayinfo_linux_p.h +++ b/src/systeminfo/qdisplayinfo_linux_p.h @@ -84,8 +84,8 @@ private Q_SLOTS: void onBacklightStateChanged(int screen, QDisplayInfo::BacklightState state); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); #endif private: diff --git a/src/systeminfo/qjsondbwrapper.cpp b/src/systeminfo/qjsondbwrapper.cpp index 37c13bf9..9f299d73 100644 --- a/src/systeminfo/qjsondbwrapper.cpp +++ b/src/systeminfo/qjsondbwrapper.cpp @@ -42,6 +42,7 @@ #include "qjsondbwrapper_p.h" #include <QtCore/qeventloop.h> +#include <QtCore/qmetaobject.h> #include <QtCore/qtimer.h> #include <QtJsonDb/qjsondbreadrequest.h> #include <QtJsonDb/qjsondbwatcher.h> @@ -185,19 +186,26 @@ QJsonValue QJsonDbWrapper::getSystemSettingValue(const QString &settingId, const return QJsonValue(); } -void QJsonDbWrapper::connectNotify(const char *signal) +void QJsonDbWrapper::connectNotify(const QMetaMethod &signal) { + static const QMetaMethod activatedLocksChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::activatedLocksChanged); + static const QMetaMethod enabledLocksChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::enabledLocksChanged); + static const QMetaMethod vibrationActivatedChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::vibrationActivatedChanged); + static const QMetaMethod ringtoneVolumeChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::ringtoneVolumeChanged); + static const QMetaMethod currentProfileTypeChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::currentProfileTypeChanged); + static const QMetaMethod backlightStateChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::backlightStateChanged); + if (watchActivatedLocks && watchEnabledLocks && watchProfile && watchBacklightState) return; - bool needWatchActivatedLocks = (strcmp(signal, SIGNAL(activatedLocksChanged(QDeviceInfo::LockTypeFlags))) == 0); + bool needWatchActivatedLocks = (signal == activatedLocksChangedSignal); if (needWatchActivatedLocks) { if (watchActivatedLocks) return; activatedLocks = activatedLockTypes(); } - bool needWatchEnabledLocks = (strcmp(signal, SIGNAL(enabledLocksChanged(QDeviceInfo::LockTypeFlags))) == 0); + bool needWatchEnabledLocks = (signal == enabledLocksChangedSignal); if (needWatchEnabledLocks) { if (watchEnabledLocks) return; @@ -210,9 +218,9 @@ void QJsonDbWrapper::connectNotify(const char *signal) if (needWatchEnabledLocks) watchEnabledLocks = true; - bool needWatchProfiles = (strcmp(signal, SIGNAL(vibrationActivatedChanged(bool))) == 0 - || strcmp(signal, SIGNAL(ringtoneVolumeChanged(int))) == 0 - || strcmp(signal, SIGNAL(currentProfileTypeChanged(QDeviceProfile::ProfileType))) == 0); + bool needWatchProfiles = (signal == vibrationActivatedChangedSignal + || signal == ringtoneVolumeChangedSignal + || signal == currentProfileTypeChangedSignal); if (needWatchProfiles) { if (watchProfile) return; @@ -220,7 +228,7 @@ void QJsonDbWrapper::connectNotify(const char *signal) watchProfile = true; } - if (strcmp(signal, SIGNAL(backlightStateChanged(int,QDisplayInfo::BacklightState))) == 0) { + if (signal == backlightStateChangedSignal) { if (!backlightWatcher) { backlightWatcher = new QtJsonDb::QJsonDbWatcher(this); backlightWatcher->setPartition(QString(QStringLiteral("Ephemeral"))); @@ -233,16 +241,19 @@ void QJsonDbWrapper::connectNotify(const char *signal) } } -void QJsonDbWrapper::disconnectNotify(const char *signal) +void QJsonDbWrapper::disconnectNotify(const QMetaMethod &signal) { if (!watchActivatedLocks && !watchEnabledLocks && !watchBacklightState) return; - if (strcmp(signal, SIGNAL(activatedLocksChanged(QDeviceInfo::LockTypeFlags))) == 0) + static const QMetaMethod activatedLocksChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::activatedLocksChanged); + static const QMetaMethod enabledLocksChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::enabledLocksChanged); + static const QMetaMethod backlightStateChangedSignal = QMetaMethod::fromSignal(&QJsonDbWrapper::backlightStateChanged); + if (signal == activatedLocksChangedSignal) watchActivatedLocks = false; - else if (strcmp(signal, SIGNAL(enabledLocksChanged(QDeviceInfo::LockTypeFlags))) == 0) + else if (signal == enabledLocksChangedSignal) watchEnabledLocks = false; - else if (strcmp(signal, SIGNAL(backlightStateChanged(int, QDisplayInfo::BacklightState))) == 0) + else if (signal == backlightStateChangedSignal) watchBacklightState = false; if (!watchBacklightState) diff --git a/src/systeminfo/qjsondbwrapper_p.h b/src/systeminfo/qjsondbwrapper_p.h index 7eb2a89a..402f9d4f 100644 --- a/src/systeminfo/qjsondbwrapper_p.h +++ b/src/systeminfo/qjsondbwrapper_p.h @@ -91,8 +91,8 @@ Q_SIGNALS: void backlightStateChanged(int screen, QDisplayInfo::BacklightState state); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private Q_SLOTS: void onJsonDbConnectionError(QtJsonDb::QJsonDbConnection::ErrorCode error, const QString &message); diff --git a/src/systeminfo/qnetworkinfo.cpp b/src/systeminfo/qnetworkinfo.cpp index 13e3ccd6..2be0c693 100644 --- a/src/systeminfo/qnetworkinfo.cpp +++ b/src/systeminfo/qnetworkinfo.cpp @@ -75,6 +75,8 @@ public: QT_END_NAMESPACE #endif +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE /*! @@ -351,13 +353,16 @@ QString QNetworkInfo::networkName(QNetworkInfo::NetworkMode mode, int interface) return d_ptr->networkName(mode, interface); } +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + /*! \internal */ -void QNetworkInfo::connectNotify(const char *signal) +void QNetworkInfo::connectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) || defined(QT_SIMULATOR) - connect(d_ptr, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + connect(d_ptr, sourceSignal, this, signal, Qt::UniqueConnection); #else Q_UNUSED(signal) #endif @@ -366,14 +371,15 @@ void QNetworkInfo::connectNotify(const char *signal) /*! \internal */ -void QNetworkInfo::disconnectNotify(const char *signal) +void QNetworkInfo::disconnectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) || defined(QT_SIMULATOR) // We can only disconnect with the private implementation, when there is no receivers for the signal. - if (receivers(signal) > 0) + if (isSignalConnected(signal)) return; - disconnect(d_ptr, signal, this, signal); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + disconnect(d_ptr, sourceSignal, this, signal); #else Q_UNUSED(signal) #endif diff --git a/src/systeminfo/qnetworkinfo.h b/src/systeminfo/qnetworkinfo.h index e25bcb76..dd70667b 100644 --- a/src/systeminfo/qnetworkinfo.h +++ b/src/systeminfo/qnetworkinfo.h @@ -126,8 +126,8 @@ Q_SIGNALS: void networkStatusChanged(QNetworkInfo::NetworkMode mode, int interface, QNetworkInfo::NetworkStatus status); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: Q_DISABLE_COPY(QNetworkInfo) diff --git a/src/systeminfo/qnetworkinfo_linux.cpp b/src/systeminfo/qnetworkinfo_linux.cpp index 47073829..d88343c6 100644 --- a/src/systeminfo/qnetworkinfo_linux.cpp +++ b/src/systeminfo/qnetworkinfo_linux.cpp @@ -49,6 +49,7 @@ #include <QtCore/qdir.h> #include <QtCore/qfile.h> +#include <QtCore/qmetaobject.h> #include <QtCore/qtextstream.h> #include <QtCore/qtimer.h> #if !defined(QT_NO_BLUEZ) @@ -451,23 +452,35 @@ QString QNetworkInfoPrivate::networkName(QNetworkInfo::NetworkMode mode, int int return getNetworkName(mode, interface); } -void QNetworkInfoPrivate::connectNotify(const char *signal) +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + +void QNetworkInfoPrivate::connectNotify(const QMetaMethod &signal) { #if !defined(QT_NO_SFW_NETREG) if (!networkServiceWrapper) networkServiceWrapper = new QNetworkServiceWrapper(this); - connect(networkServiceWrapper, signal, this, signal, Qt::UniqueConnection); + { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, networkServiceWrapper); + connect(networkServiceWrapper, sourceSignal, this, signal, Qt::UniqueConnection); + } #elif !defined(QT_NO_OFONO) if (QOfonoWrapper::isOfonoAvailable()) { if (!ofonoWrapper) ofonoWrapper = new QOfonoWrapper(this); - connect(ofonoWrapper, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, ofonoWrapper); + connect(ofonoWrapper, sourceSignal, this, signal, Qt::UniqueConnection); } #endif -// we always monitor "networkInterfaceCount" , as long as users connect any signals, -// with update to date network interface counts, we can compute network mode, strength, -// status, name properties in an efficient way + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::currentNetworkModeChanged); + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkInterfaceCountChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkStatusChanged); + + // we always monitor "networkInterfaceCount" , as long as users connect any signals, + // with update to date network interface counts, we can compute network mode, strength, + // status, name properties in an efficient way if (!watchNetworkInterfaceCount) { QList<QNetworkInfo::NetworkMode> modes; modes << QNetworkInfo::WlanMode << QNetworkInfo::EthernetMode << QNetworkInfo::BluetoothMode; @@ -489,7 +502,7 @@ void QNetworkInfoPrivate::connectNotify(const char *signal) watchNetworkInterfaceCount = true; } - if (strcmp(signal, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode))) == 0) { + if (signal == currentNetworkModeChangedSignal) { // we monitor "networkStatus" by default, as long as currentNetworkModeChanged signal // is connected, with always up to date network status, current network mode can // be fast computed. @@ -506,9 +519,7 @@ void QNetworkInfoPrivate::connectNotify(const char *signal) } currentMode = getCurrentNetworkMode(); watchCurrentNetworkMode = true; - } - - if (strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))) == 0) { + } else if (signal == networkSignalStrengthChangedSignal) { QList<QNetworkInfo::NetworkMode> modes; modes << QNetworkInfo::WlanMode << QNetworkInfo::EthernetMode << QNetworkInfo::BluetoothMode; networkSignalStrengths.clear(); @@ -519,7 +530,7 @@ void QNetworkInfoPrivate::connectNotify(const char *signal) } watchNetworkSignalStrength = true; - } else if (strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))) == 0) { + } else if (signal == networkStatusChangedSignal) { QList<QNetworkInfo::NetworkMode> modes; modes << QNetworkInfo::WlanMode << QNetworkInfo::EthernetMode << QNetworkInfo::BluetoothMode; networkStatuses.clear(); @@ -530,7 +541,7 @@ void QNetworkInfoPrivate::connectNotify(const char *signal) } watchNetworkStatus = true; - } else if (strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString))) == 0) { + } else if (signal == networkNameChangedSignal) { QList<QNetworkInfo::NetworkMode> modes; modes << QNetworkInfo::WlanMode << QNetworkInfo::EthernetMode << QNetworkInfo::BluetoothMode; networkNames.clear(); @@ -541,7 +552,7 @@ void QNetworkInfoPrivate::connectNotify(const char *signal) } watchNetworkName = true; - } else if (strcmp(signal, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode))) == 0) { + } else if (signal == currentNetworkModeChangedSignal) { currentMode = getCurrentNetworkMode(); watchCurrentNetworkMode = true; } else { @@ -558,33 +569,44 @@ void QNetworkInfoPrivate::connectNotify(const char *signal) timer->start(); } -void QNetworkInfoPrivate::disconnectNotify(const char *signal) +void QNetworkInfoPrivate::disconnectNotify(const QMetaMethod &signal) { #if !defined(QT_NO_SFW_NETREG) - if (networkServiceWrapper) - disconnect(networkServiceWrapper, signal, this, signal); + if (networkServiceWrapper) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, networkServiceWrapper); + disconnect(networkServiceWrapper, sourceSignal, this, signal); + } #elif !defined(QT_NO_OFONO) if (!QOfonoWrapper::isOfonoAvailable() || !ofonoWrapper) return; - disconnect(ofonoWrapper, signal, this, signal); + { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, ofonoWrapper); + disconnect(ofonoWrapper, sourceSignal, this, signal); + } #endif - if (strcmp(signal, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))) == 0 - && !watchNetworkStatus && !watchNetworkName && !watchNetworkSignalStrength ) { + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::currentNetworkModeChanged); + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkInterfaceCountChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoPrivate::networkStatusChanged); + + if (signal == networkInterfaceCountChangedSignal + && !watchNetworkStatus && !watchNetworkName && !watchNetworkSignalStrength ) { #if !defined(QT_NO_UDEV) udevNotifier->setEnabled(false); watchNetworkInterfaceCount = false; return; #endif // QT_NO_UDEV watchNetworkInterfaceCount = false; - } else if (strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))) == 0) { + } else if (signal == networkSignalStrengthChangedSignal) { watchNetworkSignalStrength = false; - } else if (!watchCurrentNetworkMode && strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))) == 0) { + } else if ((!watchCurrentNetworkMode) && (signal == networkStatusChangedSignal)) { watchNetworkStatus = false; - } else if (strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString))) == 0) { + } else if (signal == networkNameChangedSignal) { watchNetworkName = false; - } else if (strcmp(signal, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode))) == 0) { + } else if (signal == currentNetworkModeChangedSignal) { watchCurrentNetworkMode = false; } else { return; diff --git a/src/systeminfo/qnetworkinfo_linux_p.h b/src/systeminfo/qnetworkinfo_linux_p.h index f36dbf3b..da207fb7 100644 --- a/src/systeminfo/qnetworkinfo_linux_p.h +++ b/src/systeminfo/qnetworkinfo_linux_p.h @@ -112,8 +112,8 @@ Q_SIGNALS: void networkStatusChanged(QNetworkInfo::NetworkMode mode, int interface, QNetworkInfo::NetworkStatus status); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private Q_SLOTS: #if !defined(QT_NO_UDEV) diff --git a/src/systeminfo/qnetworkinfo_win.cpp b/src/systeminfo/qnetworkinfo_win.cpp index 74d1e59d..5e032c0f 100644 --- a/src/systeminfo/qnetworkinfo_win.cpp +++ b/src/systeminfo/qnetworkinfo_win.cpp @@ -41,6 +41,8 @@ #include "qnetworkinfo_win_p.h" +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE QNetworkInfoPrivate::QNetworkInfoPrivate(QNetworkInfo *parent) @@ -268,12 +270,12 @@ QString QNetworkInfoPrivate::networkName(QNetworkInfo::NetworkMode mode, int int return QString(); } -void QNetworkInfoPrivate::connectNotify(const char *signal) +void QNetworkInfoPrivate::connectNotify(const QMetaMethod &signal) { Q_UNUSED(signal) } -void QNetworkInfoPrivate::disconnectNotify(const char *signal) +void QNetworkInfoPrivate::disconnectNotify(const QMetaMethod &signal) { Q_UNUSED(signal) } diff --git a/src/systeminfo/qnetworkinfo_win_p.h b/src/systeminfo/qnetworkinfo_win_p.h index 62e9a9bb..47adb695 100644 --- a/src/systeminfo/qnetworkinfo_win_p.h +++ b/src/systeminfo/qnetworkinfo_win_p.h @@ -95,8 +95,8 @@ Q_SIGNALS: void networkStatusChanged(QNetworkInfo::NetworkMode mode, int interface, QNetworkInfo::NetworkStatus status); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QNetworkInfo * const q_ptr; diff --git a/src/systeminfo/qnetworkservicewrapper.cpp b/src/systeminfo/qnetworkservicewrapper.cpp index 1a8a1e66..a1405e5a 100644 --- a/src/systeminfo/qnetworkservicewrapper.cpp +++ b/src/systeminfo/qnetworkservicewrapper.cpp @@ -44,6 +44,8 @@ #include <QServiceManager> #include <QServiceFilter> +#include <QMetaMethod> + #if !defined(QT_NO_SFW_NETREG) QT_BEGIN_NAMESPACE @@ -318,15 +320,26 @@ QNetworkInfo::NetworkMode QNetworkServiceWrapper::getCurrentNetworkMode(QNetwork return mode; } -void QNetworkServiceWrapper::connectNotify(const char *signal) +void QNetworkServiceWrapper::connectNotify(const QMetaMethod &signal) { QList<int> interfaceIndexes; interfaceIndexes = allNetworkManagerInterfaces.keys(); - if (strcmp(signal, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))) == 0 + static const QMetaMethod cellIdChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::cellIdChanged); + static const QMetaMethod currentCellDataTechnologyChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentCellDataTechnologyChanged); + static const QMetaMethod currentMobileCountryCodeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentMobileCountryCodeChanged); + static const QMetaMethod currentMobileNetworkCodeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentMobileNetworkCodeChanged); + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentNetworkModeChanged); + static const QMetaMethod locationAreaCodeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::locationAreaCodeChanged); + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkInterfaceCountChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkStatusChanged); + + if (signal == networkInterfaceCountChangedSignal && !watchInterfaceCount) { watchInterfaceCount = true; - } else if (strcmp(signal, SIGNAL(currentCellDataTechnologyChanged(int,QNetworkInfo::CellDataTechnology))) == 0 + } else if (signal == currentCellDataTechnologyChangedSignal && !watchTechnologies) { currentCellDataTechnologies.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -334,7 +347,7 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) connect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(technologyChanged(const QString&)), this, SLOT(onTechnologyChanged(const QString&))); } watchTechnologies = true; - } else if (strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int))) == 0 + } else if (signal == networkSignalStrengthChangedSignal && !watchSignalStrengths) { signalStrengths.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -348,7 +361,7 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) } watchNetworkModes = true; watchSignalStrengths = true; - } else if (strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))) == 0 + } else if (signal == networkStatusChangedSignal && !watchStatuses) { networkStatuses.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -362,7 +375,7 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) } watchNetworkModes = true; watchStatuses = true; - } else if (strcmp(signal, SIGNAL(currentMobileCountryCodeChanged(int,QString))) == 0 + } else if (signal == currentMobileCountryCodeChangedSignal && !watchCurrentMccs) { currentMccs.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -370,7 +383,7 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) connect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(mobileCountryCodeChanged(const QString&)), this, SLOT(onCurrentMccChanged(const QString&))); } watchCurrentMccs = true; - } else if (strcmp(signal, SIGNAL(currentMobileNetworkCodeChanged(int,QString))) == 0 + } else if (signal == currentMobileNetworkCodeChangedSignal && !watchCurrentMncs) { currentMncs.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -378,7 +391,7 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) connect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(mobileNetworkCodeChanged(const QString&)), this, SLOT(onCurrentMncChanged(const QString&))); } watchCurrentMncs = true; - } else if (strcmp(signal, SIGNAL(cellIdChanged(int,QString))) == 0 + } else if (signal == cellIdChangedSignal && !watchCellIds) { cellIds.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -386,7 +399,7 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) connect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(cellIdChanged(uint)), this, SLOT(onCellIdChanged(uint))); } watchCellIds = true; - } else if (strcmp(signal, SIGNAL(locationAreaCodeChanged(int,QString))) == 0 + } else if (signal == locationAreaCodeChangedSignal && !watchLacs) { lacs.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -394,7 +407,7 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) connect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(locationAreaCodeChanged(uint)), this, SLOT(onLocationAreaCodeChanged(uint))); } watchLacs = true; - } else if (strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString))) == 0 + } else if (signal == networkNameChangedSignal && !watchOperatorNames) { operatorNames.clear(); foreach (const int interfaceIndex, interfaceIndexes) { @@ -412,50 +425,61 @@ void QNetworkServiceWrapper::connectNotify(const char *signal) } -void QNetworkServiceWrapper::disconnectNotify(const char *signal) +void QNetworkServiceWrapper::disconnectNotify(const QMetaMethod &signal) { QList<int> interfaceIndexes; interfaceIndexes = allNetworkManagerInterfaces.keys(); - if (strcmp(signal, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))) == 0 + static const QMetaMethod cellIdChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::cellIdChanged); + static const QMetaMethod currentCellDataTechnologyChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentCellDataTechnologyChanged); + static const QMetaMethod currentMobileCountryCodeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentMobileCountryCodeChanged); + static const QMetaMethod currentMobileNetworkCodeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentMobileNetworkCodeChanged); + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::currentNetworkModeChanged); + static const QMetaMethod locationAreaCodeChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::locationAreaCodeChanged); + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkInterfaceCountChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QNetworkServiceWrapper::networkStatusChanged); + + if (signal == networkInterfaceCountChangedSignal && watchInterfaceCount) { watchInterfaceCount = false; - } else if (strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int))) == 0 + } else if (signal == networkSignalStrengthChangedSignal && watchSignalStrengths) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(signalBarsChanged(int)), this, SLOT(onSignalStrengthChanged(int))); watchSignalStrengths = false; - } else if (strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))) == 0 + } else if (signal == networkStatusChangedSignal && watchStatuses) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(registrationStatusChanged(const QString&)), this, SLOT(onNetworkStatusChanged(const QString&))); watchStatuses = false; - } else if (strcmp(signal, SIGNAL(currentMobileCountryCodeChanged(int,QString))) == 0 + } else if (signal == currentMobileCountryCodeChangedSignal && watchCurrentMccs) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(mobileCountryCodeChanged(const QString&)), this, SLOT(onCurrentMccChanged(const QString&))); watchCurrentMccs = false; - } else if (strcmp(signal, SIGNAL(currentMobileNetworkCodeChanged(int,QString))) == 0 + } else if (signal == currentMobileNetworkCodeChangedSignal && watchCurrentMncs) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(mobileNetworkCodeChanged(const QString&)), this, SLOT(onCurrentMncChanged(const QString&))); watchCurrentMncs = false; - } else if (strcmp(signal, SIGNAL(cellIdChanged(int,QString))) == 0 + } else if (signal == cellIdChangedSignal && watchCellIds) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(cellIdChanged(uint)), this, SLOT(onCellIdChanged(uint))); watchCellIds = false; - } else if (strcmp(signal, SIGNAL(locationAreaCodeChanged(int,QString))) == 0 + } else if (signal == locationAreaCodeChangedSignal && watchLacs) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(locationAreaCodeChanged(uint)), this, SLOT(onLocationAreaCodeChanged(uint))); watchLacs = false; - } else if (strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString))) == 0 + } else if (signal == networkNameChangedSignal && watchOperatorNames) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(providerNameChanged(const QString&)), this, SLOT(onOperatorNameChanged(const QString&))); watchOperatorNames = false; - } else if (strcmp(signal, SIGNAL(currentCellDataTechnologyChanged(int,QNetworkInfo::CellDataTechnology))) == 0 + } else if (signal == currentCellDataTechnologyChangedSignal && watchTechnologies) { foreach (const int interfaceIndex, interfaceIndexes) disconnect(loadedNetworkManagerInterfaces.value(interfaceIndex), SIGNAL(technologyChanged(const QString&)), this, SLOT(onTechnologyChanged(const QString&))); diff --git a/src/systeminfo/qnetworkservicewrapper_p.h b/src/systeminfo/qnetworkservicewrapper_p.h index da88d045..dee178f9 100644 --- a/src/systeminfo/qnetworkservicewrapper_p.h +++ b/src/systeminfo/qnetworkservicewrapper_p.h @@ -101,8 +101,8 @@ Q_SIGNALS: void networkStatusChanged(QNetworkInfo::NetworkMode mode, int interface, QNetworkInfo::NetworkStatus status); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private Q_SLOTS: void onServiceAdded(const QString &serviceName, QService::Scope scope); diff --git a/src/systeminfo/qofonowrapper.cpp b/src/systeminfo/qofonowrapper.cpp index 48786a8c..51616530 100644 --- a/src/systeminfo/qofonowrapper.cpp +++ b/src/systeminfo/qofonowrapper.cpp @@ -41,6 +41,7 @@ #include "qofonowrapper_p.h" +#include <QtCore/qmetaobject.h> #include <QtDBus/qdbusconnection.h> #include <QtDBus/qdbusconnectioninterface.h> #include <QtDBus/qdbusmetatype.h> @@ -239,9 +240,20 @@ QString QOfonoWrapper::imei(const QString &modemPath) return reply.value().value(QString(QStringLiteral("Serial"))).toString(); } -void QOfonoWrapper::connectNotify(const char *signal) +void QOfonoWrapper::connectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))) == 0) { + static const QMetaMethod cellIdChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::cellIdChanged); + static const QMetaMethod currentCellDataTechnologyChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentCellDataTechnologyChanged); + static const QMetaMethod currentMobileCountryCodeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentMobileCountryCodeChanged); + static const QMetaMethod currentMobileNetworkCodeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentMobileNetworkCodeChanged); + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentNetworkModeChanged); + static const QMetaMethod locationAreaCodeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::locationAreaCodeChanged); + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkInterfaceCountChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkStatusChanged); + + if (signal == networkInterfaceCountChangedSignal) { allModemPaths = getAllModems(); QDBusConnection::systemBus().connect(*OFONO_SERVICE(), *OFONO_MANAGER_PATH(), *OFONO_MANAGER_INTERFACE(), QString(QStringLiteral("ModemAdded")), @@ -250,14 +262,14 @@ void QOfonoWrapper::connectNotify(const char *signal) QString(QStringLiteral("ModemRemoved")), this, SLOT(onOfonoModemRemoved(QDBusObjectPath))); watchAllModems = true; - } else if (strcmp(signal, SIGNAL(currentMobileCountryCodeChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(currentMobileNetworkCodeChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(cellIdChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(currentCellDataTechnologyChanged(int,QNetworkInfo::CellDataTechnology))) == 0 - || strcmp(signal, SIGNAL(locationAreaCodeChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,QString))) == 0 - || strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int))) == 0 - || strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,QNetworkInfo::NetworkStatus))) == 0) { + } else if (signal == currentMobileCountryCodeChangedSignal + || signal == currentMobileNetworkCodeChangedSignal + || signal == cellIdChangedSignal + || signal == currentCellDataTechnologyChangedSignal + || signal == locationAreaCodeChangedSignal + || signal == networkNameChangedSignal + || signal == networkSignalStrengthChangedSignal + || signal == networkStatusChangedSignal) { signalStrengths.clear(); currentCellDataTechnologies.clear(); networkStatuses.clear(); @@ -286,9 +298,20 @@ void QOfonoWrapper::connectNotify(const char *signal) } } -void QOfonoWrapper::disconnectNotify(const char *signal) +void QOfonoWrapper::disconnectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))) == 0) { + static const QMetaMethod cellIdChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::cellIdChanged); + static const QMetaMethod currentCellDataTechnologyChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentCellDataTechnologyChanged); + static const QMetaMethod currentMobileCountryCodeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentMobileCountryCodeChanged); + static const QMetaMethod currentMobileNetworkCodeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentMobileNetworkCodeChanged); + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::currentNetworkModeChanged); + static const QMetaMethod locationAreaCodeChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::locationAreaCodeChanged); + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkInterfaceCountChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QOfonoWrapper::networkStatusChanged); + + if (signal == networkInterfaceCountChangedSignal) { QDBusConnection::systemBus().disconnect(*OFONO_SERVICE(), *OFONO_MANAGER_PATH(), *OFONO_MANAGER_INTERFACE(), QString(QStringLiteral("ModemAdded")), this, SLOT(onOfonoModemAdded(QDBusObjectPath))); @@ -296,14 +319,14 @@ void QOfonoWrapper::disconnectNotify(const char *signal) QString(QStringLiteral("ModemRemoved")), this, SLOT(onOfonoModemRemoved(QDBusObjectPath))); watchAllModems = false; - } else if (strcmp(signal, SIGNAL(currentMobileCountryCodeChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(currentMobileNetworkCodeChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(cellIdChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(currentCellDataTechnologyChanged(int,QNetworkInfo::CellDataTechnology))) == 0 - || strcmp(signal, SIGNAL(locationAreaCodeChanged(int,QString))) == 0 - || strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,QString))) == 0 - || strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int))) == 0 - || strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,QNetworkInfo::NetworkStatus))) == 0) { + } else if (signal == currentMobileCountryCodeChanged + || signal == currentMobileNetworkCodeChangedSignal + || signal == cellIdChangedSignal + || signal == currentCellDataTechnologyChangedSignal + || signal == locationAreaCodeChangedSignal + || signal == networkNameChangedSignal + || signal == networkSignalStrengthChangedSignal + || signal == networkStatusChangedSignal) { QStringList modems = allModems(); foreach (const QString &modem, modems) { QDBusConnection::systemBus().disconnect(*OFONO_SERVICE(), diff --git a/src/systeminfo/qofonowrapper_p.h b/src/systeminfo/qofonowrapper_p.h index 5d7acb7b..1445209c 100644 --- a/src/systeminfo/qofonowrapper_p.h +++ b/src/systeminfo/qofonowrapper_p.h @@ -110,8 +110,8 @@ Q_SIGNALS: void networkStatusChanged(QNetworkInfo::NetworkMode mode, int interface, QNetworkInfo::NetworkStatus status); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private Q_SLOTS: void onOfonoModemAdded(const QDBusObjectPath &path); diff --git a/src/systeminfo/qstorageinfo.cpp b/src/systeminfo/qstorageinfo.cpp index b63205fc..ca3f3af5 100644 --- a/src/systeminfo/qstorageinfo.cpp +++ b/src/systeminfo/qstorageinfo.cpp @@ -63,6 +63,8 @@ public: QT_END_NAMESPACE #endif +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE /*! @@ -153,13 +155,16 @@ QStorageInfo::DriveType QStorageInfo::driveType(const QString &drive) const return d_ptr->driveType(drive); } +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + /*! \internal */ -void QStorageInfo::connectNotify(const char *signal) +void QStorageInfo::connectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) - connect(d_ptr, signal, this, signal, Qt::UniqueConnection); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + connect(d_ptr, sourceSignal, this, signal, Qt::UniqueConnection); #else Q_UNUSED(signal) #endif @@ -168,14 +173,15 @@ void QStorageInfo::connectNotify(const char *signal) /*! \internal */ -void QStorageInfo::disconnectNotify(const char *signal) +void QStorageInfo::disconnectNotify(const QMetaMethod &signal) { #if defined(Q_OS_LINUX) || defined(Q_OS_WIN) // We can only disconnect with the private implementation, when there is no receivers for the signal. - if (receivers(signal) > 0) + if (isSignalConnected(signal)) return; - disconnect(d_ptr, signal, this, signal); + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + disconnect(d_ptr, sourceSignal, this, signal); #else Q_UNUSED(signal) #endif diff --git a/src/systeminfo/qstorageinfo.h b/src/systeminfo/qstorageinfo.h index 2243a22a..41e47772 100644 --- a/src/systeminfo/qstorageinfo.h +++ b/src/systeminfo/qstorageinfo.h @@ -83,8 +83,8 @@ Q_SIGNALS: void logicalDriveChanged(const QString &drive, bool added); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: Q_DISABLE_COPY(QStorageInfo) diff --git a/src/systeminfo/qstorageinfo_linux.cpp b/src/systeminfo/qstorageinfo_linux.cpp index d9af1dd0..b771d6e6 100644 --- a/src/systeminfo/qstorageinfo_linux.cpp +++ b/src/systeminfo/qstorageinfo_linux.cpp @@ -43,6 +43,7 @@ #include <QtCore/qfile.h> #include <QtCore/qdir.h> +#include <QtCore/qmetaobject.h> #include <QtCore/qsocketnotifier.h> #include <errno.h> @@ -277,15 +278,17 @@ QStorageInfo::DriveType QStorageInfoPrivate::driveType(const QString &drive) return type; } -void QStorageInfoPrivate::connectNotify(const char *signal) +void QStorageInfoPrivate::connectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(logicalDriveChanged(QString,bool))) == 0) + static const QMetaMethod logicalDriveChangedSignal = QMetaMethod::fromSignal(&QStorageInfoPrivate::logicalDriveChanged); + if (signal == logicalDriveChangedSignal) setupWatcher(); } -void QStorageInfoPrivate::disconnectNotify(const char *signal) +void QStorageInfoPrivate::disconnectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(logicalDriveChanged(QString,bool))) == 0) + static const QMetaMethod logicalDriveChangedSignal = QMetaMethod::fromSignal(&QStorageInfoPrivate::logicalDriveChanged); + if (signal == logicalDriveChangedSignal) cleanupWatcher(); } diff --git a/src/systeminfo/qstorageinfo_linux_p.h b/src/systeminfo/qstorageinfo_linux_p.h index 8b3c2134..3124482a 100644 --- a/src/systeminfo/qstorageinfo_linux_p.h +++ b/src/systeminfo/qstorageinfo_linux_p.h @@ -81,8 +81,8 @@ Q_SIGNALS: void logicalDriveChanged(const QString &drive, bool added); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QStorageInfo * const q_ptr; diff --git a/src/systeminfo/qstorageinfo_win.cpp b/src/systeminfo/qstorageinfo_win.cpp index 58cde52f..9cfd3326 100644 --- a/src/systeminfo/qstorageinfo_win.cpp +++ b/src/systeminfo/qstorageinfo_win.cpp @@ -42,6 +42,7 @@ #include "qstorageinfo_win_p.h" #include <QtCore/qdir.h> +#include <QtCore/qmetaobject.h> #include <windows.h> @@ -111,15 +112,17 @@ QStorageInfo::DriveType QStorageInfoPrivate::driveType(const QString &drive) }; } -void QStorageInfoPrivate::connectNotify(const char *signal) +void QStorageInfoPrivate::connectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(logicalDriveChanged(QString,bool))) == 0) { + static const QMetaMethod logicalDriveChangedSignal = QMetaMethod::fromSignal(&QStorageInfoPrivate::logicalDriveChanged); + if (signal == logicalDriveChangedSignal) { } } -void QStorageInfoPrivate::disconnectNotify(const char *signal) +void QStorageInfoPrivate::disconnectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(logicalDriveChanged(QString,bool))) == 0) { + static const QMetaMethod logicalDriveChangedSignal = QMetaMethod::fromSignal(&QStorageInfoPrivate::logicalDriveChanged); + if (signal == logicalDriveChangedSignal) { } } diff --git a/src/systeminfo/qstorageinfo_win_p.h b/src/systeminfo/qstorageinfo_win_p.h index 13eda974..757b3ad8 100644 --- a/src/systeminfo/qstorageinfo_win_p.h +++ b/src/systeminfo/qstorageinfo_win_p.h @@ -77,8 +77,8 @@ Q_SIGNALS: void logicalDriveChanged(const QString &drive, bool added); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QStorageInfo * const q_ptr; diff --git a/src/systeminfo/qsysteminfo_simulator.cpp b/src/systeminfo/qsysteminfo_simulator.cpp index 165193d6..96746a26 100644 --- a/src/systeminfo/qsysteminfo_simulator.cpp +++ b/src/systeminfo/qsysteminfo_simulator.cpp @@ -51,6 +51,8 @@ # include "qnetworkinfo_linux_p.h" #endif +#include <QtCore/qmetaobject.h> + QT_BEGIN_NAMESPACE // QBatteryInfoSimulator @@ -147,31 +149,53 @@ QBatteryInfo::BatteryStatus QBatteryInfoSimulator::batteryStatus(int battery) return QBatteryInfo::BatteryStatusUnknown; } -void QBatteryInfoSimulator::connectNotify(const char *signal) -{ - if (batteryInfoSimulatorBackend && (strcmp(signal, SIGNAL(batteryCountChanged(int))) == 0 - || strcmp(signal, SIGNAL(currentFlowChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(voltageChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(remainingCapacityChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(remainingChargingTimeChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0 - || strcmp(signal, SIGNAL(chargingStateChanged(int,QBatteryInfo::ChargingState))) == 0 - || strcmp(signal, SIGNAL(batteryStatusChanged(int,QBatteryInfo::BatteryStatus))) == 0)) { - connect(batteryInfoSimulatorBackend, signal, this, signal); +extern QMetaMethod proxyToSourceSignal(const QMetaMethod &, QObject *); + +void QBatteryInfoSimulator::connectNotify(const QMetaMethod &signal) +{ + static const QMetaMethod batteryCountChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::batteryCountChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::chargerTypeChanged); + static const QMetaMethod chargingStateChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::chargingStateChanged); + static const QMetaMethod currentFlowChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::currentFlowChanged); + static const QMetaMethod remainingCapacityChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::remainingCapacityChanged); + static const QMetaMethod remainingChargingTimeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::remainingChargingTimeChanged); + static const QMetaMethod voltageChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::voltageChanged); + static const QMetaMethod batteryStatusChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::batteryStatusChanged); + + if (batteryInfoSimulatorBackend && (signal == batteryCountChangedSignal + || signal == currentFlowChangedSignal + || signal == voltageChangedSignal + || signal == remainingCapacityChangedSignal + || signal == remainingChargingTimeChangedSignal + || signal == chargerTypeChangedSignal + || signal == chargingStateChangedSignal + || signal == batteryStatusChangedSignal)) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, batteryInfoSimulatorBackend); + connect(batteryInfoSimulatorBackend, sourceSignal, this, signal); } } -void QBatteryInfoSimulator::disconnectNotify(const char *signal) -{ - if (batteryInfoSimulatorBackend && (strcmp(signal, SIGNAL(batteryCountChanged(int))) == 0 - || strcmp(signal, SIGNAL(currentFlowChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(voltageChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(remainingCapacityChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(remainingChargingTimeChanged(int,int))) == 0 - || strcmp(signal, SIGNAL(chargerTypeChanged(QBatteryInfo::ChargerType))) == 0 - || strcmp(signal, SIGNAL(chargingStateChanged(int,QBatteryInfo::ChargingState))) == 0 - || strcmp(signal, SIGNAL(batteryStatusChanged(int,QBatteryInfo::BatteryStatus))) == 0)) { - disconnect(batteryInfoSimulatorBackend, signal, this, signal); +void QBatteryInfoSimulator::disconnectNotify(const QMetaMethod &signal) +{ + static const QMetaMethod batteryCountChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::batteryCountChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::chargerTypeChanged); + static const QMetaMethod chargingStateChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::chargingStateChanged); + static const QMetaMethod currentFlowChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::currentFlowChanged); + static const QMetaMethod remainingCapacityChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::remainingCapacityChanged); + static const QMetaMethod remainingChargingTimeChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::remainingChargingTimeChanged); + static const QMetaMethod voltageChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::voltageChanged); + static const QMetaMethod batteryStatusChangedSignal = QMetaMethod::fromSignal(&QBatteryInfoSimulator::batteryStatusChanged); + + if (batteryInfoSimulatorBackend && (signal == batteryCountChangedSignal + || signal == currentFlowChangedSignal + || signal == voltageChangedSignal + || signal == remainingCapacityChangedSignal + || signal == remainingChargingTimeChangedSignal + || signal == chargerTypeChangedSignal + || signal == chargingStateChangedSignal + || signal == batteryStatusChangedSignal)) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, batteryInfoSimulatorBackend); + disconnect(batteryInfoSimulatorBackend, sourceSignal, this, signal); } } @@ -302,42 +326,62 @@ QString QDeviceInfoSimulator::version(QDeviceInfo::Version type) return QString(); } -void QDeviceInfoSimulator::connectNotify(const char *signal) +void QDeviceInfoSimulator::connectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(activatedLocksChanged(QDeviceInfo::LockTypeFlags))) == 0 - || strcmp(signal, SIGNAL(enabledLocksChanged(QDeviceInfo::LockTypeFlags))) == 0) { + static const QMetaMethod activatedLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoSimulator::activatedLocksChanged); + static const QMetaMethod enabledLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoSimulator::enabledLocksChanged); + static const QMetaMethod thermalStateChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoSimulator::thermalStateChanged); + + if (signal == activatedLocksChangedSignal + || signal == enabledLocksChangedSignal) { #if defined(Q_OS_LINUX) && !defined(QT_NO_JSONDB) - if (d_ptr) - connect(d_ptr, signal, this, signal, Qt::UniqueConnection); + if (d_ptr) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + connect(d_ptr, sourceSignal, this, signal, Qt::UniqueConnection); + } return; #else - if (deviceInfoSimulatorBackend) - connect(deviceInfoSimulatorBackend, signal, this, signal); + if (deviceInfoSimulatorBackend) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, deviceInfoSimulatorBackend); + connect(deviceInfoSimulatorBackend, sourceSignal, this, signal); + } return; #endif } - if (deviceInfoSimulatorBackend && strcmp(signal, SIGNAL(thermalStateChanged(QDeviceInfo::ThermalState state))) == 0) - connect(deviceInfoSimulatorBackend, signal, this, signal); + if (deviceInfoSimulatorBackend && signal == thermalStateChangedSignal) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, deviceInfoSimulatorBackend); + connect(deviceInfoSimulatorBackend, sourceSignal, this, signal); + } } -void QDeviceInfoSimulator::disconnectNotify(const char *signal) +void QDeviceInfoSimulator::disconnectNotify(const QMetaMethod &signal) { - if (strcmp(signal, SIGNAL(activatedLocksChanged(QDeviceInfo::LockTypeFlags))) == 0 - || strcmp(signal, SIGNAL(enabledLocksChanged(QDeviceInfo::LockTypeFlags))) == 0) { + static const QMetaMethod activatedLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoSimulator::activatedLocksChanged); + static const QMetaMethod enabledLocksChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoSimulator::enabledLocksChanged); + static const QMetaMethod thermalStateChangedSignal = QMetaMethod::fromSignal(&QDeviceInfoSimulator::thermalStateChanged); + + if (signal == activatedLocksChangedSignal + || signal == enabledLocksChangedSignal) { #if defined(Q_OS_LINUX) && !defined(QT_NO_JSONDB) - if (d_ptr) - disconnect(d_ptr, signal, this, signal); + if (d_ptr) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, d_ptr); + disconnect(d_ptr, sourceSignal, this, signal); + } return; #else - if (deviceInfoSimulatorBackend) - disconnect(deviceInfoSimulatorBackend, signal, this, signal); + if (deviceInfoSimulatorBackend) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, deviceInfoSimulatorBackend); + disconnect(deviceInfoSimulatorBackend, sourceSignal, this, signal); + } return; #endif } - if (deviceInfoSimulatorBackend && strcmp(signal, SIGNAL(thermalStateChanged(QDeviceInfo::ThermalState state))) == 0) - disconnect(deviceInfoSimulatorBackend, signal, this, signal); + if (deviceInfoSimulatorBackend && signal == thermalStateChangedSignal) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, deviceInfoSimulatorBackend); + disconnect(deviceInfoSimulatorBackend, sourceSignal, this, signal); + } } // QNetworkInfoSimulator @@ -579,82 +623,98 @@ QString QNetworkInfoSimulator::networkName(QNetworkInfo::NetworkMode mode, int i return QString(); } -void QNetworkInfoSimulator::connectNotify(const char *signal) +void QNetworkInfoSimulator::connectNotify(const QMetaMethod &signal) { + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkInterfaceCountChanged); + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::currentNetworkModeChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkStatusChanged); + #if !defined(QT_NO_SFW_NETREG) || !defined(QT_NO_OFONO) - if (strcmp(signal, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))) == 0) { + if (signal == networkInterfaceCountChangedSignal) { if (networkInfoSimulatorBackend) - connect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), Qt::UniqueConnection); + connect(networkInfoSimulatorBackend, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), Qt::UniqueConnection); if (d_ptr) - connect(d_ptr, signal, this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), Qt::UniqueConnection); + connect(d_ptr, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), Qt::UniqueConnection); return; - } else if (strcmp(signal, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode))) == 0) { + } else if (signal == currentNetworkModeChangedSignal) { if (networkInfoSimulatorBackend) - connect(networkInfoSimulatorBackend, signal, this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode)), Qt::UniqueConnection); + connect(networkInfoSimulatorBackend, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode)), this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode)), Qt::UniqueConnection); if (d_ptr) - connect(d_ptr, signal, this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode)), Qt::UniqueConnection); + connect(d_ptr, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode)), this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode)), Qt::UniqueConnection); return; - } else if (strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString))) == 0) { + } else if (signal == networkNameChangedSignal) { if (networkInfoSimulatorBackend) - connect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString)), Qt::UniqueConnection); + connect(networkInfoSimulatorBackend, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString)), this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString)), Qt::UniqueConnection); if (d_ptr) - connect(d_ptr, signal, this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString)), Qt::UniqueConnection); + connect(d_ptr, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString)), this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString)), Qt::UniqueConnection); return; - } else if (strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))) == 0) { + } else if (signal == networkSignalStrengthChangedSignal) { if (networkInfoSimulatorBackend) - connect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), Qt::UniqueConnection); + connect(networkInfoSimulatorBackend, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), Qt::UniqueConnection); if (d_ptr) - connect(d_ptr, signal, this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), Qt::UniqueConnection); + connect(d_ptr, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), Qt::UniqueConnection); return; - } else if (strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))) == 0) { + } else if (signal == networkStatusChangedSignal) { if (networkInfoSimulatorBackend) - connect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), Qt::UniqueConnection); + connect(networkInfoSimulatorBackend, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), Qt::UniqueConnection); if (d_ptr) - connect(d_ptr, signal, this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), Qt::UniqueConnection); + connect(d_ptr, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), Qt::UniqueConnection); return; } #endif - if (networkInfoSimulatorBackend) - connect(networkInfoSimulatorBackend, signal, this, signal, Qt::UniqueConnection); + if (networkInfoSimulatorBackend) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, networkInfoSimulatorBackend); + connect(networkInfoSimulatorBackend, sourceSignal, this, signal, Qt::UniqueConnection); + } } -void QNetworkInfoSimulator::disconnectNotify(const char *signal) +void QNetworkInfoSimulator::disconnectNotify(const QMetaMethod &signal) { + static const QMetaMethod networkInterfaceCountChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkInterfaceCountChanged); + static const QMetaMethod currentNetworkModeChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::currentNetworkModeChanged); + static const QMetaMethod networkNameChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkNameChanged); + static const QMetaMethod networkSignalStrengthChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkSignalStrengthChanged); + static const QMetaMethod networkStatusChangedSignal = QMetaMethod::fromSignal(&QNetworkInfoSimulator::networkStatusChanged); + #if !defined(QT_NO_SFW_NETREG) || !defined(QT_NO_OFONO) - if (strcmp(signal, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))) == 0) { + if (signal == networkInterfaceCountChangedSignal) { if (networkInfoSimulatorBackend) - disconnect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))); + disconnect(networkInfoSimulatorBackend, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))); if (d_ptr) - disconnect(d_ptr, signal, this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))); + disconnect(d_ptr, SIGNAL(networkInterfaceCountChanged(QNetworkInfo::NetworkMode,int)), this, SLOT(onNetworkInterfaceCountChanged(QNetworkInfo::NetworkMode,int))); return; - } else if (strcmp(signal, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode))) == 0) { + } else if (signal == currentNetworkModeChangedSignal) { if (networkInfoSimulatorBackend) - disconnect(networkInfoSimulatorBackend, signal, this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode))); + disconnect(networkInfoSimulatorBackend, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode)), this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode))); if (d_ptr) - disconnect(d_ptr, signal, this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode))); + disconnect(d_ptr, SIGNAL(currentNetworkModeChanged(QNetworkInfo::NetworkMode)), this, SLOT(onCurrentNetworkModeChanged(QNetworkInfo::NetworkMode))); return; - } else if (strcmp(signal, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString))) == 0) { + } else if (signal == networkNameChangedSignal) { if (networkInfoSimulatorBackend) - disconnect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString))); + disconnect(networkInfoSimulatorBackend, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString)), this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString))); if (d_ptr) - disconnect(d_ptr, signal, this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString))); + disconnect(d_ptr, SIGNAL(networkNameChanged(QNetworkInfo::NetworkMode,int,QString)), this, SLOT(onNetworkNameChanged(QNetworkInfo::NetworkMode,int,QString))); return; - } else if (strcmp(signal, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))) == 0) { + } else if (signal == networkSignalStrengthChangedSignal) { if (networkInfoSimulatorBackend) - disconnect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))); + disconnect(networkInfoSimulatorBackend, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))); if (d_ptr) - disconnect(d_ptr, signal, this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))); + disconnect(d_ptr, SIGNAL(networkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int)), this, SLOT(onNetworkSignalStrengthChanged(QNetworkInfo::NetworkMode,int,int))); return; - } else if (strcmp(signal, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))) == 0) { + } else if (signal == networkStatusChangedSignal) { if (networkInfoSimulatorBackend) - disconnect(networkInfoSimulatorBackend, signal, this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))); + disconnect(networkInfoSimulatorBackend, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))); if (d_ptr) - disconnect(d_ptr, signal, this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))); + disconnect(d_ptr, SIGNAL(networkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus)), this, SLOT(onNetworkStatusChanged(QNetworkInfo::NetworkMode,int,QNetworkInfo::NetworkStatus))); return; } #endif - if (networkInfoSimulatorBackend) - disconnect(networkInfoSimulatorBackend, signal, this, signal); + if (networkInfoSimulatorBackend) { + QMetaMethod sourceSignal = proxyToSourceSignal(signal, networkInfoSimulatorBackend); + disconnect(networkInfoSimulatorBackend, sourceSignal, this, signal); + } } #if !defined(QT_NO_SFW_NETREG) || !defined(QT_NO_OFONO) diff --git a/src/systeminfo/qsysteminfo_simulator_p.h b/src/systeminfo/qsysteminfo_simulator_p.h index 11ee1b4b..305c2723 100644 --- a/src/systeminfo/qsysteminfo_simulator_p.h +++ b/src/systeminfo/qsysteminfo_simulator_p.h @@ -102,8 +102,8 @@ Q_SIGNALS: void batteryStatusChanged(int battery, QBatteryInfo::BatteryStatus); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QBatteryInfo * const q_ptr; @@ -138,8 +138,8 @@ Q_SIGNALS: void thermalStateChanged(QDeviceInfo::ThermalState state); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QDeviceInfo * const q_ptr; @@ -192,8 +192,8 @@ Q_SIGNALS: void networkStatusChanged(QNetworkInfo::NetworkMode mode, int interface, QNetworkInfo::NetworkStatus status); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: QNetworkInfo * const q_ptr; diff --git a/src/systeminfo/qudevwrapper.cpp b/src/systeminfo/qudevwrapper.cpp index 977e6ad2..28b15162 100644 --- a/src/systeminfo/qudevwrapper.cpp +++ b/src/systeminfo/qudevwrapper.cpp @@ -41,6 +41,7 @@ #include "qudevwrapper_p.h" +#include <QMetaMethod> #include <QSocketNotifier> #include <poll.h> @@ -103,20 +104,28 @@ bool QUDevWrapper::removeAllUDevWatcher() return false; } -void QUDevWrapper::connectNotify(const char *signal) +void QUDevWrapper::connectNotify(const QMetaMethod &signal) { - if (!watchDrives && strcmp(signal, SIGNAL(driveChanged())) == 0) { + static const QMetaMethod driveChangedSignal = QMetaMethod::fromSignal(&QUDevWrapper::driveChanged); + static const QMetaMethod batteryDataChangedSignal = QMetaMethod::fromSignal(&QUDevWrapper::batteryDataChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QUDevWrapper::chargerTypeChanged); + + if (!watchDrives && signal == driveChangedSignal) { if (addUDevWatcher("block")) watchDrives = true; - } else if (!watchPowerSupply && (strcmp(signal, SIGNAL(batteryDataChanged(int,QByteArray,QByteArray))) == 0 - || strcmp(signal, SIGNAL(chargerTypeChanged(QByteArray,bool))) == 0)) { + } else if (!watchPowerSupply && (signal == batteryDataChangedSignal + || signal == chargerTypeChangedSignal)) { if (addUDevWatcher("power_supply")) watchPowerSupply = true; } } -void QUDevWrapper::disconnectNotify(const char *signal) +void QUDevWrapper::disconnectNotify(const QMetaMethod &signal) { - if (watchDrives && strcmp(signal, SIGNAL(driveChanged())) == 0) { + static const QMetaMethod driveChangedSignal = QMetaMethod::fromSignal(&QUDevWrapper::driveChanged); + static const QMetaMethod batteryDataChangedSignal = QMetaMethod::fromSignal(&QUDevWrapper::batteryDataChanged); + static const QMetaMethod chargerTypeChangedSignal = QMetaMethod::fromSignal(&QUDevWrapper::chargerTypeChanged); + + if (watchDrives && signal == driveChangedSignal) { if (removeAllUDevWatcher()) { watchDrives = false; if (watchPowerSupply) { @@ -124,8 +133,8 @@ void QUDevWrapper::disconnectNotify(const char *signal) watchPowerSupply = false; } } - } else if (watchPowerSupply && (strcmp(signal, SIGNAL(batteryDataChanged(int,QByteArray,QByteArray))) == 0 - || strcmp(signal, SIGNAL(chargerTypeChanged(QByteArray,bool))) == 0)) { + } else if (watchPowerSupply && (signal == batteryDataChangedSignal + || signal == chargerTypeChangedSignal)) { if (removeAllUDevWatcher()) { watchPowerSupply = false; if (watchDrives) { diff --git a/src/systeminfo/qudevwrapper_p.h b/src/systeminfo/qudevwrapper_p.h index 5484cdb9..51c71fad 100644 --- a/src/systeminfo/qudevwrapper_p.h +++ b/src/systeminfo/qudevwrapper_p.h @@ -76,8 +76,8 @@ Q_SIGNALS: void chargerTypeChanged(const QByteArray &value, bool enabled); protected: - void connectNotify(const char *signal); - void disconnectNotify(const char *signal); + void connectNotify(const QMetaMethod &signal); + void disconnectNotify(const QMetaMethod &signal); private: Q_DISABLE_COPY(QUDevWrapper) |