Merge branch 'master' into devs/hermet/lottie

This commit is contained in:
Hermet Park 2019-05-13 15:44:55 +09:00
commit 0d063171c6
115 changed files with 1687 additions and 673 deletions

View File

@ -49,7 +49,8 @@ ecore_eolian_files_public = \
lib/ecore/efl_view_model.eo \
lib/ecore/efl_core_env.eo \
lib/ecore/efl_core_proc_env.eo \
lib/ecore/efl_core_command_line.eo
lib/ecore/efl_core_command_line.eo \
lib/ecore/efl_filter_model.eo
ecore_test_eolian_files = \
tests/ecore/efl_app_test_cml.eo \
@ -157,6 +158,7 @@ lib/ecore/efl_composite_model_private.h \
lib/ecore/efl_model_accessor_view.c \
lib/ecore/efl_model_accessor_view_private.h \
lib/ecore/efl_view_model.c \
lib/ecore/efl_filter_model.c \
lib/ecore/efl_linear_interpolator.c \
lib/ecore/efl_accelerate_interpolator.c \
lib/ecore/efl_decelerate_interpolator.c \

View File

@ -53,14 +53,6 @@ blacklisted_files = [
'evas_canvas3d_primitive.eo',
'evas_canvas3d_scene.eo',
'evas_canvas3d_texture.eo',
'efl_canvas_vg_object.eo',
'efl_vg.eo',
'efl_vg_container.eo',
'efl_vg_gradient.eo',
'efl_vg_gradient_radial.eo',
'efl_vg_gradient_linear.eo',
'efl_vg_root_node.eo',
'efl_vg_shape.eo.cs',
'efl_io_buffer.eo',
'efl_io_queue.eo',
'efl_io_sizer.eo',
@ -94,8 +86,8 @@ blacklisted_files = [
efl_mono_lib = library('eflcustomexportsmono',
join_paths('..', '..', 'lib', 'efl_mono', 'efl_custom_exports_mono.c'),
install : true,
install_dir : join_paths(dir_lib, 'efl-mono-'+version_major),
dependencies : [eo, eina, ecore]
dependencies : [eo, eina, ecore],
version : meson.project_version()
)
beta_option = []

View File

@ -119,6 +119,7 @@ EAPI Eo *efl_main_loop_get(void);
#include "efl_composite_model.eo.h"
#include "efl_boolean_model.eo.h"
#include "efl_select_model.eo.h"
#include "efl_filter_model.eo.h"
#include "efl_view_model.eo.h"
/**

View File

@ -260,6 +260,15 @@ _ecore_exe_thread_procedure(LPVOID data EINA_UNUSED)
return 1;
}
static DWORD __stdcall
_ecore_exe_exit_process(void *data)
{
UINT *code;
code = (UINT *)data;
ExitProcess(*code);
return 1;
}
static BOOL CALLBACK
_ecore_exe_enum_windows_procedure(HWND window,
LPARAM data)
@ -267,6 +276,7 @@ _ecore_exe_enum_windows_procedure(HWND window,
Ecore_Exe *obj = (Ecore_Exe *) data;
Ecore_Exe_Data *exe = efl_data_scope_get(obj, ECORE_EXE_CLASS);
DWORD thread_id;
UINT code = 0;
if (!exe) return EINA_FALSE;
thread_id = GetWindowThreadProcessId(window, NULL);
@ -295,7 +305,8 @@ _ecore_exe_enum_windows_procedure(HWND window,
/* Exit process */
if (CreateRemoteThread(exe->process, NULL, 0,
(LPTHREAD_START_ROUTINE)ExitProcess, NULL,
(LPTHREAD_START_ROUTINE)_ecore_exe_exit_process,
&code,
0, NULL))
return EINA_FALSE;

View File

@ -45,20 +45,6 @@ _children_indexed_key(const Efl_Composite_Model_Data *node,
return node->index - *key;
}
static Efl_Model *
_efl_composite_lookup(const Efl_Class *self, Eo *parent, Efl_Model *view, unsigned int index)
{
EFL_COMPOSITE_LOOKUP_RETURN(remember, parent, view, "_efl.composite_model");
remember = efl_add_ref(self, parent,
efl_ui_view_model_set(efl_added, view),
efl_composite_model_index_set(efl_added, index),
efl_loop_model_volatile_make(efl_added));
if (!remember) return NULL;
EFL_COMPOSITE_REMEMBER_RETURN(remember, view);
}
static void
_efl_composite_model_efl_object_invalidate(Eo *obj, Efl_Composite_Model_Data *pd)
{
@ -163,7 +149,6 @@ _efl_composite_model_child_added(void *data, const Efl_Event *event)
if (ev->child)
cev.child = _efl_composite_lookup(efl_class_get(pd->self),
pd->self, ev->child, ev->index);
efl_event_callback_call(pd->self, EFL_MODEL_EVENT_CHILD_ADDED, &cev);
efl_unref(cev.child);
@ -302,6 +287,8 @@ _efl_composite_model_then(Eo *o EINA_UNUSED, void *data, const Eina_Value v)
// Fetch an existing composite model for this model or create a new one if none exist
composite = _efl_composite_lookup(req->self, req->parent, target, req->start + i);
if (!composite) continue;
eina_value_array_append(&r, composite);
// Dropping this scope reference
efl_unref(composite);

View File

@ -56,4 +56,19 @@ _efl_composite_model_properties_mix(Eina_Iterator *super, Eina_Iterator *dyn, Ei
efl_key_wref_set(View, buf, Remember); \
return Remember;
static inline Efl_Model *
_efl_composite_lookup(const Efl_Class *self, Eo *parent, Efl_Model *view, unsigned int index)
{
EFL_COMPOSITE_LOOKUP_RETURN(remember, parent, view, "_efl.composite_model");
remember = efl_add_ref(self, parent,
efl_ui_view_model_set(efl_added, view),
efl_composite_model_index_set(efl_added, index),
efl_loop_model_volatile_make(efl_added));
if (!remember) return NULL;
EFL_COMPOSITE_REMEMBER_RETURN(remember, view);
}
#endif

View File

@ -1,6 +1,6 @@
class @beta Efl.Core.Proc_Env extends Efl.Core.Env
{
eo_prefix : efl_env;
c_prefix: efl_env;
methods {
self @class {
[[Get a instance of this object

View File

@ -0,0 +1,569 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <Efl_Core.h>
#include "efl_composite_model_private.h"
typedef struct _Efl_Filter_Model_Mapping Efl_Filter_Model_Mapping;
struct _Efl_Filter_Model_Mapping
{
EINA_RBTREE;
uint64_t original;
uint64_t mapped;
EINA_REFCOUNT;
};
typedef struct _Efl_Filter_Model_Data Efl_Filter_Model_Data;
struct _Efl_Filter_Model_Data
{
Efl_Filter_Model_Mapping *self;
Eina_Rbtree *mapping;
struct {
void *data;
EflFilterModel cb;
Eina_Free_Cb free_cb;
uint64_t count;
} filter;
uint64_t counted;
Eina_Bool counting_started : 1;
Eina_Bool processed : 1;
};
static Eina_Rbtree_Direction
_filter_mapping_cmp_cb(const Eina_Rbtree *left, const Eina_Rbtree *right, void *data EINA_UNUSED)
{
const Efl_Filter_Model_Mapping *l, *r;
l = (const Efl_Filter_Model_Mapping *) left;
r = (const Efl_Filter_Model_Mapping *) right;
if (l->mapped < r->mapped)
return EINA_RBTREE_LEFT;
return EINA_RBTREE_RIGHT;
}
static int
_filter_mapping_looking_cb(const Eina_Rbtree *node, const void *key,
int length EINA_UNUSED, void *data EINA_UNUSED)
{
const Efl_Filter_Model_Mapping *n = (const Efl_Filter_Model_Mapping *) node;
const uint64_t *k = key;
return n->mapped - *k;
}
static void
_efl_filter_model_filter_set(Eo *obj EINA_UNUSED, Efl_Filter_Model_Data *pd,
void *filter_data, EflFilterModel filter, Eina_Free_Cb filter_free_cb)
{
if (pd->filter.cb)
pd->filter.free_cb(pd->filter.data);
pd->filter.data = filter_data;
pd->filter.cb = filter;
pd->filter.free_cb = filter_free_cb;
}
static void
_rbtree_free_cb(Eina_Rbtree *node, void *data EINA_UNUSED)
{
Efl_Filter_Model_Mapping *m = (Efl_Filter_Model_Mapping*) node;
EINA_REFCOUNT_UNREF(m)
free(m);
}
typedef struct _Efl_Filter_Request Efl_Filter_Request;
struct _Efl_Filter_Request
{
Efl_Filter_Model_Data *pd;
Efl_Model *parent;
Efl_Model *child;
uint64_t index;
};
static Efl_Filter_Model *
_efl_filter_lookup(const Efl_Class *klass,
Efl_Model *parent, Efl_Model *view,
Efl_Filter_Model_Mapping *mapping)
{
Efl_Filter_Model *child;
Efl_Filter_Model_Data *cpd;
child = _efl_composite_lookup(klass, parent, view, mapping->mapped);
if (!child) return NULL;
cpd = efl_data_scope_get(child, EFL_FILTER_MODEL_CLASS);
cpd->processed = EINA_TRUE;
cpd->self = mapping;
EINA_REFCOUNT_REF(mapping);
return child;
}
static Eina_Value
_efl_filter_model_filter(Eo *o EINA_UNUSED, void *data, const Eina_Value v)
{
Efl_Filter_Model_Mapping *mapping;
Efl_Filter_Model *child;
Efl_Model_Children_Event cevt = { 0 };
Efl_Filter_Request *r = data;
Eina_Value ret = v;
Eina_Bool result = EINA_FALSE;
if (!eina_value_bool_get(&v, &result)) goto end;
if (!result) goto end;
mapping = calloc(1, sizeof (Efl_Filter_Model_Mapping));
if (!mapping)
{
ret = eina_value_bool_init(EINA_FALSE);
goto end;
}
EINA_REFCOUNT_INIT(mapping);
mapping->original = r->index;
mapping->mapped = r->pd->filter.count++;
r->pd->mapping = eina_rbtree_inline_insert(r->pd->mapping, EINA_RBTREE_GET(mapping),
_filter_mapping_cmp_cb, NULL);
child = _efl_filter_lookup(efl_class_get(r->parent), r->parent, r->child, mapping);
if (!child) goto end;
cevt.index = mapping->mapped;
cevt.child = child;
efl_event_callback_call(r->parent, EFL_MODEL_EVENT_CHILD_ADDED, &cevt);
efl_event_callback_call(r->parent, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, NULL);
efl_unref(cevt.child);
ret = eina_value_bool_init(EINA_TRUE);
end:
return ret;
}
static void
_efl_filter_model_filter_clean(Eo *o EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED)
{
Efl_Filter_Request *r = data;
efl_unref(r->parent);
efl_unref(r->child);
free(r);
}
static Eina_Value
_efl_filter_model_child_fetch(Eo *o EINA_UNUSED, void *data, const Eina_Value v)
{
Efl_Filter_Request *r = data;
unsigned int i, len;
Eina_Future *f;
Eo *target = NULL;
// Get the first and only child in the array
EINA_VALUE_ARRAY_FOREACH(&v, len, i, target)
break;
r->child = efl_ref(target);
f = r->pd->filter.cb(r->pd->filter.data, r->parent, r->child);
f = efl_future_then(r->parent, f,
.success = _efl_filter_model_filter,
.success_type = EINA_VALUE_TYPE_BOOL,
.free = _efl_filter_model_filter_clean,
.data = r);
return eina_future_as_value(f);
}
static Eina_Value
_efl_filter_model_child_error(Eo *o, void *data, Eina_Error err)
{
_efl_filter_model_filter_clean(o, data, NULL);
return eina_value_error_init(err);
}
static void
_efl_filter_model_child_added(void *data, const Efl_Event *event)
{
Efl_Filter_Model_Data *pd = data;
Efl_Model_Children_Event *ev = event->info;
Efl_Model *child = ev->child;
Efl_Filter_Request *r;
Eina_Future *f;
if (child)
{
Efl_Filter_Model_Data *cpd = efl_data_scope_get(child, EFL_FILTER_MODEL_CLASS);
if (cpd->processed) return ;
}
r = calloc(1, sizeof (Efl_Filter_Request));
if (!r) return ;
r->pd = pd;
r->index = ev->index;
r->parent = efl_ref(event->object);
if (!child)
{
f = efl_model_children_slice_get(efl_ui_view_model_get(r->parent), r->index, 1);
f = efl_future_then(event->object, f,
.success = _efl_filter_model_child_fetch,
.success_type = EINA_VALUE_TYPE_ARRAY,
.error = _efl_filter_model_child_error,
.data = r);
return ;
}
r->child = efl_ref(child);
f = pd->filter.cb(pd->filter.data, r->parent, r->child);
f = efl_future_then(event->object, f,
.success = _efl_filter_model_filter,
.success_type = EINA_VALUE_TYPE_BOOL,
.free = _efl_filter_model_filter_clean,
.data = r);
efl_event_callback_stop(event->object);
}
static void
_efl_filter_model_child_removed(void *data, const Efl_Event *event)
{
Efl_Filter_Model_Mapping *mapping;
Efl_Filter_Model_Data *pd = data;
Efl_Model_Children_Event *ev = event->info;
uint64_t removed = ev->index;
mapping = (void *)eina_rbtree_inline_lookup(pd->mapping,
&removed, sizeof (uint64_t),
_filter_mapping_looking_cb, NULL);
if (!mapping) return;
pd->mapping = eina_rbtree_inline_remove(pd->mapping, EINA_RBTREE_GET(mapping),
_filter_mapping_cmp_cb, NULL);
EINA_REFCOUNT_UNREF(mapping)
free(mapping);
// Update the tree for the index to reflect the removed child
for (removed++; removed < pd->filter.count; removed++)
{
mapping = (void *)eina_rbtree_inline_lookup(pd->mapping,
&removed, sizeof (uint64_t),
_filter_mapping_looking_cb, NULL);
if (!mapping) continue;
pd->mapping = eina_rbtree_inline_remove(pd->mapping, EINA_RBTREE_GET(mapping),
_filter_mapping_cmp_cb, NULL);
mapping->mapped--;
pd->mapping = eina_rbtree_inline_insert(pd->mapping, EINA_RBTREE_GET(mapping),
_filter_mapping_cmp_cb, NULL);
}
pd->filter.count--;
pd->counted--;
}
EFL_CALLBACKS_ARRAY_DEFINE(filters_callbacks,
{ EFL_MODEL_EVENT_CHILD_ADDED, _efl_filter_model_child_added },
{ EFL_MODEL_EVENT_CHILD_REMOVED, _efl_filter_model_child_removed });
static void
_efl_filter_model_efl_object_destructor(Eo *obj, Efl_Filter_Model_Data *pd)
{
eina_rbtree_delete(pd->mapping, _rbtree_free_cb, NULL);
if (pd->self)
{
EINA_REFCOUNT_UNREF(pd->self)
free(pd->self);
}
pd->self = NULL;
efl_destructor(efl_super(obj, EFL_FILTER_MODEL_CLASS));
}
static Eina_Value
_filter_remove_array(Eo *o EINA_UNUSED, void *data, const Eina_Value v)
{
Efl_Filter_Model_Mapping *mapping = data;
unsigned int i, len;
Eo *target = NULL;
EINA_VALUE_ARRAY_FOREACH(&v, len, i, target)
break;
if (efl_isa(target, EFL_FILTER_MODEL_CLASS))
{
Efl_Filter_Model_Data *pd = efl_data_scope_get(target, EFL_FILTER_MODEL_CLASS);
pd->self = mapping;
EINA_REFCOUNT_REF(pd->self);
}
return eina_value_object_init(target);
}
/* Result from eina_future_all_array is an EINA_VALUE_TYPE_ARRAY that contain Eina_Value of
Eo Model. It is expected that children slice get return an EINA_VALUE_TYPE_ARRAY that
contain Eo Model directly.
*/
static Eina_Value
_filter_cleanup_array(Eo *o EINA_UNUSED, void *data EINA_UNUSED, const Eina_Value v)
{
unsigned int i, len;
Eina_Value created = EINA_VALUE_EMPTY;
Eina_Value r = EINA_VALUE_EMPTY;
eina_value_array_setup(&r, EINA_VALUE_TYPE_OBJECT, 4);
EINA_VALUE_ARRAY_FOREACH(&v, len, i, created)
{
Eo *target = NULL;
if (eina_value_type_get(&created) != EINA_VALUE_TYPE_OBJECT)
goto on_error;
target = eina_value_object_get(&created);
if (!target) goto on_error;
eina_value_array_append(&r, target);
}
return r;
on_error:
eina_value_flush(&r);
return eina_value_error_init(EFL_MODEL_ERROR_UNKNOWN);
}
static Eina_Future *
_efl_filter_model_efl_model_children_slice_get(Eo *obj, Efl_Filter_Model_Data *pd,
unsigned int start, unsigned int count)
{
Efl_Filter_Model_Mapping **mapping = NULL;
Eina_Future **r = NULL;
Eina_Future *f;
unsigned int i;
Eina_Error err = ENOMEM;
if ((uint64_t) start + (uint64_t) count > pd->filter.count)
return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_INCORRECT_VALUE);
if (count == 0)
return efl_loop_future_rejected(obj, EFL_MODEL_ERROR_INCORRECT_VALUE);
r = malloc((count + 1) * sizeof (Eina_Future *));
if (!r) return efl_loop_future_rejected(obj, ENOMEM);
mapping = calloc(count, sizeof (Efl_Filter_Model_Mapping *));
if (!mapping) goto on_error;
for (i = 0; i < count; i++)
{
uint64_t lookup = start + i;
mapping[i] = (void *)eina_rbtree_inline_lookup(pd->mapping,
&lookup, sizeof (uint64_t),
_filter_mapping_looking_cb, NULL);
if (!mapping[i]) goto on_error;
}
for (i = 0; i < count; i++)
{
r[i] = efl_model_children_slice_get(efl_super(obj, EFL_FILTER_MODEL_CLASS),
mapping[i]->original, 1);
r[i] = efl_future_then(obj, r[i], .success_type = EINA_VALUE_TYPE_ARRAY,
.success = _filter_remove_array,
.data = mapping[i]);
if (!r) goto on_error;
}
r[i] = EINA_FUTURE_SENTINEL;
f = efl_future_then(obj, eina_future_all_array(r), .success = _filter_cleanup_array);
free(r);
free(mapping);
return f;
on_error:
free(mapping);
if (r)
for (i = 0; i < count; i ++)
if (r[i]) eina_future_cancel(r[i]);
free(r);
return efl_loop_future_rejected(obj, err);
}
typedef struct _Efl_Filter_Model_Result Efl_Filter_Model_Result;
struct _Efl_Filter_Model_Result
{
Efl_Filter_Model_Data *pd;
uint64_t count;
Efl_Model *targets[1];
};
// This future receive an array of boolean that indicate if a fetched object is to be kept
static Eina_Value
_efl_filter_model_array_result_request(Eo *o EINA_UNUSED, void *data, const Eina_Value v)
{
Efl_Filter_Model_Result *req = data;
Efl_Filter_Model_Data *pd = req->pd;
unsigned int i, len;
Eina_Value request = EINA_VALUE_EMPTY;
uint64_t pcount = pd->filter.count;
EINA_VALUE_ARRAY_FOREACH(&v, len, i, request)
{
Efl_Filter_Model_Mapping *mapping;
Efl_Model_Children_Event cevt = { 0 };
Eina_Bool b;
if (eina_value_type_get(&request) != EINA_VALUE_TYPE_BOOL)
continue ;
if (!eina_value_bool_get(&request, &b)) continue;
if (!b) continue;
mapping = calloc(1, sizeof (Efl_Filter_Model_Mapping));
if (!mapping) continue;
EINA_REFCOUNT_INIT(mapping);
mapping->original = i;
mapping->mapped = pd->filter.count++;
// Insert in tree here
pd->mapping = eina_rbtree_inline_insert(pd->mapping, EINA_RBTREE_GET(mapping),
_filter_mapping_cmp_cb, NULL);
cevt.index = mapping->mapped;
cevt.child = _efl_filter_lookup(efl_class_get(o), o, req->targets[i], mapping);
if (!cevt.child) continue;
efl_event_callback_call(o, EFL_MODEL_EVENT_CHILD_ADDED, &cevt);
efl_unref(cevt.child);
}
if (pcount != pd->filter.count)
efl_event_callback_call(o, EFL_MODEL_EVENT_CHILDREN_COUNT_CHANGED, NULL);
return v;
}
static void
_efl_filter_model_array_result_free(Eo *o EINA_UNUSED, void *data, const Eina_Future *dead_future EINA_UNUSED)
{
Efl_Filter_Model_Result *req = data;
uint64_t i;
for (i = 0; i < req->count; i++)
efl_unref(req->targets[i]);
free(req);
}
// This future receive an array of children object
static Eina_Value
_efl_filter_model_array_fetch(Eo *o, void *data, const Eina_Value v)
{
Efl_Filter_Model_Result *req;
Efl_Filter_Model_Data *pd = data;
unsigned int i, len;
Eo *target = NULL;
Eina_Future **array = NULL;
Eina_Future *r;
Eina_Value res = v;
if (!eina_value_array_count(&v)) return v;
array = malloc((eina_value_array_count(&v) + 1) * sizeof (Eina_Future*));
if (!array) return eina_value_error_init(ENOMEM);
req = malloc(sizeof (Efl_Filter_Model_Result) +
sizeof (Eo*) * (eina_value_array_count(&v) - 1));
if (!req)
{
res = eina_value_error_init(ENOMEM);
goto on_error;
}
req->pd = pd;
req->count = eina_value_array_count(&v);
EINA_VALUE_ARRAY_FOREACH(&v, len, i, target)
{
array[i] = pd->filter.cb(pd->filter.data, o, target);
req->targets[i] = efl_ref(target);
}
array[i] = EINA_FUTURE_SENTINEL;
r = eina_future_all_array(array);
r = efl_future_then(o, r, .success_type = EINA_VALUE_TYPE_ARRAY,
.success = _efl_filter_model_array_result_request,
.free = _efl_filter_model_array_result_free,
.data = req);
res = eina_future_as_value(r);
on_error:
free(array);
return res;
}
static unsigned int
_efl_filter_model_efl_model_children_count_get(const Eo *obj, Efl_Filter_Model_Data *pd)
{
if (!pd->counting_started && pd->filter.cb)
{
pd->counting_started = EINA_TRUE;
// Start watching for children now
efl_event_callback_array_add((Eo *)obj, filters_callbacks(), pd);
// Start counting (which may trigger filter being added asynchronously)
pd->counted = efl_model_children_count_get(efl_super(obj, EFL_FILTER_MODEL_CLASS));
if (pd->counted > 0)
{
Eina_Future *f;
f = efl_model_children_slice_get(efl_ui_view_model_get(obj), 0, pd->counted);
efl_future_then(obj, f, .success_type = EINA_VALUE_TYPE_ARRAY,
.success = _efl_filter_model_array_fetch,
.data = pd);
}
}
return pd->filter.count;
}
static Eina_Value *
_efl_filter_model_efl_model_property_get(const Eo *obj, Efl_Filter_Model_Data *pd,
const char *property)
{
if (pd->self && !strcmp(property, EFL_COMPOSITE_MODEL_CHILD_INDEX))
{
return eina_value_uint64_new(pd->self->mapped);
}
return efl_model_property_get(efl_super(obj, EFL_FILTER_MODEL_CLASS), property);
}
static unsigned int
_efl_filter_model_efl_composite_model_index_get(const Eo *obj, Efl_Filter_Model_Data *pd)
{
if (pd->self) return pd->self->mapped;
return efl_composite_model_index_get(efl_super(obj, EFL_FILTER_MODEL_CLASS));
}
#include "efl_filter_model.eo.c"

View File

@ -0,0 +1,31 @@
function @beta EflFilterModel {
[[EflFilterModel function]]
params {
parent: Efl.Filter_Model; [[This object can be used to know when to cancel the future.]]
child: Efl.Model; [[You must reference this object for the duration of your use of it as the caller will not do that for you.]]
}
return: future<bool>; [[$true if the model should be kept.]]
};
class @beta Efl.Filter_Model extends Efl.Composite_Model
{
[[Efl model designed to filter its children.]]
methods {
filter_set {
[[Set a filter function that will catch children from the composited model.]]
params {
filter: EflFilterModel; [[Filter callback]]
}
}
}
implements {
Efl.Object.destructor;
Efl.Model.children_slice_get;
Efl.Model.children_count { get; }
Efl.Model.property { get; }
Efl.Composite_Model.index { get; }
}
constructors {
.filter_set;
}
}

View File

@ -6,7 +6,7 @@ abstract Efl.Loop_Consumer extends Efl.Object
@since 1.22
]]
eo_prefix: efl_loop;
c_prefix: efl_loop;
methods {
@property loop {
[[The loop to which this object belongs to.]]

View File

@ -66,6 +66,7 @@ pub_eo_files = [
'efl_core_proc_env.eo',
'efl_core_command_line.eo',
'efl_loop_timer.eo',
'efl_filter_model.eo',
]
foreach eo_file : pub_eo_files
@ -145,6 +146,7 @@ ecore_src = [
'efl_model_accessor_view.c',
'efl_model_accessor_view_private.h',
'efl_view_model.c',
'efl_filter_model.c',
'efl_linear_interpolator.c',
'efl_accelerate_interpolator.c',
'efl_decelerate_interpolator.c',

View File

@ -16,7 +16,7 @@ abstract @beta Ecore.Audio extends Efl.Object
{
[[Convenience audio class.]]
eo_prefix: ecore_audio_obj;
c_prefix: ecore_audio_obj;
data: Ecore_Audio_Object;
methods {
@property paused {

View File

@ -1,7 +1,7 @@
class @beta Ecore.Audio.In extends Ecore.Audio
{
[[Ecore Audio input object.]]
eo_prefix: ecore_audio_obj_in;
c_prefix: ecore_audio_obj_in;
event_prefix: ecore_audio_in;
data: Ecore_Audio_Input;
methods {

View File

@ -1,7 +1,7 @@
class @beta Ecore.Audio.In.Sndfile extends Ecore.Audio.In
{
[[Ecore Audio sndfile input.]]
eo_prefix: ecore_audio_obj_in_sndfile;
c_prefix: ecore_audio_obj_in_sndfile;
implements {
Efl.Object.destructor;
Ecore.Audio.source { get; set; }

View File

@ -1,7 +1,7 @@
class @beta Ecore.Audio.In.Tone extends Ecore.Audio.In
{
[[Ecore Audio tone input.]]
eo_prefix: ecore_audio_obj_in_tone;
c_prefix: ecore_audio_obj_in_tone;
implements {
Efl.Object.constructor;
Ecore.Audio.In.length { set; }

View File

@ -2,7 +2,7 @@ abstract @beta Ecore.Audio.Out extends Ecore.Audio
{
[[Ecore Audio output object.]]
eo_prefix: ecore_audio_obj_out;
c_prefix: ecore_audio_obj_out;
data: Ecore_Audio_Output;
methods {
input_attach {

View File

@ -1,7 +1,7 @@
class @beta Ecore.Audio.Out.Pulse extends Ecore.Audio.Out
{
[[Ecore audio ouput for PulseAudio.]]
eo_prefix: ecore_audio_obj_out_pulse;
c_prefix: ecore_audio_obj_out_pulse;
event_prefix: ecore_audio_out_pulse;
implements {
Efl.Object.constructor;

View File

@ -1,7 +1,7 @@
class @beta Ecore.Audio.Out.Sndfile extends Ecore.Audio.Out
{
[[Ecore audio output to the sndfile library.]]
eo_prefix: ecore_audio_obj_out_sndfile;
c_prefix: ecore_audio_obj_out_sndfile;
implements {
Efl.Object.constructor;
Efl.Object.destructor;

View File

@ -1,7 +1,7 @@
class @beta Ecore.Audio.Out.Wasapi extends Ecore.Audio.Out
{
[[Ecore audio ouput for WasapiAudio.]]
eo_prefix: ecore_audio_obj_out_wasapi;
c_prefix: ecore_audio_obj_out_wasapi;
event_prefix: ecore_audio_out_wasapi;
implements {
Efl.Object.constructor;

View File

@ -4,7 +4,7 @@ class @beta Ector.Cairo.Software.Surface extends Ector.Cairo.Surface implements
Used to render ector content into a cairo software backend.
]]
eo_prefix: ector_cairo_software_surface;
c_prefix: ector_cairo_software_surface;
methods {}
implements {
Ector.Buffer.pixels_set;

View File

@ -6,7 +6,7 @@ class @beta Ector.Cairo.Surface extends Efl.Object implements Ector.Surface
Used to render ector content into a cairo backend.
]]
eo_prefix: ector_cairo_surface;
c_prefix: ector_cairo_surface;
methods {
@property context {
[[Cairo context]]

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.Cairo.Gradient.Linear extends Ector.Renderer.Cairo implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Linear, Efl.Gfx.Path
{
[[Ector cairo renderer gradient linear]]
eo_prefix: ector_renderer_cairo_gradient_linear;
c_prefix: ector_renderer_cairo_gradient_linear;
implements {
Ector.Renderer.prepare;
Ector.Renderer.draw;

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.Cairo.Gradient.Radial extends Ector.Renderer.Cairo implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Radial, Efl.Gfx.Path
{
[[Ector cairo renderer gradient radial]]
eo_prefix: ector_renderer_cairo_gradient_radial;
c_prefix: ector_renderer_cairo_gradient_radial;
implements {
Ector.Renderer.prepare;
Ector.Renderer.draw;

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.Cairo.Shape extends Ector.Renderer.Cairo implements Ector.Renderer.Shape, Efl.Gfx.Path
{
[[Ector cairo renderer shape class]]
eo_prefix: ector_renderer_cairo_shape;
c_prefix: ector_renderer_cairo_shape;
implements {
Ector.Renderer.prepare;
Ector.Renderer.draw;

View File

@ -25,7 +25,7 @@ mixin @beta Ector.Buffer
{
[[2D pixel buffer interface for Ector
]]
eo_prefix: ector_buffer;
c_prefix: ector_buffer;
methods {
@property size {
[[The (rectangular) size of the pixel buffer.]]

View File

@ -4,7 +4,7 @@ abstract @beta Ector.Renderer extends Efl.Object
{
[[Ector renderer abstract interface]]
eo_prefix: ector_renderer;
c_prefix: ector_renderer;
methods {
@property surface {
[[Surface associated with this renderer]]

View File

@ -1,7 +1,7 @@
mixin @beta Ector.Renderer.Gradient requires Efl.Object extends Efl.Gfx.Gradient
{
[[Ector gradient renderer mixin]]
eo_prefix: ector_renderer_gradient;
c_prefix: ector_renderer_gradient;
implements {
Efl.Gfx.Gradient.stop { get; set; }
Efl.Gfx.Gradient.spread { get; set; }

View File

@ -1,7 +1,7 @@
mixin @beta Ector.Renderer.Gradient.Linear extends Efl.Gfx.Gradient_Linear
{
[[Ector gradient linear renderer mixin]]
eo_prefix: ector_renderer_gradient_linear;
c_prefix: ector_renderer_gradient_linear;
implements {
Efl.Gfx.Gradient_Linear.start { get; set; }
Efl.Gfx.Gradient_Linear.end { get; set; }

View File

@ -1,7 +1,7 @@
mixin @beta Ector.Renderer.Gradient.Radial extends Efl.Gfx.Gradient_Radial
{
[[Ector gradient radial renderer mixin]]
eo_prefix: ector_renderer_gradient_radial;
c_prefix: ector_renderer_gradient_radial;
implements {
Efl.Gfx.Gradient_Radial.center { get; set; }
Efl.Gfx.Gradient_Radial.radius { get; set; }

View File

@ -3,7 +3,7 @@ import ector_renderer;
mixin @beta Ector.Renderer.Shape requires Efl.Object extends Efl.Gfx.Shape
{
[[Ector shape renderer mixin]]
eo_prefix: ector_renderer_shape;
c_prefix: ector_renderer_shape;
methods {
@property fill {
[[Fill property]]

View File

@ -2,7 +2,7 @@ mixin @beta Ector.Surface extends Ector.Buffer
{
[[Surface interface for Ector]]
eo_prefix: ector_surface;
c_prefix: ector_surface;
data: null;
methods {
@property reference_point {

View File

@ -3,7 +3,7 @@ import ector_types;
class @beta Ector.GL.Surface extends Ector.GL.Buffer implements Ector.Surface
{
[[Ector GL surface class]]
eo_prefix: ector_gl_surface;
c_prefix: ector_gl_surface;
methods {
shader_get {
[[Get shader]]

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.GL.Gradient.Linear extends Ector.Renderer.GL implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Linear, Efl.Gfx.Path
{
[[Ector GL renderer gradient linear]]
eo_prefix: ector_renderer_gl_gradient_linear;
c_prefix: ector_renderer_gl_gradient_linear;
implements {
Ector.Renderer.prepare;
Ector.Renderer.draw;

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.GL.Gradient.Radial extends Ector.Renderer.GL implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Radial, Efl.Gfx.Path
{
[[Ector GL renderer gradient radial]]
eo_prefix: ector_renderer_gl_gradient_radial;
c_prefix: ector_renderer_gl_gradient_radial;
implements {
Ector.Renderer.prepare;
Ector.Renderer.draw;

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.GL.Shape extends Ector.Renderer.GL implements Ector.Renderer.Shape, Efl.Gfx.Path
{
[[Ector GL renderer shape class]]
eo_prefix: ector_renderer_gl_shape;
c_prefix: ector_renderer_gl_shape;
implements {
Ector.Renderer.prepare;
Ector.Renderer.draw;

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.Software.Gradient.Linear extends Ector.Renderer.Software implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Linear
{
[[Ector software renderer gradient linear class]]
eo_prefix: ector_renderer_software_gradient_linear;
c_prefix: ector_renderer_software_gradient_linear;
data: Ector_Renderer_Software_Gradient_Data;
implements {
Ector.Renderer.prepare;

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.Software.Gradient.Radial extends Ector.Renderer.Software implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Radial
{
[[Ector software renderer gradient radial]]
eo_prefix: ector_renderer_software_gradient_radial;
c_prefix: ector_renderer_software_gradient_radial;
data: Ector_Renderer_Software_Gradient_Data;
implements {
Ector.Renderer.prepare;

View File

@ -1,7 +1,7 @@
class @beta Ector.Renderer.Software.Shape extends Ector.Renderer.Software implements Ector.Renderer.Shape
{
[[Ector software renderer shape class]]
eo_prefix: ector_renderer_software_shape;
c_prefix: ector_renderer_software_shape;
implements {
Ector.Renderer.prepare;
Ector.Renderer.draw;

View File

@ -1,7 +1,7 @@
mixin @beta Ector.Software.Buffer.Base extends Ector.Buffer
{
[[A buffer in Ector Software is a readable & optionally writable image]]
eo_prefix: ector_software_buffer;
c_prefix: ector_software_buffer;
methods {
pixels_clear @protected {
[[Clear internal pixel buffer]]

View File

@ -1,7 +1,7 @@
class @beta Ector.Software.Surface extends Ector.Software.Buffer implements Ector.Surface
{
[[Ector surface software class]]
eo_prefix: ector_software_surface;
c_prefix: ector_software_surface;
methods {}
implements {
Ector.Surface.renderer_factory_new;

View File

@ -1,5 +1,146 @@
#include "edje_types.eot.h"
/** All available cursor states
*
* @ingroup Edje
*/
typedef enum
{
EDJE_CURSOR_MAIN = 0, /**< Main cursor state */
EDJE_CURSOR_SELECTION_BEGIN, /**< Selection begin cursor state */
EDJE_CURSOR_SELECTION_END, /**< Selection end cursor state */
EDJE_CURSOR_PREEDIT_START, /**< Pre-edit start cursor state */
EDJE_CURSOR_PREEDIT_END, /**< Pre-edit end cursor state */
EDJE_CURSOR_USER, /**< User cursor state */
EDJE_CURSOR_USER_EXTRA /**< User extra cursor state */
} Edje_Cursor;
/** All Text auto capital mode type values
*
* @ingroup Edje_Text
*/
typedef enum
{
EDJE_TEXT_AUTOCAPITAL_TYPE_NONE = 0, /**< None mode value */
EDJE_TEXT_AUTOCAPITAL_TYPE_WORD, /**< Word mode value */
EDJE_TEXT_AUTOCAPITAL_TYPE_SENTENCE, /**< Sentence mode value */
EDJE_TEXT_AUTOCAPITAL_TYPE_ALLCHARACTER /**< All characters mode value */
} Edje_Text_Autocapital_Type;
/** Input hints
*
* @ingroup Edje
*/
typedef enum
{
EDJE_INPUT_HINT_NONE = 0, /**< No active hints
*
* @since 1.12 */
EDJE_INPUT_HINT_AUTO_COMPLETE = 1 /* 1 >> 0 */, /**< Suggest word auto
* completion
*
* @since 1.12 */
EDJE_INPUT_HINT_SENSITIVE_DATA = 2 /* 1 >> 1 */ /**< Typed text should not be
* stored.
*
* @since 1.12 */
} Edje_Input_Hints;
/** Input panel language
*
* @ingroup Edje_Input_Panel
*/
typedef enum
{
EDJE_INPUT_PANEL_LANG_AUTOMATIC = 0, /**< Automatic
*
* @since 1.2 */
EDJE_INPUT_PANEL_LANG_ALPHABET /**< Alphabet
*
* @since 1.2 */
} Edje_Input_Panel_Lang;
/** Input panel return key types
*
* @ingroup Edje_Input_Panel
*/
typedef enum
{
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_DEFAULT = 0, /**< Default
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_DONE, /**< Done
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_GO, /**< Go
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_JOIN, /**< Join
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_LOGIN, /**< Login
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_NEXT, /**< Next
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH, /**< Search or magnifier icon
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_SEND, /**< Send
*
* @since 1.2 */
EDJE_INPUT_PANEL_RETURN_KEY_TYPE_SIGNIN /**< Sign-in
*
* @since 1.8 */
} Edje_Input_Panel_Return_Key_Type;
/** Input panel layout
*
* @ingroup Edje_Input_Panel
*/
typedef enum
{
EDJE_INPUT_PANEL_LAYOUT_NORMAL = 0, /**< Default layout */
EDJE_INPUT_PANEL_LAYOUT_NUMBER, /**< Number layout */
EDJE_INPUT_PANEL_LAYOUT_EMAIL, /**< Email layout */
EDJE_INPUT_PANEL_LAYOUT_URL, /**< URL layout */
EDJE_INPUT_PANEL_LAYOUT_PHONENUMBER, /**< Phone Number layout */
EDJE_INPUT_PANEL_LAYOUT_IP, /**< IP layout */
EDJE_INPUT_PANEL_LAYOUT_MONTH, /**< Month layout */
EDJE_INPUT_PANEL_LAYOUT_NUMBERONLY, /**< Number Only layout */
EDJE_INPUT_PANEL_LAYOUT_INVALID, /**< Never use this */
EDJE_INPUT_PANEL_LAYOUT_HEX, /**< Hexadecimal layout
*
* @since 1.2 */
EDJE_INPUT_PANEL_LAYOUT_TERMINAL, /**< Command-line terminal layout including
* esc, alt, ctrl key, so on (no
* auto-correct, no auto-capitalization)
*
* @since 1.2 */
EDJE_INPUT_PANEL_LAYOUT_PASSWORD, /**< Like normal, but no auto-correct, no
* auto-capitalization etc.
*
* @since 1.2 */
EDJE_INPUT_PANEL_LAYOUT_DATETIME, /**< Date and time layout
*
* @since 1.8 */
EDJE_INPUT_PANEL_LAYOUT_EMOTICON, /**< Emoticon layout
*
* @since 1.10 */
EDJE_INPUT_PANEL_LAYOUT_VOICE /**< Voice layout, but if the IME does not
* support voice layout, then normal layout
* will be shown.
*
* @since 1.19 */
} Edje_Input_Panel_Layout;
/** Perspective info for maps inside edje objects
*
* @ingroup Edje
*/
typedef struct _Edje_Perspective Edje_Perspective;
/**
* @internal
* @ingroup Edje_General_Group

View File

@ -21,123 +21,3 @@ enum @beta Efl.Canvas.Layout_Part_Type
vector = 17, [[Vector @since 1.18.]]
last = 18 [[Last type value.]]
}
/* TODO: Rename to Efl.Canvas.Layout.Blah */
enum Edje.Cursor {
[[All available cursor states]]
main, [[Main cursor state]]
selection_begin, [[Selection begin cursor state]]
selection_end, [[Selection end cursor state]]
preedit_start, [[Pre-edit start cursor state]]
preedit_end, [[Pre-edit end cursor state]]
user, [[User cursor state]]
user_extra [[User extra cursor state]]
}
enum Edje.Text.Autocapital_Type {
[[All Text auto capital mode type values]]
none, [[None mode value]]
word, [[Word mode value]]
sentence, [[Sentence mode value]]
allcharacter [[All characters mode value]]
}
enum Edje.Input_Hints {
[[Input hints]]
legacy: Edje_Input_Hint;
none = 0, [[No active hints
@since 1.12]]
auto_complete = 1 << 0, [[Suggest word auto completion
@since 1.12]]
sensitive_data = 1 << 1 [[Typed text should not be stored.
@since 1.12]]
}
enum Edje.Input_Panel.Lang {
[[Input panel language]]
automatic, [[Automatic
@since 1.2]]
alphabet [[Alphabet
@since 1.2]]
}
enum Edje.Input_Panel.Return_Key_Type {
[[Input panel return key types]]
default, [[Default
@since 1.2]]
done, [[Done
@since 1.2]]
go, [[Go
@since 1.2]]
join, [[Join
@since 1.2]]
login, [[Login
@since 1.2]]
next, [[Next
@since 1.2]]
search, [[Search or magnifier icon
@since 1.2]]
send, [[Send
@since 1.2]]
signin [[Sign-in
@since 1.8]]
}
enum Edje.Input_Panel.Layout {
[[Input panel layout]]
normal, [[Default layout]]
number, [[Number layout]]
email, [[Email layout]]
url, [[URL layout]]
phonenumber, [[Phone Number layout]]
ip, [[IP layout]]
month, [[Month layout]]
numberonly, [[Number Only layout]]
invalid, [[Never use this]]
hex, [[Hexadecimal layout
@since 1.2]]
terminal, [[Command-line terminal layout including esc, alt, ctrl key,
so on (no auto-correct, no auto-capitalization)
@since 1.2]]
password, [[Like normal, but no auto-correct, no auto-capitalization etc.
@since 1.2]]
datetime, [[Date and time layout
@since 1.8]]
emoticon, [[Emoticon layout
@since 1.10]]
voice [[Voice layout, but if the IME does not support voice layout, then normal layout will be shown.
@since 1.19]]
}
struct Edje.Perspective; [[Perspective info for maps inside edje objects]]
/* FIXME-cb: Ignore cb types that should be fixed. */
type Edje.Signal_Cb: __undefined_type; [[Edje signal callback type]]
type Edje.Markup_Filter_Cb: __undefined_type; [[Edje markup filter callback type]]
type Edje.Text.Filter_Cb: __undefined_type; [[Edje text filter callback type]]
type Edje.Text.Change_Cb: __undefined_type; [[Edje text change callback type]]
type Edje.Item_Provider_Cb: __undefined_type; [[Edje item provider callback type]]
type Edje.Message_Handler_Cb: __undefined_type; [[Edje message handler callback type]]

View File

@ -7,7 +7,7 @@ interface Efl.Container
@since 1.22
]]
eo_prefix: efl_content;
c_prefix: efl_content;
event_prefix: efl_container;
methods {
content_iterate {

View File

@ -5,7 +5,7 @@ interface Efl.Gfx.Entity {
@since 1.22
]]
eo_prefix: efl_gfx_entity;
c_prefix: efl_gfx_entity;
methods {
@property position {
[[The 2D position of a canvas object.

View File

@ -8,7 +8,7 @@ interface @beta Efl.Gfx.Filter
This was a beta feature since 1.15.
]]
eo_prefix: efl_gfx;
c_prefix: efl_gfx;
methods {
@property filter_program {
set {

View File

@ -3,7 +3,7 @@ import efl_gfx_types;
interface @beta Efl.Gfx.Gradient
{
[[Efl graphics gradient interface]]
eo_prefix: efl_gfx_gradient;
c_prefix: efl_gfx_gradient;
methods {
@property stop {
set {

View File

@ -3,7 +3,7 @@ import eina_types;
interface @beta Efl.Gfx.View
{
[[Efl graphics view interface]]
eo_prefix: efl_gfx;
c_prefix: efl_gfx;
methods {
@property view_size {
[[The dimensions of this object's viewport.

View File

@ -16,7 +16,7 @@ struct @beta Efl.Model_Children_Event {
interface @beta Efl.Model
{
[[Efl model interface]]
eo_prefix: efl_model;
c_prefix: efl_model;
methods {
@property properties {
get {

View File

@ -4,7 +4,7 @@ interface @beta Efl.Pack_Layout
Used for containers (box, grid).
]]
eo_prefix: efl_pack;
c_prefix: efl_pack;
methods {
// Note: Do we need a layout_force or a sync flag in layout_request?
layout_request {

View File

@ -5,7 +5,7 @@ interface @beta Efl.Pack_Linear extends Efl.Pack
This means the sub-objects are internally organized in an ordered list.
]]
eo_prefix: efl_pack;
c_prefix: efl_pack;
methods {
pack_begin {
[[Prepend an object at the beginning of this container.

View File

@ -3,7 +3,7 @@ import efl_ui_direction;
interface @beta Efl.Pack_Table extends Efl.Pack
{
[[2D containers aligned on a table with rows and columns]]
eo_prefix: efl_pack;
c_prefix: efl_pack;
methods {
pack_table {
[[Pack object at a given location in the table.

View File

@ -3,7 +3,7 @@ import efl_text_types;
interface @beta Efl.Text_Annotate {
[[Cursor API
]]
eo_prefix: efl_text;
c_prefix: efl_text;
methods {
// Annotation
@property annotation {

View File

@ -50,7 +50,7 @@ enum @beta Efl.Text_Font_Bitmap_Scalable {
interface @beta Efl.Text_Font {
[[Font settings of the text
]]
eo_prefix: efl_text;
c_prefix: efl_text;
methods {
@property font {
set {

View File

@ -21,7 +21,7 @@ interface @beta Efl.Text_Format {
The text format can affect the geometry of the text object, as well as
how characters are presented.
]]
eo_prefix: efl_text;
c_prefix: efl_text;
methods {
@property ellipsis {
[[Ellipsis value (number from -1.0 to 1.0)]]

View File

@ -60,7 +60,7 @@ interface @beta Efl.Text_Style {
A style can be coloring, effects, underline, strikethrough etc.
]]
eo_prefix: efl_text;
c_prefix: efl_text;
methods {
@property normal_color {
[[Color of text, excluding style]]

View File

@ -1,7 +1,7 @@
interface @beta Efl.Ui.I18n
{
[[A common Internationalization interface for UI objects.]]
eo_prefix: efl_ui;
c_prefix: efl_ui;
methods {
@property mirrored {
[[Whether this object should be mirrored.

View File

@ -12,7 +12,7 @@ interface @beta Efl.Ui.Multi_Selectable
{
[[Efl UI Multi selectable interface.
The container have to control select property of multiple chidren.]]
eo_prefix: efl_ui;
c_prefix: efl_ui;
methods
{
@property select_mode {

View File

@ -1,7 +1,7 @@
interface @beta Efl.Ui.Range_Display
{
[[Interface that contains properties regarding the displaying of a range.]]
eo_prefix: efl_ui_range;
c_prefix: efl_ui_range;
methods {
@property range_value {
[[Control the range value (in percentage) on a given range widget

View File

@ -4,7 +4,7 @@ interface @beta Efl.Ui.Range_Interactive extends Efl.Ui.Range_Display
The properties defined here are used to manipulate the way a user interacts with a displayed range.
]]
eo_prefix: efl_ui_range;
c_prefix: efl_ui_range;
methods {
@property range_step {
[[Control the step used to increment or decrement values for given widget.

View File

@ -2,7 +2,7 @@ import eina_types;
interface @beta Efl.Ui.Scrollable_Interactive extends Efl.Ui.Scrollable
{
eo_prefix: efl_ui_scrollable;
c_prefix: efl_ui_scrollable;
methods {
@property content_pos {
[[The content position]]

View File

@ -12,7 +12,7 @@ interface @beta Efl.Ui.Zoom
{
[[Efl UI zoom interface]]
event_prefix: efl_ui;
eo_prefix: efl_ui;
c_prefix: efl_ui;
methods {
@property zoom_animation {

View File

@ -1343,7 +1343,7 @@ eina_promise_all_array(Eina_Future *array[])
for (i = 0; i < ctx->base.futures_len; i++)
{
Eina_Value v;
Eina_Value v = { 0 };
//Stub values...
r = eina_value_setup(&v, EINA_VALUE_TYPE_INT);

View File

@ -254,45 +254,53 @@ _eina_vpath_resolve(const char *path, char *str, size_t size)
}
}
// (:xxx:)/* ... <- meta hash table
else if ((path[0] == '(') && (path[1] == ':'))
else if (((path[0] == '(') && (path[1] == ':')) ||
((path[0] == '$') && (path[1] == '{')))
{
const char *p, *end, *meta;
const char *msg_start, *msg_end;
char *name;
int max_len = strlen(path);
int offset;
Eina_Bool found = EINA_FALSE;
for (p = path + 2; p <= path + max_len - 2; p++)
if (path[0] == '(')
{
if ((p[0] ==':') && (p[1] == ')'))
{
end = p;
found = EINA_TRUE;
break;
}
end = p = strstr(path + 2, ":)");
offset = 2;
msg_start = "(:";
msg_end = ":)";
}
p += 2;
else
{
end = p = strchr(path + 2, '}');
offset = 1;
msg_start = "${";
msg_end = "}";
}
if (p) found = EINA_TRUE;
p += offset;
if (!found)
{
ERR("(: Needs to have a matching ':)'\nThe string was: %s", path);
ERR("'%s' Needs to have a matching '%s'\nThe string was: %s", msg_start, msg_end, path);
return 0;
}
if (*p != '/')
{
ERR("A / is expected after :)\nThe string was: %s", path);
ERR("A / is expected after '%s'\nThe string was: %s", msg_end, path);
return 0;
}
if (found)
{
name = alloca(end - path);
strncpy(name, path + 2, end - path - 2);
strncpy(name, path + 2, end - path - offset);
name[end - path - 2] = 0;
meta = _eina_vpath_data_get(name);
if (meta)
{
return snprintf(str, size, "%s%s", meta, end + 2);
return snprintf(str, size, "%s%s", meta, end + offset);
}
else
{

View File

@ -28,28 +28,36 @@ eina_xdg_env_init(void)
} while (0)
#ifdef _WIN32
# define ENV_SET(_env, _dir, _meta) \
# define ENV_DIR_SET(_env, _dir, _meta) \
char _meta[PATH_MAX + 128]; \
if (_env) { \
s = getenv(_env); \
if (!s) s = home; \
} else s = home; \
if (_dir) FATAL_SNPRINTF(_meta, "vpath string '%s' truncated - fatal", "%s\\%s", s, (char *)_dir); \
else FATAL_SNPRINTF(_meta, "vpath string '%s' truncated - fatal", "%s\\", s); \
FATAL_SNPRINTF(_meta, "vpath string '%s' truncated - fatal", "%s\\%s", s, (char *)_dir); \
(&user)->_meta = _meta;
ENV_SET(NULL, "Desktop", desktop);
ENV_SET(NULL, "Documents", documents);
ENV_SET(NULL, "Downloads", downloads);
ENV_SET(NULL, "Music", music);
ENV_SET(NULL, "Pictures", pictures);
ENV_SET("CommonProgramFiles", NULL, pub);
ENV_SET("APPDATA", "Microsoft\\Windows\\Templates", templates);
ENV_SET(NULL, "Videos", videos);
ENV_SET("LOCALAPPDATA", NULL, data);
ENV_SET("LOCALAPPDATA", "Temp", tmp);
ENV_SET("APPDATA", NULL, config);
ENV_SET("LOCALAPPDATA", NULL, cache);
# define ENV_SET(_env, _meta) \
char _meta[PATH_MAX + 128]; \
if (_env) { \
s = getenv(_env); \
if (!s) s = home; \
} else s = home; \
FATAL_SNPRINTF(_meta, "vpath string '%s' truncated - fatal", "%s\\", s); \
(&user)->_meta = _meta;
ENV_DIR_SET(NULL, "Desktop", desktop);
ENV_DIR_SET(NULL, "Documents", documents);
ENV_DIR_SET(NULL, "Downloads", downloads);
ENV_DIR_SET(NULL, "Music", music);
ENV_DIR_SET(NULL, "Pictures", pictures);
ENV_SET("PUBLIC", pub);
ENV_DIR_SET("APPDATA", "Microsoft\\Windows\\Templates", templates);
ENV_DIR_SET(NULL, "Videos", videos);
ENV_SET("LOCALAPPDATA", data);
ENV_DIR_SET("LOCALAPPDATA", "Temp", tmp);
ENV_SET("APPDATA", config);
ENV_SET("LOCALAPPDATA", cache);
if (!(s = getenv("APPDATA")))
user.run = NULL;
else

View File

@ -948,6 +948,8 @@ _efl_io_model_efl_model_children_slice_get(Eo *obj, Efl_Io_Model_Data *pd,
// NOTE: We are assuming here that the parent model will outlive all its children
child_data->filter.cb = pd->filter.cb,
child_data->filter.data = pd->filter.data);
else
efl_ref(info->object);
eina_value_array_append(&array, info->object);
efl_wref_add(info->object, &info->object);

View File

@ -240,7 +240,7 @@ struct @beta Efl.Access.Relation
mixin @beta Efl.Access.Object requires Efl.Object
{
[[Accessibility accessible mixin]]
eo_prefix: efl_access_object;
c_prefix: efl_access_object;
data: Efl_Access_Object_Data;
methods {
@property localized_role_name @protected @beta {

View File

@ -4,7 +4,7 @@ class @beta Efl.Config_Global extends Efl.Object implements Efl.Config
running application.
]]
data: null;
eo_prefix: efl_config;
c_prefix: efl_config;
methods {
save @protected {
[[Saves Elementary configuration to disk.

View File

@ -10,7 +10,7 @@ abstract Efl.Ui.Layout_Base extends Efl.Ui.Widget implements Efl.Container,
@since 1.22
]]
eo_prefix: efl_ui_layout;
c_prefix: efl_ui_layout;
data: Efl_Ui_Layout_Data;
methods {
@property theme {

View File

@ -5,7 +5,7 @@ class @beta Efl.Ui.Scroll.Manager extends Efl.Object implements
{
[[Efl ui scroll manager class]]
event_prefix: efl_ui;
eo_prefix: efl_ui_scroll_manager;
c_prefix: efl_ui_scroll_manager;
methods {
@property pan @protected {
[[This is the internal pan object managed by scroll manager.

View File

@ -528,7 +528,7 @@ _textpath_ellipsis_set(Efl_Ui_Textpath_Data *pd, Eina_Bool enabled)
}
static void
_ellipsis_set(Efl_Ui_Textpath_Data *pd)
_ellipsis_set(Efl_Ui_Textpath_Data *pd, Eo *obj)
{
if (!pd->text_obj) return;
@ -536,7 +536,11 @@ _ellipsis_set(Efl_Ui_Textpath_Data *pd)
Eina_Bool is_ellipsis = EINA_FALSE;
const Evas_Object *tb;
tb = edje_object_part_object_get(pd->text_obj, "efl.text");
if (elm_widget_is_legacy(obj))
tb = edje_object_part_object_get(pd->text_obj, "elm.text");
else
tb = edje_object_part_object_get(pd->text_obj, "efl.text");
evas_object_textblock_size_native_get(tb, &w, &h);
evas_object_size_hint_min_set(pd->text_obj, w, h);
if (pd->ellipsis)
@ -566,7 +570,7 @@ _textpath_text_set_internal(Eo *obj, Efl_Ui_Textpath_Data *pd, const char *part,
if (!text) text = "";
ret = edje_object_part_text_set(pd->text_obj, part, text);
_ellipsis_set(pd);
_ellipsis_set(pd, obj);
_sizing_eval(pd);
return ret;
@ -663,7 +667,7 @@ _efl_ui_textpath_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Textpath_Data *pd)
elm_widget_theme_object_set(obj, pd->text_obj, "textpath", "base",
elm_widget_style_get(obj));
_ellipsis_set(pd);
_ellipsis_set(pd, obj);
return ret;
}
@ -728,12 +732,12 @@ _efl_ui_textpath_slice_number_set(Eo *obj EINA_UNUSED, Efl_Ui_Textpath_Data *pd,
}
EOLIAN static void
_efl_ui_textpath_ellipsis_set(Eo *obj EINA_UNUSED, Efl_Ui_Textpath_Data *pd, Eina_Bool ellipsis)
_efl_ui_textpath_ellipsis_set(Eo *obj, Efl_Ui_Textpath_Data *pd, Eina_Bool ellipsis)
{
if (pd->ellipsis == ellipsis) return;
pd->ellipsis = ellipsis;
_ellipsis_set(pd);
_ellipsis_set(pd, obj);
_sizing_eval(pd);
}

View File

@ -13,7 +13,7 @@ typedef Eo Efl_Ui_Textpath;
/** Textpath direction
*
* @ingroup Efl_Ui
* @ingroup Elm_Textpath_Group
*/
typedef enum
{

View File

@ -1,7 +1,7 @@
class @beta Efl.Ui.Theme extends Efl.Object
{
[[Efl Ui Theme class]]
eo_prefix: efl_ui_theme;
c_prefix: efl_ui_theme;
data: Efl_Ui_Theme_Data;
methods {
@property default @class {

View File

@ -25,7 +25,7 @@ abstract Efl.Ui.Widget extends Efl.Canvas.Group implements Efl.Access.Object,
@since 1.22
]]
//eo_prefix: efl_ui_widget;
//c_prefix: efl_ui_widget;
event_prefix: efl_ui_widget;
data: Efl_Ui_Widget_Data;
methods {

View File

@ -96,8 +96,6 @@ EFL_CALLBACKS_ARRAY_DEFINE(monitoring_callbacks,
{ EFL_MODEL_EVENT_CHILD_ADDED, _resource_created },
{ EFL_MODEL_EVENT_CHILD_REMOVED, _resource_deleted });
static void _properties_changed(void *data, const Efl_Event *ev);
static void
_focus_chain_update(Eo *obj, Elm_Fileselector_Data *pd)
{
@ -194,16 +192,121 @@ _elm_fileselector_replace_model(Elm_Fileselector *fs, Elm_Fileselector_Data *sd,
}
}
static const char *
_io_path_get(Efl_Model *model)
{
if (!model) return NULL;
if (efl_isa(model, EFL_IO_MODEL_CLASS)) return efl_io_model_path_get(model);
return _io_path_get(efl_ui_view_model_get(model));
}
static Eina_Bool
_check_again(Eina_Value *fetch)
{
Eina_Error err = 0;
char *str;
if (eina_value_type_get(fetch) != EINA_VALUE_TYPE_ERROR)
return EINA_FALSE;
eina_value_error_get(fetch, &err);
if (err == EAGAIN) return EINA_TRUE;
str = eina_value_to_string(fetch);
ERR("Unexpected error: '%s'.", str);
free(str);
return EINA_TRUE;
}
static Eina_Bool
_fetch_string_value(Efl_Model *child, const char *name, char **str)
{
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
*str = NULL;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
*str = eina_value_to_string(fetch);
r = EINA_TRUE;
on_error:
eina_value_free(fetch);
return r;
}
static Eina_Bool
_fetch_bool_value(Efl_Model *child, const char *name, Eina_Bool *b)
{
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
if (!eina_value_bool_get(fetch, b)) goto on_error;
r = EINA_TRUE;
on_error:
eina_value_free(fetch);
return r;
}
static Eina_Bool
_fetch_double_value(Efl_Model *child, const char *name, double *d)
{
Eina_Value convert = EINA_VALUE_EMPTY;
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
if (!eina_value_setup(&convert, EINA_VALUE_TYPE_DOUBLE))
goto on_error;
if (!eina_value_convert(fetch, &convert))
goto on_error;
if (!eina_value_double_get(&convert, d)) goto on_error;
r = EINA_TRUE;
on_error:
eina_value_flush(&convert);
eina_value_free(fetch);
return r;
}
static Eina_Bool
_fetch_int64_value(Efl_Model *child, const char *name, int64_t *i)
{
Eina_Value convert = EINA_VALUE_EMPTY;
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
if (!eina_value_setup(&convert, EINA_VALUE_TYPE_INT64))
goto on_error;
if (!eina_value_convert(fetch, &convert))
goto on_error;
if (!eina_value_int64_get(&convert, i)) goto on_error;
r = EINA_TRUE;
on_error:
eina_value_free(fetch);
return r;
}
/* final routine on deletion */
static void
_elm_fileselector_smart_del_do(Elm_Fileselector *fs, Elm_Fileselector_Data *sd)
{
Eo *child;
EINA_LIST_FREE(sd->children, child)
{
efl_event_callback_del(child, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_changed, sd);
efl_unref(child);
}
efl_unref(child);
_elm_fileselector_replace_model(fs, sd, NULL, NULL);
efl_replace(&sd->prev_model, NULL);
ecore_idler_del(sd->path_entry_idler);
@ -536,6 +639,77 @@ _filter_child(Elm_Fileselector_Data* sd,
return EINA_FALSE;
}
static Eina_Value
_filter_do(Eo *child, void *data, const Eina_Value v EINA_UNUSED)
{
Elm_Fileselector_Data* sd = data;
// FIXME: This could be only needed with ELM_FILESELECTOR_MIME_FILTER
char *mime_type = NULL;
char *filename = NULL;
char *path = NULL;
int64_t size = 0;
double mtime = 0;
Eina_Bool dir = EINA_FALSE;
Eina_Bool r = EINA_FALSE;
if (!_fetch_string_value(child, "path", &path) ||
!_fetch_string_value(child, "filename", &filename) ||
!_fetch_string_value(child, "mime_type", &mime_type) ||
!_fetch_double_value(child, "mtime", &mtime) ||
!_fetch_int64_value(child, "size", &size) ||
!_fetch_bool_value(child, "is_dir", &dir))
goto cleanup;
if (!path || !filename || !mime_type)
{
ERR("Wrong file info ('%s', '%s', '%s').", path, filename, mime_type);
goto cleanup;
}
if (!_filter_child(sd, path, filename, dir, mime_type))
goto cleanup;
r = EINA_TRUE;
cleanup:
free(mime_type);
free(filename);
free(path);
return eina_value_bool_init(r);
}
static void
_filter_free(Eo *o, void *data EINA_UNUSED, const Eina_Future *dead_future EINA_UNUSED)
{
efl_unref(o);
}
static Eina_Future *
_filter_simple(void *data, Efl_Filter_Model *parent, Efl_Model *child)
{
Elm_Fileselector_Data* sd = data;
Eina_Future *request[8];
Eina_Future *f;
request[0] = efl_model_property_ready_get(parent, "path");
request[1] = efl_model_property_ready_get(child, "path");
request[2] = efl_model_property_ready_get(child, "filename");
request[3] = efl_model_property_ready_get(child, "mime_type");
request[4] = efl_model_property_ready_get(child, "mtime");
request[5] = efl_model_property_ready_get(child, "size");
request[6] = efl_model_property_ready_get(child, "is_dir");
request[7] = EINA_FUTURE_SENTINEL;
f = eina_future_all_array(request);
f = efl_future_then(efl_ref(child), f,
.success = _filter_do,
.free = _filter_free,
.data = sd);
return f;
}
static const char *
_file_type(const char *a)
{
@ -706,106 +880,6 @@ _listing_request_cleanup(Listing_Request *lreq)
free(lreq);
}
static Eina_Bool
_check_again(Eina_Value *fetch)
{
Eina_Error err = 0;
char *str;
if (eina_value_type_get(fetch) != EINA_VALUE_TYPE_ERROR)
return EINA_FALSE;
eina_value_error_get(fetch, &err);
if (err == EAGAIN) return EINA_TRUE;
str = eina_value_to_string(fetch);
ERR("Unexpected error: '%s'.", str);
free(str);
return EINA_TRUE;
}
static Eina_Bool
_fetch_string_value(Efl_Model *child, const char *name, char **str)
{
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
*str = NULL;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
*str = eina_value_to_string(fetch);
r = EINA_TRUE;
on_error:
eina_value_free(fetch);
return r;
}
static Eina_Bool
_fetch_bool_value(Efl_Model *child, const char *name, Eina_Bool *b)
{
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
if (!eina_value_bool_get(fetch, b)) goto on_error;
r = EINA_TRUE;
on_error:
eina_value_free(fetch);
return r;
}
static Eina_Bool
_fetch_double_value(Efl_Model *child, const char *name, double *d)
{
Eina_Value convert = EINA_VALUE_EMPTY;
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
if (!eina_value_setup(&convert, EINA_VALUE_TYPE_DOUBLE))
goto on_error;
if (!eina_value_convert(fetch, &convert))
goto on_error;
if (!eina_value_double_get(&convert, d)) goto on_error;
r = EINA_TRUE;
on_error:
eina_value_flush(&convert);
eina_value_free(fetch);
return r;
}
static Eina_Bool
_fetch_int64_value(Efl_Model *child, const char *name, int64_t *i)
{
Eina_Value convert = EINA_VALUE_EMPTY;
Eina_Value *fetch;
Eina_Bool r = EINA_FALSE;
fetch = efl_model_property_get(child, name);
if (_check_again(fetch)) goto on_error;
if (!eina_value_setup(&convert, EINA_VALUE_TYPE_INT64))
goto on_error;
if (!eina_value_convert(fetch, &convert))
goto on_error;
if (!eina_value_int64_get(&convert, i)) goto on_error;
r = EINA_TRUE;
on_error:
eina_value_free(fetch);
return r;
}
static void
_process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
{
@ -826,7 +900,7 @@ _process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
// In case we are shutting down, there might be an error being gnerated
if (!parent) return ;
// We should be good now
// We should be good now and already filtered
if (!_fetch_string_value(parent, "path", &parent_path) ||
!_fetch_string_value(child, "path", &path) ||
!_fetch_string_value(child, "filename", &filename) ||
@ -834,31 +908,6 @@ _process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
!_fetch_double_value(child, "mtime", &mtime) ||
!_fetch_int64_value(child, "size", &size) ||
!_fetch_bool_value(child, "is_dir", &dir))
{
Eina_Value *check_error = efl_model_property_get(child, "mtime");
Eina_Error err = EAGAIN;
if (eina_value_type_get(check_error) == EINA_VALUE_TYPE_ERROR)
{
// If the error is different from EAGAIN, we should definitively drop this one.
eina_value_error_get(check_error, &err);
}
// SETUP listener to retry fetching all data when ready
if (err == EAGAIN)
{
efl_event_callback_add(efl_ref(child), EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_changed, sd);
sd->children = eina_list_append(sd->children, child);
}
goto cleanup;
}
if (!path || !filename || !mime_type)
{
ERR("Wrong file info ('%s', '%s', '%s').", path, filename, mime_type);
goto cleanup;
}
if (!_filter_child(sd, path, filename, dir, mime_type))
goto cleanup;
it_data = calloc(1, sizeof(Elm_Fileselector_Item_Data));
@ -905,7 +954,7 @@ _process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
// Is this item selected
if (sd->target && sd->target_ready)
{
const char *target_path = efl_io_model_path_get(sd->target);
const char *target_path = _io_path_get(sd->target);
if (!strcmp(it_data->path, target_path))
{
@ -923,18 +972,6 @@ _process_model(Elm_Fileselector_Data *sd, Efl_Model *child)
free(parent_path);
}
static void
_properties_changed(void *data, const Efl_Event *ev)
{
Elm_Fileselector_Data *sd = data;
Efl_Model *child = ev->object;
sd->children = eina_list_remove(sd->children, child);
efl_event_callback_del(child, EFL_MODEL_EVENT_PROPERTIES_CHANGED, _properties_changed, sd);
_process_model(sd, child);
efl_unref(child);
}
static Eina_Value
_process_children_cb(Eo *model EINA_UNUSED, void *data, const Eina_Value v)
{
@ -999,7 +1036,13 @@ _populate(Evas_Object *obj,
lreq->sd = sd;
lreq->parent_it = (parent_it ? efl_ref(parent_it) : NULL);
lreq->obj = efl_ref(obj);
lreq->model = efl_ref(model);
if (efl_isa(model, EFL_FILTER_MODEL_CLASS))
model = efl_ui_view_model_get(model);
lreq->model = efl_add_ref(EFL_FILTER_MODEL_CLASS, obj,
efl_ui_view_model_set(efl_added, model),
efl_filter_model_filter_set(efl_added, sd, _filter_simple, NULL),
efl_loop_model_volatile_make(efl_added));
lreq->selected = (selected ? efl_ref(selected) : NULL);
lreq->path = NULL;
lreq->selected_path = NULL;
@ -1034,11 +1077,11 @@ _populate(Evas_Object *obj,
_signal_first(lreq);
if (efl_model_children_count_get(model))
if (efl_model_children_count_get(lreq->model))
{
future = efl_model_children_slice_get(model, 0, efl_model_children_count_get(model));
future = efl_model_children_slice_get(lreq->model, 0, efl_model_children_count_get(model));
future = efl_future_then(obj, future);
efl_future_then(model, future,
efl_future_then(lreq->model, future,
.success = _process_children_cb,
.error = _process_children_error,
.data = lreq);
@ -1102,7 +1145,8 @@ _on_item_activated(void *data, const Efl_Event *event)
if (!sd->double_tap_navigation) return;
efl_parent_set(it_data->model, data);
// Set the Efl.Io.Model parent to be the fileselector to prevent death when populate
efl_parent_set(efl_ui_view_model_get(it_data->model), data);
_populate(data, it_data->model, NULL, NULL);
}
@ -1279,7 +1323,7 @@ _on_dir_up(void *data, const Efl_Event *event EINA_UNUSED)
if (!efl_isa(parent, EFL_IO_MODEL_CLASS))
{
const char *path = efl_io_model_path_get(sd->model);
const char *path = _io_path_get(sd->model);
char dir[PATH_MAX] = "";
char *r;
@ -1345,7 +1389,7 @@ _ok(void *data, const Efl_Event *event EINA_UNUSED)
else
selection = eina_stringshare_printf("%s/%s", sd->path, name);
selected_model = efl_add_ref(efl_class_get(sd->model), fs,
selected_model = efl_add_ref(efl_class_get(efl_ui_view_model_get(sd->model)), fs,
efl_event_callback_array_add(efl_added, noref_death(), NULL),
efl_io_model_path_set(efl_added, selection));
@ -1394,13 +1438,13 @@ _on_text_activated(void *data, const Efl_Event *event)
_model_event_call(fs, ELM_FILESELECTOR_EVENT_SELECTED_INVALID,
ELM_FILESELECTOR_EVENT_SELECTED_INVALID->name, NULL, path);
elm_widget_part_text_set(event->object, NULL, efl_io_model_path_get(sd->model));
elm_widget_part_text_set(event->object, NULL, _io_path_get(sd->model));
goto end;
}
if (!ecore_file_is_dir(path))
{
model = efl_add_ref(efl_class_get(sd->model), fs,
model = efl_add_ref(efl_class_get(efl_ui_view_model_get(sd->model)), fs,
efl_io_model_path_set(efl_added, path),
efl_event_callback_array_add(efl_added, noref_death(), NULL));
@ -1411,7 +1455,7 @@ _on_text_activated(void *data, const Efl_Event *event)
dir = EINA_TRUE;
}
parent = efl_add_ref(efl_class_get(sd->model), fs,
parent = efl_add_ref(efl_class_get(efl_ui_view_model_get(sd->model)), fs,
efl_io_model_path_set(efl_added, path),
efl_event_callback_array_add(efl_added, noref_death(), NULL));
if (!parent) goto end;
@ -1465,7 +1509,7 @@ _anchor_clicked(void *data, const Efl_Event *event)
if (!sd->model) return;
model = efl_add_ref(efl_class_get(sd->model), fs,
model = efl_add_ref(efl_class_get(efl_ui_view_model_get(sd->model)), fs,
efl_event_callback_array_add(efl_added, noref_death(), NULL),
efl_io_model_path_set(efl_added, info->name));
if (!model) return;
@ -1581,9 +1625,7 @@ _resource_created_then(Eo *model EINA_UNUSED, void *data, const Eina_Value v)
ELM_FILESELECTOR_DATA_GET(fs, sd);
EINA_VALUE_ARRAY_FOREACH(&v, len, i, child)
{
_process_model(sd, child);
}
_process_model(sd, child);
return v;
}
@ -1889,7 +1931,7 @@ _from_legacy_event_call(Elm_Fileselector *fs, Elm_Fileselector_Data *sd, const E
if (!sd->model)
model_cls = EFL_IO_MODEL_CLASS;
else
model_cls = efl_class_get(sd->model);
model_cls = efl_class_get(efl_ui_view_model_get(sd->model));
Efl_Model *model = efl_add_ref(model_cls, fs,
efl_event_callback_array_add(efl_added, noref_death(), NULL),
@ -2306,7 +2348,7 @@ _elm_fileselector_selected_get_internal(const Evas_Object *obj)
if (!sd->path) return NULL;
if (sd->target)
{
return efl_io_model_path_get(sd->target);
return _io_path_get(sd->target);
}
Elm_Fileselector_Item_Data *it_data = _selected_item_data_get(sd);
@ -2382,10 +2424,11 @@ _properties_ready(void *data, const Efl_Event *ev)
if (!is_dir)
{
Efl_Model *parent;
const char *path = efl_io_model_path_get(ev->object);
const char *path = _io_path_get(ev->object);
char *dir = ecore_file_dir_get(path);
parent = efl_add_ref(EFL_IO_MODEL_CLASS, obj, efl_io_model_path_set(efl_added, dir),
parent = efl_add_ref(EFL_IO_MODEL_CLASS, obj,
efl_io_model_path_set(efl_added, dir),
efl_event_callback_array_add(efl_added, noref_death(), NULL));
if (!parent)
{
@ -2476,7 +2519,7 @@ _elm_fileselector_elm_interface_fileselector_selected_model_set(Eo *obj, Elm_Fil
eina_value_error_get(value, &err);
if (err != EAGAIN)
{
ERR("Unexpected error '%s' when setting path '%s'.", eina_value_to_string(value), efl_io_model_path_get(pd->target));
ERR("Unexpected error '%s' when setting path '%s'.", eina_value_to_string(value), _io_path_get(pd->target));
goto clean_up;
}
@ -2496,7 +2539,7 @@ _elm_fileselector_elm_interface_fileselector_selected_model_set(Eo *obj, Elm_Fil
if (!dir)
{
Efl_Model *parent;
const char *path = efl_io_model_path_get(pd->target);
const char *path = _io_path_get(pd->target);
char *d = ecore_file_dir_get(path);
parent = efl_add_ref(EFL_IO_MODEL_CLASS, obj, efl_io_model_path_set(efl_added, d),

View File

@ -18,7 +18,7 @@ struct @extern Elm.Code_Line; [[Elementary code line data structure]] /* Parts o
class @beta Elm.Code_Widget extends Efl.Ui.Layout_Base
{
[[Elementary code widget]]
eo_prefix: efl_ui_code_widget;
c_prefix: efl_ui_code_widget;
methods {
@property code {
set {

View File

@ -4,69 +4,6 @@
/* Legacy-only function pointer types, for the legacy EO classes (genlist, etc...) */
type Evas_Smart_Cb: __undefined_type; [[Evas smart callback type]]
type Eina_Compare_Cb: __undefined_type; [[Eina compare callback type]]
type @extern Elm.Glob.Match_Flags: __undefined_type; [[Elementary glob matching flags]]
/* FIXME: elm_policy API is not bound to EO */
struct Elm.Event.Policy_Changed
{
[[Data on the event when an Elementary policy has changed]]
policy: uint; [[the policy identifier]]
new_value: int; [[value the policy had before the change]]
old_value: int; [[new value the policy got]]
}
/* FIXME: elm_policy API is not bound to EO */
enum Elm.Policy
{
[[Policy identifiers.]]
quit, [[under which circumstances the application should quit automatically.
See also @Elm.Policy.quit.]]
exit, [[defines elm_exit() behaviour. See also @Elm.Policy.exit.
@since 1.8
]]
throttle, [[defines how throttling should work. See also @Elm.Policy.throttle
@since 1.8
]]
last [[Sentinel value to indicate last enum field during iteration]]
}
/* FIXME: elm_policy API is not bound to EO */
enum Elm.Policy_Quit
{
[[Possible values for the @Elm.Policy.quit policy]]
none = 0, [[never quit the application automatically]]
last_window_closed, [[quit when the application's last window is closed]]
last_window_hidden [[quit when the application's last window is hidden
@since 1.14]]
}
/* FIXME: elm_policy API is not bound to EO */
enum Elm.Policy_Exit
{
[[Possible values for the @Elm.Policy.exit policy.
@since 1.8
]]
none = 0, [[just quit the main loop on elm_exit()]]
windows_del [[delete all the windows after quitting the main loop]]
}
/* FIXME: elm_policy API is not bound to EO */
enum Elm.Policy_Throttle
{
[[Possible values for the @Elm.Policy.throttle policy.
@since 1.8
]]
config = 0, [[do whatever elementary config is configured to do]]
hidden_always, [[always throttle when all windows are no longer visible]]
never [[never throttle when windows are all hidden, regardless of config
settings]]
}
/* FIXME: Move to Efl.Ui namespace after Efl.Ui.List gets merged! */
enum Elm.Object.Select_Mode
@ -92,38 +29,6 @@ enum Elm.Object.Select_Mode
is forbidden.]]
}
/* FIXME: Move to Efl.Ui namespace after Efl.Ui.List gets merged! */
enum Elm.Object.Multi_Select_Mode
{
[[Possible values for the #ELM_OBJECT_MULTI_SELECT_MODE policy.
@since 1.8
]]
default = 0, [[default multiple select mode]]
with_control, [[disallow mutiple selection when clicked without control key
pressed]]
max [[canary value: any value greater or equal to
ELM_OBJECT_MULTI_SELECT_MODE_MAX is forbidden.]]
}
/* Legacy only: elm_entry, elm_label, elm_popup */
enum Elm.Wrap.Type
{
[[Line wrapping types.
Type of word or character wrapping to use.
See also \@ref elm_entry_line_wrap_set, \@ref
elm_popup_content_text_wrap_type_set, \@ref elm_label_line_wrap_set.
]]
legacy: elm_wrap;
none = 0, [[No wrap - value is zero.]]
char, [[Char wrap - wrap between characters.]]
word, [[Word wrap - wrap in allowed wrapping points (as defined in the unicode standard).]]
mixed, [[Mixed wrap - Word wrap, and if that fails, char wrap.]]
last [[Sentinel value to indicate last enum field during iteration]]
}
enum Elm.Icon.Type
{
[[Elementary icon types]]
@ -134,24 +39,11 @@ enum Elm.Icon.Type
}
/* FIXME: shouldn't exist, they are unusable by the bindings */
struct @extern Elm_Gen_Item; [[Elementary gen item]]
struct @extern Efl_Access_Action_Data; [[Efl access action data]]
struct @extern Elm.Validate_Content; [[Data for the elm_validator_regexp_helper()]]
struct @extern Elm.Entry_Anchor_Info; [[The info sent in the callback for the "anchor,clicked" signals emitted
by entries.]]
struct @extern Elm.Entry_Anchor_Hover_Info; [[The info sent in the callback for "anchor,hover" signals emitted
by the Anchor_Hover widget]]
struct @extern Elm.Entry_Change_Info; [[This corresponds to Edje_Entry_Change_Info. Includes information about
a change in the entry]]
/* Enums from elm_entry.eo, also used by efl_ui_text */
enum Elm.Text_Format
{
[[Text Format types.
]]
plain_utf8, [[ Plain UTF8 type ]]
markup_utf8 [[ Markup UTF8 type ]]
}
enum Elm.Input.Panel.Layout
{
@ -267,113 +159,3 @@ enum Elm.Input.Hints
@since 1.21]]
}
enum Elm.Cnp_Mode
{
[[
Enum of entry's copy & paste policy.
]]
markup, [[ copy & paste text with markup tag ]]
no_image, [[ copy & paste text without item(image) tag ]]
plaintext, [[ copy & paste text without markup tag ]]
}
/* Elm_Genlist-related types */
type @extern Elm.Genlist.Item.Class: __undefined_type; [[External elm genlist item class]]
enum Elm.Genlist.Item.Type
{
[[Defines if the item is of any special type (has subitems or it's the
index of a group), or is just a simple item.
]]
legacy: elm_genlist_item;
none = 0, [[Simple item.]]
tree = (1 << 0), [[This may be expanded and have child items.]]
group = (1 << 1), [[An index item of a group of items. this item can have child items.]]
max = (1 << 2) [[Sentinel value to indicate last enum field during iteration]]
}
enum Elm.Genlist.Item.Field_Type
{
[[Defines the type of the item part
Used while updating item's parts
It can be used at updating multi fields.
]]
legacy: elm_genlist_item_field;
all = 0, [[Type all]]
text = (1 << 0), [[Type text]]
content = (1 << 1), [[Type content]]
state = (1 << 2) [[Type state]]
}
enum Elm.Genlist.Item.Scrollto_Type
{
[[Defines where to position the item in the genlist.]]
legacy: elm_genlist_item_scrollto;
none = 0, [[Nothing will happen, Don't use this value.]]
in = (1 << 0), [[To the nearest viewport.]]
top = (1 << 1), [[To the top of viewport.]]
middle = (1 << 2), [[To the middle of viewport.]]
bottom = (1 << 3) [[To the bottom of viewport.]]
}
/* Elm_Gengrid-related types */
type @extern Elm.Gengrid.Item.Class: __undefined_type; [[External elm gengrid item class]]
enum Elm.Gengrid.Item.Scrollto_Type
{
[[Defines where to position the item in the genlist.]]
legacy: elm_gengrid_item_scrollto;
none = 0, [[No scrollto.]]
in = (1 << 0), [[To the nearest viewport.]]
top = (1 << 1), [[To the top of viewport.]]
middle = (1 << 2), [[To the middle of viewport.]]
bottom = (1 << 3) [[To the bottom of viewport.]]
}
enum Elm.Gengrid.Item.Field_Type
{
[[Defines the type of the item part Used while updating item's parts.
It can be used at updating multi fields.]]
legacy: elm_gengrid_item_field;
all = 0, [[Type all]]
text = (1 << 0), [[Type text]]
content = (1 << 1), [[Type content]]
state = (1 << 2) [[Type state]]
}
/* Elm_List types */
enum Elm.List.Mode
{
[[Set list's resizing behavior, transverse axis scrolling and items
cropping. See each mode's description for more details.
Note: Default value is @Elm.List.Mode.scroll.
Values here don't work as bitmasks -- only one can be chosen at
a time.
]]
legacy: elm_list;
compress = 0, [[The list won't set any of its size hints to inform how a
possible container should resize it. Then, if it's not
created as a "resize object", it might end with zeroed
dimensions. The list will respect the container's geometry
and, if any of its items won't fit into its transverse axis,
one won't be able to scroll it in that direction.]]
scroll, [[Default value. This is the same as #ELM_LIST_COMPRESS, with the
exception that if any of its items won't fit into its transverse
axis, one will be able to scroll it in that direction.]]
limit, [[Sets a minimum size hint on the list object, so that containers may
respect it (and resize itself to fit the child properly). More
specifically, a minimum size hint will be set for its transverse
axis, so that the largest item in that direction fits well. This
is naturally bound by the list object's maximum size hints, set
externally.]]
expand, [[Besides setting a minimum size on the transverse axis, just like
on @Elm.List.Mode.limit, the list will set a minimum size on the
longitudinal axis, trying to reserve space to all its children to
be visible at a time. . This is naturally bound by the list
object's maximum size hints, set externally.]]
last [[Indicates error if returned by elm_list_mode_get().]]
}

View File

@ -21,6 +21,254 @@
// Legacy types
#include "elm_general.eot.h"
/** Data on the event when an Elementary policy has changed
*
* @ingroup Elm_Event
*/
typedef struct _Elm_Event_Policy_Changed
{
unsigned int policy; /**< the policy identifier */
int new_value; /**< value the policy had before the change */
int old_value; /**< new value the policy got */
} Elm_Event_Policy_Changed;
/** Policy identifiers.
*
* @ingroup Elm
*/
typedef enum
{
ELM_POLICY_QUIT = 0, /**< under which circumstances the application should
* quit automatically. See also @ref ELM_POLICY_QUIT. */
ELM_POLICY_EXIT, /**< defines elm_exit() behaviour. See also
* @ref ELM_POLICY_EXIT.
*
* @since 1.8 */
ELM_POLICY_THROTTLE, /**< defines how throttling should work. See also
* @ref ELM_POLICY_THROTTLE
*
* @since 1.8 */
ELM_POLICY_LAST /**< Sentinel value to indicate last enum field during
* iteration */
} Elm_Policy;
/** Possible values for the @ref ELM_POLICY_QUIT policy
*
* @ingroup Elm
*/
typedef enum
{
ELM_POLICY_QUIT_NONE = 0, /**< never quit the application automatically */
ELM_POLICY_QUIT_LAST_WINDOW_CLOSED, /**< quit when the application's last
* window is closed */
ELM_POLICY_QUIT_LAST_WINDOW_HIDDEN /**< quit when the application's last
* window is hidden
*
* @since 1.14 */
} Elm_Policy_Quit;
/** Possible values for the @ref ELM_POLICY_EXIT policy.
*
* @since 1.8
*
* @ingroup Elm
*/
typedef enum
{
ELM_POLICY_EXIT_NONE = 0, /**< just quit the main loop on elm_exit() */
ELM_POLICY_EXIT_WINDOWS_DEL /**< delete all the windows after quitting the
* main loop */
} Elm_Policy_Exit;
/** Possible values for the @ref ELM_POLICY_THROTTLE policy.
*
* @since 1.8
*
* @ingroup Elm
*/
typedef enum
{
ELM_POLICY_THROTTLE_CONFIG = 0, /**< do whatever elementary config is
* configured to do */
ELM_POLICY_THROTTLE_HIDDEN_ALWAYS, /**< always throttle when all windows are
* no longer visible */
ELM_POLICY_THROTTLE_NEVER /**< never throttle when windows are all hidden,
* regardless of config settings */
} Elm_Policy_Throttle;
/** Possible values for the #ELM_OBJECT_MULTI_SELECT_MODE policy.
*
* @since 1.8
*
* @ingroup Elm_Object
*/
typedef enum
{
ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT = 0, /**< default multiple select mode */
ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL, /**< disallow mutiple selection
* when clicked without control
* key pressed */
ELM_OBJECT_MULTI_SELECT_MODE_MAX /**< canary value: any value greater or equal
* to ELM_OBJECT_MULTI_SELECT_MODE_MAX is
* forbidden. */
} Elm_Object_Multi_Select_Mode;
/**
* @brief Line wrapping types. Type of word or character wrapping to use.
*
* See also @ref elm_entry_line_wrap_set, @ref
* elm_popup_content_text_wrap_type_set, @ref elm_label_line_wrap_set.
*
* @ingroup Elm_Wrap
*/
typedef enum
{
ELM_WRAP_NONE = 0, /**< No wrap - value is zero. */
ELM_WRAP_CHAR, /**< Char wrap - wrap between characters. */
ELM_WRAP_WORD, /**< Word wrap - wrap in allowed wrapping points (as defined in
* the unicode standard). */
ELM_WRAP_MIXED, /**< Mixed wrap - Word wrap, and if that fails, char wrap. */
ELM_WRAP_LAST /**< Sentinel value to indicate last enum field during iteration
*/
} Elm_Wrap_Type;
/** Text Format types.
*
* @ingroup Elm
*/
typedef enum
{
ELM_TEXT_FORMAT_PLAIN_UTF8 = 0, /**< Plain UTF8 type */
ELM_TEXT_FORMAT_MARKUP_UTF8 /**< Markup UTF8 type */
} Elm_Text_Format;
/** Enum of entry's copy & paste policy.
*
* @ingroup Elm
*/
typedef enum
{
ELM_CNP_MODE_MARKUP = 0, /**< copy & paste text with markup tag */
ELM_CNP_MODE_NO_IMAGE, /**< copy & paste text without item(image) tag */
ELM_CNP_MODE_PLAINTEXT /**< copy & paste text without markup tag */
} Elm_Cnp_Mode;
/** Defines if the item is of any special type (has subitems or it's the index
* of a group), or is just a simple item.
*
* @ingroup Elm_Genlist_Item
*/
typedef enum
{
ELM_GENLIST_ITEM_NONE = 0, /**< Simple item. */
ELM_GENLIST_ITEM_TREE = 1 /* 1 >> 0 */, /**< This may be expanded and have
* child items. */
ELM_GENLIST_ITEM_GROUP = 2 /* 1 >> 1 */, /**< An index item of a group of
* items. this item can have child
* items. */
ELM_GENLIST_ITEM_MAX = 4 /* 1 >> 2 */ /**< Sentinel value to indicate last
* enum field during iteration */
} Elm_Genlist_Item_Type;
/** Defines the type of the item part Used while updating item's parts It can
* be used at updating multi fields.
*
* @ingroup Elm_Genlist_Item
*/
typedef enum
{
ELM_GENLIST_ITEM_FIELD_ALL = 0, /**< Type all */
ELM_GENLIST_ITEM_FIELD_TEXT = 1 /* 1 >> 0 */, /**< Type text */
ELM_GENLIST_ITEM_FIELD_CONTENT = 2 /* 1 >> 1 */, /**< Type content */
ELM_GENLIST_ITEM_FIELD_STATE = 4 /* 1 >> 2 */ /**< Type state */
} Elm_Genlist_Item_Field_Type;
/** Defines where to position the item in the genlist.
*
* @ingroup Elm_Genlist_Item
*/
typedef enum
{
ELM_GENLIST_ITEM_SCROLLTO_NONE = 0, /**< Nothing will happen, Don't use this
* value. */
ELM_GENLIST_ITEM_SCROLLTO_IN = 1 /* 1 >> 0 */, /**< To the nearest viewport.
*/
ELM_GENLIST_ITEM_SCROLLTO_TOP = 2 /* 1 >> 1 */, /**< To the top of viewport.
*/
ELM_GENLIST_ITEM_SCROLLTO_MIDDLE = 4 /* 1 >> 2 */, /**< To the middle of
* viewport. */
ELM_GENLIST_ITEM_SCROLLTO_BOTTOM = 8 /* 1 >> 3 */ /**< To the bottom of
* viewport. */
} Elm_Genlist_Item_Scrollto_Type;
/** Defines where to position the item in the genlist.
*
* @ingroup Elm_Gengrid_Item
*/
typedef enum
{
ELM_GENGRID_ITEM_SCROLLTO_NONE = 0, /**< No scrollto. */
ELM_GENGRID_ITEM_SCROLLTO_IN = 1 /* 1 >> 0 */, /**< To the nearest viewport.
*/
ELM_GENGRID_ITEM_SCROLLTO_TOP = 2 /* 1 >> 1 */, /**< To the top of viewport.
*/
ELM_GENGRID_ITEM_SCROLLTO_MIDDLE = 4 /* 1 >> 2 */, /**< To the middle of
* viewport. */
ELM_GENGRID_ITEM_SCROLLTO_BOTTOM = 8 /* 1 >> 3 */ /**< To the bottom of
* viewport. */
} Elm_Gengrid_Item_Scrollto_Type;
/** Defines the type of the item part Used while updating item's parts. It can
* be used at updating multi fields.
*
* @ingroup Elm_Gengrid_Item
*/
typedef enum
{
ELM_GENGRID_ITEM_FIELD_ALL = 0, /**< Type all */
ELM_GENGRID_ITEM_FIELD_TEXT = 1 /* 1 >> 0 */, /**< Type text */
ELM_GENGRID_ITEM_FIELD_CONTENT = 2 /* 1 >> 1 */, /**< Type content */
ELM_GENGRID_ITEM_FIELD_STATE = 4 /* 1 >> 2 */ /**< Type state */
} Elm_Gengrid_Item_Field_Type;
/**
* @brief Set list's resizing behavior, transverse axis scrolling and items
* cropping. See each mode's description for more details.
*
* @note Default value is @ref ELM_LIST_SCROLL.
*
* Values here don't work as bitmasks -- only one can be chosen at a time.
*
* @ingroup Elm_List
*/
typedef enum
{
ELM_LIST_COMPRESS = 0, /**< The list won't set any of its size hints to inform
* how a possible container should resize it. Then, if
* it's not created as a "resize object", it might end
* with zeroed dimensions. The list will respect the
* container's geometry and, if any of its items won't
* fit into its transverse axis, one won't be able to
* scroll it in that direction. */
ELM_LIST_SCROLL, /**< Default value. This is the same as #ELM_LIST_COMPRESS,
* with the exception that if any of its items won't fit
* into its transverse axis, one will be able to scroll it
* in that direction. */
ELM_LIST_LIMIT, /**< Sets a minimum size hint on the list object, so that
* containers may respect it (and resize itself to fit the
* child properly). More specifically, a minimum size hint
* will be set for its transverse axis, so that the largest
* item in that direction fits well. This is naturally bound
* by the list object's maximum size hints, set externally.
*/
ELM_LIST_EXPAND, /**< Besides setting a minimum size on the transverse axis,
* just like on @ref ELM_LIST_LIMIT, the list will set a
* minimum size on the longitudinal axis, trying to reserve
* space to all its children to be visible at a time. . This
* is naturally bound by the list object's maximum size
* hints, set externally. */
ELM_LIST_LAST /**< Indicates error if returned by elm_list_mode_get(). */
} Elm_List_Mode;
typedef enum
{

View File

@ -6768,7 +6768,7 @@ _elm_genlist_item_sorted_insert(Eo *obj, Elm_Genlist_Data *sd, const Elm_Genlist
{
// Inlist is not sorted!
Elm_Gen_Item *prev_rel = NULL;
int cmp;
int cmp = 0;
EINA_INLIST_FOREACH(sd->items, rel)
{

View File

@ -30,7 +30,7 @@ enum Elm.Scroller.Single_Direction
mixin @beta Elm.Interface_Scrollable requires Efl.Ui.Widget extends Efl.Ui.Scrollable, Efl.Ui.Focus.Manager_Sub, Efl.Ui.Widget_Focus_Manager
{
[[Elm scrollable mixin]]
eo_prefix: elm_interface_scrollable;
c_prefix: elm_interface_scrollable;
data: Elm_Scrollable_Smart_Interface_Data;
methods {
@property gravity {

View File

@ -1,5 +1,5 @@
/**
* @defgroup Elm_Textpath Textpath
* @defgroup Elm_Textpath_Group Textpath
* @ingroup Elementary
*/

View File

@ -63,7 +63,7 @@ abstract Efl.Object
@since 1.22
]]
eo_prefix: efl;
c_prefix: efl;
methods {
@property parent {

View File

@ -33,7 +33,7 @@ database_class_del(Eolian_Class *cl)
eina_list_free(cl->callables);
eina_list_free(cl->composite);
if (cl->eo_prefix) eina_stringshare_del(cl->eo_prefix);
if (cl->c_prefix) eina_stringshare_del(cl->c_prefix);
if (cl->ev_prefix) eina_stringshare_del(cl->ev_prefix);
if (cl->data_type) eina_stringshare_del(cl->data_type);

View File

@ -24,7 +24,7 @@ EAPI Eina_Stringshare*
eolian_class_eo_prefix_get(const Eolian_Class *cl)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(cl, NULL);
return cl->eo_prefix;
return cl->c_prefix;
}
EAPI Eina_Stringshare*

View File

@ -55,7 +55,7 @@ eolian_event_c_name_get(const Eolian_Event *event)
char buf[512];
char *tmp = buf;
const char *pfx = event->klass->ev_prefix;
if (!pfx) pfx = event->klass->eo_prefix;
if (!pfx) pfx = event->klass->c_prefix;
if (!pfx) pfx = event->klass->base.name;
snprintf(buf, sizeof(buf), "%s_EVENT_%s", pfx, event->base.name);
eina_str_toupper(&tmp);

View File

@ -38,11 +38,11 @@ eolian_function_type_get(const Eolian_Function *fid)
}
static const char *
_get_eo_prefix(const Eolian_Function *foo_id, char *buf)
_get_c_prefix(const Eolian_Function *foo_id, char *buf)
{
char *tmp = buf;
if (foo_id->klass->eo_prefix)
return foo_id->klass->eo_prefix;
if (foo_id->klass->c_prefix)
return foo_id->klass->c_prefix;
strcpy(buf, foo_id->klass->base.name);
eina_str_tolower(&buf);
while ((tmp = strchr(tmp, '.'))) *tmp = '_';
@ -88,7 +88,7 @@ eolian_function_full_c_name_get(const Eolian_Function *foo_id,
{
char tbuf[512];
tbuf[0] = '\0';
const char *prefix = (ftype != EOLIAN_FUNCTION_POINTER) ? _get_eo_prefix(foo_id, tbuf): tbuf;
const char *prefix = (ftype != EOLIAN_FUNCTION_POINTER) ? _get_c_prefix(foo_id, tbuf): tbuf;
if (!prefix)
return NULL;

View File

@ -24,9 +24,9 @@ enum Tokens
* they just fill in the "kw" field of the token */
#define KEYWORDS KW(class), KW(const), KW(enum), KW(return), KW(struct), \
\
KW(abstract), KW(composite), KW(constructor), KW(constructors), KW(data), \
KW(destructor), KW(eo_prefix), KW(event_prefix), KW(events), \
KW(extends), KW(free), KW(get), KW(implements), KW(import), KW(interface), \
KW(abstract), KW(c_prefix), KW(composite), KW(constructor), KW(constructors), \
KW(data), KW(destructor), KW(event_prefix), KW(events), KW(extends), \
KW(free), KW(get), KW(implements), KW(import), KW(interface), \
KW(keys), KW(legacy), KW(methods), KW(mixin), KW(params), \
KW(parse), KW(parts), KW(ptr), KW(set), KW(type), KW(values), KW(var), KW(requires), \
\

View File

@ -1864,7 +1864,7 @@ error:
static void
parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
{
Eina_Bool has_eo_prefix = EINA_FALSE,
Eina_Bool has_c_prefix = EINA_FALSE,
has_event_prefix = EINA_FALSE,
has_data = EINA_FALSE,
has_methods = EINA_FALSE,
@ -1880,12 +1880,12 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
}
for (;;) switch (ls->t.kw)
{
case KW_eo_prefix:
CASE_LOCK(ls, eo_prefix, "eo prefix definition")
case KW_c_prefix:
CASE_LOCK(ls, c_prefix, "c prefix definition")
eo_lexer_get(ls);
check_next(ls, ':');
_validate_pfx(ls);
ls->klass->eo_prefix = eina_stringshare_ref(ls->t.value.s);
ls->klass->c_prefix = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
check_next(ls, ';');
break;

View File

@ -177,7 +177,7 @@ struct _Eolian_Class
Eolian_Object base;
Eolian_Class_Type type;
Eolian_Documentation *doc;
Eina_Stringshare *eo_prefix;
Eina_Stringshare *c_prefix;
Eina_Stringshare *ev_prefix;
Eina_Stringshare *data_type;
union {

View File

@ -3,7 +3,7 @@ import efl_canvas_animation_types;
class @beta Efl.Canvas.Animation extends Efl.Object implements Efl.Playable
{
[[Efl animation class]]
eo_prefix: efl_animation;
c_prefix: efl_animation;
methods {
@property final_state_keep {
[[Keep final state property]]

View File

@ -1,7 +1,7 @@
class @beta Efl.Canvas.Animation_Alpha extends Efl.Canvas.Animation
{
[[Efl alpha animation class]]
eo_prefix: efl_animation_alpha;
c_prefix: efl_animation_alpha;
data: Efl_Canvas_Animation_Alpha_Data;
methods {
@property alpha {

View File

@ -1,7 +1,7 @@
abstract @beta Efl.Canvas.Animation_Group extends Efl.Canvas.Animation
{
[[Efl group animation abstract class]]
eo_prefix: efl_animation_group;
c_prefix: efl_animation_group;
data: Efl_Canvas_Animation_Group_Data;
methods {
animation_add {

View File

@ -1,7 +1,7 @@
class @beta Efl.Canvas.Animation_Group_Parallel extends Efl.Canvas.Animation_Group
{
[[Efl group parallel animation class]]
eo_prefix: efl_animation_group_parallel;
c_prefix: efl_animation_group_parallel;
data: null;
methods {
}

View File

@ -286,9 +286,9 @@ _efl_canvas_animation_player_efl_player_pos_get(const Eo *eo_obj,
{
//TODO: this is not correct
Efl_Canvas_Animation *anim = efl_animation_player_animation_get(eo_obj);
double length = efl_player_length_get(anim);
double length = efl_animation_duration_get(anim);
return length * efl_player_progress_get(anim);
return length * efl_player_progress_get(eo_obj);
}
EOLIAN static void
@ -301,7 +301,7 @@ _efl_canvas_animation_player_efl_player_pos_set(Eo *eo_obj,
return;
EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
double length = efl_player_length_get(anim);
double length = efl_animation_duration_get(anim);
pd->progress = sec / length;
efl_animation_apply(anim, pd->progress, efl_animation_player_target_get(eo_obj));
}

View File

@ -1,7 +1,7 @@
class @beta Efl.Canvas.Animation_Player extends Efl.Object implements Efl.Player
{
[[Efl animation object class]]
eo_prefix: efl_animation_player;
c_prefix: efl_animation_player;
methods {
@property animation {
set {}

View File

@ -1,7 +1,7 @@
class @beta Efl.Canvas.Animation_Rotate extends Efl.Canvas.Animation
{
[[Efl rotate animation class]]
eo_prefix: efl_animation_rotate;
c_prefix: efl_animation_rotate;
data: Efl_Canvas_Animation_Rotate_Data;
methods {
@property rotate {

View File

@ -1,7 +1,7 @@
class @beta Efl.Canvas.Animation_Scale extends Efl.Canvas.Animation
{
[[Efl scale animation class]]
eo_prefix: efl_animation_scale;
c_prefix: efl_animation_scale;
data: Efl_Canvas_Animation_Scale_Data;
methods {
@property scale {

View File

@ -1,7 +1,7 @@
class @beta Efl.Canvas.Animation_Translate extends Efl.Canvas.Animation
{
[[Efl translate animation class]]
eo_prefix: efl_animation_translate;
c_prefix: efl_animation_translate;
data: Efl_Canvas_Animation_Translate_Data;
methods {
@property translate {

View File

@ -45,7 +45,7 @@ mixin @beta Efl.Canvas.Filter.Internal requires Efl.Object extends Efl.Gfx.Filte
{
[[Evas internal implementation of filters.]]
eo_prefix: evas;
c_prefix: evas;
data: Evas_Filter_Data;
methods {

View File

@ -8,7 +8,7 @@ mixin @beta Efl.Input.Event requires Efl.Object extends Efl.Duplicate
structures. This class is intended to carry more complex event
data, such as pointer events.
]]
eo_prefix: efl_input;
c_prefix: efl_input;
data: null;
methods {
@property timestamp @pure_virtual {

View File

@ -19,7 +19,7 @@ interface @beta Efl.Input.Interface
Long, repeated, key presses will always happen like this:
down...up,down...up,down...up (not down...up or down...down...down...up).
]]
eo_prefix: efl_input;
c_prefix: efl_input;
event_prefix: efl;
methods {
@property seat_event_filter @beta {

Some files were not shown because too many files have changed in this diff Show More