forked from enlightenment/efl
Merge branch 'master' into devs/hermet/lottie
This commit is contained in:
commit
0d063171c6
|
@ -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 \
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -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"
|
||||
|
||||
/**
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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.]]
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.]]
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)]]
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ typedef Eo Efl_Ui_Textpath;
|
|||
|
||||
/** Textpath direction
|
||||
*
|
||||
* @ingroup Efl_Ui
|
||||
* @ingroup Elm_Textpath_Group
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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().]]
|
||||
}
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @defgroup Elm_Textpath Textpath
|
||||
* @defgroup Elm_Textpath_Group Textpath
|
||||
* @ingroup Elementary
|
||||
*/
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ abstract Efl.Object
|
|||
|
||||
@since 1.22
|
||||
]]
|
||||
eo_prefix: efl;
|
||||
c_prefix: efl;
|
||||
|
||||
methods {
|
||||
@property parent {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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*
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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), \
|
||||
\
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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 {}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
Loading…
Reference in New Issue