summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/bluetooth/qbluetoothsocket.cpp15
-rw-r--r--src/bluetooth/qbluetoothsocket_android.cpp3
-rw-r--r--src/bluetooth/qbluetoothsocket_bluezdbus.cpp11
-rw-r--r--src/bluetooth/qbluetoothsocket_winrt.cpp16
-rw-r--r--src/bluetooth/qbluetoothsocket_winrt_p.h2
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