From ec39297898ad629d5b1ca6925a3aa5933136a778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 19 Jun 2023 20:06:22 +0200 Subject: [PATCH] iOS: Tear down all text interaction recognizers on focus object change Prior to 30276cec3d47f4f4fa847fea90214ec5c28d54ed all the recognizers were managed together, so we could safely condition teardown of them all by checking for the presence of one of them. Now that we selectively enable only some of the recognizers, we need to have more granular teardown logic. For extra safety, we tear down each one individually now, even if some of them are still managed together. Fixes: QTBUG-114416 Change-Id: Ie99388cd8abb7543c17df5b6b5a88e86ff86df7e Reviewed-by: Richard Moe Gustavsen Reviewed-by: Doris Verria (cherry picked from commit 46d69b6ca45ad9218a27f7db8fccba8a8f655ecc) Reviewed-by: Qt Cherry-pick Bot --- .../platforms/ios/qiostextinputoverlay.mm | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/ios/qiostextinputoverlay.mm b/src/plugins/platforms/ios/qiostextinputoverlay.mm index 512ab77bd27..918c4a8c627 100644 --- a/src/plugins/platforms/ios/qiostextinputoverlay.mm +++ b/src/plugins/platforms/ios/qiostextinputoverlay.mm @@ -996,19 +996,26 @@ QIOSTextInputOverlay::~QIOSTextInputOverlay() void QIOSTextInputOverlay::updateFocusObject() { + // Destroy old recognizers since they were created with + // dependencies to the old focus object (focus view). if (m_cursorRecognizer) { - // Destroy old recognizers since they were created with - // dependencies to the old focus object (focus view). m_cursorRecognizer.enabled = NO; - m_selectionRecognizer.enabled = NO; - m_openMenuOnTapRecognizer.enabled = NO; [m_cursorRecognizer release]; - [m_selectionRecognizer release]; - [m_openMenuOnTapRecognizer release]; - [s_editMenu release]; m_cursorRecognizer = nullptr; + } + if (m_selectionRecognizer) { + m_selectionRecognizer.enabled = NO; + [m_selectionRecognizer release]; m_selectionRecognizer = nullptr; + } + if (m_openMenuOnTapRecognizer) { + m_openMenuOnTapRecognizer.enabled = NO; + [m_openMenuOnTapRecognizer release]; m_openMenuOnTapRecognizer = nullptr; + } + + if (s_editMenu) { + [s_editMenu release]; s_editMenu = nullptr; }