summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJee-Yong Um <jc9.um@samsung.com>2016-06-27 11:18:02 -0700
committerCedric Bail <cedric@osg.samsung.com>2016-06-27 11:18:05 -0700
commit8a988717e18c4e9e6d4a0752441471a124056878 (patch)
tree30cbcb4db9e113a7b406b3b7cc017345563f63dc
parenta12e69c15367814b815e7e4db8fd0ad0f00cf96c (diff)
downloadefl-8a988717e18c4e9e6d4a0752441471a124056878.tar.gz
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>
-rw-r--r--data/elementary/objects/test.edc18
-rw-r--r--src/lib/elementary/efl_ui_text.c24
-rw-r--r--src/lib/elementary/efl_ui_text.eo9
-rw-r--r--src/lib/elementary/elc_naviframe.c4
-rw-r--r--src/lib/elementary/elc_popup.c4
-rw-r--r--src/lib/elementary/elm_entry.c24
-rw-r--r--src/lib/elementary/elm_entry.eo8
-rw-r--r--src/lib/elementary/elm_layout.c87
-rw-r--r--src/lib/elementary/elm_layout.eo105
-rw-r--r--src/lib/elementary/elm_layout_legacy.h101
-rw-r--r--src/lib/elementary/elm_naviframe.eo4
-rw-r--r--src/lib/elementary/elm_popup.eo4
-rw-r--r--src/tests/elementary/elm_test_layout.c31
13 files changed, 245 insertions, 178 deletions
diff --git a/data/elementary/objects/test.edc b/data/elementary/objects/test.edc
index fa7c835d30..90db73c162 100644
--- a/data/elementary/objects/test.edc
+++ b/data/elementary/objects/test.edc
@@ -816,3 +816,21 @@ 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";
+ }
+ }
+ }
+ }
+}
diff --git a/src/lib/elementary/efl_ui_text.c b/src/lib/elementary/efl_ui_text.c
index 8b93a18630..3d62548b39 100644
--- a/src/lib/elementary/efl_ui_text.c
+++ b/src/lib/elementary/efl_ui_text.c
@@ -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
diff --git a/src/lib/elementary/efl_ui_text.eo b/src/lib/elementary/efl_ui_text.eo
index 58260570e2..dea33b5d75 100644
--- a/src/lib/elementary/efl_ui_text.eo
+++ b/src/lib/elementary/efl_ui_text.eo
@@ -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;
diff --git a/src/lib/elementary/elc_naviframe.c b/src/lib/elementary/elc_naviframe.c
index dc867a7767..4809779a93 100644
--- a/src/lib/elementary/elc_naviframe.c
+++ b/src/lib/elementary/elc_naviframe.c
@@ -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
diff --git a/src/lib/elementary/elc_popup.c b/src/lib/elementary/elc_popup.c
index f5dfb03f1c..5ec3ca5388 100644
--- a/src/lib/elementary/elc_popup.c
+++ b/src/lib/elementary/elc_popup.c
@@ -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
diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index 28655eafa6..16b1c43f43 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -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
diff --git a/src/lib/elementary/elm_entry.eo b/src/lib/elementary/elm_entry.eo
index 8fdba32d90..9e362ba984 100644
--- a/src/lib/elementary/elm_entry.eo
+++ b/src/lib/elementary/elm_entry.eo
@@ -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;
diff --git a/src/lib/elementary/elm_layout.c b/src/lib/elementary/elm_layout.c
index ef601fb577..aabbb56c5e 100644
--- a/src/lib/elementary/elm_layout.c
+++ b/src/lib/elementary/elm_layout.c
@@ -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;
}
diff --git a/src/lib/elementary/elm_layout.eo b/src/lib/elementary/elm_layout.eo
index 92b4fb9f8a..40c6401953 100644
--- a/src/lib/elementary/elm_layout.eo
+++ b/src/lib/elementary/elm_layout.eo
@@ -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;
diff --git a/src/lib/elementary/elm_layout_legacy.h b/src/lib/elementary/elm_layout_legacy.h
index 77bf7cc6e5..0a77d00836 100644
--- a/src/lib/elementary/elm_layout_legacy.h
+++ b/src/lib/elementary/elm_layout_legacy.h
@@ -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"
diff --git a/src/lib/elementary/elm_naviframe.eo b/src/lib/elementary/elm_naviframe.eo
index 83c1f2d009..1ce0c01f3a 100644
--- a/src/lib/elementary/elm_naviframe.eo
+++ b/src/lib/elementary/elm_naviframe.eo
@@ -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;
diff --git a/src/lib/elementary/elm_popup.eo b/src/lib/elementary/elm_popup.eo
index 90745ca7b3..93feda01d3 100644
--- a/src/lib/elementary/elm_popup.eo
+++ b/src/lib/elementary/elm_popup.eo
@@ -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;
diff --git a/src/tests/elementary/elm_test_layout.c b/src/tests/elementary/elm_test_layout.c
index f4f9b0d7fb..6fcb5b43f6 100644
--- a/src/tests/elementary/elm_test_layout.c
+++ b/src/tests/elementary/elm_test_layout.c
@@ -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);
}