Merge branch 'master' into devs/hermet/lottie

This commit is contained in:
Hermet Park 2019-09-09 12:20:05 +09:00
commit 7b0dd3a16f
97 changed files with 585 additions and 507 deletions

View File

@ -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
{

View File

@ -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))
{

View File

@ -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)
{

View File

@ -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 << "/// <summary>Gets the list of Eo operations to override.</summary>\n"
<< indent << scope_tab << "/// <returns>The list of Eo operations to be overload.</returns>\n"
<< indent << scope_tab << "public override System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type)\n"
<< indent << scope_tab << "public override System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type, bool includeInherited)\n"
<< indent << scope_tab << "{\n"
<< indent << scope_tab << scope_tab << "var descs = new System.Collections.Generic.List<Efl_Op_Description>();\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<class_context>(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(

View File

@ -293,11 +293,9 @@ struct klass_interface_name_generator
template <typename T>
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 <typename OutputIterator, typename Attr, typename Context>
@ -325,10 +323,9 @@ struct klass_full_interface_name_generator
template<typename T>
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<typename T>
@ -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)

View File

@ -125,46 +125,46 @@ public class GenericModel<T> : Efl.Object, Efl.IModel, IDisposable
}
/// <summary>Event triggered when properties on the wrapped model changes.</summary>
public event EventHandler<Efl.IModelPropertiesChangedEvt_Args> PropertiesChangedEvt
public event EventHandler<Efl.ModelPropertiesChangedEventArgs> PropertiesChangedEvent
{
add {
model.PropertiesChangedEvt += value;
model.PropertiesChangedEvent += value;
}
remove {
model.PropertiesChangedEvt -= value;
model.PropertiesChangedEvent -= value;
}
}
/// <summary>Event triggered when a child is added from the wrapped model.</summary>
public event EventHandler<Efl.IModelChildAddedEvt_Args> ChildAddedEvt
public event EventHandler<Efl.ModelChildAddedEventArgs> ChildAddedEvent
{
add {
model.ChildAddedEvt += value;
model.ChildAddedEvent += value;
}
remove {
model.ChildAddedEvt -= value;
model.ChildAddedEvent -= value;
}
}
/// <summary>Event triggered when a child is removed from the wrapped model.</summary>
public event EventHandler<Efl.IModelChildRemovedEvt_Args> ChildRemovedEvt
public event EventHandler<Efl.ModelChildRemovedEventArgs> ChildRemovedEvent
{
add {
model.ChildRemovedEvt += value;
model.ChildRemovedEvent += value;
}
remove {
model.ChildRemovedEvt -= value;
model.ChildRemovedEvent -= value;
}
}
/// <summary>Event triggered when the number of children changes.</summary>
public event EventHandler ChildrenCountChangedEvt
public event EventHandler ChildrenCountChangedEvent
{
add {
model.ChildrenCountChangedEvt += value;
model.ChildrenCountChangedEvent += value;
}
remove {
model.ChildrenCountChangedEvt -= value;
model.ChildrenCountChangedEvent -= value;
}
}
}

View File

@ -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();
};

View File

@ -357,7 +357,7 @@ public abstract class EoWrapper : IWrapper, IDisposable
/// <summary>Gets the list of Eo operations to override.</summary>
/// <returns>The list of Eo operations to be overload.</returns>
public override System.Collections.Generic.List<Efl_Op_Description> GetEoOps(Type type)
public override System.Collections.Generic.List<Efl_Op_Description> GetEoOps(Type type, bool includeInherited)
{
var descs = new System.Collections.Generic.List<Efl_Op_Description>();

View File

@ -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<Efl_Op_Description> GetEoOps(System.Type type);
public abstract System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type, bool includeInherited);
}
/// <summary>Attribute for private native classes.
@ -766,7 +748,7 @@ public class PrivateNativeClass : NativeClass
return IntPtr.Zero;
}
public override System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type)
public override System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type, bool includeInherited)
{
return null;
}

View File

@ -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

View File

@ -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();

