[EGIT] [core/efl] master 04/05: efl_access: add free function to Efl_Access_Text_Range struct
bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=256367384ae0368084c89d4733ac7ca404b9b161 commit 256367384ae0368084c89d4733ac7ca404b9b161 Author: Lukasz Stanislawski Date: Tue Jan 22 06:59:50 2019 + efl_access: add free function to Efl_Access_Text_Range struct Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D7717 --- src/lib/elementary/efl_access_text.c | 7 +++ src/lib/elementary/efl_access_text.eo | 2 +- src/lib/elementary/efl_access_text.h | 5 + src/lib/elementary/elm_atspi_bridge.c | 6 ++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/lib/elementary/efl_access_text.c b/src/lib/elementary/efl_access_text.c index 5f3f339f60..fa3798523a 100644 --- a/src/lib/elementary/efl_access_text.c +++ b/src/lib/elementary/efl_access_text.c @@ -17,4 +17,11 @@ EAPI elm_atspi_text_text_attribute_free(Efl_Access_Text_Attribute *attr) free(attr); } +EAPI void +elm_atspi_text_text_range_free(Efl_Access_Text_Range *range) +{ + free(range->content); + free(range); +} + #include "efl_access_text.eo.c" diff --git a/src/lib/elementary/efl_access_text.eo b/src/lib/elementary/efl_access_text.eo index 45e373bc6c..7b13206937 100644 --- a/src/lib/elementary/efl_access_text.eo +++ b/src/lib/elementary/efl_access_text.eo @@ -27,7 +27,7 @@ struct Efl.Access.Text_Attribute value: string; [[Text attribute value]] } -struct Efl.Access.Text_Range +struct @free(elm_atspi_text_text_range_free) Efl.Access.Text_Range { [[Text range]] start_offset: int; [[Range start offset]] diff --git a/src/lib/elementary/efl_access_text.h b/src/lib/elementary/efl_access_text.h index edbb6e10f9..f5cecc01bd 100644 --- a/src/lib/elementary/efl_access_text.h +++ b/src/lib/elementary/efl_access_text.h @@ -15,5 +15,10 @@ */ EAPI void elm_atspi_text_text_attribute_free(Efl_Access_Text_Attribute *attr); +/** + * @brief Free Efl_Access_Text_Range structure + */ +EAPI void elm_atspi_text_text_range_free(Efl_Access_Text_Range *range); + #endif #endif diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index cca6176dee..e75f935a71 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -1755,8 +1755,7 @@ _text_bounded_ranges_get(const Eldbus_Service_Interface *iface, const Eldbus_Mes { eldbus_message_iter_basic_append(iter_struct, 'i', range->start_offset); eldbus_message_iter_basic_append(iter_struct, 'i', range->end_offset); - range->content = range->content ? range->content : strdup(""); - eldbus_message_iter_basic_append(iter_struct, 's', range->content); + eldbus_message_iter_basic_append(iter_struct, 's', range->content ? range->content : ""); /* AT-SPI specification requires variant type in return, however * ATK or other implementations as well as AT Clients don't use it . * To cover spec a dummy value will be returned */ @@ -1768,8 +1767,7 @@ _text_bounded_ranges_get(const Eldbus_Service_Interface *iface, const Eldbus_Mes } eldbus_message_iter_container_close(iter_array, iter_struct); } -if (range->content) free(range->content); -free(range); +elm_atspi_text_text_range_free(range); } eldbus_message_iter_container_close(iter, iter_array); --
[EGIT] [core/efl] master 01/03: elm: add custom access state for Elm.Hover
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2016bacd177b3d8787b5e829155c9eb9cbb24875 commit 2016bacd177b3d8787b5e829155c9eb9cbb24875 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Nov 24 16:50:01 2017 +0900 elm: add custom access state for Elm.Hover Reviewers: jpeg Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D5523 --- src/lib/elementary/elm_hover.c | 10 ++ src/lib/elementary/elm_hover.eo | 1 + 2 files changed, 11 insertions(+) diff --git a/src/lib/elementary/elm_hover.c b/src/lib/elementary/elm_hover.c index 5bbbc570dd..b92b2ea1a3 100644 --- a/src/lib/elementary/elm_hover.c +++ b/src/lib/elementary/elm_hover.c @@ -865,6 +865,16 @@ _elm_hover_efl_access_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Hov return _actions[0]; } +EOLIAN static Efl_Access_State_Set +_elm_hover_efl_access_state_set_get(Eo *obj, Elm_Hover_Data *pd EINA_UNUSED) +{ + Efl_Access_State_Set states; + states = efl_access_state_set_get(efl_super(obj, MY_CLASS)); + + STATE_TYPE_SET(states, EFL_ACCESS_STATE_MODAL); + return states; +} + /* Efl.Part begin */ ELM_PART_OVERRIDE(elm_hover, ELM_HOVER, Elm_Hover_Data) diff --git a/src/lib/elementary/elm_hover.eo b/src/lib/elementary/elm_hover.eo index a1c33f0b4b..c517b9c0a8 100644 --- a/src/lib/elementary/elm_hover.eo +++ b/src/lib/elementary/elm_hover.eo @@ -69,6 +69,7 @@ class Elm.Hover (Efl.Ui.Layout, Efl.Ui.Focus.Layer, Efl.Ui.Clickable, Efl.Access Elm.Widget.widget_parent { get; set; } Elm.Widget.widget_sub_object_del; Efl.Access.Widget.Action.elm_actions { get; } + Efl.Access.state_set { get; } Efl.Part.part; } events { --
[EGIT] [core/efl] master 04/05: elm: add "activate" action to ctxpopup items
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2f294aeb88fab4537a68283e30493f6fc951f0f8 commit 2f294aeb88fab4537a68283e30493f6fc951f0f8 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Nov 20 12:03:29 2017 +0900 elm: add "activate" action to ctxpopup items Summary: Change-Id: I0974c3bec02a05d3d46d7cc0fd86572e32248a3b Subscribers: jenkins, cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5493 --- src/lib/elementary/elc_ctxpopup.c | 30 -- src/lib/elementary/elm_ctxpopup_item.eo | 3 ++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/lib/elementary/elc_ctxpopup.c b/src/lib/elementary/elc_ctxpopup.c index d6eae68618..b8e6f8018b 100644 --- a/src/lib/elementary/elc_ctxpopup.c +++ b/src/lib/elementary/elc_ctxpopup.c @@ -1251,9 +1251,8 @@ elm_ctxpopup_item_next_get(const Evas_Object *obj) } static void -_item_wrap_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +_item_select(Elm_Ctxpopup_Item_Data *item) { - Elm_Ctxpopup_Item_Data *item = data; Elm_Object_Item *eo_item2; Eina_List *l; @@ -1269,6 +1268,13 @@ _item_wrap_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UN item->wcb.org_func_cb((void *)item->wcb.org_data, item->wcb.cobj, EO_OBJ(item)); } +static void +_item_wrap_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Elm_Ctxpopup_Item_Data *item = data; + _item_select(item); +} + EOLIAN static Eo * _elm_ctxpopup_item_efl_object_constructor(Eo *obj, Elm_Ctxpopup_Item_Data *it) { @@ -1575,6 +1581,26 @@ _elm_ctxpopup_efl_access_state_set_get(Eo *obj, Elm_Ctxpopup_Data *sd EINA_UNUSE return ret; } +static Eina_Bool +_item_access_action_activate(Evas_Object *obj, const char *params EINA_UNUSED) +{ + ELM_CTXPOPUP_ITEM_DATA_GET(obj, it); + if (!it) return EINA_FALSE; + + _item_select(it); + return EINA_TRUE; +} + +EOLIAN static const Efl_Access_Action_Data* +_elm_ctxpopup_item_efl_access_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Item_Data *sd EINA_UNUSED) +{ + static Efl_Access_Action_Data atspi_actions[] = { + { "activate", NULL, NULL, _item_access_action_activate}, + { NULL, NULL, NULL, NULL } + }; + return _actions[0]; +} + /* Internal EO APIs and hidden overrides */ ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(elm_ctxpopup, Elm_Ctxpopup_Data) diff --git a/src/lib/elementary/elm_ctxpopup_item.eo b/src/lib/elementary/elm_ctxpopup_item.eo index 31c87ebff7..8c87b23a4c 100644 --- a/src/lib/elementary/elm_ctxpopup_item.eo +++ b/src/lib/elementary/elm_ctxpopup_item.eo @@ -1,4 +1,4 @@ -class Elm.Ctxpopup.Item(Elm.Widget.Item, Efl.Ui.Item) +class Elm.Ctxpopup.Item(Elm.Widget.Item, Efl.Ui.Item, Efl.Access.Widget.Action) { [[Elementary context popup item class]] legacy_prefix: elm_ctxpopup_item; @@ -25,5 +25,6 @@ class Elm.Ctxpopup.Item(Elm.Widget.Item, Efl.Ui.Item) Efl.Ui.Item.selected { get; set; } Efl.Ui.Item.prev { get; } Efl.Ui.Item.next { get; } +Efl.Access.Widget.Action.elm_actions { get; } } } --
[EGIT] [core/efl] master 03/05: elm: overload access children getter
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=26e49ca56267de0fdbc48ce1e232063e14e7027f commit 26e49ca56267de0fdbc48ce1e232063e14e7027f Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Nov 20 12:03:04 2017 +0900 elm: overload access children getter Subscribers: jenkins, cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5482 --- src/lib/elementary/elc_hoversel.c | 6 ++ src/lib/elementary/elm_hoversel.eo | 1 + 2 files changed, 7 insertions(+) diff --git a/src/lib/elementary/elc_hoversel.c b/src/lib/elementary/elc_hoversel.c index dafc701368..c55d0aaa79 100644 --- a/src/lib/elementary/elc_hoversel.c +++ b/src/lib/elementary/elc_hoversel.c @@ -1031,6 +1031,12 @@ _elm_hoversel_efl_access_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_ return _actions[0]; } +EOLIAN Eina_List* +_elm_hoversel_efl_access_children_get(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *pd) +{ + return eina_list_clone(pd->items); +} + EOLIAN void _elm_hoversel_auto_update_set(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd, Eina_Bool auto_update) { diff --git a/src/lib/elementary/elm_hoversel.eo b/src/lib/elementary/elm_hoversel.eo index a1461e29a2..bc6447f46d 100644 --- a/src/lib/elementary/elm_hoversel.eo +++ b/src/lib/elementary/elm_hoversel.eo @@ -101,6 +101,7 @@ class Elm.Hoversel (Efl.Ui.Button, Efl.Ui.Selectable, Elm.Widget.widget_event; Efl.Ui.Autorepeat.autorepeat_supported { get; } Efl.Access.Widget.Action.elm_actions { get; } + Efl.Access.children { get; } } events { dismissed; [[Called when hoversel is dismissed]] --
[EGIT] [core/efl] master 02/02: elm: return Efl.Access.Actions only if action_area is not set
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=57e0d19c45687454ab8bae53a3c2a1c1b1798b78 commit 57e0d19c45687454ab8bae53a3c2a1c1b1798b78 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Nov 16 18:13:23 2017 +0900 elm: return Efl.Access.Actions only if action_area is not set Summary: The accessibility clients should not have a possibility to dismiss popup in case when action area is set. Reviewers: jpeg Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5481 --- src/lib/elementary/elc_popup.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/elc_popup.c b/src/lib/elementary/elc_popup.c index 3e142f8d49..b2de973bbd 100644 --- a/src/lib/elementary/elc_popup.c +++ b/src/lib/elementary/elc_popup.c @@ -1788,12 +1788,14 @@ _action_dismiss(Evas_Object *obj, const char *params EINA_UNUSED) } EOLIAN const Efl_Access_Action_Data * -_elm_popup_efl_access_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Popup_Data *pd EINA_UNUSED) +_elm_popup_efl_access_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Popup_Data *pd) { static Efl_Access_Action_Data atspi_actions[] = { { "dismiss", NULL, NULL, _action_dismiss}, { NULL, NULL, NULL, NULL } }; + if (pd->action_area) + return NULL; return _actions[0]; } --
[EGIT] [core/efl] master 03/04: elm: add Efl.Access.Value interface to progressbar
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=20c9dd1e842514bd0fc93e31ba95d53650dbfb77 commit 20c9dd1e842514bd0fc93e31ba95d53650dbfb77 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Nov 16 12:05:21 2017 +0900 elm: add Efl.Access.Value interface to progressbar Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5479 --- src/lib/elementary/efl_ui_progressbar.c | 7 +++ src/lib/elementary/efl_ui_progressbar.eo | 4 +++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/efl_ui_progressbar.c b/src/lib/elementary/efl_ui_progressbar.c index 67b98b12e6..10d67b4289 100644 --- a/src/lib/elementary/efl_ui_progressbar.c +++ b/src/lib/elementary/efl_ui_progressbar.c @@ -4,6 +4,7 @@ #define EFL_ACCESS_PROTECTED #define ELM_LAYOUT_PROTECTED +#define EFL_ACCESS_VALUE_PROTECTED #include @@ -552,6 +553,12 @@ _efl_ui_progressbar_part_efl_ui_range_range_value_get(Eo *obj, void *_pd EINA_UN return _progressbar_part_value_get(sd, pd->part); } +EOLIAN static void +_efl_ui_progressbar_efl_access_value_value_and_text_get(Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data *_pd, double *value, const char **text EINA_UNUSED) +{ + if (value) *value = _pd->val; +} + #include "efl_ui_progressbar_part.eo.c" /* Efl.Part end */ diff --git a/src/lib/elementary/efl_ui_progressbar.eo b/src/lib/elementary/efl_ui_progressbar.eo index eb86cf8e55..369b6d4ab3 100644 --- a/src/lib/elementary/efl_ui_progressbar.eo +++ b/src/lib/elementary/efl_ui_progressbar.eo @@ -1,4 +1,5 @@ -class Efl.Ui.Progressbar (Efl.Ui.Layout, Efl.Ui.Range, Efl.Ui.Format, Efl.Ui.Direction) +class Efl.Ui.Progressbar (Efl.Ui.Layout, Efl.Ui.Range, Efl.Ui.Format, + Efl.Ui.Direction, Efl.Access.Value) { [[Elementary progressbar class]] methods { @@ -56,6 +57,7 @@ class Efl.Ui.Progressbar (Efl.Ui.Layout, Efl.Ui.Range, Efl.Ui.Format, Efl.Ui.Dir Efl.Ui.Direction.direction { get; set; } Efl.Ui.Format.format_cb { set; } Efl.Part.part; + Efl.Access.Value.value_and_text { get; } } events { changed; [[Called when progressbar changed]] --
[EGIT] [core/efl] master 01/04: elm: Rename elm_interface_atspi_widget_action mixin
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=c838e30a24da9d2664bb839d2a4ada619189937c commit c838e30a24da9d2664bb839d2a4ada619189937c Author: Lukasz Stanislawski <lukasz.stanislaw...@gmail.com> Date: Thu Nov 16 11:31:26 2017 +0900 elm: Rename elm_interface_atspi_widget_action mixin Reviewers: jpeg Subscribers: jenkins, cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5400 --- src/Makefile_Elementary.am | 6 ++-- src/lib/elementary/efl_access_action.eo| 4 +-- ..._widget_action.c => efl_access_widget_action.c} | 32 +++--- ...idget_action.eo => efl_access_widget_action.eo} | 11 ..._widget_action.h => efl_access_widget_action.h} | 8 +++--- src/lib/elementary/efl_ui_button.c | 8 +++--- src/lib/elementary/efl_ui_button.eo| 4 +-- src/lib/elementary/efl_ui_calendar.c | 9 +++--- src/lib/elementary/efl_ui_calendar.eo | 4 +-- src/lib/elementary/efl_ui_check.c | 8 +++--- src/lib/elementary/efl_ui_check.eo | 4 +-- src/lib/elementary/efl_ui_image.c | 8 +++--- src/lib/elementary/efl_ui_image.eo | 4 +-- src/lib/elementary/efl_ui_image_zoomable.c | 8 +++--- src/lib/elementary/efl_ui_image_zoomable.eo| 2 +- src/lib/elementary/efl_ui_multibuttonentry.c | 8 +++--- src/lib/elementary/efl_ui_radio.c | 8 +++--- src/lib/elementary/efl_ui_radio.eo | 4 +-- src/lib/elementary/efl_ui_slider.c | 8 +++--- src/lib/elementary/efl_ui_slider.eo| 4 +-- src/lib/elementary/efl_ui_slider_interval.c| 2 +- src/lib/elementary/efl_ui_video.c | 8 +++--- src/lib/elementary/efl_ui_video.eo | 4 +-- src/lib/elementary/efl_ui_win.c| 8 +++--- src/lib/elementary/efl_ui_win.eo | 4 +-- src/lib/elementary/elc_combobox.c | 8 +++--- src/lib/elementary/elc_ctxpopup.c | 8 +++--- src/lib/elementary/elc_fileselector.c | 8 +++--- src/lib/elementary/elc_hoversel.c | 8 +++--- src/lib/elementary/elc_naviframe.c | 8 +++--- src/lib/elementary/elc_player.c| 8 +++--- src/lib/elementary/elc_popup.c | 8 +++--- src/lib/elementary/elementary_config.h | 1 + src/lib/elementary/elm_access.c| 8 +++--- src/lib/elementary/elm_access.eo | 4 +-- src/lib/elementary/elm_calendar.c | 8 +++--- src/lib/elementary/elm_calendar.eo | 4 +-- src/lib/elementary/elm_color_item.eo | 4 +-- src/lib/elementary/elm_colorselector.c | 14 +- src/lib/elementary/elm_colorselector.eo| 4 +-- src/lib/elementary/elm_combobox.eo | 4 +-- src/lib/elementary/elm_ctxpopup.eo | 4 +-- src/lib/elementary/elm_diskselector.c | 8 +++--- src/lib/elementary/elm_diskselector.eo | 4 +-- src/lib/elementary/elm_fileselector.eo | 4 +-- src/lib/elementary/elm_flipselector.c | 8 +++--- src/lib/elementary/elm_flipselector.eo | 4 +-- src/lib/elementary/elm_general.eot | 2 +- src/lib/elementary/elm_gengrid.c | 8 +++--- src/lib/elementary/elm_gengrid.eo | 4 +-- src/lib/elementary/elm_genlist.c | 8 +++--- src/lib/elementary/elm_genlist.eo | 4 +-- src/lib/elementary/elm_hover.c | 8 +++--- src/lib/elementary/elm_hover.eo| 4 +-- src/lib/elementary/elm_hoversel.eo | 4 +-- src/lib/elementary/elm_index.c | 8 +++--- src/lib/elementary/elm_index_item.eo | 4 +-- src/lib/elementary/elm_interfaces.h| 2 +- src/lib/elementary/elm_list.c | 8 +++--- src/lib/elementary/elm_list.eo | 4 +-- src/lib/elementary/elm_map.c | 8 +++--- src/lib/elementary/elm_map.eo | 4 +-- src/lib/elementary/elm_multibuttonentry_item.eo| 4 +-- src/lib/elementary/elm_naviframe.eo| 4 +-- src/lib/elementary/elm_panel.c | 8 +++--- src/lib/elementary/elm_panel.eo| 4 +-- src/lib/elementary/elm_player.eo | 4 +-- src/lib/elementary/elm_popup.eo| 4 +-- src/lib/elementary/elm_scroller.c | 8 +++--- src/lib/elementary/elm_scroller.eo | 4 +-- src/lib/elementary/elm_slideshow.c | 8 +++--- src/lib/elementary/elm_slideshow.eo
[EGIT] [core/efl] master 07/08: elm: evaluate MULTISELECTABLE state for genlist and gengrid
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=6505f535f681bbca21c7f60878fe13414641b8f8 commit 6505f535f681bbca21c7f60878fe13414641b8f8 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Nov 13 12:08:57 2017 +0900 elm: evaluate MULTISELECTABLE state for genlist and gengrid Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5452 --- src/lib/elementary/elm_gengrid.c | 3 +++ src/lib/elementary/elm_genlist.c | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c index 69d53dc8cf..025db3035e 100644 --- a/src/lib/elementary/elm_gengrid.c +++ b/src/lib/elementary/elm_gengrid.c @@ -5606,6 +5606,9 @@ _elm_gengrid_efl_access_state_set_get(Eo *obj, Elm_Gengrid_Data *sd EINA_UNUSED) STATE_TYPE_SET(ret, EFL_ACCESS_STATE_MANAGES_DESCENDANTS); + if (elm_gengrid_multi_select_get(obj)) + STATE_TYPE_SET(ret, EFL_ACCESS_STATE_MULTISELECTABLE); + return ret; } diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c index 25aa0b1bd5..6fb54d3b2b 100644 --- a/src/lib/elementary/elm_genlist.c +++ b/src/lib/elementary/elm_genlist.c @@ -8634,6 +8634,9 @@ _elm_genlist_efl_access_state_set_get(Eo *obj, Elm_Genlist_Data *sd EINA_UNUSED) STATE_TYPE_SET(ret, EFL_ACCESS_STATE_MANAGES_DESCENDANTS); + if (elm_genlist_multi_select_get(obj)) + STATE_TYPE_SET(ret, EFL_ACCESS_STATE_MULTISELECTABLE); + return ret; } --
[EGIT] [core/efl] master 05/08: elm: set accurate access role for elm_popup
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2ea179d3734d7abfd620a31f1458cc662d69521f commit 2ea179d3734d7abfd620a31f1458cc662d69521f Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Nov 13 12:08:24 2017 +0900 elm: set accurate access role for elm_popup Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5454 --- src/lib/elementary/elc_popup.c| 2 +- src/tests/elementary/elm_test_popup.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/elementary/elc_popup.c b/src/lib/elementary/elc_popup.c index 3a2f2213c1..e21c6311bc 100644 --- a/src/lib/elementary/elc_popup.c +++ b/src/lib/elementary/elc_popup.c @@ -1529,7 +1529,7 @@ _elm_popup_efl_object_constructor(Eo *obj, Elm_Popup_Data *_pd EINA_UNUSED) obj = efl_constructor(efl_super(obj, MY_CLASS)); efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY); evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks); - efl_access_role_set(obj, EFL_ACCESS_ROLE_NOTIFICATION); + efl_access_role_set(obj, EFL_ACCESS_ROLE_DIALOG); return obj; } diff --git a/src/tests/elementary/elm_test_popup.c b/src/tests/elementary/elm_test_popup.c index 1cd29163d2..17b8433b1d 100644 --- a/src/tests/elementary/elm_test_popup.c +++ b/src/tests/elementary/elm_test_popup.c @@ -18,7 +18,7 @@ START_TEST (elm_atspi_role_get) popup = elm_popup_add(win); role = efl_access_role_get(popup); - ck_assert(role == EFL_ACCESS_ROLE_NOTIFICATION); + ck_assert(role == EFL_ACCESS_ROLE_DIALOG); elm_shutdown(); } --
[EGIT] [core/efl] master 06/08: elm: set accurate access role for elm_icon
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=b9f31b183608ab4b29fc8741e1d7f9283d07a6b6 commit b9f31b183608ab4b29fc8741e1d7f9283d07a6b6 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Nov 13 12:08:43 2017 +0900 elm: set accurate access role for elm_icon Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5453 --- src/lib/elementary/elm_icon.c| 2 +- src/tests/elementary/elm_test_icon.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/elementary/elm_icon.c b/src/lib/elementary/elm_icon.c index 5fdc294776..1db6b6f87b 100644 --- a/src/lib/elementary/elm_icon.c +++ b/src/lib/elementary/elm_icon.c @@ -615,7 +615,7 @@ _elm_icon_efl_object_constructor(Eo *obj, Elm_Icon_Data *sd) efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY); evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks); - efl_access_role_set(obj, EFL_ACCESS_ROLE_IMAGE); + efl_access_role_set(obj, EFL_ACCESS_ROLE_ICON); return obj; } diff --git a/src/tests/elementary/elm_test_icon.c b/src/tests/elementary/elm_test_icon.c index eec0072707..2b2150665d 100644 --- a/src/tests/elementary/elm_test_icon.c +++ b/src/tests/elementary/elm_test_icon.c @@ -18,7 +18,7 @@ START_TEST (elm_atspi_role_get) icon = elm_icon_add(win); role = efl_access_role_get(icon); - ck_assert(role == EFL_ACCESS_ROLE_IMAGE); + ck_assert(role == EFL_ACCESS_ROLE_ICON); elm_shutdown(); } --
[EGIT] [core/efl] master 01/01: elm: mark access interfaces as beta
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=5c997b3aaac6277b8c4965ee8e90d05e1959ac05 commit 5c997b3aaac6277b8c4965ee8e90d05e1959ac05 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Wed Nov 1 21:31:46 2017 +0900 elm: mark access interfaces as beta Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5365 --- src/lib/elementary/efl_access.eo | 40 +- src/lib/elementary/efl_access_component.c | 1 + src/lib/elementary/efl_access_component.eo | 18 ++-- src/lib/elementary/efl_access_editable_text.eo | 12 src/lib/elementary/efl_access_image.eo | 6 ++-- src/lib/elementary/efl_access_selection.eo | 16 +-- src/lib/elementary/efl_access_text.eo | 32 ++--- src/lib/elementary/efl_access_value.eo | 6 ++-- src/lib/elementary/elementary_config.h | 7 + 9 files changed, 73 insertions(+), 65 deletions(-) diff --git a/src/lib/elementary/efl_access.eo b/src/lib/elementary/efl_access.eo index 01a1b4abe2..0ae001a433 100644 --- a/src/lib/elementary/efl_access.eo +++ b/src/lib/elementary/efl_access.eo @@ -241,7 +241,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) eo_prefix: efl_access; data: Efl_Access_Data; methods { - @property localized_role_name @protected { + @property localized_role_name @protected @beta { [[Gets an localized string describing accessible object role name.]] get { } @@ -249,7 +249,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) localized_name: string; [[Localized accessible object role name]] } } - @property name { + @property name @beta { [[Accessible name of the object.]] get { } @@ -259,7 +259,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) name: string; [[Accessible name]] } } - @property relation_set @protected { + @property relation_set @protected @beta { [[Gets an all relations between accessible object and other accessible objects.]] get { } @@ -267,7 +267,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) relations: Efl.Access.Relation_Set; [[Accessible relation set]] } } - @property role { + @property role @beta { [[The role of the object in accessibility domain.]] get { } @@ -277,7 +277,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) role: Efl.Access.Role; [[Accessible role]] } } - @property children @protected { + @property children @protected @beta { [[Gets object's accessible children.]] get { } @@ -285,7 +285,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) children: list @owned; [[List of widget's children]] } } - @property role_name @protected { + @property role_name @protected @beta { [[Gets human-readable string indentifying object accessibility role.]] get { } @@ -293,7 +293,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) role_name: string; [[Accessible role name]] } } - @property attributes @protected { + @property attributes @protected @beta { [[Gets key-value pairs indentifying object extra attributes. Must be free by a user.]] get { } @@ -302,7 +302,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) attributes: list<ptr(Efl.Access.Attribute) @owned> @owned; [[List of object attributes]] } } - @property index_in_parent @protected { + @property index_in_parent @protected @beta { [[Gets index of the child in parent's children list.]] get { } @@ -310,7 +310,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) idx: int; [[Index in children list]] } } - @property description { + @property description @beta { [[Contextual information about object.]] get { } @@ -320,7 +320,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) description: string; [[Accessible contextual information]] } } - @property parent { + @property parent @beta { [[Object's accessible parent.]] get { } @@ -330,7 +330,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) parent: Efl.Access; [[Accessible parent]] } } - @property state_set @protected { + @property state_set @protected @beta { [[Gets set describing object accessible states.]] get { } @@ -338,7 +338,7 @@ mixin Efl.Access (Efl.Interface, Efl.Object) states: Efl.Access.State_Set; [[Accessible state set]] } } - event_handle
[EGIT] [core/efl] master 01/01: elm: add prefixes to Efl.Access.Action to avoid clashes
jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=bcb24a40dc2f3e5ad018ca9b8f91770cb44617ff commit bcb24a40dc2f3e5ad018ca9b8f91770cb44617ff Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Oct 24 12:01:50 2017 +0900 elm: add prefixes to Efl.Access.Action to avoid clashes Summary: Prefix methods/properties of Efl.Access.Action mixin to avoid potential clashes in genrated bindings. This is first of series of patches removing potential name clashes in accessibility interfaces. Reviewers: jpeg Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D5213 --- src/lib/elementary/efl_access_action.c | 3 ++- src/lib/elementary/efl_access_action.eo | 12 ++-- src/lib/elementary/elm_atspi_bridge.c | 2 ++ src/lib/elementary/elm_interface_atspi_widget_action.c | 9 + src/lib/elementary/elm_interface_atspi_widget_action.eo | 6 +++--- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/lib/elementary/efl_access_action.c b/src/lib/elementary/efl_access_action.c index 92b62f8b9f..a6aba74f33 100644 --- a/src/lib/elementary/efl_access_action.c +++ b/src/lib/elementary/efl_access_action.c @@ -3,13 +3,14 @@ #endif #define EFL_ACCESS_ACTION_PROTECTED +#define EFL_ACCESS_ACTION_BETA #include #include "elm_widget.h" #include "elm_priv.h" EOLIAN const char * -_efl_access_action_localized_name_get(Eo *obj, void *pd EINA_UNUSED, int id) +_efl_access_action_action_localized_name_get(Eo *obj, void *pd EINA_UNUSED, int id) { const char *ret = NULL; diff --git a/src/lib/elementary/efl_access_action.eo b/src/lib/elementary/efl_access_action.eo index d31fb61f0c..ca5d3457d8 100644 --- a/src/lib/elementary/efl_access_action.eo +++ b/src/lib/elementary/efl_access_action.eo @@ -6,7 +6,7 @@ mixin Efl.Access.Action () [[Accessible action mixin]] data: null; methods { - @property name @protected @pure_virtual { + @property action_name @protected @pure_virtual @beta { [[Gets action name for given id]] get { } @@ -17,7 +17,7 @@ mixin Efl.Access.Action () id: int; [[ID to get action name for]] } } - @property localized_name @protected { + @property action_localized_name @protected @beta { [[Gets localized action name for given id]] get { } @@ -28,7 +28,7 @@ mixin Efl.Access.Action () id: int; [[ID to get localized name for]] } } - @property description @protected @pure_virtual { + @property action_description @protected @pure_virtual @beta { [[Action description for given id]] get { } @@ -42,7 +42,7 @@ mixin Efl.Access.Action () id: int; [[ID to set or get description for]] } } - @property actions @protected { + @property actions @protected @beta { [[Get list of available widget actions]] get @pure_virtual { } @@ -50,14 +50,14 @@ mixin Efl.Access.Action () actions: list; [[Contains statically allocated strings]] } } - action_do @protected @pure_virtual { + action_do @protected @pure_virtual @beta { [[Performs action on given widget.]] params { @in id: int; [[ID for widget]] } return: bool; [[$true if action was performed, $false otherwise]] } - keybinding_get @protected @pure_virtual { + action_keybinding_get @protected @pure_virtual @beta { [[Gets configured keybinding for specific action and widget.]] params { @in id: int; [[ID for widget]] diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index 3d3b3ff521..c8681932e5 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -11,6 +11,8 @@ #define EFL_ACCESS_TEXT_PROTECTED #define EFL_ACCESS_EDITABLE_TEXT_PROTECTED +#define EFL_ACCESS_ACTION_BETA + #include "atspi/atspi-constants.h" #include diff --git a/src/lib/elementary/elm_interface_atspi_widget_action.c b/src/lib/elementary/elm_interface_atspi_widget_action.c index 66f3891a13..aee335b16f 100644 --- a/src/lib/elementary/elm_interface_atspi_widget_action.c +++ b/src/lib/elementary/elm_interface_atspi_widget_action.c @@ -4,6 +4,7 @@ #define EFL_ACCESS_ACTION_PROTECTED #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED +#define EFL_ACCESS_ACTION_BETA #include #include "elm_widget.h" @@ -40,7 +41,7 @@ _elm_interface_atspi_widget_action_efl_access_action_action_do(Eo *obj, void *pd } EOLIAN static char* -_elm_interface_atspi_widget_action_efl_access_action_keybinding_get(Eo *obj, void *pd EINA_UNUSED, int id) +_elm_interface_atspi_widget_act
[EGIT] [core/elementary] master 01/01: index: accessibilitize index items
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=fa6bcdda8cf5cc69c37a96a96c1bd7ed93df52c9 commit fa6bcdda8cf5cc69c37a96a96c1bd7ed93df52c9 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Dec 28 14:40:34 2015 +0100 index: accessibilitize index items Expose elm_index items as accessiblie buttons. Provide name and "activate" action. --- src/lib/elm_index.c| 70 +- src/lib/elm_index.eo | 1 + src/lib/elm_index_item.eo | 4 ++- src/tests/elm_test_index.c | 2 +- 4 files changed, 74 insertions(+), 3 deletions(-) diff --git a/src/lib/elm_index.c b/src/lib/elm_index.c index c09df9e..17f844a 100644 --- a/src/lib/elm_index.c +++ b/src/lib/elm_index.c @@ -3,6 +3,8 @@ #endif #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED +#define ELM_INTERFACE_ATSPI_COMPONENT_PROTECTED #define ELM_WIDGET_ITEM_PROTECTED #include @@ -529,6 +531,7 @@ _elm_index_item_eo_base_constructor(Eo *obj, Elm_Index_Item_Data *it) { obj = eo_do_super_ret(obj, ELM_INDEX_ITEM_CLASS, obj, eo_constructor()); it->base = eo_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS); + eo_do(obj, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_PUSH_BUTTON)); return obj; } @@ -1229,7 +1232,7 @@ _elm_index_eo_base_constructor(Eo *obj, Elm_Index_Data *_pd EINA_UNUSED) eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), evas_obj_smart_callbacks_descriptions_set(_smart_callbacks), - elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_LIST)); + elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_SCROLL_BAR)); return obj; } @@ -1369,6 +1372,12 @@ _elm_index_item_append(Eo *obj, Elm_Index_Data *sd, const char *letter, Evas_Sma ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { +elm_interface_atspi_accessible_added(eo_item); +elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1385,6 +1394,12 @@ _elm_index_item_prepend(Eo *obj, Elm_Index_Data *sd, const char *letter, Evas_Sm ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { +elm_interface_atspi_accessible_added(eo_item); +elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1414,6 +1429,12 @@ _elm_index_item_insert_after(Eo *obj, Elm_Index_Data *sd, Elm_Object_Item *after ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { +elm_interface_atspi_accessible_added(eo_item); +elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1432,6 +1453,12 @@ _elm_index_item_insert_before(Eo *obj, Elm_Index_Data *sd, Elm_Object_Item *befo ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { +elm_interface_atspi_accessible_added(eo_item); +elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + return eo_item; } @@ -1470,6 +1497,12 @@ _elm_index_item_sorted_insert(Eo *obj, Elm_Index_Data *sd, const char *letter, E ELM_INDEX_ITEM_DATA_GET(eo_item, it); VIEW(it) = edje_object_add(evas_object_evas_get(obj)); + if (_elm_config->atspi_mode) + { +elm_interface_atspi_accessible_added(eo_item); +elm_interface_atspi_accessible_children_changed_added_signal_emit(obj, eo_item); + } + if (!eo_item) return NULL; else return eo_item; } @@ -1654,5 +1687,40 @@ _elm_index_class_constructor(Eo_Class *klass) evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } +static Eina_Bool +_item_action_activate(Eo *obj, const char *params EINA_UNUSED EINA_UNUSED) +{ + elm_index_item_selected_set(obj, EINA_TRUE); + return EINA_TRUE; +} + +EOLIAN static Eina_List* +_elm_index_elm_interface_atspi_accessible_children_get(Eo *obj, Elm_Index_Data *data) +{ + Eina_List *ret; + eo_do_super(obj, ELM_INDEX_CLASS, ret = elm_interface_atspi_accessible_children_get()); + return eina_list_merge(eina_list_clone(data->items), ret); +} + +EOLIAN static char* +_elm_index_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Index_Item_Data *data) +{ + char *name; + eo_do_super(eo_it, ELM_INDEX_ITEM_CLASS, name = elm_interface_atspi_accessible_name_get()); + if (name) return name; + + return data->letter ? strdup(data->letter) : NULL;
[EGIT] [core/elementary] master 02/18: genlist: new SCROLLTO_BOTTOM alignment
cedric pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=9230a3d31e5428e7f3c69ff6dde8c6f0c59403fc commit 9230a3d31e5428e7f3c69ff6dde8c6f0c59403fc Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Jan 4 14:05:29 2016 -0800 genlist: new SCROLLTO_BOTTOM alignment Summary: Add new scrollto type allowing to align genlist item to bottom of viewport. Feature compleates and closes list of all alignment types for genlist items. @feature Test Plan: elementary_test => Genlist Show/Bring Reviewers: cedric, seoz, SanghyeonLee Subscribers: seoz Differential Revision: https://phab.enlightenment.org/D3447 Signed-off-by: Cedric BAIL <ced...@osg.samsung.com> --- src/bin/test.c | 2 + src/bin/test_genlist.c | 153 src/lib/elm_genlist.c | 4 ++ src/lib/elm_genlist_item.eo | 3 +- 4 files changed, 161 insertions(+), 1 deletion(-) diff --git a/src/bin/test.c b/src/bin/test.c index 8019ac0..53f419d 100644 --- a/src/bin/test.c +++ b/src/bin/test.c @@ -124,6 +124,7 @@ void test_genlist_item_styles(void *data, Evas_Object *obj, void *event_info); void test_genlist_multi_select(void *data, Evas_Object *obj, void *event_info); void test_genlist_del(void *data, Evas_Object *obj, void *event_info); void test_genlist_filter(void *data, Evas_Object *obj, void *event_info); +void test_genlist_show_bring(void *data, Evas_Object *obj, void *event_info); void test_gesture_layer(void *data, Evas_Object *obj, void *event_info); void test_gesture_layer2(void *data, Evas_Object *obj, void *event_info); void test_gesture_layer3(void *data, Evas_Object *obj, void *event_info); @@ -695,6 +696,7 @@ add_tests: ADD_TEST(NULL, "Lists - Genlist", "Genlist Multi Select", test_genlist_multi_select); ADD_TEST(NULL, "Lists - Genlist", "Genlist Del", test_genlist_del); ADD_TEST(NULL, "Lists - Genlist", "Genlist Filter", test_genlist_filter); + ADD_TEST(NULL, "Lists - Genlist", "Genlist Show/Bring", test_genlist_show_bring); //--// diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c index 36cd529..9dcebc1 100644 --- a/src/bin/test_genlist.c +++ b/src/bin/test_genlist.c @@ -21,6 +21,7 @@ struct _api_data void *gl; void *filter_data; /* The data used for filtering */ + int scrollto; }; typedef struct _api_data api_data; @@ -5080,3 +5081,155 @@ test_genlist_filter(void *data EINA_UNUSED, evas_object_smart_callback_add(entry, "changed,user", _entry_change_cb, api); } +static void +_rd_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + api_data *ad = data; + ad->scrollto = elm_radio_state_value_get(obj); +} + +static Evas_Object * +_scrollto_mode_frame_new(Evas_Object *win, void *data) +{ + Evas_Object *fr, *bx, *rd, *rdg; + api_data *sd = data; + + fr = elm_frame_add(win); + elm_object_text_set(fr, "Scrollto Mode"); + evas_object_show(fr); + + bx = elm_box_add(win); + elm_object_content_set(fr, bx); + evas_object_show(bx); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 0); + elm_object_text_set(rd, "SCROLLTO_NONE"); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + rdg = rd; + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 1); + elm_object_text_set(rd, "SCROLLTO_IN"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 2); + elm_object_text_set(rd, "SCROLLTO_TOP"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 4); + elm_object_text_set(rd, "SCROLLTO_MIDDLE"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 8); + elm_object_text_set(rd, "SCROLLTO_BOTTOM"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + return fr; +} + +void +_scrollto_item_show(void *data, +Evas_Object *obj EINA_UNUSED, +void *event_info EINA_UNUSED) +{ + api_data *api = data; + Elm_Object_Item *it = elm_genlist_sel
[EGIT] [core/elementary] master 01/01: widget: remove redundat resize_object_set call
hermet pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=f7726c72290cd7341132939c5b6f8c0468f60e87 commit f7726c72290cd7341132939c5b6f8c0468f60e87 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Dec 24 14:03:54 2015 +0900 widget: remove redundat resize_object_set call Summary: This code is wrong and enforces developers to manipulate resize_obj filed directly, instead of using elm_widget_resize_object_set. Test Plan: check if objects inheriting from elm_widget do not set field directly. Reviewers: cedric, raster, seoz Subscribers: seoz Projects: #elementary Differential Revision: https://phab.enlightenment.org/D3362 --- src/lib/elm_widget.c | 8 1 file changed, 8 deletions(-) diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 9ca241e..f917d29 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -372,14 +372,6 @@ _elm_widget_evas_object_smart_add(Eo *obj, Elm_Widget_Smart_Data *priv) _obj_mouse_up, obj); evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_IN, _obj_mouse_in, obj); - /* just a helper for inheriting classes */ - if (priv->resize_obj) - { -Evas_Object *r_obj = priv->resize_obj; -priv->resize_obj = NULL; - -elm_widget_resize_object_set(obj, r_obj, EINA_TRUE); - } } static void --
[EGIT] [core/elementary] master 01/01: atspi: return previous name in overloaded getters
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=db3c4bdd2ffaba8cc02c18467e5fd0290b42218b commit db3c4bdd2ffaba8cc02c18467e5fd0290b42218b Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Dec 17 09:36:02 2015 +0100 atspi: return previous name in overloaded getters Some overloaded accessible name getters did not respect values set by developer. @fix --- src/lib/elm_entry.c | 5 - src/lib/elm_gengrid.c | 5 - src/lib/elm_genlist.c | 6 -- src/lib/elm_list.c| 5 - src/lib/elm_menu.c| 5 - src/lib/elm_spinner.c | 3 +++ src/lib/elm_toolbar.c | 5 - src/lib/elm_win.c | 7 +-- 8 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index ec6e502..baedc27 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -5718,8 +5718,11 @@ _elm_entry_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Entry_Data } EOLIAN static char* -_elm_entry_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd) +_elm_entry_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Entry_Data *sd) { + char *name; + eo_do_super(obj, ELM_ENTRY_CLASS, name = elm_interface_atspi_accessible_name_get()); + if (name && strncmp("", name, 1)) return name; const char *ret = edje_object_part_text_get(sd->entry_edje, "elm.guide"); return ret ? strdup(ret) : NULL; } diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 093f5e4..26d753d 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -5492,11 +5492,14 @@ _elm_gengrid_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_Ge } EOLIAN char* -_elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *it) +_elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Gen_Item *it) { char *ret; Eina_Strbuf *buf; + eo_do_super(eo_it, ELM_GENGRID_ITEM_CLASS, ret = elm_interface_atspi_accessible_name_get()); + if (ret) return ret; + buf = eina_strbuf_new(); if (it->itc->func.text_get) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 0c84c8f..e6ff721 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -8038,12 +8038,14 @@ _elm_genlist_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_Ge } EOLIAN char* -_elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED, - Elm_Gen_Item *it) +_elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Gen_Item *it) { char *ret; Eina_Strbuf *buf; + eo_do_super(eo_it, ELM_GENLIST_ITEM_CLASS, ret = elm_interface_atspi_accessible_name_get()); + if (ret) return ret; + buf = eina_strbuf_new(); if (it->itc->func.text_get) diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index a4fbffe..1e81b74 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -2152,8 +2152,11 @@ _elm_list_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_List_ } EOLIAN static char* -_elm_list_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED, Elm_List_Item_Data *data) +_elm_list_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_List_Item_Data *data) { + char *ret; + eo_do_super(eo_it, ELM_LIST_ITEM_CLASS, ret = elm_interface_atspi_accessible_name_get()); + if (ret) return ret; return data->label ? strdup(data->label) : NULL; } diff --git a/src/lib/elm_menu.c b/src/lib/elm_menu.c index c5ca878..5d7cd15 100644 --- a/src/lib/elm_menu.c +++ b/src/lib/elm_menu.c @@ -1315,8 +1315,11 @@ _elm_menu_item_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, Elm_ } EOLIAN static char* -_elm_menu_item_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Menu_Item_Data *sd) +_elm_menu_item_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Menu_Item_Data *sd) { + char *ret; + eo_do_super(obj, ELM_MENU_ITEM_CLASS, ret = elm_interface_atspi_accessible_name_get()); + if (ret) return ret; return sd->label ? strdup(sd->label) : NULL; } diff --git a/src/lib/elm_spinner.c b/src/lib/elm_spinner.c index 019ad4d..116b606 100644 --- a/src/lib/elm_spinner.c +++ b/src/lib/elm_spinner.c @@ -1654,6 +1654,9 @@ _elm_spinner_elm_interface_atspi_value_increment_get(Eo *obj EINA_UNUSED, Elm_Sp EOLIAN static char* _elm_spinner_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Spinner_Data *sd EINA_UNUSED) { + char *name; + eo_do_super(obj, ELM_SPINNER_CLASS, name = elm_interface_atspi_accessible_name_get()); + if (name) return name; const char *ret = elm_layout_text_get(obj, "elm.text"); return ret ? strdup(ret) : NULL; } diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index 4fc055b..0d193ed 10
[EGIT] [core/elementary] master 01/01: tests: adjust atspi roles.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=d2b80a98542a636913525601835c67694d6932e9 commit d2b80a98542a636913525601835c67694d6932e9 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Dec 17 11:43:57 2015 +0100 tests: adjust atspi roles. --- src/tests/elm_test_hover.c| 2 +- src/tests/elm_test_hoversel.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/elm_test_hover.c b/src/tests/elm_test_hover.c index c7d4551..5eedb19 100644 --- a/src/tests/elm_test_hover.c +++ b/src/tests/elm_test_hover.c @@ -18,7 +18,7 @@ START_TEST (elm_atspi_role_get) hover = elm_hover_add(win); eo_do(hover, role = elm_interface_atspi_accessible_role_get()); - ck_assert(role == ELM_ATSPI_ROLE_GLASS_PANE); + ck_assert(role == ELM_ATSPI_ROLE_POPUP_MENU); elm_shutdown(); } diff --git a/src/tests/elm_test_hoversel.c b/src/tests/elm_test_hoversel.c index 4bb6aaf..dedccf6 100644 --- a/src/tests/elm_test_hoversel.c +++ b/src/tests/elm_test_hoversel.c @@ -18,7 +18,7 @@ START_TEST (elm_atspi_role_get) hoversel = elm_hoversel_add(win); eo_do(hoversel, role = elm_interface_atspi_accessible_role_get()); - ck_assert(role == ELM_ATSPI_ROLE_GLASS_PANE); + ck_assert(role == ELM_ATSPI_ROLE_PUSH_BUTTON); elm_shutdown(); } --
[EGIT] [core/elementary] master 01/01: popup: enable to dismiss popup with accessibility API
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=69c943a2031a99067fbe2d45c9833ec8228ea935 commit 69c943a2031a99067fbe2d45c9833ec8228ea935 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Dec 17 11:58:37 2015 +0100 popup: enable to dismiss popup with accessibility API Clean up elm_popup actions. Move actions should not be used from accessibility API. Only dismiss seems to be resonable action which could be triggered. --- src/lib/elc_popup.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/lib/elc_popup.c b/src/lib/elc_popup.c index 7c926f9..ead2646 100644 --- a/src/lib/elc_popup.c +++ b/src/lib/elc_popup.c @@ -1826,16 +1826,18 @@ _elm_popup_class_constructor(Eo_Class *klass) evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } +static Eina_Bool +_action_dismiss(Evas_Object *obj, const char *params EINA_UNUSED) +{ + eo_do(obj, eo_event_callback_call(ELM_POPUP_EVENT_BLOCK_CLICKED, NULL)); + return EINA_TRUE; +} + EOLIAN const Elm_Atspi_Action * _elm_popup_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Popup_Data *pd EINA_UNUSED) { static Elm_Atspi_Action atspi_actions[] = { - { "move,previous", "move", "previous", _key_action_move}, - { "move,next", "move", "next", _key_action_move}, - { "move,left", "move", "left", _key_action_move}, - { "move,right", "move", "right", _key_action_move}, - { "move,up", "move", "up", _key_action_move}, - { "move,down", "move", "down", _key_action_move}, + { "dismiss", NULL, NULL, _action_dismiss}, { NULL, NULL, NULL, NULL } }; return _actions[0]; --
[EGIT] [core/elementary] master 01/01: naviframe: set better accessibility role and name
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=612528e090b1a92e5784d56610a600eb62479445 commit 612528e090b1a92e5784d56610a600eb62479445 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Wed Dec 16 16:18:17 2015 +0100 naviframe: set better accessibility role and name --- src/lib/elc_naviframe.c | 14 ++ 1 file changed, 14 insertions(+) diff --git a/src/lib/elc_naviframe.c b/src/lib/elc_naviframe.c index 441c418..0a7998a 100644 --- a/src/lib/elc_naviframe.c +++ b/src/lib/elc_naviframe.c @@ -508,6 +508,16 @@ _elm_naviframe_item_elm_widget_item_part_text_set(Eo *eo_it EINA_UNUSED, if (_elm_config->access_mode) _access_obj_process(nit, EINA_TRUE); + memset(buf, 0x0, sizeof(buf)); + if (nit->title_label) + strncat(buf, nit->title_label, sizeof(buf) - 1); + if (nit->subtitle_label) + { +if (nit->title_label) strncat(buf, " ", 1); +strncat(buf, nit->subtitle_label, sizeof(buf) - strlen(buf) - 2); + } + eo_do(VIEW(it), elm_interface_atspi_accessible_name_set(buf)); + elm_layout_sizing_eval(WIDGET(nit)); } @@ -1222,6 +1232,10 @@ _item_new(Evas_Object *obj, if (!elm_widget_sub_object_add(obj, VIEW(it))) ERR("could not add %p as sub object of %p", VIEW(it), obj); + eo_do(VIEW(it), + elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_PAGE_TAB), + elm_interface_atspi_accessible_name_set((char*)title_label)); + evas_object_event_callback_add (VIEW(it), EVAS_CALLBACK_CHANGED_SIZE_HINTS, _on_item_size_hints_changed, obj); --
[EGIT] [core/elementary] master 02/02: hoversel: accessibility enhancements
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=b67ab124df4ac55bad9b4235622fc81758f47bc5 commit b67ab124df4ac55bad9b4235622fc81758f47bc5 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Dec 15 13:30:52 2015 +0100 hoversel: accessibility enhancements Allow to dismiss hover using accessibility API. Change accessibiility role to popup. --- src/lib/elm_hover.c | 20 +++- src/lib/elm_hover.eo | 3 ++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/lib/elm_hover.c b/src/lib/elm_hover.c index e7659a9..1216cc5 100644 --- a/src/lib/elm_hover.c +++ b/src/lib/elm_hover.c @@ -3,6 +3,7 @@ #endif #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED #include @@ -685,7 +686,7 @@ _elm_hover_eo_base_constructor(Eo *obj, Elm_Hover_Data *_pd EINA_UNUSED) eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), evas_obj_smart_callbacks_descriptions_set(_smart_callbacks), - elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_GLASS_PANE)); + elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_POPUP_MENU)); return obj; } @@ -836,4 +837,21 @@ _elm_hover_class_constructor(Eo_Class *klass) evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); } +static Eina_Bool +_action_dismiss(Evas_Object *obj, const char *params EINA_UNUSED) +{ + eo_do(obj, elm_obj_hover_dismiss()); + return EINA_TRUE; +} + +EOLIAN const Elm_Atspi_Action * +_elm_hover_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Elm_Hover_Data *pd EINA_UNUSED) +{ + static Elm_Atspi_Action atspi_actions[] = { + { "dismiss", NULL, NULL, _action_dismiss}, + { NULL, NULL, NULL, NULL} + }; + return _actions[0]; +} + #include "elm_hover.eo.c" diff --git a/src/lib/elm_hover.eo b/src/lib/elm_hover.eo index 03a84b5..65a3238 100644 --- a/src/lib/elm_hover.eo +++ b/src/lib/elm_hover.eo @@ -7,7 +7,7 @@ enum Elm.Hover.Axis both [[ELM_HOVER_AXIS_BOTH -- both.]] } -class Elm.Hover (Elm.Layout, Evas.Clickable_Interface) +class Elm.Hover (Elm.Layout, Evas.Clickable_Interface, Elm_Interface_Atspi_Widget_Action) { eo_prefix: elm_obj_hover; methods { @@ -75,6 +75,7 @@ class Elm.Hover (Elm.Layout, Evas.Clickable_Interface) Elm.Container.content_unset; Elm.Layout.sizing_eval; Elm.Layout.content_aliases.get; + Elm_Interface_Atspi_Widget_Action.elm_actions.get; } events { smart,changed; --
[EGIT] [core/elementary] master 01/02: hoversel: change accessibility role to popup
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=709cf816c112859c253b5423a22a6896ec072b8f commit 709cf816c112859c253b5423a22a6896ec072b8f Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Dec 15 13:30:20 2015 +0100 hoversel: change accessibility role to popup --- src/lib/elc_hoversel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elc_hoversel.c b/src/lib/elc_hoversel.c index d45b687..0d91ae0 100644 --- a/src/lib/elc_hoversel.c +++ b/src/lib/elc_hoversel.c @@ -627,7 +627,7 @@ _elm_hoversel_eo_base_constructor(Eo *obj, Elm_Hoversel_Data *_pd EINA_UNUSED) eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), evas_obj_smart_callbacks_descriptions_set(_smart_callbacks), - elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_GLASS_PANE)); + elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_PUSH_BUTTON)); return obj; } --
[EGIT] [core/enlightenment] master 01/01: conf_apps: fix add/remove screen lock applications.
discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=b49e918be9e96dacd61964302d831cfc22147de4 commit b49e918be9e96dacd61964302d831cfc22147de4 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Dec 11 09:24:13 2015 -0500 conf_apps: fix add/remove screen lock applications. Summary: Fix missmatched paths between desklock and conf_applications module to enable adding/removing screen lock applications with a dialog. Test Plan: Settings=>Apps=>Screen lock/unlock application Veryfy if apps are correctly added to config. Reviewers: zmike, cedric Subscribers: cedric, seoz Differential Revision: https://phab.enlightenment.org/D3436 --- src/modules/conf_applications/e_int_config_apps.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/conf_applications/e_int_config_apps.c b/src/modules/conf_applications/e_int_config_apps.c index 962d927..91ac0ba 100644 --- a/src/modules/conf_applications/e_int_config_apps.c +++ b/src/modules/conf_applications/e_int_config_apps.c @@ -142,7 +142,7 @@ e_int_config_apps_desk_lock(Evas_Object *parent EINA_UNUSED, const char *params E_Config_Data *data; char buff[PATH_MAX]; - e_user_dir_concat_static(buff, "applications/screen-lock/.order"); + e_user_dir_concat_static(buff, "applications/desk-lock/.order"); data = E_NEW(E_Config_Data, 1); data->title = eina_stringshare_add(_("Screen Lock Applications")); data->dialog = eina_stringshare_add("applications/screen_lock_applications"); @@ -157,7 +157,7 @@ e_int_config_apps_desk_unlock(Evas_Object *parent EINA_UNUSED, const char *param E_Config_Data *data; char buff[PATH_MAX]; - e_user_dir_concat_static(buff, "applications/screen-unlock/.order"); + e_user_dir_concat_static(buff, "applications/desk-unlock/.order"); data = E_NEW(E_Config_Data, 1); data->title = eina_stringshare_add(_("Screen Unlock Applications")); data->dialog = eina_stringshare_add("applications/screen_unlock_applications"); --
[EGIT] [core/enlightenment] enlightenment-0.20 26/29: conf_apps: fix add/remove screen lock applications.
discomfitor pushed a commit to branch enlightenment-0.20. http://git.enlightenment.org/core/enlightenment.git/commit/?id=1a9ff2b84160c6d50e956ee7efd2588be7555487 commit 1a9ff2b84160c6d50e956ee7efd2588be7555487 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Dec 11 09:24:13 2015 -0500 conf_apps: fix add/remove screen lock applications. Summary: Fix missmatched paths between desklock and conf_applications module to enable adding/removing screen lock applications with a dialog. Test Plan: Settings=>Apps=>Screen lock/unlock application Veryfy if apps are correctly added to config. Reviewers: zmike, cedric Subscribers: cedric, seoz Differential Revision: https://phab.enlightenment.org/D3436 --- src/modules/conf_applications/e_int_config_apps.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/conf_applications/e_int_config_apps.c b/src/modules/conf_applications/e_int_config_apps.c index 962d927..91ac0ba 100644 --- a/src/modules/conf_applications/e_int_config_apps.c +++ b/src/modules/conf_applications/e_int_config_apps.c @@ -142,7 +142,7 @@ e_int_config_apps_desk_lock(Evas_Object *parent EINA_UNUSED, const char *params E_Config_Data *data; char buff[PATH_MAX]; - e_user_dir_concat_static(buff, "applications/screen-lock/.order"); + e_user_dir_concat_static(buff, "applications/desk-lock/.order"); data = E_NEW(E_Config_Data, 1); data->title = eina_stringshare_add(_("Screen Lock Applications")); data->dialog = eina_stringshare_add("applications/screen_lock_applications"); @@ -157,7 +157,7 @@ e_int_config_apps_desk_unlock(Evas_Object *parent EINA_UNUSED, const char *param E_Config_Data *data; char buff[PATH_MAX]; - e_user_dir_concat_static(buff, "applications/screen-unlock/.order"); + e_user_dir_concat_static(buff, "applications/desk-unlock/.order"); data = E_NEW(E_Config_Data, 1); data->title = eina_stringshare_add(_("Screen Unlock Applications")); data->dialog = eina_stringshare_add("applications/screen_unlock_applications"); --
[EGIT] [core/elementary] master 01/01: slider: minor accessibility events fix
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=6936636edf0efcd77516066ed161ee1e7fc12b35 commit 6936636edf0efcd77516066ed161ee1e7fc12b35 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Dec 8 10:41:36 2015 +0100 slider: minor accessibility events fix Emit accessibility events if slider value was chagned through API. Moreover emit accessibility event more rarely if value is being changed by the user. --- src/lib/elm_slider.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_slider.c b/src/lib/elm_slider.c index 33f2ecc..a0a0645 100644 --- a/src/lib/elm_slider.c +++ b/src/lib/elm_slider.c @@ -65,6 +65,9 @@ _delay_change(void *data) sd->delay = NULL; eo_do(data, eo_event_callback_call(ELM_SLIDER_EVENT_DELAY_CHANGED, NULL)); + if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_value_changed_signal_emit(data); + return ECORE_CALLBACK_CANCEL; } @@ -95,7 +98,6 @@ _val_fetch(Evas_Object *obj, Eina_Bool user_event) if (user_event) { eo_do(obj, eo_event_callback_call(ELM_SLIDER_EVENT_CHANGED, NULL)); - elm_interface_atspi_accessible_value_changed_signal_emit(obj); ecore_timer_del(sd->delay); sd->delay = ecore_timer_add(SLIDER_DELAY_CHANGED_INTERVAL, _delay_change, obj); } @@ -127,6 +129,10 @@ _val_set(Evas_Object *obj) ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); edje_object_part_drag_value_set (wd->resize_obj, "elm.dragable.slider", pos, pos); + + // emit accessiblity event also if value was chagend by API + if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_value_changed_signal_emit(obj); } static void --
[EGIT] [core/elementary] master 01/01: box: skip box in accessibility tree by default
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=63381b64ffd7095a5c570c47f4a29d9d989800ba commit 63381b64ffd7095a5c570c47f4a29d9d989800ba Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Dec 1 12:29:02 2015 +0100 box: skip box in accessibility tree by default --- src/lib/elm_box.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/elm_box.c b/src/lib/elm_box.c index d37fd08..352e956 100644 --- a/src/lib/elm_box.c +++ b/src/lib/elm_box.c @@ -439,6 +439,7 @@ elm_box_add(Evas_Object *parent) EOLIAN static Eo * _elm_box_eo_base_constructor(Eo *obj, Elm_Box_Data *_pd EINA_UNUSED) { + eo_do(obj, elm_interface_atspi_accessible_type_set(ELM_ATSPI_TYPE_SKIPPED)); obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), --
[EGIT] [core/elementary] master 01/01: atspi: always use widget's subobj as accessible children
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=0aa37178abc4409a647bbf321a346bc5c7cbf261 commit 0aa37178abc4409a647bbf321a346bc5c7cbf261 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Dec 1 16:55:12 2015 +0100 atspi: always use widget's subobj as accessible children Patch fixes issue when widgets could be orphaned in accessibility tree due to overloaded accessible_children_get methods in widgets returning Elm_Object_Items. Widgets like genlist, gengrid, list and toolbar returned only items as its accessibility children so if some widget was attached directly to those widgets (like ctxpopup/popup) it become orphaned in accessibility tree. --- src/lib/elm_gengrid.c| 32 src/lib/elm_gengrid_item.eo | 1 - src/lib/elm_genlist.c| 42 ++-- src/lib/elm_genlist_item.eo | 1 - src/lib/elm_interface_atspi_accessible.c | 28 - src/lib/elm_list.c | 24 ++ src/lib/elm_list_item.eo | 1 - src/lib/elm_toolbar.c| 13 -- src/lib/elm_widget.c | 28 + src/lib/elm_widget_item.eo | 1 - src/tests/elm_test_genlist.c | 36 --- src/tests/elm_test_list.c| 6 ++--- 12 files changed, 50 insertions(+), 163 deletions(-) diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 1b6f0b4..3c6018e 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -900,9 +900,6 @@ _item_content_realize(Elm_Gen_Item *it, elm_widget_sub_object_add(WIDGET(it), content); if (eo_do_ret(EO_OBJ(it), tmp, elm_wdg_item_disabled_get())) elm_widget_disabled_set(content, EINA_TRUE); - - if (_elm_config->atspi_mode && eo_isa(content, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) - eo_do(content, elm_interface_atspi_accessible_parent_set(EO_OBJ(it))); } } } @@ -5534,27 +5531,6 @@ _elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED, return ret; } -EOLIAN Eina_List* -_elm_gengrid_item_elm_interface_atspi_accessible_children_get(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *it) -{ - Eina_List *ret = NULL; - if (VIEW(it)) - { -Eina_List *parts; -const char *key; -parts = elm_widget_stringlist_get(edje_object_data_get(VIEW(it), "contents")); - -EINA_LIST_FREE(parts, key) - { - Evas_Object *part; - part = edje_object_part_swallow_get(VIEW(it), key); - if (part && eo_isa(part, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) - ret = eina_list_append(ret, part); - } - } - return ret; -} - EAPI Elm_Object_Item * elm_gengrid_nth_item_get(const Evas_Object *obj, unsigned int nth) { @@ -5687,15 +5663,17 @@ _elm_gengrid_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UNUS } EOLIAN Eina_List* -_elm_gengrid_elm_interface_atspi_accessible_children_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd) +_elm_gengrid_elm_interface_atspi_accessible_children_get(Eo *obj, Elm_Gengrid_Data *sd) { - Eina_List *ret = NULL; + Eina_List *ret = NULL, *ret2 = NULL; Elm_Gen_Item *it; EINA_INLIST_FOREACH(sd->items, it) ret = eina_list_append(ret, EO_OBJ(it)); - return ret; + eo_do_super(obj, ELM_GENGRID_CLASS, ret2 = elm_interface_atspi_accessible_children_get()); + + return eina_list_merge(ret, ret2); } EOLIAN Elm_Atspi_State_Set diff --git a/src/lib/elm_gengrid_item.eo b/src/lib/elm_gengrid_item.eo index 95a079c..0783ee5 100644 --- a/src/lib/elm_gengrid_item.eo +++ b/src/lib/elm_gengrid_item.eo @@ -211,6 +211,5 @@ class Elm.Gengrid_Item(Elm.Widget_Item) Elm.Widget_Item.cursor_unset; Elm_Interface_Atspi_Accessible.name.get; Elm_Interface_Atspi_Accessible.state_set.get; - Elm_Interface_Atspi_Accessible.children.get; } } diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index d2d0005..020ab24 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -381,8 +381,6 @@ _item_content_realize(Elm_Gen_Item *it, ((void *)WIDGET_ITEM_DATA_GET(EO_OBJ(it)), WIDGET(it), key); if (!content) continue; *contents = eina_list_append(*contents, content); - if (_elm_config->atspi_mode && eo_isa(content, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) - eo_do(content, elm_interface_atspi_accessible_parent_set(EO_OBJ(it))); if (!edje_object_part_swallow(target, key, content)) { ERR("%s (%p) can not be swallowed into %s", @@ -396,12 +394,6 @@ _item_con
[EGIT] [core/elementary] master 01/01: menu: enhance accessibility support
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=1e390e033259c905a2215d3a96eb799a29907f02 commit 1e390e033259c905a2215d3a96eb799a29907f02 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Nov 27 18:14:54 2015 +0100 menu: enhance accessibility support --- src/lib/elm_atspi_bridge.c | 2 + src/lib/elm_menu.c | 147 + src/lib/elm_menu.eo| 5 +- src/lib/elm_menu_item.eo | 9 ++- 4 files changed, 161 insertions(+), 2 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index f0eec7d..782d1fd 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -3718,6 +3718,8 @@ _set_broadcast_flag(const char *event, Eo *bridge) STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_VISIBLE_DATA_CHANGED); else if (!strcmp(tokens[1], "ActiveDescendantChanged")) STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_ACTIVE_DESCENDANT_CHANGED); +else if (!strcmp(tokens[1], "SelectionChanged")) + STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_SELECTION_CHANGED); } else if (!strcmp(tokens[0], "Window")) { diff --git a/src/lib/elm_menu.c b/src/lib/elm_menu.c index ce49793..c5ca878 100644 --- a/src/lib/elm_menu.c +++ b/src/lib/elm_menu.c @@ -3,6 +3,7 @@ #endif #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#define ELM_INTERFACE_ATSPI_SELECTION_PROTECTED #define ELM_WIDGET_ITEM_PROTECTED #include @@ -107,6 +108,8 @@ _submenu_sizing_eval(Elm_Menu_Item_Data *parent_it) { ELM_MENU_ITEM_DATA_GET(eo_item, item); elm_layout_sizing_eval(VIEW(item)); +if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(eo_item, ELM_ATSPI_STATE_SHOWING, EINA_TRUE); } @@ -488,6 +491,7 @@ _menu_item_activate_cb(void *data, if (eo_item2 != EO_OBJ(item)) elm_menu_item_selected_set(eo_item2, 0); } +eo_do(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, elm_interface_atspi_accessible_event_emit(EO_OBJ(item->parent), ELM_INTERFACE_ATSPI_SELECTION_EVENT_SELECTION_CHANGED, NULL)); } else { @@ -497,7 +501,10 @@ _menu_item_activate_cb(void *data, if (eo_item2 != EO_OBJ(item)) elm_menu_item_selected_set(eo_item2, 0); } +eo_do(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, elm_interface_atspi_accessible_event_emit(WIDGET(item), ELM_INTERFACE_ATSPI_SELECTION_EVENT_SELECTION_CHANGED, NULL)); } + if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(item), ELM_ATSPI_STATE_SELECTED, EINA_TRUE); } static void @@ -510,6 +517,8 @@ _menu_item_inactivate_cb(void *data, item->selected = 0; if (item->submenu.open) _submenu_hide(item); + if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(item), ELM_ATSPI_STATE_SELECTED, EINA_FALSE); } static Eina_Bool @@ -560,6 +569,7 @@ static void _item_obj_create(Elm_Menu_Item_Data *item) { VIEW(item) = elm_layout_add(WIDGET(item)); + eo_do(VIEW(item), elm_interface_atspi_accessible_type_set(ELM_ATSPI_TYPE_SKIPPED)); evas_object_size_hint_weight_set (VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_fill_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -583,6 +593,7 @@ static void _item_separator_obj_create(Elm_Menu_Item_Data *item) { VIEW(item) = elm_layout_add(WIDGET(item)); + eo_do(VIEW(item), elm_interface_atspi_accessible_type_set(ELM_ATSPI_TYPE_SKIPPED)); evas_object_size_hint_weight_set (VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_fill_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -605,7 +616,9 @@ _item_submenu_obj_create(Elm_Menu_Item_Data *item) char style[1024]; item->submenu.location = elm_icon_add(sd->bx); + eo_do(item->submenu.location, elm_interface_atspi_accessible_type_set(ELM_ATSPI_TYPE_DISABLED)); item->submenu.hv = hv = elm_hover_add(sd->bx); + eo_do(item->submenu.hv, elm_interface_atspi_accessible_type_set(ELM_ATSPI_TYPE_SKIPPED)); elm_widget_mirrored_set(hv, EINA_FALSE); elm_hover_target_set(hv, item->submenu.location); elm_hover_parent_set(hv, sd->parent); @@ -671,8 +684,10 @@ _elm_menu_evas_object_smart_add(Eo *obj, Elm_Menu_Data *priv) elm_widget_can_focus_set(obj, EINA_FALSE); priv->location = elm_icon_add(obj); + eo_do(priv->location, elm_interface_atspi_accessible_type_set(ELM_ATSPI_TYPE_DISABLED)); priv->hv = elm_hover_add(obj); + eo_do(priv->hv, elm_interface_atspi_accessible_type_set(ELM_ATSPI_TYPE_SKIPPED)); elm_widget_mirrored_set(priv->hv, EINA_FALSE);
[EGIT] [core/elementary] master 01/01: atspi: add type of accessibility object
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=e2b1e28a12741b3be9db2aa4edae9e42877049e6 commit e2b1e28a12741b3be9db2aa4edae9e42877049e6 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Nov 26 16:53:32 2015 +0100 atspi: add type of accessibility object Type API provides possibility to skip/ignore widgets in accessiblity tree. It make sense to ignore object if it do not provide any valuable contextual information for disabled users. Skipped objects are usually container objects and are ommited in parent-child relationship. @feature --- src/lib/elm_atspi_app_object.c| 6 - src/lib/elm_interface_atspi_accessible.c | 44 +-- src/lib/elm_interface_atspi_accessible.eo | 19 + src/lib/elm_widget.c | 41 +++- 4 files changed, 95 insertions(+), 15 deletions(-) diff --git a/src/lib/elm_atspi_app_object.c b/src/lib/elm_atspi_app_object.c index 6e49891..11d5bb2 100644 --- a/src/lib/elm_atspi_app_object.c +++ b/src/lib/elm_atspi_app_object.c @@ -33,7 +33,11 @@ _elm_atspi_app_object_elm_interface_atspi_accessible_children_get(Eo *obj EINA_U EINA_LIST_FOREACH(_elm_win_list, l, win) { -if (eo_isa(win, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) +Elm_Atspi_Type type; +if (!eo_isa(win, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) + continue; +eo_do(win, type = elm_interface_atspi_accessible_type_get()); +if (type == ELM_ATSPI_TYPE_REGULAR) accs = eina_list_append(accs, win); } diff --git a/src/lib/elm_interface_atspi_accessible.c b/src/lib/elm_interface_atspi_accessible.c index 2a38380..357e609 100644 --- a/src/lib/elm_interface_atspi_accessible.c +++ b/src/lib/elm_interface_atspi_accessible.c @@ -129,6 +129,7 @@ struct _Elm_Interface_Atspi_Accessible_Data const char*translation_domain; Elm_Atspi_Relation_Set relations; Elm_Interface_Atspi_Accessible *parent; + Elm_Atspi_Type type: 2; }; typedef struct _Elm_Interface_Atspi_Accessible_Data Elm_Interface_Atspi_Accessible_Data; @@ -168,11 +169,25 @@ _elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, Elm_Interface_Atspi EOLIAN static Elm_Interface_Atspi_Accessible * _elm_interface_atspi_accessible_parent_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd) { - return pd->parent; + Elm_Atspi_Type type; + Eo *parent = obj; + + if (pd->parent) return pd->parent; + + do { + eo_do(obj, parent = eo_parent_get()); + if (eo_isa(parent, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) +{ + eo_do(parent, type = elm_interface_atspi_accessible_type_get()); + if (type != ELM_ATSPI_TYPE_SKIPPED) break; +} + } while (parent); + + return eo_isa(parent, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN) ? parent : NULL; } EOLIAN static void -_elm_interface_atspi_accessible_parent_set(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd, Elm_Interface_Atspi_Accessible *new_parent) +_elm_interface_atspi_accessible_parent_set(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED, Elm_Interface_Atspi_Accessible *new_parent) { if (pd->parent != new_parent) { @@ -314,6 +329,7 @@ _elm_interface_atspi_accessible_event_emit(Eo *class EINA_UNUSED, void *pd EINA_ { Eina_List *l; Elm_Atspi_Event_Handler *hdl; + Elm_Atspi_Type type; if (!accessible || !event || !eo_isa(accessible, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) { @@ -321,6 +337,18 @@ _elm_interface_atspi_accessible_event_emit(Eo *class EINA_UNUSED, void *pd EINA_ return; } + eo_do(accessible, type = elm_interface_atspi_accessible_type_get()); + if (type != ELM_ATSPI_TYPE_REGULAR) + return; + + if (event == ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_CHILDREN_CHANGED) + { +Elm_Atspi_Event_Children_Changed_Data *atspi_data = event_info; +eo_do(atspi_data->child, type = elm_interface_atspi_accessible_type_get()); +if (type != ELM_ATSPI_TYPE_REGULAR) + return; + } + EINA_LIST_FOREACH(global_callbacks, l, hdl) { if (hdl->cb) @@ -552,4 +580,16 @@ _elm_interface_atspi_accessible_root_get(Eo *class EINA_UNUSED, void *pd EINA_UN return root; } +EOLIAN Elm_Atspi_Type +_elm_interface_atspi_accessible_type_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd) +{ + return pd->type; +} + +EOLIAN void +_elm_interface_atspi_accessible_type_set(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd, Elm_Atspi_Type val) +{ + pd->type = val; +} + #include "elm_interface_atspi_accessible.eo.c" diff --git a/src/lib/elm_interface_atspi_accessible.eo b/src/lib/elm_interface_atspi_accessible.eo index f337e56..378674e 100644 --- a/src/lib/elm_interface_atspi_accessible.eo +++ b/src/lib/elm_interface_at
[EGIT] [core/elementary] master 01/01: atspi: remove useless "GetDefaultAttributeSet" method
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=75b3ce919c725cc394600683ef149302eb6db7c9 commit 75b3ce919c725cc394600683ef149302eb6db7c9 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Wed Nov 25 14:02:25 2015 +0100 atspi: remove useless "GetDefaultAttributeSet" method This method exists in atspi spec, however is not implemented in libatspi library. Drop it for now as it seems useless. --- src/lib/elm_atspi_bridge.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 92ccd8a..6b08728 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -1832,7 +1832,6 @@ static const Eldbus_Method text_methods[] = { { "GetRangeExtents", ELDBUS_ARGS({"i", "startOffset"}, {"i", "endOffset"}, {"u", "coordType"}), ELDBUS_ARGS({"i", "x"}, {"i", "y"}, {"i","w"}, {"i","h"}), _text_range_extents_get, 0 }, { "GetBoundedRanges", ELDBUS_ARGS({"i", "x"}, {"i", "y"}, {"i", "w"}, {"i", "h"}, {"u", "coordType"}, {"u", "xClipType"}, {"u", "yClipType"}), ELDBUS_ARGS({"a(issv)", NULL}), _text_bounded_ranges_get, 0 }, { "GetAttributeRun", ELDBUS_ARGS({"i", "offset"}, {"b", "includeDefaults"}), ELDBUS_ARGS({"a(ss)", NULL}, {"i", "startOffset"}, {"i", "endOffset"}), _text_run_attributes_get, 0 }, - { "GetDefaultAttributeSet", NULL, ELDBUS_ARGS({"a(ss)", NULL}), _text_default_attributes_get, 0 }, { NULL, NULL, NULL, NULL, 0 } }; --
[EGIT] [core/elementary] master 01/01: atspi: fix default text attribute signature
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=e2febed80109c6da8bffaf779e1cba018687598c commit e2febed80109c6da8bffaf779e1cba018687598c Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Wed Nov 25 14:01:44 2015 +0100 atspi: fix default text attribute signature --- src/lib/elm_atspi_bridge.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 59a6c98..92ccd8a 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -1455,7 +1455,6 @@ _text_default_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus const char *obj_path = eldbus_message_path_get(msg); Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME); Eo *obj = _bridge_object_from_path(bridge, obj_path); - int start = -1, end; Eldbus_Message *ret; Eldbus_Message_Iter *iter, *iter_array; Eina_List *attrs; @@ -1470,7 +1469,7 @@ _text_default_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus iter_array = eldbus_message_iter_container_new(iter, 'a', "{ss}"); EINA_SAFETY_ON_NULL_GOTO(iter_array, fail); - eo_do(obj, attrs = elm_interface_atspi_text_attributes_get(, )); + eo_do(obj, attrs = elm_interface_atspi_text_default_attributes_get()); EINA_LIST_FREE(attrs, attr) { @@ -1479,7 +1478,6 @@ _text_default_attributes_get(const Eldbus_Service_Interface *iface, const Eldbus } eldbus_message_iter_container_close(iter, iter_array); - eldbus_message_iter_arguments_append(iter, "ii", start, end); return ret; --
[EGIT] [core/elementary] master 01/01: atspi: typo fix
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=edc6b3205298d5542fc045c9be615552923d624c commit edc6b3205298d5542fc045c9be615552923d624c Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Sat Nov 21 16:19:53 2015 +0100 atspi: typo fix --- src/lib/elm_atspi_bridge.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 71fe7ee..59a6c98 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -4519,7 +4519,7 @@ _ecore_modifiers_2_atspi(unsigned int modifiers) if (modifiers & ECORE_EVENT_MODIFIER_ALT) ret |= (1 << ATSPI_MODIFIER_ALT); if (modifiers & ECORE_EVENT_MODIFIER_WIN) - ret |= ATSPI_MODIFIER_META; + ret |= (1 << ATSPI_MODIFIER_META); if (modifiers & ECORE_EVENT_MODIFIER_NUM) ret |= (1 << ATSPI_MODIFIER_NUMLOCK); --
[EGIT] [core/elementary] master 01/01: atspi: support key modifers in bridge.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=b466cdb20ed26de9af962906f0850ce6613f0315 commit b466cdb20ed26de9af962906f0850ce6613f0315 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Sat Nov 21 14:01:54 2015 +0100 atspi: support key modifers in bridge. @feature --- src/lib/elm_atspi_bridge.c | 24 +++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index e88e8dd..71fe7ee 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -4484,6 +4484,7 @@ _key_event_info_new(int event_type, const Ecore_Event_Key *data, Eo *bridge) ret->event.key = eina_stringshare_add(data->key); ret->event.string = eina_stringshare_add(data->string); ret->event.compose = eina_stringshare_add(data->compose); + ret->event.modifiers = data->modifiers; // not sure why it is here, but explicite keep it NULLed. ret->event.data = NULL; @@ -4504,6 +4505,27 @@ _key_event_info_free(Key_Event_Info *data) free(data); } +static short +_ecore_modifiers_2_atspi(unsigned int modifiers) +{ + short ret = 0; + + if (modifiers & ECORE_EVENT_MODIFIER_SHIFT) + ret |= (1 << ATSPI_MODIFIER_SHIFT); + if (modifiers & ECORE_EVENT_MODIFIER_CAPS) + ret |= (1 << ATSPI_MODIFIER_SHIFTLOCK); + if (modifiers & ECORE_EVENT_MODIFIER_CTRL) + ret |= (1 << ATSPI_MODIFIER_CONTROL); + if (modifiers & ECORE_EVENT_MODIFIER_ALT) + ret |= (1 << ATSPI_MODIFIER_ALT); + if (modifiers & ECORE_EVENT_MODIFIER_WIN) + ret |= ATSPI_MODIFIER_META; + if (modifiers & ECORE_EVENT_MODIFIER_NUM) + ret |= (1 << ATSPI_MODIFIER_NUMLOCK); + + return ret; +} + static void _iter_marshall_key_event(Eldbus_Message_Iter *iter, Key_Event_Info *data) { @@ -4520,7 +4542,7 @@ _iter_marshall_key_event(Eldbus_Message_Iter *iter, Key_Event_Info *data) else type = ATSPI_KEY_RELEASED_EVENT; - eldbus_message_iter_arguments_append(struct_iter, "usb", type, 0, data->event.keycode, 0, data->event.timestamp, str, is_text); + eldbus_message_iter_arguments_append(struct_iter, "uinnisb", type, 0, data->event.keycode, _ecore_modifiers_2_atspi(data->event.modifiers), data->event.timestamp, str, is_text); eldbus_message_iter_container_close(iter, struct_iter); } --
[EGIT] [core/elementary] master 01/01: atspi: move root object creation to atspi class.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=e1c1ead2ee22ce4d92428ad6eadb414f6fbef884 commit e1c1ead2ee22ce4d92428ad6eadb414f6fbef884 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Wed Sep 9 13:58:14 2015 +0200 atspi: move root object creation to atspi class. --- src/lib/elm_atspi_bridge.c| 59 +++ src/lib/elm_atspi_bridge.eo | 8 - src/lib/elm_interface_atspi_accessible.c | 11 ++ src/lib/elm_interface_atspi_accessible.eo | 8 + src/lib/elm_win.c | 19 +- 5 files changed, 58 insertions(+), 47 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index edd10fc..e88e8dd 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -67,7 +67,6 @@ typedef struct _Elm_Atspi_Bridge_Data Eldbus_Connection *session_bus; Eldbus_Connection *a11y_bus; Eina_List *reemited_events; - Eo *root; Eina_Hash *cache; Eldbus_Service_Interface *cache_interface; Eldbus_Signal_Handler *register_hdl; @@ -131,7 +130,7 @@ static Eina_Bool _text_selection_changed_send(void *data, Eo *obj, const Eo_Even // bridge private methods static void _bridge_object_register(Eo *bridge, Eo *obj); static void _bridge_object_unregister(Eo *bridge, Eo *obj); -static const char * _bridge_path_from_object(Eo *bridge, const Eo *eo); +static const char * _path_from_object(const Eo *eo); static void _bridge_signal_send(Eo *bridge, Eo *obj, const char *ifc, const Eldbus_Signal *signal, const char *minor, unsigned int det1, unsigned int det2, const char *variant_sig, ...); static Eo * _bridge_object_from_path(Eo *bridge, const char *path); static void _bridge_iter_object_reference_append(Eo *bridge, Eldbus_Message_Iter *iter, const Eo *obj); @@ -577,7 +576,7 @@ _accessible_get_application(const Eldbus_Service_Interface *iface, const Eldbus_ Eldbus_Message *ret; const char *obj_path = eldbus_message_path_get(msg); Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME); - Eo *obj = _bridge_object_from_path(bridge, obj_path); + Eo *root, *obj = _bridge_object_from_path(bridge, obj_path); ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, msg); @@ -585,7 +584,8 @@ _accessible_get_application(const Eldbus_Service_Interface *iface, const Eldbus_ EINA_SAFETY_ON_NULL_RETURN_VAL(ret, NULL); Eldbus_Message_Iter *iter = eldbus_message_iter_get(ret); - _bridge_iter_object_reference_append(bridge, iter, elm_atspi_bridge_root_get(bridge)); + eo_do(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, root = elm_interface_atspi_accessible_root_get()); + _bridge_iter_object_reference_append(bridge, iter, root); return ret; } @@ -2006,7 +2006,7 @@ _bridge_object_from_path(Eo *bridge, const char *path) unsigned long long eo_ptr = 0; Eo *eo = NULL; const char *tmp = path; - Eo *ret; + Eo *ret, *root; int len = strlen(ELM_ACCESS_OBJECT_PATH_PREFIX); if (strncmp(path, ELM_ACCESS_OBJECT_PATH_PREFIX, len)) @@ -2014,7 +2014,10 @@ _bridge_object_from_path(Eo *bridge, const char *path) tmp = path + len; /* Skip over the prefix */ if (!strcmp(ELM_ACCESS_OBJECT_PATH_ROOT, tmp)) - return elm_atspi_bridge_root_get(bridge); + { +eo_do(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, root = elm_interface_atspi_accessible_root_get()); +return root; + } sscanf(tmp, "%llu", _ptr); eo = (Eo *) (uintptr_t) eo_ptr; @@ -2032,13 +2035,16 @@ _bridge_object_from_path(Eo *bridge, const char *path) } static const char * -_bridge_path_from_object(Eo *bridge, const Eo *eo) +_path_from_object(const Eo *eo) { static char path[64]; + Eo *root; - EINA_SAFETY_ON_NULL_RETURN_VAL(eo, ATSPI_DBUS_PATH_NULL); + if (!eo) + return ATSPI_DBUS_PATH_NULL; + eo_do(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, root = elm_interface_atspi_accessible_root_get()); - if (eo == elm_atspi_bridge_root_get(bridge)) + if (eo == root) snprintf(path, sizeof(path), "%s%s", ELM_ACCESS_OBJECT_PATH_PREFIX, ELM_ACCESS_OBJECT_PATH_ROOT); else snprintf(path, sizeof(path), ELM_ACCESS_OBJECT_REFERENCE_TEMPLATE, (unsigned long long)(uintptr_t)eo); @@ -3079,7 +3085,7 @@ _bridge_iter_object_reference_append(Eo *bridge, Eldbus_Message_Iter *iter, cons ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(bridge, pd); Eldbus_Message_Iter *iter_struct = eldbus_message_iter_container_new(iter, 'r', NULL); EINA_SAFETY_ON_NULL_RETURN(iter); - const char *path = _bridge_path_from_object(bridge, obj); + const char *path = _path_from_object(obj); eldbus_message_iter_basic_append(iter_struct, 's', eldbus_connection_unique_name_get(pd->a11y_bus)); eldbus_message_iter_basic_append(iter_struct, 'o', path); eldbus_message_iter_container_close(iter, ite
[EGIT] [core/elementary] master 01/01: atspi: unprotect subset of methods
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=98e6530ff787d403eb369aae12cd6bf02da63869 commit 98e6530ff787d403eb369aae12cd6bf02da63869 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Wed Nov 18 13:34:39 2015 +0100 atspi: unprotect subset of methods Unprotect methods which are ment to be a part of public API. This methods were initially unprotected, however it looks like during eo refactoring @protect tags were added by mistake. @fix --- src/lib/elm_interface_atspi_accessible.eo | 16 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lib/elm_interface_atspi_accessible.eo b/src/lib/elm_interface_atspi_accessible.eo index 65485cd..e6a1411 100644 --- a/src/lib/elm_interface_atspi_accessible.eo +++ b/src/lib/elm_interface_atspi_accessible.eo @@ -12,7 +12,7 @@ mixin Elm_Interface_Atspi_Accessible () localized_name: const(char)*; } } - @property name @protected { + @property name { get { [[Gets an string describing ATSPI widget role name. Should be free by a user.]] } @@ -30,7 +30,7 @@ mixin Elm_Interface_Atspi_Accessible () relations: Elm_Atspi_Relation_Set; } } - @property role @protected { + @property role { get { [[Gets the role of the widget in ATSPI Accessibility domain.]] } @@ -72,7 +72,7 @@ mixin Elm_Interface_Atspi_Accessible () idx: int; } } - @property description @protected { + @property description { get { [[Gets widget contextual information.]] } @@ -83,7 +83,7 @@ mixin Elm_Interface_Atspi_Accessible () description: const(char)*; } } - @property parent @protected { + @property parent { get { [[Gets widget accessible parent.]] } @@ -123,7 +123,7 @@ mixin Elm_Interface_Atspi_Accessible () @in event_info: void*; [[Accessibility event details.]] } } - @property translation_domain @protected { + @property translation_domain { get { [[Gets the translation domain of "name" and "description" properties.]] @@ -147,7 +147,7 @@ mixin Elm_Interface_Atspi_Accessible () domain: const(char)*; [[ translation domain ]] } } - relationship_append @protected { + relationship_append { [[Defines the relationship between two accessible objects. Adds unique relation between source object and relation_object of a @@ -169,7 +169,7 @@ mixin Elm_Interface_Atspi_Accessible () @in relation_object: const(Elm_Interface_Atspi_Accessible)*; } } - relationship_remove @protected { + relationship_remove { [[Removes the relationship between two accessible objects. If relation_object is NULL function removes all relations @@ -180,7 +180,7 @@ mixin Elm_Interface_Atspi_Accessible () @in relation_object: const(Elm_Interface_Atspi_Accessible)*; } } - relationships_clear @protected { + relationships_clear { [[Removes all relationships in accessible object.]] } } --
[EGIT] [core/elementary] master 01/01: atspi: add missing SELECTED changed signals
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=4034204416a558f1d59d611f747c25c914b7efdd commit 4034204416a558f1d59d611f747c25c914b7efdd Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Nov 5 10:52:28 2015 +0100 atspi: add missing SELECTED changed signals @fix --- src/lib/elm_gengrid.c | 4 src/lib/elm_genlist.c | 4 src/lib/elm_list.c| 4 src/lib/elm_toolbar.c | 4 4 files changed, 16 insertions(+) diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 01c72cc..ce18912 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -536,6 +536,8 @@ _item_unselect(Elm_Gen_Item *it) sd->selected = eina_list_remove(sd->selected, eo_it); eo_do(WIDGET(it), eo_event_callback_call (EVAS_SELECTABLE_INTERFACE_EVENT_UNSELECTED, eo_it)); +if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_SELECTED, EINA_FALSE); } } @@ -4127,6 +4129,8 @@ _item_select(Elm_Gen_Item *it) if (it->generation == sd->generation) { eo_do(WIDGET(it), eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_SELECTED, eo_it)); +if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_SELECTED, EINA_TRUE); elm_object_item_focus_set(eo_it, EINA_TRUE); } diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 2e4bd8b..a706bd9 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -3713,6 +3713,8 @@ _item_unselect(Elm_Gen_Item *it) sd->selected = eina_list_remove(sd->selected, EO_OBJ(it)); eo_do(WIDGET(it), eo_event_callback_call (EVAS_SELECTABLE_INTERFACE_EVENT_UNSELECTED, EO_OBJ(it))); + if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(it), ELM_ATSPI_STATE_SELECTED, EINA_FALSE); } static void @@ -5785,6 +5787,8 @@ _item_select(Elm_Gen_Item *it) // delete item if it's requested deletion in the above callbacks. if ((it->base)->on_deletion) goto item_deleted; eo_do(WIDGET(it), eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_SELECTED, eo_it)); + if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_SELECTED, EINA_TRUE); // delete item if it's requested deletion in the above callbacks. if ((it->base)->on_deletion) goto item_deleted; it->walking--; diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 065caa4..00be140 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -1420,6 +1420,8 @@ call: if (it->func) it->func((void *)WIDGET_ITEM_DATA_GET(eo_it), WIDGET(it), eo_it); eo_do(obj, eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_SELECTED, eo_it)); + if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, ELM_ATSPI_STATE_SELECTED, EINA_TRUE); sd->last_selected_item = eo_it; _elm_list_unwalk(obj, sd); @@ -1488,6 +1490,8 @@ _item_unselect(Elm_List_Item_Data *it) (sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE))) eo_do(WIDGET(it), eo_event_callback_call (EVAS_SELECTABLE_INTERFACE_EVENT_UNSELECTED, EO_OBJ(it))); +if (_elm_config->atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(it), ELM_ATSPI_STATE_SELECTED, EINA_FALSE); } _elm_list_unwalk(obj, sd); diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index ef38744..5d46d1f 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -160,6 +160,8 @@ _item_unselect(Elm_Toolbar_Item_Data *item) if (item->icon) elm_widget_signal_emit(item->icon, "elm,state,unselected", "elm"); eo_do(WIDGET(item), eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_UNSELECTED, EO_OBJ(item))); + if (_elm_config->atspi_mode) +elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(item), ELM_ATSPI_STATE_SELECTED, EINA_FALSE); } static void @@ -1168,6 +1170,8 @@ _item_select(Elm_Toolbar_Item_Data *it) } eo_do(obj, eo_event_callback_call(EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, EO_OBJ(it))); eo_do(obj, eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_SELECTED, EO_OBJ(it))); + if (_elm_config->atspi_mode) +elm_interface_atspi_accessible_state_changed_signal_emit(EO_OBJ(it), ELM_ATSPI_STATE_SELECTED, EINA_TRUE); } static void --
[EGIT] [core/elementary] master 04/04: widget: update child_can_focus flag on focusability change
cedric pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=3a885cd6c72e7fb94c46f45bd900b8c2dcf26768 commit 3a885cd6c72e7fb94c46f45bd900b8c2dcf26768 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Oct 30 07:22:05 2015 +0100 widget: update child_can_focus flag on focusability change Summary: Previously child_can_focus flag could be only updated when child is deleted from object's subobject list. This patch additionally updates child_can_focus flag when focusability is changed with elm_widget_focus_can_set function. Patch solves child_can_focus issue in similar situations: elm_icon_add(layout); elm_object_content_set(layout, icon); elm_widget_child_can_focus_get(layout); // returns EINA_TRUE icon = elm_icon_add(win); elm_object_content_set(layout, icon); elm_widget_child_can_focus_get(layout); // returns EINA_FALSE @fix Reviewers: cedric, stefan_schmidt Subscribers: seoz Differential Revision: https://phab.enlightenment.org/D3237 Signed-off-by: Cedric BAIL <ced...@osg.samsung.com> --- src/lib/elm_main.c | 2 -- src/lib/elm_widget.c | 23 +++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/lib/elm_main.c b/src/lib/elm_main.c index d436274..faa8624 100644 --- a/src/lib/elm_main.c +++ b/src/lib/elm_main.c @@ -1380,8 +1380,6 @@ elm_object_focus_allow_set(Evas_Object *obj, { EINA_SAFETY_ON_NULL_RETURN(obj); elm_widget_can_focus_set(obj, enable); -/*FIXME: According to the elm_object_focus_allow_get(), child_can_focus field -of the parent should be updated. Otherwise, the checking of it's child focus allow states should not be in elm_object_focus_allow_get() */ } EAPI Eina_Bool diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 65d049a..832ea1e 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -1401,6 +1401,29 @@ _elm_widget_can_focus_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Bool can_focu } else { +// update child_can_focus of parents */ +Evas_Object *parent = elm_widget_parent_get(obj); +while (parent) + { + const Eina_List *l; + Evas_Object *subobj; + + ELM_WIDGET_DATA_GET(parent, sdp); + + sdp->child_can_focus = EINA_FALSE; + EINA_LIST_FOREACH(sdp->subobjs, l, subobj) + { + if (_is_focusable(subobj)) +{ + sdp->child_can_focus = EINA_TRUE; + break; +} + } + /* break again, child_can_focus went back to + * original value */ + if (sdp->child_can_focus) break; + parent = sdp->parent_obj; + } eo_do(obj, eo_event_callback_array_del(focus_callbacks(), NULL)); } } --
[EGIT] [core/elementary] master 01/01: atspi: fix invalid shift operation.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=ec69c39e6965c7d0a9fa2f4d09f87af2ad0f8822 commit ec69c39e6965c7d0a9fa2f4d09f87af2ad0f8822 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Oct 20 11:56:55 2015 +0200 atspi: fix invalid shift operation. Add additional check in case when Elm_Atspi_Role_Type enum will enlarge. CID: 1325724 --- src/lib/elm_atspi_bridge.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index c755601..6019cca 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -2589,7 +2589,7 @@ _collection_match_roles_lookup(Eo *obj, struct collection_match_rule *rule) eo_do(obj, role = elm_interface_atspi_accessible_role_get()); - if (role > 64) + if (role >= 64) { role -= 64; role_set = rule->roles[1]; @@ -2597,6 +2597,12 @@ _collection_match_roles_lookup(Eo *obj, struct collection_match_rule *rule) else role_set = rule->roles[0]; + if (role >= 64) + { +ERR("Elm_Atspi_Role enum value exceeds 127. Unable to compare with roles bit field."); +return EINA_FALSE; + } + switch (rule->rolematchtype) { case ATSPI_Collection_MATCH_INVALID: --
[EGIT] [core/elementary] master 01/01: atspi: fix typo
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=7426359664ba820993f368704e6dc8d40c8cd590 commit 7426359664ba820993f368704e6dc8d40c8cd590 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Mon Oct 19 13:39:56 2015 +0200 atspi: fix typo --- src/lib/elm_atspi_bridge.c| 6 +++--- src/lib/elm_interface_atspi_accessible.eo | 2 +- src/lib/elm_interface_atspi_accessible.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 2ced50d..f67c5c1 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -153,7 +153,7 @@ static const Elm_Atspi_Bridge_Event_Handler event_handlers[] = { { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_PROPERTY_CHANGED, _property_changed_signal_send}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_STATE_CHANGED, _state_changed_signal_send}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_VISIBLE_DATA_CHANGED, _visible_data_changed_signal_send}, - { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANTS_CHANGED, _active_descendant_changed_signal_send}, + { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANT_CHANGED, _active_descendant_changed_signal_send}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ADDED, _on_object_add}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_REMOVED, _on_object_del}, { ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_CREATED, _window_signal_send}, @@ -242,7 +242,7 @@ static const Eldbus_Signal _event_obj_signals[] = { [ATSPI_OBJECT_EVENT_VISIBLE_DATA_CHANGED] = {"VisibleDataChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, [ATSPI_OBJECT_EVENT_SELECTION_CHANGED] = {"SelectionChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, [ATSPI_OBJECT_EVENT_MODEL_CHANGED] = {"ModelChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, - [ATSPI_OBJECT_EVENT_ACTIVE_DESCENDANT_CHANGED] = {"ActiveDescendantsChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, + [ATSPI_OBJECT_EVENT_ACTIVE_DESCENDANT_CHANGED] = {"ActiveDescendantChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, [ATSPI_OBJECT_EVENT_ROW_INSERTED] = {"RowInserted", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, [ATSPI_OBJECT_EVENT_ROW_REORDERED] = {"RowReordered", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, [ATSPI_OBJECT_EVENT_ROW_DELETED] = {"RowDeleted", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, @@ -3695,7 +3695,7 @@ _set_broadcast_flag(const char *event, Eo *bridge) STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_TEXT_ATTRIBUTES_CHANGED); else if (!strcmp(tokens[1], "VisibleDataChanged")) STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_VISIBLE_DATA_CHANGED); -else if (!strcmp(tokens[1], "ActiveDescendantsChanged")) +else if (!strcmp(tokens[1], "ActiveDescendantChanged")) STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_ACTIVE_DESCENDANT_CHANGED); } else if (!strcmp(tokens[0], "Window")) diff --git a/src/lib/elm_interface_atspi_accessible.eo b/src/lib/elm_interface_atspi_accessible.eo index 65b6b95..65485cd 100644 --- a/src/lib/elm_interface_atspi_accessible.eo +++ b/src/lib/elm_interface_atspi_accessible.eo @@ -189,7 +189,7 @@ mixin Elm_Interface_Atspi_Accessible () children,changed: Elm_Atspi_Event_Children_Changed_Data; state,changed: Elm_Atspi_Event_State_Changed_Data; visible,data,changed; - active,descendants,changed; + active,descendant,changed; added; removed; } diff --git a/src/lib/elm_interface_atspi_accessible.h b/src/lib/elm_interface_atspi_accessible.h index 8ebe244..dd3112f 100644 --- a/src/lib/elm_interface_atspi_accessible.h +++ b/src/lib/elm_interface_atspi_accessible.h @@ -361,9 +361,9 @@ EAPI Elm_Atspi_Relation_Set elm_atspi_relation_set_clone(const Elm_Atspi_Relatio } while(0); /** - * Emits ATSPI 'ActiveDescendantsChanged' dbus signal. + * Emits ATSPI 'ActiveDescendantChanged' dbus signal. */ -#define elm_interface_atspi_accessible_active_descendants_changed_signal_emit(obj, child) \ +#define elm_interface_atspi_accessible_active_descendant_changed_signal_emit(obj, child) \ eo_do(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, elm_interface_atspi_accessible_event_emit(obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANT_CHANGED, child)); /** --
[EGIT] [core/elementary] master 01/02: atspi: always update cache
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=15171f47d7e74afdd1f621d0c22e7375a2c14ab0 commit 15171f47d7e74afdd1f621d0c22e7375a2c14ab0 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Oct 9 16:17:52 2015 +0200 atspi: always update cache libatspi implementation allows to call methods on objects which are not added to client cache with "AddAccessible" at-spi signal. Bridge should allow to perform such calls by updating its internal cache as soons as it returns a reference to the dbus object to client. --- src/lib/elm_atspi_bridge.c | 58 ++ 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index f67c5c1..c755601 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -556,7 +556,10 @@ _accessible_get_children(const Eldbus_Service_Interface *iface, const Eldbus_Mes EINA_SAFETY_ON_NULL_GOTO(iter_array, fail); EINA_LIST_FOREACH(children_list, l, children) - _bridge_iter_object_reference_append(bridge, iter_array, children); + { +_bridge_iter_object_reference_append(bridge, iter_array, children); +_bridge_object_register(bridge, children); + } eldbus_message_iter_container_close(iter, iter_array); eina_list_free(children_list); @@ -776,6 +779,7 @@ _accessible_child_at_index(const Eldbus_Service_Interface *iface EINA_UNUSED, co child = eina_list_nth(children, idx); _bridge_iter_object_reference_append(bridge, iter, child); + _bridge_object_register(bridge, child); eina_list_free(children); return ret; @@ -811,7 +815,10 @@ _accessible_get_relation_set(const Eldbus_Service_Interface *iface EINA_UNUSED, iter_array2 = eldbus_message_iter_container_new(iter_struct, 'a', "(so)"); EINA_SAFETY_ON_NULL_GOTO(iter_array2, fail); EINA_LIST_FOREACH(rel->objects, l2, rel_obj) - _bridge_iter_object_reference_append(bridge, iter_array2, rel_obj); + { + _bridge_iter_object_reference_append(bridge, iter_array2, rel_obj); + _bridge_object_register(bridge, rel_obj); + } eldbus_message_iter_container_close(iter_struct, iter_array2); eldbus_message_iter_container_close(iter_array, iter_struct); } @@ -863,6 +870,7 @@ _selection_selected_child_get(const Eldbus_Service_Interface *iface EINA_UNUSED, eo_do(obj, child = elm_interface_atspi_selection_selected_child_get(idx)); _bridge_iter_object_reference_append(bridge, iter, child); + _bridge_object_register(bridge, child); return ret; } @@ -3311,6 +3319,7 @@ _component_get_accessible_at_point(const Eldbus_Service_Interface *iface EINA_UN Eina_Bool type = coord_type == ATSPI_COORD_TYPE_SCREEN ? EINA_TRUE : EINA_FALSE; eo_do(obj, accessible = elm_interface_atspi_component_accessible_at_point_get(type, x, y)); _bridge_iter_object_reference_append(bridge, iter, accessible); + _bridge_object_register(bridge, accessible); return ret; } @@ -4133,23 +4142,24 @@ _event_handlers_register(Eo *bridge) static void _bridge_object_unregister(Eo *bridge, Eo *obj) { - Eldbus_Message *sig; - ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(bridge, pd); - sig = eldbus_service_signal_new(pd->cache_interface, ATSPI_OBJECT_CHILD_REMOVED); - Eldbus_Message_Iter *iter = eldbus_message_iter_get(sig); - _bridge_iter_object_reference_append(bridge, iter, obj); - eldbus_service_signal_send(pd->cache_interface, sig); - eina_hash_del(pd->cache, , obj); } static Eina_Bool _on_object_add(void *data, Eo *obj, const Eo_Event_Description *event EINA_UNUSED, void *event_info EINA_UNUSED) { - Eo *bridge = data; - _bridge_object_register(bridge, obj); + Eldbus_Message *sig; + Eldbus_Message_Iter *iter; + + ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN_VAL(data, pd, EINA_TRUE); + + sig = eldbus_service_signal_new(pd->cache_interface, ATSPI_OBJECT_CHILD_ADDED); + iter = eldbus_message_iter_get(sig); + _cache_item_reference_append_cb(data, obj, iter); + + eldbus_service_signal_send(pd->cache_interface, sig); return EINA_TRUE; } @@ -4157,8 +4167,16 @@ _on_object_add(void *data, Eo *obj, const Eo_Event_Description *event EINA_UNUSE static Eina_Bool _on_object_del(void *data, Eo *obj, const Eo_Event_Description *event EINA_UNUSED, void *event_info EINA_UNUSED) { - Eo *bridge = data; - _bridge_object_unregister(bridge, obj); + Eldbus_Message *sig; + + ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN_VAL(data, pd, EINA_TRUE); + + _bridge_object_unregister(data, obj); + + sig = eldbus_service_signal_new(pd->cache_interface, ATSPI_OBJECT_CHILD_REMOVED); + Eldbus_Message_Iter *iter = eldbus_message_iter_get(sig); + _bridge_iter_object_reference_append(data, iter, obj); + eldbus_service_sign
[EGIT] [core/elementary] master 02/02: atspi: clean-up children-changed event emission.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=d88cbf20c919aae1122e936819c06b19f99774ee commit d88cbf20c919aae1122e936819c06b19f99774ee Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Oct 8 12:23:15 2015 +0200 atspi: clean-up children-changed event emission. Patch fixes bugs caused by difference between elm widget and atspi objects hierarchy. --- src/lib/elm_genlist.c | 7 +-- src/lib/elm_list.c| 4 ++-- src/lib/elm_toolbar.c | 7 +++ src/lib/elm_widget.c | 30 +++--- src/lib/elm_widget.h | 1 + src/lib/elm_win.c | 17 +++-- 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index cb71fb9..2e4bd8b 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -397,8 +397,11 @@ _item_content_realize(Elm_Gen_Item *it, snprintf(buf, sizeof(buf), "elm,state,%s,visible", key); edje_object_signal_emit(target, buf, "elm"); - if (_elm_config->atspi_mode) - eo_do(content, elm_interface_atspi_accessible_parent_set(EO_OBJ(it))); + if (_elm_config->atspi_mode && eo_isa(content, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) + { + eo_do(content, elm_interface_atspi_accessible_parent_set(EO_OBJ(it))); + elm_interface_atspi_accessible_children_changed_added_signal_emit(EO_OBJ(it), content); + } } } } diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index c4b81a0..065caa4 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -2333,19 +2333,19 @@ _item_new(Evas_Object *obj, if (it->icon) { +eo_do(it->icon, elm_interface_atspi_accessible_parent_set(eo_it)); elm_widget_sub_object_add(obj, it->icon); evas_object_event_callback_add (it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); -eo_do(it->icon, elm_interface_atspi_accessible_parent_set(eo_it)); } if (it->end) { +eo_do(it->end, elm_interface_atspi_accessible_parent_set(eo_it)); elm_widget_sub_object_add(obj, it->end); evas_object_event_callback_add (it->end, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); -eo_do(it->end, elm_interface_atspi_accessible_parent_set(eo_it)); } if (_elm_config->atspi_mode) diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index 58914b2..b5096b4 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -2367,6 +2367,9 @@ _item_new(Evas_Object *obj, if (_elm_config->access_mode == ELM_ACCESS_MODE_ON) _access_widget_item_register(it); + eo_do(icon_obj, elm_interface_atspi_accessible_parent_set(VIEW(it))); + eo_do(VIEW(it), elm_interface_atspi_accessible_parent_set(eo_it)); + if (_item_icon_set(icon_obj, "toolbar/", icon)) { it->icon = icon_obj; @@ -2434,11 +2437,7 @@ _item_new(Evas_Object *obj, _item_select(it); if (_elm_config->atspi_mode) - { -eo_do(icon_obj, elm_interface_atspi_accessible_parent_set(eo_it)); -eo_do(VIEW(it), elm_interface_atspi_accessible_parent_set(eo_it)); elm_interface_atspi_accessible_added(eo_it); - } return it; } diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 4996141..65d049a 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -540,9 +540,6 @@ _elm_widget_evas_object_smart_show(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUS if (_elm_config->atspi_mode) { elm_interface_atspi_accessible_added(obj); -Eo *parent; -eo_do(obj, parent = elm_interface_atspi_accessible_parent_get()); -if (parent) elm_interface_atspi_accessible_children_changed_added_signal_emit(parent, obj); if (_elm_widget_onscreen_is(obj)) elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_TRUE); } @@ -563,12 +560,7 @@ _elm_widget_evas_object_smart_hide(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUS eina_iterator_free(it); if (_elm_config->atspi_mode) - { -Eo *parent; -eo_do(obj, parent = elm_interface_atspi_accessible_parent_get()); -if (parent) elm_interface_atspi_accessible_children_changed_del_signal_emit(parent, obj); -elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_FALSE); - } + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_FALSE); } EOLIAN static void @@ -1208,6 +1200,13 @@ _elm_widget_sub_object_add(Eo *obj, Elm_Widget_Smart_Data *sd, Evas_Object *sobj elm_widget_display_mode_set(sobj, eva
[EGIT] [core/elementary] master 01/01: list: set atspi parent despite atspi mode.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=81eddb8c261ed3d59550f18ccc839e122e3654d3 commit 81eddb8c261ed3d59550f18ccc839e122e3654d3 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Oct 6 11:18:52 2015 +0200 list: set atspi parent despite atspi mode. Path fixes failing test case when atspi mode was off. --- src/lib/elm_list.c| 8 +++- src/tests/elm_test_list.c | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 3a4e2fd..c4b81a0 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -2337,6 +2337,7 @@ _item_new(Evas_Object *obj, evas_object_event_callback_add (it->icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); +eo_do(it->icon, elm_interface_atspi_accessible_parent_set(eo_it)); } if (it->end) { @@ -2344,14 +2345,11 @@ _item_new(Evas_Object *obj, evas_object_event_callback_add (it->end, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _size_hints_changed_cb, obj); +eo_do(it->end, elm_interface_atspi_accessible_parent_set(eo_it)); } if (_elm_config->atspi_mode) - { -if (it->end) eo_do(it->end, elm_interface_atspi_accessible_parent_set(eo_it)); -if (it->icon) eo_do(it->icon, elm_interface_atspi_accessible_parent_set(eo_it)); -elm_interface_atspi_accessible_added(eo_it); - } + elm_interface_atspi_accessible_added(eo_it); return it; } diff --git a/src/tests/elm_test_list.c b/src/tests/elm_test_list.c index b22e078..6ae7ab5 100644 --- a/src/tests/elm_test_list.c +++ b/src/tests/elm_test_list.c @@ -241,6 +241,6 @@ void elm_test_list(TCase *tc) 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); - tcase_add_test(tc, elm_atspi_children_parent); #endif + tcase_add_test(tc, elm_atspi_children_parent); } --
[EGIT] [core/elementary] master 01/01: tests: add new tests for AT-SPI beta API.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=11e38c716b77d45917b9417caf7517cd4e63cf9b commit 11e38c716b77d45917b9417caf7517cd4e63cf9b Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Oct 6 15:38:09 2015 +0200 tests: add new tests for AT-SPI beta API. --- src/lib/elm_widget.c | 5 + src/tests/elm_test_atspi.c | 321 ++- src/tests/elm_test_genlist.c | 2 +- 3 files changed, 325 insertions(+), 3 deletions(-) diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 4a9022f..4996141 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -5810,6 +5810,11 @@ EOLIAN static char* _elm_widget_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED) { const char *ret; + char *name; + eo_do_super(obj, ELM_WIDGET_CLASS, name = elm_interface_atspi_accessible_name_get()); + + if (name) return name; + ret = elm_object_text_get(obj); if (!ret) return NULL; diff --git a/src/tests/elm_test_atspi.c b/src/tests/elm_test_atspi.c index da616ff..bf7c3b5 100644 --- a/src/tests/elm_test_atspi.c +++ b/src/tests/elm_test_atspi.c @@ -25,7 +25,7 @@ void generate_app(void) evas_object_show(g_win); } -START_TEST (elm_atspi_name_get) +START_TEST (elm_atspi_app_obj_name_get) { elm_init(0, NULL); @@ -46,6 +46,64 @@ START_TEST (elm_atspi_name_get) } END_TEST +START_TEST (elm_atspi_name_get) +{ + elm_init(0, NULL); + generate_app(); + + char *name; + + eo_do(g_btn, name = elm_interface_atspi_accessible_name_get()); + + if (name && name[0]) { + ck_assert(0); + } + + free(name); + + // Set name with additional text tags + elm_object_text_set(g_btn, "Sometext"); + + eo_do(g_btn, name = elm_interface_atspi_accessible_name_get()); + + // Accessible name should have cleared tags + ck_assert(name != NULL); + ck_assert_str_eq(name, "Some\ntext"); + + free(name); + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_name_set) +{ + elm_init(0, NULL); + generate_app(); + + char *name; + + elm_object_text_set(g_btn, "Other text"); + eo_do(g_btn, elm_interface_atspi_accessible_name_set("Test name")); + + eo_do(g_btn, name = elm_interface_atspi_accessible_name_get()); + + ck_assert(name != NULL); + ck_assert_str_eq(name, "Test name"); + + free(name); + + eo_do(g_btn, elm_interface_atspi_accessible_name_set(NULL)); + eo_do(g_btn, name = elm_interface_atspi_accessible_name_get()); + + ck_assert(name != NULL); + ck_assert_str_eq(name, "Other text"); + + free(name); + + elm_shutdown(); +} +END_TEST + START_TEST (elm_atspi_role_get) { elm_init(0, NULL); @@ -63,6 +121,29 @@ START_TEST (elm_atspi_role_get) } END_TEST +START_TEST (elm_atspi_role_set) +{ + elm_init(0, NULL); + generate_app(); + Elm_Atspi_Role role; + + eo_do(g_btn, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_ACCELERATOR_LABEL)); + eo_do(g_btn, role = elm_interface_atspi_accessible_role_get()); + + if (role != ELM_ATSPI_ROLE_ACCELERATOR_LABEL) + ck_assert(0); + + eo_do(g_btn, elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_ENTRY)); + eo_do(g_btn, role = elm_interface_atspi_accessible_role_get()); + + if (role != ELM_ATSPI_ROLE_ENTRY) + ck_assert(0); + + elm_shutdown(); +} +END_TEST + + START_TEST (elm_atspi_role_name_get) { @@ -113,17 +194,36 @@ START_TEST (elm_atspi_description_set) ck_assert(ret == NULL); eo_do(root, elm_interface_atspi_accessible_description_set(desc)); - eo_do(root, ret = elm_interface_atspi_accessible_description_get()); ck_assert(ret != NULL); ck_assert_str_eq(ret, "Test description"); + eo_do(root, elm_interface_atspi_accessible_description_set(NULL)); + eo_do(root, ret = elm_interface_atspi_accessible_description_get()); + + ck_assert(ret == NULL); + eo_unref(root); elm_shutdown(); } END_TEST +/* Test if intial description value is NULL */ +START_TEST (elm_atspi_description_get) +{ + elm_init(0, NULL); + generate_app(); + + const char *descr; + eo_do(g_bg, descr = elm_interface_atspi_accessible_description_get()); + + ck_assert(descr == NULL); + + elm_shutdown(); +} +END_TEST + START_TEST (elm_atspi_children_and_parent) { elm_init(0, NULL); @@ -184,13 +284,230 @@ START_TEST (elm_atspi_children_and_parent2) } END_TEST +/* Initial value of translation domain should be NULL */ +START_TEST (elm_atspi_translation_domain_get) +{ + elm_init(0, NULL); + generate_app(); + + const char *domain; + + eo_do(g_btn, domain = elm_interface_atspi_accessible_translation_domain_get()); + + ck_assert(domain == NULL); + + elm_shutdown(); +} +END_TEST + +START_TEST (elm_atspi_translation_domain_set) +{ + elm_init(0, NULL); + generate_app(); + + const char *do
[EGIT] [core/elementary] master 01/01: atspi: add new relationship append/remove/clear API
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=7158d62cb65edf2abf1da8ac0c50df6511d77d9b commit 7158d62cb65edf2abf1da8ac0c50df6511d77d9b Author: Lukasz Stanislawski <lukasz.stanislaw...@gmail.com> Date: Sun Oct 4 22:30:31 2015 +0200 atspi: add new relationship append/remove/clear API Allow to add some extra contextul information about accessibility objects which can be used by Assistive Technology to provide better user experience. API is still marked as beta. @feature --- src/lib/elm_atspi_bridge.c| 12 +- src/lib/elm_interface_atspi_accessible.c | 180 +- src/lib/elm_interface_atspi_accessible.eo | 38 ++- src/lib/elm_interface_atspi_accessible.h | 39 ++- src/lib/elm_widget.c | 54 ++--- src/lib/elm_widget.eo | 1 - 6 files changed, 270 insertions(+), 54 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 9341153..b405655 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -786,11 +786,12 @@ _accessible_get_relation_set(const Eldbus_Service_Interface *iface EINA_UNUSED, { const char *obj_path = eldbus_message_path_get(msg); Eo *bridge = eldbus_service_object_data_get(iface, ELM_ATSPI_BRIDGE_CLASS_NAME); - Eo *obj = _bridge_object_from_path(bridge, obj_path); + Eo *rel_obj, *obj = _bridge_object_from_path(bridge, obj_path); Eldbus_Message *ret = NULL; Eldbus_Message_Iter *iter = NULL, *iter_array = NULL, *iter_array2 = NULL, *iter_struct; Elm_Atspi_Relation *rel; - Eina_List *rels; + Eina_List *l, *l2; + Elm_Atspi_Relation_Set rels; ELM_ATSPI_OBJ_CHECK_OR_RETURN_DBUS_ERROR(obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, msg); @@ -803,17 +804,18 @@ _accessible_get_relation_set(const Eldbus_Service_Interface *iface EINA_UNUSED, eo_do(obj, rels = elm_interface_atspi_accessible_relation_set_get()); - EINA_LIST_FREE(rels, rel) + EINA_LIST_FOREACH(rels, l, rel) { iter_struct = eldbus_message_iter_container_new(iter_array, 'r', NULL); eldbus_message_iter_basic_append(iter_struct, 'u', _elm_relation_to_atspi_relation(rel->type)); iter_array2 = eldbus_message_iter_container_new(iter_struct, 'a', "(so)"); EINA_SAFETY_ON_NULL_GOTO(iter_array2, fail); -_bridge_iter_object_reference_append(bridge, iter_array2, rel->obj); +EINA_LIST_FOREACH(rel->objects, l2, rel_obj) + _bridge_iter_object_reference_append(bridge, iter_array2, rel_obj); eldbus_message_iter_container_close(iter_struct, iter_array2); eldbus_message_iter_container_close(iter_array, iter_struct); -free(rel); } + elm_atspi_relation_set_free(rels); eldbus_message_iter_container_close(iter, iter_array); return ret; diff --git a/src/lib/elm_interface_atspi_accessible.c b/src/lib/elm_interface_atspi_accessible.c index 709d142..0c0a213 100644 --- a/src/lib/elm_interface_atspi_accessible.c +++ b/src/lib/elm_interface_atspi_accessible.c @@ -127,6 +127,7 @@ struct _Elm_Interface_Atspi_Accessible_Data const char*name; const char*description; const char*translation_domain; + Elm_Atspi_Relation_Set relations; Elm_Interface_Atspi_Accessible *parent; }; @@ -290,12 +291,10 @@ _elm_interface_atspi_accessible_state_set_get(Eo *obj EINA_UNUSED, Elm_Interface return 0; } -EOLIAN Eina_List* +EOLIAN Elm_Atspi_Relation_Set _elm_interface_atspi_accessible_relation_set_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED) { - WRN("The %s object does not implement the \"accessible_relation_set\" function.", - eo_class_name_get(eo_class_get(obj))); - return NULL; + return elm_atspi_relation_set_clone(pd->relations); } EAPI void elm_atspi_attributes_list_free(Eina_List *list) @@ -369,4 +368,177 @@ _elm_interface_atspi_accessible_translation_domain_get(Eo *obj EINA_UNUSED, Elm_ return pd->translation_domain; } +EAPI void +elm_atspi_relation_free(Elm_Atspi_Relation *relation) +{ + eina_list_free(relation->objects); + free(relation); +} + +EAPI Elm_Atspi_Relation * +elm_atspi_relation_clone(const Elm_Atspi_Relation *relation) +{ + Elm_Atspi_Relation *ret = calloc(sizeof(Elm_Atspi_Relation), 1); + if (!ret) return NULL; + + ret->type = relation->type; + ret->objects = eina_list_clone(relation->objects); + return ret; +} + +static Eina_Bool +_on_rel_obj_del(void *data, Eo *obj, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Elm_Atspi_Relation_Set *set = data; + Elm_Atspi_Relation *rel; + Eina_List *l, *l2, *p, *p2; + Eo *rel_obj; + + EINA_LIST_FOREACH_SAFE(*set, l, l2, rel) + { +EINA_LIST_FOREACH_SAFE(rel->objects, p, p2, rel_obj) +
[EGIT] [core/elementary] master 01/01: atspi: support org.a11y.atspi.Collection interface
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=c57bed959e8984d928fc3dc8bf51f12f8d13731c commit c57bed959e8984d928fc3dc8bf51f12f8d13731c Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Wed Aug 5 03:23:47 2015 +0200 atspi: support org.a11y.atspi.Collection interface org.a11y.atspi.Collection interface allows to perform fast search queries on accessibility objects tree. Due to lack of specification of collection interface this implementation base on gnome project implementation from https://git.gnome.org/browse/at-spi2-atk/. @feature --- src/lib/elm_atspi_bridge.c | 720 - 1 file changed, 711 insertions(+), 9 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 345ab6b..9341153 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -87,6 +87,7 @@ typedef struct _Elm_Atspi_Bridge_Data Eldbus_Service_Interface *application; Eldbus_Service_Interface *action; Eldbus_Service_Interface *component; +Eldbus_Service_Interface *collection; Eldbus_Service_Interface *editable_text; Eldbus_Service_Interface *image; Eldbus_Service_Interface *selection; @@ -98,6 +99,19 @@ typedef struct _Elm_Atspi_Bridge_Data Eina_Bool connected : 1; } Elm_Atspi_Bridge_Data; + +struct collection_match_rule { + Elm_Atspi_State_Set states; + AtspiCollectionMatchType statematchtype; + Eina_List *attributes; + AtspiCollectionMatchType attributematchtype; + uint64_t roles[2]; + AtspiCollectionMatchType rolematchtype; + Eina_List *ifaces; + AtspiCollectionMatchType interfacematchtype; + Eina_Bool reverse : 1; +}; + static Eo *_instance; static int _init_count = 0; @@ -644,6 +658,15 @@ _elm_atspi_state_set_to_atspi_state_set(Elm_Atspi_State_Set states) return ret; } +static Elm_Atspi_State_Set +_atspi_state_set_to_elm_atspi_state_set(uint64_t states) +{ + //Currently Elm_Atspi_State and Atspi_State_Set are binary compatible, + //implement proper coversion when it will be needed. + Elm_Atspi_State_Set ret = states; + return ret; +} + static Eina_Hash* _elm_atspi_state_hash_build(void) { @@ -2365,6 +2388,675 @@ static const Eldbus_Service_Interface_Desc application_iface_desc = { ATSPI_DBUS_INTERFACE_APPLICATION, NULL, NULL, application_properties, _application_properties_get, _application_properties_set }; +void +_collection_match_rule_free(struct collection_match_rule *rule) +{ + Elm_Atspi_Attribute *attr; + eina_list_free(rule->ifaces); + EINA_LIST_FREE(rule->attributes, attr) + { +eina_stringshare_del(attr->key); +eina_stringshare_del(attr->value); + } +} + +static void +_collection_roles_convert(uint64_t roles[2]) +{ + // Currently elm roles and atspi roles are binary compatible. + // Implement this function when it will be needed. + (void)roles; +} + +static Eina_Bool +_collection_iter_match_rule_get(Eldbus_Message_Iter *iter, struct collection_match_rule *rule) +{ + Eldbus_Message_Iter *states_iter, *attrib_iter, *iter_arg, *role_iter, *ifc_iter; + unsigned int *array; + int array_count, state_match, attrib_match, role_match, ifc_match, reverse; + const char *ifc_name; + + if (!eldbus_message_iter_arguments_get(iter, "aiia{ss}iaiiasib", _iter, _match, _iter, _match, _iter, _match, _iter, _match, )) + { +ERR("Unable to get message arguments"); +return EINA_FALSE; + } + + memset(rule, 0x0, sizeof(struct collection_match_rule)); + rule->statematchtype = state_match; + rule->attributematchtype = attrib_match; + rule->rolematchtype = role_match; + rule->interfacematchtype = ifc_match; + rule->reverse = reverse; + + if (!eldbus_message_iter_fixed_array_get(states_iter, 'i', , _count)) + return EINA_FALSE; + + //Roles according to libatspi impementation are transfered in 2-int element fixed bit array + if (array_count != 2) + { +ERR("Unexpected states array size"); +return EINA_FALSE; + } + uint64_t states = ((uint64_t)array[0] | ((uint64_t)array[1] << 32)); + rule->states = _atspi_state_set_to_elm_atspi_state_set(states); + + //Roles according to libatspi impementation are transfered in 4-int element fixed bit array + if (!eldbus_message_iter_fixed_array_get(role_iter, 'i', , _count)) + return EINA_FALSE; + + if (array_count != 4) + { +ERR("Unexpected roles array size"); +return EINA_FALSE; + } + + //convert atspi roles to elm_roles + rule->roles[0] = ((uint64_t)array[0] | ((uint64_t)array[1] << 32)); + rule->roles[1] = ((uint64_t)array[2] | ((uint64_t)array[3] << 32)); + + _collection_roles_convert(rule->roles); + + //Get matching prop
[EGIT] [core/elementary] master 01/01: atspi: encapsulate common behaviour in atspi mixin class.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=7defa24fd074bd8cd35318c7707acf4fbce69c44 commit 7defa24fd074bd8cd35318c7707acf4fbce69c44 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Oct 1 17:24:42 2015 +0200 atspi: encapsulate common behaviour in atspi mixin class. This patch moves some duplicated implementation from elm_widget and elm_widget_item classes into atspi base mixin. It allows to better share code and reduce maintainability. Change-Id: I8d264661e7ffade7da72299f29075a536d71eaa3 --- src/lib/elm_interface_atspi_accessible.c | 84 --- src/lib/elm_interface_atspi_accessible.eo | 8 +-- src/lib/elm_widget.c | 78 src/lib/elm_widget.eo | 5 -- src/lib/elm_widget.h | 8 --- src/lib/elm_widget_item.eo| 4 -- 6 files changed, 58 insertions(+), 129 deletions(-) diff --git a/src/lib/elm_interface_atspi_accessible.c b/src/lib/elm_interface_atspi_accessible.c index 3524008..5bfb80e 100644 --- a/src/lib/elm_interface_atspi_accessible.c +++ b/src/lib/elm_interface_atspi_accessible.c @@ -121,10 +121,21 @@ struct _Elm_Atspi_Event_Handler void *data; }; +struct _Elm_Interface_Atspi_Accessible_Data +{ + Elm_Atspi_Role role; + const char*name; + const char*description; + Elm_Interface_Atspi_Accessible *parent; +}; + +typedef struct _Elm_Interface_Atspi_Accessible_Data Elm_Interface_Atspi_Accessible_Data; + + static Eina_List *global_callbacks; EOLIAN static int -_elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, void *pd EINA_UNUSED) +_elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED) { Eina_List *l, *children = NULL; Eo *chld, *parent = NULL; @@ -151,27 +162,24 @@ _elm_interface_atspi_accessible_index_in_parent_get(Eo *obj, void *pd EINA_UNUSE return ret; } -EOLIAN static Eo * -_elm_interface_atspi_accessible_parent_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED) +EOLIAN static Elm_Interface_Atspi_Accessible * +_elm_interface_atspi_accessible_parent_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd) { - Eo *parent = NULL; - - /* By default using Eo_Base object hierarchy */ - eo_do(obj, parent = eo_parent_get()); - if (!parent) return NULL; - - return eo_isa(parent, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN) ? parent : NULL; + return pd->parent; } EOLIAN static void -_elm_interface_atspi_accessible_parent_set(Eo *obj, void *priv EINA_UNUSED, Eo *new_parent EINA_UNUSED) +_elm_interface_atspi_accessible_parent_set(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd, Elm_Interface_Atspi_Accessible *new_parent) { - WRN("The %s object does not implement the \"accessible_parent_set\" function.", - eo_class_name_get(eo_class_get(obj))); + if (pd->parent != new_parent) + { +pd->parent = new_parent; +elm_interface_atspi_accessible_parent_changed_signal_emit(obj); + } } EOLIAN Eina_List* -_elm_interface_atspi_accessible_attributes_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED) +_elm_interface_atspi_accessible_attributes_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED) { WRN("The %s object does not implement the \"accessible_attributes_set\" function.", eo_class_name_get(eo_class_get(obj))); @@ -179,20 +187,23 @@ _elm_interface_atspi_accessible_attributes_get(Eo *obj EINA_UNUSED, void *pd EIN } EOLIAN static Elm_Atspi_Role -_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED) +_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED) { - return ELM_ATSPI_ROLE_UNKNOWN; + return pd->role; } EOLIAN static void -_elm_interface_atspi_accessible_role_set(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Elm_Atspi_Role role EINA_UNUSED) +_elm_interface_atspi_accessible_role_set(Eo *obj, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED, Elm_Atspi_Role role) { - WRN("The %s object does not implement the \"accessible_role_set\" function.", - eo_class_name_get(eo_class_get(obj))); + if (pd->role != role) + { +pd->role = role; +elm_interface_atspi_accessible_role_changed_signal_emit(obj); + } } EOLIAN const char * -_elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED) +_elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd EINA_UNUSED) { Elm_Atspi_Role role; @@ -202,36 +213,30 @@ _elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, void *pd EINA } EOLIAN char * -_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED,
[EGIT] [core/elementary] master 02/03: widget_item: emit atspi children-changed only for non-destroyed parent.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=d1488623ca8cc91da5da95bc0e933f81ba83fc50 commit d1488623ca8cc91da5da95bc0e933f81ba83fc50 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Oct 2 11:35:27 2015 +0200 widget_item: emit atspi children-changed only for non-destroyed parent. --- src/lib/elm_interface_atspi_accessible.c | 2 +- src/lib/elm_widget.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/elm_interface_atspi_accessible.c b/src/lib/elm_interface_atspi_accessible.c index 5bfb80e..483a35f 100644 --- a/src/lib/elm_interface_atspi_accessible.c +++ b/src/lib/elm_interface_atspi_accessible.c @@ -300,7 +300,7 @@ _elm_interface_atspi_accessible_event_emit(Eo *class EINA_UNUSED, void *pd EINA_ if (!accessible || !event || !eo_isa(accessible, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) { -CRI("Invalid accessibility event emit parameters"); +CRI("Invalid parameters, event: %s, obj: %s", event ? event->name : "NULL", accessible ? eo_class_name_get(accessible) : "NULL"); return; } diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index a8f5174..b14a625 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -4434,7 +4434,7 @@ _elm_widget_item_eo_base_destructor(Eo *eo_item, Elm_Widget_Item_Data *item) eo_do(eo_item, elm_interface_atspi_accessible_description_set(NULL)); eo_do(eo_item, elm_interface_atspi_accessible_name_set(NULL)); - if (_elm_config->atspi_mode) + if (_elm_config->atspi_mode && item->widget) elm_interface_atspi_accessible_children_changed_del_signal_emit(item->widget, eo_item); elm_interface_atspi_accessible_removed(eo_item); --
[EGIT] [core/elementary] master 01/03: atspi: fix state macros after extending Elm_Atspi_State_Type.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=3035b44231d992ae9d66fdca3e83560825a004b1 commit 3035b44231d992ae9d66fdca3e83560825a004b1 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Oct 2 11:33:46 2015 +0200 atspi: fix state macros after extending Elm_Atspi_State_Type. --- src/lib/elm_interface_atspi_accessible.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/elm_interface_atspi_accessible.h b/src/lib/elm_interface_atspi_accessible.h index 9b147c9..0012caa 100644 --- a/src/lib/elm_interface_atspi_accessible.h +++ b/src/lib/elm_interface_atspi_accessible.h @@ -17,17 +17,17 @@ typedef uint64_t Elm_Atspi_State_Set; /* * Sets a particilar state type for given state set. */ -#define STATE_TYPE_SET(state_set, type) (state_set|= (1 << type)) +#define STATE_TYPE_SET(state_set, type) (state_set|= (1L << type)) /** * Unsets a particilar state type for given state set. */ -#define STATE_TYPE_UNSET(state_set, type) (state_set &= ~(1 << type)) +#define STATE_TYPE_UNSET(state_set, type) (state_set &= ~(1L << type)) /** * Gets value of a particilar state type for given state set. */ -#define STATE_TYPE_GET(state_set, type) (state_set & (1 << type)) +#define STATE_TYPE_GET(state_set, type) (state_set & (1L << type)) /** --
[EGIT] [core/elementary] master 03/03: atspi: properly set parent.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=b1861986385479221ef9c13ca2d5ff1c0e259f6a commit b1861986385479221ef9c13ca2d5ff1c0e259f6a Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Oct 2 16:44:19 2015 +0200 atspi: properly set parent. Set proper atspi parents in cases when AT-SPI object tree structure should be different then elementary tree (mostly in cases of elm_widget_items) Add regression tests for those cases. --- src/lib/elm_gengrid.c| 15 src/lib/elm_genlist.c| 3 +++ src/lib/elm_list.c | 7 ++ src/lib/elm_toolbar.c| 8 +++ src/tests/elm_test_gengrid.c | 55 +++- src/tests/elm_test_genlist.c | 38 ++ src/tests/elm_test_list.c| 31 + 7 files changed, 156 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 580d07a..01c72cc 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -898,6 +898,9 @@ _item_content_realize(Elm_Gen_Item *it, elm_widget_sub_object_add(WIDGET(it), content); if (eo_do_ret(EO_OBJ(it), tmp, elm_wdg_item_disabled_get())) elm_widget_disabled_set(content, EINA_TRUE); + + if (_elm_config->atspi_mode && eo_isa(content, ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN)) + eo_do(content, elm_interface_atspi_accessible_parent_set(EO_OBJ(it))); } } } @@ -4432,6 +4435,12 @@ _elm_gengrid_item_append(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_C ecore_job_del(sd->calc_job); sd->calc_job = ecore_job_add(_calc_job, obj); + if (_elm_config->atspi_mode) + { +elm_interface_atspi_accessible_added(EO_OBJ(it)); + elm_interface_atspi_accessible_children_changed_added_signal_emit(sd->obj, EO_OBJ(it)); + } + return EO_OBJ(it); } @@ -4452,6 +4461,12 @@ _elm_gengrid_item_prepend(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_ ecore_job_del(sd->calc_job); sd->calc_job = ecore_job_add(_calc_job, obj); + if (_elm_config->atspi_mode) + { +elm_interface_atspi_accessible_added(EO_OBJ(it)); + elm_interface_atspi_accessible_children_changed_added_signal_emit(sd->obj, EO_OBJ(it)); + } + return EO_OBJ(it); } diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index d76352f..cb71fb9 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -396,6 +396,9 @@ _item_content_realize(Elm_Gen_Item *it, snprintf(buf, sizeof(buf), "elm,state,%s,visible", key); edje_object_signal_emit(target, buf, "elm"); + + if (_elm_config->atspi_mode) + eo_do(content, elm_interface_atspi_accessible_parent_set(EO_OBJ(it))); } } } diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 7086486..3a4e2fd 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -2346,6 +2346,13 @@ _item_new(Evas_Object *obj, obj); } + if (_elm_config->atspi_mode) + { +if (it->end) eo_do(it->end, elm_interface_atspi_accessible_parent_set(eo_it)); +if (it->icon) eo_do(it->icon, elm_interface_atspi_accessible_parent_set(eo_it)); +elm_interface_atspi_accessible_added(eo_it); + } + return it; } diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c index 124c2ca..aa39481 100644 --- a/src/lib/elm_toolbar.c +++ b/src/lib/elm_toolbar.c @@ -2431,6 +2431,14 @@ _item_new(Evas_Object *obj, _resizing_eval_item(it); if ((!sd->items) && (sd->select_mode == ELM_OBJECT_SELECT_MODE_ALWAYS)) _item_select(it); + + if (_elm_config->atspi_mode) + { +eo_do(icon_obj, elm_interface_atspi_accessible_parent_set(eo_it)); +eo_do(VIEW(it), elm_interface_atspi_accessible_parent_set(eo_it)); +elm_interface_atspi_accessible_added(eo_it); + } + return it; } diff --git a/src/tests/elm_test_gengrid.c b/src/tests/elm_test_gengrid.c index 1d95a67..f0b3c2a 100644 --- a/src/tests/elm_test_gengrid.c +++ b/src/tests/elm_test_gengrid.c @@ -5,6 +5,7 @@ #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED #include #include "elm_suite.h" +#include "elm_test_helper.h" START_TEST (elm_atspi_role_get) @@ -24,7 +25,59 @@ START_TEST (elm_atspi_role_get) } END_TEST +// Temporary commnted since gengrid fields_update function do not call content callbacks +// (different behaviour then genlist - which calls) +#if 0 +static Evas_Object *content; + +static Evas_Object * +gl_content_get(void *data EINA_UNUSED, Evas_Object *obj, const char *part EINA_UNUSED) +{ + content = elm_button_add(obj); + evas_object_show(content); + return content; +} + +/** + * Valida
[EGIT] [core/elementary] master 01/01: atspi: add translation domain for name and description.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=ac12f3adf246898f80085eb3bb0355d15cc113eb commit ac12f3adf246898f80085eb3bb0355d15cc113eb Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Fri Oct 2 17:04:38 2015 +0200 atspi: add translation domain for name and description. @feature --- src/lib/elm_interface_atspi_accessible.c | 31 ++- src/lib/elm_interface_atspi_accessible.eo | 24 src/lib/elm_widget.c | 2 ++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_interface_atspi_accessible.c b/src/lib/elm_interface_atspi_accessible.c index 483a35f..709d142 100644 --- a/src/lib/elm_interface_atspi_accessible.c +++ b/src/lib/elm_interface_atspi_accessible.c @@ -126,6 +126,7 @@ struct _Elm_Interface_Atspi_Accessible_Data Elm_Atspi_Role role; const char*name; const char*description; + const char*translation_domain; Elm_Interface_Atspi_Accessible *parent; }; @@ -215,7 +216,19 @@ _elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, Elm_Interface EOLIAN char * _elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd) { - return pd->name ? strdup(pd->name) : NULL; + if (pd->name) + { +#ifdef ENABLE_NLS +if (pd->translation_domain) + return strdup(dgettext(pd->translation_domain, pd->name)); +else + return strdup(pd->name); +#else +return strdup(pd->name); +#endif + } + + return NULL; } EOLIAN static void @@ -226,6 +239,10 @@ _elm_interface_atspi_accessible_name_set(Eo *obj EINA_UNUSED, Elm_Interface_Atsp const char * _elm_interface_atspi_accessible_description_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd) { +#ifdef ENABLE_NLS + if (pd->translation_domain) + return dgettext(pd->translation_domain, pd->description); +#endif return pd->description; } @@ -340,4 +357,16 @@ _elm_interface_atspi_accessible_event_handler_del(Eo *class EINA_UNUSED, void *p } } +EOLIAN void +_elm_interface_atspi_accessible_translation_domain_set(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd, const char *domain) +{ + eina_stringshare_replace(>translation_domain, domain); +} + +EOLIAN const char* +_elm_interface_atspi_accessible_translation_domain_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd) +{ + return pd->translation_domain; +} + #include "elm_interface_atspi_accessible.eo.c" diff --git a/src/lib/elm_interface_atspi_accessible.eo b/src/lib/elm_interface_atspi_accessible.eo index 98e02ad..f6a4ed7 100644 --- a/src/lib/elm_interface_atspi_accessible.eo +++ b/src/lib/elm_interface_atspi_accessible.eo @@ -123,6 +123,30 @@ mixin Elm_Interface_Atspi_Accessible () @in event_info: void*; [[Accessibility event details.]] } } + @property translation_domain @protected { + get { +[[Gets the translation domain of "name" and "description" + properties.]] + } + set { +[[Sets the translation domain of "name" and "description" + properties. + + Translation domain should be set if application wants to support i18n + for accessibily "name" and "description" properties. + + When translation domain is set values of "name" and "description" + properties will be translated with dgettext function using + current translation domain as "domainname" parameter. + + It is application developer responsibility to ensure that + translation files are loaded and binded to translation domain + when accessibility is enabled.]] + } + values { +domain: const(char)*; [[ translation domain ]] + } + } } events { property,changed: const(char)*; diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index b14a625..73d024a 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -4433,6 +4433,7 @@ _elm_widget_item_eo_base_destructor(Eo *eo_item, Elm_Widget_Item_Data *item) eo_do(eo_item, elm_interface_atspi_accessible_description_set(NULL)); eo_do(eo_item, elm_interface_atspi_accessible_name_set(NULL)); + eo_do(eo_item, elm_interface_atspi_accessible_translation_domain_set(NULL)); if (_elm_config->atspi_mode && item->widget) elm_interface_atspi_accessible_children_changed_del_signal_emit(item->widget, eo_item); @@ -5707,6 +5708,7 @@ _elm_widget_eo_base_destructor(Eo *obj, Elm_Widget_Smart_Data *sd EINA_UNUSED) { eo_do(obj, elm_interface_atspi_access
[EGIT] [core/elementary] master 01/01: Merge branch 'devs/stanluk/perf'
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=b9d315996b917a2c04f5608ad3476140e1613ee0 commit b9d315996b917a2c04f5608ad3476140e1613ee0 Merge: 5471505 a109bf0 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Thu Oct 1 16:08:35 2015 +0200 Merge branch 'devs/stanluk/perf' Serie of patches reducing overall memory overhead of atspi mode. The main changes include: * use recently fixed eldbus_service_register_fallback function instead of regular ones. * use global accessibility events emitter and handler to avoid registering array of callbacks on every accessible object. * do not keep strings with object paths src/lib/Makefile.am | 1 + src/lib/elm_atspi_bridge.c| 917 +++--- src/lib/elm_entry.c | 10 +- src/lib/elm_genlist.c | 21 +- src/lib/elm_interface_atspi_accessible.c | 55 ++ src/lib/elm_interface_atspi_accessible.eo | 23 + src/lib/elm_interface_atspi_accessible.h | 46 +- src/lib/elm_interface_atspi_window.h | 56 ++ src/lib/elm_interfaces.h | 3 +- src/lib/elm_widget.c | 38 +- src/lib/elm_win.c | 36 +- src/tests/elm_test_genlist.c | 11 +- 12 files changed, 697 insertions(+), 520 deletions(-) --
[EGIT] [core/efl] master 18/20: eldbus: fix broken fallback interface.
cedric pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=abdbb9ad1432e2b3a7845f8466ec042fb684f2d0 commit abdbb9ad1432e2b3a7845f8466ec042fb684f2d0 Author: Lukasz Stanislawski <l.stanisl...@samsung.com> Date: Tue Sep 22 00:04:35 2015 +0200 eldbus: fix broken fallback interface. Summary: Previous implementation assumed that fallback interface path should be changed on every method call. This is generally not needed since real request path can be obtained directly from dbus message passed as method call paremeter. This patch reverts this behaviour and additionally fix broken Property and Introspect interface handling of fallback interface. Reviewers: raster, lucasdemarchi, cedric Subscribers: cedric, seoz Differential Revision: https://phab.enlightenment.org/D3016 Signed-off-by: Cedric BAIL <ced...@osg.samsung.com> --- src/lib/eldbus/eldbus_service.c | 15 --- 1 file changed, 15 deletions(-) diff --git a/src/lib/eldbus/eldbus_service.c b/src/lib/eldbus/eldbus_service.c index f92f821..9fdcdd5 100644 --- a/src/lib/eldbus/eldbus_service.c +++ b/src/lib/eldbus/eldbus_service.c @@ -669,8 +669,6 @@ _eldbus_service_object_add(Eldbus_Connection *conn, const char *path, Eina_Bool obj->interfaces = eina_hash_string_superfast_new(NULL); eldbus_connection_free_cb_add(conn, _on_connection_free, obj); - if (obj->fallback) return obj; - eina_hash_add(obj->interfaces, introspectable->name, introspectable); eina_hash_add(obj->interfaces, properties_iface->name, properties_iface); @@ -1324,18 +1322,11 @@ _object_handler(DBusConnection *dbus_conn EINA_UNUSED, DBusMessage *msg, void *u const Eldbus_Method *method; Eldbus_Message *eldbus_msg, *reply; Eldbus_Connection *conn; - const char* fallback_path = NULL; obj = user_data; if (!obj) return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; conn = obj->conn; - if (obj->fallback) - { - fallback_path = eina_stringshare_add(obj->path); - eina_stringshare_replace(>path, dbus_message_get_path(msg)); - } - DBG("Connection@%p Got message:\n" " Type: %s\n" " Path: %s\n" @@ -1387,12 +1378,6 @@ _object_handler(DBusConnection *dbus_conn EINA_UNUSED, DBusMessage *msg, void *u eldbus_connection_unref(conn); eldbus_shutdown(); - if (obj->fallback) - { -eina_stringshare_replace(>path, fallback_path); -eina_stringshare_del(fallback_path); - } - return DBUS_HANDLER_RESULT_HANDLED; } --
[EGIT] [core/elementary] master 03/17: hoversel: add key binding for widget activation
cedric pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=6cff30bcae1e76ea3bf69428c7cc1c6054275aa8 commit 6cff30bcae1e76ea3bf69428c7cc1c6054275aa8 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Wed Jul 29 22:23:00 2015 +0200 hoversel: add key binding for widget activation Test Plan: 1. Install previous version of elementary 2. Remove config from homedir 3. Build new config with elemetnary_config app 4. Install patched version of elementary 5. run elementary_test Hoversel test 6. Space end Enter should open hovesel Reviewers: seoz, jaehwan, singh.amitesh, cedric Reviewed By: cedric Subscribers: seoz Differential Revision: https://phab.enlightenment.org/D2787 Signed-off-by: Cedric BAIL ced...@osg.samsung.com --- config/default/base.src.in | 20 +++- config/mobile/base.src.in | 20 +++- config/standard/base.src.in | 20 +++- src/lib/elc_hoversel.c | 10 ++ src/lib/elm_config.c| 27 +++ src/lib/elm_priv.h | 2 +- 6 files changed, 95 insertions(+), 4 deletions(-) diff --git a/config/default/base.src.in b/config/default/base.src.in index 40550d8..10257ee 100644 --- a/config/default/base.src.in +++ b/config/default/base.src.in @@ -1,5 +1,5 @@ group Elm_Config struct { - value config_version int: 131075; + value config_version int: 131076; value engine string: ; value vsync uchar: 0; value thumbscroll_enable uchar: 1; @@ -411,6 +411,24 @@ group Elm_Config struct { value action string: move; value params string: down; } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: KP_Enter; + value action string: activate; + value params string: ; + } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: Return; + value action string: activate; + value params string: ; + } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: space; + value action string: activate; + value params string: ; + } } } group Elm_Config_Bindings_Widget struct { diff --git a/config/mobile/base.src.in b/config/mobile/base.src.in index 772aca0..c18e2db 100644 --- a/config/mobile/base.src.in +++ b/config/mobile/base.src.in @@ -1,5 +1,5 @@ group Elm_Config struct { - value config_version int: 131075; + value config_version int: 131076; value engine string: ; value vsync uchar: 0; value thumbscroll_enable uchar: 1; @@ -415,6 +415,24 @@ group Elm_Config struct { value action string: move; value params string: down; } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: KP_Enter; + value action string: activate; + value params string: ; + } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: Return; + value action string: activate; + value params string: ; + } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: space; + value action string: activate; + value params string: ; + } } } group Elm_Config_Bindings_Widget struct { diff --git a/config/standard/base.src.in b/config/standard/base.src.in index af5ab67..3f4c0a5 100644 --- a/config/standard/base.src.in +++ b/config/standard/base.src.in @@ -1,5 +1,5 @@ group Elm_Config struct { - value config_version int: 131075; + value config_version int: 131076; value engine string: ; value vsync uchar: 0; value thumbscroll_enable uchar: 0; @@ -412,6 +412,24 @@ group Elm_Config struct { value action string: move; value params string: down; } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: KP_Enter; + value action string: activate; + value params string: ; + } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: Return; + value action string: activate; + value params string: ; + } + group Elm_Config_Binding_Key struct { + value context int: 0; + value key string: space; + value action string: activate; + value params string: ; + } } } group
[EGIT] [core/elementary] master 01/01: widget_item: check view visibility in item_onscreen_is function.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=df2e80606141c251056b9d3093622fc0d64057a8 commit df2e80606141c251056b9d3093622fc0d64057a8 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Thu Jul 16 10:51:59 2015 +0200 widget_item: check view visibility in item_onscreen_is function. --- src/lib/elm_widget.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index f8da6fa..d683601 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -4502,6 +4502,9 @@ _elm_widget_item_onscreen_is(Elm_Object_Item *item) Elm_Widget_Item_Data *id = eo_data_scope_get(item, ELM_WIDGET_ITEM_CLASS); if (!id || !id-view) return EINA_FALSE; + if (!evas_object_visible_get(id-view)) + return EINA_FALSE; + if (!_elm_widget_onscreen_is(id-widget)) return EINA_FALSE; --
[EGIT] [core/elementary] master 01/01: atspi: handle all states names
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=aad42e7cb4f7585888976fcabe73ba1968f84dc8 commit aad42e7cb4f7585888976fcabe73ba1968f84dc8 Author: Lukasz Stanislawski lukasz.stanislaw...@gmail.com Date: Mon Jul 6 23:32:35 2015 +0200 atspi: handle all states names --- src/lib/elm_atspi_bridge.c | 155 +++-- 1 file changed, 78 insertions(+), 77 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 6070ebf..915bea5 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -43,7 +43,6 @@ #define ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN_VAL(obj, sd, val) \ Elm_Atspi_Bridge_Data *sd = eo_data_scope_get(obj, ELM_ATSPI_BRIDGE_CLASS); \ if (!sd) return val; - #define ELM_ATSPI_OBJECT_INTERFACE_GET_OR_RETURN_VAL(obj, key, ifc, val) \ Eldbus_Service_Interface *ifc; \ eo_do(obj, ifc = eo_key_data_get(key)); \ @@ -75,6 +74,7 @@ typedef struct _Elm_Atspi_Bridge_Data Eldbus_Object *bus_obj; Eina_List *pending_requests; int id; + Eina_Hash *state_hash; Eina_Bool connected : 1; } Elm_Atspi_Bridge_Data; @@ -360,50 +360,56 @@ const int elm_roles_to_atspi_roles[][2] = { { ELM_ATSPI_ROLE_LAST_DEFINED, ATSPI_ROLE_LAST_DEFINED }, }; +struct atspi_state_desc +{ + Elm_Atspi_State_Type elm_state; + AtspiStateType atspi_state; + const char *name; +}; -const int elm_states_to_atspi_state[][2] = { - { ELM_ATSPI_STATE_INVALID, ATSPI_STATE_INVALID }, - { ELM_ATSPI_STATE_ACTIVE, ATSPI_STATE_ACTIVE }, - { ELM_ATSPI_STATE_ARMED, ATSPI_STATE_ARMED }, - { ELM_ATSPI_STATE_BUSY, ATSPI_STATE_BUSY }, - { ELM_ATSPI_STATE_CHECKED, ATSPI_STATE_CHECKED }, - { ELM_ATSPI_STATE_COLLAPSED, ATSPI_STATE_COLLAPSED }, - { ELM_ATSPI_STATE_DEFUNCT, ATSPI_STATE_DEFUNCT }, - { ELM_ATSPI_STATE_EDITABLE, ATSPI_STATE_EDITABLE }, - { ELM_ATSPI_STATE_ENABLED, ATSPI_STATE_ENABLED }, - { ELM_ATSPI_STATE_EXPANDABLE, ATSPI_STATE_EXPANDABLE }, - { ELM_ATSPI_STATE_EXPANDED, ATSPI_STATE_EXPANDED }, - { ELM_ATSPI_STATE_FOCUSABLE, ATSPI_STATE_FOCUSABLE }, - { ELM_ATSPI_STATE_FOCUSED, ATSPI_STATE_FOCUSED }, - { ELM_ATSPI_STATE_HAS_TOOLTIP, ATSPI_STATE_HAS_TOOLTIP }, - { ELM_ATSPI_STATE_HORIZONTAL, ATSPI_STATE_HORIZONTAL }, - { ELM_ATSPI_STATE_ICONIFIED, ATSPI_STATE_ICONIFIED }, - { ELM_ATSPI_STATE_MODAL, ATSPI_STATE_MODAL }, - { ELM_ATSPI_STATE_MULTI_LINE, ATSPI_STATE_MULTI_LINE }, - { ELM_ATSPI_STATE_MULTISELECTABLE, ATSPI_STATE_MULTISELECTABLE }, - { ELM_ATSPI_STATE_OPAQUE, ATSPI_STATE_OPAQUE }, - { ELM_ATSPI_STATE_PRESSED, ATSPI_STATE_PRESSED }, - { ELM_ATSPI_STATE_RESIZABLE, ATSPI_STATE_RESIZABLE }, - { ELM_ATSPI_STATE_SELECTABLE, ATSPI_STATE_SELECTABLE }, - { ELM_ATSPI_STATE_SELECTED, ATSPI_STATE_SELECTED }, - { ELM_ATSPI_STATE_SENSITIVE, ATSPI_STATE_SENSITIVE }, - { ELM_ATSPI_STATE_SHOWING, ATSPI_STATE_SHOWING }, - { ELM_ATSPI_STATE_SINGLE_LINE, ATSPI_STATE_SINGLE_LINE }, - { ELM_ATSPI_STATE_STALE, ATSPI_STATE_STALE }, - { ELM_ATSPI_STATE_TRANSIENT, ATSPI_STATE_TRANSIENT }, - { ELM_ATSPI_STATE_VERTICAL, ATSPI_STATE_VERTICAL }, - { ELM_ATSPI_STATE_VISIBLE, ATSPI_STATE_VISIBLE }, - { ELM_ATSPI_STATE_MANAGES_DESCENDANTS, ATSPI_STATE_MANAGES_DESCENDANTS }, - { ELM_ATSPI_STATE_INDETERMINATE, ATSPI_STATE_INDETERMINATE }, - { ELM_ATSPI_STATE_REQUIRED, ATSPI_STATE_REQUIRED }, - { ELM_ATSPI_STATE_TRUNCATED, ATSPI_STATE_TRUNCATED }, - { ELM_ATSPI_STATE_ANIMATED, ATSPI_STATE_ANIMATED }, - { ELM_ATSPI_STATE_INVALID_ENTRY, ATSPI_STATE_INVALID_ENTRY }, - { ELM_ATSPI_STATE_SUPPORTS_AUTOCOMPLETION, ATSPI_STATE_SUPPORTS_AUTOCOMPLETION }, - { ELM_ATSPI_STATE_SELECTABLE_TEXT, ATSPI_STATE_SELECTABLE_TEXT }, - { ELM_ATSPI_STATE_IS_DEFAULT, ATSPI_STATE_IS_DEFAULT }, - { ELM_ATSPI_STATE_VISITED, ATSPI_STATE_VISITED }, - { ELM_ATSPI_STATE_LAST_DEFINED, ATSPI_STATE_LAST_DEFINED }, +const struct atspi_state_desc elm_states_to_atspi_state[] = { + { ELM_ATSPI_STATE_INVALID, ATSPI_STATE_INVALID, invalid }, + { ELM_ATSPI_STATE_ACTIVE, ATSPI_STATE_ACTIVE, active }, + { ELM_ATSPI_STATE_ARMED, ATSPI_STATE_ARMED, armed }, + { ELM_ATSPI_STATE_BUSY, ATSPI_STATE_BUSY, busy }, + { ELM_ATSPI_STATE_CHECKED, ATSPI_STATE_CHECKED, checked }, + { ELM_ATSPI_STATE_COLLAPSED, ATSPI_STATE_COLLAPSED, collapsed }, + { ELM_ATSPI_STATE_DEFUNCT, ATSPI_STATE_DEFUNCT, defunct }, + { ELM_ATSPI_STATE_EDITABLE, ATSPI_STATE_EDITABLE, editable }, + { ELM_ATSPI_STATE_ENABLED, ATSPI_STATE_ENABLED, enabled }, + { ELM_ATSPI_STATE_EXPANDABLE, ATSPI_STATE_EXPANDABLE, expandable }, + { ELM_ATSPI_STATE_EXPANDED, ATSPI_STATE_EXPANDED, expanded }, + { ELM_ATSPI_STATE_FOCUSABLE, ATSPI_STATE_FOCUSABLE, focusable }, + { ELM_ATSPI_STATE_FOCUSED, ATSPI_STATE_FOCUSED, focused }, + { ELM_ATSPI_STATE_HAS_TOOLTIP, ATSPI_STATE_HAS_TOOLTIP, has-tooltip }, + { ELM_ATSPI_STATE_HORIZONTAL, ATSPI_STATE_HORIZONTAL, horizontal
[EGIT] [core/elementary] master 01/01: atspi: fix missing Window signals on AT-SPI2 initialization
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=0dc0ad891a33572bc2c056c425a3ae6566c26050 commit 0dc0ad891a33572bc2c056c425a3ae6566c26050 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Mon Jun 29 16:30:34 2015 +0200 atspi: fix missing Window signals on AT-SPI2 initialization Patch adds connected/disconnected elm_atspi_bridge events to avoid races between window getting focus and AT-SPI2 bus initialization. When bridge gets connected windows will reemit all Created, Activated and Deactivated events with regard to window focus. --- src/lib/elm_atspi_bridge.c | 45 + src/lib/elm_atspi_bridge.eo | 4 src/lib/elm_win.c | 43 +-- 3 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 9a5c9cb..289f3af 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -2997,6 +2997,10 @@ _registered_listeners_get(void *data, const Eldbus_Message *msg, Eldbus_Pending eldbus_message_iter_arguments_get(siter, ss, bus, event); _set_broadcast_flag(event, data); } + + if (!pd-connected) + eo_do(data, eo_event_callback_call(ELM_ATSPI_BRIDGE_EVENT_CONNECTED, NULL)); + pd-connected = EINA_TRUE; } static void @@ -3145,46 +3149,24 @@ static Eina_Bool _window_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_info EINA_UNUSED) { enum _Atspi_Window_Signals type; - const char *name; ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN_VAL(data, pd, EINA_FALSE); ELM_ATSPI_OBJECT_INTERFACE_GET_OR_RETURN_VAL(obj, eo_class_name_get(ELM_INTERFACE_ATSPI_WINDOW_INTERFACE), ifc, EINA_FALSE); if (desc == ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_CREATED) - { -type = ATSPI_WINDOW_EVENT_CREATE; -name = Create; - } + type = ATSPI_WINDOW_EVENT_CREATE; else if (desc == ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_DESTROYED) - { -type = ATSPI_WINDOW_EVENT_DESTROY; -name = Destroy; - } + type = ATSPI_WINDOW_EVENT_DESTROY; else if (desc == ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_DEACTIVATED) - { -type = ATSPI_WINDOW_EVENT_DEACTIVATE; -name = Deactivate; - } + type = ATSPI_WINDOW_EVENT_DEACTIVATE; else if (desc == ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_ACTIVATED) - { -type = ATSPI_WINDOW_EVENT_ACTIVATE; -name = Activate; - } + type = ATSPI_WINDOW_EVENT_ACTIVATE; else if (desc == ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_MAXIMIZED) - { -type = ATSPI_WINDOW_EVENT_MAXIMIZE; -name = Maximize; - } + type = ATSPI_WINDOW_EVENT_MAXIMIZE; else if (desc == ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_MINIMIZED) - { -type = ATSPI_WINDOW_EVENT_MINIMIZE; -name = Minimize; - } + type = ATSPI_WINDOW_EVENT_MINIMIZE; else if (desc == ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_RESTORED) - { -type = ATSPI_WINDOW_EVENT_RESTORE; -name = Restore; - } + type = ATSPI_WINDOW_EVENT_RESTORE; else return EINA_FALSE; @@ -3197,7 +3179,7 @@ _window_signal_send(void *data, Eo *obj, const Eo_Event_Description *desc, void return EINA_FALSE; } - _bridge_signal_send(data, ifc, type, name, 0, 0, i, 0); + _bridge_signal_send(data, ifc, type, , 0, 0, i, 0); return EINA_TRUE; } @@ -3461,6 +3443,7 @@ _a11y_connection_shutdown(Eo *bridge) if (pd-a11y_bus) eldbus_connection_unref(pd-a11y_bus); pd-a11y_bus = NULL; + eo_do(bridge, eo_event_callback_call(ELM_ATSPI_BRIDGE_EVENT_DISCONNECTED, NULL)); pd-connected = EINA_FALSE; } @@ -3492,8 +3475,6 @@ _a11y_bus_initialize(Eo *obj, const char *socket_addr) // buid cache eo_do(obj, root = elm_obj_atspi_bridge_root_get()); _bridge_cache_build(obj, root); - - pd-connected = EINA_TRUE; } static void diff --git a/src/lib/elm_atspi_bridge.eo b/src/lib/elm_atspi_bridge.eo index fc1471a..eafd9f4 100644 --- a/src/lib/elm_atspi_bridge.eo +++ b/src/lib/elm_atspi_bridge.eo @@ -23,4 +23,8 @@ class Elm.Atspi_Bridge (Eo.Base) Eo.Base.constructor; Eo.Base.destructor; } + events { + connected; + disconnected; + } } diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c index ff2021e..e41113a 100644 --- a/src/lib/elm_win.c +++ b/src/lib/elm_win.c @@ -1507,9 +1507,6 @@ _elm_win_evas_object_smart_show(Eo *obj, Elm_Win_Data *sd) TRAP(sd, show); if (sd-shot.info) _shot_handle(sd); - - if (_elm_config-atspi_mode) - eo_do(obj, eo_event_callback_call(ELM_INTERFACE_ATSPI_WINDOW_EVENT_WINDOW_CREATED, NULL)); } EOLIAN static void @@ -1878,6 +1875,9 @@ _elm_win_evas_object_smart_del(Eo *obj, Elm_Win_Data *sd) evas_font_cache_flush(evas_object_evas_get(obj)); elm_exit
[EGIT] [core/elementary] master 01/01: atspi: add missing header
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=65bfc92ad68d45927abef9a6b7f1bc6ae76c8da8 commit 65bfc92ad68d45927abef9a6b7f1bc6ae76c8da8 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Mon Jun 29 11:39:16 2015 +0200 atspi: add missing header --- src/lib/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index ece5597..bcfc36e 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -34,6 +34,7 @@ includesdir = $(includedir)/elementary-@VMAJ@ includesunstable_HEADERS = \ elm_gen_common.h \ +elm_atspi_bridge.h \ elm_interface_atspi_accessible.h \ elm_interface_atspi_text.h \ elm_interface_atspi_widget_action.h \ --
[EGIT] [core/efl] master 01/01: ecore-x: move grabbed_is check to multi_handler
devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=73dc72515c8d25a1118331a01f9ba446cdaef20e commit 73dc72515c8d25a1118331a01f9ba446cdaef20e Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Wed Jun 17 13:45:35 2015 -0400 ecore-x: move grabbed_is check to multi_handler Summary: Previous implementation used mouse_handler to create mouse events from touch events if the device was grabbed and no emulated mouse events were emitted by X server. However the same functionality could be achieved by using multi_handler with additional condition on grabbed devices. Test Plan: elementary_test - Multitouch Reviewers: cedric, raster, devilhorns Subscribers: seoz, cedric Differential Revision: https://phab.enlightenment.org/D2700 --- src/lib/ecore_x/xlib/ecore_x_xi2.c | 26 -- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/src/lib/ecore_x/xlib/ecore_x_xi2.c b/src/lib/ecore_x/xlib/ecore_x_xi2.c index 2c3acaf..7824817 100644 --- a/src/lib/ecore_x/xlib/ecore_x_xi2.c +++ b/src/lib/ecore_x/xlib/ecore_x_xi2.c @@ -304,11 +304,6 @@ _ecore_x_input_mouse_handler(XEvent *xevent) switch (xevent-xcookie.evtype) { -#ifdef ECORE_XI2_2 - case XI_TouchUpdate: - if (!_ecore_x_input_grabbed_is(devid)) - break; -#endif case XI_Motion: INF(Handling XI_Motion); _ecore_mouse_move @@ -327,11 +322,6 @@ _ecore_x_input_mouse_handler(XEvent *xevent) evd-root_x, evd-root_y); break; -#ifdef ECORE_XI2_2 - case XI_TouchBegin: - if (!_ecore_x_input_grabbed_is(devid)) - break; -#endif case XI_ButtonPress: INF(ButtonEvent:multi press time=%u x=%d y=%d devid=%d, (unsigned int)evd-time, (int)evd-event_x, (int)evd-event_y, devid); _ecore_mouse_button @@ -352,11 +342,6 @@ _ecore_x_input_mouse_handler(XEvent *xevent) evd-root_x, evd-root_y); break; -#ifdef ECORE_XI2_2 - case XI_TouchEnd: - if (!_ecore_x_input_grabbed_is(devid)) - break; -#endif case XI_ButtonRelease: INF(ButtonEvent:multi release time=%u x=%d y=%d devid=%d, (unsigned int)evd-time, (int)evd-event_x, (int)evd-event_y, devid); _ecore_mouse_button @@ -396,7 +381,7 @@ _ecore_x_input_multi_handler(XEvent *xevent) XIDeviceEvent *evd = (XIDeviceEvent *)(xevent-xcookie.data); int devid = evd-deviceid; int i = _ecore_x_input_touch_index_get(devid, evd-detail, XI_TouchUpdate); - if ((i == 0) (evd-flags XITouchEmulatingPointer)) return; + if ((i == 0) (evd-flags XITouchEmulatingPointer) !_ecore_x_input_grabbed_is(devid)) return; INF(Handling XI_TouchUpdate); _ecore_mouse_move(evd-time, 0, // state @@ -419,7 +404,7 @@ _ecore_x_input_multi_handler(XEvent *xevent) XIDeviceEvent *evd = (XIDeviceEvent *)(xevent-xcookie.data); int devid = evd-deviceid; int i = _ecore_x_input_touch_index_get(devid, evd-detail, XI_TouchBegin); - if ((i == 0) (evd-flags XITouchEmulatingPointer)) return; + if ((i == 0) (evd-flags XITouchEmulatingPointer) !_ecore_x_input_grabbed_is(devid)) return; INF(Handling XI_TouchBegin); _ecore_mouse_button(ECORE_EVENT_MOUSE_BUTTON_DOWN, evd-time, @@ -444,7 +429,7 @@ _ecore_x_input_multi_handler(XEvent *xevent) XIDeviceEvent *evd = (XIDeviceEvent *)(xevent-xcookie.data); int devid = evd-deviceid; int i = _ecore_x_input_touch_index_get(devid, evd-detail, XI_TouchEnd); - if ((i == 0) (evd-flags XITouchEmulatingPointer)) + if ((i == 0) (evd-flags XITouchEmulatingPointer) !_ecore_x_input_grabbed_is(devid)) { _ecore_x_input_touch_index_clear(devid, i); return; @@ -675,10 +660,7 @@ _ecore_x_input_handler(XEvent *xevent) if ((dev-use == XISlavePointer) !(evd-flags XIPointerEmulated)) { - if (evd-flags XITouchEmulatingPointer) -_ecore_x_input_mouse_handler(xevent); - else -_ecore_x_input_multi_handler(xevent); + _ecore_x_input_multi_handler(xevent); } else if (dev-use == XIFloatingSlave) _ecore_x_input_mouse_handler(xevent); --
[EGIT] [core/elementary] master 01/01: list: add atspi SELECTABLE state to elm_list items.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=b3dab84df131bbffbc795b602a9b2c255e0497ee commit b3dab84df131bbffbc795b602a9b2c255e0497ee Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Thu Jun 11 10:57:23 2015 +0200 list: add atspi SELECTABLE state to elm_list items. --- src/lib/elm_list.c | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index ab7a49a..1ee5915 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -2170,8 +2170,13 @@ _elm_list_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_List_ Eina_Bool sel; eo_do_super(eo_it, ELM_LIST_ITEM_CLASS, ret = elm_interface_atspi_accessible_state_set_get()); - eo_do(eo_it, sel = elm_obj_list_item_selected_get()); + if (elm_object_item_disabled_get(eo_it)) + return ret; + + STATE_TYPE_SET(ret, ELM_ATSPI_STATE_SELECTABLE); + + eo_do(eo_it, sel = elm_obj_list_item_selected_get()); if (sel) STATE_TYPE_SET(ret, ELM_ATSPI_STATE_SELECTED); else --
[EGIT] [core/elementary] master 01/01: atspi: fix popup role and signal emission
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=62a258dea7224656f6430708a45c95872f42d9fd commit 62a258dea7224656f6430708a45c95872f42d9fd Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Fri Jun 5 15:59:46 2015 +0200 atspi: fix popup role and signal emission --- src/lib/elc_popup.c | 2 +- src/lib/elm_widget.c | 5 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/elc_popup.c b/src/lib/elc_popup.c index a274591..965223f 100644 --- a/src/lib/elc_popup.c +++ b/src/lib/elc_popup.c @@ -1512,7 +1512,7 @@ _elm_popup_eo_base_constructor(Eo *obj, Elm_Popup_Data *_pd EINA_UNUSED) eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), evas_obj_smart_callbacks_descriptions_set(_smart_callbacks), - elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_POPUP_MENU)); + elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_NOTIFICATION)); return obj; } diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index b826ee9..8ebb23f 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -550,6 +550,8 @@ _elm_widget_evas_object_smart_show(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUS Eo *parent; eo_do(obj, parent = elm_interface_atspi_accessible_parent_get()); elm_interface_atspi_accessible_children_changed_added_signal_emit(parent, obj); +if (_elm_widget_onscreen_is(obj)) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_TRUE); } it = evas_object_smart_iterator_new(obj); @@ -574,6 +576,9 @@ _elm_widget_evas_object_smart_hide(Eo *obj, Elm_Widget_Smart_Data *_pd EINA_UNUS evas_object_hide(o); } eina_iterator_free(it); + + if (_elm_config-atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_SHOWING, EINA_FALSE); } EOLIAN static void --
[EGIT] [core/efl] master 01/01: ecore-x: add new grab touch devices functionality.
devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2017c8be95c06a905a363838922176931cd2a34f commit 2017c8be95c06a905a363838922176931cd2a34f Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Thu Jun 4 13:06:27 2015 -0400 ecore-x: add new grab touch devices functionality. Summary: EFL currently supports pointer grabbing. This patch introduces new API allowing to grab all slave touch devices registered in X server Grabbing is performed by XIGrabDevice function from XInput 2.0. By default ecore_x_input_touch_devices_grab grabs all XISlavePointer devices, having XITouchInfoClass. Function returns EINA_TRUE if at least one touch device was successfully grabbed. ecore_x_input_touch_devices_ungrab ungrabs all previously grabbed devices. To process events correctly change has been done in x_input_handler to emulate mouse pointer events. If XITouchEmulatingPointer flag is set on touch events and device is grabbed framework will generate mouse events. This is required due to X Server design in which mouse events are no longer send to client when device is detached (grabbed) from virtual core pointer. @feature Reviewers: cedric, raster, devilhorns Subscribers: seoz, cedric Differential Revision: https://phab.enlightenment.org/D2568 --- src/lib/ecore_x/Ecore_X.h | 2 + src/lib/ecore_x/xcb/ecore_xcb_input.c | 14 src/lib/ecore_x/xlib/ecore_x_xi2.c| 117 +- 3 files changed, 132 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_x/Ecore_X.h b/src/lib/ecore_x/Ecore_X.h index 86a33c9..8c3a41f 100644 --- a/src/lib/ecore_x/Ecore_X.h +++ b/src/lib/ecore_x/Ecore_X.h @@ -2533,6 +2533,8 @@ EAPI Eina_Bool ecore_x_image_to_argb_convert(void *src, int sbpp, int sbpl, EAPI Eina_Bool ecore_x_input_multi_select(Ecore_X_Window win); /** @since 1.13 */ EAPI Eina_Bool ecore_x_input_raw_select(Ecore_X_Window win); /** @since 1.8 */ +EAPI Eina_Bool ecore_x_input_touch_devices_grab(Ecore_X_Window win); /** @since 1.15 */ +EAPI Eina_Bool ecore_x_input_touch_devices_ungrab(void); /** @since 1.15 */ EAPI Eina_Bool ecore_x_vsync_animator_tick_source_set(Ecore_X_Window win); diff --git a/src/lib/ecore_x/xcb/ecore_xcb_input.c b/src/lib/ecore_x/xcb/ecore_xcb_input.c index e94cc80..cd9e488 100644 --- a/src/lib/ecore_x/xcb/ecore_xcb_input.c +++ b/src/lib/ecore_x/xcb/ecore_xcb_input.c @@ -279,3 +279,17 @@ ecore_x_input_raw_select(Ecore_X_Window win EINA_UNUSED) /* NB: FIXME: This is just a placeholder. XCB does not have XInput2 yet */ return EINA_FALSE; } + +EAPI Eina_Bool +ecore_x_input_touch_devices_grab(Ecore_X_Window win EINA_UNUSED) +{ + /* NB: FIXME: This is just a placeholder. XCB does not have XInput2 yet */ + return EINA_FALSE; +} + +EAPI Eina_Bool +ecore_x_input_touch_devices_ungrab(void) +{ + /* NB: FIXME: This is just a placeholder. XCB does not have XInput2 yet */ + return EINA_FALSE; +} diff --git a/src/lib/ecore_x/xlib/ecore_x_xi2.c b/src/lib/ecore_x/xlib/ecore_x_xi2.c index 832b424..d18bbab 100644 --- a/src/lib/ecore_x/xlib/ecore_x_xi2.c +++ b/src/lib/ecore_x/xlib/ecore_x_xi2.c @@ -41,6 +41,7 @@ static int _ecore_x_xi2_num = 0; #ifdef ECORE_XI2_2 static Eina_Inlist *_ecore_x_xi2_touch_info_list = NULL; #endif /* ifdef ECORE_XI2_2 */ +static Eina_List *_ecore_x_xi2_grabbed_devices_list; #endif /* ifdef ECORE_XI2 */ void @@ -140,6 +141,10 @@ _ecore_x_input_shutdown(void) _ecore_x_xi2_num = 0; _ecore_x_xi2_opcode = -1; + + if (_ecore_x_xi2_grabbed_devices_list) + eina_list_free(_ecore_x_xi2_grabbed_devices_list); + _ecore_x_xi2_grabbed_devices_list = NULL; #endif /* ifdef ECORE_XI2 */ } @@ -271,6 +276,23 @@ _ecore_x_input_raw_handler(XEvent *xevent) #endif /* ifdef ECORE_XI2 */ } +static Eina_Bool +_ecore_x_input_grabbed_is(int deviceId) +{ +#ifdef ECORE_XI2 + void *id; + Eina_List *l; + + EINA_LIST_FOREACH(_ecore_x_xi2_grabbed_devices_list, l, id) + { +if (deviceId == (intptr_t)id) + return EINA_TRUE; + } +#endif /* ifdef ECORE_XI2 */ + + return EINA_FALSE; +} + void _ecore_x_input_mouse_handler(XEvent *xevent) { @@ -282,6 +304,9 @@ _ecore_x_input_mouse_handler(XEvent *xevent) switch (xevent-xcookie.evtype) { + case XI_TouchUpdate: + if (!_ecore_x_input_grabbed_is(devid)) + break; case XI_Motion: INF(Handling XI_Motion); _ecore_mouse_move @@ -300,6 +325,9 @@ _ecore_x_input_mouse_handler(XEvent *xevent) evd-root_x, evd-root_y); break; + case XI_TouchBegin: + if (!_ecore_x_input_grabbed_is(devid)) + break; case XI_ButtonPress: INF(ButtonEvent:multi press time=%u x=%d y=%d devid=%d, (unsigned int)evd-time, (int)evd-event_x, (int)evd-event_y, devid
[EGIT] [core/elementary] master 02/02: entry: improve at-spi2 accessibility support
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=9f7de33fdb26db5a3b14fb08a1d99b12cfb41d22 commit 9f7de33fdb26db5a3b14fb08a1d99b12cfb41d22 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Wed Jun 3 17:36:42 2015 +0200 entry: improve at-spi2 accessibility support * return guide text instead of content * mask passwords * set proper at-spi roles when entry enables password mode. --- src/lib/elm_entry.c | 28 src/lib/elm_entry.eo | 1 + 2 files changed, 29 insertions(+) diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index c20582e..c88cfe2 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -59,6 +59,8 @@ ELM_PRIV_ENTRY_SIGNALS(ELM_PRIV_STATIC_VARIABLE_DECLARE); +#define ENTRY_PASSWORD_MASK_CHARACTER 0x002A + static const Evas_Smart_Cb_Description _smart_callbacks[] = { ELM_PRIV_ENTRY_SIGNALS(ELM_PRIV_SMART_CALLBACKS_DESC) {SIG_WIDGET_LANG_CHANGED, }, /** handled by elm_widget */ @@ -3813,6 +3815,7 @@ _elm_entry_password_set(Eo *obj, Elm_Entry_Data *sd, Eina_Bool password) sd-line_wrap = ELM_WRAP_NONE; elm_entry_input_hint_set(obj, ((sd-input_hints ~ELM_INPUT_HINT_AUTO_COMPLETE) | ELM_INPUT_HINT_SENSITIVE_DATA)); _entry_selection_callbacks_unregister(obj); +elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_PASSWORD_TEXT); } else { @@ -3825,6 +3828,7 @@ _elm_entry_password_set(Eo *obj, Elm_Entry_Data *sd, Eina_Bool password) elm_entry_input_hint_set(obj, ((sd-input_hints | ELM_INPUT_HINT_AUTO_COMPLETE) ~ELM_INPUT_HINT_SENSITIVE_DATA)); _entry_selection_callbacks_register(obj); +elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_ENTRY); } eo_do(obj, elm_obj_widget_theme_apply()); @@ -5112,6 +5116,9 @@ _elm_entry_elm_interface_atspi_text_character_get(Eo *obj, Elm_Entry_Data *_pd E free(txt); + if (_pd-password) + ret = ENTRY_PASSWORD_MASK_CHARACTER; + return ret; } @@ -5198,6 +5205,13 @@ _elm_entry_elm_interface_atspi_text_string_get(Eo *obj, Elm_Entry_Data *_pd EINA evas_textblock_cursor_free(cur); evas_textblock_cursor_free(cur2); + if (ret _pd-password) + { +int i = 0; +while (ret[i] != '\0') + ret[i++] = ENTRY_PASSWORD_MASK_CHARACTER; + } + return ret; fail: @@ -5233,6 +5247,13 @@ _elm_entry_elm_interface_atspi_text_text_get(Eo *obj, Elm_Entry_Data *_pd EINA_U evas_textblock_cursor_free(cur); evas_textblock_cursor_free(cur2); + if (ret _pd-password) + { +int i = 0; +while (ret[i] != '\0') + ret[i++] = ENTRY_PASSWORD_MASK_CHARACTER; + } + return ret; fail: @@ -5647,4 +5668,11 @@ _elm_entry_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Entry_Data return ret; } +EOLIAN static char* +_elm_entry_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd) +{ + const char *ret = edje_object_part_text_get(sd-entry_edje, elm.guide); + return ret ? strdup(ret) : NULL; +} + #include elm_entry.eo.c diff --git a/src/lib/elm_entry.eo b/src/lib/elm_entry.eo index c60e848..baf422c 100644 --- a/src/lib/elm_entry.eo +++ b/src/lib/elm_entry.eo @@ -1200,6 +1200,7 @@ class Elm.Entry (Elm.Layout, Elm_Interface_Scrollable, Evas.Clickable_Interface, Elm_Interface_Scrollable.policy.set; Elm_Interface_Scrollable.bounce_allow.set; Elm_Interface_Atspi_Accessible.state_set.get; + Elm_Interface_Atspi_Accessible.name.get; Elm_Interface_Atspi_Text.text.get; Elm_Interface_Atspi_Text.string.get; Elm_Interface_Atspi_Text.attribute.get; --
[EGIT] [core/elementary] master 01/02: atspi: fix signal name
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=4b041b4740e7bcf759fb936d9ced5015b669616f commit 4b041b4740e7bcf759fb936d9ced5015b669616f Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Wed Jun 3 16:58:23 2015 +0200 atspi: fix signal name --- src/lib/elm_atspi_bridge.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index 7857c5c..4bf6673 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -187,7 +187,7 @@ static const Eldbus_Signal _event_obj_signals[] = { [ATSPI_OBJECT_EVENT_COLUMN_REORDERED] = {ColumnReordered, ELDBUS_ARGS({siiv(so), NULL}), 0}, [ATSPI_OBJECT_EVENT_COLUMN_DELETED] = {ColumnDeleted, ELDBUS_ARGS({siiv(so), NULL}), 0}, [ATSPI_OBJECT_EVENT_TEXT_BOUNDS_CHANGED] = {TextBoundsChanged, ELDBUS_ARGS({siiv(so), NULL}), 0}, - [ATSPI_OBJECT_EVENT_TEXT_SELECTION_CHANGED] = {SelectionChanged, ELDBUS_ARGS({siiv(so), NULL}), 0}, + [ATSPI_OBJECT_EVENT_TEXT_SELECTION_CHANGED] = {TextSelectionChanged, ELDBUS_ARGS({siiv(so), NULL}), 0}, [ATSPI_OBJECT_EVENT_TEXT_CHANGED] = {TextChanged, ELDBUS_ARGS({siiv(so), NULL}), 0}, [ATSPI_OBJECT_EVENT_TEXT_ATTRIBUTES_CHANGED] = {TextAttributesChanged, ELDBUS_ARGS({siiv(so), NULL}), 0}, [ATSPI_OBJECT_EVENT_TEXT_CARET_MOVED] = {TextCaretMoved, ELDBUS_ARGS({siiv(so), NULL}), 0}, --
[EGIT] [core/elementary] master 01/01: genlist: implement Atspi_Selection interface
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=9719b3560c4a1d9e821a0dcc499bfeeaca5b09c8 commit 9719b3560c4a1d9e821a0dcc499bfeeaca5b09c8 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Tue May 26 15:34:52 2015 +0200 genlist: implement Atspi_Selection interface Allow to select and deselect genlist items by Assistive Technology Clients through org.a11y.atspi.Selection dbus interface. --- src/lib/elm_genlist.c | 101 + src/lib/elm_genlist.eo | 10 - 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 4962347..af2e35a 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -5,6 +5,7 @@ #include fnmatch.h #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#define ELM_INTERFACE_ATSPI_SELECTION_PROTECTED #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED #define ELM_WIDGET_ITEM_PROTECTED @@ -7991,5 +7992,105 @@ _elm_genlist_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Genlist_D return ret; } +EOLIAN int +_elm_genlist_elm_interface_atspi_selection_selected_children_count_get(Eo *objm EINA_UNUSED, Elm_Genlist_Data *pd) +{ + return eina_list_count(pd-selected); +} + +EOLIAN Eo* +_elm_genlist_elm_interface_atspi_selection_selected_child_get(Eo *obj EINA_UNUSED, Elm_Genlist_Data *pd, int child_idx) +{ + return eina_list_nth(pd-selected, child_idx); +} + +EOLIAN Eina_Bool +_elm_genlist_elm_interface_atspi_selection_child_select(Eo *obj EINA_UNUSED, Elm_Genlist_Data *pd, int child_index) +{ + Elm_Gen_Item *item; + if (pd-select_mode != ELM_OBJECT_SELECT_MODE_NONE) + { +EINA_INLIST_FOREACH(pd-items, item) + { + if (child_index-- == 0) + { + elm_genlist_item_selected_set(EO_OBJ(item), EINA_TRUE); + return EINA_TRUE; + } + } + } + return EINA_FALSE; +} + +EOLIAN Eina_Bool +_elm_genlist_elm_interface_atspi_selection_selected_child_deselect(Eo *obj EINA_UNUSED, Elm_Genlist_Data *pd, int child_index) +{ + Eo *item; + Eina_List *l; + + EINA_LIST_FOREACH(pd-selected, l, item) + { +if (child_index-- == 0) + { + elm_genlist_item_selected_set(item, EINA_FALSE); + return EINA_TRUE; + } + } + return EINA_FALSE; +} + +EOLIAN Eina_Bool +_elm_genlist_elm_interface_atspi_selection_is_child_selected(Eo *obj EINA_UNUSED, Elm_Genlist_Data *pd, int child_index) +{ + Elm_Gen_Item *item; + + EINA_INLIST_FOREACH(pd-items, item) + { +if (child_index-- == 0) + { + return elm_genlist_item_selected_get(EO_OBJ(item)); + } + } + return EINA_FALSE; +} + +EOLIAN Eina_Bool +_elm_genlist_elm_interface_atspi_selection_all_children_select(Eo *obj, Elm_Genlist_Data *pd) +{ + Elm_Gen_Item *item; + + if (!elm_genlist_multi_select_get(obj)) + return EINA_FALSE; + + EINA_INLIST_FOREACH(pd-items, item) + elm_genlist_item_selected_set(EO_OBJ(item), EINA_TRUE); + + return EINA_TRUE; +} + +EOLIAN Eina_Bool +_elm_genlist_elm_interface_atspi_selection_clear(Eo *obj EINA_UNUSED, Elm_Genlist_Data *pd) +{ + return _all_items_deselect(pd); +} + +EOLIAN Eina_Bool +_elm_genlist_elm_interface_atspi_selection_child_deselect(Eo *obj EINA_UNUSED, Elm_Genlist_Data *pd, int child_index) +{ + Elm_Gen_Item *item; + if (pd-select_mode != ELM_OBJECT_SELECT_MODE_NONE) + { +EINA_INLIST_FOREACH(pd-items, item) + { + if (child_index-- == 0) + { + elm_genlist_item_selected_set(EO_OBJ(item), EINA_FALSE); + return EINA_TRUE; + } + } + } + return EINA_FALSE; +} + #include elm_genlist.eo.c #include elm_genlist_item.eo.c diff --git a/src/lib/elm_genlist.eo b/src/lib/elm_genlist.eo index 8a4b612..552b4d3 100644 --- a/src/lib/elm_genlist.eo +++ b/src/lib/elm_genlist.eo @@ -1,7 +1,7 @@ import elm_general; class Elm.Genlist (Elm.Layout, Elm_Interface_Scrollable, Evas.Clickable_Interface, - Elm_Interface_Atspi_Widget_Action) + Elm_Interface_Atspi_Widget_Action, Elm_Interface_Atspi_Selection) { eo_prefix: elm_obj_genlist; methods { @@ -731,6 +731,14 @@ class Elm.Genlist (Elm.Layout, Elm_Interface_Scrollable, Evas.Clickable_Interfac Elm_Interface_Atspi_Accessible.children.get; Elm_Interface_Atspi_Accessible.state_set.get; Elm_Interface_Atspi_Widget_Action.elm_actions.get; + Elm_Interface_Atspi_Selection.selected_children_count.get; + Elm_Interface_Atspi_Selection.selected_child.get; + Elm_Interface_Atspi_Selection.selected_child_deselect; + Elm_Interface_Atspi_Selection.child_select; + Elm_Interface_Atspi_Selection.child_deselect; + Elm_Interface_Atspi_Selection.is_child_selected
[EGIT] [core/elementary] master 02/04: atspi: do not return ELM_ATSPI_STATE_ACTIVE when widget is enabled.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=10109852fe7e98c0e72c328e603b957a65ef534b commit 10109852fe7e98c0e72c328e603b957a65ef534b Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Wed May 13 10:12:27 2015 +0200 atspi: do not return ELM_ATSPI_STATE_ACTIVE when widget is enabled. According to atspi specification ATSPI_STATE_ACTIVE is reserved only for windows having keyboard focus. --- src/lib/elm_widget.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 8f48d6b..d27b27d 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -4457,7 +4457,6 @@ _elm_widget_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_item EINA_U STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSED); if (!elm_object_item_disabled_get(eo_item)) { -STATE_TYPE_SET(states, ELM_ATSPI_STATE_ACTIVE); STATE_TYPE_SET(states, ELM_ATSPI_STATE_ENABLED); STATE_TYPE_SET(states, ELM_ATSPI_STATE_SENSITIVE); } @@ -5640,7 +5639,6 @@ _elm_widget_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Widget_Sma if (!elm_object_disabled_get(obj)) { STATE_TYPE_SET(states, ELM_ATSPI_STATE_ENABLED); -STATE_TYPE_SET(states, ELM_ATSPI_STATE_ACTIVE); STATE_TYPE_SET(states, ELM_ATSPI_STATE_SENSITIVE); } --
[EGIT] [core/elementary] master 01/04: atspi: handle state change notifications in on_focus function
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=16fc2b347835b165ab033e3a502e0a08d33f41ba commit 16fc2b347835b165ab033e3a502e0a08d33f41ba Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Wed May 13 09:57:16 2015 +0200 atspi: handle state change notifications in on_focus function --- src/lib/elm_entry.c | 4 src/lib/elm_layout.c | 4 src/lib/elm_widget.c | 13 - 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index 9e2e743..16b0fbd 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -1099,6 +1099,8 @@ _elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data *sd) !edje_object_part_text_imf_context_get(sd-entry_edje, elm.text)) elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON); evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL); +if (_elm_config-atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_TRUE); _return_key_enabled_check(obj); _validate(obj); } @@ -1110,6 +1112,8 @@ _elm_entry_elm_widget_on_focus(Eo *obj, Elm_Entry_Data *sd) !edje_object_part_text_imf_context_get(sd-entry_edje, elm.text)) elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_OFF); evas_object_smart_callback_call(obj, SIG_UNFOCUSED, NULL); +if (_elm_config-atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_FALSE); if (_elm_config-selection_clear_enable) { diff --git a/src/lib/elm_layout.c b/src/lib/elm_layout.c index f04b80f..06adc9d 100644 --- a/src/lib/elm_layout.c +++ b/src/lib/elm_layout.c @@ -406,12 +406,16 @@ _elm_layout_elm_widget_on_focus(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED) elm_layout_signal_emit(obj, elm,action,focus, elm); evas_object_focus_set(wd-resize_obj, EINA_TRUE); evas_object_smart_callback_call(obj, SIG_LAYOUT_FOCUSED, NULL); +if (_elm_config-atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_TRUE); } else { elm_layout_signal_emit(obj, elm,action,unfocus, elm); evas_object_focus_set(wd-resize_obj, EINA_FALSE); evas_object_smart_callback_call(obj, SIG_LAYOUT_UNFOCUSED, NULL); +if (_elm_config-atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_FALSE); } return EINA_TRUE; diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 1763bc5..8f48d6b 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -5430,13 +5430,6 @@ elm_widget_tree_dot_dump(const Evas_Object *top, #endif } -static void -_on_focus_change(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) -{ - Eina_Bool val = data ? EINA_TRUE : EINA_FALSE; - elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, val); -} - EOLIAN static void _elm_widget_eo_base_constructor(Eo *obj, Elm_Widget_Smart_Data *sd) { @@ -5452,8 +5445,6 @@ _elm_widget_eo_base_constructor(Eo *obj, Elm_Widget_Smart_Data *sd) sd-on_create = EINA_FALSE; sd-role = ELM_ATSPI_ROLE_UNKNOWN; - evas_object_smart_callback_add(obj, focused, _on_focus_change, (void*)1); - evas_object_smart_callback_add(obj, unfocused, _on_focus_change, NULL); } EOLIAN static void @@ -5479,12 +5470,16 @@ _elm_widget_on_focus(Eo *obj, Elm_Widget_Smart_Data *sd) if (!sd-resize_obj) evas_object_focus_set(obj, EINA_TRUE); evas_object_smart_callback_call(obj, SIG_WIDGET_FOCUSED, NULL); + if (_elm_config-atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_TRUE); } else { if (!sd-resize_obj) evas_object_focus_set(obj, EINA_FALSE); evas_object_smart_callback_call(obj, SIG_WIDGET_UNFOCUSED, NULL); + if (_elm_config-atspi_mode) + elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_FALSE); } } else --
[EGIT] [core/elementary] master 03/04: atspi: set FOCUSABLE state only when widget has no focusable children
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=020ad4df7b737fa7225b4e98e3ffd78c11de71d6 commit 020ad4df7b737fa7225b4e98e3ffd78c11de71d6 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Wed May 13 11:38:20 2015 +0200 atspi: set FOCUSABLE state only when widget has no focusable children AT-SPI2 specification states that active window can have only one widget with FOCUSED state. This differs from elementary design which assumes that whole elementary widget tree branch is focused. Patch assumes that if a widget have no focusable children and can have focus it can be marked as FOCUSABLE on atspi bus. --- src/lib/elm_layout.c | 4 ++-- src/lib/elm_widget.c | 15 +-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/lib/elm_layout.c b/src/lib/elm_layout.c index 06adc9d..5fa33e0 100644 --- a/src/lib/elm_layout.c +++ b/src/lib/elm_layout.c @@ -406,7 +406,7 @@ _elm_layout_elm_widget_on_focus(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED) elm_layout_signal_emit(obj, elm,action,focus, elm); evas_object_focus_set(wd-resize_obj, EINA_TRUE); evas_object_smart_callback_call(obj, SIG_LAYOUT_FOCUSED, NULL); -if (_elm_config-atspi_mode) +if (_elm_config-atspi_mode !elm_widget_child_can_focus_get(obj)) elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_TRUE); } else @@ -414,7 +414,7 @@ _elm_layout_elm_widget_on_focus(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED) elm_layout_signal_emit(obj, elm,action,unfocus, elm); evas_object_focus_set(wd-resize_obj, EINA_FALSE); evas_object_smart_callback_call(obj, SIG_LAYOUT_UNFOCUSED, NULL); -if (_elm_config-atspi_mode) +if (_elm_config-atspi_mode !elm_widget_child_can_focus_get(obj)) elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_FALSE); } diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index d27b27d..27221d5 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -5469,7 +5469,7 @@ _elm_widget_on_focus(Eo *obj, Elm_Widget_Smart_Data *sd) if (!sd-resize_obj) evas_object_focus_set(obj, EINA_TRUE); evas_object_smart_callback_call(obj, SIG_WIDGET_FOCUSED, NULL); - if (_elm_config-atspi_mode) + if (_elm_config-atspi_mode !elm_widget_child_can_focus_get(obj)) elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_TRUE); } else @@ -5477,7 +5477,7 @@ _elm_widget_on_focus(Eo *obj, Elm_Widget_Smart_Data *sd) if (!sd-resize_obj) evas_object_focus_set(obj, EINA_FALSE); evas_object_smart_callback_call(obj, SIG_WIDGET_UNFOCUSED, NULL); - if (_elm_config-atspi_mode) + if (_elm_config-atspi_mode !elm_widget_child_can_focus_get(obj)) elm_interface_atspi_accessible_state_changed_signal_emit(obj, ELM_ATSPI_STATE_FOCUSED, EINA_FALSE); } } @@ -5632,10 +5632,13 @@ _elm_widget_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Widget_Sma ((wy y) (wy + wh y)) || ((wy y+ h) (wy + wh y + h STATE_TYPE_SET(states, ELM_ATSPI_STATE_SHOWING); } - if (elm_object_focus_get(obj)) - STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSED); - if (elm_object_focus_allow_get(obj)) - STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSABLE); + if (!elm_widget_child_can_focus_get(obj)) + { +if (elm_object_focus_allow_get(obj)) + STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSABLE); +if (elm_object_focus_get(obj)) + STATE_TYPE_SET(states, ELM_ATSPI_STATE_FOCUSED); + } if (!elm_object_disabled_get(obj)) { STATE_TYPE_SET(states, ELM_ATSPI_STATE_ENABLED); --
[EGIT] [core/elementary] master 02/02: atspi: add component interface to elm_widget_item objects.
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=fb4608d9dae9123f451dd1ebc4c10c2b2c996884 commit fb4608d9dae9123f451dd1ebc4c10c2b2c996884 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Tue May 12 15:30:52 2015 +0200 atspi: add component interface to elm_widget_item objects. --- src/lib/elm_widget.c | 56 ++ src/lib/elm_widget_item.eo | 8 ++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 4bb2a59..1763bc5 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -5702,5 +5702,61 @@ _elm_widget_elm_interface_atspi_accessible_relation_set_get(Eo *obj, Elm_Widget_ return list; } +EOLIAN static void +_elm_widget_item_elm_interface_atspi_component_extents_get(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd EINA_UNUSED, Eina_Bool screen_coords, int *x, int *y, int *w, int *h) +{ + int ee_x, ee_y; + + if (!sd-view) + { +if (x) *x = -1; +if (y) *y = -1; +if (w) *w = -1; +if (h) *h = -1; +return; + } + + evas_object_geometry_get(sd-view, x, y, w, h); + if (screen_coords) + { +Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas_object_evas_get(sd-view)); +if (!ee) return; +ecore_evas_geometry_get(ee, ee_x, ee_y, NULL, NULL); +if (x) *x += ee_x; +if (y) *y += ee_y; + } +} + +EOLIAN static Eina_Bool +_elm_widget_item_elm_interface_atspi_component_extents_set(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd EINA_UNUSED, Eina_Bool screen_coords EINA_UNUSED, int x EINA_UNUSED, int y EINA_UNUSED, int w EINA_UNUSED, int h EINA_UNUSED) +{ + return EINA_FALSE; +} + +EOLIAN static int +_elm_widget_item_elm_interface_atspi_component_layer_get(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd EINA_UNUSED) +{ + if (!sd-view) + return -1; + return evas_object_layer_get(sd-view); +} + +EOLIAN static Eina_Bool +_elm_widget_item_elm_interface_atspi_component_focus_grab(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *_pd EINA_UNUSED) +{ + elm_object_item_focus_set(obj, EINA_TRUE); + return elm_object_item_focus_get(obj); +} + +EOLIAN static double +_elm_widget_item_elm_interface_atspi_component_alpha_get(Eo *obj EINA_UNUSED, Elm_Widget_Item_Data *sd EINA_UNUSED) +{ + int alpha; + + if (!sd-view) return -1.0; + evas_object_color_get(sd-view, NULL, NULL, NULL, alpha); + return (double)alpha / 255.0; +} + #include elm_widget_item.eo.c #include elm_widget.eo.c diff --git a/src/lib/elm_widget_item.eo b/src/lib/elm_widget_item.eo index c40ce28..771edac 100644 --- a/src/lib/elm_widget_item.eo +++ b/src/lib/elm_widget_item.eo @@ -1,4 +1,5 @@ -class Elm.Widget_Item(Eo.Base, Elm_Interface_Atspi_Accessible) +class Elm.Widget_Item(Eo.Base, Elm_Interface_Atspi_Accessible, + Elm_Interface_Atspi_Component) { eo_prefix: elm_wdg_item; legacy_prefix: elm_object_item; @@ -729,5 +730,10 @@ class Elm.Widget_Item(Eo.Base, Elm_Interface_Atspi_Accessible) Elm_Interface_Atspi_Accessible.role.set; Elm_Interface_Atspi_Accessible.state_set.get; Elm_Interface_Atspi_Accessible.parent.get; + Elm_Interface_Atspi_Component.extents.get; + Elm_Interface_Atspi_Component.extents.set; + Elm_Interface_Atspi_Component.alpha.get; + Elm_Interface_Atspi_Component.layer.get; + Elm_Interface_Atspi_Component.focus_grab; } } --
[EGIT] [core/elementary] master 01/01: gengrid: fix mem leak occuring when getting name from atspi interface
stanluk pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=2123a813459f291553303c29d834436d2058cb6c commit 2123a813459f291553303c29d834436d2058cb6c Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Mon May 4 11:45:06 2015 +0200 gengrid: fix mem leak occuring when getting name from atspi interface --- src/lib/elm_gengrid.c | 12 +++- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index f22886e..696292c 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -4956,17 +4956,19 @@ _elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it EINA_UNUSED, EINA_LIST_FREE(texts, key) { - char *s = it-itc-func.text_get + char *str_markup = it-itc-func.text_get ((void *)WIDGET_ITEM_DATA_GET(EO_OBJ(it)), WIDGET(it), key); - s = _elm_util_mkup_to_text(s); + char *str_utf8 = _elm_util_mkup_to_text(str_markup); - if (s) + free(str_markup); + + if (str_utf8) { if (eina_strbuf_length_get(buf) 0) eina_strbuf_append(buf, , ); - eina_strbuf_append(buf, s); - free(s); + eina_strbuf_append(buf, str_utf8); + free(str_utf8); } } } --
[EGIT] [core/elementary] elementary-1.13 01/01: atspi: add missing signals array sentiel.
stanluk pushed a commit to branch elementary-1.13. http://git.enlightenment.org/core/elementary.git/commit/?id=0c80bcfbfbfdf29f0bb3bb0c5aa212aa8dd96e76 commit 0c80bcfbfbfdf29f0bb3bb0c5aa212aa8dd96e76 Author: Lukasz Stanislawski l.stanisl...@samsung.com Date: Thu Apr 16 13:30:43 2015 +0200 atspi: add missing signals array sentiel. @fix --- src/lib/elm_atspi_bridge.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/elm_atspi_bridge.c b/src/lib/elm_atspi_bridge.c index a3f5e24..ead3ee0 100644 --- a/src/lib/elm_atspi_bridge.c +++ b/src/lib/elm_atspi_bridge.c @@ -183,6 +183,7 @@ static const Eldbus_Signal _event_obj_signals[] = { [ATSPI_OBJECT_EVENT_TEXT_ATTRIBUTES_CHANGED] = {TextAttributesChanged, ELDBUS_ARGS({siiv(so), NULL}), 0}, [ATSPI_OBJECT_EVENT_TEXT_CARET_MOVED] = {TextCaretMoved, ELDBUS_ARGS({siiv(so), NULL}), 0}, [ATSPI_OBJECT_EVENT_ATTRIBUTES_CHANGED] = {AttributesChanged, ELDBUS_ARGS({siiv(so), NULL}), 0}, + {NULL, ELDBUS_ARGS({NULL, NULL}), 0} }; static const Eldbus_Signal _window_obj_signals[] = { --