diff options
Diffstat (limited to 'lib-apps-common/src/Ux/CircleSelector.cpp')
-rw-r--r-- | lib-apps-common/src/Ux/CircleSelector.cpp | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/lib-apps-common/src/Ux/CircleSelector.cpp b/lib-apps-common/src/Ux/CircleSelector.cpp index d3f9d29..c9380cc 100644 --- a/lib-apps-common/src/Ux/CircleSelector.cpp +++ b/lib-apps-common/src/Ux/CircleSelector.cpp @@ -15,13 +15,20 @@ */ #include "Ux/CircleSelector.h" +#include "Ui/Accessibility.h" #include "Ui/CircleMenu.h" #include "Utils/Callback.h" #define BUF_SIZE 8 +using namespace Ui; using namespace Ux; +CircleSelector::CircleSelector() + : m_AccessibilityStrings{ nullptr } +{ +} + void CircleSelector::setCount(size_t count) { char buf[BUF_SIZE]; @@ -29,6 +36,11 @@ void CircleSelector::setCount(size_t count) elm_object_text_set(getEvasObject(), buf); } +void CircleSelector::setAccessibilityStrings(const AccessibilityStrings &strings) +{ + m_AccessibilityStrings = strings; +} + Evas_Object *CircleSelector::onCreate(Evas_Object *parent) { auto button = elm_button_add(parent); @@ -42,18 +54,45 @@ Evas_Object *CircleSelector::onCreate(Evas_Object *parent) void CircleSelector::onButtonClicked(Evas_Object *button, void *eventInfo) { - auto menu = new Ui::CircleMenu(); + auto menu = new CircleMenu(); menu->create(button); if (getState() != SelectedAll) { - menu->addItem(getStrings().selectAll, [this] { + auto item = menu->addItem(getStrings().selectAll, [this] { notifyChanged(SelectedAll); }); + makeAccessible(item, m_AccessibilityStrings.selectAllDescription); } if (getState() != SelectedNone) { - menu->addItem(getStrings().deselectAll, [this] { + auto item = menu->addItem(getStrings().deselectAll, [this] { notifyChanged(SelectedNone); }); + makeAccessible(item, m_AccessibilityStrings.deselectAllDescription); } menu->show(); + + makeAccessible(menu->getEvasObject()); +} + +void CircleSelector::makeAccessible(Evas_Object *menu) +{ + elm_atspi_accessible_reading_info_type_set(menu, Elm_Accessible_Reading_Info_Type( + ELM_ACCESSIBLE_READING_INFO_TYPE_NAME | + ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION)); + //FIXME Use default role when menu odd information pronunciation will be fixed + elm_atspi_accessible_role_set(menu, ELM_ATSPI_ROLE_PUSH_BUTTON); + elm_atspi_accessible_name_cb_set(menu, getTranslatableAccessText, m_AccessibilityStrings.name); + elm_atspi_accessible_description_cb_set(menu, getTranslatableAccessText, m_AccessibilityStrings.description); + + elm_access_action_cb_set(menu, ELM_ACCESS_ACTION_ACTIVATE, + [](void *, Evas_Object *obj, Elm_Access_Action_Info *) { + elm_ctxpopup_dismiss(obj); + return EINA_TRUE; + }, nullptr); +} + +void CircleSelector::makeAccessible(Elm_Object_Item *item, const char *description) +{ + elm_atspi_accessible_reading_info_type_set(item, ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION); + elm_atspi_accessible_description_cb_set(item, getTranslatableAccessText, description); } |