View File

@ -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<const(void_ptr)> @owned; [[Values to be added]]
values: iterator<const(void_ptr)> @move; [[Values to be added]]
}
return: bool; [[$true on success, $false otherwise]]
}

View File

@ -61,7 +61,7 @@ mixin @beta Efl.Core.Command_Line {
return : bool; [[On success $true, $false otherwise]]
}
values {
array : array<stringshare @owned> @owned; [[An array where every array field is an argument]]
array : array<stringshare @move> @move; [[An array where every array field is an argument]]
}
}
@property command_string {

View File

@ -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 {

View File

@ -53,7 +53,7 @@ abstract Efl.Loop extends Efl.Task
This has higher priority, for low priority use
@.idle
]]
return: future<void> @owned; [[The future handle.]]
return: future<void> @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<void> @owned; [[The future handle.]]
return: future<void> @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<void> @owned; [[The future handle.]]
return: future<void> @move; [[The future handle.]]
}
}
events {

View File

@ -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 {

View File

@ -54,7 +54,7 @@ abstract Efl.Task extends Efl.Loop_Consumer
}
run @pure_virtual {
[[Actually run the task.]]
return: future<void> @owned; [[A future triggered when task exits and is passed int exit code.]]
return: future<void> @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

View File

@ -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<void> @owned; [[Future for asynchronous connect]]
return: future<void> @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<string> @owned; [[Iterator to DNS server]]
name_servers: iterator<string> @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<string> @owned; [[Iterator to time server]]
time_servers: iterator<string> @move; [[Iterator to time server]]
}
}
@ -280,7 +280,7 @@ class @beta Efl.Net.Control.Access_Point extends Efl.Loop_Consumer {
]]
get { }
values {
domains: iterator<string> @owned; [[Iterator to search domains]]
domains: iterator<string> @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<string> @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<string> @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<string> @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<string> @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<string> @owned; [[Iterator to user DNS server]]
name_servers: iterator<string> @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<string> @owned; [[Iterator to user time server]]
time_servers: iterator<string> @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<string> @owned; [[Iterator to user search domains]]
domains: iterator<string> @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<string> @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<string> @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<string> @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<string> @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..."]]
}
}
}

View File

@ -148,7 +148,7 @@ class @beta Efl.Net.Control.Manager extends Efl.Loop_Consumer {
]]
get { }
values {
access_points: iterator<Efl.Net.Control.Access_Point> @owned; [[Iterator of current access points]]
access_points: iterator<Efl.Net.Control.Access_Point> @move; [[Iterator of current access points]]
}
}
@ -162,7 +162,7 @@ class @beta Efl.Net.Control.Manager extends Efl.Loop_Consumer {
]]
get { }
values {
technologies: iterator<Efl.Net.Control.Technology> @owned; [[Iterator of current technologies]]
technologies: iterator<Efl.Net.Control.Technology> @move; [[Iterator of current technologies]]
}
}

View File

@ -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<void> @owned; [[Future return for finished background scan]]
return: future<void> @move; [[Future return for finished background scan]]
}
}

View File

@ -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<ptr(Efl.Net.Http.Header)> @owned @no_unused; [[Iterator for request headers]]
return: iterator<ptr(Efl.Net.Http.Header)> @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<ptr(Efl.Net.Http.Header)> @owned @no_unused; [[Iterator for response headers]]
return: iterator<ptr(Efl.Net.Http.Header)> @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<ptr(Efl.Net.Http.Header)> @owned @no_unused; [[Iterator for all response headers]]
return: iterator<ptr(Efl.Net.Http.Header)> @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]]
}
}

View File

