diff options
author | Vlad Zahorodnii <[email protected]> | 2025-01-06 02:22:26 +0200 |
---|---|---|
committer | Vlad Zahorodnii <[email protected]> | 2025-01-10 17:29:58 +0200 |
commit | d612dcd249850a0815cc0396b92d57179a4493f8 (patch) | |
tree | b22b03979d6feb2f5a2397da31811b15636ddbaa | |
parent | da799c20d763b5534152dca52fef12fda875acc2 (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.cpp | 4 | ||||
-rw-r--r-- | tests/auto/other/qaccessibility/tst_qaccessibility.cpp | 15 |
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")); |