diff options
author | Lars Schmertmann <Lars.Schmertmann@governikus.de> | 2024-03-15 14:19:32 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2024-03-25 13:34:12 +0000 |
commit | d50214cdd928c798aef52018961d7d2ba4dad37d (patch) | |
tree | 367efd4d8d2a9812238db9af8ce094ceec708555 | |
parent | 925e9da85983154e35479c1f14dae6aad7983feb (diff) |
iOS: Fix error signal
Currently targetLost is used before reportError. So the QNearFieldTarget
will be deleted by the user and the slot connected to the error signal
will never be called. In addition reportError use a QueuedConnection so
we need to do that for targetLost too and change the order.
Because targetLost is always used after invalidate
we can add emitting the signal to invalidate.
Change-Id: I070f6bb705ccff0feacac7f58264ff6ea238bc89
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
(cherry picked from commit 4164f46f68e3d06f7ecfd37728882880f75303b1)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/nfc/qnearfieldmanager_ios.mm | 1 | ||||
-rw-r--r-- | src/nfc/qnearfieldtarget_ios.mm | 18 |
2 files changed, 8 insertions, 11 deletions
diff --git a/src/nfc/qnearfieldmanager_ios.mm b/src/nfc/qnearfieldmanager_ios.mm index 259c3c17..4ab00a51 100644 --- a/src/nfc/qnearfieldmanager_ios.mm +++ b/src/nfc/qnearfieldmanager_ios.mm @@ -205,7 +205,6 @@ void QNearFieldManagerPrivateImpl::clearTargets() auto i = detectedTargets.begin(); while (i != detectedTargets.end()) { (*i)->invalidate(); - Q_EMIT targetLost((*i)->q_ptr); i = detectedTargets.erase(i); } } diff --git a/src/nfc/qnearfieldtarget_ios.mm b/src/nfc/qnearfieldtarget_ios.mm index ecccb6f5..b058ad75 100644 --- a/src/nfc/qnearfieldtarget_ios.mm +++ b/src/nfc/qnearfieldtarget_ios.mm @@ -89,6 +89,10 @@ void QNearFieldTargetPrivateImpl::invalidate() sessionDelegate = nil; targetCheckTimer.stop(); + + QMetaObject::invokeMethod(this, [this]() { + Q_EMIT targetLost(this); + }, Qt::QueuedConnection); } QByteArray QNearFieldTargetPrivateImpl::uid() const @@ -274,9 +278,8 @@ bool QNearFieldTargetPrivateImpl::connect() onExecuteRequest(); } else { const auto requestId = queue.dequeue().first; - invalidate(); - Q_EMIT targetLost(this); reportError(QNearFieldTarget::ConnectionError, requestId); + invalidate(); } }); }]; @@ -302,20 +305,16 @@ bool QNearFieldTargetPrivateImpl::isNdefTag() const void QNearFieldTargetPrivateImpl::onTargetCheck() { - if (!isAvailable()) { + if (!isAvailable()) invalidate(); - Q_EMIT targetLost(this); - } } void QNearFieldTargetPrivateImpl::onTargetError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id) { Q_UNUSED(id); - if (error == QNearFieldTarget::TimeoutError) { + if (error == QNearFieldTarget::TimeoutError) invalidate(); - Q_EMIT targetLost(this); - } } namespace { @@ -441,9 +440,8 @@ void QNearFieldTargetPrivateImpl::onResponseReceived(QNearFieldTarget::RequestI setResponseForRequest(requestId, recvBuffer, true); onExecuteRequest(); } else { - invalidate(); - Q_EMIT targetLost(this); reportError(QNearFieldTarget::CommandError, requestId); + invalidate(); } } |