@ -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<string> @owned @no_unused; [[Iterator to protocols]]
return: iterator<string> @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<string> @owned @no_unused; [[Iterator to server protocols]]
return: iterator<string> @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<ptr(Efl.Net.Http.Header)> @owned @no_unused; [[Iterator to key value pairs]]
return: iterator<ptr(Efl.Net.Http.Header)> @move @no_unused; [[Iterator to key value pairs]]
}
@property cookie_jar {

View File

@ -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 <netinet/in.h>.]]
}
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 {

View File

@ -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<string> @owned; [[List of multicast groups]]
return: iterator<string> @move; [[List of multicast groups]]
}
@property multicast_time_to_live {

View File

@ -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<string> @owned; [[Iterator to multicast groups]]
return: iterator<string> @move; [[Iterator to multicast groups]]
}
@property multicast_time_to_live {

View File

@ -46,7 +46,7 @@ class @beta Efl.Net.Ssl.Context extends Efl.Object {
Can only be set during object construction!
]]
values {
paths: iterator<string> @owned; [[Path list for certificates]]
paths: iterator<string> @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<string> @owned; [[Path list for private keys]]
paths: iterator<string> @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<string> @owned; [[Path list for CRL's]]
paths: iterator<string> @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<string> @owned; [[Path list for CA's]]
paths: iterator<string> @move; [[Path list for CA's]]
}
}

View File

@ -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);

View File

@ -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<string> @owned; [[Part name iterator]]
return: iterator<string> @move; [[Part name iterator]]
}
@property seat {
get {

View File

@ -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<Efl.Gfx.Entity> @owned @no_unused; [[
return: iterator<Efl.Gfx.Entity> @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<Efl.Gfx.Entity> @owned @no_unused; [[Iterator to objects]]
return: iterator<Efl.Gfx.Entity> @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<Efl.Input.Device> @owned;
return: iterator<Efl.Input.Device> @move;
[[An iterator over the attached seats.]]
}
/* FIXME Efl.Input.Device is not stable yet*/

View File

@ -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).]]
}

View File

@ -12,7 +12,7 @@ interface Efl.Container
methods {
content_iterate {
[[Begin iterating over this object's contents.]]
return: iterator<Efl.Gfx.Entity> @owned @no_unused; [[Iterator on object's content.]]
return: iterator<Efl.Gfx.Entity> @move @no_unused; [[Iterator on object's content.]]
}
content_count {
[[Returns the number of contained sub-objects.]]

View File

@ -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]]
}
}
}

View File

@ -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<const(Efl.Input.Device)> @owned; [[List of device children]]
return: iterator<const(Efl.Input.Device)> @move; [[List of device children]]
}
@property pointer_device_count {
[[The number of pointer devices in this seat.

View File

@ -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]]
}
}

View File

@ -31,7 +31,7 @@ interface @beta Efl.Model
]]
}
values {
properties: iterator<string> @owned; [[Array of current properties]]
properties: iterator<string> @move; [[Array of current properties]]
}
}
@property property {

View File

@ -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<Efl.Observer> @owned; [[Touple data]]
data: iterator<Efl.Observer> @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<Efl.Observer> @owned; [[Iterator for observers group]]
return: iterator<Efl.Observer> @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<ptr(Efl.Observable_Tuple)> @owned; [[Iterator for observer]]
return: iterator<ptr(Efl.Observable_Tuple)> @move; [[Iterator for observer]]
}
}
implements {

View File

@ -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<Efl.Gfx.Entity> @owned; [[Iterator to table contents]]
return: iterator<Efl.Gfx.Entity> @move; [[Iterator to table contents]]
params {
@in col: int; [[Column number]]
@in row: int; [[Row number]]

View File

@ -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<ptr(Efl.Text_Annotate_Annotation)> @owned; [[Handle of the Annotation]]
return: iterator<ptr(Efl.Text_Annotate_Annotation)> @move; [[Handle of the Annotation]]
}
annotation_insert {
[[Inserts an annotation format in a specified range [$start, $end - 1].

View File

@ -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 {

View File

@ -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]]
}
}
}

View File

@ -28,7 +28,7 @@ interface @beta Efl.Ui.Menu {
@property items {
get {
[[Returns a list of the widget item.]]
return: iterator<Efl.Ui.Item> @owned @no_unused; [[Iterator to widget items]]
return: iterator<Efl.Ui.Item> @move @no_unused; [[Iterator to widget items]]
}
}
}

