diff --git a/ui/abstract_button.cpp b/ui/abstract_button.cpp index 3eb5ccba..5649fb8a 100644 --- a/ui/abstract_button.cpp +++ b/ui/abstract_button.cpp @@ -223,6 +223,18 @@ void AbstractButton::clearState() { onStateChanged(was, StateChangeSource::ByUser); } +QString AbstractButton::accessibilityName() { + const auto custom = QWidget::accessibleName(); + if (!custom.isEmpty()) { + return custom; + } + const auto tip = toolTip(); + if (!tip.isEmpty()) { + return tip; + } + return QString(); +} + AccessibilityState AbstractButton::accessibilityState() const { return { .pressed = isDown() }; } diff --git a/ui/abstract_button.h b/ui/abstract_button.h index 2eea6dfc..07dff42c 100644 --- a/ui/abstract_button.h +++ b/ui/abstract_button.h @@ -77,6 +77,7 @@ class AbstractButton : public RpWidget { ? QAccessible::ButtonMenu : QAccessible::Button; } + QString accessibilityName() override; AccessibilityState accessibilityState() const override; void accessibilityDoAction(const QString &name) override; diff --git a/ui/widgets/buttons.cpp b/ui/widgets/buttons.cpp index 4637ed5d..54cf9c7f 100644 --- a/ui/widgets/buttons.cpp +++ b/ui/widgets/buttons.cpp @@ -239,6 +239,7 @@ FlatButton::FlatButton( void FlatButton::setText(const QString &text) { _text = text; + setAccessibleName(text); accessibilityNameChanged(); update(); } @@ -1056,6 +1057,7 @@ void SettingsButton::onStateChanged( void SettingsButton::setText(TextWithEntities &&text) { _text.setMarkedText(_st.style, text, kMarkupTextOptions, _context); + setAccessibleName(_text.toString()); accessibilityNameChanged(); update(); } diff --git a/ui/widgets/popup_menu.cpp b/ui/widgets/popup_menu.cpp index b29624ca..339c241c 100644 --- a/ui/widgets/popup_menu.cpp +++ b/ui/widgets/popup_menu.cpp @@ -23,6 +23,7 @@ #include "ui/ui_utility.h" #include +#include #include #include #include @@ -1172,6 +1173,8 @@ void PopupMenu::showPrepared(TriggeredSource source) { activateWindow(); if (Ui::ScreenReaderModeActive()) { _menu->setShowSource(TriggeredSource::Keyboard); + QAccessibleEvent event(this, QAccessible::Focus); + QAccessible::updateAccessibility(&event); } else { _menu->setShowSource(source); }