summaryrefslogtreecommitdiff
path: root/lib-apps-common/src/Ux/CircleSelector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib-apps-common/src/Ux/CircleSelector.cpp')
-rw-r--r--lib-apps-common/src/Ux/CircleSelector.cpp45
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);
}