diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bluetooth/qbluetoothsocket.cpp | 15 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_android.cpp | 3 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_bluezdbus.cpp | 11 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_winrt.cpp | 16 | ||||
-rw-r--r-- | src/bluetooth/qbluetoothsocket_winrt_p.h | 2 |
5 files changed, 28 insertions, 19 deletions
diff --git a/src/bluetooth/qbluetoothsocket.cpp b/src/bluetooth/qbluetoothsocket.cpp index 4bd59095..36e4a54c 100644 --- a/src/bluetooth/qbluetoothsocket.cpp +++ b/src/bluetooth/qbluetoothsocket.cpp @@ -639,13 +639,6 @@ void QBluetoothSocket::abort() setSocketState(ClosingState); d->abort(); - -#ifndef QT_ANDROID_BLUETOOTH - //Android closes when the Java event loop comes around - setSocketState(QBluetoothSocket::UnconnectedState); - emit readChannelFinished(); - emit disconnected(); -#endif } void QBluetoothSocket::disconnectFromService() @@ -725,14 +718,6 @@ void QBluetoothSocket::close() setSocketState(ClosingState); d->close(); - -#ifndef QT_ANDROID_BLUETOOTH - // TODO Add return type to d->close() & d->abort() to detect when to emit below signals - //Android closes when the Java event loop comes around - setSocketState(UnconnectedState); - emit readChannelFinished(); - emit disconnected(); -#endif } /*! diff --git a/src/bluetooth/qbluetoothsocket_android.cpp b/src/bluetooth/qbluetoothsocket_android.cpp index 9047bb31..5d0bf5fd 100644 --- a/src/bluetooth/qbluetoothsocket_android.cpp +++ b/src/bluetooth/qbluetoothsocket_android.cpp @@ -715,6 +715,9 @@ void QBluetoothSocketPrivateAndroid::abort() // Unconnected (now) in advance Q_Q(QBluetoothSocket); q->setSocketState(QBluetoothSocket::UnconnectedState); + q->setOpenMode(QIODevice::NotOpen); + emit q->readChannelFinished(); + emit q->disconnected(); } } } diff --git a/src/bluetooth/qbluetoothsocket_bluezdbus.cpp b/src/bluetooth/qbluetoothsocket_bluezdbus.cpp index 52193a1a..e9c47df8 100644 --- a/src/bluetooth/qbluetoothsocket_bluezdbus.cpp +++ b/src/bluetooth/qbluetoothsocket_bluezdbus.cpp @@ -337,10 +337,15 @@ void QBluetoothSocketPrivateBluezDBus::abort() { if (localSocket) { localSocket->close(); - //TODO delayed disconnected() not yet implemented + // delayed disconnected signal emission when localSocket closes } else { - // delayed disconnected not needed + Q_Q(QBluetoothSocket); + clearSocket(); + q->setOpenMode(QIODevice::NotOpen); + q->setSocketState(QBluetoothSocket::UnconnectedState); + emit q->readChannelFinished(); + emit q->disconnected(); } } @@ -551,7 +556,7 @@ void QBluetoothSocketPrivateBluezDBus::socketStateChanged(QLocalSocket::LocalSoc case QLocalSocket::UnconnectedState: clearSocket(); q->setSocketState(QBluetoothSocket::UnconnectedState); - + q->setOpenMode(QIODevice::NotOpen); emit q->readChannelFinished(); emit q->disconnected(); break; diff --git a/src/bluetooth/qbluetoothsocket_winrt.cpp b/src/bluetooth/qbluetoothsocket_winrt.cpp index 556d9fc5..f985952a 100644 --- a/src/bluetooth/qbluetoothsocket_winrt.cpp +++ b/src/bluetooth/qbluetoothsocket_winrt.cpp @@ -393,7 +393,7 @@ void QBluetoothSocketPrivateWinRT::connectToServiceHelper(const QBluetoothAddres Q_ASSERT_SUCCEEDED(hr); q->setSocketState(QBluetoothSocket::ConnectingState); - q->setOpenMode(openMode); + requestedOpenMode = openMode; QEventDispatcherWinRT::runOnXamlThread([this]() { HRESULT hr; hr = m_connectOp->put_Completed(Callback<IAsyncActionCompletedHandler>( @@ -517,7 +517,14 @@ void QBluetoothSocketPrivateWinRT::abort() m_socketObject = nullptr; socket = -1; } + + const bool wasConnected = q->state() == QBluetoothSocket::ConnectedState; q->setSocketState(QBluetoothSocket::UnconnectedState); + if (wasConnected) { + q->setOpenMode(QIODevice::NotOpen); + emit q->readChannelFinished(); + emit q->disconnected(); + } } QString QBluetoothSocketPrivateWinRT::localName() const @@ -727,7 +734,13 @@ void QBluetoothSocketPrivateWinRT::handleError(QBluetoothSocket::SocketError err } q->setSocketError(error); + const bool wasConnected = q->state() == QBluetoothSocket::ConnectedState; q->setSocketState(QBluetoothSocket::UnconnectedState); + if (wasConnected) { + q->setOpenMode(QIODevice::NotOpen); + emit q->readChannelFinished(); + emit q->disconnected(); + } } void QBluetoothSocketPrivateWinRT::addToPendingData(const QVector<QByteArray> &data) @@ -794,6 +807,7 @@ HRESULT QBluetoothSocketPrivateWinRT::handleConnectOpFinished(ABI::Windows::Foun Q_ASSERT_SUCCEEDED(hr); } + q->setOpenMode(requestedOpenMode); q->setSocketState(QBluetoothSocket::ConnectedState); m_worker->startReading(); emit q->connected(); diff --git a/src/bluetooth/qbluetoothsocket_winrt_p.h b/src/bluetooth/qbluetoothsocket_winrt_p.h index 6a740206..40e87f01 100644 --- a/src/bluetooth/qbluetoothsocket_winrt_p.h +++ b/src/bluetooth/qbluetoothsocket_winrt_p.h @@ -127,6 +127,8 @@ private slots: private: HRESULT handleConnectOpFinished(ABI::Windows::Foundation::IAsyncAction *action, ABI::Windows::Foundation::AsyncStatus status); + + QIODevice::OpenMode requestedOpenMode = QIODevice::NotOpen; }; QT_END_NAMESPACE |