summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlad Zahorodnii <[email protected]>2025-01-06 02:22:26 +0200
committerVlad Zahorodnii <[email protected]>2025-01-10 17:29:58 +0200
commitd612dcd249850a0815cc0396b92d57179a4493f8 (patch)
treeb22b03979d6feb2f5a2397da31811b15636ddbaa
parentda799c20d763b5534152dca52fef12fda875acc2 (diff)
a11y: Port qt_accHotKey() to QKeySequence::mnemonic()
QKeySequence::mnemonic() contains additional input sanitization logic and in combination with the toString() function, it provides a platform agnostic way to get the shortcut text for the mnemonic. tst_QAccessibility was adjusted because mnemonics don't work by default on macOS. See qt_set_sequence_auto_mnemonic(). Change-Id: I96842a6c18140a559aeaeb8f687e32011e5e2e77 Reviewed-by: Volker Hilsheimer <[email protected]>
-rw-r--r--src/widgets/accessible/qaccessiblewidget.cpp4
-rw-r--r--tests/auto/other/qaccessibility/tst_qaccessibility.cpp15
2 files changed, 15 insertions, 4 deletions
diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp
index 6c6aadcb10f..6bb3a3358a3 100644
--- a/src/widgets/accessible/qaccessiblewidget.cpp
+++ b/src/widgets/accessible/qaccessiblewidget.cpp
@@ -107,9 +107,7 @@ QString qt_accStripAmp(const QString &text)
QString qt_accHotKey(const QString &text)
{
#ifndef QT_NO_SHORTCUT
- qsizetype ampIndex = qt_accAmpIndex(text);
- if (ampIndex != -1)
- return QKeySequence(Qt::ALT).toString(QKeySequence::NativeText) + text.at(ampIndex + 1);
+ return QKeySequence::mnemonic(text).toString(QKeySequence::NativeText);
#else
Q_UNUSED(text);
#endif
diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
index 11110e352ef..058ba61afe1 100644
--- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
+++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
@@ -3984,8 +3984,21 @@ void tst_QAccessibility::labelTest()
QTestAccessibility::clearEvents();
}
+#if defined(Q_OS_MACOS)
+QT_BEGIN_NAMESPACE
+ extern void qt_set_sequence_auto_mnemonic(bool);
+QT_END_NAMESPACE
+#endif
+
void tst_QAccessibility::accelerators()
{
+#if defined(Q_OS_MACOS)
+ qt_set_sequence_auto_mnemonic(true);
+ const auto resetAutoMnemonic = qScopeGuard([] {
+ qt_set_sequence_auto_mnemonic(false);
+ });
+#endif
+
auto windowHolder = std::make_unique<QWidget>();
auto window = windowHolder.get();
QHBoxLayout *lay = new QHBoxLayout(window);
@@ -4011,7 +4024,7 @@ void tst_QAccessibility::accelerators()
label->setText(tr("Q &&A"));
QCOMPARE(accLineEdit->text(QAccessible::Accelerator), QString());
-#if !defined(QT_NO_DEBUG) && !defined(Q_OS_MAC)
+#if !defined(QT_NO_DEBUG)
QTest::ignoreMessage(QtWarningMsg, "QKeySequence::mnemonic: \"Q &A&B\" contains multiple occurrences of '&'");
#endif
label->setText(tr("Q &A&B"));