diff --git a/legacy/elementary/src/lib/Makefile.am b/legacy/elementary/src/lib/Makefile.am index f012fb5167..a2de0d87ed 100644 --- a/legacy/elementary/src/lib/Makefile.am +++ b/legacy/elementary/src/lib/Makefile.am @@ -454,6 +454,7 @@ elm_interface_atspi_action.c \ elm_interface_atspi_component.c \ elm_interface_atspi_image.c \ elm_interface_atspi_value.c \ +elm_interface_atspi_selection.c \ elm_interface_atspi_widget.c \ elm_interface_atspi_widget_action.c \ elm_interface_atspi_window.c \ @@ -667,6 +668,8 @@ BUILT_SOURCES = \ elm_interface_atspi_widget.eo.h \ elm_interface_atspi_widget_action.eo.c \ elm_interface_atspi_widget_action.eo.h \ + elm_interface_atspi_selection.eo.c \ + elm_interface_atspi_selection.eo.h \ elm_interface_atspi_window.eo.c \ elm_interface_atspi_window.eo.h \ elm_interface_fileselector.eo.c \ @@ -794,6 +797,7 @@ elementaryeolianfiles_DATA = \ elm_interface_atspi_component.eo \ elm_interface_atspi_image.eo \ elm_interface_atspi_value.eo \ + elm_interface_atspi_selection.eo \ elm_interface_atspi_widget.eo \ elm_interface_atspi_widget_action.eo \ elm_interface_atspi_window.eo \ @@ -887,6 +891,7 @@ nodist_includesunstable_HEADERS = \ elm_interface_atspi_component.eo.h \ elm_interface_atspi_image.eo.h \ elm_interface_atspi_value.eo.h \ + elm_interface_atspi_selection.eo.h \ elm_interface_atspi_widget.eo.h \ elm_interface_atspi_widget_action.eo.h \ elm_interface_atspi_window.eo.h \ diff --git a/legacy/elementary/src/lib/elm_atspi_bridge.c b/legacy/elementary/src/lib/elm_atspi_bridge.c index 157041a9a9..c031c92478 100644 --- a/legacy/elementary/src/lib/elm_atspi_bridge.c +++ b/legacy/elementary/src/lib/elm_atspi_bridge.c @@ -7,6 +7,7 @@ #define ELM_INTERFACE_ATSPI_ACTION_PROTECTED #define ELM_INTERFACE_ATSPI_VALUE_PROTECTED #define ELM_INTERFACE_ATSPI_IMAGE_PROTECTED +#define ELM_INTERFACE_ATSPI_SELECTION_PROTECTED #include "atspi/atspi-constants.h" #include @@ -21,6 +22,7 @@ #include "elm_interface_atspi_action.eo.h" #include "elm_interface_atspi_value.eo.h" #include "elm_interface_atspi_image.eo.h" +#include "elm_interface_atspi_selection.eo.h" /* * Accessibility Bus info not defined in atspi-constants.h @@ -58,6 +60,7 @@ static Eina_Bool _state_changed_signal_send(void *data, Eo *obj, const Eo_Event_ static Eina_Bool _property_changed_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc EINA_UNUSED, void *event_info); static Eina_Bool _children_changed_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc EINA_UNUSED, void *event_info); static Eina_Bool _window_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info); +static Eina_Bool _selection_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info); static Eo * _access_object_from_path(const char *path); static char * _path_from_access_object(Eo *eo); static void _object_append_reference(Eldbus_Message_Iter *iter, Eo *obj); @@ -79,6 +82,10 @@ EO_CALLBACKS_ARRAY_DEFINE(_window_cb, { ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_DEACTIVATED, _window_signal_send} ); +EO_CALLBACKS_ARRAY_DEFINE(_selection_cb, + { ELM_INTERFACE_ATSPI_SELECTION_EVENT_SELECTION_CHANGED, _selection_signal_send} +); + enum _Atspi_Object_Child_Event_Type { ATSPI_OBJECT_CHILD_ADDED = 0, @@ -583,6 +590,160 @@ static const Eldbus_Method accessible_methods[] = { { NULL, NULL, NULL, NULL, 0 } }; +static Eldbus_Message * +_selection_selected_child_get(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg) +{ + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + Eo *child = NULL; + + int idx; + Eldbus_Message *ret; + Eldbus_Message_Iter *iter; + + if (!eldbus_message_arguments_get(msg, "i", &idx)) + return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid index type."); + + ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + iter = eldbus_message_iter_get(ret); + eo_do(obj, child = elm_interface_atspi_selection_selected_child_get(idx)); + + _object_append_reference(iter, child); + + return ret; +} + +static Eldbus_Message * +_selection_child_select(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) +{ + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + int idx; + Eldbus_Message *ret; + Eina_Bool result; + + if (!eldbus_message_arguments_get(msg, "i", &idx)) + return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid index type."); + + ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + eo_do(obj, result = elm_interface_atspi_selection_child_select(idx)); + eldbus_message_arguments_append(ret, "b", result); + + return ret; +} + +static Eldbus_Message * +_selection_selected_child_deselect(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) +{ + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + int idx; + Eldbus_Message *ret; + Eina_Bool result; + + if (!eldbus_message_arguments_get(msg, "i", &idx)) + return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid index type."); + + ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + eo_do(obj, result = elm_interface_atspi_selection_selected_child_deselect(idx)); + eldbus_message_arguments_append(ret, "b", result); + + return ret; +} + +static Eldbus_Message * +_selection_is_child_selected(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) +{ + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + int idx; + Eldbus_Message *ret; + Eina_Bool result; + + if (!eldbus_message_arguments_get(msg, "i", &idx)) + return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid index type."); + + ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + eo_do(obj, result = elm_interface_atspi_selection_is_child_selected(idx)); + eldbus_message_arguments_append(ret, "b", result); + + return ret; +} + +static Eldbus_Message * +_selection_all_children_select(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) +{ + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + Eldbus_Message *ret; + Eina_Bool result; + + ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + eo_do(obj, result = elm_interface_atspi_selection_all_children_select()); + eldbus_message_arguments_append(ret, "b", result); + + return ret; +} + +static Eldbus_Message * +_selection_clear(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) +{ + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + Eldbus_Message *ret; + Eina_Bool result; + + ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + eo_do(obj, result = elm_interface_atspi_selection_clear()); + eldbus_message_arguments_append(ret, "b", result); + + return ret; +} + +static Eldbus_Message * +_selection_child_deselect(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) +{ + const char *obj_path = eldbus_service_object_path_get(iface); + Eo *obj = _access_object_from_path(obj_path); + int idx; + Eldbus_Message *ret; + Eina_Bool result; + + if (!eldbus_message_arguments_get(msg, "i", &idx)) + return eldbus_message_error_new(msg, "org.freedesktop.DBus.Error.InvalidArgs", "Invalid index type."); + + ret = eldbus_message_method_return_new(msg); + EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); + + eo_do(obj, result = elm_interface_atspi_selection_child_deselect(idx)); + eldbus_message_arguments_append(ret, "b", result); + + return ret; +} + +static const Eldbus_Method selection_methods[] = { + { "GetSelectedChild", ELDBUS_ARGS({"i", "selectedChildIndex"}), ELDBUS_ARGS({"(so)", "Accessible"}), _selection_selected_child_get, 0 }, + { "SelectChild", ELDBUS_ARGS({"i", "childIndex"}), ELDBUS_ARGS({"b", "result"}), _selection_child_select, 0 }, + { "DeselectSelectedChild", ELDBUS_ARGS({"i", "selectedChildIndex"}), ELDBUS_ARGS({"b", "result"}), _selection_selected_child_deselect, 0 }, + { "IsChildSelected", ELDBUS_ARGS({"i", "childIndex"}), ELDBUS_ARGS({"b", "result"}), _selection_is_child_selected, 0 }, + { "SelectAll", NULL, ELDBUS_ARGS({"b", "result"}), _selection_all_children_select, 0}, + { "ClearSelection", NULL, ELDBUS_ARGS({"b", "result"}), _selection_clear, 0}, + { "DeselectChild", ELDBUS_ARGS({"i", "childIndex"}), ELDBUS_ARGS({"b", "result"}), _selection_child_deselect, 0 }, + { NULL, NULL, NULL, NULL, 0 } +}; + static Eldbus_Message * _action_description_get(const Eldbus_Service_Interface *iface, const Eldbus_Message *msg) { @@ -892,6 +1053,26 @@ _accessible_property_get(const Eldbus_Service_Interface *interface, const char * return EINA_FALSE; } +static Eina_Bool +_selection_property_get(const Eldbus_Service_Interface *interface, const char *property, + Eldbus_Message_Iter *iter, const Eldbus_Message *request_msg EINA_UNUSED, + Eldbus_Message **error EINA_UNUSED) +{ + int n; + const char *obj_path = eldbus_service_object_path_get(interface); + Eo *obj = _access_object_from_path(obj_path); + + EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE); + + if (!strcmp(property, "NSelectedChildren")) + { + eo_do(obj, n = elm_interface_atspi_selection_selected_children_count_get()); + eldbus_message_iter_basic_append(iter, 'i', n); + return EINA_TRUE; + } + return EINA_FALSE; +} + static Eina_Bool _action_property_get(const Eldbus_Service_Interface *interface, const char *property, Eldbus_Message_Iter *iter, const Eldbus_Message *request_msg EINA_UNUSED, @@ -1033,6 +1214,11 @@ static const Eldbus_Property image_properties[] = { { NULL, NULL, NULL, NULL, 0 } }; +static const Eldbus_Property selection_properties[] = { + { "NSelectedChildren", "i", _selection_property_get, NULL, 0 }, + { NULL, NULL, NULL, NULL, 0 } +}; + static const Eldbus_Service_Interface_Desc accessible_iface_desc = { ATSPI_DBUS_INTERFACE_ACCESSIBLE, accessible_methods, NULL, accessible_properties, _accessible_property_get, NULL }; @@ -1057,6 +1243,10 @@ static const Eldbus_Service_Interface_Desc image_iface_desc = { ATSPI_DBUS_INTERFACE_IMAGE, image_methods, NULL, image_properties, _image_properties_get, NULL }; +static const Eldbus_Service_Interface_Desc selection_iface_desc = { + ATSPI_DBUS_INTERFACE_SELECTION, selection_methods, NULL, selection_properties, NULL, NULL +}; + static void _object_append_reference(Eldbus_Message_Iter *iter, Eo *obj) { @@ -1914,6 +2104,50 @@ _window_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc, void return EINA_TRUE; } +static Eina_Bool +_selection_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info EINA_UNUSED) +{ + const char *event_desc; + Eldbus_Message *msg; + Eldbus_Message_Iter *iter, *viter; + Eldbus_Service_Interface *selection = data; + + enum _Atspi_Object_Signals type; + if (desc == ELM_INTERFACE_ATSPI_SELECTION_EVENT_SELECTION_CHANGED) + { + event_desc = "SelectionChanged"; + type = ATSPI_OBJECT_EVENT_SELECTION_CHANGED; + } + else + { + WRN("ATSPI Selection event not handled"); + return EINA_FALSE; + } + + if (!selection || !_a11y_bus) + { + ERR("A11Y connection closed. Unable to send ATSPI event."); + return EINA_FALSE; + } + + msg = eldbus_service_signal_new(selection, type); + EINA_SAFETY_ON_NULL_RETURN_VAL(msg, EINA_FALSE); + + iter = eldbus_message_iter_get(msg); + eldbus_message_iter_arguments_append(iter, "sii", event_desc, 0, 0); + + viter = eldbus_message_iter_container_new(iter, 'v', "i"); + EINA_SAFETY_ON_NULL_RETURN_VAL(viter, EINA_FALSE); + + eldbus_message_iter_arguments_append(viter, "i", 0); + eldbus_message_iter_container_close(iter, viter); + + _object_append_reference(iter, obj); + + eldbus_service_signal_send(selection, msg); + DBG("signal sent Selection:%s", event_desc); + return EINA_TRUE; +} static void _event_handlers_register(void) { @@ -2032,6 +2266,13 @@ static void _object_register(Eo *obj, char *path) eldbus_service_interface_register(_a11y_bus, path, &value_iface_desc); if (eo_isa(obj, ELM_INTERFACE_ATSPI_IMAGE_CLASS)) eldbus_service_interface_register(_a11y_bus, path, &image_iface_desc); + if (eo_isa(obj, ELM_INTERFACE_ATSPI_SELECTION_CLASS)) + { + infc = eldbus_service_interface_register(_a11y_bus, path, &selection_iface_desc); + eo_do(obj, eo_key_data_set("selection_interface", infc, NULL)); + eo_do(obj, eo_event_callback_array_add(_selection_cb(), infc)); + } + } } @@ -2056,6 +2297,11 @@ static void _object_unregister(void *obj) eo_do(obj, infc = eo_key_data_get("window_interface")); eo_do(obj, eo_event_callback_array_del(_window_cb(), infc)); } + if (eo_isa(obj, ELM_INTERFACE_ATSPI_SELECTION_CLASS)) + { + eo_do(obj, infc = eo_key_data_get("selection_interface")); + eo_do(obj, eo_event_callback_array_del(_selection_cb(), infc)); + } } void diff --git a/legacy/elementary/src/lib/elm_interface_atspi_selection.c b/legacy/elementary/src/lib/elm_interface_atspi_selection.c new file mode 100644 index 0000000000..31519f48bd --- /dev/null +++ b/legacy/elementary/src/lib/elm_interface_atspi_selection.c @@ -0,0 +1,12 @@ +#ifdef HAVE_CONFIG_H + #include "elementary_config.h" +#endif + +#include +#include "elm_widget.h" +#include "elm_priv.h" + +#define ELM_INTERFACE_ATSPI_VALUE_PROTECTED + +#include "elm_interface_atspi_selection.eo.h" +#include "elm_interface_atspi_selection.eo.c" diff --git a/legacy/elementary/src/lib/elm_interface_atspi_selection.eo b/legacy/elementary/src/lib/elm_interface_atspi_selection.eo new file mode 100644 index 0000000000..6ac62450c4 --- /dev/null +++ b/legacy/elementary/src/lib/elm_interface_atspi_selection.eo @@ -0,0 +1,74 @@ +interface Elm_Interface_Atspi_Selection () +{ + legacy_prefix: null; + eo_prefix: elm_interface_atspi_selection; + data: null; + properties { + protected selected_children_count { + get { + /* Gets the number of currently selected children */ + return int; + } + } + protected selected_child { + /* Gets child for given child index */ + get { + return Eo*; + } + keys { + int selected_child_index; /*@ index of selected child */ + } + } + } + methods { + protected child_select { + /* Adds selection for given child index */ + params { + @in int child_index; + } + return Eina_Bool; + } + protected selected_child_deselect { + /* Removes selection for given child index */ + params { + @in int child_index; + } + return Eina_Bool; + } + protected is_child_selected { + /* Determines if child specified by index is selected */ + params { + @in int child_index; + } + return Eina_Bool; + } + protected all_children_select { + /* Adds selection for all children */ + return Eina_Bool; + } + protected clear { + /* Clears the current selection */ + return Eina_Bool; + } + protected child_deselect { + /* Removes selection for given child index */ + params { + @in int child_index; + } + return Eina_Bool; + } + } + events { + selection,changed; /*@ Called when selection has been changed. */ + } + implements { + virtual::selected_children_count::get; + virtual::selected_child::get; + virtual::child_select; + virtual::selected_child_deselect; + virtual::is_child_selected; + virtual::all_children_select; + virtual::clear; + virtual::child_deselect; + } +} diff --git a/legacy/elementary/src/tests/Makefile.am b/legacy/elementary/src/tests/Makefile.am index 4fbbd68da5..debb1847d5 100644 --- a/legacy/elementary/src/tests/Makefile.am +++ b/legacy/elementary/src/tests/Makefile.am @@ -11,6 +11,7 @@ elm_suite_SOURCES = \ elm_test_colorselector.c \ elm_test_entry.c \ elm_test_init.c + elm_test_list.c elm_suite_CPPFLAGS = \ -DTESTS_BUILD_DIR=\"${top_builddir}/src/tests\" \ diff --git a/legacy/elementary/src/tests/elm_test_list.c b/legacy/elementary/src/tests/elm_test_list.c new file mode 100644 index 0000000000..d161342472 --- /dev/null +++ b/legacy/elementary/src/tests/elm_test_list.c @@ -0,0 +1,195 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include +#include "elm_suite.h" + +#define ELM_INTERFACE_ATSPI_TEXT_PROTECTED +#include "elm_interface_atspi_selection.h" +#include "elm_interface_atspi_selection.eo.h" + + +START_TEST (elm_list_atspi_selection_selected_children_count_get) +{ + Evas_Object *win, *list; + Elm_Object_Item *item; + int val; + + elm_init(1, NULL); + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + + list = elm_list_add(win); + item = elm_list_item_append(list, "First Element", NULL, NULL, NULL, NULL); + + eo_do(list, val = elm_interface_atspi_selection_selected_children_count_get()); + ck_assert(val == 0); + + elm_list_item_selected_set(item, EINA_TRUE); + eo_do(list, val = elm_interface_atspi_selection_selected_children_count_get()); + ck_assert(val == 1); + + elm_list_item_selected_set(item, EINA_FALSE); + eo_do(list, val = elm_interface_atspi_selection_selected_children_count_get()); + ck_assert(val == 0); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_list_atspi_selection_child_select) +{ + Evas_Object *win, *list; + Elm_Object_Item *item; + Eina_Bool val; + + elm_init(1, NULL); + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + + list = elm_list_add(win); + item = elm_list_item_append(list, "First Element", NULL, NULL, NULL, NULL); + + eo_do(list, val = elm_interface_atspi_selection_child_select(0)); + ck_assert(val == EINA_TRUE); + ck_assert(EINA_TRUE == elm_list_item_selected_get(item)); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_list_atspi_selection_selected_child_deselect) +{ + Evas_Object *win, *list; + Elm_Object_Item *item1, *item2; + Eina_Bool val; + + elm_init(1, NULL); + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + + list = elm_list_add(win); + elm_list_multi_select_set(list, EINA_TRUE); + item1 = elm_list_item_append(list, "First Element", NULL, NULL, NULL, NULL); + item2 = elm_list_item_append(list, "Second Element", NULL, NULL, NULL, NULL); + + elm_list_item_selected_set(item2, EINA_TRUE); + eo_do(list, val = elm_interface_atspi_selection_selected_child_deselect(0)); + ck_assert(val == EINA_TRUE); + ck_assert(EINA_FALSE == elm_list_item_selected_get(item2)); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_list_atspi_selection_is_child_selected) +{ + Evas_Object *win, *list; + Elm_Object_Item *item; + Eina_Bool val; + + elm_init(1, NULL); + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + Eina_Bool val; + + list = elm_list_add(win); + item = elm_list_item_append(list, "First Element", NULL, NULL, NULL, NULL); + + eo_do(list, val = elm_interface_atspi_selection_is_child_selected(0)); + ck_assert(val == EINA_FALSE); + + elm_list_item_selected_set(item, EINA_TRUE); + eo_do(list, val = elm_interface_atspi_selection_is_child_selected(0)); + ck_assert(val == EINA_TRUE); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_list_atspi_selection_all_children_select) +{ + Evas_Object *win, *list; + Elm_Object_Item *item1, *item2; + Eina_Bool val; + + elm_init(1, NULL); + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + Eina_Bool val; + + list = elm_list_add(win); + + item1 = elm_list_item_append(list, "First Element", NULL, NULL, NULL, NULL); + item2 = elm_list_item_append(list, "Second Element", NULL, NULL, NULL, NULL); + + eo_do(list, val = elm_interface_atspi_selection_all_children_select(0)); + ck_assert(val == EINA_FALSE); + + elm_list_multi_select_set(list, EINA_TRUE); + eo_do(list, val = elm_interface_atspi_selection_all_children_select(0)); + ck_assert(val == EINA_TRUE); + ck_assert(EINA_TRUE == elm_list_item_selected_get(item1)); + ck_assert(EINA_TRUE == elm_list_item_selected_get(item2)); + + elm_shutdown(); +} +END_TEST + + +START_TEST (elm_list_atspi_selection_child_clear) +{ + Evas_Object *win, *list; + Elm_Object_Item *item1, *item2; + Eina_Bool val; + + elm_init(1, NULL); + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + Eina_Bool val; + + list = elm_list_add(win); + elm_list_multi_select_set(list, EINA_TRUE); + item1 = elm_list_item_append(list, "First Element", NULL, NULL, NULL, NULL); + item2 = elm_list_item_append(list, "Second Element", NULL, NULL, NULL, NULL); + elm_list_item_selected_set(item1, EINA_TRUE); + elm_list_item_selected_set(item2, EINA_TRUE); + + + eo_do(list, val = elm_interface_atspi_selection_child_clear(0)); + ck_assert(val == EINA_TRUE); + ck_assert(EINA_FALSE == elm_list_item_selected_get(item1)); + ck_assert(EINA_FALSE == elm_list_item_selected_get(item2)); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_list_atspi_selection_child_deselect) +{ + Evas_Object *win, *list; + Elm_Object_Item *item1, *item2; + Eina_Bool val; + + elm_init(1, NULL); + win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC); + + list = elm_list_add(win); + elm_list_multi_select_set(list, EINA_TRUE); + item1 = elm_list_item_append(list, "First Element", NULL, NULL, NULL, NULL); + item2 = elm_list_item_append(list, "Second Element", NULL, NULL, NULL, NULL); + + elm_list_item_selected_set(item2, EINA_TRUE); + eo_do(list, val = elm_interface_atspi_selection_selected_child_deselect(1)); + ck_assert(val == EINA_TRUE); + ck_assert(EINA_FALSE == elm_list_item_selected_get(item2)); + + elm_shutdown(); +} +END_TEST + +void elm_test_list(TCase *tc) +{ + tcase_add_test(tc, elm_list_atspi_selection_selected_children_count_get); + tcase_add_test(tc, elm_list_atspi_selection_child_select); + tcase_add_test(tc, elm_list_atspi_selection_selected_child_deselect); + tcase_add_test(tc, elm_list_atspi_selection_is_child_selected); + tcase_add_test(tc, elm_list_atspi_selection_all_children_select); + tcase_add_test(tc, elm_list_atspi_selection_clear); + tcase_add_test(tc, elm_list_atspi_selection_child_deselect); +}