View File

@ -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<uint64> @owned; [[Amount of files found during the listing of the directory]]
return: future<uint64> @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<uint64> @owned; [[Amount of files found during the listing of the directory]]
return: future<uint64> @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<uint64> @owned; [[Amount of files found during the listing of the directory]]
return: future<uint64> @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<uint64> @owned; [[Amount of extended attributes found]]
return: future<uint64> @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<uint64> @owned; [[Future for asynchronous set operation]]
return: future<uint64> @move; [[Future for asynchronous set operation]]
}
get {
return: future<Eina.Binbuf> @owned; [[Information]]
return: future<Eina.Binbuf> @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<Eina.File> @owned; [[Eina file handle]]
return: future<Eina.File> @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<int> @owned; [[Close return code]]
return: future<int> @move; [[Close return code]]
}
}
}

View File

@ -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;
}

View File

@ -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.]]
}
}
}

View File

@ -280,7 +280,7 @@ mixin @beta Efl.Access.Object requires Efl.Object
get {
}
values {
children: list<Efl.Access.Object> @owned; [[List of widget's children]]
children: list<Efl.Access.Object> @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<ptr(Efl.Access.Attribute) @owned> @owned; [[List of object attributes.
attributes: list<ptr(Efl.Access.Attribute) @move> @move; [[List of object attributes.
Must be freed by the user]]
}
}

View File

@ -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<ptr(Efl.Access.Text_Attribute) @owned> @owned; [[List of text attributes]]
attributes: list<ptr(Efl.Access.Text_Attribute) @move> @move; [[List of text attributes]]
}
}
@property default_attributes @protected @beta {
@ -130,7 +130,7 @@ interface @beta Efl.Access.Text
get {
}
values {
attributes: list<ptr(Efl.Access.Text_Attribute) @owned> @owned; [[List of default attributes]]
attributes: list<ptr(Efl.Access.Text_Attribute) @move> @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<ptr(Efl.Access.Text_Range) @owned> @owned; [[List of ranges]]
ranges: list<ptr(Efl.Access.Text_Range) @move> @move; [[List of ranges]]
}
}
@property range_extents @protected @beta {

View File

@ -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<string> @owned; [[Iterator to profiles]]
return: iterator<string> @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

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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<Efl.Gfx.Entity> @owned; [[The order to use]]
logical_order : list<Efl.Gfx.Entity> @move; [[The order to use]]
}
}
dirty @protected {

View File

@ -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<Efl.Ui.Focus.Object> @owned; [[List of objects to the right.]]
left : list<Efl.Ui.Focus.Object> @owned; [[List of objects to the left.]]
top : list<Efl.Ui.Focus.Object> @owned; [[List of objects above.]]
down : list<Efl.Ui.Focus.Object> @owned; [[List of objects below.]]
right : list<Efl.Ui.Focus.Object> @move; [[List of objects to the right.]]
left : list<Efl.Ui.Focus.Object> @move; [[List of objects to the left.]]
top : list<Efl.Ui.Focus.Object> @move; [[List of objects above.]]
down : list<Efl.Ui.Focus.Object> @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 {

View File

@ -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<Efl.Ui.Focus.Object> @owned; [[The list of children with the new order.]]
children : list<Efl.Ui.Focus.Object> @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<Efl.Ui.Focus.Object> @owned; [[The list of objects with the new order.]]
children : list<Efl.Ui.Focus.Object> @move; [[The list of objects with the new order.]]
}
}
unregister {

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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<Efl.Ui.Selectable> @owned @no_unused; [[User has to free the iterator after usage.]]
return: iterator<Efl.Ui.Selectable> @move @no_unused; [[User has to free the iterator after usage.]]
}
select_range {
[[Select a range of @Efl.Ui.Selectable.

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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

View File

@ -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.

View File

@ -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.]]

View File

@ -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);

View File

