diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2017-09-22 15:13:16 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2017-09-26 17:58:07 +0900 |
commit | 839c4ed395f4aa20c3d8089bad828f2ebdc95a4b (patch) | |
tree | e34298f4924fab9755e198b9f87ce2f5ca81f638 | |
parent | 2b7f9b6dfd372af81fd691ac0a0a87b53f8cce34 (diff) |
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.
33 files changed, 112 insertions, 55 deletions
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 = \ | |||
140 | lib/elementary/efl_ui_focus_user.eo \ | 140 | lib/elementary/efl_ui_focus_user.eo \ |
141 | lib/elementary/efl_ui_textpath.eo \ | 141 | lib/elementary/efl_ui_textpath.eo \ |
142 | lib/elementary/efl_ui_textpath_part.eo \ | 142 | lib/elementary/efl_ui_textpath_part.eo \ |
143 | lib/elementary/efl_ui_translatable.eo \ | ||
143 | $(NULL) | 144 | $(NULL) |
144 | 145 | ||
145 | # Private classes (not exposed or shipped) | 146 | # 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; | |||
151 | # include "efl_ui_focus_manager_root_focus.eo.h" | 151 | # include "efl_ui_focus_manager_root_focus.eo.h" |
152 | # include "efl_ui_focus_user.eo.h" | 152 | # include "efl_ui_focus_user.eo.h" |
153 | # include <efl_ui_textpath.eo.h> | 153 | # include <efl_ui_textpath.eo.h> |
154 | # include <efl_ui_translatable.eo.h> | ||
154 | #endif | 155 | #endif |
155 | 156 | ||
156 | #include <elm_tooltip.h> | 157 | #include <elm_tooltip.h> |
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) | |||
408 | } | 408 | } |
409 | 409 | ||
410 | EOLIAN static void | 410 | EOLIAN static void |
411 | _efl_ui_clock_elm_widget_translate(Eo *obj, Efl_Ui_Clock_Data *sd) | 411 | _efl_ui_clock_efl_ui_translatable_translation_update(Eo *obj, Efl_Ui_Clock_Data *sd) |
412 | { | 412 | { |
413 | if (!sd->user_format) _reload_format(obj); | 413 | if (!sd->user_format) _reload_format(obj); |
414 | else _field_list_display(obj); | 414 | else _field_list_display(obj); |
415 | 415 | ||
416 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 416 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
417 | } | 417 | } |
418 | 418 | ||
419 | static Eina_List * | 419 | 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) | |||
229 | Elm.Widget.focus_next; | 229 | Elm.Widget.focus_next; |
230 | Elm.Widget.on_disabled_update; | 230 | Elm.Widget.on_disabled_update; |
231 | Elm.Widget.on_focus_update; | 231 | Elm.Widget.on_focus_update; |
232 | Elm.Widget.translate; | 232 | Efl.Ui.Translatable.translation_update; |
233 | } | 233 | } |
234 | events { | 234 | events { |
235 | changed; [[Called when clock changed]] | 235 | 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 @@ | |||
1 | interface Efl.Ui.Translatable | ||
2 | { | ||
3 | [[Interface for all translatable text APIs. | ||
4 | |||
5 | This is intended for translation of human readable on-screen text strings, | ||
6 | but may also be used in text-to-speech situations. | ||
7 | ]] | ||
8 | methods { | ||
9 | @property translatable_text { | ||
10 | [[A unique string to be translated. | ||
11 | |||
12 | Often this will be a human-readable string (eg. in English) but it | ||
13 | might as well be a unique string identifier that must then be | ||
14 | translated to the current locale with $dgettext() or any similar | ||
15 | mechanism. | ||
16 | |||
17 | Setting this property will enable translation for this object or | ||
18 | part. | ||
19 | ]] | ||
20 | set { | ||
21 | [[Sets the new untranslated string and domain for this object.]] | ||
22 | } | ||
23 | get { | ||
24 | values { | ||
25 | domain: string @optional; [[A translation domain. If $null | ||
26 | this means the default domain is used.]] | ||
27 | } | ||
28 | return: string; [[This returns the untranslated value of $label. | ||
29 | The translated string can usually be retrieved with | ||
30 | $Efl.Text.text.get.]] | ||
31 | } | ||
32 | values { | ||
33 | label: string; [[A unique (untranslated) string.]] | ||
34 | domain: string @optional; [[A translation domain. If $null this | ||
35 | uses the default domain (eg. set by $textdomain()).]] | ||
36 | } | ||
37 | } | ||
38 | translation_update @protected { | ||
39 | [[Requests this object to update its text strings for the current | ||
40 | locale. | ||
41 | |||
42 | For the moment, strings are translated with $dgettext, so support for | ||
43 | this function may depend on the platform. It is up to the application | ||
44 | to provide their own translation data. | ||
45 | |||
46 | This function is a hook meant to be implemented by any object that | ||
47 | supports translation. This might be called whenever a new object is | ||
48 | created or when the current locale changes, for instance. This should | ||
49 | only trigger further calls to @.translation_update to children | ||
50 | objects. | ||
51 | ]] | ||
52 | } | ||
53 | } | ||
54 | events { | ||
55 | /* FIXME: Shouldn't language,change be here? */ | ||
56 | } | ||
57 | } | ||
58 | |||
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) | |||
3679 | Evas_Object *obj; | 3679 | Evas_Object *obj; |
3680 | 3680 | ||
3681 | EINA_LIST_FOREACH(_elm_win_list, l, obj) | 3681 | EINA_LIST_FOREACH(_elm_win_list, l, obj) |
3682 | elm_widget_translate(obj); | 3682 | efl_ui_translatable_translation_update(obj); |
3683 | } | 3683 | } |
3684 | 3684 | ||
3685 | void | 3685 | 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[] = { | |||
45 | }; | 45 | }; |
46 | 46 | ||
47 | EOLIAN static void | 47 | EOLIAN static void |
48 | _elm_combobox_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Combobox_Data *sd) | 48 | _elm_combobox_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Combobox_Data *sd) |
49 | { | 49 | { |
50 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 50 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
51 | elm_obj_widget_translate(sd->genlist); | 51 | efl_ui_translatable_translation_update(sd->genlist); |
52 | elm_obj_widget_translate(sd->entry); | 52 | efl_ui_translatable_translation_update(sd->entry); |
53 | 53 | ||
54 | if (sd->hover) | 54 | if (sd->hover) |
55 | elm_obj_widget_translate(sd->hover); | 55 | efl_ui_translatable_translation_update(sd->hover); |
56 | } | 56 | } |
57 | 57 | ||
58 | EOLIAN static Efl_Ui_Theme_Apply | 58 | 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[] = { | |||
48 | }; | 48 | }; |
49 | 49 | ||
50 | EOLIAN static void | 50 | EOLIAN static void |
51 | _elm_ctxpopup_elm_widget_translate(Eo *obj, Elm_Ctxpopup_Data *sd) | 51 | _elm_ctxpopup_efl_ui_translatable_translation_update(Eo *obj, Elm_Ctxpopup_Data *sd) |
52 | { | 52 | { |
53 | Eina_List *l; | 53 | Eina_List *l; |
54 | Elm_Object_Item *it; | 54 | Elm_Object_Item *it; |
@@ -58,7 +58,7 @@ _elm_ctxpopup_elm_widget_translate(Eo *obj, Elm_Ctxpopup_Data *sd) | |||
58 | EINA_LIST_FOREACH(sd->items, l, it) | 58 | EINA_LIST_FOREACH(sd->items, l, it) |
59 | elm_wdg_item_translate(it); | 59 | elm_wdg_item_translate(it); |
60 | 60 | ||
61 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 61 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
62 | } | 62 | } |
63 | 63 | ||
64 | EOLIAN static Eina_Bool | 64 | 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[] = { | |||
49 | }; | 49 | }; |
50 | 50 | ||
51 | EOLIAN static void | 51 | EOLIAN static void |
52 | _elm_hoversel_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd) | 52 | _elm_hoversel_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd) |
53 | { | 53 | { |
54 | Eo *it; | 54 | Eo *it; |
55 | Eina_List *l; | 55 | Eina_List *l; |
@@ -57,7 +57,7 @@ _elm_hoversel_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Hoversel_Data *sd) | |||
57 | EINA_LIST_FOREACH(sd->items, l, it) | 57 | EINA_LIST_FOREACH(sd->items, l, it) |
58 | elm_wdg_item_translate(it); | 58 | elm_wdg_item_translate(it); |
59 | 59 | ||
60 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 60 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
61 | } | 61 | } |
62 | 62 | ||
63 | EOLIAN static Efl_Ui_Theme_Apply | 63 | 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, | |||
64 | ); | 64 | ); |
65 | 65 | ||
66 | EOLIAN static void | 66 | EOLIAN static void |
67 | _elm_multibuttonentry_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Multibuttonentry_Data *sd) | 67 | _elm_multibuttonentry_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Multibuttonentry_Data *sd) |
68 | { | 68 | { |
69 | Elm_Object_Item *it; | 69 | Elm_Object_Item *it; |
70 | Eina_List *l; | 70 | Eina_List *l; |
@@ -72,7 +72,7 @@ _elm_multibuttonentry_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Multibuttone | |||
72 | EINA_LIST_FOREACH(sd->items, l, it) | 72 | EINA_LIST_FOREACH(sd->items, l, it) |
73 | elm_wdg_item_translate(it); | 73 | elm_wdg_item_translate(it); |
74 | 74 | ||
75 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 75 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
76 | } | 76 | } |
77 | 77 | ||
78 | static char * | 78 | 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) | |||
105 | } | 105 | } |
106 | 106 | ||
107 | EOLIAN static void | 107 | EOLIAN static void |
108 | _elm_naviframe_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Naviframe_Data *sd) | 108 | _elm_naviframe_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Naviframe_Data *sd) |
109 | { | 109 | { |
110 | Elm_Naviframe_Item_Data *it; | 110 | Elm_Naviframe_Item_Data *it; |
111 | 111 | ||
112 | EINA_INLIST_FOREACH(sd->stack, it) | 112 | EINA_INLIST_FOREACH(sd->stack, it) |
113 | elm_wdg_item_translate(EO_OBJ(it)); | 113 | elm_wdg_item_translate(EO_OBJ(it)); |
114 | 114 | ||
115 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 115 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
116 | } | 116 | } |
117 | 117 | ||
118 | static void | 118 | 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, | |||
67 | static void _on_content_del(void *data, Evas *e, Evas_Object *obj, void *event_info); | 67 | static void _on_content_del(void *data, Evas *e, Evas_Object *obj, void *event_info); |
68 | 68 | ||
69 | EOLIAN static void | 69 | EOLIAN static void |
70 | _elm_popup_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd) | 70 | _elm_popup_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd) |
71 | { | 71 | { |
72 | Elm_Popup_Item_Data *it; | 72 | Elm_Popup_Item_Data *it; |
73 | Eina_List *l; | 73 | Eina_List *l; |
@@ -75,8 +75,8 @@ _elm_popup_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd) | |||
75 | EINA_LIST_FOREACH(sd->items, l, it) | 75 | EINA_LIST_FOREACH(sd->items, l, it) |
76 | elm_wdg_item_translate(EO_OBJ(it)); | 76 | elm_wdg_item_translate(EO_OBJ(it)); |
77 | 77 | ||
78 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 78 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
79 | elm_obj_widget_translate(sd->main_layout); | 79 | efl_ui_translatable_translation_update(sd->main_layout); |
80 | } | 80 | } |
81 | 81 | ||
82 | static void | 82 | 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, | |||
40 | Efl.Gfx.visible { set; } | 40 | Efl.Gfx.visible { set; } |
41 | Efl.Gfx.size { set; } | 41 | Efl.Gfx.size { set; } |
42 | Elm.Widget.theme_apply; | 42 | Elm.Widget.theme_apply; |
43 | Elm.Widget.translate; | 43 | Efl.Ui.Translatable.translation_update; |
44 | Elm.Widget.widget_event; | 44 | Elm.Widget.widget_event; |
45 | Efl.Ui.Autorepeat.autorepeat_supported { get; } | 45 | Efl.Ui.Autorepeat.autorepeat_supported { get; } |
46 | Elm.Genlist.filter { set; } | 46 | 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, | |||
208 | Elm.Widget.focus_next; | 208 | Elm.Widget.focus_next; |
209 | Elm.Widget.on_disabled_update; | 209 | Elm.Widget.on_disabled_update; |
210 | Elm.Widget.widget_sub_object_add; | 210 | Elm.Widget.widget_sub_object_add; |
211 | Elm.Widget.translate; | 211 | Efl.Ui.Translatable.translation_update; |
212 | Elm.Widget.theme_apply; | 212 | Elm.Widget.theme_apply; |
213 | Elm.Widget.widget_event; | 213 | Elm.Widget.widget_event; |
214 | Efl.Ui.Menu.selected_item { get; } | 214 | 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, | |||
56 | } | 56 | } |
57 | 57 | ||
58 | EOLIAN static void | 58 | EOLIAN static void |
59 | _elm_dayselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Dayselector_Data *sd) | 59 | _elm_dayselector_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Dayselector_Data *sd) |
60 | { | 60 | { |
61 | time_t t; | 61 | time_t t; |
62 | Eina_List *l; | 62 | Eina_List *l; |
@@ -76,7 +76,7 @@ _elm_dayselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Dayselector_Data | |||
76 | elm_object_text_set(VIEW(it), buf); | 76 | elm_object_text_set(VIEW(it), buf); |
77 | } | 77 | } |
78 | 78 | ||
79 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 79 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
80 | } | 80 | } |
81 | 81 | ||
82 | static void | 82 | 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) | |||
153 | Efl.Object.constructor; | 153 | Efl.Object.constructor; |
154 | Elm.Widget.theme_apply; | 154 | Elm.Widget.theme_apply; |
155 | Elm.Widget.focus_direction_manager_is; | 155 | Elm.Widget.focus_direction_manager_is; |
156 | Elm.Widget.translate; | 156 | Efl.Ui.Translatable.translation_update; |
157 | Efl.Part.part; | 157 | Efl.Part.part; |
158 | } | 158 | } |
159 | events { | 159 | 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[] = { | |||
49 | }; | 49 | }; |
50 | 50 | ||
51 | EOLIAN static void | 51 | EOLIAN static void |
52 | _elm_diskselector_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) | 52 | _elm_diskselector_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Diskselector_Data *sd) |
53 | { | 53 | { |
54 | Elm_Diskselector_Item_Data *it; | 54 | Elm_Diskselector_Item_Data *it; |
55 | Eina_List *l; | 55 | 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, | |||
206 | Elm.Widget.focus_next; | 206 | Elm.Widget.focus_next; |
207 | Elm.Widget.theme_apply; | 207 | Elm.Widget.theme_apply; |
208 | Elm.Widget.on_focus_update; | 208 | Elm.Widget.on_focus_update; |
209 | Elm.Widget.translate; | 209 | Efl.Ui.Translatable.translation_update; |
210 | Elm.Widget.widget_sub_object_del; | 210 | Elm.Widget.widget_sub_object_del; |
211 | Elm.Widget.widget_event; | 211 | Elm.Widget.widget_event; |
212 | Elm.Interface_Scrollable.policy { get; set; } | 212 | 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, | |||
97 | Efl.Gfx.visible { set; } | 97 | Efl.Gfx.visible { set; } |
98 | Elm.Widget.widget_parent { set; } | 98 | Elm.Widget.widget_parent { set; } |
99 | Elm.Widget.theme_apply; | 99 | Elm.Widget.theme_apply; |
100 | Elm.Widget.translate; | 100 | Efl.Ui.Translatable.translation_update; |
101 | Elm.Widget.widget_event; | 101 | Elm.Widget.widget_event; |
102 | Efl.Ui.Autorepeat.autorepeat_supported { get; } | 102 | Efl.Ui.Autorepeat.autorepeat_supported { get; } |
103 | Elm.Interface.Atspi_Widget_Action.elm_actions { get; } | 103 | 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 | |||
632 | } | 632 | } |
633 | 633 | ||
634 | EOLIAN static void | 634 | EOLIAN static void |
635 | _elm_list_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_List_Data *sd) | 635 | _elm_list_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_List_Data *sd) |
636 | { | 636 | { |
637 | Elm_Object_Item *it; | 637 | Elm_Object_Item *it; |
638 | Eina_List *l; | 638 | Eina_List *l; |
@@ -640,7 +640,7 @@ _elm_list_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_List_Data *sd) | |||
640 | EINA_LIST_FOREACH(sd->items, l, it) | 640 | EINA_LIST_FOREACH(sd->items, l, it) |
641 | elm_wdg_item_translate(it); | 641 | elm_wdg_item_translate(it); |
642 | 642 | ||
643 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 643 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
644 | } | 644 | } |
645 | 645 | ||
646 | static void | 646 | 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, | |||
441 | Elm.Widget.focus_next; | 441 | Elm.Widget.focus_next; |
442 | Elm.Widget.on_disabled_update; | 442 | Elm.Widget.on_disabled_update; |
443 | Elm.Widget.on_focus_update; | 443 | Elm.Widget.on_focus_update; |
444 | Elm.Widget.translate; | 444 | Efl.Ui.Translatable.translation_update; |
445 | Elm.Widget.widget_sub_object_del; | 445 | Elm.Widget.widget_sub_object_del; |
446 | Elm.Widget.widget_event; | 446 | Elm.Widget.widget_event; |
447 | Elm.Widget.focused_item { get; } | 447 | 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[] = { | |||
32 | #undef ELM_PRIV_MENU_SIGNALS | 32 | #undef ELM_PRIV_MENU_SIGNALS |
33 | 33 | ||
34 | EOLIAN static void | 34 | EOLIAN static void |
35 | _elm_menu_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd) | 35 | _elm_menu_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Menu_Data *sd) |
36 | { | 36 | { |
37 | Elm_Menu_Item_Data *it; | 37 | Elm_Menu_Item_Data *it; |
38 | Eina_List *l; | 38 | 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, | |||
59 | Efl.Gfx.visible { set; } | 59 | Efl.Gfx.visible { set; } |
60 | Elm.Widget.widget_parent { get; set; } | 60 | Elm.Widget.widget_parent { get; set; } |
61 | Elm.Widget.theme_apply; | 61 | Elm.Widget.theme_apply; |
62 | Elm.Widget.translate; | 62 | Efl.Ui.Translatable.translation_update; |
63 | Elm.Widget.focus_manager_create; | 63 | Elm.Widget.focus_manager_create; |
64 | Elm.Interface.Atspi_Accessible.children { get; } | 64 | Elm.Interface.Atspi_Accessible.children { get; } |
65 | Efl.Access.Selection.selected_children_count { get; } | 65 | 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) | |||
185 | Elm.Widget.focus_direction; | 185 | Elm.Widget.focus_direction; |
186 | Elm.Widget.focus_next; | 186 | Elm.Widget.focus_next; |
187 | Elm.Widget.on_focus_update; | 187 | Elm.Widget.on_focus_update; |
188 | Elm.Widget.translate; | 188 | Efl.Ui.Translatable.translation_update; |
189 | Elm.Widget.widget_event; | 189 | Elm.Widget.widget_event; |
190 | Elm.Interface.Atspi_Accessible.children { get; } | 190 | Elm.Interface.Atspi_Accessible.children { get; } |
191 | Efl.Part.part; | 191 | 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) | |||
149 | Elm.Widget.focus_direction_manager_is; | 149 | Elm.Widget.focus_direction_manager_is; |
150 | Elm.Widget.on_access_update; | 150 | Elm.Widget.on_access_update; |
151 | Elm.Widget.focus_next; | 151 | Elm.Widget.focus_next; |
152 | Elm.Widget.translate; | 152 | Efl.Ui.Translatable.translation_update; |
153 | Elm.Widget.theme_apply; | 153 | Elm.Widget.theme_apply; |
154 | Elm.Widget.widget_event; | 154 | Elm.Widget.widget_event; |
155 | Efl.Canvas.Layout_Signal.signal_emit; | 155 | 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) | |||
175 | Elm.Widget.on_access_update; | 175 | Elm.Widget.on_access_update; |
176 | Elm.Widget.focus_next; | 176 | Elm.Widget.focus_next; |
177 | Elm.Widget.widget_parent { set; } | 177 | Elm.Widget.widget_parent { set; } |
178 | Elm.Widget.translate; | 178 | Efl.Ui.Translatable.translation_update; |
179 | Elm.Widget.widget_sub_object_del; | 179 | Elm.Widget.widget_sub_object_del; |
180 | Elm.Widget.widget_event; | 180 | Elm.Widget.widget_event; |
181 | Efl.Canvas.Layout_Signal.signal_emit; | 181 | 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[] = { | |||
26 | }; | 26 | }; |
27 | 27 | ||
28 | EOLIAN static void | 28 | EOLIAN static void |
29 | _elm_segment_control_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd) | 29 | _elm_segment_control_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *sd) |
30 | { | 30 | { |
31 | Elm_Object_Item *it; | 31 | Elm_Object_Item *it; |
32 | Eina_List *l; | 32 | Eina_List *l; |
@@ -34,7 +34,7 @@ _elm_segment_control_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Segment_Contr | |||
34 | EINA_LIST_FOREACH(sd->items, l, it) | 34 | EINA_LIST_FOREACH(sd->items, l, it) |
35 | elm_wdg_item_translate(it); | 35 | elm_wdg_item_translate(it); |
36 | 36 | ||
37 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 37 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
38 | } | 38 | } |
39 | 39 | ||
40 | EOLIAN static void | 40 | 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) | |||
142 | Elm.Widget.focus_direction_manager_is; | 142 | Elm.Widget.focus_direction_manager_is; |
143 | Elm.Widget.on_access_update; | 143 | Elm.Widget.on_access_update; |
144 | Elm.Widget.on_disabled_update; | 144 | Elm.Widget.on_disabled_update; |
145 | Elm.Widget.translate; | 145 | Efl.Ui.Translatable.translation_update; |
146 | } | 146 | } |
147 | events { | 147 | events { |
148 | changed; [[Called when segment control changed]] | 148 | 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 | |||
1724 | } | 1724 | } |
1725 | 1725 | ||
1726 | EOLIAN static void | 1726 | EOLIAN static void |
1727 | _elm_toolbar_elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Toolbar_Data *sd) | 1727 | _elm_toolbar_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Toolbar_Data *sd) |
1728 | { | 1728 | { |
1729 | Elm_Toolbar_Item_Data *it; | 1729 | Elm_Toolbar_Item_Data *it; |
1730 | 1730 | ||
1731 | EINA_INLIST_FOREACH(sd->items, it) | 1731 | EINA_INLIST_FOREACH(sd->items, it) |
1732 | elm_wdg_item_translate(EO_OBJ(it)); | 1732 | elm_wdg_item_translate(EO_OBJ(it)); |
1733 | 1733 | ||
1734 | elm_obj_widget_translate(efl_super(obj, MY_CLASS)); | 1734 | efl_ui_translatable_translation_update(efl_super(obj, MY_CLASS)); |
1735 | } | 1735 | } |
1736 | 1736 | ||
1737 | static void | 1737 | 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, | |||
325 | Elm.Widget.focus_next; | 325 | Elm.Widget.focus_next; |
326 | Elm.Widget.theme_apply; | 326 | Elm.Widget.theme_apply; |
327 | Elm.Widget.on_focus_update; | 327 | Elm.Widget.on_focus_update; |
328 | Elm.Widget.translate; | 328 | Efl.Ui.Translatable.translation_update; |
329 | Elm.Widget.widget_event; | 329 | Elm.Widget.widget_event; |
330 | Elm.Widget.focus_highlight_geometry { get; } | 330 | Elm.Widget.focus_highlight_geometry { get; } |
331 | Elm.Widget.focused_item { get; } | 331 | 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) | |||
3882 | } | 3882 | } |
3883 | 3883 | ||
3884 | EOLIAN static void | 3884 | EOLIAN static void |
3885 | _elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) | 3885 | _elm_widget_efl_ui_translatable_translation_update(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) |
3886 | { | 3886 | { |
3887 | const Eina_List *l; | 3887 | const Eina_List *l; |
3888 | Evas_Object *child; | 3888 | Evas_Object *child; |
@@ -3890,10 +3890,10 @@ _elm_widget_translate(Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd) | |||
3890 | EINA_LIST_FOREACH(sd->subobjs, l, child) | 3890 | EINA_LIST_FOREACH(sd->subobjs, l, child) |
3891 | { | 3891 | { |
3892 | if (elm_widget_is(child)) | 3892 | if (elm_widget_is(child)) |
3893 | elm_widget_translate(child); | 3893 | efl_ui_translatable_translation_update(child); |
3894 | } | 3894 | } |
3895 | 3895 | ||
3896 | if (sd->hover_obj) elm_widget_translate(sd->hover_obj); | 3896 | if (sd->hover_obj) efl_ui_translatable_translation_update(sd->hover_obj); |
3897 | 3897 | ||
3898 | #ifdef HAVE_GETTEXT | 3898 | #ifdef HAVE_GETTEXT |
3899 | Elm_Translate_String_Data *ts; | 3899 | Elm_Translate_String_Data *ts; |
@@ -6693,3 +6693,6 @@ ELM_PART_TEXT_DEFAULT_GET(elm_widget, NULL) | |||
6693 | 6693 | ||
6694 | #include "elm_widget_item.eo.c" | 6694 | #include "elm_widget_item.eo.c" |
6695 | #include "elm_widget.eo.c" | 6695 | #include "elm_widget.eo.c" |
6696 | |||
6697 | /* Others */ | ||
6698 | #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 { | |||
19 | 19 | ||
20 | abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, | 20 | abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, |
21 | Efl.Access.Component, Efl.Ui.Focus.User, Efl.Part, | 21 | Efl.Access.Component, Efl.Ui.Focus.User, Efl.Part, |
22 | Efl.Ui.Focus.Object, Efl.Ui.Base, Efl.Ui.Cursor) | 22 | Efl.Ui.Focus.Object, Efl.Ui.Base, Efl.Ui.Cursor, |
23 | Efl.Ui.Translatable) | ||
23 | { | 24 | { |
24 | [[Elementary widget abstract class]] | 25 | [[Elementary widget abstract class]] |
25 | legacy_prefix: elm_widget; | 26 | legacy_prefix: elm_widget; |
@@ -285,14 +286,6 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, | |||
285 | } | 286 | } |
286 | 287 | ||
287 | /* Translation & Text API. */ | 288 | /* Translation & Text API. */ |
288 | translate @protected { | ||
289 | [[Virtual function handling language changes. | ||
290 | |||
291 | If a widget is composed of multiple sub-objects, this function might | ||
292 | need to be reimplemented to translate all those sub-objects that | ||
293 | have visible (or accessible) translatable text. | ||
294 | ]] | ||
295 | } | ||
296 | @property domain_part_text_translatable { | 289 | @property domain_part_text_translatable { |
297 | [[Translate domain text part property]] | 290 | [[Translate domain text part property]] |
298 | set { | 291 | set { |
@@ -860,6 +853,7 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible, | |||
860 | Efl.Ui.Cursor.cursor { get; set; } | 853 | Efl.Ui.Cursor.cursor { get; set; } |
861 | Efl.Ui.Cursor.cursor_style { get; set; } | 854 | Efl.Ui.Cursor.cursor_style { get; set; } |
862 | Efl.Ui.Cursor.cursor_theme_search_enabled { get; set; } | 855 | Efl.Ui.Cursor.cursor_theme_search_enabled { get; set; } |
856 | Efl.Ui.Translatable.translation_update; [[This implements the calls to $gettext() and $text_set().]] | ||
863 | Efl.Part.part; [[Returns @Efl.Ui.Widget.Part.]] | 857 | Efl.Part.part; [[Returns @Efl.Ui.Widget.Part.]] |
864 | } | 858 | } |
865 | events { | 859 | 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); | |||
635 | EAPI Eina_Bool elm_widget_access(Evas_Object *obj, Eina_Bool is_access); | 635 | EAPI Eina_Bool elm_widget_access(Evas_Object *obj, Eina_Bool is_access); |
636 | EAPI Efl_Ui_Theme_Apply elm_widget_theme(Evas_Object *obj); | 636 | EAPI Efl_Ui_Theme_Apply elm_widget_theme(Evas_Object *obj); |
637 | EAPI void elm_widget_theme_specific(Evas_Object *obj, Elm_Theme *th, Eina_Bool force); | 637 | EAPI void elm_widget_theme_specific(Evas_Object *obj, Elm_Theme *th, Eina_Bool force); |
638 | EAPI void elm_widget_translate(Evas_Object *obj); | 638 | EAPI void efl_ui_translatable_translation_update(Evas_Object *obj); |
639 | 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); | 639 | 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); |
640 | EAPI Eina_Bool elm_widget_sub_object_parent_add(Evas_Object *sobj); | 640 | EAPI Eina_Bool elm_widget_sub_object_parent_add(Evas_Object *sobj); |
641 | EAPI Eina_Bool elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj); | 641 | EAPI Eina_Bool elm_widget_sub_object_add(Evas_Object *obj, Evas_Object *sobj); |