diff --git a/src/bin/elementary/test_ui_spotlight.c b/src/bin/elementary/test_ui_spotlight.c index cdcaf65b1e..c2bc6b436c 100644 --- a/src/bin/elementary/test_ui_spotlight.c +++ b/src/bin/elementary/test_ui_spotlight.c @@ -124,20 +124,20 @@ static void prev_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *spotlight = data; - int active_index = efl_ui_spotlight_active_index_get(spotlight); + int active_index = efl_pack_index_get(spotlight, efl_ui_spotlight_active_element_get(spotlight)); if (active_index - 1 > -1) - efl_ui_spotlight_active_index_set(spotlight, active_index - 1); + efl_ui_spotlight_active_element_set(spotlight, efl_pack_content_get(spotlight, active_index - 1)); } static void next_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *spotlight = data; - int active_index = efl_ui_spotlight_active_index_get(spotlight); + int active_index = efl_pack_index_get(spotlight, efl_ui_spotlight_active_element_get(spotlight)); if (active_index + 1 < efl_content_count(spotlight)) - efl_ui_spotlight_active_index_set(spotlight, active_index + 1); + efl_ui_spotlight_active_element_set(spotlight, efl_pack_content_get(spotlight, active_index + 1)); } static Eina_Value @@ -280,7 +280,7 @@ pack_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Pack_Params *param = data; Eo *spotlight = param->spotlight; - Eo *page = NULL, *curr_page; + Eo *page = NULL; int index, cnt; if ((param->type != UNPACK_AT) && (param->type != CLEAR)) @@ -318,15 +318,11 @@ pack_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) break; case PACK_BEFORE: - index = efl_ui_spotlight_active_index_get(spotlight); - curr_page = efl_pack_content_get(spotlight, index); - efl_pack_before(spotlight, page, curr_page); + efl_pack_before(spotlight, page, efl_ui_spotlight_active_element_get(spotlight)); break; case PACK_AFTER: - index = efl_ui_spotlight_active_index_get(spotlight); - curr_page = efl_pack_content_get(spotlight, index); - efl_pack_after(spotlight, page, curr_page); + efl_pack_after(spotlight, page, efl_ui_spotlight_active_element_get(spotlight)); break; case PACK_AT: @@ -383,8 +379,9 @@ page_set_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Page_Set_Params *psp = data; - efl_ui_spotlight_active_index_set(psp->spotlight, - efl_ui_range_value_get(psp->spinner)); + efl_ui_spotlight_active_element_set(psp->spotlight, + efl_pack_content_get(psp->spotlight, + efl_ui_range_value_get(psp->spinner))); } static void @@ -609,7 +606,7 @@ pack_cb(void *data, num = efl_content_count(spotlight); if (num) efl_ui_range_limits_set(sp1, 0, num); - num = efl_ui_spotlight_active_index_get(spotlight); + num = efl_pack_index_get(spotlight, efl_ui_spotlight_active_element_get(spotlight)); if (num >= 0) efl_ui_range_value_set(sp1, num); @@ -735,7 +732,7 @@ pack_cb(void *data, efl_ui_range_limits_set(sp2, 0, (efl_content_count(spotlight) - 1)); efl_ui_range_value_set(sp2, - efl_ui_spotlight_active_index_get(spotlight)); + efl_pack_index_get(spotlight, efl_ui_spotlight_active_element_get(spotlight))); } else { @@ -801,7 +798,7 @@ active_index_cb(void *data, efl_ui_range_limits_set(sp, 0, (efl_content_count(spotlight) - 1)); efl_ui_range_value_set(sp, - efl_ui_spotlight_active_index_get(spotlight)); + efl_pack_index_get(spotlight, efl_ui_spotlight_active_element_get(spotlight))); } else { diff --git a/src/bin/elementary/test_ui_tab_pager.c b/src/bin/elementary/test_ui_tab_pager.c index 93aaa12948..01ca807a2e 100644 --- a/src/bin/elementary/test_ui_tab_pager.c +++ b/src/bin/elementary/test_ui_tab_pager.c @@ -139,10 +139,10 @@ test_ui_tab_pager(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev { page = tab_page_add(tp); efl_pack_end(tp, page); + if (i == 0) + efl_ui_spotlight_active_element_set(tp, page); } - efl_ui_spotlight_active_index_set(tp, 0); - ad = (App_Data*)calloc(1, sizeof(App_Data)); ad->navi = navi; ad->tab_pager = tp; @@ -175,7 +175,7 @@ static void _tab_set_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Tab_Set_Data *tsd = data; - efl_ui_spotlight_active_index_set(tsd->tab_pager, elm_spinner_value_get(tsd->spinner)); + efl_ui_spotlight_active_element_set(tsd->tab_pager, efl_pack_content_get(tsd->tab_pager, elm_spinner_value_get(tsd->spinner))); } static void @@ -206,7 +206,7 @@ _current_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) sp = efl_add(EFL_UI_SPIN_BUTTON_CLASS, box, efl_ui_range_limits_set(efl_added, 0, efl_content_count(tab_pager) - 1), - efl_ui_range_value_set(efl_added, efl_ui_spotlight_active_index_get(tab_pager)), + efl_ui_range_value_set(efl_added, efl_content_count(tab_pager)), efl_pack_end(box, efl_added)); tsd->tab_pager = tab_pager; @@ -246,10 +246,8 @@ _pack_before_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *tab_pager = data; Eo *tab_page, *cur_tab_page; - int index; - index = efl_ui_spotlight_active_index_get(tab_pager); - cur_tab_page = efl_pack_content_get(tab_pager, index); + cur_tab_page = efl_ui_spotlight_active_element_get(tab_pager); tab_page = tab_page_add(tab_pager); @@ -261,10 +259,8 @@ _pack_after_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *tab_pager = data; Eo *tab_page, *cur_tab_page; - int index; - index = efl_ui_spotlight_active_index_get(tab_pager); - cur_tab_page = efl_pack_content_get(tab_pager, index); + cur_tab_page = efl_ui_spotlight_active_element_get(tab_pager); tab_page = tab_page_add(tab_pager); @@ -340,7 +336,7 @@ _pack_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) sp = efl_add(EFL_UI_SPIN_BUTTON_CLASS, in_box, efl_ui_range_limits_set(efl_added, 0, efl_content_count(tab_pager) - 1), - efl_ui_range_value_set(efl_added, efl_ui_spotlight_active_index_get(tab_pager)), + efl_ui_range_value_set(efl_added, efl_content_count(tab_pager)), efl_pack_end(in_box, efl_added)); tsd->tab_pager = tab_pager; @@ -365,8 +361,9 @@ static void _unpack_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) { Eo *tab_pager = data; - int index = efl_ui_spotlight_active_index_get(tab_pager); - Eo *tab_page = efl_pack_content_get(tab_pager, index); + + Eo *tab_page = efl_ui_spotlight_active_element_get(tab_pager); + efl_pack_unpack(tab_pager, tab_page); efl_del(tab_page); } @@ -440,7 +437,7 @@ _unpack_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) sp = efl_add(EFL_UI_SPIN_BUTTON_CLASS, in_box, efl_ui_range_limits_set(efl_added, 0, efl_content_count(tab_pager) - 1), - efl_ui_range_value_set(efl_added, efl_ui_spotlight_active_index_get(tab_pager)), + efl_ui_range_value_set(efl_added, efl_content_count(tab_pager)), efl_pack_end(in_box, efl_added)); tsd->tab_pager = tab_pager; @@ -463,9 +460,8 @@ _change_btn_cb(void *data, const Efl_Event *ev EINA_UNUSED) Eo *tab_page, *content; char *label = NULL; char *icon = NULL; - int cur; - cur = efl_ui_spotlight_active_index_get(tcd->tab_pager); - tab_page = efl_pack_content_get(tcd->tab_pager, cur); + + tab_page = efl_ui_spotlight_active_element_get(tcd->tab_pager); if (efl_ui_selectable_selected_get(tcd->label_check)) { diff --git a/src/bin/eolian/types.c b/src/bin/eolian/types.c index e79b73b20c..7fe1a85b44 100644 --- a/src/bin/eolian/types.c +++ b/src/bin/eolian/types.c @@ -234,7 +234,7 @@ _err_generate(const Eolian_State *state, const Eolian_Error *err) if (!buf) buf = eina_strbuf_new(); else eina_strbuf_append_char(buf, '\n'); - eina_strbuf_prepend_printf(buf, "EWAPI extern Eina_Error %s_get(void);\n\n", fn); + eina_strbuf_prepend_printf(buf, "EWAPI Eina_Error %s_get(void);\n\n", fn); char *ufn = strdup(fn); eina_str_toupper(&ufn); @@ -332,11 +332,13 @@ _source_gen_error(Eina_Strbuf *buf, const Eolian_Error *err) *p = '_'; eina_str_tolower(&fn); - eina_strbuf_append_printf(buf, "EWAPI %s_get(void)\n{\n", fn); + eina_strbuf_append_printf(buf, "EWAPI Eina_Error %s_get(void)\n{\n", fn); free(fn); const char *msg = eolian_error_message_get(err); - eina_strbuf_append(buf, " static Eina_Error err = eina_error_msg_static_register(\""); + eina_strbuf_append(buf, " static Eina_Error err = EINA_ERROR_NO_ERROR;\n"); + eina_strbuf_append(buf, " if (err == EINA_ERROR_NO_ERROR)\n"); + eina_strbuf_append(buf, " err = eina_error_msg_static_register(\""); for (const char *p = msg; *p; ++p) switch (*p) { diff --git a/src/bin/eolian_mono/eolian/mono/klass.hh b/src/bin/eolian_mono/eolian/mono/klass.hh index f1b89abc71..c10bfb3fda 100644 --- a/src/bin/eolian_mono/eolian/mono/klass.hh +++ b/src/bin/eolian_mono/eolian/mono/klass.hh @@ -398,7 +398,7 @@ struct klass context); auto native_inherit_name = name_helpers::klass_native_inherit_name(cls); auto inherit_name = name_helpers::klass_inherit_name(cls); - auto implementable_methods = helpers::get_all_implementable_methods(cls, context); + auto implementable_methods = cls.functions; bool root = !helpers::has_regular_ancestor(cls); auto const& indent = current_indentation(inative_cxt); @@ -430,7 +430,7 @@ struct klass if(!as_generator( indent << scope_tab << "/// Gets the list of Eo operations to override.\n" << indent << scope_tab << "/// The list of Eo operations to be overload.\n" - << indent << scope_tab << "public override System.Collections.Generic.List GetEoOps(System.Type type)\n" + << indent << scope_tab << "public override System.Collections.Generic.List GetEoOps(System.Type type, bool includeInherited)\n" << indent << scope_tab << "{\n" << indent << scope_tab << scope_tab << "var descs = new System.Collections.Generic.List();\n" ) @@ -452,8 +452,22 @@ struct klass ).generate(sink, attributes::unused, inative_cxt)) return false; + if(!as_generator( + indent << scope_tab << scope_tab << "if (includeInherited)\n" + << indent << scope_tab(2) << "{\n" + << indent << scope_tab(3) << "var all_interfaces = type.GetInterfaces();\n" + << indent << scope_tab(3) << "foreach (var iface in all_interfaces)\n" + << indent << scope_tab(3) << "{\n" + << indent << scope_tab(4) << "var moredescs = ((Efl.Eo.NativeClass)iface.GetCustomAttributes(false)?.FirstOrDefault(attr => attr is Efl.Eo.NativeClass))?.GetEoOps(type, false);\n" + << indent << scope_tab(4) << "if (moredescs != null)\n" + << indent << scope_tab(5) << "descs.AddRange(moredescs);\n" + << indent << scope_tab(3) << "}\n" + << indent << scope_tab(2) << "}\n" + ).generate(sink, attributes::unused, inative_cxt)) + return false; + if (!root || context_find_tag(context).current_wrapper_kind != class_context::concrete) - if(!as_generator(indent << scope_tab << scope_tab << "descs.AddRange(base.GetEoOps(type));\n").generate(sink, attributes::unused, inative_cxt)) + if(!as_generator(indent << scope_tab << scope_tab << "descs.AddRange(base.GetEoOps(type, false));\n").generate(sink, attributes::unused, inative_cxt)) return false; if(!as_generator( diff --git a/src/bin/eolian_mono/eolian/mono/name_helpers.hh b/src/bin/eolian_mono/eolian/mono/name_helpers.hh index d6064b2d56..a1fd8cd6d0 100644 --- a/src/bin/eolian_mono/eolian/mono/name_helpers.hh +++ b/src/bin/eolian_mono/eolian/mono/name_helpers.hh @@ -293,11 +293,9 @@ struct klass_interface_name_generator template std::string operator()(T const& klass) const { - std::string name = utils::remove_all(klass.eolian_name, '_'); - if (klass.type == attributes::class_type::mixin || klass.type == attributes::class_type::interface_) - return "I" + name; - else - return name; + return ((klass.type == attributes::class_type::mixin + || klass.type == attributes::class_type::interface_) ? "I" : "") + + utils::remove_all(klass.eolian_name, '_'); } template @@ -325,10 +323,9 @@ struct klass_full_interface_name_generator template inline std::string klass_concrete_name(T const& klass) { - if (klass.type == attributes::class_type::mixin || klass.type == attributes::class_type::interface_) - return klass_interface_name(klass) + "Concrete"; - - return utils::remove_all(klass.eolian_name, '_'); + return utils::remove_all(klass.eolian_name, '_') + ((klass.type == attributes::class_type::mixin + || klass.type == attributes::class_type::interface_) + ? "Concrete" : ""); } template @@ -420,14 +417,12 @@ inline std::string klass_get_full_name(T const& clsname) // Events inline std::string managed_event_name(std::string const& name) { - return utils::to_pascal_case(utils::split(name, "_,"), "") + "Evt"; + return utils::to_pascal_case(utils::split(name, "_,"), "") + "Event"; } inline std::string managed_event_args_short_name(attributes::event_def const& evt) { - std::string ret; - ret = klass_concrete_or_interface_name(evt.klass); - return ret + name_helpers::managed_event_name(evt.name) + "_Args"; + return utils::remove_all(evt.klass.eolian_name, '_') + name_helpers::managed_event_name(evt.name) + "Args"; } inline std::string managed_event_args_name(attributes::event_def evt) diff --git a/src/bindings/mono/efl_mono/GenericModel.cs b/src/bindings/mono/efl_mono/GenericModel.cs index 1bfa91e53d..25d9c79955 100644 --- a/src/bindings/mono/efl_mono/GenericModel.cs +++ b/src/bindings/mono/efl_mono/GenericModel.cs @@ -125,46 +125,46 @@ public class GenericModel : Efl.Object, Efl.IModel, IDisposable } /// Event triggered when properties on the wrapped model changes. - public event EventHandler PropertiesChangedEvt + public event EventHandler PropertiesChangedEvent { add { - model.PropertiesChangedEvt += value; + model.PropertiesChangedEvent += value; } remove { - model.PropertiesChangedEvt -= value; + model.PropertiesChangedEvent -= value; } } /// Event triggered when a child is added from the wrapped model. - public event EventHandler ChildAddedEvt + public event EventHandler ChildAddedEvent { add { - model.ChildAddedEvt += value; + model.ChildAddedEvent += value; } remove { - model.ChildAddedEvt -= value; + model.ChildAddedEvent -= value; } } /// Event triggered when a child is removed from the wrapped model. - public event EventHandler ChildRemovedEvt + public event EventHandler ChildRemovedEvent { add { - model.ChildRemovedEvt += value; + model.ChildRemovedEvent += value; } remove { - model.ChildRemovedEvt -= value; + model.ChildRemovedEvent -= value; } } /// Event triggered when the number of children changes. - public event EventHandler ChildrenCountChangedEvt + public event EventHandler ChildrenCountChangedEvent { add { - model.ChildrenCountChangedEvt += value; + model.ChildrenCountChangedEvent += value; } remove { - model.ChildrenCountChangedEvt -= value; + model.ChildrenCountChangedEvent -= value; } } } diff --git a/src/bindings/mono/efl_mono/efl_csharp_application.cs b/src/bindings/mono/efl_mono/efl_csharp_application.cs index 4e3a2522cc..93df6e7a3b 100644 --- a/src/bindings/mono/efl_mono/efl_csharp_application.cs +++ b/src/bindings/mono/efl_mono/efl_csharp_application.cs @@ -135,7 +135,7 @@ public abstract class Application #if EFL_BETA app.SetCommandArray(command_line); #endif - app.ArgumentsEvt += (object sender, LoopArgumentsEvt_Args evt) => + app.ArgumentsEvent += (object sender, LoopArgumentsEventArgs evt) => { if (evt.arg.Initialization) { @@ -152,15 +152,15 @@ public abstract class Application OnArguments(evt.arg); }; - app.PauseEvt += (object sender, EventArgs e) => + app.PauseEvent += (object sender, EventArgs e) => { OnPause(); }; - app.ResumeEvt += (object sender, EventArgs e) => + app.ResumeEvent += (object sender, EventArgs e) => { OnResume(); }; - app.TerminateEvt += (object sender, EventArgs e) => + app.TerminateEvent += (object sender, EventArgs e) => { OnTerminate(); }; diff --git a/src/bindings/mono/eo_mono/EoWrapper.cs b/src/bindings/mono/eo_mono/EoWrapper.cs index 688de85cae..1805071175 100644 --- a/src/bindings/mono/eo_mono/EoWrapper.cs +++ b/src/bindings/mono/eo_mono/EoWrapper.cs @@ -357,7 +357,7 @@ public abstract class EoWrapper : IWrapper, IDisposable /// Gets the list of Eo operations to override. /// The list of Eo operations to be overload. - public override System.Collections.Generic.List GetEoOps(Type type) + public override System.Collections.Generic.List GetEoOps(Type type, bool includeInherited) { var descs = new System.Collections.Generic.List(); diff --git a/src/bindings/mono/eo_mono/iwrapper.cs b/src/bindings/mono/eo_mono/iwrapper.cs index 6b7719e61f..a03e48a326 100644 --- a/src/bindings/mono/eo_mono/iwrapper.cs +++ b/src/bindings/mono/eo_mono/iwrapper.cs @@ -351,26 +351,8 @@ public class Globals if (nativeClass != null) { Eina.Log.Debug("nativeClass != null"); - var descs = nativeClass.GetEoOps(type); + var descs = nativeClass.GetEoOps(type, true); var count = descs.Count; - - var all_interfaces = type.GetInterfaces(); - var base_interfaces = type.BaseType.GetInterfaces(); - foreach (var iface in all_interfaces) - { - if (!System.Array.Exists(base_interfaces, element => element == iface)) - { - var nc = GetNativeClass(iface); - if (nc != null) - { - var moredescs = nc.GetEoOps(type); - Eina.Log.Debug($"adding {moredescs.Count} more descs to registration"); - descs.AddRange(moredescs); - count = descs.Count; - } - } - } - IntPtr descs_ptr = IntPtr.Zero; if (count > 0) @@ -753,7 +735,7 @@ public static class Config public abstract class NativeClass : System.Attribute { public abstract IntPtr GetEflClass(); - public abstract System.Collections.Generic.List GetEoOps(System.Type type); + public abstract System.Collections.Generic.List GetEoOps(System.Type type, bool includeInherited); } /// Attribute for private native classes. @@ -766,7 +748,7 @@ public class PrivateNativeClass : NativeClass return IntPtr.Zero; } - public override System.Collections.Generic.List GetEoOps(System.Type type) + public override System.Collections.Generic.List GetEoOps(System.Type type, bool includeInherited) { return null; } diff --git a/src/examples/elementary/efl_ui_slideshow_example.c b/src/examples/elementary/efl_ui_slideshow_example.c index 55c1b66fab..6292f4390f 100644 --- a/src/examples/elementary/efl_ui_slideshow_example.c +++ b/src/examples/elementary/efl_ui_slideshow_example.c @@ -25,9 +25,9 @@ _show_next(void *data EINA_UNUSED, const Efl_Event *ev EINA_UNUSED) efl_del(show_timer); show_timer = NULL; - int current_index = efl_ui_spotlight_active_index_get(container); + int current_index = efl_pack_index_get(container, efl_ui_spotlight_active_element_get(container)); int new_index = (current_index + 1) % efl_content_count(container); - efl_ui_spotlight_active_index_set(container, new_index); + efl_ui_spotlight_active_element_set(container, efl_pack_content_get(container, new_index)); } static void diff --git a/src/examples/elementary/efl_ui_unit_converter.cs b/src/examples/elementary/efl_ui_unit_converter.cs index 3460af3f5f..93a5f89949 100644 --- a/src/examples/elementary/efl_ui_unit_converter.cs +++ b/src/examples/elementary/efl_ui_unit_converter.cs @@ -23,7 +23,7 @@ public class Example popup.SetVisible(true); popup.SetButton(Efl.Ui.AlertPopupButton.Positive, "Ok", null); popup.SetSize(new Eina.Size2D(150, 30)); - popup.ButtonClickedEvt += (object sender, Efl.Ui.AlertPopupButtonClickedEvt_Args e) => { + popup.ButtonClickedEvent += (object sender, Efl.Ui.AlertPopupButtonClickedEventArgs e) => { popup.SetParent(null); popup.Invalidate(); }; @@ -99,7 +99,7 @@ public class Example kms_box.DoPack(kms_input); kms_box.DoPack(kms_button); - ((Efl.Ui.Clickable)kms_button).ClickedEvt += (object sender, EventArgs e) => { + ((Efl.Ui.Clickable)kms_button).ClickedEvent += (object sender, EventArgs e) => { try { string text = kms_input.GetText(); @@ -115,7 +115,7 @@ public class Example } }; - ((Efl.Ui.Clickable)miles_button).ClickedEvt += (object sender, EventArgs e) => { + ((Efl.Ui.Clickable)miles_button).ClickedEvent += (object sender, EventArgs e) => { try { string text = miles_input.GetText(); diff --git a/src/lib/ecore/efl_container_model.eo b/src/lib/ecore/efl_container_model.eo index 3b3ab00ad1..1acdd8543f 100644 --- a/src/lib/ecore/efl_container_model.eo +++ b/src/lib/ecore/efl_container_model.eo @@ -33,7 +33,7 @@ class @beta Efl.Container_Model extends Efl.Composite_Model params { name: string; [[Property name]] @in type: ptr(const(Eina.Value_Type)); [[Property type]] - values: iterator @owned; [[Values to be added]] + values: iterator @move; [[Values to be added]] } return: bool; [[$true on success, $false otherwise]] } diff --git a/src/lib/ecore/efl_core_command_line.eo b/src/lib/ecore/efl_core_command_line.eo index fff7157d12..6a7511d9ad 100644 --- a/src/lib/ecore/efl_core_command_line.eo +++ b/src/lib/ecore/efl_core_command_line.eo @@ -61,7 +61,7 @@ mixin @beta Efl.Core.Command_Line { return : bool; [[On success $true, $false otherwise]] } values { - array : array @owned; [[An array where every array field is an argument]] + array : array @move; [[An array where every array field is an argument]] } } @property command_string { diff --git a/src/lib/ecore/efl_io_copier.eo b/src/lib/ecore/efl_io_copier.eo index 8b7301b14b..2e9506d394 100644 --- a/src/lib/ecore/efl_io_copier.eo +++ b/src/lib/ecore/efl_io_copier.eo @@ -313,7 +313,7 @@ class @beta Efl.Io.Copier extends Efl.Loop_Consumer implements Efl.Io.Closer { which case you should wait for "done", "data" or "line" events and then call it to retrieve and own the data. ]] - return: ptr(Eina.Binbuf) @owned @no_unused; [[Binbuf]] + return: ptr(Eina.Binbuf) @move @no_unused; [[Binbuf]] } @property pending_size { diff --git a/src/lib/ecore/efl_loop.eo b/src/lib/ecore/efl_loop.eo index 20f0389f57..ea263fb738 100644 --- a/src/lib/ecore/efl_loop.eo +++ b/src/lib/ecore/efl_loop.eo @@ -53,7 +53,7 @@ abstract Efl.Loop extends Efl.Task This has higher priority, for low priority use @.idle ]] - return: future @owned; [[The future handle.]] + return: future @move; [[The future handle.]] } @property throttle { [[Slow down the loop execution by forcing sleep for a small @@ -95,7 +95,7 @@ abstract Efl.Loop extends Efl.Task This is a low priority version of @.job ]] - return: future @owned; [[The future handle.]] + return: future @move; [[The future handle.]] } timeout { [[A future promise that will be resolved from a clean main @@ -103,7 +103,7 @@ abstract Efl.Loop extends Efl.Task params { @in time: double; [[The time from now in second that the main loop will wait before triggering it.]] } - return: future @owned; [[The future handle.]] + return: future @move; [[The future handle.]] } } events { diff --git a/src/lib/ecore/efl_loop_consumer.eo b/src/lib/ecore/efl_loop_consumer.eo index c391d29f03..56045787ee 100644 --- a/src/lib/ecore/efl_loop_consumer.eo +++ b/src/lib/ecore/efl_loop_consumer.eo @@ -52,7 +52,7 @@ abstract Efl.Loop_Consumer extends Efl.Object [[Create a new promise with the scheduler coming from the loop provided by this object. Note: You should not use eina_promise_data_set as this function rely on controlling the promise data.]] - return: ptr(Eina.Promise) @owned; [[The new promise.]] + return: ptr(Eina.Promise) @move; [[The new promise.]] } } implements { diff --git a/src/lib/ecore/efl_task.eo b/src/lib/ecore/efl_task.eo index 9fe006a34c..baf8ce80b5 100644 --- a/src/lib/ecore/efl_task.eo +++ b/src/lib/ecore/efl_task.eo @@ -54,7 +54,7 @@ abstract Efl.Task extends Efl.Loop_Consumer } run @pure_virtual { [[Actually run the task.]] - return: future @owned; [[A future triggered when task exits and is passed int exit code.]] + return: future @move; [[A future triggered when task exits and is passed int exit code.]] } end @pure_virtual { [[Request the task end (may send a signal or interrupt diff --git a/src/lib/ecore_con/efl_net_control_access_point.eo b/src/lib/ecore_con/efl_net_control_access_point.eo index 3acf2a2f17..1093f0f5ed 100644 --- a/src/lib/ecore_con/efl_net_control_access_point.eo +++ b/src/lib/ecore_con/efl_net_control_access_point.eo @@ -94,7 +94,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { EINPROGRESS (the connection was already ongoing) and EALREADY (the connection was already established). ]] - return: future @owned; [[Future for asynchronous connect]] + return: future @move; [[Future for asynchronous connect]] } disconnect { @@ -252,7 +252,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { ]] get { } values { - name_servers: iterator @owned; [[Iterator to DNS server]] + name_servers: iterator @move; [[Iterator to DNS server]] } } @@ -266,7 +266,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { ]] get { } values { - time_servers: iterator @owned; [[Iterator to time server]] + time_servers: iterator @move; [[Iterator to time server]] } } @@ -280,7 +280,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { ]] get { } values { - domains: iterator @owned; [[Iterator to search domains]] + domains: iterator @move; [[Iterator to search domains]] } } @@ -331,8 +331,8 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { values { method: Efl.Net.Control.Access_Point_Proxy_Method; [[Proxy method]] url: string; [[If @Efl.Net.Control.Access_Point_Proxy_Method.auto, then states the URL to use for proxy auto-configuration]] - servers: iterator @owned; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the URI with proxy servers to use, like "http://proxy.domain.com:911"]] - excludes: iterator @owned; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the hosts or patterns to exclude from proxy access, such as "localhost", ".domain.com", or "10.0.0.0..."]] + servers: iterator @move; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the URI with proxy servers to use, like "http://proxy.domain.com:911"]] + excludes: iterator @move; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the hosts or patterns to exclude from proxy access, such as "localhost", ".domain.com", or "10.0.0.0..."]] } } @@ -348,7 +348,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { set { } get { } values { - name_servers: iterator @owned; [[Iterator to user DNS server]] + name_servers: iterator @move; [[Iterator to user DNS server]] } } @@ -364,7 +364,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { set { } get { } values { - time_servers: iterator @owned; [[Iterator to user time server]] + time_servers: iterator @move; [[Iterator to user time server]] } } @@ -380,7 +380,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { set { } get { } values { - domains: iterator @owned; [[Iterator to user search domains]] + domains: iterator @move; [[Iterator to user search domains]] } } @@ -437,8 +437,8 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer { values { method: Efl.Net.Control.Access_Point_Proxy_Method; [[Proxy method]] url: string; [[If @Efl.Net.Control.Access_Point_Proxy_Method.auto, then states the URL to use for proxy auto-configuration]] - servers: iterator @owned; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the URI with proxy servers to use, like "http://proxy.domain.com:911"]] - excludes: iterator @owned; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the hosts or patterns to exclude from proxy access, such as "localhost", ".domain.com", or "10.0.0.0..."]] + servers: iterator @move; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the URI with proxy servers to use, like "http://proxy.domain.com:911"]] + excludes: iterator @move; [[If @Efl.Net.Control.Access_Point_Proxy_Method.manual, then states the hosts or patterns to exclude from proxy access, such as "localhost", ".domain.com", or "10.0.0.0..."]] } } } diff --git a/src/lib/ecore_con/efl_net_control_manager.eo b/src/lib/ecore_con/efl_net_control_manager.eo index 137d7feaaa..4d7d232c7e 100644 --- a/src/lib/ecore_con/efl_net_control_manager.eo +++ b/src/lib/ecore_con/efl_net_control_manager.eo @@ -148,7 +148,7 @@ class @beta Efl.Net.Control.Manager extends Efl.Loop_Consumer { ]] get { } values { - access_points: iterator @owned; [[Iterator of current access points]] + access_points: iterator @move; [[Iterator of current access points]] } } @@ -162,7 +162,7 @@ class @beta Efl.Net.Control.Manager extends Efl.Loop_Consumer { ]] get { } values { - technologies: iterator @owned; [[Iterator of current technologies]] + technologies: iterator @move; [[Iterator of current technologies]] } } diff --git a/src/lib/ecore_con/efl_net_control_technology.eo b/src/lib/ecore_con/efl_net_control_technology.eo index 01daedd7d3..b44e988cd5 100644 --- a/src/lib/ecore_con/efl_net_control_technology.eo +++ b/src/lib/ecore_con/efl_net_control_technology.eo @@ -86,7 +86,7 @@ class @beta Efl.Net.Control.Technology extends Efl.Loop_Consumer { state. Otherwise allow the system to perform passive scans in a timely manner. ]] - return: future @owned; [[Future return for finished background scan]] + return: future @move; [[Future return for finished background scan]] } } diff --git a/src/lib/ecore_con/efl_net_dialer_http.eo b/src/lib/ecore_con/efl_net_dialer_http.eo index a44b50a251..ceca602c26 100644 --- a/src/lib/ecore_con/efl_net_dialer_http.eo +++ b/src/lib/ecore_con/efl_net_dialer_http.eo @@ -187,7 +187,7 @@ class @beta Efl.Net.Dialer_Http extends Efl.Loop_Consumer implements Efl.Net.Dia request_headers_get { [[Returns an iterator to the key-value pairs for request headers]] - return: iterator @owned @no_unused; [[Iterator for request headers]] + return: iterator @move @no_unused; [[Iterator for request headers]] } @property request_content_length { @@ -250,7 +250,7 @@ class @beta Efl.Net.Dialer_Http extends Efl.Loop_Consumer implements Efl.Net.Dia This will be usable after the "headers,done" event is dispatched. ]] - return: iterator @owned @no_unused; [[Iterator for response headers]] + return: iterator @move @no_unused; [[Iterator for response headers]] } response_headers_all_get { @@ -275,7 +275,7 @@ class @beta Efl.Net.Dialer_Http extends Efl.Loop_Consumer implements Efl.Net.Dia This will be usable after the "headers,done" event is dispatched. ]] - return: iterator @owned @no_unused; [[Iterator for all response headers]] + return: iterator @move @no_unused; [[Iterator for all response headers]] } response_headers_clear { @@ -381,7 +381,7 @@ class @beta Efl.Net.Dialer_Http extends Efl.Loop_Consumer implements Efl.Net.Dia params { epochtime: int64; [[UNIX Epoch time - seconds since 1/1/1970]] } - return: mstring @owned @no_unused; [[Newly allocated null-terminated string on success or NULL on errors]] + return: mstring @move @no_unused; [[Newly allocated null-terminated string on success or NULL on errors]] } } diff --git a/src/lib/ecore_con/efl_net_dialer_websocket.eo b/src/lib/ecore_con/efl_net_dialer_websocket.eo index 904eacf283..5224030101 100644 --- a/src/lib/ecore_con/efl_net_dialer_websocket.eo +++ b/src/lib/ecore_con/efl_net_dialer_websocket.eo @@ -144,7 +144,7 @@ class @beta Efl.Net.Dialer_Websocket extends Efl.Loop_Consumer implements Efl.Ne request_protocols_get { [[Returns an iterator to the requested WebSocket protocols]] - return: iterator @owned @no_unused; [[Iterator to protocols]] + return: iterator @move @no_unused; [[Iterator to protocols]] } request_protocols_clear { @@ -153,7 +153,7 @@ class @beta Efl.Net.Dialer_Websocket extends Efl.Loop_Consumer implements Efl.Ne response_protocols_get { [[Returns an iterator to the server-replied (response) WebSocket protocols it supports]] - return: iterator @owned @no_unused; [[Iterator to server protocols]] + return: iterator @move @no_unused; [[Iterator to server protocols]] } @property streaming_mode { @@ -260,7 +260,7 @@ class @beta Efl.Net.Dialer_Websocket extends Efl.Loop_Consumer implements Efl.Ne request_headers_get { [[Returns an iterator to the key-value pairs for request headers]] - return: iterator @owned @no_unused; [[Iterator to key value pairs]] + return: iterator @move @no_unused; [[Iterator to key value pairs]] } @property cookie_jar { diff --git a/src/lib/ecore_con/efl_net_ip_address.eo b/src/lib/ecore_con/efl_net_ip_address.eo index 3d6eaba13b..d1be8b7d5c 100644 --- a/src/lib/ecore_con/efl_net_ip_address.eo +++ b/src/lib/ecore_con/efl_net_ip_address.eo @@ -48,7 +48,7 @@ class @beta Efl.Net.Ip_Address extends Efl.Object { port: uint16; [[Port number in Host/Native endianess]] address: const(Eina.Slice); [[Address bytes. If 4 bytes, AF_INET will be used. If 16 bytes, AF_INET6 will be used. All other sizes will result in failure.]] } - return: Efl.Net.Ip_Address @owned; [[Newly created object or $NULL if parameters were invalid.]] + return: Efl.Net.Ip_Address @move; [[Newly created object or $NULL if parameters were invalid.]] } create_sockaddr @static { @@ -61,7 +61,7 @@ class @beta Efl.Net.Ip_Address extends Efl.Object { params { sockaddr: const(void_ptr); [[The pointer to struct sockaddr-compatible handle as per .]] } - return: Efl.Net.Ip_Address @owned; [[Newly created object or $NULL if parameter was invalid.]] + return: Efl.Net.Ip_Address @move; [[Newly created object or $NULL if parameter was invalid.]] } parse @static { @@ -85,7 +85,7 @@ class @beta Efl.Net.Ip_Address extends Efl.Object { params { numeric_address: string; [[The numeric address to parse, such as '127.0.0.1:1234' or '[::1]:1234']] } - return: Efl.Net.Ip_Address @owned; [[The new IP address object or NULL if it failed to parse]] + return: Efl.Net.Ip_Address @move; [[The new IP address object or NULL if it failed to parse]] } resolve @static { diff --git a/src/lib/ecore_con/efl_net_server_udp.eo b/src/lib/ecore_con/efl_net_server_udp.eo index edb9471696..3a45be9b73 100644 --- a/src/lib/ecore_con/efl_net_server_udp.eo +++ b/src/lib/ecore_con/efl_net_server_udp.eo @@ -58,7 +58,7 @@ class @beta Efl.Net.Server_Udp extends Efl.Net.Server_Ip { The iterator is only valid until a new group is joined or left using @.multicast_join or @.multicast_leave. ]] - return: iterator @owned; [[List of multicast groups]] + return: iterator @move; [[List of multicast groups]] } @property multicast_time_to_live { diff --git a/src/lib/ecore_con/efl_net_socket_udp.eo b/src/lib/ecore_con/efl_net_socket_udp.eo index 561473b478..3a3849014d 100644 --- a/src/lib/ecore_con/efl_net_socket_udp.eo +++ b/src/lib/ecore_con/efl_net_socket_udp.eo @@ -109,7 +109,7 @@ class @beta Efl.Net.Socket_Udp extends Efl.Net.Socket_Fd { The iterator is only valid until a new group is joined or left using @.multicast_join or @.multicast_leave. ]] - return: iterator @owned; [[Iterator to multicast groups]] + return: iterator @move; [[Iterator to multicast groups]] } @property multicast_time_to_live { diff --git a/src/lib/ecore_con/efl_net_ssl_context.eo b/src/lib/ecore_con/efl_net_ssl_context.eo index fb40620dfc..cddbafdcdd 100644 --- a/src/lib/ecore_con/efl_net_ssl_context.eo +++ b/src/lib/ecore_con/efl_net_ssl_context.eo @@ -46,7 +46,7 @@ class @beta Efl.Net.Ssl.Context extends Efl.Object { Can only be set during object construction! ]] values { - paths: iterator @owned; [[Path list for certificates]] + paths: iterator @move; [[Path list for certificates]] } } @@ -56,7 +56,7 @@ class @beta Efl.Net.Ssl.Context extends Efl.Object { Can only be set during object construction! ]] values { - paths: iterator @owned; [[Path list for private keys]] + paths: iterator @move; [[Path list for private keys]] } } @@ -66,7 +66,7 @@ class @beta Efl.Net.Ssl.Context extends Efl.Object { Can only be set during object construction! ]] values { - paths: iterator @owned; [[Path list for CRL's]] + paths: iterator @move; [[Path list for CRL's]] } } @@ -76,7 +76,7 @@ class @beta Efl.Net.Ssl.Context extends Efl.Object { Can only be set during object construction! ]] values { - paths: iterator @owned; [[Path list for CA's]] + paths: iterator @move; [[Path list for CA's]] } } diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c index eeb043ab33..ef58e91511 100644 --- a/src/lib/edje/edje_edit.c +++ b/src/lib/edje/edje_edit.c @@ -454,7 +454,11 @@ _edje_real_part_free(Edje *ed, Edje_Real_Part *rp) rp->custom = NULL; } - free(rp->drag); + if (rp->drag) + { + free(rp->drag); + rp->drag = NULL; + } if (rp->param2) free(rp->param2->set); eina_mempool_free(_edje_real_part_state_mp, rp->param2); diff --git a/src/lib/edje/efl_canvas_layout.eo b/src/lib/edje/efl_canvas_layout.eo index f5c1a2ccb1..0644fddc56 100644 --- a/src/lib/edje/efl_canvas_layout.eo +++ b/src/lib/edje/efl_canvas_layout.eo @@ -34,7 +34,7 @@ class @beta Efl.Canvas.Layout extends Efl.Canvas.Group implements Efl.File, Efl. access_part_iterate @beta { [[Iterates over all accessibility-enabled part names.]] - return: iterator @owned; [[Part name iterator]] + return: iterator @move; [[Part name iterator]] } @property seat { get { diff --git a/src/lib/efl/interfaces/efl_canvas_scene.eo b/src/lib/efl/interfaces/efl_canvas_scene.eo index 43dafdd04d..22d97d4630 100644 --- a/src/lib/efl/interfaces/efl_canvas_scene.eo +++ b/src/lib/efl/interfaces/efl_canvas_scene.eo @@ -51,7 +51,7 @@ interface Efl.Canvas.Scene Warning: This function will only evaluate top-level objects; child or "sub" objects will be skipped. ]] - return: iterator @owned @no_unused; [[ + return: iterator @move @no_unused; [[ The list of objects that are over the given position in $e. ]] params { @@ -103,7 +103,7 @@ interface Efl.Canvas.Scene Warning: This function will only evaluate top-level objects; child or "sub" objects will be skipped. ]] - return: iterator @owned @no_unused; [[Iterator to objects]] + return: iterator @move @no_unused; [[Iterator to objects]] params { @in rect: Eina.Rect; [[The rectangular region.]] @in include_pass_events_objects: bool; [[ @@ -153,7 +153,7 @@ interface Efl.Canvas.Scene a pointer and a keyboard. A seat object is the parent of the individual input devices. ]] - return: iterator @owned; + return: iterator @move; [[An iterator over the attached seats.]] } /* FIXME Efl.Input.Device is not stable yet*/ diff --git a/src/lib/efl/interfaces/efl_config.eo b/src/lib/efl/interfaces/efl_config.eo index e6605d4282..0e482577b0 100644 --- a/src/lib/efl/interfaces/efl_config.eo +++ b/src/lib/efl/interfaces/efl_config.eo @@ -9,7 +9,7 @@ interface @beta Efl.Config name: string; [[Configuration option name.]] } values { - value: any_value_ptr @owned; + value: any_value_ptr @move; [[The value. It will be empty if it doesn't exist. The caller must free it after use (using $eina_value_free() in C).]] } diff --git a/src/lib/efl/interfaces/efl_container.eo b/src/lib/efl/interfaces/efl_container.eo index afafe451cf..992e9f98d8 100644 --- a/src/lib/efl/interfaces/efl_container.eo +++ b/src/lib/efl/interfaces/efl_container.eo @@ -12,7 +12,7 @@ interface Efl.Container methods { content_iterate { [[Begin iterating over this object's contents.]] - return: iterator @owned @no_unused; [[Iterator on object's content.]] + return: iterator @move @no_unused; [[Iterator on object's content.]] } content_count { [[Returns the number of contained sub-objects.]] diff --git a/src/lib/efl/interfaces/efl_duplicate.eo b/src/lib/efl/interfaces/efl_duplicate.eo index 6419f35280..0a8a712cd5 100644 --- a/src/lib/efl/interfaces/efl_duplicate.eo +++ b/src/lib/efl/interfaces/efl_duplicate.eo @@ -11,7 +11,7 @@ interface @beta Efl.Duplicate The newly created object will have no event handlers or anything of the sort. ]] - return: Efl.Duplicate @owned; [[Returned carbon copy]] + return: Efl.Duplicate @move; [[Returned carbon copy]] } } } diff --git a/src/lib/efl/interfaces/efl_input_device.eo b/src/lib/efl/interfaces/efl_input_device.eo index a015cf83f4..783b261c95 100644 --- a/src/lib/efl/interfaces/efl_input_device.eo +++ b/src/lib/efl/interfaces/efl_input_device.eo @@ -65,7 +65,7 @@ class Efl.Input.Device extends Efl.Object This is only meaningful with seat devices, as they are groups of real input devices. ]] - return: iterator @owned; [[List of device children]] + return: iterator @move; [[List of device children]] } @property pointer_device_count { [[The number of pointer devices in this seat. diff --git a/src/lib/efl/interfaces/efl_io_buffer.eo b/src/lib/efl/interfaces/efl_io_buffer.eo index f54bba953a..eefdf8e507 100644 --- a/src/lib/efl/interfaces/efl_io_buffer.eo +++ b/src/lib/efl/interfaces/efl_io_buffer.eo @@ -133,7 +133,7 @@ class @beta Efl.Io.Buffer extends Efl.Object On failure, for example a read-only backing store was adopted with @.adopt_readonly, NULL is returned. ]] - return: ptr(Eina.Binbuf) @owned @no_unused; [[Binbuf]] + return: ptr(Eina.Binbuf) @move @no_unused; [[Binbuf]] } } diff --git a/src/lib/efl/interfaces/efl_model.eo b/src/lib/efl/interfaces/efl_model.eo index 8e58c24926..a425487822 100644 --- a/src/lib/efl/interfaces/efl_model.eo +++ b/src/lib/efl/interfaces/efl_model.eo @@ -31,7 +31,7 @@ interface @beta Efl.Model ]] } values { - properties: iterator @owned; [[Array of current properties]] + properties: iterator @move; [[Array of current properties]] } } @property property { diff --git a/src/lib/efl/interfaces/efl_observable.eo b/src/lib/efl/interfaces/efl_observable.eo index babfe21c59..40deba9e8b 100644 --- a/src/lib/efl/interfaces/efl_observable.eo +++ b/src/lib/efl/interfaces/efl_observable.eo @@ -4,7 +4,7 @@ struct @beta @free(efl_observable_tuple_free) Efl.Observable_Tuple { [[This type describes an observable touple]] key: string; [[Touple key]] - data: iterator @owned; [[Touple data]] + data: iterator @move; [[Touple data]] } class @beta Efl.Observable extends Efl.Object { @@ -41,7 +41,7 @@ class @beta Efl.Observable extends Efl.Object { observers_iterator_new { [[Return a new iterator associated with a group of observers. ]] - return: iterator @owned; [[Iterator for observers group]] + return: iterator @move; [[Iterator for observers group]] params { @in key: string; [[A key to classify observer groups]] } @@ -57,7 +57,7 @@ class @beta Efl.Observable extends Efl.Object { iterator_tuple_new { [[Return a new iterator associated to this observable. ]] - return: iterator @owned; [[Iterator for observer]] + return: iterator @move; [[Iterator for observer]] } } implements { diff --git a/src/lib/efl/interfaces/efl_pack_table.eo b/src/lib/efl/interfaces/efl_pack_table.eo index b2d4b31f1b..18adfb8225 100644 --- a/src/lib/efl/interfaces/efl_pack_table.eo +++ b/src/lib/efl/interfaces/efl_pack_table.eo @@ -25,7 +25,7 @@ interface @beta Efl.Pack_Table extends Efl.Pack } table_contents_get { [[Returns all objects at a given position in this table.]] - return: iterator @owned; [[Iterator to table contents]] + return: iterator @move; [[Iterator to table contents]] params { @in col: int; [[Column number]] @in row: int; [[Row number]] diff --git a/src/lib/efl/interfaces/efl_text_annotate.eo b/src/lib/efl/interfaces/efl_text_annotate.eo index 724faeb0a3..1226628683 100644 --- a/src/lib/efl/interfaces/efl_text_annotate.eo +++ b/src/lib/efl/interfaces/efl_text_annotate.eo @@ -33,7 +33,7 @@ interface @beta Efl.Text_Annotate { @in start: ptr(const(Efl.Text_Cursor_Cursor)); [[Start of range]] @in end: ptr(const(Efl.Text_Cursor_Cursor)); [[End of range]] } - return: iterator @owned; [[Handle of the Annotation]] + return: iterator @move; [[Handle of the Annotation]] } annotation_insert { [[Inserts an annotation format in a specified range [$start, $end - 1]. diff --git a/src/lib/efl/interfaces/efl_text_markup_interactive.eo b/src/lib/efl/interfaces/efl_text_markup_interactive.eo index cbb4906ac2..7b2da3a2fe 100644 --- a/src/lib/efl/interfaces/efl_text_markup_interactive.eo +++ b/src/lib/efl/interfaces/efl_text_markup_interactive.eo @@ -5,7 +5,7 @@ interface @beta Efl.Text_Markup_Interactive extends Efl.Text_Cursor { @property markup_range { [[Markup of a given range in the text]] values { - markup: mstring @owned; [[The markup-text representation set to + markup: mstring @move; [[The markup-text representation set to this text of a given range]] } keys { diff --git a/src/lib/efl/interfaces/efl_text_markup_util.eo b/src/lib/efl/interfaces/efl_text_markup_util.eo index 5b2bd589ee..90d63e10d4 100644 --- a/src/lib/efl/interfaces/efl_text_markup_util.eo +++ b/src/lib/efl/interfaces/efl_text_markup_util.eo @@ -11,7 +11,7 @@ class @beta Efl.Text_Markup_Util { params { @in text: string; [[The text (UTF-8) to convert to markup]] } - return: mstring @owned; [[The markup representation of given text]] + return: mstring @move; [[The markup representation of given text]] } markup_to_text @static { [[Converts a given (UTF-8) text to a markup-compatible string. @@ -21,7 +21,7 @@ class @beta Efl.Text_Markup_Util { params { @in text: string; [[The markup-text to convert to text (UTF-8)]] } - return: mstring @owned; [[The text representation of given format]] + return: mstring @move; [[The text representation of given format]] } } } diff --git a/src/lib/efl/interfaces/efl_ui_menu.eo b/src/lib/efl/interfaces/efl_ui_menu.eo index 260b1cfd41..ca76bf2639 100644 --- a/src/lib/efl/interfaces/efl_ui_menu.eo +++ b/src/lib/efl/interfaces/efl_ui_menu.eo @@ -28,7 +28,7 @@ interface @beta Efl.Ui.Menu { @property items { get { [[Returns a list of the widget item.]] - return: iterator @owned @no_unused; [[Iterator to widget items]] + return: iterator @move @no_unused; [[Iterator to widget items]] } } } diff --git a/src/lib/eio/efl_io_manager.eo b/src/lib/eio/efl_io_manager.eo index b81ba4cc29..b88d7f8155 100644 --- a/src/lib/eio/efl_io_manager.eo +++ b/src/lib/eio/efl_io_manager.eo @@ -34,7 +34,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer @in path: string; [[Path we want to list entries for]] paths: EflIoPath; [[Callback called for each packet of files found]] } - return: future @owned; [[Amount of files found during the listing of the directory]] + return: future @move; [[Amount of files found during the listing of the directory]] } direct_ls @const { @@ -44,7 +44,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer @in recursive: bool; [[If $true, list entries recursively, $false otherwise]] info: EflIoDirectInfo; [[Callback called for each packet of @Eina.File_Direct_Info]] } - return: future @owned; [[Amount of files found during the listing of the directory]] + return: future @move; [[Amount of files found during the listing of the directory]] } stat_ls @const { @@ -54,7 +54,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer @in recursive: bool; [[If $true, list entries recursively, $false otherwise]] info: EflIoDirectInfo; [[Callback called for each packet of @Eina.File_Direct_Info]] } - return: future @owned; [[Amount of files found during the listing of the directory]] + return: future @move; [[Amount of files found during the listing of the directory]] } // Extended attributes @@ -64,7 +64,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer @in path: string; [[Path we want to list entries for]] paths: EflIoPath; [[Callback called for each packet of extended attributes found.]] } - return: future @owned; [[Amount of extended attributes found]] + return: future @move; [[Amount of extended attributes found]] } stat @const { @@ -83,10 +83,10 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer data: ptr(Eina.Binbuf); [[Data to set as information]] flags: Eina.Xattr.Flags; [[Extended attributes flags]] } - return: future @owned; [[Future for asynchronous set operation]] + return: future @move; [[Future for asynchronous set operation]] } get { - return: future @owned; [[Information]] + return: future @move; [[Information]] } keys { path: string; [[File path]] @@ -103,7 +103,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer @in path: string; [[Path to file]] @in shared: bool; [[$true if the file can be accessed by others, $false otherwise]] } - return: future @owned; [[Eina file handle]] + return: future @move; [[Eina file handle]] } close @const { [[Closes an open Eina.File.]] @@ -111,7 +111,7 @@ class @beta Efl.Io.Manager extends Efl.Loop_Consumer @in file: ptr(Eina.File); [[Eina file handle]] // Here we're just interested whether the promise was fulfilled or not. No value needed. } - return: future @owned; [[Close return code]] + return: future @move; [[Close return code]] } } } diff --git a/src/lib/eldbus/eldbus_proxy.c b/src/lib/eldbus/eldbus_proxy.c index a28fe9f0e4..955182f4c2 100644 --- a/src/lib/eldbus/eldbus_proxy.c +++ b/src/lib/eldbus/eldbus_proxy.c @@ -148,7 +148,10 @@ _eldbus_proxy_clear(Eldbus_Proxy *proxy) eldbus_cbs_free_dispatch(&(proxy->cbs_free), proxy); if (proxy->props) - eina_hash_free(proxy->props); + { + eina_hash_free(proxy->props); + proxy->props = NULL; + } proxy->refcount = 0; } diff --git a/src/lib/elementary/efl_access_action.eo b/src/lib/elementary/efl_access_action.eo index 587cc63056..acaad80188 100644 --- a/src/lib/elementary/efl_access_action.eo +++ b/src/lib/elementary/efl_access_action.eo @@ -63,7 +63,7 @@ mixin @beta Efl.Access.Action params { @in id: int; [[ID for widget]] } - return: mstring @owned @no_unused; [[Should be freed by the user.]] + return: mstring @move @no_unused; [[Should be freed by the user.]] } } } diff --git a/src/lib/elementary/efl_access_object.eo b/src/lib/elementary/efl_access_object.eo index 5689638efe..d08434a16a 100644 --- a/src/lib/elementary/efl_access_object.eo +++ b/src/lib/elementary/efl_access_object.eo @@ -280,7 +280,7 @@ mixin @beta Efl.Access.Object requires Efl.Object get { } values { - children: list @owned; [[List of widget's children]] + children: list @move; [[List of widget's children]] } } @property role_name @protected @beta { @@ -296,7 +296,7 @@ mixin @beta Efl.Access.Object requires Efl.Object get { } values { - attributes: list @owned; [[List of object attributes. + attributes: list @move; [[List of object attributes. Must be freed by the user]] } } diff --git a/src/lib/elementary/efl_access_text.eo b/src/lib/elementary/efl_access_text.eo index b1acc3e93e..4deb7ecb14 100644 --- a/src/lib/elementary/efl_access_text.eo +++ b/src/lib/elementary/efl_access_text.eo @@ -72,7 +72,7 @@ interface @beta Efl.Access.Text -1 in case of error.]] } values { - string: mstring @owned; [[Newly allocated UTF-8 encoded string. Must be free by a user.]] + string: mstring @move; [[Newly allocated UTF-8 encoded string. Must be free by a user.]] } } @property access_text @protected @beta { @@ -84,7 +84,7 @@ interface @beta Efl.Access.Text end_offset: int; [[End offset of text.]] } values { - text: mstring @owned; [[UTF-8 encoded text.]] + text: mstring @move; [[UTF-8 encoded text.]] } } @property caret_offset @protected @beta { @@ -110,7 +110,7 @@ interface @beta Efl.Access.Text end_offset: ptr(int); [[Position in text to which given attribute is set.]] } values { - value: mstring @owned; [[Value of text attribute. Should be free()]] + value: mstring @move; [[Value of text attribute. Should be free()]] } } @property text_attributes @protected @beta { @@ -122,7 +122,7 @@ interface @beta Efl.Access.Text end_offset: ptr(int); [[End offset]] } values { - attributes: list @owned; [[List of text attributes]] + attributes: list @move; [[List of text attributes]] } } @property default_attributes @protected @beta { @@ -130,7 +130,7 @@ interface @beta Efl.Access.Text get { } values { - attributes: list @owned; [[List of default attributes]] + attributes: list @move; [[List of default attributes]] } } @property character_extents @protected @beta { @@ -181,7 +181,7 @@ interface @beta Efl.Access.Text yclip: Efl.Access.Text_Clip_Type; [[yclip]] } values { - ranges: list @owned; [[List of ranges]] + ranges: list @move; [[List of ranges]] } } @property range_extents @protected @beta { diff --git a/src/lib/elementary/efl_config_global.eo b/src/lib/elementary/efl_config_global.eo index db437901e7..5c19e7072d 100644 --- a/src/lib/elementary/efl_config_global.eo +++ b/src/lib/elementary/efl_config_global.eo @@ -50,7 +50,7 @@ class @beta Efl.Config_Global extends Efl.Object implements Efl.Config hidden: bool @optional; [[If $true, gets the full list of profiles, including those stored in hidden files.]] } - return: iterator @owned; [[Iterator to profiles]] + return: iterator @move; [[Iterator to profiles]] } profile_exists { [[Returns whether a profile exists or not.]] @@ -66,7 +66,7 @@ class @beta Efl.Config_Global extends Efl.Object implements Efl.Config is_user: bool; [[$true to lookup for a user profile or $false for a system one.]] } - return: stringshare @owned; [[Directory of the profile, free after use.]] + return: stringshare @move; [[Directory of the profile, free after use.]] } profile_derived_add @protected { [[Add a new profile of the given name to be derived from the current diff --git a/src/lib/elementary/efl_ui_box.c b/src/lib/elementary/efl_ui_box.c index 58b77f1d40..3cee95ccab 100644 --- a/src/lib/elementary/efl_ui_box.c +++ b/src/lib/elementary/efl_ui_box.c @@ -282,6 +282,8 @@ _efl_ui_box_efl_pack_linear_pack_begin(Eo *obj, Efl_Ui_Box_Data *pd, Efl_Gfx_Ent EOLIAN static Eina_Bool _efl_ui_box_efl_pack_linear_pack_before(Eo *obj, Efl_Ui_Box_Data *pd, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing) { + if (existing) EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_list_data_find(pd->children, existing), EINA_FALSE); + if (!_efl_ui_box_child_register(obj, pd, subobj)) return EINA_FALSE; @@ -293,6 +295,8 @@ _efl_ui_box_efl_pack_linear_pack_before(Eo *obj, Efl_Ui_Box_Data *pd, Efl_Gfx_En EOLIAN static Eina_Bool _efl_ui_box_efl_pack_linear_pack_after(Eo *obj, Efl_Ui_Box_Data *pd, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing) { + if (existing) EINA_SAFETY_ON_FALSE_RETURN_VAL(eina_list_data_find(pd->children, existing), EINA_FALSE); + if (!_efl_ui_box_child_register(obj, pd, subobj)) return EINA_FALSE; diff --git a/src/lib/elementary/efl_ui_collection.eo b/src/lib/elementary/efl_ui_collection.eo index ecd0eb1e94..30451214ad 100644 --- a/src/lib/elementary/efl_ui_collection.eo +++ b/src/lib/elementary/efl_ui_collection.eo @@ -6,6 +6,10 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base implements Efl.Ui.Multi_Selectable, Efl.Ui.Focus.Manager_Sub, Efl.Ui.Widget_Focus_Manager + composite + Efl.Ui.Scrollable_Interactive, + Efl.Ui.Scrollbar, + Efl.Ui.Focus.Manager { [[This widget displays a list of items in an arrangement controlled by an external @.position_manager object. By using different @.position_manager objects this widget can show unidimensional lists or @@ -50,7 +54,7 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base implements @property position_manager { [[Position manager object that handles placement of items.]] values { - position_manager : Efl.Ui.Position_Manager.Entity @owned; [[Ownership is passed to the item container.]] + position_manager : Efl.Ui.Position_Manager.Entity @move; [[Ownership is passed to the item container.]] } } } @@ -95,10 +99,5 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base implements item,clicked : Efl.Ui.Item; [[A $clicked event occurred over an item.]] item,clicked,any : Efl.Ui.Item; [[A $clicked,any event occurred over an item.]] } - composite { - Efl.Ui.Scrollable_Interactive; - Efl.Ui.Scrollbar; - Efl.Ui.Focus.Manager; - } } diff --git a/src/lib/elementary/efl_ui_focus_composition.eo b/src/lib/elementary/efl_ui_focus_composition.eo index 92062976ed..a82901575d 100644 --- a/src/lib/elementary/efl_ui_focus_composition.eo +++ b/src/lib/elementary/efl_ui_focus_composition.eo @@ -18,7 +18,7 @@ mixin @beta Efl.Ui.Focus.Composition requires Efl.Ui.Widget { the focus property is redirected to the evas focus property. The mixin will take care of registration. ]] values { - logical_order : list @owned; [[The order to use]] + logical_order : list @move; [[The order to use]] } } dirty @protected { diff --git a/src/lib/elementary/efl_ui_focus_manager.eo b/src/lib/elementary/efl_ui_focus_manager.eo index 1b9798c77e..1b0256f663 100644 --- a/src/lib/elementary/efl_ui_focus_manager.eo +++ b/src/lib/elementary/efl_ui_focus_manager.eo @@ -4,10 +4,10 @@ import eina_types; struct @beta @free(efl_ui_focus_relation_free) Efl.Ui.Focus.Relations { [[Structure holding the graph of relations between focusable objects. ]] - right : list @owned; [[List of objects to the right.]] - left : list @owned; [[List of objects to the left.]] - top : list @owned; [[List of objects above.]] - down : list @owned; [[List of objects below.]] + right : list @move; [[List of objects to the right.]] + left : list @move; [[List of objects to the left.]] + top : list @move; [[List of objects above.]] + down : list @move; [[List of objects below.]] next : Efl.Ui.Focus.Object; [[Next object.]] prev : Efl.Ui.Focus.Object; [[Previous object.]] parent : Efl.Ui.Focus.Object; [[Parent object.]] @@ -144,7 +144,7 @@ interface Efl.Ui.Focus.Manager { params { child : Efl.Ui.Focus.Object; [[The child object to inspect.]] } - return : ptr(Efl.Ui.Focus.Relations) @owned; [[The list of relations + return : ptr(Efl.Ui.Focus.Relations) @move; [[The list of relations starting from $child.]] } logical_end { diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.eo b/src/lib/elementary/efl_ui_focus_manager_calc.eo index 279f6da106..cd9ad90fa5 100644 --- a/src/lib/elementary/efl_ui_focus_manager_calc.eo +++ b/src/lib/elementary/efl_ui_focus_manager_calc.eo @@ -59,7 +59,7 @@ class @beta Efl.Ui.Focus.Manager_Calc extends Efl.Object implements Efl.Ui.Focus [[Sets the list of children to a different order.]] params { parent : Efl.Ui.Focus.Object; [[The parent to update.]] - children : list @owned; [[The list of children with the new order.]] + children : list @move; [[The list of children with the new order.]] } return : bool; [[$true if successful, $false otherwise.]] } @@ -71,7 +71,7 @@ class @beta Efl.Ui.Focus.Manager_Calc extends Efl.Object implements Efl.Ui.Focus ]] params { parent : Efl.Ui.Focus.Object; [[The parent to update.]] - children : list @owned; [[The list of objects with the new order.]] + children : list @move; [[The list of objects with the new order.]] } } unregister { diff --git a/src/lib/elementary/efl_ui_image_zoomable.eo b/src/lib/elementary/efl_ui_image_zoomable.eo index 4669a4f4a4..62ae9bc591 100644 --- a/src/lib/elementary/efl_ui_image_zoomable.eo +++ b/src/lib/elementary/efl_ui_image_zoomable.eo @@ -5,6 +5,7 @@ struct @extern Elm.Photocam.Progress; [[Photocam progress information.]] class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom, Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar + composite Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar { [[Elementary Image Zoomable class]] methods { @@ -84,8 +85,4 @@ class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom, download,done: void; [[Called when photocam download finished]] download,error: Elm.Photocam.Error; [[Called when photocam download failed]] } - composite { - Efl.Ui.Scrollable_Interactive; - Efl.Ui.Scrollbar; - } } diff --git a/src/lib/elementary/efl_ui_list_view.eo b/src/lib/elementary/efl_ui_list_view.eo index f1490b3b26..5c49394ec4 100644 --- a/src/lib/elementary/efl_ui_list_view.eo +++ b/src/lib/elementary/efl_ui_list_view.eo @@ -10,6 +10,8 @@ struct @beta Efl.Ui.List_View_Item_Event class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar, Efl.Access.Widget.Action, Efl.Access.Selection, Efl.Ui.Focus.Composition, Efl.Ui.Focus.Manager_Sub, Efl.Ui.Container_Selectable, Efl.Ui.List_View_Model, Efl.Ui.Widget_Focus_Manager + composite + Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar { methods { @property homogeneous { @@ -90,8 +92,4 @@ class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scroll Efl.Access.Selection.all_children_select; Efl.Access.Selection.access_selection_clear; } - composite { - Efl.Ui.Scrollable_Interactive; - Efl.Ui.Scrollbar; - } } diff --git a/src/lib/elementary/efl_ui_multi_selectable.eo b/src/lib/elementary/efl_ui_multi_selectable.eo index 87f155d36c..a13070842a 100644 --- a/src/lib/elementary/efl_ui_multi_selectable.eo +++ b/src/lib/elementary/efl_ui_multi_selectable.eo @@ -27,7 +27,7 @@ interface @beta Efl.Ui.Multi_Selectable extends Efl.Ui.Single_Selectable } selected_items_get { [[Get the selected items in a iterator. The iterator sequence will be decided by selection.]] - return: iterator @owned @no_unused; [[User has to free the iterator after usage.]] + return: iterator @move @no_unused; [[User has to free the iterator after usage.]] } select_range { [[Select a range of @Efl.Ui.Selectable. diff --git a/src/lib/elementary/efl_ui_panel.eo b/src/lib/elementary/efl_ui_panel.eo index 0cde869b3e..24182af750 100644 --- a/src/lib/elementary/efl_ui_panel.eo +++ b/src/lib/elementary/efl_ui_panel.eo @@ -18,6 +18,7 @@ struct @beta Efl.Ui.Panel_Scroll_Info class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base implements Efl.Ui.Focus.Layer, Efl.Ui.Scrollable_Interactive, Efl.Content, Efl.Access.Widget.Action + composite Efl.Ui.Scrollable_Interactive { [[Elementary panel class]] methods { @@ -93,7 +94,4 @@ class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base events { toggled: void; [[Called when the hidden state was toggled]] } - composite { - Efl.Ui.Scrollable_Interactive; - } } diff --git a/src/lib/elementary/efl_ui_radio_box.eo b/src/lib/elementary/efl_ui_radio_box.eo index aa2d91c835..54bd92e3df 100644 --- a/src/lib/elementary/efl_ui_radio_box.eo +++ b/src/lib/elementary/efl_ui_radio_box.eo @@ -1,4 +1,5 @@ class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group + composite Efl.Ui.Radio_Group { [[A standard @Efl.Ui.Box container which automatically handles grouping of any @Efl.Ui.Radio widget added to it. @@ -19,7 +20,4 @@ class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group Efl.Pack_Linear.pack_unpack_at; Efl.Object.constructor; } - composite { - Efl.Ui.Radio_Group; - } } diff --git a/src/lib/elementary/efl_ui_scroller.eo b/src/lib/elementary/efl_ui_scroller.eo index 36f42c16b0..7a2bb90306 100644 --- a/src/lib/elementary/efl_ui_scroller.eo +++ b/src/lib/elementary/efl_ui_scroller.eo @@ -4,6 +4,9 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout_Base implements Efl.Ui.Focus.Manager_Sub, Efl.Ui.Widget_Focus_Manager, Efl.Content + composite + Efl.Ui.Scrollable_Interactive, + Efl.Ui.Scrollbar { [[Efl ui scroller class]] implements { @@ -19,8 +22,4 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout_Base implements Efl.Ui.Widget_Focus_Manager.focus_manager_create; Efl.Ui.Scrollable_Interactive.match_content { set; } } - composite { - Efl.Ui.Scrollable_Interactive; - Efl.Ui.Scrollbar; - } } diff --git a/src/lib/elementary/efl_ui_spotlight_container.c b/src/lib/elementary/efl_ui_spotlight_container.c index 10c8125709..50a8e9a014 100644 --- a/src/lib/elementary/efl_ui_spotlight_container.c +++ b/src/lib/elementary/efl_ui_spotlight_container.c @@ -14,7 +14,7 @@ typedef struct _Efl_Ui_Spotlight_Container_Data Eina_Size2D sz; } page_spec; struct { - int page; + Efl_Ui_Widget *page; double pos; } curr; struct { @@ -37,6 +37,14 @@ typedef struct _Efl_Ui_Spotlight_Container_Data #define MY_CLASS EFL_UI_SPOTLIGHT_CONTAINER_CLASS +static void +_fetch_partners(Eina_List *list, Eo *subobj, Eo **next, Eo **prev) +{ + Eina_List *node = eina_list_data_find_list(list, subobj); + *next = eina_list_data_get(eina_list_next(node)); + *prev = eina_list_data_get(eina_list_prev(node)); +} + static void _unpack(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd, Efl_Gfx_Entity *subobj, int index); static void _unpack_all(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd, Eina_Bool clear); @@ -73,10 +81,13 @@ _transition_end(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd) if (pd->transition_done.content) { Eina_Value v = eina_value_object_init(pd->transition_done.content); - efl_pack_unpack(obj, pd->transition_done.content); - eina_promise_resolve(pd->transition_done.transition_done, v); + //first store the fields, then NULL them, then resolve the situation, otherwise we might get trapped in a endless recursion + Eina_Promise *p = pd->transition_done.transition_done; + Eo *content = pd->transition_done.content; pd->transition_done.transition_done = NULL; pd->transition_done.content = NULL; + efl_pack_unpack(obj, content); + eina_promise_resolve(p , v); } ev.from = pd->show_request.from; @@ -176,7 +187,7 @@ _efl_ui_spotlight_container_efl_object_constructor(Eo *obj, CRI("Failed to set layout!"); pd->position = -1; - pd->curr.page = -1; + pd->curr.page = NULL; pd->curr.pos = 0.0; pd->transition = NULL; @@ -267,24 +278,14 @@ _register_child(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd, Efl_Gf static void _update_internals(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd, Efl_Gfx_Entity *subobj EINA_UNUSED, int index) { - Eina_Bool curr_page_update = EINA_FALSE; - - if (pd->curr.page >= index) - { - pd->curr.page++; - curr_page_update = EINA_TRUE; - } - pd->prevent_transition_interaction = EINA_TRUE; if (pd->transition) efl_ui_spotlight_manager_content_add(pd->transition, subobj, index); if (pd->indicator) efl_ui_spotlight_indicator_content_add(pd->indicator, subobj, index); - if (curr_page_update && !pd->transition && eina_list_count(pd->content_list) != 1) - _position_set(obj, pd, pd->curr.page); pd->prevent_transition_interaction = EINA_FALSE; if (eina_list_count(pd->content_list) == 1) - efl_ui_spotlight_active_index_set(obj, 0); + efl_ui_spotlight_active_element_set(obj, subobj); } EOLIAN static Eina_Bool @@ -315,9 +316,10 @@ _efl_ui_spotlight_container_efl_pack_linear_pack_before(Eo *obj EINA_UNUSED, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing) { - if (!_register_child(obj, pd, subobj)) return EINA_FALSE; int index = eina_list_data_idx(pd->content_list, (void *)existing); - if (index == -1) return EINA_FALSE; + EINA_SAFETY_ON_FALSE_RETURN_VAL(index >= 0, EINA_FALSE); + + if (!_register_child(obj, pd, subobj)) return EINA_FALSE; pd->content_list = eina_list_prepend_relative(pd->content_list, subobj, existing); _update_internals(obj, pd, subobj, index); return EINA_TRUE; @@ -329,9 +331,10 @@ _efl_ui_spotlight_container_efl_pack_linear_pack_after(Eo *obj EINA_UNUSED, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing) { - if (!_register_child(obj, pd, subobj)) return EINA_FALSE; int index = eina_list_data_idx(pd->content_list, (void *)existing); - if (index == -1) return EINA_FALSE; + EINA_SAFETY_ON_FALSE_RETURN_VAL(index >= 0, EINA_FALSE); + + if (!_register_child(obj, pd, subobj)) return EINA_FALSE; pd->content_list = eina_list_append_relative(pd->content_list, subobj, existing); _update_internals(obj, pd, subobj, index + 1); return EINA_TRUE; @@ -386,21 +389,21 @@ _efl_ui_spotlight_container_efl_pack_linear_pack_index_get(Eo *obj EINA_UNUSED, } EOLIAN static void -_efl_ui_spotlight_container_active_index_set(Eo *obj EINA_UNUSED, +_efl_ui_spotlight_container_active_element_set(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd, - int index) + Efl_Ui_Widget *new_page) { - int before; + int before = -1; + int index; - if ((index < 0) || (index > ((int)eina_list_count(pd->content_list) - 1))) - { - ERR("index %d out of range", index); - return; - } + if (pd->curr.page) + before = efl_pack_index_get(obj, pd->curr.page); + index = efl_pack_index_get(obj, new_page); - before = pd->curr.page; - pd->show_request.last_pos = pd->curr.page; - pd->show_request.from = pd->curr.page; + EINA_SAFETY_ON_FALSE_RETURN(index != -1); + + pd->show_request.last_pos = efl_pack_index_get(obj, pd->curr.page); + pd->show_request.from = efl_pack_index_get(obj, pd->curr.page); pd->show_request.to = index; if (pd->show_request.active && pd->show_request.from == -1 && pd->show_request.to) @@ -410,13 +413,12 @@ _efl_ui_spotlight_container_active_index_set(Eo *obj EINA_UNUSED, _transition_start(obj, pd, before, index, before); } - int old_curr_page = pd->curr.page; - pd->curr.page = index; - efl_ui_spotlight_manager_switch_to(pd->transition, old_curr_page, pd->curr.page); + pd->curr.page = new_page; + efl_ui_spotlight_manager_switch_to(pd->transition, before, index); } -EOLIAN static int -_efl_ui_spotlight_container_active_index_get(const Eo *obj EINA_UNUSED, +EOLIAN static Efl_Ui_Widget* +_efl_ui_spotlight_container_active_element_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd) { return pd->curr.page; @@ -456,7 +458,7 @@ _unpack_all(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Container_Data *pd, Eina_Bool clear) { - pd->curr.page = -1; + pd->curr.page = NULL; while(pd->content_list) { @@ -493,15 +495,15 @@ _unpack(Eo *obj, Efl_Gfx_Entity *subobj, int index) { - int early_curr_page = pd->curr.page; - Eina_Bool deletion_of_active = (index == pd->curr.page); + int early_curr_page = efl_pack_index_get(obj, pd->curr.page); + Eina_Bool deletion_of_active = (subobj == pd->curr.page); + Efl_Ui_Widget *next, *prev; + _fetch_partners(pd->content_list, subobj, &next, &prev); pd->content_list = eina_list_remove(pd->content_list, subobj); _elm_widget_sub_object_redirect_to_top(obj, subobj); if (!efl_alive_get(obj)) return; - if (index < pd->curr.page) - pd->curr.page--; if (pd->transition) efl_ui_spotlight_manager_content_del(pd->transition, subobj, index); @@ -509,23 +511,30 @@ _unpack(Eo *obj, efl_ui_spotlight_indicator_content_del(pd->indicator, subobj, index); //we deleted the current index - if (early_curr_page == index) + if (deletion_of_active) { - int new_curr_page = MIN(MAX(early_curr_page, 0), (int)eina_list_count(pd->content_list) - 1); - //when we delete the active index and we are not updating the index, - // then force a update, so the same sort of animation is triggered from the right direction - if (deletion_of_active && new_curr_page == pd->curr.page) - pd->curr.page = index -1; - if (eina_list_count(pd->content_list) > 0 && efl_alive_get(obj)) - efl_ui_spotlight_active_index_set(obj, new_curr_page); + if (eina_list_count(pd->content_list) == 0) + { + pd->curr.page = NULL; + } else - pd->curr.page = -1; + { + //when we delete the active index and we are not updating the index, + // then force a update, so the same sort of animation is triggered from the right direction + if (early_curr_page == efl_pack_index_get(obj, prev)) + pd->curr.page = eina_list_nth(pd->content_list, early_curr_page - 1); + + if (prev) + efl_ui_spotlight_active_element_set(obj, prev); + else + efl_ui_spotlight_active_element_set(obj, next); + } } //position has updated - if (early_curr_page != pd->curr.page && early_curr_page != index && + if (deletion_of_active && pd->indicator && !pd->transition) - efl_ui_spotlight_indicator_position_update(pd->indicator, pd->curr.page); + efl_ui_spotlight_indicator_position_update(pd->indicator, efl_pack_index_get(obj, pd->curr.page)); efl_event_callback_del(subobj, EFL_EVENT_INVALIDATE, _child_inv, obj); } @@ -656,13 +665,18 @@ _efl_ui_spotlight_container_indicator_get(const Eo *obj EINA_UNUSED, Efl_Ui_Spot EOLIAN static void _efl_ui_spotlight_container_push(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd EINA_UNUSED, Efl_Gfx_Entity *view) { - int old_active_index = efl_ui_spotlight_active_index_get(obj); + if (efl_ui_spotlight_active_element_get(obj)) + { + if (!efl_pack_before(obj, view, efl_ui_spotlight_active_element_get(obj))) + return; + } + else + { + if (!efl_pack_begin(obj, view)) + return; + } - if (old_active_index == -1) - old_active_index = 0; - - efl_pack_at(obj, view, old_active_index); - efl_ui_spotlight_active_index_set(obj, old_active_index); + efl_ui_spotlight_active_element_set(obj, view); } static Eina_Value @@ -686,13 +700,13 @@ _efl_ui_spotlight_container_pop(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd, Ei if (count == 0) return NULL; - content = efl_pack_content_get(obj, efl_ui_spotlight_active_index_get(obj)); + content = efl_ui_spotlight_active_element_get(obj); //pop() unpacks content without transition if there is one content. if (count == 1) { efl_pack_unpack(obj, content); - pd->curr.page = -1; + pd->curr.page = NULL; if (del) { @@ -706,7 +720,7 @@ _efl_ui_spotlight_container_pop(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd, Ei return efl_loop_future_resolved(obj, v); } - new_index = efl_ui_spotlight_active_index_get(obj) + 1; + new_index = efl_pack_index_get(obj, efl_ui_spotlight_active_element_get(obj)) + 1; if (new_index >= count) new_index -= 2; @@ -717,7 +731,7 @@ _efl_ui_spotlight_container_pop(Eo *obj, Efl_Ui_Spotlight_Container_Data *pd, Ei if (del) transition_done = eina_future_then(transition_done, _delete_obj, NULL); - efl_ui_spotlight_active_index_set(obj, new_index); + efl_ui_spotlight_active_element_set(obj, efl_pack_content_get(obj, new_index)); return transition_done; } diff --git a/src/lib/elementary/efl_ui_spotlight_container.eo b/src/lib/elementary/efl_ui_spotlight_container.eo index 31d39ef373..bb39fd2fc6 100644 --- a/src/lib/elementary/efl_ui_spotlight_container.eo +++ b/src/lib/elementary/efl_ui_spotlight_container.eo @@ -9,7 +9,7 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl [[The Spotlight widget is a container for other sub-widgets, where only one sub-widget is active at any given time. Sub-widgets are added using the @Efl.Pack_Linear interface and the active one (the one in the "spotlight") is - selected using @.active_index. + selected using @.active_element. The way the different sub-widgets are rendered can be customized through the @.spotlight_manager object. For example, only the active sub-widget might be shown, or it might be shown in a central position whereas the @@ -33,7 +33,7 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl If it is not set, only the active sub-widget is shown and transitions are instantaneous (not animated). ]] values { - spotlight_manager : Efl.Ui.Spotlight.Manager @owned; [[The Spotlight Manager object or $NULL.]] + spotlight_manager : Efl.Ui.Spotlight.Manager @move; [[The Spotlight Manager object or $NULL.]] } } @property indicator { @@ -43,17 +43,17 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl Its location inside the container is controlled by the @.spotlight_manager. ]] values { - indicator : Efl.Ui.Spotlight.Indicator @owned; [[The Indicator object or $NULL.]] + indicator : Efl.Ui.Spotlight.Indicator @move; [[The Indicator object or $NULL.]] } } - @property active_index { + @property active_element { [[Currently active sub-widget (the one with the spotlight) among all the sub-widgets added to this widget Changing this value might trigger an animation. ]] values { - index: int; [[Index of the sub-widget that has the spotlight, from 0 to the number of sub-widgets - 1 - (@Efl.Container.content_count - 1).]] + element : Efl.Ui.Widget; [[Sub-widget that has the spotlight. + The element has to be added prior to this call via the @Efl.Pack_Linear interface.]] } } @property spotlight_size { @@ -66,7 +66,7 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl } } push @beta { - [[Packs a new sub-widget at the position indicated by @.active_index (0 by default). + [[Packs a new sub-widget before @.active_element, and move the spotlight there. This is the same behavior as a push operation on a stack. @@ -81,7 +81,7 @@ class @beta Efl.Ui.Spotlight.Container extends Efl.Ui.Layout_Base implements Efl The sub-widgets behind it naturally flow down so the next one gets the spotlight. This is the same behavior as a pop operation on a stack. - When combined with @.push you don't have to worry about @.active_index since only the first sub-widget is + When combined with @.push you don't have to worry about @.active_element since only the first sub-widget is manipulated. An animation might be triggered to give the new sub-widget the spotlight, come into position and the old diff --git a/src/lib/elementary/efl_ui_spotlight_indicator.eo b/src/lib/elementary/efl_ui_spotlight_indicator.eo index c846048203..a680a0e726 100644 --- a/src/lib/elementary/efl_ui_spotlight_indicator.eo +++ b/src/lib/elementary/efl_ui_spotlight_indicator.eo @@ -1,7 +1,7 @@ abstract @beta Efl.Ui.Spotlight.Indicator extends Efl.Object { [[Object used by @Efl.Ui.Spotlight.Container to render an indication of the active widgets' position among the rest of the container's widgets. - + An example would be Android's little dots in the home screen. ]] methods { @@ -19,31 +19,22 @@ abstract @beta Efl.Ui.Spotlight.Indicator extends Efl.Object { } } content_add @pure_virtual { - [[A $subobj has been added at position $index in the bound container. - - The manager should check the container's @Efl.Ui.Spotlight.Container.active_index since indices might have - shifted due to the insertion of the new object. - ]] + [[A $subobj has been added at position $index in the bound container.]] params { subobj : Efl.Gfx.Entity; [[The new object that has been added to the container.]] index : int; [[The index of the new object in the container's list.]] } } content_del @pure_virtual { - [[The $subobj at position $index in the bound container has been removed. - - The manager should check the container's @Efl.Ui.Spotlight.Container.active_index since indices might have - shifted due to the removal of the object. - ]] + [[The $subobj at position $index in the bound container has been removed.]] params { subobj : Efl.Gfx.Entity; [[The object being removed from the container.]] index : int; [[The index this object had in the container's list.]] } } position_update @pure_virtual { - [[This method tells the indicator that @Efl.Ui.Spotlight.Container.active_index has changed in the bound + [[This method tells the indicator that @Efl.Ui.Spotlight.Container.active_element has changed in the bound container. - $position ranges from -1 to the number of views in the bound container (@Efl.Container.content_count). Notice this allows moving to a position before the first view or past the last view, which might happen if the view is thumb-scrolled out-of-bounds. Indicators can choose to render these out-of-bounds positions or not. diff --git a/src/lib/elementary/efl_ui_spotlight_manager.eo b/src/lib/elementary/efl_ui_spotlight_manager.eo index 2257dfeefd..03f0e4fc35 100644 --- a/src/lib/elementary/efl_ui_spotlight_manager.eo +++ b/src/lib/elementary/efl_ui_spotlight_manager.eo @@ -2,11 +2,11 @@ abstract @beta Efl.Ui.Spotlight.Manager extends Efl.Object { [[Manager object used by @Efl.Ui.Spotlight.Container to handle rendering and animation of its sub-widgets, and user interaction. - For instance, changes to the current sub-widget in the spotlight (@Efl.Ui.Spotlight.Container.active_index) can be + For instance, changes to the current sub-widget in the spotlight (@Efl.Ui.Spotlight.Container.active_element) can be animated with a transition. This object can also handle user interaction. For example, dragging the sub-widget to one side to get to a different sub-widget (like an smartphone home screen). - Such user interactions should end up setting a new @Efl.Ui.Spotlight.Container.active_index. + Such user interactions should end up setting a new @Efl.Ui.Spotlight.Container.active_element. During a transition, the evolution of the current position should be exposed by emitting $pos_update events. ]] methods { @@ -24,22 +24,14 @@ abstract @beta Efl.Ui.Spotlight.Manager extends Efl.Object { } } content_add @pure_virtual { - [[A $subobj has been added at position $index in the bound container. - - The manager should check the container's @Efl.Ui.Spotlight.Container.active_index since indices might have - shifted due to the insertion of the new object. - ]] + [[A $subobj has been added at position $index in the bound container.]] params { subobj : Efl.Gfx.Entity; [[The new object that has been added to the container.]] index : int; [[The index of the new object in the container's list.]] } } content_del @pure_virtual { - [[The $subobj at position $index in the bound container has been removed. - - The manager should check the container's @Efl.Ui.Spotlight.Container.active_index since indices might have - shifted due to the removal of the object. - ]] + [[The $subobj at position $index in the bound container has been removed.]] params { subobj : Efl.Gfx.Entity; [[The object being removed from the container.]] index : int; [[The index this object had in the container's list.]] diff --git a/src/lib/elementary/efl_ui_spotlight_manager_plain.c b/src/lib/elementary/efl_ui_spotlight_manager_plain.c index 5bbb5238f4..ec7c3a2782 100644 --- a/src/lib/elementary/efl_ui_spotlight_manager_plain.c +++ b/src/lib/elementary/efl_ui_spotlight_manager_plain.c @@ -10,8 +10,9 @@ typedef struct { Efl_Ui_Spotlight_Container * container; Efl_Gfx_Entity *group; Eina_Size2D page_size; - int current_content; + Efl_Ui_Widget *current_content; Eina_Bool animation; + double last_pos; } Efl_Ui_Spotlight_Manager_Plain_Data; #define MY_CLASS EFL_UI_SPOTLIGHT_MANAGER_PLAIN_CLASS @@ -19,14 +20,17 @@ typedef struct { static void _emit_position(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd) { - double absolut_position = pd->current_content; - efl_event_callback_call(obj, EFL_UI_SPOTLIGHT_MANAGER_EVENT_POS_UPDATE, &absolut_position); + double absolut_position = efl_pack_index_get(pd->container, pd->current_content); + if (pd->last_pos != absolut_position) + efl_event_callback_call(obj, EFL_UI_SPOTLIGHT_MANAGER_EVENT_POS_UPDATE, &absolut_position); + + pd->last_pos = absolut_position; } static void _geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd) { - Efl_Gfx_Entity *entity = efl_pack_content_get(pd->container, pd->current_content); + Efl_Gfx_Entity *entity = pd->current_content; Eina_Rect group_pos = efl_gfx_entity_geometry_get(pd->group); Eina_Rect goal = EINA_RECT_EMPTY(); @@ -58,7 +62,7 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp { if (spotlight && group) { - int index; + Efl_Ui_Widget *index; pd->container = spotlight; pd->group = group; @@ -70,11 +74,11 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp efl_canvas_group_member_add(pd->group, elem); efl_gfx_entity_visible_set(elem, EINA_FALSE); } - index = efl_ui_spotlight_active_index_get(spotlight); - if (index != -1) + index = efl_ui_spotlight_active_element_get(spotlight); + if (index) { pd->current_content = index; - efl_gfx_entity_visible_set(efl_pack_content_get(pd->container, pd->current_content), EINA_TRUE); + efl_gfx_entity_visible_set(pd->current_content, EINA_TRUE); _geom_sync(obj, pd); _emit_position(obj, pd); } @@ -84,15 +88,15 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp static void _content_changed(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd) { - if (efl_ui_spotlight_active_index_get(pd->container) != pd->current_content) + if (efl_ui_spotlight_active_element_get(pd->container) != pd->current_content) { - int old_current_content = pd->current_content; - pd->current_content = efl_ui_spotlight_active_index_get(pd->container); - efl_gfx_entity_visible_set(efl_pack_content_get(pd->container, old_current_content), EINA_FALSE); - efl_gfx_entity_visible_set(efl_pack_content_get(pd->container, pd->current_content), EINA_TRUE); + Efl_Ui_Widget *old_current_content = pd->current_content; + pd->current_content = efl_ui_spotlight_active_element_get(pd->container); + efl_gfx_entity_visible_set(old_current_content, EINA_FALSE); + efl_gfx_entity_visible_set(pd->current_content, EINA_TRUE); _geom_sync(obj, pd); - _emit_position(obj, pd); } + _emit_position(obj, pd); } EOLIAN static void @@ -118,13 +122,13 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_switch_to(Eo *obj, Efl_ if (from_obj) { efl_gfx_entity_visible_set(from_obj, EINA_FALSE); - pd->current_content = -1; + pd->current_content = NULL; } if (to_obj) { efl_gfx_entity_visible_set(to_obj, EINA_TRUE); - pd->current_content = to; + pd->current_content = efl_pack_content_get(pd->container, to); } _emit_position(obj, pd); diff --git a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c b/src/lib/elementary/efl_ui_spotlight_manager_scroll.c index bd0000faa8..e75c3f955f 100644 --- a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c +++ b/src/lib/elementary/efl_ui_spotlight_manager_scroll.c @@ -45,7 +45,7 @@ _apply_box_properties(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd) if (pd->transition.active) current_pos = pd->transition.from + ((double)pd->transition.to - pd->transition.from)*pd->transition.progress; else - current_pos = efl_ui_spotlight_active_index_get(pd->container); + current_pos = efl_pack_index_get(pd->container, efl_ui_spotlight_active_element_get(pd->container)); efl_gfx_entity_geometry_set(pd->foreclip, group_pos); //first calculate the size @@ -106,7 +106,7 @@ _mouse_down_cb(void *data, efl_event_callback_del(pd->container, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _page_set_animation, obj); pd->mouse_move.active = EINA_TRUE; - pd->mouse_move.from = efl_ui_spotlight_active_index_get(pd->container); + pd->mouse_move.from = efl_pack_index_get(pd->container, efl_ui_spotlight_active_element_get(pd->container)); pd->mouse_move.mouse_start = efl_input_pointer_position_get(ev); pd->transition.from = pd->mouse_move.from; @@ -158,7 +158,8 @@ _mouse_up_cb(void *data, double absolut_current_position = (double)pd->transition.from + pd->transition.progress; int result = round(absolut_current_position); - efl_ui_spotlight_active_index_set(pd->container, MIN(MAX(result, 0), efl_content_count(pd->container) - 1)); + Efl_Ui_Widget *new_content = efl_pack_content_get(pd->container, MIN(MAX(result, 0), efl_content_count(pd->container) - 1)); + efl_ui_spotlight_active_element_set(pd->container, new_content); } EFL_CALLBACKS_ARRAY_DEFINE(mouse_listeners, diff --git a/src/lib/elementary/efl_ui_spotlight_manager_stack.c b/src/lib/elementary/efl_ui_spotlight_manager_stack.c index dbef2c200d..18756c0d5f 100644 --- a/src/lib/elementary/efl_ui_spotlight_manager_stack.c +++ b/src/lib/elementary/efl_ui_spotlight_manager_stack.c @@ -151,9 +151,9 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp efl_canvas_group_member_add(pd->group, elem); efl_gfx_entity_visible_set(elem, EINA_FALSE); } - if (efl_ui_spotlight_active_index_get(spotlight) != -1) + if (efl_ui_spotlight_active_element_get(spotlight)) { - pd->content = efl_pack_content_get(pd->container, efl_ui_spotlight_active_index_get(spotlight)); + pd->content = efl_ui_spotlight_active_element_get(spotlight); efl_gfx_entity_visible_set(pd->content, EINA_TRUE); _geom_sync(obj, pd); } diff --git a/src/lib/elementary/efl_ui_tab_bar.c b/src/lib/elementary/efl_ui_tab_bar.c index a988a56b21..05e32cadd1 100644 --- a/src/lib/elementary/efl_ui_tab_bar.c +++ b/src/lib/elementary/efl_ui_tab_bar.c @@ -186,6 +186,7 @@ _efl_ui_tab_bar_efl_pack_linear_pack_end(Eo *obj, Efl_Ui_Tab_Bar_Data *pd, Efl_G EOLIAN static Eina_Bool _efl_ui_tab_bar_efl_pack_linear_pack_before(Eo *obj, Efl_Ui_Tab_Bar_Data *pd, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing) { + EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_pack_index_get(pd->bx, existing) >= 0, EINA_FALSE); EINA_SAFETY_ON_FALSE_RETURN_VAL(_register_item(obj, pd, subobj), EINA_FALSE); return efl_pack_before(pd->bx, subobj, existing); } @@ -193,6 +194,7 @@ _efl_ui_tab_bar_efl_pack_linear_pack_before(Eo *obj, Efl_Ui_Tab_Bar_Data *pd, Ef EOLIAN static Eina_Bool _efl_ui_tab_bar_efl_pack_linear_pack_after(Eo *obj, Efl_Ui_Tab_Bar_Data *pd, Efl_Gfx_Entity *subobj, const Efl_Gfx_Entity *existing) { + EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_pack_index_get(pd->bx, existing) >= 0, EINA_FALSE); EINA_SAFETY_ON_FALSE_RETURN_VAL(_register_item(obj, pd, subobj), EINA_FALSE); return efl_pack_after(pd->bx, subobj, existing); } diff --git a/src/lib/elementary/efl_ui_tab_bar.eo b/src/lib/elementary/efl_ui_tab_bar.eo index 1d27afe62e..996a897b98 100644 --- a/src/lib/elementary/efl_ui_tab_bar.eo +++ b/src/lib/elementary/efl_ui_tab_bar.eo @@ -1,6 +1,11 @@ -class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements Efl.Ui.Single_Selectable, Efl.Pack_Linear +class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base + implements Efl.Ui.Single_Selectable, Efl.Pack_Linear + composite Efl.Pack_Linear, Efl.Pack { - [[Tab Bar class]] + [[A selectable box of items. + + Within one object only one @Efl.Ui.Tab_Bar_Default_Item can be selected at the same time. + ]] methods { } @@ -23,9 +28,4 @@ class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements Efl.Ui.Single_S Efl.Container.content_count; Efl.Container.content_iterate; } - composite { - Efl.Pack_Linear; - Efl.Pack; - Efl.Pack_Linear; - } } diff --git a/src/lib/elementary/efl_ui_tab_bar_default_item.eo b/src/lib/elementary/efl_ui_tab_bar_default_item.eo index 22034d8957..7feb31d981 100644 --- a/src/lib/elementary/efl_ui_tab_bar_default_item.eo +++ b/src/lib/elementary/efl_ui_tab_bar_default_item.eo @@ -1,6 +1,9 @@ class @beta Efl.Ui.Tab_Bar_Default_Item extends Efl.Ui.Default_Item { - [[ A icon that represents the default parts in the appearance of the tab bar. ]] + [[ A icon that represents the default parts in the appearance of the tab bar. + + Setting the icon again after there was a previous one, will trigger an animation. + ]] methods { @property icon { [[Set the content of the default item as a image. diff --git a/src/lib/elementary/efl_ui_tab_page.eo b/src/lib/elementary/efl_ui_tab_page.eo index d13dde7ac6..4b21dc6241 100644 --- a/src/lib/elementary/efl_ui_tab_page.eo +++ b/src/lib/elementary/efl_ui_tab_page.eo @@ -1,6 +1,10 @@ class @beta Efl.Ui.Tab_Page extends Efl.Ui.Layout_Base implements Efl.Content { - [[Tab Page class]] + [[A holder class for setting up a page in the pager. + + The item assosiated with this page can be used to setup a item which will later be displayed in the @Efl.Ui.Tab_Bar + of the @Efl.Ui.Tab_Pager where this page was added to. + ]] methods { @property tab_bar_item { [[Get this page represented as a @Efl.Ui.Tab_Bar_Default_Item diff --git a/src/lib/elementary/efl_ui_tab_pager.c b/src/lib/elementary/efl_ui_tab_pager.c index f1a3dc4059..745a1dcb72 100644 --- a/src/lib/elementary/efl_ui_tab_pager.c +++ b/src/lib/elementary/efl_ui_tab_pager.c @@ -12,24 +12,21 @@ #define MY_CLASS EFL_UI_TAB_PAGER_CLASS static void -_select(Eo *obj, int index) +_select(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Page *page) { - Efl_Ui_Tab_Page *page = efl_pack_content_get(obj, index); - efl_ui_selectable_selected_set(efl_ui_tab_page_tab_bar_item_get(page), EINA_TRUE); } static void _tab_select_cb(void *data, const Efl_Event *event) { - EFL_UI_TAB_PAGER_DATA_GET(data, sd); Efl_Ui_Tab_Bar_Default_Item *selected; - int i = 0; + Efl_Ui_Tab_Page *page; selected = efl_ui_single_selectable_last_selected_get(event->object); - i = efl_pack_index_get(sd->tab_bar, selected); - if (efl_ui_spotlight_active_index_get(data) != i) - efl_ui_spotlight_active_index_set(data, i); + page = efl_parent_get(selected); + if (efl_ui_spotlight_active_element_get(data)) + efl_ui_spotlight_active_element_set(data, page); } EOLIAN static Efl_Canvas_Object * @@ -39,10 +36,10 @@ _efl_ui_tab_pager_tab_bar_get(const Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data * } EOLIAN static void -_efl_ui_tab_pager_efl_ui_spotlight_container_active_index_set(Eo *obj, Efl_Ui_Tab_Pager_Data *sd EINA_UNUSED, int index) +_efl_ui_tab_pager_efl_ui_spotlight_container_active_element_set(Eo *obj, Efl_Ui_Tab_Pager_Data *sd EINA_UNUSED, Efl_Ui_Widget *element) { - efl_ui_spotlight_active_index_set(efl_super(obj, MY_CLASS), index); - _select(obj, index); + efl_ui_spotlight_active_element_set(efl_super(obj, MY_CLASS), element); + _select(obj, element); } EOLIAN static void diff --git a/src/lib/elementary/efl_ui_tab_pager.eo b/src/lib/elementary/efl_ui_tab_pager.eo index e6b10757e6..9f4bb42d4f 100644 --- a/src/lib/elementary/efl_ui_tab_pager.eo +++ b/src/lib/elementary/efl_ui_tab_pager.eo @@ -1,13 +1,18 @@ class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Spotlight.Container { - [[Tab Pager class]] + [[Container for @Efl.Ui.Tab_Page + + This container consists out of a Efl.Ui.Tab_Bar and a place to display the content of the pages. + The items that are generated out of the pages will be displayed in the tab bar of this pager. + ]] methods { @property tab_bar { + [[Tab bar where to add items of the @Efl.Ui.Tab_Page into.]] get { } values { - tab_bar: Efl.Canvas.Object; + tab_bar: Efl.Ui.Tab_Bar; [[Tab bar for the items of the @Efl.Ui.Tab_Page]] } } } @@ -24,6 +29,6 @@ class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Spotlight.Container Efl.Pack_Linear.pack_after; Efl.Pack_Linear.pack_at; Efl.Pack_Linear.pack_unpack_at; - Efl.Ui.Spotlight.Container.active_index { set; } + Efl.Ui.Spotlight.Container.active_element { set; } } } diff --git a/src/lib/elementary/efl_ui_table.c b/src/lib/elementary/efl_ui_table.c index 7ed1635db4..865fc76577 100644 --- a/src/lib/elementary/efl_ui_table.c +++ b/src/lib/elementary/efl_ui_table.c @@ -58,6 +58,14 @@ _on_child_del(void *data, const Efl_Event *event) gi = _efl_ui_table_item_date_get(table, pd, event->object); if (!gi) return; + if ((gi->col == pd->last_col) && (gi->row == pd->last_row)) + pd->linear_recalc = EINA_TRUE; + + if (gi->col + gi->col_span >= pd->cols) + pd->cols_recalc = EINA_TRUE; + if (gi->row + gi->row_span >= pd->rows) + pd->rows_recalc = EINA_TRUE; + pd->items = (Table_Item *) eina_inlist_remove(EINA_INLIST_GET(pd->items), EINA_INLIST_GET(gi)); free(gi); @@ -80,6 +88,7 @@ _efl_ui_table_last_position_get(Eo * obj, Efl_Ui_Table_Data *pd, int *last_col, Table_Item *gi; int col = -1, row = -1; int req_cols, req_rows; + int item_row, item_col; if (!pd->linear_recalc) { @@ -94,17 +103,20 @@ _efl_ui_table_last_position_get(Eo * obj, Efl_Ui_Table_Data *pd, int *last_col, { EINA_INLIST_REVERSE_FOREACH(EINA_INLIST_GET(pd->items), gi) { - if ((gi->row < row) || (req_cols < gi->col) || (req_rows < gi->row)) + item_row = gi->row + gi->row_span - 1; + item_col = gi->col + gi->col_span - 1; + if ((item_row < row) || (req_cols < item_col) || + (req_rows < item_row)) continue; - if (gi->row > row) + if (item_row > row) { - row = gi->row; - col = gi->col; + row = item_row; + col = item_col; } - else if (gi->col > col) + else if (item_col > col) { - col = gi->col; + col = item_col; } } } @@ -112,17 +124,20 @@ _efl_ui_table_last_position_get(Eo * obj, Efl_Ui_Table_Data *pd, int *last_col, { EINA_INLIST_REVERSE_FOREACH(EINA_INLIST_GET(pd->items), gi) { - if ((gi->col < col) || (req_cols < gi->col) || (req_rows < gi->row)) + item_row = gi->row + gi->row_span - 1; + item_col = gi->col + gi->col_span - 1; + if ((item_col < col) || (req_cols < item_col) || + (req_rows < item_row)) continue; - if (gi->col > col) + if (item_col > col) { - col = gi->col; - row = gi->row; + col = item_col; + row = item_row; } - else if (gi->row > row) + else if (item_row > row) { - row = gi->row; + row = item_row; } } } diff --git a/src/lib/elementary/efl_ui_tags.eo b/src/lib/elementary/efl_ui_tags.eo index 6f8c739f06..96f1fb0eb8 100644 --- a/src/lib/elementary/efl_ui_tags.eo +++ b/src/lib/elementary/efl_ui_tags.eo @@ -1,4 +1,6 @@ -class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements Efl.Text, Efl.Ui.Format +class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base + implements Efl.Text, Efl.Ui.Format + composite Efl.Text { [[A widget displaying a list of tags. The user can remove tags by clicking on each tag "close" button and add new tags by typing text in the text @@ -61,7 +63,4 @@ class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements Efl.Text, Efl.Ui.F /* FIXME: Not future-proof */ expand,state,changed: int; [[Called when expanded state changed]] } - composite { - Efl.Text; - } } diff --git a/src/lib/elementary/efl_ui_text.eo b/src/lib/elementary/efl_ui_text.eo index a8cee69e40..691c0271bd 100644 --- a/src/lib/elementary/efl_ui_text.eo +++ b/src/lib/elementary/efl_ui_text.eo @@ -4,6 +4,8 @@ import elm_general; class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickable, Efl.Access.Text, Efl.Access.Editable.Text, Efl.File, Efl.Ui.Text_Selectable, Efl.Text_Interactive, Efl.Text_Markup + composite + Efl.Text_Interactive, Efl.Text_Markup { [[A flexible text widget which can be static (as a label) or editable by the user (as a text entry). It provides all sorts of editing facilities @@ -374,8 +376,4 @@ class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickabl anchor,up: Elm.Entry_Anchor_Info; [[called on anchor up]] cursor,changed,manual: void; [[Called on manual cursor change]] } - composite { - Efl.Text_Interactive; - Efl.Text_Markup; - } } diff --git a/src/lib/elementary/efl_ui_video.eo b/src/lib/elementary/efl_ui_video.eo index d6b42f9abb..c00326ef30 100644 --- a/src/lib/elementary/efl_ui_video.eo +++ b/src/lib/elementary/efl_ui_video.eo @@ -1,4 +1,6 @@ -class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, Efl.Player, Efl.Access.Widget.Action +class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base + implements Efl.File, Efl.Player, Efl.Access.Widget.Action + composite Efl.Player { [[Efl UI video class]] methods { @@ -50,7 +52,4 @@ class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, Efl.Pla Efl.Player.stop; Efl.Player.play { get; set; } } - composite { - Efl.Player; - } } diff --git a/src/lib/elementary/efl_ui_view_model.eo b/src/lib/elementary/efl_ui_view_model.eo index 83a3e781b0..c09ae516e6 100644 --- a/src/lib/elementary/efl_ui_view_model.eo +++ b/src/lib/elementary/efl_ui_view_model.eo @@ -12,7 +12,7 @@ function @beta EflUiViewModelPropertySet { params { @in view_model: Efl.Ui.View_Model; [[The ViewModel object the @.property.set is issued on.]] @in property: stringshare; [[The property name the @.property.set is issued on.]] - @in value: any_value_ptr @owned; [[The new value to set.]] + @in value: any_value_ptr @move; [[The new value to set.]] } return: future; [[The value that was finally set.]] }; diff --git a/src/lib/elementary/efl_ui_widget_focus_manager.eo b/src/lib/elementary/efl_ui_widget_focus_manager.eo index e5cc1a2691..d12a4a0c79 100644 --- a/src/lib/elementary/efl_ui_widget_focus_manager.eo +++ b/src/lib/elementary/efl_ui_widget_focus_manager.eo @@ -1,4 +1,7 @@ -mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Manager +mixin Efl.Ui.Widget_Focus_Manager + requires Efl.Ui.Widget + extends Efl.Ui.Focus.Manager + composite Efl.Ui.Focus.Manager { [[Helper mixin for widgets which also can act as focus managers. @@ -23,7 +26,4 @@ mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Ma Efl.Object.destructor; Efl.Ui.Widget.focus_state_apply; } - composite { - Efl.Ui.Focus.Manager; - } } diff --git a/src/lib/elementary/efl_ui_win.eo b/src/lib/elementary/efl_ui_win.eo index 42c309dfb6..94859d9277 100644 --- a/src/lib/elementary/efl_ui_win.eo +++ b/src/lib/elementary/efl_ui_win.eo @@ -139,6 +139,7 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements Efl.Canvas.Scene, Efl.Access.W Efl.Content, Efl.Input.State, Efl.Input.Interface, Efl.Screen, Efl.Text, Efl.Config, Efl.Ui.Widget_Focus_Manager, Efl.Ui.Focus.Manager_Window_Root + composite Efl.Config { [[Efl UI window class. @@ -895,7 +896,4 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements Efl.Canvas.Scene, Efl.Access.W pause: void; [[Called when the window is not going be displayed for some time]] resume: void; [[Called before a window is rendered after a pause event]] } - composite { - Efl.Config; - } } diff --git a/src/lib/eo/efl_object.eo b/src/lib/eo/efl_object.eo index 5ec9d5c2af..7a024bf01f 100644 --- a/src/lib/eo/efl_object.eo +++ b/src/lib/eo/efl_object.eo @@ -348,7 +348,7 @@ abstract Efl.Object } children_iterator_new { [[Get an iterator on all childrens]] - return: iterator @owned @no_unused; [[Children iterator]] + return: iterator @move @no_unused; [[Children iterator]] } composite_attach @beta { [[Make an object a composite object of another. diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h index 96e385952f..e95258d420 100644 --- a/src/lib/eolian/eo_lexer.h +++ b/src/lib/eolian/eo_lexer.h @@ -36,7 +36,7 @@ enum Tokens KWAT(auto), KWAT(beta), KWAT(by_ref), KWAT(c_name), KWAT(const), \ KWAT(empty), KWAT(extern), KWAT(free), KWAT(hot), KWAT(in), KWAT(inout), \ KWAT(move), KWAT(no_unused), KWAT(nullable), KWAT(optional), KWAT(out), \ - KWAT(owned), KWAT(private), KWAT(property), KWAT(protected), KWAT(restart), \ + KWAT(private), KWAT(property), KWAT(protected), KWAT(restart), \ KWAT(pure_virtual), KWAT(static), \ \ KWH(version), \ diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 04a16c2502..3786dcc198 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -525,7 +525,6 @@ parse_struct(Eo_Lexer *ls, const char *name, Eina_Bool is_extern, fdef->by_ref = EINA_TRUE; eo_lexer_get(ls); break; - case KW_at_owned: case KW_at_move: CASE_LOCK(ls, owned, "owned qualifier"); fdef->type->owned = fdef->move = EINA_TRUE; @@ -774,14 +773,14 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ptr) def->base_type = eo_lexer_type_release(ls, parse_type(ls, EINA_TRUE)); /* view-only types are not allowed to own the contents */ if (tpid == KW_array || tpid == KW_hash || tpid == KW_list || tpid == KW_future) - if ((def->base_type->owned = def->base_type->move = (ls->t.kw == KW_at_owned || ls->t.kw == KW_at_move))) + if ((def->base_type->owned = def->base_type->move = ls->t.kw == KW_at_move)) eo_lexer_get(ls); if (tpid == KW_hash) { check_next(ls, ','); def->base_type->next_type = eo_lexer_type_release(ls, parse_type(ls, EINA_TRUE)); - if ((def->base_type->next_type->owned = def->base_type->next_type->move = (ls->t.kw == KW_at_owned || ls->t.kw == KW_at_move))) + if ((def->base_type->next_type->owned = def->base_type->next_type->move = ls->t.kw == KW_at_move)) eo_lexer_get(ls); } check_match(ls, '>', '<', bline, bcol); @@ -1058,7 +1057,6 @@ parse_return(Eo_Lexer *ls, Eo_Ret_Def *ret, Eina_Bool allow_void, ret->no_unused = EINA_TRUE; eo_lexer_get(ls); break; - case KW_at_owned: case KW_at_move: CASE_LOCK(ls, owned, "owned qualifier"); ret->owned = EINA_TRUE; @@ -1130,7 +1128,6 @@ parse_param(Eo_Lexer *ls, Eina_List **params, Eina_Bool allow_inout, par->optional = EINA_TRUE; eo_lexer_get(ls); break; - case KW_at_owned: case KW_at_move: CASE_LOCK(ls, owned, "owned qualifier"); par->type->owned = par->move = EINA_TRUE; @@ -1958,43 +1955,6 @@ parse_parts(Eo_Lexer *ls) check_match(ls, '}', '{', line, col); } -static void -parse_composite(Eo_Lexer *ls) -{ - int line, col; - if (ls->klass->type == EOLIAN_CLASS_INTERFACE) - eo_lexer_syntax_error(ls, "composite section not allowed in interfaces"); - eo_lexer_get(ls); - line = ls->line_number, col = ls->column; - check_next(ls, '{'); - while (ls->t.token != '}') - { - Eina_Strbuf *buf = eina_strbuf_new(); - eo_lexer_dtor_push(ls, EINA_FREE_CB(eina_strbuf_free), buf); - eo_lexer_context_push(ls); - parse_name(ls, buf); - const char *nm = eina_strbuf_string_get(buf); - char *fnm = database_class_to_filename(nm); - if (!eina_hash_find(ls->state->filenames_eo, fnm)) - { - free(fnm); - char ebuf[PATH_MAX]; - eo_lexer_context_restore(ls); - snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm); - eo_lexer_syntax_error(ls, ebuf); - return; - } - /* do not introduce a dependency */ - database_defer(ls->state, fnm, EINA_FALSE); - free(fnm); - ls->klass->composite = eina_list_append(ls->klass->composite, - eina_stringshare_add(nm)); - eo_lexer_dtor_pop(ls); - check_next(ls, ';'); - } - check_match(ls, '}', '{', line, col); -} - static void parse_implements(Eo_Lexer *ls, Eina_Bool iface) { @@ -2065,7 +2025,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type) has_data = EINA_FALSE, has_methods = EINA_FALSE, has_parts = EINA_FALSE, - has_composite = EINA_FALSE, has_implements = EINA_FALSE, has_constructors = EINA_FALSE, has_events = EINA_FALSE; @@ -2112,10 +2071,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type) CASE_LOCK(ls, parts, "parts definition") parse_parts(ls); break; - case KW_composite: - CASE_LOCK(ls, composite, "composite definition") - parse_composite(ls); - break; case KW_implements: CASE_LOCK(ls, implements, "implements definition") parse_implements(ls, type == EOLIAN_CLASS_INTERFACE); @@ -2199,19 +2154,73 @@ _requires_add(Eo_Lexer *ls, Eina_Strbuf *buf) { const char *required; char *fnm; + Eina_List *l; + const char *oname; + char ebuf[PATH_MAX]; + eina_strbuf_reset(buf); eo_lexer_context_push(ls); parse_name(ls, buf); - required = eina_strbuf_string_get(buf); + required = eina_stringshare_add(eina_strbuf_string_get(buf)); + + EINA_LIST_FOREACH(ls->klass->requires, l, oname) + if (required == oname) + { + eo_lexer_context_restore(ls); + eina_stringshare_del(required); + snprintf(ebuf, sizeof(ebuf), "duplicate entry '%s'", oname); + eo_lexer_syntax_error(ls, ebuf); + return; + } + fnm = database_class_to_filename(required); - ls->klass->requires = eina_list_append(ls->klass->requires, eina_stringshare_add(required)); + ls->klass->requires = eina_list_append(ls->klass->requires, required); database_defer(ls->state, fnm, EINA_TRUE); eo_lexer_context_pop(ls); free(fnm); } +static void +_composite_add(Eo_Lexer *ls, Eina_Strbuf *buf) +{ + const char *oname; + char ebuf[PATH_MAX]; + Eina_List *l; + + eina_strbuf_reset(buf); + eo_lexer_context_push(ls); + parse_name(ls, buf); + const char *nm = eina_stringshare_add(eina_strbuf_string_get(buf)); + + EINA_LIST_FOREACH(ls->klass->composite, l, oname) + if (nm == oname) + { + eo_lexer_context_restore(ls); + snprintf(ebuf, sizeof(ebuf), "duplicate entry '%s'", nm); + eina_stringshare_del(nm); + eo_lexer_syntax_error(ls, ebuf); + return; + } + + char *fnm = database_class_to_filename(nm); + if (!eina_hash_find(ls->state->filenames_eo, fnm)) + { + free(fnm); + eo_lexer_context_restore(ls); + snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm); + eina_stringshare_del(nm); + eo_lexer_syntax_error(ls, ebuf); + return; + } + /* do not introduce a dependency */ + database_defer(ls->state, fnm, EINA_FALSE); + free(fnm); + ls->klass->composite = eina_list_append(ls->klass->composite, nm); + eo_lexer_context_pop(ls); +} + static void parse_class(Eo_Lexer *ls, Eolian_Class_Type type) { @@ -2312,6 +2321,17 @@ tags_done: _inherit_dep(ls, ibuf, EINA_FALSE); while (test_next(ls, ',')); } + + if (ls->t.kw == KW_composite) + { + if (type == EOLIAN_CLASS_INTERFACE) + eo_lexer_syntax_error(ls, "composite not allowed in interfaces"); + eo_lexer_get(ls); + do + _composite_add(ls, ibuf); + while (test_next(ls, ',')); + } + eo_lexer_dtor_pop(ls); } inherit_done: diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp b/src/lib/eolian_cxx/grammar/klass_def.hpp index 47afbfedb8..fbd8779e0f 100644 --- a/src/lib/eolian_cxx/grammar/klass_def.hpp +++ b/src/lib/eolian_cxx/grammar/klass_def.hpp @@ -452,7 +452,7 @@ inline void type_def::set(Eolian_Type const* eolian_type, Eolian_Unit const* uni switch( ::eolian_type_type_get(eolian_type)) { case EOLIAN_TYPE_VOID: - original_type = attributes::regular_type_def{"void", {qualifiers(eolian_type), {}}, {}}; + original_type = attributes::regular_type_def{"void", {qualifiers(eolian_type, is_moved), {}}, {}}; break; case EOLIAN_TYPE_REGULAR: if (!stp) @@ -474,12 +474,12 @@ inline void type_def::set(Eolian_Type const* eolian_type, Eolian_Unit const* uni for(efl::eina::iterator namespace_iterator( ::eolian_type_namespaces_get(eolian_type)) , namespace_last; namespace_iterator != namespace_last; ++namespace_iterator) namespaces.push_back(&*namespace_iterator); - original_type = {regular_type_def{ ::eolian_type_short_name_get(eolian_type), {qualifiers(eolian_type), {}}, namespaces, type_type, is_undefined}}; + original_type = {regular_type_def{ ::eolian_type_short_name_get(eolian_type), {qualifiers(eolian_type, is_moved), {}}, namespaces, type_type, is_undefined}}; } else { complex_type_def complex - {{::eolian_type_short_name_get(eolian_type), {qualifiers(eolian_type), {}}, {}}, {}}; + {{::eolian_type_short_name_get(eolian_type), {qualifiers(eolian_type, is_moved), {}}, {}}, {}}; while (stp) { complex.subtypes.push_back({stp, unit, EOLIAN_C_TYPE_DEFAULT, eolian_type_is_move(stp)}); @@ -491,7 +491,7 @@ inline void type_def::set(Eolian_Type const* eolian_type, Eolian_Unit const* uni case EOLIAN_TYPE_CLASS: { Eolian_Class const* klass = eolian_type_class_get(eolian_type); - original_type = klass_name(klass, {qualifiers(eolian_type), {}}); + original_type = klass_name(klass, {qualifiers(eolian_type, is_moved), {}}); } break; default: diff --git a/src/lib/eolian_cxx/grammar/qualifier_def.hpp b/src/lib/eolian_cxx/grammar/qualifier_def.hpp index 33e3ed5125..cab3ca8667 100644 --- a/src/lib/eolian_cxx/grammar/qualifier_def.hpp +++ b/src/lib/eolian_cxx/grammar/qualifier_def.hpp @@ -72,9 +72,9 @@ inline qualifier_bool operator^(qualifier_bool lhs, qualifier_info rhs) return lhs; } -inline qualifier_info qualifiers(Eolian_Type const* type) +inline qualifier_info qualifiers(Eolian_Type const* type, bool is_moved) { - qualifier_info is_own = ::eolian_type_is_owned(type) ? qualifier_info::is_own : qualifier_info::is_none; + qualifier_info is_own = is_moved ? qualifier_info::is_own : qualifier_info::is_none; qualifier_info is_const = ::eolian_type_is_const(type) ? qualifier_info::is_const : qualifier_info::is_none; qualifier_info is_ref = ::eolian_type_is_ptr(type) ? qualifier_info::is_ref : qualifier_info::is_none; return is_own | is_const | is_ref; diff --git a/src/lib/evas/canvas/efl_canvas_group.eo b/src/lib/evas/canvas/efl_canvas_group.eo index 858277e164..f129ce056d 100644 --- a/src/lib/evas/canvas/efl_canvas_group.eo +++ b/src/lib/evas/canvas/efl_canvas_group.eo @@ -57,7 +57,7 @@ class Efl.Canvas.Group extends Efl.Canvas.Object from both the @Efl.Object children list as well as the @Efl.Container content list. ]] - return: iterator @owned; + return: iterator @move; [[Iterator to object children]] } group_member_add { diff --git a/src/lib/evas/canvas/efl_canvas_text.eo b/src/lib/evas/canvas/efl_canvas_text.eo index bc206cffc0..511dec2587 100644 --- a/src/lib/evas/canvas/efl_canvas_text.eo +++ b/src/lib/evas/canvas/efl_canvas_text.eo @@ -136,7 +136,7 @@ class @beta Efl.Canvas.Text extends Efl.Canvas.Object implements Efl.Text, range_text_get @const { [[Returns the text in the range between $cur1 and $cur2. ]] - return: mstring @owned; [[The text in the given range]] + return: mstring @move; [[The text in the given range]] params { @in cur1: ptr(const(Efl.Text_Cursor_Cursor)); [[Start of range]] @in cur2: ptr(const(Efl.Text_Cursor_Cursor)); [[End of range]] @@ -152,7 +152,7 @@ class @beta Efl.Canvas.Text extends Efl.Canvas.Object implements Efl.Text, @in cur1: ptr(const(Efl.Text_Cursor_Cursor)); [[Start of range]] @in cur2: ptr(const(Efl.Text_Cursor_Cursor)); [[End of range]] } - return: iterator @owned; [[ + return: iterator @move; [[ Iterator on all geoemtries of the given range ]] } @@ -167,7 +167,7 @@ class @beta Efl.Canvas.Text extends Efl.Canvas.Object implements Efl.Text, @in cur1: ptr(const(Efl.Text_Cursor_Cursor)); [[Start of range]] @in cur2: ptr(const(Efl.Text_Cursor_Cursor)); [[End of range]] } - return: iterator @owned; [[ + return: iterator @move; [[ Iterator on all simple geometries of the given range ]] } @@ -222,7 +222,7 @@ class @beta Efl.Canvas.Text extends Efl.Canvas.Object implements Efl.Text, Once layout is complete, the result is returned as @Eina.Rect, with w, h fields set. ]] - return: future @owned; [[Future for layout result]] + return: future @move; [[Future for layout result]] } } implements { diff --git a/src/lib/evas/canvas/efl_canvas_text_factory.eo b/src/lib/evas/canvas/efl_canvas_text_factory.eo index 51ca68b92b..13d593ea0e 100644 --- a/src/lib/evas/canvas/efl_canvas_text_factory.eo +++ b/src/lib/evas/canvas/efl_canvas_text_factory.eo @@ -17,7 +17,7 @@ interface @beta Efl.Canvas.Text_Factory object: Efl.Canvas.Object; [[The parent of the created object]] key: string; [[Key that is associated to an item object]] } - return: Efl.Canvas.Object @owned; + return: Efl.Canvas.Object @move; } } } diff --git a/src/lib/evas/canvas/efl_canvas_vg_container.eo b/src/lib/evas/canvas/efl_canvas_vg_container.eo index 7b1397d447..0290cf4848 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_container.eo +++ b/src/lib/evas/canvas/efl_canvas_vg_container.eo @@ -11,7 +11,7 @@ class @beta Efl.Canvas.Vg.Container extends Efl.Canvas.Vg.Node } children_get { [[Get all children of container]] - return: iterator @owned @no_unused; [[Iterator to children]] + return: iterator @move @no_unused; [[Iterator to children]] } } implements { diff --git a/src/modules/evas/image_loaders/xpm/evas_image_load_xpm.c b/src/modules/evas/image_loaders/xpm/evas_image_load_xpm.c index d7aa25ded3..5ac8c87c55 100644 --- a/src/modules/evas/image_loaders/xpm/evas_image_load_xpm.c +++ b/src/modules/evas/image_loaders/xpm/evas_image_load_xpm.c @@ -2221,7 +2221,7 @@ static Evas_Image_Load_Func evas_image_load_xpm_func = NULL, (void*) evas_image_load_file_data_xpm, NULL, - EINA_FALSE, + EINA_TRUE, EINA_FALSE }; diff --git a/src/tests/efl_mono/Errors.cs b/src/tests/efl_mono/Errors.cs index 802ac337c0..9229ad0a60 100644 --- a/src/tests/efl_mono/Errors.cs +++ b/src/tests/efl_mono/Errors.cs @@ -99,7 +99,7 @@ class TestEolianError // the managed code var obj = new Dummy.TestObject(); Listener listener = new Listener(); - obj.EvtWithIntEvt += listener.callback; + obj.EvtWithIntEvent += listener.callback; Test.AssertRaises(() => { obj.EmitEventWithInt(2); }); } diff --git a/src/tests/efl_mono/Events.cs b/src/tests/efl_mono/Events.cs index b664e2bbbd..d7da6f6c98 100644 --- a/src/tests/efl_mono/Events.cs +++ b/src/tests/efl_mono/Events.cs @@ -30,7 +30,7 @@ class TestEoEvents loop.SetName("loop"); TestEoEvents listener = new TestEoEvents(); listener.loop = loop; - loop.IdleEvt += listener.callback; + loop.IdleEvent += listener.callback; Test.Assert(!listener.called); Test.Assert(!listener.correct_sender); @@ -46,7 +46,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); string received_string = null; - obj.EvtWithStringEvt += (object sender, Dummy.TestObjectEvtWithStringEvt_Args e) => { + obj.EvtWithStringEvent += (object sender, Dummy.TestObjectEvtWithStringEventArgs e) => { received_string = e.arg; }; @@ -60,7 +60,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); int received_int= 0; - obj.EvtWithIntEvt += (object sender, Dummy.TestObjectEvtWithIntEvt_Args e) => { + obj.EvtWithIntEvent += (object sender, Dummy.TestObjectEvtWithIntEventArgs e) => { received_int = e.arg; }; @@ -74,7 +74,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); bool received_bool = false; - obj.EvtWithBoolEvt += (object sender, Dummy.TestObjectEvtWithBoolEvt_Args e) => { + obj.EvtWithBoolEvent += (object sender, Dummy.TestObjectEvtWithBoolEventArgs e) => { received_bool = e.arg; }; @@ -91,7 +91,7 @@ class TestEoEvents { var obj = new Dummy.TestObject(); uint received_uint = 0; - obj.EvtWithUintEvt += (object sender, Dummy.TestObjectEvtWithUintEvt_Args e) => { + obj.EvtWithUintEvent += (object sender, Dummy.TestObjectEvtWithUintEventArgs e) => { received_uint = e.arg; }; @@ -104,7 +104,7 @@ class TestEoEvents { var obj = new Dummy.TestObject(); float received_float = 0; - obj.EvtWithFloatEvt += (object sender, Dummy.TestObjectEvtWithFloatEvt_Args e) => { + obj.EvtWithFloatEvent += (object sender, Dummy.TestObjectEvtWithFloatEventArgs e) => { received_float = e.arg; }; @@ -118,7 +118,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); double received_double = 0; double reference = float.MaxValue + 42; - obj.EvtWithDoubleEvt += (object sender, Dummy.TestObjectEvtWithDoubleEvt_Args e) => { + obj.EvtWithDoubleEvent += (object sender, Dummy.TestObjectEvtWithDoubleEventArgs e) => { received_double = e.arg; }; @@ -132,7 +132,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); Dummy.TestObject received_obj = null; - obj.EvtWithObjEvt += (object sender, Dummy.TestObjectEvtWithObjEvt_Args e) => { + obj.EvtWithObjEvent += (object sender, Dummy.TestObjectEvtWithObjEventArgs e) => { received_obj = e.arg; }; @@ -148,7 +148,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); Eina.Error received_error = 0; - obj.EvtWithErrorEvt += (object sender, Dummy.TestObjectEvtWithErrorEvt_Args e) => { + obj.EvtWithErrorEvent += (object sender, Dummy.TestObjectEvtWithErrorEventArgs e) => { received_error = e.arg; }; @@ -164,7 +164,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); Dummy.StructSimple received_struct = default(Dummy.StructSimple); - obj.EvtWithStructEvt += (object sender, Dummy.TestObjectEvtWithStructEvt_Args e) => { + obj.EvtWithStructEvent += (object sender, Dummy.TestObjectEvtWithStructEventArgs e) => { received_struct = e.arg; }; @@ -181,7 +181,7 @@ class TestEoEvents var obj = new Dummy.TestObject(); Dummy.StructComplex received_struct = default(Dummy.StructComplex); - obj.EvtWithStructComplexEvt += (object sender, Dummy.TestObjectEvtWithStructComplexEvt_Args e) => { + obj.EvtWithStructComplexEvent += (object sender, Dummy.TestObjectEvtWithStructComplexEventArgs e) => { received_struct = e.arg; }; @@ -202,7 +202,7 @@ class TestEoEvents sent.Append("Def"); sent.Append("Ghi"); - obj.EvtWithArrayEvt += (object sender, Dummy.TestObjectEvtWithArrayEvt_Args e) => { + obj.EvtWithArrayEvent += (object sender, Dummy.TestObjectEvtWithArrayEventArgs e) => { received = e.arg; }; @@ -222,16 +222,16 @@ class TestEventAddRemove var obj = new Dummy.TestObject(); bool called = true; - EventHandler evtCb = (object sender, Dummy.TestObjectEvtWithIntEvt_Args e) => { + EventHandler evtCb = (object sender, Dummy.TestObjectEvtWithIntEventArgs e) => { called = true; }; - obj.EvtWithIntEvt += evtCb; + obj.EvtWithIntEvent += evtCb; obj.EmitEventWithInt(42); Test.Assert(called); called = false; - obj.EvtWithIntEvt -= evtCb; + obj.EvtWithIntEvent -= evtCb; obj.EmitEventWithInt(42); Test.Assert(!called); } @@ -248,7 +248,7 @@ class TestInterfaceEvents called = true; }; - obj.NonconflictedEvt += cb; + obj.NonconflictedEvent += cb; obj.EmitNonconflicted(); Test.Assert(called); } @@ -266,7 +266,7 @@ class TestEventNaming test_called = true; }; - obj.EvtWithUnderEvt += cb; + obj.EvtWithUnderEvent += cb; obj.EmitEventWithUnder(); @@ -279,12 +279,12 @@ class TestEventWithDeadWrappers { private static WeakReference AttachToManager(Dummy.EventManager manager, - EventHandler cb) + EventHandler cb) { var obj = new Dummy.TestObject(); manager.Emitter = obj; - obj.EvtWithIntEvt += cb; + obj.EvtWithIntEvent += cb; return new WeakReference(obj); } @@ -298,7 +298,7 @@ class TestEventWithDeadWrappers int received = -1; // attach to evt with int - EventHandler cb = (object sender, Dummy.TestObjectEvtWithIntEvt_Args args) => { + EventHandler cb = (object sender, Dummy.TestObjectEvtWithIntEventArgs args) => { callbackCalled = true; received = args.arg; Test.Assert(Object.ReferenceEquals(sender, wref.Target)); diff --git a/src/tests/efl_mono/Model.cs b/src/tests/efl_mono/Model.cs index a43d9da51c..4ec6ef3f0b 100644 --- a/src/tests/efl_mono/Model.cs +++ b/src/tests/efl_mono/Model.cs @@ -66,7 +66,7 @@ public class TestModel { string propertyBound = null; bool callbackCalled = false; var factory = new Efl.Ui.ItemFactory(); - factory.PropertyBoundEvt += (object sender, Efl.Ui.IPropertyBindPropertyBoundEvt_Args args) => { + factory.PropertyBoundEvent += (object sender, Efl.Ui.PropertyBindPropertyBoundEventArgs args) => { propertyBound = args.arg; callbackCalled = true; }; diff --git a/src/tests/elementary/efl_ui_test_spotlight.c b/src/tests/elementary/efl_ui_test_spotlight.c index 0bad5c362f..9749258273 100644 --- a/src/tests/elementary/efl_ui_test_spotlight.c +++ b/src/tests/elementary/efl_ui_test_spotlight.c @@ -21,13 +21,13 @@ typedef struct { int called; Efl_Gfx_Entity *subobj; int index; - int current_page_at_call; + Efl_Ui_Widget *current_page_at_call; } content_del; struct { int called; Efl_Gfx_Entity *subobj; int index; - int current_page_at_call; + Efl_Ui_Widget *current_page_at_call; } content_add; struct { int called; @@ -43,7 +43,7 @@ _indicator_content_del(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Gfx_Entity indicator_calls.content_del.called ++; indicator_calls.content_del.subobj = subobj; indicator_calls.content_del.index = index; - indicator_calls.content_del.current_page_at_call = efl_ui_spotlight_active_index_get(container); + indicator_calls.content_del.current_page_at_call = efl_ui_spotlight_active_element_get(container); } static void @@ -52,7 +52,7 @@ _indicator_content_add(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Gfx_Entity indicator_calls.content_add.called ++; indicator_calls.content_add.subobj = subobj; indicator_calls.content_add.index = index; - indicator_calls.content_add.current_page_at_call = efl_ui_spotlight_active_index_get(container); + indicator_calls.content_add.current_page_at_call = efl_ui_spotlight_active_element_get(container); } static void @@ -92,13 +92,13 @@ typedef struct { int called; Efl_Gfx_Entity *subobj; int index; - int current_page_at_call; + Efl_Ui_Widget *current_page_at_call; } content_del; struct { int called; Efl_Gfx_Entity *subobj; int index; - int current_page_at_call; + Efl_Ui_Widget *current_page_at_call; } content_add; struct { int called; @@ -125,7 +125,9 @@ Transition_Calls transition_calls = { 0 }; static void _emit_pos(Eo *obj, double d) { + printf("EMITTING %f %f\n", d, transition_calls.last_position); if (d == transition_calls.last_position) return; + efl_event_callback_call(obj, EFL_UI_SPOTLIGHT_MANAGER_EVENT_POS_UPDATE, &d); transition_calls.last_position = d; } @@ -136,9 +138,9 @@ _transition_content_add(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Gfx_Entit transition_calls.content_add.called ++; transition_calls.content_add.subobj = subobj; transition_calls.content_add.index = index; - transition_calls.content_add.current_page_at_call = efl_ui_spotlight_active_index_get(container); + transition_calls.content_add.current_page_at_call = efl_ui_spotlight_active_element_get(container); - int i = efl_ui_spotlight_active_index_get(container); + int i = efl_pack_index_get(container, efl_ui_spotlight_active_element_get(container)); if (i != -1) _emit_pos(obj, i); } @@ -149,9 +151,9 @@ _transition_content_del(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Gfx_Entit transition_calls.content_del.called ++; transition_calls.content_del.subobj = subobj; transition_calls.content_del.index = index; - transition_calls.content_del.current_page_at_call = efl_ui_spotlight_active_index_get(container); + transition_calls.content_del.current_page_at_call = efl_ui_spotlight_active_element_get(container); - int i = efl_ui_spotlight_active_index_get(container); + int i = efl_pack_index_get(container, efl_ui_spotlight_active_element_get(container)); if (i != -1) _emit_pos(obj, i); } @@ -224,7 +226,7 @@ EFL_START_TEST (efl_ui_spotlight_init) Eina_Size2D s = efl_ui_spotlight_size_get(container); ck_assert_int_eq(s.w, 0); //FIXME ck_assert_int_eq(s.h, 0); //FIXME - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), -1); + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), NULL); } EFL_END_TEST @@ -232,17 +234,23 @@ EFL_START_TEST (efl_ui_spotlight_active_index) { Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win); efl_pack(container, w); - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), 0); - for (int i = -20; i < 20; ++i) - { - if (i == 0) continue; - EXPECT_ERROR_START; - efl_ui_spotlight_active_index_set(container, i); - EXPECT_ERROR_END; - } + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), w); + EXPECT_ERROR_START; + efl_ui_spotlight_active_element_set(container, 0x0); + EXPECT_ERROR_END; + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), w); + EXPECT_ERROR_START; + efl_ui_spotlight_active_element_set(container, (void*)0xAFFE); + EXPECT_ERROR_END; + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), w); + EXPECT_ERROR_START; + efl_ui_spotlight_active_element_set(container, efl_main_loop_get()); + EXPECT_ERROR_END; + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), w); + efl_del(w); - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), -1); + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), NULL); } EFL_END_TEST @@ -280,7 +288,7 @@ EFL_START_TEST (efl_ui_smart_transition_calls) ck_assert_int_eq(transition_calls.content_add.called, 1); ck_assert_int_eq(transition_calls.content_add.index, 0); ck_assert_ptr_eq(transition_calls.content_add.subobj, w); - ck_assert_int_eq(transition_calls.content_add.current_page_at_call, -1); + ck_assert_ptr_eq(transition_calls.content_add.current_page_at_call, NULL); ck_assert_int_eq(transition_calls.content_del.called, 0); transition_calls.content_add.called = 0; transition_calls.request_switch.called = 0; @@ -293,11 +301,11 @@ EFL_START_TEST (efl_ui_smart_transition_calls) ck_assert_int_eq(transition_calls.content_add.called, 1); ck_assert_int_eq(transition_calls.content_add.index, 0); ck_assert_ptr_eq(transition_calls.content_add.subobj, w1); - ck_assert_int_eq(transition_calls.content_add.current_page_at_call, 1); + ck_assert_ptr_eq(transition_calls.content_add.current_page_at_call, w); ck_assert_int_eq(transition_calls.content_del.called, 0); transition_calls.content_add.called = 0; transition_calls.request_switch.called = 0; - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), 1); + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), w); //new object, must update the content and a not update current page efl_pack_end(container, w2); @@ -307,13 +315,13 @@ EFL_START_TEST (efl_ui_smart_transition_calls) ck_assert_int_eq(transition_calls.content_add.called, 1); ck_assert_int_eq(transition_calls.content_add.index, 2); ck_assert_ptr_eq(transition_calls.content_add.subobj, w2); - ck_assert_int_eq(transition_calls.content_add.current_page_at_call, 1); + ck_assert_ptr_eq(transition_calls.content_add.current_page_at_call, w); ck_assert_int_eq(transition_calls.content_del.called, 0); transition_calls.content_add.called = 0; - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), 1); + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), w); //page change must result in a call to request a switch - efl_ui_spotlight_active_index_set(container, 2); + efl_ui_spotlight_active_element_set(container, w2); ck_assert_int_eq(transition_calls.spotlight.called, 0); ck_assert_int_eq(transition_calls.page_size.called, 0); ck_assert_int_eq(transition_calls.request_switch.called, 1); @@ -332,7 +340,7 @@ EFL_START_TEST (efl_ui_smart_transition_calls) ck_assert_int_eq(transition_calls.content_del.called, 1); ck_assert_int_eq(transition_calls.content_del.index, 1); ck_assert_ptr_eq(transition_calls.content_del.subobj, w); - ck_assert_int_eq(transition_calls.content_del.current_page_at_call, 1); + ck_assert_ptr_eq(transition_calls.content_del.current_page_at_call, w2); transition_calls.content_del.called = 0; } EFL_END_TEST @@ -486,7 +494,7 @@ _verify_transition_start_end_events(void) ck_assert_int_eq(end.from, -8); EV_RESET - efl_ui_spotlight_active_index_set(container, 2); + efl_ui_spotlight_active_element_set(container, w2); ck_assert_int_eq(start.to, 2); ck_assert_int_eq(end.to, 2); ck_assert_int_eq(start.from, 1); @@ -511,7 +519,7 @@ EFL_START_TEST (efl_ui_spotlight_test_push1) Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win); efl_ui_spotlight_push(container, w); ck_assert_int_eq(efl_pack_index_get(container, w), 0); - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), 0); + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), efl_pack_content_get(container, 0)); } EFL_END_TEST @@ -521,13 +529,13 @@ EFL_START_TEST (efl_ui_spotlight_test_push2) { Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win); efl_pack_end(container, w); + if (i == 3) + efl_ui_spotlight_active_element_set(container, w); } - efl_ui_spotlight_active_index_set(container, 3); - Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win); efl_ui_spotlight_push(container, w); ck_assert_int_eq(efl_pack_index_get(container, w), 3); - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), 3); + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), w); } EFL_END_TEST @@ -590,16 +598,17 @@ EFL_START_TEST (efl_ui_spotlight_test_pop3) { Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win); efl_pack_end(container, w); + if (i == 3) + efl_ui_spotlight_active_element_set(container, w); } Efl_Ui_Widget *w = efl_add(WIDGET_CLASS, win); - efl_ui_spotlight_active_index_set(container, 3); efl_ui_spotlight_push(container, w); Eina_Future *f = efl_ui_spotlight_pop(container, EINA_TRUE); for (int i = 0; i < 10; ++i) { efl_loop_iterate(efl_provider_find(container, EFL_LOOP_CLASS)); } - ck_assert_int_eq(efl_ui_spotlight_active_index_get(container), 3); + ck_assert_ptr_eq(efl_ui_spotlight_active_element_get(container), efl_pack_content_get(container, 3)); ck_assert_int_eq(efl_ref_count(w), 0); ck_assert_int_eq(efl_content_count(container), 5); ck_assert_ptr_ne(f, NULL); diff --git a/src/tests/elementary/spec/efl_test_pack_linear.c b/src/tests/elementary/spec/efl_test_pack_linear.c index 4747ec82b3..b66f449b8d 100644 --- a/src/tests/elementary/spec/efl_test_pack_linear.c +++ b/src/tests/elementary/spec/efl_test_pack_linear.c @@ -161,6 +161,27 @@ EFL_START_TEST(pack_before2) } EFL_END_TEST +EFL_START_TEST(pack_before3) +{ + Efl_Ui_Widget *wid[3]; + Efl_Ui_Widget *inv = create_test_widget(); + Efl_Ui_Widget *inv2 = create_test_widget(); + + _fill_array(wid); + + for (int i = 0; i < 3; i++) + efl_pack_end(widget, wid[i]); + + EXPECT_ERROR_START; + ck_assert_int_eq(efl_pack_before(widget, inv, inv2), EINA_FALSE); + EXPECT_ERROR_END; + ck_assert_ptr_ne(efl_test_parent_get(inv), widget); + + ck_assert_int_eq(efl_pack_before(widget, inv, wid[0]), EINA_TRUE); + ck_assert_ptr_eq(efl_test_parent_get(inv), widget); +} +EFL_END_TEST + EFL_START_TEST(pack_after1) { Efl_Ui_Widget *wid[3]; @@ -205,6 +226,27 @@ EFL_START_TEST(pack_after2) } EFL_END_TEST +EFL_START_TEST(pack_after3) +{ + Efl_Ui_Widget *wid[3]; + Efl_Ui_Widget *inv = create_test_widget(); + Efl_Ui_Widget *inv2 = create_test_widget(); + + _fill_array(wid); + + for (int i = 0; i < 3; i++) + efl_pack_end(widget, wid[i]); + + EXPECT_ERROR_START; + ck_assert_int_eq(efl_pack_after(widget, inv, inv2), EINA_FALSE); + EXPECT_ERROR_END; + ck_assert_ptr_ne(efl_test_parent_get(inv), widget); + + ck_assert_int_eq(efl_pack_after(widget, inv, wid[0]), EINA_TRUE); + ck_assert_ptr_eq(efl_test_parent_get(inv), widget); +} +EFL_END_TEST + EFL_START_TEST(pack_at1) { for (int x = -3; x < 3; ++x) @@ -406,8 +448,10 @@ efl_pack_linear_behavior_test(TCase *tc) tcase_add_test(tc, pack_end2); tcase_add_test(tc, pack_before1); tcase_add_test(tc, pack_before2); + tcase_add_test(tc, pack_before3); tcase_add_test(tc, pack_after1); tcase_add_test(tc, pack_after2); + tcase_add_test(tc, pack_after3); tcase_add_test(tc, pack_at1); tcase_add_test(tc, pack_at2); tcase_add_test(tc, pack_at3); diff --git a/src/tests/eolian/data/unimpl.eo b/src/tests/eolian/data/unimpl.eo index a1420e07c6..e08699a231 100644 --- a/src/tests/eolian/data/unimpl.eo +++ b/src/tests/eolian/data/unimpl.eo @@ -1,7 +1,4 @@ -class Unimpl implements Iface { - composite { - Iface; - } +class Unimpl implements Iface composite Iface { implements { Iface.foo; } diff --git a/src/tests/eolian_cxx/complex.eo b/src/tests/eolian_cxx/complex.eo index f874ad9846..d3f88488a0 100644 --- a/src/tests/eolian_cxx/complex.eo +++ b/src/tests/eolian_cxx/complex.eo @@ -25,7 +25,7 @@ class Complex extends Efl.Object } incontowncontown { params { - l: list @move> @owned; + l: list @move> @move; } } incontowncont { @@ -106,7 +106,7 @@ class Complex extends Efl.Object } outcontowncontown { params { - @out l: list @move> @owned; + @out l: list @move> @move; } } outcontowncont { diff --git a/src/tests/eolian_js/constructor_method_class.eo b/src/tests/eolian_js/constructor_method_class.eo index ec2cc5698a..1bcfd375eb 100644 --- a/src/tests/eolian_js/constructor_method_class.eo +++ b/src/tests/eolian_js/constructor_method_class.eo @@ -41,10 +41,10 @@ class Constructor_Method_Class extends Efl.Object } classoutmethod1 { params { @in one: int; @in two: double; } - return: free(Constructor_Method_Class, eo_unref) @owned @no_unused; + return: free(Constructor_Method_Class, eo_unref) @move @no_unused; } classoutmethod2 { - params { @in one: int; @in two: double; @out out_class: Constructor_Method_Class @owned; } + params { @in one: int; @in two: double; @out out_class: Constructor_Method_Class @move; } } } implements { diff --git a/src/tests/eolian_js/test_object.eo b/src/tests/eolian_js/test_object.eo index 8802fddfdb..1fc462398c 100644 --- a/src/tests/eolian_js/test_object.eo +++ b/src/tests/eolian_js/test_object.eo @@ -104,7 +104,7 @@ class Test.Object extends Efl.Object { } method_array_with_42_check { [[ tests parameters ]] - return: array @owned @no_unused; + return: array @move @no_unused; } method_array_in_array_out_check { [[ tests parameters ]] @@ -157,7 +157,7 @@ class Test.Object extends Efl.Object { } method_list_with_42_check { [[ tests parameters ]] - return: list @owned @no_unused; + return: list @move @no_unused; } method_list_in_list_out_check { [[ tests parameters ]]