From 176d5208a3301ade9fea2b0681474dbff253b6a8 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Mon, 23 Sep 2013 14:55:35 +0200 Subject: Emit service discovery error during internal device discovery This was discovered when starting a service discovery while no Bluetooth device is connected. Change-Id: Ibb970ee6cb95ff50bca635813cce23c4d7f8e3c6 Reviewed-by: Fabian Bumberger Reviewed-by: Alex Blasche --- src/bluetooth/qbluetoothservicediscoveryagent.cpp | 20 +++++++++++++++++++- src/bluetooth/qbluetoothservicediscoveryagent.h | 1 + src/bluetooth/qbluetoothservicediscoveryagent_p.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) (limited to 'src/bluetooth') diff --git a/src/bluetooth/qbluetoothservicediscoveryagent.cpp b/src/bluetooth/qbluetoothservicediscoveryagent.cpp index b613642c..1bf31245 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent.cpp +++ b/src/bluetooth/qbluetoothservicediscoveryagent.cpp @@ -99,7 +99,8 @@ QT_BEGIN_NAMESPACE /*! \fn QBluetoothServiceDiscoveryAgent::finished() - This signal is emitted when Bluetooth service discovery completes. + This signal is emitted when Bluetooth service discovery completes. This signal will even + be emitted when an error occurred during the service discovery. */ /*! @@ -338,6 +339,8 @@ void QBluetoothServiceDiscoveryAgentPrivate::startDeviceDiscovery() q, SLOT(_q_deviceDiscoveryFinished())); QObject::connect(deviceDiscoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), q, SLOT(_q_deviceDiscovered(QBluetoothDeviceInfo))); + QObject::connect(deviceDiscoveryAgent, SIGNAL(error(QBluetoothDeviceDiscoveryAgent::Error)), + q, SLOT(_q_deviceDiscoveryError(QBluetoothDeviceDiscoveryAgent::Error))); } @@ -372,6 +375,7 @@ void QBluetoothServiceDiscoveryAgentPrivate::_q_deviceDiscoveryFinished() setDiscoveryState(Inactive); Q_Q(QBluetoothServiceDiscoveryAgent); + emit q->error(error); emit q->finished(); return; } @@ -405,6 +409,20 @@ void QBluetoothServiceDiscoveryAgentPrivate::_q_deviceDiscovered(const QBluetoot } } +void QBluetoothServiceDiscoveryAgentPrivate::_q_deviceDiscoveryError(QBluetoothDeviceDiscoveryAgent::Error newError) +{ + error = static_cast(newError); + + deviceDiscoveryAgent->stop(); + delete deviceDiscoveryAgent; + deviceDiscoveryAgent = 0; + + setDiscoveryState(Inactive); + Q_Q(QBluetoothServiceDiscoveryAgent); + emit q->error(error); + emit q->finished(); +} + /*! Starts service discovery for the next device. */ diff --git a/src/bluetooth/qbluetoothservicediscoveryagent.h b/src/bluetooth/qbluetoothservicediscoveryagent.h index f4786f7e..f923c2d0 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent.h +++ b/src/bluetooth/qbluetoothservicediscoveryagent.h @@ -108,6 +108,7 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_deviceDiscovered(const QBluetoothDeviceInfo &info)) Q_PRIVATE_SLOT(d_func(), void _q_deviceDiscoveryFinished()) + Q_PRIVATE_SLOT(d_func(), void _q_deviceDiscoveryError(QBluetoothDeviceDiscoveryAgent::Error)) Q_PRIVATE_SLOT(d_func(), void _q_serviceDiscoveryFinished()) #ifdef QT_BLUEZ_BLUETOOTH Q_PRIVATE_SLOT(d_func(), void _q_discoveredServices(QDBusPendingCallWatcher*)) diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_p.h b/src/bluetooth/qbluetoothservicediscoveryagent_p.h index 697fe662..517f6a98 100644 --- a/src/bluetooth/qbluetoothservicediscoveryagent_p.h +++ b/src/bluetooth/qbluetoothservicediscoveryagent_p.h @@ -105,6 +105,7 @@ public: void _q_deviceDiscoveryFinished(); void _q_deviceDiscovered(const QBluetoothDeviceInfo &info); void _q_serviceDiscoveryFinished(); + void _q_deviceDiscoveryError(QBluetoothDeviceDiscoveryAgent::Error); #ifdef QT_BLUEZ_BLUETOOTH void _q_discoveredServices(QDBusPendingCallWatcher *watcher); void _q_createdDevice(QDBusPendingCallWatcher *watcher); -- cgit v1.2.3