elementary/layout: attach edje object API with eo compositing

Test Plan: make check

Reviewers: Hermet, jpeg, cedric

Subscribers: slotus.lee

Differential Revision: https://phab.enlightenment.org/D3871

Signed-off-by: Cedric Bail <cedric@osg.samsung.com>
This commit is contained in:
Jee-Yong Um 2016-06-27 11:18:02 -07:00 committed by Cedric Bail
parent a12e69c153
commit 8a988717e1
13 changed files with 245 additions and 178 deletions

View File

@ -815,4 +815,22 @@ group { name: "page_layout";
}
}
}
}
group { "layout_edje";
parts {
rect { "red";
desc {
color_class: "red";
}
}
rect { "blue";
desc { "default";
}
desc { "changed";
color: 0 0 255 255;
link.base: "change" "test";
}
}
}
}
}

View File

@ -3108,7 +3108,7 @@ _chars_add_till_limit(Evas_Object *obj,
#endif
EOLIAN static void
_efl_ui_text_elm_layout_signal_emit(Eo *obj EINA_UNUSED, Efl_Ui_Text_Data *sd, const char *emission, const char *source)
_efl_ui_text_edje_object_signal_emit(Eo *obj EINA_UNUSED, Efl_Ui_Text_Data *sd, const char *emission, const char *source)
{
/* always pass to both edje objs */
edje_object_signal_emit(sd->entry_edje, emission, source);
@ -3122,7 +3122,7 @@ _efl_ui_text_elm_layout_signal_emit(Eo *obj EINA_UNUSED, Efl_Ui_Text_Data *sd, c
}
EOLIAN static void
_efl_ui_text_elm_layout_signal_callback_add (Eo *obj, Efl_Ui_Text_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
_efl_ui_text_edje_object_signal_callback_add(Eo *obj, Efl_Ui_Text_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
{
Evas_Object *ro;
@ -3132,25 +3132,25 @@ _efl_ui_text_elm_layout_signal_callback_add (Eo *obj, Efl_Ui_Text_Data *sd, cons
wd->resize_obj = sd->entry_edje;
elm_obj_layout_signal_callback_add
edje_obj_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
elm_obj_layout_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
edje_obj_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
}
wd->resize_obj = ro;
}
EOLIAN static void *
_efl_ui_text_elm_layout_signal_callback_del(Eo *obj, Efl_Ui_Text_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb)
_efl_ui_text_edje_object_signal_callback_del(Eo *obj, Efl_Ui_Text_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
{
Evas_Object *ro;
void *data = NULL;
void *data_ptr;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
@ -3158,19 +3158,19 @@ _efl_ui_text_elm_layout_signal_callback_del(Eo *obj, Efl_Ui_Text_Data *sd, const
wd->resize_obj = sd->entry_edje;
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
}
wd->resize_obj = ro;
return data;
return data_ptr;
}
#if 0

View File

@ -4,7 +4,8 @@ import elm_entry;
class Efl.Ui.Text (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
Elm.Interface.Atspi.Text, Elm.Interface.Atspi.Text.Editable, Efl.File,
Efl.Ui.Selectable, Efl.Ui.Scrollable, Efl.Ui.Text.Interactive)
Efl.Ui.Selectable, Efl.Ui.Scrollable, Efl.Ui.Text.Interactive,
Edje.Object)
{
methods {
@property scrollable {
@ -377,6 +378,9 @@ class Efl.Ui.Text (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
Efl.Canvas.Group.group_del;
Efl.Canvas.Group.group_show;
Efl.Canvas.Group.group_hide;
Edje.Object.signal_callback_add;
Edje.Object.signal_callback_del;
Edje.Object.signal_emit;
Elm.Widget.activate;
Elm.Widget.focus_direction_manager_is;
Elm.Widget.theme_apply;
@ -388,9 +392,6 @@ class Efl.Ui.Text (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
Elm.Layout.theme_enable;
Elm.Layout.sizing_eval;
Elm.Layout.text.get;
Elm.Layout.signal_callback_add;
Elm.Layout.signal_callback_del;
Elm.Layout.signal_emit;
Elm.Layout.text.set;
Elm.Layout.content_aliases.get;
Elm.Interface_Scrollable.policy.set;

View File

@ -1005,7 +1005,7 @@ _back_btn_new(Evas_Object *obj, const char *title_label)
}
EOLIAN static void
_elm_naviframe_elm_layout_signal_emit(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED, const char *emission, const char *source)
_elm_naviframe_edje_object_signal_emit(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED, const char *emission, const char *source)
{
Elm_Object_Item *eo_top_it;
@ -1013,7 +1013,7 @@ _elm_naviframe_elm_layout_signal_emit(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSE
if (!eo_top_it) return;
ELM_NAVIFRAME_ITEM_DATA_GET(eo_top_it, top_it);
elm_obj_layout_signal_emit(VIEW(top_it), emission, source);
edje_obj_signal_emit(VIEW(top_it), emission, source);
}
/* content/text smart functions proxying things to the top item, which

View File

@ -498,9 +498,9 @@ _elm_popup_elm_layout_sizing_eval(Eo *obj, Elm_Popup_Data *sd)
}
EOLIAN static void
_elm_popup_elm_layout_signal_emit(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd, const char *emission, const char *source)
_elm_popup_edje_object_signal_emit(Eo *obj EINA_UNUSED, Elm_Popup_Data *sd, const char *emission, const char *source)
{
elm_layout_signal_emit(sd->main_layout, emission, source);
edje_obj_signal_emit(sd->main_layout, emission, source);
}
EOLIAN static Eina_Bool

View File

@ -2998,7 +2998,7 @@ _chars_add_till_limit(Evas_Object *obj,
}
EOLIAN static void
_elm_entry_elm_layout_signal_emit(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, const char *emission, const char *source)
_elm_entry_edje_object_signal_emit(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, const char *emission, const char *source)
{
/* always pass to both edje objs */
edje_object_signal_emit(sd->entry_edje, emission, source);
@ -3012,7 +3012,7 @@ _elm_entry_elm_layout_signal_emit(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, const
}
EOLIAN static void
_elm_entry_elm_layout_signal_callback_add (Eo *obj, Elm_Entry_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
_elm_entry_edje_object_signal_callback_add(Eo *obj, Elm_Entry_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
{
Evas_Object *ro;
@ -3022,25 +3022,25 @@ _elm_entry_elm_layout_signal_callback_add (Eo *obj, Elm_Entry_Data *sd, const ch
wd->resize_obj = sd->entry_edje;
elm_obj_layout_signal_callback_add
edje_obj_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
elm_obj_layout_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
edje_obj_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
}
wd->resize_obj = ro;
}
EOLIAN static void *
_elm_entry_elm_layout_signal_callback_del(Eo *obj, Elm_Entry_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb)
_elm_entry_edje_object_signal_callback_del(Eo *obj, Elm_Entry_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
{
Evas_Object *ro;
void *data = NULL;
void *data_ptr;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
@ -3048,19 +3048,19 @@ _elm_entry_elm_layout_signal_callback_del(Eo *obj, Elm_Entry_Data *sd, const cha
wd->resize_obj = sd->entry_edje;
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
}
wd->resize_obj = ro;
return data;
return data_ptr;
}
static Eina_Bool

View File

@ -116,7 +116,7 @@ enum Elm.Cnp_Mode
class Elm.Entry (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
Elm.Interface.Atspi.Text, Elm.Interface.Atspi.Text.Editable, Efl.File,
Efl.Ui.Selectable, Efl.Ui.Scrollable)
Efl.Ui.Selectable, Efl.Ui.Scrollable, Edje.Object)
{
legacy_prefix: elm_entry;
eo_prefix: elm_obj_entry;
@ -942,6 +942,9 @@ class Elm.Entry (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
Efl.Canvas.Group.group_del;
Efl.Canvas.Group.group_show;
Efl.Canvas.Group.group_hide;
Edje.Object.signal_callback_add;
Edje.Object.signal_callback_del;
Edje.Object.signal_emit;
Elm.Widget.activate;
Elm.Widget.focus_direction_manager_is;
Elm.Widget.theme_apply;
@ -953,9 +956,6 @@ class Elm.Entry (Elm.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable,
Elm.Layout.theme_enable;
Elm.Layout.sizing_eval;
Elm.Layout.text.get;
Elm.Layout.signal_callback_add;
Elm.Layout.signal_callback_del;
Elm.Layout.signal_emit;
Elm.Layout.text.set;
Elm.Layout.content_aliases.get;
Elm.Interface_Scrollable.policy.set;

View File

@ -766,6 +766,7 @@ _elm_layout_efl_canvas_group_group_add(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_
/* has to be there *before* parent's smart_add() */
edje = edje_object_add(evas_object_evas_get(obj));
eo_composite_attach(obj, edje);
elm_widget_resize_object_set(obj, edje, EINA_TRUE);
efl_canvas_group_add(eo_super(obj, MY_CLASS));
@ -909,21 +910,25 @@ _elm_layout_theme_set(Eo *obj, Elm_Layout_Smart_Data *sd, const char *klass, con
return _elm_layout_theme_internal(obj, sd);
}
EOLIAN static void
_elm_layout_signal_emit(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED, const char *emission, const char *source)
EAPI void
elm_layout_signal_emit(Evas_Object *obj, const char *emission, const char *source)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
edje_obj_signal_emit(obj, emission, source);
}
edje_object_signal_emit(wd->resize_obj, emission, source);
EAPI void
elm_layout_signal_callback_add(Evas_Object *obj,
const char *emission, const char *source,
Edje_Signal_Cb func_cb, void *data)
{
edje_obj_signal_callback_add(obj, emission, source, func_cb, data);
}
EOLIAN static void
_elm_layout_signal_callback_add(Eo *obj, Elm_Layout_Smart_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
_elm_layout_edje_object_signal_callback_add(Eo *obj, Elm_Layout_Smart_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data)
{
Edje_Signal_Data *esd;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
esd = ELM_NEW(Edje_Signal_Data);
if (!esd) return;
@ -935,18 +940,23 @@ _elm_layout_signal_callback_add(Eo *obj, Elm_Layout_Smart_Data *sd, const char *
sd->edje_signals = eina_list_append(sd->edje_signals, esd);
edje_object_signal_callback_add
(wd->resize_obj, emission, source,
_edje_signal_callback, esd);
(eo_super(obj, MY_CLASS), emission, source, _edje_signal_callback, esd);
}
EOLIAN static void*
_elm_layout_signal_callback_del(Eo *obj, Elm_Layout_Smart_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb)
EAPI void *
elm_layout_signal_callback_del(Evas_Object *obj,
const char *emission, const char *source,
Edje_Signal_Cb func_cb)
{
Edje_Signal_Data *esd = NULL;
void *data = NULL;
Eina_List *l;
return edje_obj_signal_callback_del(obj, emission, source, func_cb, NULL);
}
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
EOLIAN static void *
_elm_layout_edje_object_signal_callback_del(Eo *obj, Elm_Layout_Smart_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb, void *data EINA_UNUSED)
{
Edje_Signal_Data *esd;
Eina_List *l;
void *data_ptr;
EINA_LIST_FOREACH(sd->edje_signals, l, esd)
{
@ -956,16 +966,13 @@ _elm_layout_signal_callback_del(Eo *obj, Elm_Layout_Smart_Data *sd, const char *
sd->edje_signals = eina_list_remove_list(sd->edje_signals, l);
eina_stringshare_del(esd->emission);
eina_stringshare_del(esd->source);
data = esd->data;
edje_object_signal_callback_del_full
(wd->resize_obj, emission, source,
_edje_signal_callback, esd);
data_ptr = esd->data;
edje_obj_signal_callback_del
(obj, emission, source, _edje_signal_callback, esd);
free(esd);
return data; /* stop at 1st match */
return data_ptr; /* stop at 1st match */
}
}
@ -1647,12 +1654,10 @@ _elm_layout_edje_get(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED)
return wd->resize_obj;
}
EOLIAN static const char*
_elm_layout_data_get(const Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED, const char *key)
EAPI const char *
elm_layout_data_get(const Evas_Object *obj, const char *key)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
return edje_object_data_get(wd->resize_obj, key);
return edje_obj_data_get(obj, key);
}
/* layout's sizing evaluation is deferred. evaluation requests are
@ -1678,30 +1683,36 @@ _elm_layout_sizing_restricted_eval(Eo *obj, Elm_Layout_Smart_Data *sd, Eina_Bool
evas_object_smart_changed(obj);
}
EOLIAN static int
_elm_layout_freeze(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED)
EAPI int
elm_layout_freeze(Evas_Object *obj)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, 1);
ELM_LAYOUT_DATA_GET(obj, sd);
return edje_obj_freeze(obj);
}
EOLIAN static int
_elm_layout_edje_object_freeze(Eo *obj, Elm_Layout_Smart_Data *sd)
{
if ((sd->frozen)++ != 0) return sd->frozen;
edje_object_freeze(wd->resize_obj);
edje_obj_freeze(eo_super(obj, MY_CLASS));
return 1;
}
EOLIAN static int
_elm_layout_thaw(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED)
EAPI int
elm_layout_thaw(Evas_Object *obj)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, 0);
ELM_LAYOUT_DATA_GET(obj, sd);
return edje_obj_thaw(obj);
}
EOLIAN static int
_elm_layout_edje_object_thaw(Eo *obj, Elm_Layout_Smart_Data *sd)
{
if (--(sd->frozen) != 0) return sd->frozen;
edje_object_thaw(wd->resize_obj);
edje_obj_thaw(eo_super(obj, MY_CLASS));
elm_obj_layout_sizing_eval(obj);
_elm_layout_sizing_eval(obj, sd);
return 0;
}

View File

@ -17,7 +17,7 @@ struct Elm.Layout_Part_Alias_Description
real_part: string; [[Target part name for the alias set on Elm.Layout_Part_Proxies_Description::real_part. An example of usage would be "default" on that field, with "elm.content.swallow" on this one]]
}
class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File)
class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File, Edje.Object)
{
legacy_prefix: elm_layout;
eo_prefix: elm_obj_layout;
@ -123,16 +123,6 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File)
@in part_name: string; [[A part from loaded edje group.]]
}
}
freeze {
[[Freezes the Elementary layout object.
This function puts all changes on hold. Successive freezes will
nest, requiring an equal number of thaws.
See also @.thaw.
]]
return: int; [[The frozen state or 0 on error.]]
}
theme_enable {
legacy: null;
return: bool;
@ -206,23 +196,6 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File)
text: string @nullable; [[The text to set.]]
}
}
signal_callback_add {
[[Add a callback for a (Edje) signal emitted by a layout widget's
underlying Edje object.
This function connects a callback function to a signal emitted by
the underlying Edje object of $obj. Globs are accepted in either
the emission or source strings.
]]
params {
@in emission: string; [[The signal's name string.]]
@in source: string; [[The signal's source string.]]
@in func: Edje.Signal_Cb; [[The callback function to be executed
when the signal is emitted.]]
@in data: void_ptr @optional; [[A pointer to data to pass in to the
callback function.]]
}
}
part_cursor_set {
[[Sets a specific cursor for an edje part.]]
return: bool; [[$true on success or $false on failure, that may be
@ -243,78 +216,6 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File)
legacy: null;
return: bool;
}
data_get @const {
[[Get the edje data from the given layout.
This function fetches data specified inside the edje theme of
this layout. This function return NULL if data is not found.
In EDC this comes from a data block within the group block that
$obj was loaded from.
]]
/* FIXME-doc
@code
collections {
group {
name: "a_group";
data {
item: "key1" "value1";
item: "key2" "value2";
}
}
}
@endcode
*/
return: string; [[The edje data string.]]
params {
@in key: string; [[The data key.]]
}
}
signal_callback_del {
[[Remove a signal-triggered callback from a given layout widget.
This function removes the last callback attached to a signal
emitted by the undelying Edje object of $obj, with parameters
$emission, $source and $func matching exactly those passed to a
previous call to @.signal_callback_add. The data pointer that
was passed to this call will be returned.
]]
return: void_ptr; [[The data pointer of the signal callback (passed on
@.signal_callback_add) or $null on errors.]]
params {
@in emission: string; [[The signal's name string.]]
@in source: string; [[The signal's source string.]]
@in func: Edje.Signal_Cb; [[The callback function being executed
when the signal was emitted.]]
}
}
thaw {
[[Thaws the Elementary object.
This function thaws the given Edje object and the Elementary
sizing calc.
Note: If sucessives freezes were done, an equal number of
thaws will be required.
See also @.freeze.
]]
return: int; [[The frozen state or 0 if the object is not frozen or on error.]]
}
signal_emit {
[[Send a (Edje) signal to a given layout widget's underlying Edje
object.
This function sends a signal to the underlying Edje object of
$obj. An Edje program on that Edje object's definition can
respond to a signal by specifying matching 'signal' and
'source' fields.
]]
params {
@in emission: string; [[The signal's name string.]]
@in source: string; [[The signal's source string.]]
}
}
part_cursor_unset {
[[Unsets a cursor previously set with @.part_cursor_set.]]
return: bool;
@ -351,6 +252,10 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File)
Efl.Container.content.get;
Efl.Container.content_unset;
Efl.Part.part;
Edje.Object.freeze;
Edje.Object.thaw;
Edje.Object.signal_callback_add;
Edje.Object.signal_callback_del;
}
events {
theme,changed;

View File

@ -241,4 +241,105 @@ EAPI Evas_Object *elm_layout_table_unpack(Evas_Object *obj, const char *part, Ev
*/
EAPI Eina_Bool elm_layout_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear);
/**
* @brief Get the edje data from the given layout.
*
* This function fetches data specified inside the edje theme of this layout.
* This function return NULL if data is not found.
*
* In EDC this comes from a data block within the group block that @c obj was
* loaded from.
*
* @param[in] key The data key.
*
* @return The edje data string.
*
* @ingroup Elm_Layout
*/
EAPI const char *elm_layout_data_get(const Elm_Layout *obj, const char *key);
/**
* @brief Send a (Edje) signal to a given layout widget's underlying Edje
* object.
*
* This function sends a signal to the underlying Edje object of @c obj. An
* Edje program on that Edje object's definition can respond to a signal by
* specifying matching 'signal' and 'source' fields.
*
* @param[in] emission The signal's name string.
* @param[in] source The signal's source string.
*
* @ingroup Elm_Layout
*/
EAPI void elm_layout_signal_emit(Elm_Layout *obj, const char *emission, const char *source);
/**
* @brief Add a callback for a (Edje) signal emitted by a layout widget's
* underlying Edje object.
*
* This function connects a callback function to a signal emitted by the
* underlying Edje object of @c obj. Globs are accepted in either the emission
* or source strings.
*
* @param[in] emission The signal's name string.
* @param[in] source The signal's source string.
* @param[in] func The callback function to be executed when the signal is
* emitted.
* @param[in] data A pointer to data to pass in to the callback function.
*
* @ingroup Elm_Layout
*/
EAPI void elm_layout_signal_callback_add(Elm_Layout *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data);
/**
* @brief Remove a signal-triggered callback from a given layout widget.
*
* This function removes the last callback attached to a signal emitted by the
* undelying Edje object of @c obj, with parameters @c emission, @c source and
* @c func matching exactly those passed to a previous call to
* @ref elm_layout_signal_callback_add. The data pointer that was passed to
* this call will be returned.
*
* @param[in] emission The signal's name string.
* @param[in] source The signal's source string.
* @param[in] func The callback function being executed when the signal was
* emitted.
*
* @return The data pointer of the signal callback (passed on
* @ref elm_layout_signal_callback_add) or @c null on errors.
*
* @ingroup Elm_Layout
*/
EAPI void *elm_layout_signal_callback_del(Elm_Layout *obj, const char *emission, const char *source, Edje_Signal_Cb func);
/**
* @brief Freezes the Elementary layout object.
*
* This function puts all changes on hold. Successive freezes will nest,
* requiring an equal number of thaws.
*
* See also @ref elm_layout_thaw.
*
* @return The frozen state or 0 on error.
*
* @ingroup Elm_Layout
*/
EAPI int elm_layout_freeze(Elm_Layout *obj);
/**
* @brief Thaws the Elementary object.
*
* This function thaws the given Edje object and the Elementary sizing calc.
*
* @note If sucessives freezes were done, an equal number of thaws will be
* required.
*
* See also @ref elm_layout_freeze.
*
* @return The frozen state or 0 if the object is not frozen or on error.
*
* @ingroup Elm_Layout
*/
EAPI int elm_layout_thaw(Elm_Layout *obj);
#include "elm_layout.eo.legacy.h"

View File

@ -1,4 +1,4 @@
class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action, Edje.Object)
{
legacy_prefix: elm_naviframe;
eo_prefix: elm_obj_naviframe;
@ -145,6 +145,7 @@ class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
Efl.Canvas.Group.group_del;
Efl.Canvas.Group.group_show;
Efl.Canvas.Group.group_add;
Edje.Object.signal_emit;
Elm.Widget.focus_direction;
Elm.Widget.focus_next_manager_is;
Elm.Widget.focus_direction_manager_is;
@ -155,7 +156,6 @@ class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
Elm.Widget.event;
Elm.Layout.text.set;
Elm.Layout.text.get;
Elm.Layout.signal_emit;
Elm.Layout.sizing_eval;
Elm.Interface.Atspi_Widget_Action.elm_actions.get;
Efl.Part.part;

View File

@ -23,7 +23,7 @@ enum Elm.Popup.Orient
}
class Elm.Popup (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
class Elm.Popup (Elm.Layout, Elm.Interface.Atspi_Widget_Action, Edje.Object)
{
legacy_prefix: elm_popup;
eo_prefix: elm_obj_popup;
@ -169,6 +169,7 @@ class Elm.Popup (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
Eo.Base.constructor;
Efl.Canvas.Group.group_del;
Efl.Canvas.Group.group_add;
Edje.Object.signal_emit;
Elm.Widget.focus_direction;
Elm.Widget.focus_next_manager_is;
Elm.Widget.theme_apply;
@ -182,7 +183,6 @@ class Elm.Popup (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
Elm.Layout.text.set;
Elm.Layout.text.get;
Elm.Layout.sizing_eval;
Elm.Layout.signal_emit;
Elm.Interface.Atspi_Widget_Action.elm_actions.get;
Elm.Interface.Atspi_Accessible.state_set.get;
Efl.Part.part;

View File

@ -57,8 +57,39 @@ START_TEST(elm_layout_swallows)
}
END_TEST
START_TEST(elm_layout_edje_attach)
{
char buf[PATH_MAX];
Evas_Object *win, *layout;
const Evas_Object *part;
int r, g, b, a;
elm_init(1, NULL);
win = elm_win_add(NULL, "layout", ELM_WIN_BASIC);
layout = eo_add(ELM_LAYOUT_CLASS, win);
snprintf(buf, sizeof(buf), "%s/objects/test.edj", ELM_TEST_DATA_DIR);
edje_object_file_set(layout, buf, "layout_edje");
evas_object_show(layout);
edje_object_color_class_set(layout, "red", 255, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0);
part = edje_object_part_object_get(layout, "red");
evas_object_color_get(part, &r, &g, &b, &a);
fail_if((r != 255) || (g != 0) || (b != 0) || (a != 255));
edje_object_signal_emit(layout, "change", "test");
edje_object_message_signal_process(layout);
part = edje_object_part_object_get(layout, "blue");
evas_object_color_get(part, &r, &g, &b, &a);
fail_if((r != 0) || (g != 0) || (b != 255) || (a != 255));
elm_shutdown();
}
END_TEST
void elm_test_layout(TCase *tc)
{
tcase_add_test(tc, elm_atspi_role_get);
tcase_add_test(tc, elm_layout_swallows);
tcase_add_test(tc, elm_layout_edje_attach);
}