summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Schmertmann <Lars.Schmertmann@governikus.de>2024-03-15 14:19:32 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-03-25 13:34:12 +0000
commitd50214cdd928c798aef52018961d7d2ba4dad37d (patch)
tree367efd4d8d2a9812238db9af8ce094ceec708555
parent925e9da85983154e35479c1f14dae6aad7983feb (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.mm1
-rw-r--r--src/nfc/qnearfieldtarget_ios.mm18
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();
}
}