summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShilpa Singh <shilpa.singh@samsung.com>2017-06-03 17:28:30 +0900
committerShinwoo Kim <cinoo.kim@samsung.com>2017-06-03 17:28:30 +0900
commite53b77d6ce9848bdb274b428c33e6848c8620443 (patch)
tree4d8530090088240815e42ce1d26b76dd90d4642b
parentbc13f96ae8b944fd3277a1d8ee86fc061842762a (diff)
downloadefl-e53b77d6ce9848bdb274b428c33e6848c8620443.tar.gz
elm_colorselector: Improve ATSPI support
Summary: Item: state_set_get, name, actions api added Widget: children_get api added. Test Plan: In Accessibility mode, on item tap, color name should be read out, and if the color is a selected color, state also should be read out. Reviewers: kimcinoo Subscribers: cedric, jpeg, govi, rajeshps Differential Revision: https://phab.enlightenment.org/D4934
-rw-r--r--src/lib/elementary/elm_color_item.eo5
-rw-r--r--src/lib/elementary/elm_colorselector.c103
-rw-r--r--src/lib/elementary/elm_colorselector.eo1
3 files changed, 108 insertions, 1 deletions
diff --git a/src/lib/elementary/elm_color_item.eo b/src/lib/elementary/elm_color_item.eo
index 6f6b7e4a9f..860527c4f6 100644
--- a/src/lib/elementary/elm_color_item.eo
+++ b/src/lib/elementary/elm_color_item.eo
@@ -1,4 +1,4 @@
-class Elm.Color.Item(Elm.Widget.Item)
+class Elm.Color.Item(Elm.Widget.Item, Elm.Interface.Atspi_Widget_Action)
{
[[Elementary color item class]]
legacy_prefix: elm_color_item;
@@ -42,5 +42,8 @@ class Elm.Color.Item(Elm.Widget.Item)
Elm.Widget.Item.access_register;
Elm.Widget.Item.signal_emit;
Elm.Widget.Item.focus { get; set; }
+ Elm.Interface.Atspi_Accessible.state_set { get; }
+ Elm.Interface.Atspi_Accessible.name { get; }
+ Elm.Interface.Atspi_Widget_Action.elm_actions { get; }
}
}
diff --git a/src/lib/elementary/elm_colorselector.c b/src/lib/elementary/elm_colorselector.c
index 94a288a035..d3750552b6 100644
--- a/src/lib/elementary/elm_colorselector.c
+++ b/src/lib/elementary/elm_colorselector.c
@@ -3,6 +3,7 @@
#endif
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
+#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
#include <Elementary.h>
@@ -1702,6 +1703,39 @@ _elm_color_item_elm_widget_item_signal_emit(Eo *eo_it EINA_UNUSED,
elm_object_signal_emit(VIEW(it), emission, source);
}
+static Eina_Bool
+_item_action_activate(Evas_Object *obj, const char *params EINA_UNUSED)
+{
+ Eina_List *l;
+ ELM_COLOR_ITEM_DATA_GET(obj, item);
+ ELM_COLORSELECTOR_DATA_GET(WIDGET(item), sd);
+
+ elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
+ elm_interface_atspi_accessible_state_changed_signal_emit(obj,
+ ELM_ATSPI_STATE_CHECKED,
+ EINA_TRUE);
+ elm_colorselector_color_set(WIDGET(item), item->color->r, item->color->g,
+ item->color->b, item->color->a);
+ evas_object_smart_callback_call(WIDGET(item), SIG_COLOR_ITEM_SELECTED,
+ EO_OBJ(item));
+
+ Eo *eo_temp_item = eina_list_data_get(sd->selected);
+ if (eo_temp_item && (eo_temp_item != EO_OBJ(item)))
+ {
+ ELM_COLOR_ITEM_DATA_GET(eo_temp_item, temp_item);
+ elm_object_signal_emit(VIEW(temp_item), "elm,state,unselected", "elm");
+ }
+
+ EINA_LIST_FOREACH(sd->items, l, eo_temp_item)
+ {
+ ELM_COLOR_ITEM_DATA_GET(eo_temp_item, temp_item);
+ if (item == temp_item) sd->selected = l;
+ }
+ sd->focused = ELM_COLORSELECTOR_PALETTE;
+
+ return EINA_TRUE;
+}
+
EOLIAN static Eo *
_elm_color_item_efl_object_constructor(Eo *eo_item, Elm_Color_Item_Data *item)
{
@@ -1744,6 +1778,8 @@ _elm_color_item_efl_object_constructor(Eo *eo_item, Elm_Color_Item_Data *item)
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
elm_wdg_item_access_register(eo_item);
+ elm_interface_atspi_accessible_role_set(eo_item, ELM_ATSPI_ROLE_RADIO_BUTTON);
+
return eo_item;
}
@@ -2586,6 +2622,36 @@ _elm_colorselector_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EIN
return &atspi_actions[0];
}
+EOLIAN static Eina_List*
+_elm_colorselector_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm_Colorselector_Data *sd)
+{
+ Eina_List *ret = NULL;
+
+ ret = elm_interface_atspi_accessible_children_get(efl_super(obj, ELM_COLORSELECTOR_CLASS));
+ // filter - out box contiainer
+ ret = eina_list_remove(ret, sd->palette_box);
+ // append items as colorselector children
+ ret = eina_list_merge(ret, eina_list_clone(sd->items));
+
+ return ret;
+}
+
+EOLIAN static Elm_Atspi_State_Set
+_elm_color_item_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Color_Item_Data *sd EINA_UNUSED)
+{
+ Elm_Atspi_State_Set ret;
+ Eina_Bool sel;
+
+ ret = elm_interface_atspi_accessible_state_set_get(efl_super(obj, ELM_COLOR_ITEM_CLASS));
+
+ sel = elm_obj_color_item_selected_get(obj);
+
+ if (sel)
+ STATE_TYPE_SET(ret, ELM_ATSPI_STATE_CHECKED);
+
+ return ret;
+}
+
EOLIAN static void
_elm_color_item_elm_widget_item_focus_set(Eo *eo_it, Elm_Color_Item_Data *it, Eina_Bool focused)
{
@@ -2623,6 +2689,43 @@ _elm_color_item_elm_widget_item_focus_get(Eo *eo_it, Elm_Color_Item_Data *it)
return EINA_FALSE;
}
+EOLIAN static const Elm_Atspi_Action*
+_elm_color_item_elm_interface_atspi_widget_action_elm_actions_get(Eo *eo_it EINA_UNUSED, Elm_Color_Item_Data *it EINA_UNUSED)
+{
+ static Elm_Atspi_Action atspi_actions[] = {
+ { "activate", "activate", NULL, _item_action_activate},
+ { NULL, NULL, NULL, NULL }
+ };
+ return &atspi_actions[0];
+}
+
+EOLIAN static const char*
+_elm_color_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Color_Item_Data *it)
+{
+ Eina_Strbuf *buf;
+ const char *color_name = NULL;
+ const char *name;
+ char *accessible_name;
+
+ name = elm_interface_atspi_accessible_name_get(efl_super(eo_it, ELM_COLOR_ITEM_CLASS));
+ if (name) return name;
+
+ buf = eina_strbuf_new();
+ color_name = _get_color_name(it->color->r, it->color->g, it->color->b, it->color->a);
+ if (color_name)
+ eina_strbuf_append_printf(buf, "%s", color_name);
+ else
+ eina_strbuf_append_printf(buf, "red %d, green %d, blue %d, alpha %d",
+ it->color->r, it->color->g, it->color->b, it->color->a);
+ accessible_name = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+
+ eina_stringshare_del(it->base->accessible_name);
+ it->base->accessible_name = eina_stringshare_add(accessible_name);
+ free(accessible_name);
+ return it->base->accessible_name;
+}
+
/* Internal EO APIs and hidden overrides */
#define ELM_COLORSELECTOR_EXTRA_OPS \
diff --git a/src/lib/elementary/elm_colorselector.eo b/src/lib/elementary/elm_colorselector.eo
index 023c1b79c5..9371384a66 100644
--- a/src/lib/elementary/elm_colorselector.eo
+++ b/src/lib/elementary/elm_colorselector.eo
@@ -117,6 +117,7 @@ class Elm.Colorselector (Elm.Layout, Elm.Interface.Atspi_Widget_Action,
Elm.Widget.widget_event;
Elm.Layout.sizing_eval;
Elm.Interface.Atspi_Widget_Action.elm_actions { get; }
+ Elm.Interface.Atspi_Accessible.children { get; }
}
events {
color,item,selected; [[Called when color item was selected]]