From e648f1e85e2d1be78bc2cb6a2b2aa87227bcfe89 Mon Sep 17 00:00:00 2001 From: Shinwoo Kim Date: Thu, 10 Nov 2016 10:58:41 +0900 Subject: [PATCH] [elementary][atspi] change accessible description to char* from const char* Summary: The accessible name is char*, this could confuse API user. If we provide user callback to get description, an user would return allocated string. The usage of elm_interface_atspi_description_get/set should be same with elm_interface_atspi_name_get/set Reviewers: lukasz.stanislawski, cedric, raster Reviewed By: raster Subscribers: stanluk, jpeg Differential Revision: https://phab.enlightenment.org/D4378 --- src/lib/elementary/efl_ui_text.c | 6 +++--- src/lib/elementary/efl_ui_win.c | 6 +++--- src/lib/elementary/elc_multibuttonentry.c | 6 +++--- src/lib/elementary/elm_atspi_app_object.c | 4 ++-- src/lib/elementary/elm_atspi_bridge.c | 15 ++++++--------- src/lib/elementary/elm_entry.c | 6 +++--- src/lib/elementary/elm_gengrid.c | 13 +++++++++---- src/lib/elementary/elm_genlist.c | 13 +++++++++---- src/lib/elementary/elm_index.c | 6 +++--- .../elm_interface_atspi_accessible.c | 18 +++++------------- .../elm_interface_atspi_accessible.eo | 2 +- src/lib/elementary/elm_list.c | 6 +++--- src/lib/elementary/elm_menu.c | 6 +++--- src/lib/elementary/elm_spinner.c | 6 +++--- src/lib/elementary/elm_toolbar.c | 6 +++--- src/lib/elementary/elm_widget.c | 16 +++++++++++----- src/lib/elementary/elm_widget.h | 2 ++ src/tests/elementary/elm_test_atspi.c | 11 ++--------- 18 files changed, 74 insertions(+), 74 deletions(-) diff --git a/src/lib/elementary/efl_ui_text.c b/src/lib/elementary/efl_ui_text.c index 7e8fabb785..2cf59ab005 100644 --- a/src/lib/elementary/efl_ui_text.c +++ b/src/lib/elementary/efl_ui_text.c @@ -4808,14 +4808,14 @@ _efl_ui_text_elm_interface_atspi_accessible_state_set_get(Eo *obj, Efl_Ui_Text_D return ret; } -EOLIAN static char* +EOLIAN static const char* _efl_ui_text_elm_interface_atspi_accessible_name_get(Eo *obj, Efl_Ui_Text_Data *pd) { - char *name; + const char *name; name = elm_interface_atspi_accessible_name_get(efl_super(obj, EFL_UI_TEXT_CLASS)); if (name && strncmp("", name, 1)) return name; const char *ret = edje_object_part_text_get(pd->entry_edje, "elm.guide"); - return ret ? strdup(ret) : NULL; + return ret; } EOLIAN static Efl_Canvas_Text_Cursor * diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 2686e5c9d2..3ad9322c98 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -6205,14 +6205,14 @@ _efl_ui_win_elm_interface_atspi_accessible_state_set_get(Eo *obj, Efl_Ui_Win_Dat return ret; } -EOLIAN static char* +EOLIAN static const char* _efl_ui_win_elm_interface_atspi_accessible_name_get(Eo *obj, Efl_Ui_Win_Data *sd EINA_UNUSED) { - char *ret; + const char *ret; ret = elm_interface_atspi_accessible_name_get(efl_super(obj, EFL_UI_WIN_CLASS)); if (ret) return ret; const char *name = elm_win_title_get(obj); - return name ? strdup(name) : NULL; + return name; } EOLIAN static Eina_Bool diff --git a/src/lib/elementary/elc_multibuttonentry.c b/src/lib/elementary/elc_multibuttonentry.c index fb76690785..f9a10b3469 100644 --- a/src/lib/elementary/elc_multibuttonentry.c +++ b/src/lib/elementary/elc_multibuttonentry.c @@ -2047,15 +2047,15 @@ _elm_multibuttonentry_elm_interface_atspi_accessible_children_get(Eo *obj, Elm_M return eina_list_merge(eina_list_clone(sd->items), ret); } -EOLIAN static char* +EOLIAN static const char* _elm_multibuttonentry_item_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Multibuttonentry_Item_Data *item) { - char *ret; + const char *ret; ret = elm_interface_atspi_accessible_name_get(efl_super(obj, ELM_MULTIBUTTONENTRY_ITEM_CLASS)); if (ret) return ret; const char *txt = elm_object_part_text_get(VIEW(item), "elm.btn.text"); - return txt ? strdup(txt) : NULL; + return txt; } static Eina_Bool diff --git a/src/lib/elementary/elm_atspi_app_object.c b/src/lib/elementary/elm_atspi_app_object.c index bf44597157..2b905523fa 100644 --- a/src/lib/elementary/elm_atspi_app_object.c +++ b/src/lib/elementary/elm_atspi_app_object.c @@ -44,12 +44,12 @@ _elm_atspi_app_object_elm_interface_atspi_accessible_children_get(Eo *obj EINA_U return accs; } -EOLIAN static char* +EOLIAN static const char* _elm_atspi_app_object_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Atspi_App_Object_Data *_pd EINA_UNUSED) { const char *ret; ret = elm_app_name_get(); - return ret ? strdup(ret) : NULL; + return ret; } EOLIAN static const char* diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index 880a338055..7d004cd23e 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -2075,12 +2075,10 @@ _accessible_property_get(const Eldbus_Service_Interface *interface, const char * if (!strcmp(property, "Name")) { - char *ret2; - ret2 = elm_interface_atspi_accessible_name_get(obj); - if (!ret2) - ret2 = strdup(""); - eldbus_message_iter_basic_append(iter, 's', ret2); - free(ret2); + ret = elm_interface_atspi_accessible_name_get(obj); + if (!ret) + ret = ""; + eldbus_message_iter_basic_append(iter, 's', ret); return EINA_TRUE; } else if (!strcmp(property, "Description")) @@ -3191,13 +3189,12 @@ _cache_item_reference_append_cb(Eo *bridge, Eo *data, Eldbus_Message_Iter *iter_ _iter_interfaces_append(iter_struct, data); /* Marshall name */ - char *name = NULL; + const char *name = NULL; name = elm_interface_atspi_accessible_name_get(data); if (!name) - name = strdup(""); + name = ""; eldbus_message_iter_basic_append(iter_struct, 's', name); - free(name); /* Marshall role */ eldbus_message_iter_basic_append(iter_struct, 'u', role); diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c index 49fdac8eb5..0af5d8cbe3 100644 --- a/src/lib/elementary/elm_entry.c +++ b/src/lib/elementary/elm_entry.c @@ -5983,14 +5983,14 @@ _elm_entry_elm_interface_atspi_accessible_state_set_get(Eo *obj, Elm_Entry_Data return ret; } -EOLIAN static char* +EOLIAN static const char* _elm_entry_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Entry_Data *sd) { - char *name; + const char *name; name = elm_interface_atspi_accessible_name_get(efl_super(obj, ELM_ENTRY_CLASS)); 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; + return ret; } /* Efl.Part begin */ diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c index 768d6b2936..4329685320 100644 --- a/src/lib/elementary/elm_gengrid.c +++ b/src/lib/elementary/elm_gengrid.c @@ -5773,11 +5773,12 @@ _elm_gengrid_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_Ge return ret; } -EOLIAN char* +EOLIAN const char* _elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Gen_Item *it) { - char *ret; + const char *ret; Eina_Strbuf *buf; + char *accessible_name; ret = elm_interface_atspi_accessible_name_get(efl_super(eo_it, ELM_GENGRID_ITEM_CLASS)); if (ret) return ret; @@ -5811,9 +5812,13 @@ _elm_gengrid_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Gen_Ite } } - ret = eina_strbuf_string_steal(buf); + accessible_name = eina_strbuf_string_steal(buf); eina_strbuf_free(buf); - return ret; + + eina_stringshare_del(it->base->accessible_name); + it->base->accessible_name = eina_stringshare_add(accessible_name); + free(accessible_name); + return it->base->accessible_name; } EAPI Elm_Object_Item * diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c index 856441e455..ba727ed10c 100644 --- a/src/lib/elementary/elm_genlist.c +++ b/src/lib/elementary/elm_genlist.c @@ -8221,11 +8221,12 @@ _elm_genlist_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_Ge return ret; } -EOLIAN char* +EOLIAN const char* _elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Gen_Item *it) { - char *ret; + const char *ret; Eina_Strbuf *buf; + char *accessible_name; ret = elm_interface_atspi_accessible_name_get(efl_super(eo_it, ELM_GENLIST_ITEM_CLASS)); if (ret) return ret; @@ -8257,9 +8258,13 @@ _elm_genlist_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Gen_Ite } } - ret = eina_strbuf_string_steal(buf); + accessible_name = eina_strbuf_string_steal(buf); eina_strbuf_free(buf); - return ret; + + eina_stringshare_del(it->base->accessible_name); + it->base->accessible_name = eina_stringshare_add(accessible_name); + free(accessible_name); + return it->base->accessible_name; } EOLIAN static void diff --git a/src/lib/elementary/elm_index.c b/src/lib/elementary/elm_index.c index beb0563f14..428a5138ae 100644 --- a/src/lib/elementary/elm_index.c +++ b/src/lib/elementary/elm_index.c @@ -1741,14 +1741,14 @@ _elm_index_elm_interface_atspi_accessible_children_get(Eo *obj, Elm_Index_Data * return eina_list_merge(eina_list_clone(data->items), ret); } -EOLIAN static char* +EOLIAN static const char* _elm_index_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_Index_Item_Data *data) { - char *name; + const char *name; name = elm_interface_atspi_accessible_name_get(efl_super(eo_it, ELM_INDEX_ITEM_CLASS)); if (name) return name; - return data->letter ? strdup(data->letter) : NULL; + return data->letter; } EOLIAN static const Elm_Atspi_Action* diff --git a/src/lib/elementary/elm_interface_atspi_accessible.c b/src/lib/elementary/elm_interface_atspi_accessible.c index 9f576aa7d7..22afbaabeb 100644 --- a/src/lib/elementary/elm_interface_atspi_accessible.c +++ b/src/lib/elementary/elm_interface_atspi_accessible.c @@ -224,26 +224,18 @@ _elm_interface_atspi_accessible_role_name_get(Eo *obj EINA_UNUSED, Elm_Interface return role > ELM_ATSPI_ROLE_LAST_DEFINED ? "" : Atspi_Name[role]; } -EOLIAN char * +EOLIAN const char * _elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd) { - 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); + if (pd->translation_domain) + return dgettext(pd->translation_domain, pd->name); #endif - } - - return NULL; + return pd->name; } EOLIAN static void -_elm_interface_atspi_accessible_name_set(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd, char *val) +_elm_interface_atspi_accessible_name_set(Eo *obj EINA_UNUSED, Elm_Interface_Atspi_Accessible_Data *pd, const char *val) { eina_stringshare_replace(&pd->name, val); } diff --git a/src/lib/elementary/elm_interface_atspi_accessible.eo b/src/lib/elementary/elm_interface_atspi_accessible.eo index 3a746e723f..15a0c5ad10 100644 --- a/src/lib/elementary/elm_interface_atspi_accessible.eo +++ b/src/lib/elementary/elm_interface_atspi_accessible.eo @@ -256,7 +256,7 @@ mixin Elm.Interface.Atspi_Accessible () set { } values { - name: ptr(char); [[Object name]] + name: string; [[Object name]] } } @property relation_set @protected { diff --git a/src/lib/elementary/elm_list.c b/src/lib/elementary/elm_list.c index 8f2ca840f8..710c5cb07e 100644 --- a/src/lib/elementary/elm_list.c +++ b/src/lib/elementary/elm_list.c @@ -2144,13 +2144,13 @@ _elm_list_item_elm_interface_atspi_accessible_state_set_get(Eo *eo_it, Elm_List_ return ret; } -EOLIAN static char* +EOLIAN static const char* _elm_list_item_elm_interface_atspi_accessible_name_get(Eo *eo_it, Elm_List_Item_Data *data) { - char *ret; + const char *ret; ret = elm_interface_atspi_accessible_name_get(efl_super(eo_it, ELM_LIST_ITEM_CLASS)); if (ret) return ret; - return data->label ? strdup(data->label) : NULL; + return data->label; } static char * diff --git a/src/lib/elementary/elm_menu.c b/src/lib/elementary/elm_menu.c index a58600050e..5127ef09da 100644 --- a/src/lib/elementary/elm_menu.c +++ b/src/lib/elementary/elm_menu.c @@ -1304,13 +1304,13 @@ _elm_menu_item_elm_interface_atspi_accessible_role_get(Eo *obj EINA_UNUSED, Elm_ return sd->submenu.items ? ELM_ATSPI_ROLE_MENU : ELM_ATSPI_ROLE_MENU_ITEM; } -EOLIAN static char* +EOLIAN static const char* _elm_menu_item_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Menu_Item_Data *sd) { - char *ret; + const char *ret; ret = elm_interface_atspi_accessible_name_get(efl_super(obj, ELM_MENU_ITEM_CLASS)); if (ret) return ret; - return sd->label ? strdup(sd->label) : NULL; + return sd->label; } EOLIAN static Elm_Atspi_State_Set diff --git a/src/lib/elementary/elm_spinner.c b/src/lib/elementary/elm_spinner.c index 9e7b0552d0..78b12e6cc0 100644 --- a/src/lib/elementary/elm_spinner.c +++ b/src/lib/elementary/elm_spinner.c @@ -1736,14 +1736,14 @@ _elm_spinner_elm_interface_atspi_value_increment_get(Eo *obj EINA_UNUSED, Elm_Sp return sd->step; } -EOLIAN static char* +EOLIAN static const char* _elm_spinner_elm_interface_atspi_accessible_name_get(Eo *obj, Elm_Spinner_Data *sd EINA_UNUSED) { - char *name; + const char *name; name = elm_interface_atspi_accessible_name_get(efl_super(obj, ELM_SPINNER_CLASS)); if (name) return name; const char *ret = elm_layout_text_get(obj, "elm.text"); - return ret ? strdup(ret) : NULL; + return ret; } // A11Y Accessibility - END diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c index e9bbc9f02b..4f70b47eda 100644 --- a/src/lib/elementary/elm_toolbar.c +++ b/src/lib/elementary/elm_toolbar.c @@ -3966,13 +3966,13 @@ _elm_toolbar_item_bring_in(Eo *eo_item EINA_UNUSED, Elm_Toolbar_Item_Data *item, (WIDGET(item), x, y, w, h); } -EOLIAN static char* +EOLIAN static const char* _elm_toolbar_item_elm_interface_atspi_accessible_name_get(Eo *eo_item, Elm_Toolbar_Item_Data *item) { - char *ret; + const char *ret; ret = elm_interface_atspi_accessible_name_get(efl_super(eo_item, ELM_TOOLBAR_ITEM_CLASS)); if (ret) return ret; - return item->label ? strdup(item->label) : NULL; + return item->label; } EOLIAN static Elm_Atspi_State_Set diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c index 2c9f8ed367..f7f2def23f 100644 --- a/src/lib/elementary/elm_widget.c +++ b/src/lib/elementary/elm_widget.c @@ -482,6 +482,7 @@ _elm_widget_efl_canvas_group_group_del(Eo *obj, Elm_Widget_Smart_Data *sd) _if_focused_revert(obj, EINA_TRUE); elm_widget_focus_custom_chain_unset(obj); eina_stringshare_del(sd->access_info); + eina_stringshare_del(sd->accessible_name); evas_object_smart_data_set(obj, NULL); } @@ -4576,6 +4577,7 @@ _elm_widget_item_efl_object_destructor(Eo *eo_item, Elm_Widget_Item_Data *item) evas_object_del(item->view); eina_stringshare_del(item->access_info); + eina_stringshare_del(item->accessible_name); while (item->signals) _elm_widget_item_signal_callback_list_get(item, item->signals); @@ -5939,11 +5941,11 @@ _elm_widget_elm_interface_atspi_component_focus_grab(Eo *obj, Elm_Widget_Smart_D return EINA_FALSE; } -EOLIAN static char* -_elm_widget_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd EINA_UNUSED) +EOLIAN static const char* +_elm_widget_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *_pd) { - const char *ret; - char *name; + const char *ret, *name; + char *accessible_name; name = elm_interface_atspi_accessible_name_get(efl_super(obj, ELM_WIDGET_CLASS)); if (name) return name; @@ -5951,7 +5953,11 @@ _elm_widget_elm_interface_atspi_accessible_name_get(Eo *obj EINA_UNUSED, Elm_Wid ret = elm_object_text_get(obj); if (!ret) return NULL; - return _elm_util_mkup_to_text(ret); + accessible_name = _elm_util_mkup_to_text(ret); + eina_stringshare_del(_pd->accessible_name); + _pd->accessible_name = eina_stringshare_add(accessible_name); + free(accessible_name); + return _pd->accessible_name; } EOLIAN static Eina_List* diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h index 28b35492d0..8115111345 100644 --- a/src/lib/elementary/elm_widget.h +++ b/src/lib/elementary/elm_widget.h @@ -410,6 +410,7 @@ typedef struct _Elm_Widget_Smart_Data const char *style; const char *focus_highlight_style; /**< custom focus style for a widget */ const char *access_info; + const char *accessible_name; unsigned int focus_order; Eina_Bool focus_order_on_calc; @@ -603,6 +604,7 @@ struct _Elm_Widget_Item_Data Evas_Object *access_obj; const char *access_info; + const char *accessible_name; Eina_List *access_order; Eina_Inlist *translate_strings; Eina_List *signals; diff --git a/src/tests/elementary/elm_test_atspi.c b/src/tests/elementary/elm_test_atspi.c index 630febc9c1..8f9e043870 100644 --- a/src/tests/elementary/elm_test_atspi.c +++ b/src/tests/elementary/elm_test_atspi.c @@ -51,7 +51,7 @@ START_TEST (elm_atspi_name_get) elm_init(0, NULL); generate_app(); - char *name; + const char *name; name = elm_interface_atspi_accessible_name_get(g_btn); @@ -59,8 +59,6 @@ START_TEST (elm_atspi_name_get) ck_assert(0); } - free(name); - // Set name with additional text tags elm_object_text_set(g_btn, "Some
text"); @@ -70,7 +68,6 @@ START_TEST (elm_atspi_name_get) ck_assert(name != NULL); ck_assert_str_eq(name, "Some\ntext"); - free(name); elm_shutdown(); } END_TEST @@ -80,7 +77,7 @@ START_TEST (elm_atspi_name_set) elm_init(0, NULL); generate_app(); - char *name; + const char *name; elm_object_text_set(g_btn, "Other text"); elm_interface_atspi_accessible_name_set(g_btn, "Test name"); @@ -90,16 +87,12 @@ START_TEST (elm_atspi_name_set) ck_assert(name != NULL); ck_assert_str_eq(name, "Test name"); - free(name); - elm_interface_atspi_accessible_name_set(g_btn, NULL); name = elm_interface_atspi_accessible_name_get(g_btn); ck_assert(name != NULL); ck_assert_str_eq(name, "Other text"); - free(name); - elm_shutdown(); } END_TEST