From 839c4ed395f4aa20c3d8089bad828f2ebdc95a4b Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Fri, 22 Sep 2017 15:13:16 +0900 Subject: [PATCH] elm: Introduce interface Efl.Ui.Translatable This will be used to replace the part translation API in Elm.Widget. It should work for both parts and non-parts (ie. the main text of a button, for instance). For now I'm taking the following approach: - All efl_text_set/get strings are untranslatable, i.e. get() returns the visible string, set replaces and can not be translated. - translatable_text_set/get needs to be used to enable automatic translation, which in turns calls efl_text_set to modify the visible string. Thus, translatable applications will have to use efl_ui_translatable_text_set a lot more than efl_text_set, unless they translate strings application-side. Note that some other frameworks take a simpler approach equivalent to calling efl_text_set() with an already translated text. This prevents runtime language changes of the application, unless the application handles them specifically. --- src/Makefile_Elementary.am | 1 + src/lib/elementary/Elementary.h | 1 + src/lib/elementary/efl_ui_clock.c | 4 +- src/lib/elementary/efl_ui_clock.eo | 2 +- src/lib/elementary/efl_ui_translatable.eo | 58 ++++++++++++++++++++++ src/lib/elementary/efl_ui_win.c | 2 +- src/lib/elementary/elc_combobox.c | 10 ++-- src/lib/elementary/elc_ctxpopup.c | 4 +- src/lib/elementary/elc_hoversel.c | 4 +- src/lib/elementary/elc_multibuttonentry.c | 4 +- src/lib/elementary/elc_naviframe.c | 4 +- src/lib/elementary/elc_popup.c | 6 +-- src/lib/elementary/elm_combobox.eo | 2 +- src/lib/elementary/elm_ctxpopup.eo | 2 +- src/lib/elementary/elm_dayselector.c | 4 +- src/lib/elementary/elm_dayselector.eo | 2 +- src/lib/elementary/elm_diskselector.c | 2 +- src/lib/elementary/elm_diskselector.eo | 2 +- src/lib/elementary/elm_hoversel.eo | 2 +- src/lib/elementary/elm_list.c | 4 +- src/lib/elementary/elm_list.eo | 2 +- src/lib/elementary/elm_menu.c | 2 +- src/lib/elementary/elm_menu.eo | 2 +- src/lib/elementary/elm_multibuttonentry.eo | 2 +- src/lib/elementary/elm_naviframe.eo | 2 +- src/lib/elementary/elm_popup.eo | 2 +- src/lib/elementary/elm_segment_control.c | 4 +- src/lib/elementary/elm_segment_control.eo | 2 +- src/lib/elementary/elm_toolbar.c | 4 +- src/lib/elementary/elm_toolbar.eo | 2 +- src/lib/elementary/elm_widget.c | 9 ++-- src/lib/elementary/elm_widget.eo | 12 ++--- src/lib/elementary/elm_widget.h | 2 +- 33 files changed, 112 insertions(+), 55 deletions(-) create mode 100644 src/lib/elementary/efl_ui_translatable.eo diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index 2562bc2da2..e6a079555b 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -140,6 +140,7 @@ elm_public_eolian_files = \ lib/elementary/efl_ui_focus_user.eo \ lib/elementary/efl_ui_textpath.eo \ lib/elementary/efl_ui_textpath_part.eo \ + lib/elementary/efl_ui_translatable.eo \ $(NULL) # Private classes (not exposed or shipped) diff --git a/src/lib/elementary/Elementary.h b/src/lib/elementary/Elementary.h index a40e36501d..81e5bb6930 100644 --- a/src/lib/elementary/Elementary.h +++ b/src/lib/elementary/Elementary.h @@ -151,6 +151,7 @@ EAPI extern Elm_Version *elm_version; # include "efl_ui_focus_manager_root_focus.eo.h" # include "efl_ui_focus_user.eo.h" # include +# include #endif #include diff --git a/src/lib/elementary/efl_ui_clock.c b/src/lib/elementary/efl_ui_clock.c index b8927bfaf6..5de015f2e5 100644 --- a/src/lib/elementary/efl_ui_clock.c +++ b/src/lib/elementary/efl_ui_clock.c @@ -408,12 +408,12 @@ _reload_format(Evas_Object *obj) } EOLIAN static void -_efl_ui_clock_elm_widget_translate(Eo *obj, Efl_Ui_Clock_Data *sd) +_efl_ui_clock_efl_ui_translatable_translation_update(Eo *obj, Efl_Ui_Clock_Data *sd) { if (!sd->user_format) _reload_format(obj); else _field_list_display(obj); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } static Eina_List * diff --git a/src/lib/elementary/efl_ui_clock.eo b/src/lib/elementary/efl_ui_clock.eo index 81ed89c717..319147a3b7 100644 --- a/src/lib/elementary/efl_ui_clock.eo +++ b/src/lib/elementary/efl_ui_clock.eo @@ -229,7 +229,7 @@ class Efl.Ui.Clock (Efl.Ui.Layout) Elm.Widget.focus_next; Elm.Widget.on_disabled_update; Elm.Widget.on_focus_update; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; } events { changed; [[Called when clock changed]] diff --git a/src/lib/elementary/efl_ui_translatable.eo b/src/lib/elementary/efl_ui_translatable.eo new file mode 100644 index 0000000000..985566c795 --- /dev/null +++ b/src/lib/elementary/efl_ui_translatable.eo @@ -0,0 +1,58 @@ +interface Efl.Ui.Translatable +{ + [[Interface for all translatable text APIs. + + This is intended for translation of human readable on-screen text strings, + but may also be used in text-to-speech situations. + ]] + methods { + @property translatable_text { + [[A unique string to be translated. + + Often this will be a human-readable string (eg. in English) but it + might as well be a unique string identifier that must then be + translated to the current locale with $dgettext() or any similar + mechanism. + + Setting this property will enable translation for this object or + part. + ]] + set { + [[Sets the new untranslated string and domain for this object.]] + } + get { + values { + domain: string @optional; [[A translation domain. If $null + this means the default domain is used.]] + } + return: string; [[This returns the untranslated value of $label. + The translated string can usually be retrieved with + $Efl.Text.text.get.]] + } + values { + label: string; [[A unique (untranslated) string.]] + domain: string @optional; [[A translation domain. If $null this + uses the default domain (eg. set by $textdomain()).]] + } + } + translation_update @protected { + [[Requests this object to update its text strings for the current + locale. + + For the moment, strings are translated with $dgettext, so support for + this function may depend on the platform. It is up to the application + to provide their own translation data. + + This function is a hook meant to be implemented by any object that + supports translation. This might be called whenever a new object is + created or when the current locale changes, for instance. This should + only trigger further calls to @.translation_update to children + objects. + ]] + } + } + events { + /* FIXME: Shouldn't language,change be here? */ + } +} + diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c index 30d4d3d492..1a94b70c2e 100644 --- a/src/lib/elementary/efl_ui_win.c +++ b/src/lib/elementary/efl_ui_win.c @@ -3679,7 +3679,7 @@ _elm_win_translate(void) Evas_Object *obj; EINA_LIST_FOREACH(_elm_win_list, l, obj) - elm_widget_translate(obj); + efl_ui_translatable_translation_update(obj); } void diff --git a/src/lib/elementary/elc_combobox.c b/src/lib/elementary/elc_combobox.c index 8d53fea303..b172153e7c 100644 --- a/src/lib/elementary/elc_combobox.c +++ b/src/lib/elementary/elc_combobox.c @@ -45,14 +45,14 @@ static const Elm_Action key_actions[] = { }; EOLIAN static void -_elm_combobox_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Combobox_Data *sd) +_elm_combobox_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Combobox_Data *sd) { - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); - elm_obj_widget_translate(sd->genlist); - elm_obj_widget_translate(sd->entry); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(sd->genlist); + efl_ui_translatable_translation_update(sd->entry); if (sd->hover) - elm_obj_widget_translate(sd->hover); + efl_ui_translatable_translation_update(sd->hover); } EOLIAN static Efl_Ui_Theme_Apply diff --git a/src/lib/elementary/elc_ctxpopup.c b/src/lib/elementary/elc_ctxpopup.c index 709b0579ce..d53cb203e8 100644 --- a/src/lib/elementary/elc_ctxpopup.c +++ b/src/lib/elementary/elc_ctxpopup.c @@ -48,7 +48,7 @@ static const Elm_Action key_actions[] = { }; EOLIAN static void -_elm_ctxpopup_elm_widget_translate(Eo *obj, Elm_Ctxpopup_Data *sd) +_elm_ctxpopup_efl_ui_translatable_translation_update(Eo *obj, Elm_Ctxpopup_Data *sd) { Eina_List *l; Elm_Object_Item *it; @@ -58,7 +58,7 @@ _elm_ctxpopup_elm_widget_translate(Eo *obj, Elm_Ctxpopup_Data *sd) EINA_LIST_FOREACH(sd->items, l, it) elm_wdg_item_translate(it); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } EOLIAN static Eina_Bool diff --git a/src/lib/elementary/elc_hoversel.c b/src/lib/elementary/elc_hoversel.c index 7a4ab20e39..d4973b103c 100644 --- a/src/lib/elementary/elc_hoversel.c +++ b/src/lib/elementary/elc_hoversel.c @@ -49,7 +49,7 @@ static const Elm_Action key_actions[] = { }; EOLIAN static void -_elm_hoversel_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd) +_elm_hoversel_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd) { Eo *it; Eina_List *l; @@ -57,7 +57,7 @@ _elm_hoversel_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd) EINA_LIST_FOREACH(sd->items, l, it) elm_wdg_item_translate(it); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } EOLIAN static Efl_Ui_Theme_Apply diff --git a/src/lib/elementary/elc_multibuttonentry.c b/src/lib/elementary/elc_multibuttonentry.c index 1da8df6191..90538e4bcb 100644 --- a/src/lib/elementary/elc_multibuttonentry.c +++ b/src/lib/elementary/elc_multibuttonentry.c @@ -64,7 +64,7 @@ EFL_CALLBACKS_ARRAY_DEFINE(_multi_buttonentry_cb, ); EOLIAN static void -_elm_multibuttonentry_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Multibuttonentry_Data *sd) +_elm_multibuttonentry_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Multibuttonentry_Data *sd) { Elm_Object_Item *it; Eina_List *l; @@ -72,7 +72,7 @@ _elm_multibuttonentry_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Multibuttone EINA_LIST_FOREACH(sd->items, l, it) elm_wdg_item_translate(it); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } static char * diff --git a/src/lib/elementary/elc_naviframe.c b/src/lib/elementary/elc_naviframe.c index e9a39e4aa2..6975a701b4 100644 --- a/src/lib/elementary/elc_naviframe.c +++ b/src/lib/elementary/elc_naviframe.c @@ -105,14 +105,14 @@ _prev_page_focus_recover(Elm_Naviframe_Item_Data *it) } EOLIAN static void -_elm_naviframe_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Naviframe_Data *sd) +_elm_naviframe_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Naviframe_Data *sd) { Elm_Naviframe_Item_Data *it; EINA_INLIST_FOREACH(sd->stack, it) elm_wdg_item_translate(EO_OBJ(it)); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } static void diff --git a/src/lib/elementary/elc_popup.c b/src/lib/elementary/elc_popup.c index f7d6f9deb3..7f0e45ef82 100644 --- a/src/lib/elementary/elc_popup.c +++ b/src/lib/elementary/elc_popup.c @@ -67,7 +67,7 @@ EFL_CALLBACKS_ARRAY_DEFINE(_notify_cb, static void _on_content_del(void *data, Evas *e, Evas_Object *obj, void *event_info); EOLIAN static void -_elm_popup_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd) +_elm_popup_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd) { Elm_Popup_Item_Data *it; Eina_List *l; @@ -75,8 +75,8 @@ _elm_popup_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd) EINA_LIST_FOREACH(sd->items, l, it) elm_wdg_item_translate(EO_OBJ(it)); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); - elm_obj_widget_translate(sd->main_layout); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(sd->main_layout); } static void diff --git a/src/lib/elementary/elm_combobox.eo b/src/lib/elementary/elm_combobox.eo index a0f106bd41..1c9592ba75 100644 --- a/src/lib/elementary/elm_combobox.eo +++ b/src/lib/elementary/elm_combobox.eo @@ -40,7 +40,7 @@ class Elm.Combobox (Efl.Ui.Button, Efl.Ui.Selectable, Efl.Gfx.visible { set; } Efl.Gfx.size { set; } Elm.Widget.theme_apply; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.widget_event; Efl.Ui.Autorepeat.autorepeat_supported { get; } Elm.Genlist.filter { set; } diff --git a/src/lib/elementary/elm_ctxpopup.eo b/src/lib/elementary/elm_ctxpopup.eo index 4829b74ebb..d46b054de7 100644 --- a/src/lib/elementary/elm_ctxpopup.eo +++ b/src/lib/elementary/elm_ctxpopup.eo @@ -208,7 +208,7 @@ class Elm.Ctxpopup (Efl.Ui.Layout, Elm.Interface.Atspi_Widget_Action, Elm.Widget.focus_next; Elm.Widget.on_disabled_update; Elm.Widget.widget_sub_object_add; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.theme_apply; Elm.Widget.widget_event; Efl.Ui.Menu.selected_item { get; } diff --git a/src/lib/elementary/elm_dayselector.c b/src/lib/elementary/elm_dayselector.c index 3f20da3b74..7274b84985 100644 --- a/src/lib/elementary/elm_dayselector.c +++ b/src/lib/elementary/elm_dayselector.c @@ -56,7 +56,7 @@ _dayselector_resize(void *data, } EOLIAN static void -_elm_dayselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Dayselector_Data *sd) +_elm_dayselector_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Dayselector_Data *sd) { time_t t; Eina_List *l; @@ -76,7 +76,7 @@ _elm_dayselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Dayselector_Data elm_object_text_set(VIEW(it), buf); } - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } static void diff --git a/src/lib/elementary/elm_dayselector.eo b/src/lib/elementary/elm_dayselector.eo index 97b12d2ffd..2ccf6169ae 100644 --- a/src/lib/elementary/elm_dayselector.eo +++ b/src/lib/elementary/elm_dayselector.eo @@ -153,7 +153,7 @@ class Elm.Dayselector (Efl.Ui.Layout) Efl.Object.constructor; Elm.Widget.theme_apply; Elm.Widget.focus_direction_manager_is; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Efl.Part.part; } events { diff --git a/src/lib/elementary/elm_diskselector.c b/src/lib/elementary/elm_diskselector.c index 1f6b192bc2..eea10e492b 100644 --- a/src/lib/elementary/elm_diskselector.c +++ b/src/lib/elementary/elm_diskselector.c @@ -49,7 +49,7 @@ static const Elm_Action key_actions[] = { }; EOLIAN static void -_elm_diskselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) +_elm_diskselector_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) { Elm_Diskselector_Item_Data *it; Eina_List *l; diff --git a/src/lib/elementary/elm_diskselector.eo b/src/lib/elementary/elm_diskselector.eo index a0c9f83e3f..e65099b41e 100644 --- a/src/lib/elementary/elm_diskselector.eo +++ b/src/lib/elementary/elm_diskselector.eo @@ -206,7 +206,7 @@ class Elm.Diskselector (Elm.Widget, Elm.Interface_Scrollable, Elm.Widget.focus_next; Elm.Widget.theme_apply; Elm.Widget.on_focus_update; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.widget_sub_object_del; Elm.Widget.widget_event; Elm.Interface_Scrollable.policy { get; set; } diff --git a/src/lib/elementary/elm_hoversel.eo b/src/lib/elementary/elm_hoversel.eo index fcdd6cfa57..1deb509621 100644 --- a/src/lib/elementary/elm_hoversel.eo +++ b/src/lib/elementary/elm_hoversel.eo @@ -97,7 +97,7 @@ class Elm.Hoversel (Efl.Ui.Button, Efl.Ui.Selectable, Efl.Gfx.visible { set; } Elm.Widget.widget_parent { set; } Elm.Widget.theme_apply; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.widget_event; Efl.Ui.Autorepeat.autorepeat_supported { get; } Elm.Interface.Atspi_Widget_Action.elm_actions { get; } diff --git a/src/lib/elementary/elm_list.c b/src/lib/elementary/elm_list.c index 34ced61c3a..e0f2f92f34 100644 --- a/src/lib/elementary/elm_list.c +++ b/src/lib/elementary/elm_list.c @@ -632,7 +632,7 @@ static Eina_Bool _key_action_escape(Evas_Object *obj, const char *params EINA_UN } EOLIAN static void -_elm_list_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_List_Data *sd) +_elm_list_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_List_Data *sd) { Elm_Object_Item *it; Eina_List *l; @@ -640,7 +640,7 @@ _elm_list_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_List_Data *sd) EINA_LIST_FOREACH(sd->items, l, it) elm_wdg_item_translate(it); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } static void diff --git a/src/lib/elementary/elm_list.eo b/src/lib/elementary/elm_list.eo index a8f57288a4..442363349d 100644 --- a/src/lib/elementary/elm_list.eo +++ b/src/lib/elementary/elm_list.eo @@ -441,7 +441,7 @@ class Elm.List (Efl.Ui.Layout, Elm.Interface_Scrollable, Elm.Widget.focus_next; Elm.Widget.on_disabled_update; Elm.Widget.on_focus_update; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.widget_sub_object_del; Elm.Widget.widget_event; Elm.Widget.focused_item { get; } diff --git a/src/lib/elementary/elm_menu.c b/src/lib/elementary/elm_menu.c index 5ed912a2d7..29d8caaa13 100644 --- a/src/lib/elementary/elm_menu.c +++ b/src/lib/elementary/elm_menu.c @@ -32,7 +32,7 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { #undef ELM_PRIV_MENU_SIGNALS EOLIAN static void -_elm_menu_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd) +_elm_menu_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd) { Elm_Menu_Item_Data *it; Eina_List *l; diff --git a/src/lib/elementary/elm_menu.eo b/src/lib/elementary/elm_menu.eo index 7a2cf0c13f..e50c4e9549 100644 --- a/src/lib/elementary/elm_menu.eo +++ b/src/lib/elementary/elm_menu.eo @@ -59,7 +59,7 @@ class Elm.Menu (Elm.Widget, Efl.Ui.Clickable, Efl.Ui.Menu, Efl.Gfx.visible { set; } Elm.Widget.widget_parent { get; set; } Elm.Widget.theme_apply; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.focus_manager_create; Elm.Interface.Atspi_Accessible.children { get; } Efl.Access.Selection.selected_children_count { get; } diff --git a/src/lib/elementary/elm_multibuttonentry.eo b/src/lib/elementary/elm_multibuttonentry.eo index 8e71e068b8..70081d9f6d 100644 --- a/src/lib/elementary/elm_multibuttonentry.eo +++ b/src/lib/elementary/elm_multibuttonentry.eo @@ -185,7 +185,7 @@ class Elm.Multibuttonentry (Efl.Ui.Layout, Efl.Ui.Clickable) Elm.Widget.focus_direction; Elm.Widget.focus_next; Elm.Widget.on_focus_update; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.widget_event; Elm.Interface.Atspi_Accessible.children { get; } Efl.Part.part; diff --git a/src/lib/elementary/elm_naviframe.eo b/src/lib/elementary/elm_naviframe.eo index 4dd9469aa7..332e98c49f 100644 --- a/src/lib/elementary/elm_naviframe.eo +++ b/src/lib/elementary/elm_naviframe.eo @@ -149,7 +149,7 @@ class Elm.Naviframe (Efl.Ui.Layout, Elm.Interface.Atspi_Widget_Action) Elm.Widget.focus_direction_manager_is; Elm.Widget.on_access_update; Elm.Widget.focus_next; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.theme_apply; Elm.Widget.widget_event; Efl.Canvas.Layout_Signal.signal_emit; diff --git a/src/lib/elementary/elm_popup.eo b/src/lib/elementary/elm_popup.eo index 8023d62571..7ac9a18b05 100644 --- a/src/lib/elementary/elm_popup.eo +++ b/src/lib/elementary/elm_popup.eo @@ -175,7 +175,7 @@ class Elm.Popup (Efl.Ui.Layout, Elm.Interface.Atspi_Widget_Action) Elm.Widget.on_access_update; Elm.Widget.focus_next; Elm.Widget.widget_parent { set; } - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.widget_sub_object_del; Elm.Widget.widget_event; Efl.Canvas.Layout_Signal.signal_emit; diff --git a/src/lib/elementary/elm_segment_control.c b/src/lib/elementary/elm_segment_control.c index bd90657f7a..8ea9689ee7 100644 --- a/src/lib/elementary/elm_segment_control.c +++ b/src/lib/elementary/elm_segment_control.c @@ -26,7 +26,7 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = { }; EOLIAN static void -_elm_segment_control_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd) +_elm_segment_control_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd) { Elm_Object_Item *it; Eina_List *l; @@ -34,7 +34,7 @@ _elm_segment_control_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Segment_Contr EINA_LIST_FOREACH(sd->items, l, it) elm_wdg_item_translate(it); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } EOLIAN static void diff --git a/src/lib/elementary/elm_segment_control.eo b/src/lib/elementary/elm_segment_control.eo index 36016d7e39..b9a3f94095 100644 --- a/src/lib/elementary/elm_segment_control.eo +++ b/src/lib/elementary/elm_segment_control.eo @@ -142,7 +142,7 @@ class Elm.Segment_Control (Efl.Ui.Layout) Elm.Widget.focus_direction_manager_is; Elm.Widget.on_access_update; Elm.Widget.on_disabled_update; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; } events { changed; [[Called when segment control changed]] diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c index b43fcd8148..37955b7738 100644 --- a/src/lib/elementary/elm_toolbar.c +++ b/src/lib/elementary/elm_toolbar.c @@ -1724,14 +1724,14 @@ _elm_toolbar_item_elm_widget_item_part_content_unset(Eo *eo_item EINA_UNUSED, El } EOLIAN static void -_elm_toolbar_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Toolbar_Data *sd) +_elm_toolbar_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Toolbar_Data *sd) { Elm_Toolbar_Item_Data *it; EINA_INLIST_FOREACH(sd->items, it) elm_wdg_item_translate(EO_OBJ(it)); - elm_obj_widget_translate(efl_super(obj, MY_CLASS)); + efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); } static void diff --git a/src/lib/elementary/elm_toolbar.eo b/src/lib/elementary/elm_toolbar.eo index 9bec19f7a1..31fab9d539 100644 --- a/src/lib/elementary/elm_toolbar.eo +++ b/src/lib/elementary/elm_toolbar.eo @@ -325,7 +325,7 @@ class Elm.Toolbar (Elm.Widget, Elm.Interface_Scrollable, Efl.Ui.Direction, Elm.Widget.focus_next; Elm.Widget.theme_apply; Elm.Widget.on_focus_update; - Elm.Widget.translate; + Efl.Ui.Translatable.translation_update; Elm.Widget.widget_event; Elm.Widget.focus_highlight_geometry { get; } Elm.Widget.focused_item { get; } diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c index 1bc6b9a460..fca0787b42 100644 --- a/src/lib/elementary/elm_widget.c +++ b/src/lib/elementary/elm_widget.c @@ -3882,7 +3882,7 @@ elm_widget_part_text_translate(Eo *obj, const char *part, const char *text) } EOLIAN static void -_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) +_elm_widget_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) { const Eina_List *l; Evas_Object *child; @@ -3890,10 +3890,10 @@ _elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) EINA_LIST_FOREACH(sd->subobjs, l, child) { if (elm_widget_is(child)) - elm_widget_translate(child); + efl_ui_translatable_translation_update(child); } - if (sd->hover_obj) elm_widget_translate(sd->hover_obj); + if (sd->hover_obj) efl_ui_translatable_translation_update(sd->hover_obj); #ifdef HAVE_GETTEXT Elm_Translate_String_Data *ts; @@ -6693,3 +6693,6 @@ ELM_PART_TEXT_DEFAULT_GET(elm_widget, NULL) #include "elm_widget_item.eo.c" #include "elm_widget.eo.c" + +/* Others */ +#include "efl_ui_translatable.eo.c" diff --git a/src/lib/elementary/elm_widget.eo b/src/lib/elementary/elm_widget.eo index 53638c95f1..123c8baecc 100644 --- a/src/lib/elementary/elm_widget.eo +++ b/src/lib/elementary/elm_widget.eo @@ -19,7 +19,8 @@ struct Elm.Widget.Focus_State { abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, Efl.Access.Component, Efl.Ui.Focus.User, Efl.Part, - Efl.Ui.Focus.Object, Efl.Ui.Base, Efl.Ui.Cursor) + Efl.Ui.Focus.Object, Efl.Ui.Base, Efl.Ui.Cursor, + Efl.Ui.Translatable) { [[Elementary widget abstract class]] legacy_prefix: elm_widget; @@ -285,14 +286,6 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, } /* Translation & Text API. */ - translate @protected { - [[Virtual function handling language changes. - - If a widget is composed of multiple sub-objects, this function might - need to be reimplemented to translate all those sub-objects that - have visible (or accessible) translatable text. - ]] - } @property domain_part_text_translatable { [[Translate domain text part property]] set { @@ -860,6 +853,7 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, Efl.Ui.Cursor.cursor { get; set; } Efl.Ui.Cursor.cursor_style { get; set; } Efl.Ui.Cursor.cursor_theme_search_enabled { get; set; } + Efl.Ui.Translatable.translation_update; [[This implements the calls to $gettext() and $text_set().]] Efl.Part.part; [[Returns @Efl.Ui.Widget.Part.]] } events { diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h index 799ec11305..a57630fd28 100644 --- a/src/lib/elementary/elm_widget.h +++ b/src/lib/elementary/elm_widget.h @@ -635,7 +635,7 @@ EAPI Eina_Bool elm_widget_api_check(int ver); EAPI Eina_Bool elm_widget_access(Evas_Object *obj, Eina_Bool is_access); EAPI Efl_Ui_Theme_Apply elm_widget_theme(Evas_Object *obj); EAPI void elm_widget_theme_specific(Evas_Object *obj, Elm_Theme *th, Eina_Bool force); -EAPI void elm_widget_translate(Evas_Object *obj); +EAPI void efl_ui_translatable_translation_update(Evas_Object *obj); EAPI void elm_widget_on_show_region_hook_set(Evas_Object *obj, void *data, Efl_Ui_Scrollable_On_Show_Region func, Eina_Free_Cb data_free); EAPI Eina_Bool elm_widget_sub_object_parent_add(Evas_Object *sobj); EAPI Eina_Bool elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj);