forked from enlightenment/efl
widget: Implement translation API in layout
This moves the API entry points from Widget to Layout parts. I don't think the other widgets support translation, but that is easy to fix. The actual code implementation remains in elm_widget.c. Legacy-only widgets are covered by Part_Legacy, while all EO widgets that have text inherit from Layout (except Win but I don't think the window title was translatable in legacy). This removes 2/3 remaining part APIs from Widget. Ref T5363
This commit is contained in:
parent
839c4ed395
commit
e9dfcb44ff
|
@ -3,6 +3,7 @@
|
|||
#endif
|
||||
|
||||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -2565,6 +2565,20 @@ ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(efl_ui_layout_part_content, efl_ui_layout,
|
|||
ELM_PART_OVERRIDE_TEXT_GET_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT, Efl_Ui_Layout_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_SET_FULL(efl_ui_layout_part_text, efl_ui_layout, EFL_UI_LAYOUT, Efl_Ui_Layout_Data)
|
||||
|
||||
EOLIAN static const char *
|
||||
_efl_ui_layout_part_text_efl_ui_translatable_translatable_text_get(Eo *obj, void *_pd EINA_UNUSED, const char **domain)
|
||||
{
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
||||
return elm_widget_part_translatable_text_get(pd->obj, pd->part, domain);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_layout_part_text_efl_ui_translatable_translatable_text_set(Eo *obj, void *_pd EINA_UNUSED, const char *label, const char *domain)
|
||||
{
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
||||
elm_widget_part_translatable_text_set(pd->obj, pd->part, label, domain);
|
||||
}
|
||||
|
||||
/* Efl.Ui.Layout.Part_Legacy */
|
||||
ELM_PART_OVERRIDE_CONTENT_GET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT, Efl_Ui_Layout_Data)
|
||||
ELM_PART_OVERRIDE_CONTENT_SET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT, Efl_Ui_Layout_Data)
|
||||
|
@ -2572,6 +2586,21 @@ ELM_PART_OVERRIDE_CONTENT_UNSET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, E
|
|||
ELM_PART_OVERRIDE_TEXT_GET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT, Efl_Ui_Layout_Data)
|
||||
ELM_PART_OVERRIDE_TEXT_SET_FULL(efl_ui_layout_part_legacy, efl_ui_layout, EFL_UI_LAYOUT, Efl_Ui_Layout_Data)
|
||||
|
||||
EOLIAN static const char *
|
||||
_efl_ui_layout_part_legacy_efl_ui_translatable_translatable_text_get(Eo *obj, void *_pd EINA_UNUSED, const char **domain)
|
||||
{
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
||||
return elm_widget_part_translatable_text_get(pd->obj, pd->part, domain);
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_layout_part_legacy_efl_ui_translatable_translatable_text_set(Eo *obj, void *_pd EINA_UNUSED, const char *label, const char *domain)
|
||||
{
|
||||
Elm_Part_Data *pd = efl_data_scope_get(obj, EFL_UI_WIDGET_PART_CLASS);
|
||||
elm_widget_part_translatable_text_set(pd->obj, pd->part, label, domain);
|
||||
}
|
||||
|
||||
/* Efl.Ui.Layout.Part_Xxx includes */
|
||||
#include "efl_ui_layout_part.eo.c"
|
||||
#include "efl_ui_layout_part_content.eo.c"
|
||||
#include "efl_ui_layout_part_text.eo.c"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
class Efl.Ui.Layout.Part_Legacy (Efl.Ui.Layout.Part, Efl.Container, Efl.Text)
|
||||
class Efl.Ui.Layout.Part_Legacy (Efl.Ui.Layout.Part, Efl.Container, Efl.Text,
|
||||
Efl.Ui.Translatable)
|
||||
{
|
||||
[[Elementary layout internal part class]]
|
||||
data: null;
|
||||
|
@ -6,5 +7,6 @@ class Efl.Ui.Layout.Part_Legacy (Efl.Ui.Layout.Part, Efl.Container, Efl.Text)
|
|||
Efl.Container.content { get; set; }
|
||||
Efl.Container.content_unset;
|
||||
Efl.Text.text { set; get; }
|
||||
Efl.Ui.Translatable.translatable_text { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
class Efl.Ui.Layout.Part_Text (Efl.Ui.Layout.Part, Efl.Text)
|
||||
class Efl.Ui.Layout.Part_Text (Efl.Ui.Layout.Part, Efl.Text,
|
||||
Efl.Ui.Translatable)
|
||||
{
|
||||
[[Elementary layout internal part class]]
|
||||
data: null;
|
||||
implements {
|
||||
Efl.Text.text { set; get; }
|
||||
Efl.Ui.Translatable.translatable_text { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#define EFL_GFX_SIZE_HINT_PROTECTED
|
||||
#define EFL_CANVAS_OBJECT_BETA
|
||||
#define EFL_CANVAS_OBJECT_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
#define EFL_UI_WIN_INLINED_PROTECTED
|
||||
#define EFL_UI_WIN_BETA
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
#define ELM_WIDGET_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
|
||||
#define ELM_WIDGET_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
|
||||
|
|
|
@ -4,9 +4,10 @@
|
|||
|
||||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
|
||||
#define ELM_WIDGET_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
#include "elm_hoversel.eo.h"
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define ELM_WIDGET_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
#define ELM_WIDGET_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#endif
|
||||
|
||||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
#define EFL_ACCESS_SELECTION_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
|
||||
|
|
|
@ -1484,14 +1484,20 @@ EAPI void
|
|||
elm_object_domain_translatable_part_text_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN(obj);
|
||||
elm_widget_domain_translatable_part_text_set(obj, part, domain, text);
|
||||
if (!part)
|
||||
efl_ui_translatable_text_set(obj, text, domain);
|
||||
else
|
||||
efl_ui_translatable_text_set(efl_part(obj, part), text, domain);
|
||||
}
|
||||
|
||||
EAPI const char *
|
||||
elm_object_translatable_part_text_get(const Evas_Object *obj, const char *part)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
|
||||
return elm_widget_translatable_part_text_get(obj, part);
|
||||
if (!part)
|
||||
return efl_ui_translatable_text_get(obj, NULL);
|
||||
else
|
||||
return efl_ui_translatable_text_get(efl_part(obj, part), NULL);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
|
|
|
@ -5,8 +5,9 @@
|
|||
#define ELM_WIDGET_PROTECTED
|
||||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define EFL_ACCESS_SELECTION_PROTECTED
|
||||
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
|
||||
#include "elm_priv.h"
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#define EFL_ACCESS_SELECTION_PROTECTED
|
||||
#define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED
|
||||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#define ELM_WIDGET_ITEM_PROTECTED
|
||||
#define EFL_CANVAS_OBJECT_BETA
|
||||
#define EFL_INPUT_EVENT_PROTECTED
|
||||
#define EFL_UI_TRANSLATABLE_PROTECTED
|
||||
|
||||
#include <Elementary.h>
|
||||
|
||||
|
@ -3787,11 +3788,15 @@ _part_text_translatable_set(Eina_Inlist **translate_strings, const char *part, E
|
|||
return ts;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_domain_translatable_part_text_set(Eo *obj, Elm_Widget_Smart_Data *sd, const char *part, const char *domain, const char *label)
|
||||
/* internal */
|
||||
void
|
||||
elm_widget_part_translatable_text_set(Eo *obj, const char *part, const char *label, const char *domain)
|
||||
{
|
||||
|
||||
Elm_Translate_String_Data *ts;
|
||||
Elm_Widget_Smart_Data *sd;
|
||||
|
||||
sd = efl_data_scope_safe_get(obj, MY_CLASS);
|
||||
if (!sd) return;
|
||||
|
||||
if (!label)
|
||||
{
|
||||
|
@ -3817,16 +3822,6 @@ _elm_widget_domain_translatable_part_text_set(Eo *obj, Elm_Widget_Smart_Data *sd
|
|||
sd->on_translate = EINA_FALSE;
|
||||
}
|
||||
|
||||
EOLIAN static const char*
|
||||
_elm_widget_translatable_part_text_get(const Eo *obj EINA_UNUSED, Elm_Widget_Smart_Data *sd, const char *part)
|
||||
{
|
||||
Elm_Translate_String_Data *ts;
|
||||
|
||||
ts = _translate_string_data_get(sd->translate_strings, part);
|
||||
if (ts) return ts->string;
|
||||
else return NULL;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_elm_widget_domain_part_text_translatable_set(Eo *obj, Elm_Widget_Smart_Data *sd, const char *part, const char *domain, Eina_Bool translatable)
|
||||
{
|
||||
|
@ -3853,32 +3848,23 @@ _elm_widget_domain_part_text_translatable_set(Eo *obj, Elm_Widget_Smart_Data *sd
|
|||
sd->on_translate = EINA_FALSE;
|
||||
}
|
||||
|
||||
static const char*
|
||||
_part_text_translate(Eina_Inlist *translate_strings,
|
||||
const char *part,
|
||||
const char *text)
|
||||
/* internal */
|
||||
const char *
|
||||
elm_widget_part_translatable_text_get(const Eo *obj, const char *part, const char **domain)
|
||||
{
|
||||
Elm_Widget_Smart_Data *sd;
|
||||
Elm_Translate_String_Data *ts;
|
||||
ts = _translate_string_data_get(translate_strings, part);
|
||||
if (!ts) return text;
|
||||
|
||||
if (!ts->string) ts->string = eina_stringshare_add(text);
|
||||
else eina_stringshare_replace(&ts->string, text);
|
||||
#ifdef HAVE_GETTEXT
|
||||
if (text && text[0])
|
||||
text = dgettext(ts->domain, text);
|
||||
#endif
|
||||
return text;
|
||||
}
|
||||
if (domain) *domain = NULL;
|
||||
|
||||
EAPI const char*
|
||||
elm_widget_part_text_translate(Eo *obj, const char *part, const char *text)
|
||||
{
|
||||
Elm_Widget_Smart_Data *sd = efl_data_scope_safe_get(obj, MY_CLASS);
|
||||
sd = efl_data_scope_safe_get(obj, MY_CLASS);
|
||||
if (!sd) return NULL;
|
||||
|
||||
if (!sd) return text;
|
||||
if (!sd->translate_strings || sd->on_translate) return text;
|
||||
return _part_text_translate(sd->translate_strings, part, text);
|
||||
ts = _translate_string_data_get(sd->translate_strings, part);
|
||||
if (!ts) return NULL;
|
||||
|
||||
if (domain) *domain = ts->domain;
|
||||
return ts->string;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
|
|
|
@ -296,23 +296,6 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible,
|
|||
translatable: bool; [[$true if translatable, $false otherwise]]
|
||||
}
|
||||
}
|
||||
translatable_part_text_get @const {
|
||||
[[Get translatable part text]]
|
||||
return: string; [[Part text]]
|
||||
params {
|
||||
@in part: string; [[Part name]]
|
||||
}
|
||||
}
|
||||
@property domain_translatable_part_text {
|
||||
[[Domain translatable text part property]]
|
||||
set {
|
||||
}
|
||||
values {
|
||||
part: string; [[Part name]]
|
||||
domain: string; [[Domain name]]
|
||||
label: string; [[Label]]
|
||||
}
|
||||
}
|
||||
|
||||
/* Internal hooks. */
|
||||
widget_sub_object_add @protected {
|
||||
|
|
|
@ -635,7 +635,6 @@ 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 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);
|
||||
|
@ -728,10 +727,8 @@ EAPI void elm_widget_focus_mouse_up_handle(Evas_Object *obj);
|
|||
EAPI void elm_widget_activate(Evas_Object *obj, Elm_Activate act);
|
||||
EAPI void elm_widget_part_text_set(Evas_Object *obj, const char *part, const char *label);
|
||||
EAPI const char *elm_widget_part_text_get(const Evas_Object *obj, const char *part);
|
||||
EAPI void elm_widget_domain_translatable_part_text_set(Evas_Object *obj, const char *part, const char *domain, const char *text);
|
||||
EAPI const char *elm_widget_translatable_part_text_get(const Evas_Object *obj, const char *part);
|
||||
EAPI void elm_widget_domain_part_text_translatable_set(Evas_Object *obj, const char *part, const char *domain, Eina_Bool translatable);
|
||||
EAPI const char * elm_widget_part_text_translate(Evas_Object *obj, const char *part, const char *text);
|
||||
EAPI void elm_widget_content_part_set(Evas_Object *obj, const char *part, Evas_Object *content);
|
||||
EAPI Evas_Object *elm_widget_content_part_get(const Evas_Object *obj, const char *part);
|
||||
EAPI Evas_Object *elm_widget_content_part_unset(Evas_Object *obj, const char *part);
|
||||
|
@ -743,6 +740,8 @@ EAPI Eina_Rect elm_widget_focus_highlight_geometry_get(const Evas_Object
|
|||
void _elm_widget_item_highlight_in_theme(Evas_Object *obj, Elm_Object_Item *it);
|
||||
EAPI void elm_widget_focus_region_show_mode_set(Evas_Object *obj, Elm_Focus_Region_Show_Mode mode);
|
||||
EAPI Elm_Focus_Region_Show_Mode elm_widget_focus_region_show_mode_get(const Evas_Object *obj);
|
||||
const char *elm_widget_part_translatable_text_get(const Eo *obj, const char *part, const char **domain);
|
||||
void elm_widget_part_translatable_text_set(Eo *obj, const char *part, const char *label, const char *domain);
|
||||
|
||||
/* debug function. don't use it unless you are tracking parenting issues */
|
||||
EAPI void elm_widget_tree_dump(const Evas_Object *top);
|
||||
|
|
Loading…
Reference in New Issue