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)
# include "efl_ui_focus_manager_root_focus.eo.h"
# include "efl_ui_focus_user.eo.h"
# include <efl_ui_textpath.eo.h>
+# include <efl_ui_translatable.eo.h>
#endif
#include <elm_tooltip.h>
}
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 *
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]]
--- /dev/null
+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? */
+ }
+}
+
Evas_Object *obj;
EINA_LIST_FOREACH(_elm_win_list, l, obj)
- elm_widget_translate(obj);
+ efl_ui_translatable_translation_update(obj);
}
void
};
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
};
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;
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
};
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;
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
);
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;
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 *
}
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
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;
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
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; }
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; }
}
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;
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
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 {
};
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;
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; }
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; }
}
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;
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
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; }
#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;
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; }
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;
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;
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;
};
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;
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
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]]
}
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
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; }
}
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;
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;
#include "elm_widget_item.eo.c"
#include "elm_widget.eo.c"
+
+/* Others */
+#include "efl_ui_translatable.eo.c"
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;
}
/* 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 {
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 {
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);