Revert "elementary/layout: attach edje object API with eo compositing"

This reverts commit 8a988717e1.

It seems we can't actually inherit from class more than once and neither eo
nor eolian will complain about it. You will just get random weird behavior.
This patch should come back once we have made an interface of edje.
This commit is contained in:
Cedric Bail 2016-08-05 10:31:49 -07:00
parent a3ad7553c5
commit a7bb1662e2
11 changed files with 174 additions and 126 deletions

View File

@ -2630,7 +2630,7 @@ _text_append_idler(void *data)
}
EOLIAN static void
_efl_ui_text_edje_object_signal_emit(Eo *obj EINA_UNUSED, Efl_Ui_Text_Data *sd, const char *emission, const char *source)
_efl_ui_text_elm_layout_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);
@ -2644,7 +2644,7 @@ _efl_ui_text_edje_object_signal_emit(Eo *obj EINA_UNUSED, Efl_Ui_Text_Data *sd,
}
EOLIAN static void
_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)
_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)
{
Evas_Object *ro;
@ -2654,25 +2654,25 @@ _efl_ui_text_edje_object_signal_callback_add(Eo *obj, Efl_Ui_Text_Data *sd, cons
wd->resize_obj = sd->entry_edje;
edje_obj_signal_callback_add
elm_obj_layout_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
edje_obj_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
elm_obj_layout_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
}
wd->resize_obj = ro;
}
EOLIAN static void *
_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)
_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)
{
Evas_Object *ro;
void *data_ptr;
void *data = NULL;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
@ -2680,19 +2680,19 @@ _efl_ui_text_edje_object_signal_callback_del(Eo *obj, Efl_Ui_Text_Data *sd, cons
wd->resize_obj = sd->entry_edje;
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
}
wd->resize_obj = ro;
return data_ptr;
return data;
}
#if 0

View File

