aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Dubsky <pavel.dubsky@qt.io>2024-03-05 14:33:39 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-04-16 12:03:58 +0000
commit140adbe8b134814bc1c8be6eebd45343df175e88 (patch)
treef72e6bcda5a49632c42f671f71fbc5dbb0011553
parent386868ba51bb3924763bbca6279ba4e8e4c335fc (diff)
Return masked characters for passwords during narration
Current implementation returns plain text (unmasked) when narration (accessibility feature) is enabled. This fix changes the behavior to return QQuickTextInput::displayText() for all QQuickTextInput elements since it contains a text that is actually visible to the user which in case of a password contains masked characters. Fixes: QTBUG-120097 Pick-to: 6.6 6.5 Change-Id: I99dcf9ec8d8bb3dfcf0b34ae11f6cd500ed5a904 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 57c6168d0074294ab44b820c963bb563764d7bb7) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/quick/accessible/qaccessiblequickitem.cpp2
-rw-r--r--tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp30
2 files changed, 32 insertions, 0 deletions
diff --git a/src/quick/accessible/qaccessiblequickitem.cpp b/src/quick/accessible/qaccessiblequickitem.cpp
index 6f8df29538..514b1a9214 100644
--- a/src/quick/accessible/qaccessiblequickitem.cpp
+++ b/src/quick/accessible/qaccessiblequickitem.cpp
@@ -622,6 +622,8 @@ QString QAccessibleQuickItem::text(QAccessible::Text textType) const
// the following block handles item-specific behavior
if (role() == QAccessible::EditableText) {
if (textType == QAccessible::Value) {
+ if (auto textInput = qobject_cast<QQuickTextInput *>(item()))
+ return textInput->displayText();
if (QTextDocument *doc = textDocument()) {
return doc->toPlainText();
}
diff --git a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp
index 97b1b5bd44..e164d89217 100644
--- a/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp
+++ b/tests/auto/quick/qquickaccessible/tst_qquickaccessible.cpp
@@ -19,6 +19,7 @@
#include <QtQuick/private/qquickaccessibleattached_p.h>
#include <QtQuick/private/qquicklistview_p.h>
#include <QtQuick/private/qquicktext_p.h>
+#include <QtQuick/private/qquicktextinput_p.h>
#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtQuickTestUtils/private/visualtestutils_p.h>
@@ -61,6 +62,7 @@ private slots:
void hitTest();
void checkableTest();
void ignoredTest();
+ void passwordTest();
};
tst_QQuickAccessible::tst_QQuickAccessible()
@@ -669,6 +671,34 @@ void tst_QQuickAccessible::ignoredTest()
QTestAccessibility::clearEvents();
}
+void tst_QQuickAccessible::passwordTest()
+{
+ QQmlEngine engine;
+ QQmlComponent component(&engine);
+ component.setData("import QtQuick\nTextInput {\n"
+ "Accessible.role: Accessible.EditableText\n"
+ "Accessible.name: \"Password\"\n"
+ "Accessible.passwordEdit: true\n"
+ "echoMode: TextInput.Password\n"
+ "text: \"Green\"\n"
+ "}", QUrl());
+ auto object = std::unique_ptr<QObject>(component.create());
+ QVERIFY(object != nullptr);
+
+ QQuickTextInput *textInput = qobject_cast<QQuickTextInput *>(object.get());
+ QVERIFY(textInput != nullptr);
+
+ const auto passwordCharacter = textInput->passwordCharacter();
+ const auto passwordLength = textInput->text().length();
+ const auto password = passwordCharacter.repeated(passwordLength);
+
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(object.get());
+ QVERIFY(iface);
+ QCOMPARE(iface->text(QAccessible::Value), password);
+
+ QTestAccessibility::clearEvents();
+}
+
QTEST_MAIN(tst_QQuickAccessible)
#include "tst_qquickaccessible.moc"