@ -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,

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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; }
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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<any_value_ptr>; [[The value that was finally set.]]
};

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -348,7 +348,7 @@ abstract Efl.Object
}
children_iterator_new {
[[Get an iterator on all childrens]]
return: iterator<Efl.Object> @owned @no_unused; [[Children iterator]]
return: iterator<Efl.Object> @move @no_unused; [[Children iterator]]
}
composite_attach @beta {
[[Make an object a composite object of another.

View File

@ -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), \

View File

@ -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:

View File

@ -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<const char> 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:

View File

@ -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;

View File

@ -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<Efl.Canvas.Object> @owned;
return: iterator<Efl.Canvas.Object> @move;
[[Iterator to object children]]
}
group_member_add {

View File

@ -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<ptr(Eina.Rect)> @owned; [[
return: iterator<ptr(Eina.Rect)> @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<ptr(Eina.Rect)> @owned; [[
return: iterator<ptr(Eina.Rect)> @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<Eina.Rect> @owned; [[Future for layout result]]
return: future<Eina.Rect> @move; [[Future for layout result]]
}
}
implements {

View File

@ -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;
}
}
}

View File

@ -11,7 +11,7 @@ class @beta Efl.Canvas.Vg.Container extends Efl.Canvas.Vg.Node
}
children_get {
[[Get all children of container]]
return: iterator<Efl.Canvas.Vg.Node> @owned @no_unused; [[Iterator to children]]
return: iterator<Efl.Canvas.Vg.Node> @move @no_unused; [[Iterator to children]]
}
}
implements {

View File

@ -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
};

View File

@ -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<Efl.EflException>(() => { obj.EmitEventWithInt(2); });
}

View File

@ -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<Dummy.TestObjectEvtWithIntEvt_Args> evtCb = (object sender, Dummy.TestObjectEvtWithIntEvt_Args e) => {
EventHandler<Dummy.TestObjectEvtWithIntEventArgs> 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<Dummy.TestObjectEvtWithIntEvt_Args> cb)
EventHandler<Dummy.TestObjectEvtWithIntEventArgs> 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<Dummy.TestObjectEvtWithIntEvt_Args> cb = (object sender, Dummy.TestObjectEvtWithIntEvt_Args args) => {
EventHandler<Dummy.TestObjectEvtWithIntEventArgs> cb = (object sender, Dummy.TestObjectEvtWithIntEventArgs args) => {
callbackCalled = true;
received = args.arg;
Test.Assert(Object.ReferenceEquals(sender, wref.Target));

View File

@ -66,7 +66,7 @@ public class TestModel {
string propertyBound = null;
bool callbackCalled = false;
var factory = new Efl.Ui.ItemFactory<Efl.Ui.Button>();
factory.PropertyBoundEvt += (object sender, Efl.Ui.IPropertyBindPropertyBoundEvt_Args args) => {
factory.PropertyBoundEvent += (object sender, Efl.Ui.PropertyBindPropertyBoundEventArgs args) => {
propertyBound = args.arg;
callbackCalled = true;
};

View File

@ -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);

View File

@ -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);

View File

@ -1,7 +1,4 @@
class Unimpl implements Iface {
composite {
Iface;
}
class Unimpl implements Iface composite Iface {
implements {
Iface.foo;
}

View File

@ -25,7 +25,7 @@ class Complex extends Efl.Object
}
incontowncontown {
params {
l: list<list<string> @move> @owned;
l: list<list<string> @move> @move;
}
}
incontowncont {
@ -106,7 +106,7 @@ class Complex extends Efl.Object
}
outcontowncontown {
params {
@out l: list<list<string> @move> @owned;
@out l: list<list<string> @move> @move;
}
}
outcontowncont {

View File

@ -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 {

View File

@ -104,7 +104,7 @@ class Test.Object extends Efl.Object {
}
method_array_with_42_check {
[[ tests parameters ]]
return: array<int> @owned @no_unused;
return: array<int> @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<int> @owned @no_unused;
return: list<int> @move @no_unused;
}
method_list_in_list_out_check {
[[ tests parameters ]]