@ -4,8 +4,7 @@ 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,
Edje.Object)
Efl.Ui.Selectable, Efl.Ui.Scrollable, Efl.Ui.Text.Interactive)
{
methods {
@property scrollable {
@ -378,9 +377,6 @@ 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;
@ -392,6 +388,9 @@ 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_edje_object_signal_emit(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUSED, const char *emission, const char *source)
_elm_naviframe_elm_layout_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_edje_object_signal_emit(Eo *obj, Elm_Naviframe_Data *sd EINA_UNUS
if (!eo_top_it) return;
ELM_NAVIFRAME_ITEM_DATA_GET(eo_top_it, top_it);
edje_obj_signal_emit(VIEW(top_it), emission, source);
elm_obj_layout_signal_emit(VIEW(top_it), emission, source);
}
/* content/text smart functions proxying things to the top item, which

View File

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

View File

@ -3018,7 +3018,7 @@ _chars_add_till_limit(Evas_Object *obj,
}
EOLIAN static void
_elm_entry_edje_object_signal_emit(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, const char *emission, const char *source)
_elm_entry_elm_layout_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);
@ -3032,7 +3032,7 @@ _elm_entry_edje_object_signal_emit(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, cons
}
EOLIAN static void
_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)
_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)
{
Evas_Object *ro;
@ -3042,25 +3042,25 @@ _elm_entry_edje_object_signal_callback_add(Eo *obj, Elm_Entry_Data *sd, const ch
wd->resize_obj = sd->entry_edje;
edje_obj_signal_callback_add
elm_obj_layout_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
edje_obj_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
elm_obj_layout_signal_callback_add
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
}
wd->resize_obj = ro;
}
EOLIAN static void *
_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)
_elm_entry_elm_layout_signal_callback_del(Eo *obj, Elm_Entry_Data *sd, const char *emission, const char *source, Edje_Signal_Cb func_cb)
{
Evas_Object *ro;
void *data_ptr;
void *data = NULL;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
@ -3068,19 +3068,19 @@ _elm_entry_edje_object_signal_callback_del(Eo *obj, Elm_Entry_Data *sd, const ch
wd->resize_obj = sd->entry_edje;
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
if (sd->scr_edje)
{
wd->resize_obj = sd->scr_edje;
data_ptr = edje_obj_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb, data);
data = elm_obj_layout_signal_callback_del
(eo_super(obj, MY_CLASS), emission, source, func_cb);
}
wd->resize_obj = ro;
return data_ptr;
return data;
}
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, Edje.Object)
Efl.Ui.Selectable, Efl.Ui.Scrollable)
{
legacy_prefix: elm_entry;
eo_prefix: elm_obj_entry;
@ -942,9 +942,6 @@ 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;
@ -956,6 +953,9 @@ 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

@ -772,7 +772,6 @@ _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));
@ -919,22 +918,16 @@ _elm_layout_theme_set(Eo *obj, Elm_Layout_Smart_Data *sd, const char *klass, con
return EINA_FALSE;
}
EAPI void
elm_layout_signal_emit(Evas_Object *obj, const char *emission, const char *source)
EOLIAN static void
_elm_layout_signal_emit(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED, const char *emission, const char *source)
{
edje_obj_signal_emit(obj, emission, source);
}
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
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);
edje_object_signal_emit(wd->resize_obj, emission, source);
}
EOLIAN static void
_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)
_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)
{
Edje_Signal_Data *esd;
@ -951,23 +944,16 @@ _elm_layout_edje_object_signal_callback_add(Eo *obj, Elm_Layout_Smart_Data *sd,
sd->edje_signals = eina_list_append(sd->edje_signals, esd);
edje_object_signal_callback_add
(wd->resize_obj, emission, source, _edje_signal_callback, esd);
(wd->resize_obj, emission, source,
_edje_signal_callback, esd);
}
EAPI void *
elm_layout_signal_callback_del(Evas_Object *obj,
const char *emission, const char *source,
Edje_Signal_Cb func_cb)
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)
{
return edje_obj_signal_callback_del(obj, emission, source, func_cb, 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;
Edje_Signal_Data *esd = NULL;
void *data = NULL;
Eina_List *l;
void *data_ptr;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
@ -979,13 +965,16 @@ _elm_layout_edje_object_signal_callback_del(Eo *obj, Elm_Layout_Smart_Data *sd,
sd->edje_signals = eina_list_remove_list(sd->edje_signals, l);
eina_stringshare_del(esd->emission);
eina_stringshare_del(esd->source);
data_ptr = esd->data;
data = esd->data;
edje_object_signal_callback_del_full
(wd->resize_obj, emission, source,
_edje_signal_callback, esd);
edje_obj_signal_callback_del
(wd->resize_obj, emission, source, _edje_signal_callback, esd);
free(esd);
return data_ptr; /* stop at 1st match */
return data; /* stop at 1st match */
}
}
@ -1667,10 +1656,12 @@ _elm_layout_edje_get(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED)
return wd->resize_obj;
}
EAPI const char *
elm_layout_data_get(const Evas_Object *obj, const char *key)
EOLIAN static const char*
_elm_layout_data_get(const Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED, const char *key)
{
return edje_obj_data_get(obj, key);
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
return edje_object_data_get(wd->resize_obj, key);
}
/* layout's sizing evaluation is deferred. evaluation requests are
@ -1696,36 +1687,30 @@ _elm_layout_sizing_restricted_eval(Eo *obj, Elm_Layout_Smart_Data *sd, Eina_Bool
evas_object_smart_changed(obj);
}
EAPI int
elm_layout_freeze(Evas_Object *obj)
{
return edje_obj_freeze(obj);
}
EOLIAN static int
_elm_layout_edje_object_freeze(Eo *obj, Elm_Layout_Smart_Data *sd)
_elm_layout_freeze(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, 1);
ELM_LAYOUT_DATA_GET(obj, sd);
if ((sd->frozen)++ != 0) return sd->frozen;
edje_obj_freeze(eo_super(obj, MY_CLASS));
edje_object_freeze(wd->resize_obj);
return 1;
}
EAPI int
elm_layout_thaw(Evas_Object *obj)
{
return edje_obj_thaw(obj);
}
EOLIAN static int
_elm_layout_edje_object_thaw(Eo *obj, Elm_Layout_Smart_Data *sd)
_elm_layout_thaw(Eo *obj, Elm_Layout_Smart_Data *_pd EINA_UNUSED)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, 0);
ELM_LAYOUT_DATA_GET(obj, sd);
if (--(sd->frozen) != 0) return sd->frozen;
edje_obj_thaw(eo_super(obj, MY_CLASS));
edje_object_thaw(wd->resize_obj);
_elm_layout_sizing_eval(obj, sd);
elm_obj_layout_sizing_eval(obj);
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, Edje.Object)
class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File)
{
legacy_prefix: elm_layout;
eo_prefix: elm_obj_layout;
@ -123,6 +123,16 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File, Edje.Object)
@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;
@ -196,6 +206,23 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File, Edje.Object)
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
@ -216,6 +243,78 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File, Edje.Object)
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;
@ -252,10 +351,6 @@ class Elm.Layout (Elm.Widget, Efl.Part, Efl.Container, Efl.File, Edje.Object)
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

@ -1,4 +1,4 @@
class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action, Edje.Object)
class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
{
legacy_prefix: elm_naviframe;
eo_prefix: elm_obj_naviframe;
@ -145,7 +145,6 @@ class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action, Edje.Object)
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;
@ -156,6 +155,7 @@ class Elm.Naviframe (Elm.Layout, Elm.Interface.Atspi_Widget_Action, Edje.Object)
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, Edje.Object)
class Elm.Popup (Elm.Layout, Elm.Interface.Atspi_Widget_Action)
{
legacy_prefix: elm_popup;
eo_prefix: elm_obj_popup;
@ -169,7 +169,6 @@ class Elm.Popup (Elm.Layout, Elm.Interface.Atspi_Widget_Action, Edje.Object)
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;
@ -183,6 +182,7 @@ class Elm.Popup (Elm.Layout, Elm.Interface.Atspi_Widget_Action, Edje.Object)
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,39 +57,8 @@ 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);
}