if EFL_ENABLE_COVERAGE
lcov-reset:
- @rm -rf coverage
- @find . -name "*.gcda" -exec rm {} \;
- @lcov --directory . --zerocounters
+ @rm -rf $(top_builddir)/coverage
+ @find $(top_builddir) -name "*.gcda" -delete
+ @lcov --zerocounters --directory $(top_builddir)
lcov-report:
- @mkdir coverage
- @lcov --compat-libtool --directory $(top_srcdir)/src --capture --output-file coverage/coverage.info
- @lcov -l coverage/coverage.info |grep "\\.h" |cut -d " " -f 2 > coverage/remove
- @lcov -r coverage/coverage.info `cat coverage/remove` > coverage/coverage.cleaned.info
- @rm coverage/remove
- @mv coverage/coverage.cleaned.info coverage/coverage.info
- @genhtml -t "$(PACKAGE_STRING)" -o coverage coverage/coverage.info
+ @mkdir $(top_builddir)/coverage
+ lcov --capture --compat-libtool --output-file $(top_builddir)/coverage/coverage.info --directory $(top_builddir)
+ lcov --remove $(top_builddir)/coverage/coverage.info '*.h' --output-file $(top_builddir)/coverage/coverage.cleaned.info
+ genhtml -t "$(PACKAGE_STRING)" -o $(top_builddir)/coverage/html $(top_builddir)/coverage/coverage.cleaned.info
+ @echo "Coverage Report at $(top_builddir)/coverage/html"
coverage:
- @make lcov-reset
- @make check
- @make lcov-report
+ @$(MAKE) lcov-reset
+ @$(MAKE) check
+ @$(MAKE) lcov-report
else
lcov-reset:
@echo "reconfigure with --enable-coverage"
* edje_player will automatically reload the file when it change on disk.
* Add SPACER part. This part are not putting anything into the canvas. So lighter and faster to
process (Use it to replace RECT part that are never visible and never catch any event).
+ * Add accessibility flags and API to retrieve the relevant part.
+ * Emit signal when flagged part size get to zero.
Improvements:
* Allocate once and reuse Evas_Map.
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
-DEPP_DIR=\"$(libdir)/$(PACKAGE)/utils\" \
@EDJE_CFLAGS@ @EDJE_CC_CFLAGS@ @EIO_CFLAGS@ @EVIL_CFLAGS@ @SNDFILE_CFLAGS@
-edje_cc_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_CC_LIBS@ @EVIL_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@ -lm
+edje_cc_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_CC_LIBS@ @EDJE_LIBS@ @EVIL_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@ -lm
edje_cc_LDFLAGS = @lt_enable_auto_import@
edje_watch_SOURCES = \
-I$(top_srcdir)/src/lib \
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
@EDJE_CFLAGS@ @EDJE_CC_CFLAGS@ @EIO_CFLAGS@ @EVIL_CFLAGS@ @EDJE_WATCH_CFLAGS@
-edje_watch_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_WATCH_LIBS@
+edje_watch_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_WATCH_LIBS@ @EDJE_LIBS@
edje_watch_LDFLAGS = @lt_enable_auto_import@
edje_decc_SOURCES = \
-I$(top_srcdir)/src/bin \
-I$(top_srcdir)/src/lib \
@EDJE_CFLAGS@ @EDJE_DECC_CFLAGS@ @EIO_CFLAGS@ @EVIL_CFLAGS@
-edje_decc_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_DECC_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@
+edje_decc_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_DECC_LIBS@ @EDJE_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@
edje_decc_LDFLAGS = @lt_enable_auto_import@
edje_player_SOURCES = edje_player.c
-I$(top_srcdir)/src/bin \
-I$(top_srcdir)/src/lib \
@EDJE_PLAYER_CFLAGS@ @EVIL_CFLAGS@ @EIO_CFLAGS@
-edje_player_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_PLAYER_LIBS@ @EVIL_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@
+edje_player_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_PLAYER_LIBS@ @EDJE_LIBS@ @EVIL_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@
edje_player_LDFLAGS = @lt_enable_auto_import@
edje_inspector_SOURCES = edje_inspector.c
-I$(top_srcdir)/src/bin \
-I$(top_srcdir)/src/lib \
@EDJE_INSPECTOR_CFLAGS@ @EIO_CFLAGS@
-edje_inspector_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_INSPECTOR_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@
+edje_inspector_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_INSPECTOR_LIBS@ @EDJE_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@
edje_inspector_LDFLAGS = @lt_enable_auto_import@
edje_external_inspector_SOURCES = edje_external_inspector.c
-I$(top_srcdir)/src/bin \
-I$(top_srcdir)/src/lib \
@EDJE_EXTERNAL_INSPECTOR_CFLAGS@ @EIO_CFLAGS@
-edje_external_inspector_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_EXTERNAL_INSPECTOR_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@
+edje_external_inspector_LDADD = $(top_builddir)/src/lib/libedje.la @EDJE_EXTERNAL_INSPECTOR_LIBS@ @EDJE_LIBS@ @VORBISENC_LIBS@ @FLAC_LIBS@ @SNDFILE_LIBS@
edje_external_inspector_LDFLAGS = @lt_enable_auto_import@
EXTRA_DIST = @EDJE_RECC_PRG@ edje_cc.h edje_convert.h edje_convert.c edje_multisense_convert.h edje_data_convert.c
int min_quality = 0;
int max_quality = 100;
int compress_mode = EET_COMPRESSION_DEFAULT;
-int threads = 1;
+int threads = 0;
static void
main_help(void)
exit(-1);
}
+ _on_edjecc = EINA_TRUE;
using_file(file_in);
if (!edje_init())
static void st_collections_group_parts_part_select_mode(void);
static void st_collections_group_parts_part_cursor_mode(void);
static void st_collections_group_parts_part_multiline(void);
+static void st_collections_group_parts_part_access(void);
static void st_collections_group_parts_part_dragable_x(void);
static void st_collections_group_parts_part_dragable_y(void);
static void st_collections_group_parts_part_dragable_confine(void);
static void st_collections_group_parts_part_description_source(void);
static void st_collections_group_parts_part_description_state(void);
static void st_collections_group_parts_part_description_visible(void);
+static void st_collections_group_parts_part_description_limit(void);
static void st_collections_group_parts_part_description_align(void);
static void st_collections_group_parts_part_description_fixed(void);
static void st_collections_group_parts_part_description_min(void);
{"collections.group.parts.part.select_mode", st_collections_group_parts_part_select_mode},
{"collections.group.parts.part.cursor_mode", st_collections_group_parts_part_cursor_mode},
{"collections.group.parts.part.multiline", st_collections_group_parts_part_multiline},
+ {"collections.group.parts.part.access", st_collections_group_parts_part_access},
{"collections.group.parts.part.image", st_images_image}, /* dup */
{"collections.group.parts.part.set.name", st_images_set_name},
{"collections.group.parts.part.set.image.image", st_images_set_image_image},
{"collections.group.parts.part.description.source", st_collections_group_parts_part_description_source},
{"collections.group.parts.part.description.state", st_collections_group_parts_part_description_state},
{"collections.group.parts.part.description.visible", st_collections_group_parts_part_description_visible},
+ {"collections.group.parts.part.description.limit", st_collections_group_parts_part_description_limit},
{"collections.group.parts.part.description.align", st_collections_group_parts_part_description_align},
{"collections.group.parts.part.description.fixed", st_collections_group_parts_part_description_fixed},
{"collections.group.parts.part.description.min", st_collections_group_parts_part_description_min},
Edje_Pack_Element_Parser *pitem;
Edje_Part_Description_Common *ed, *ed2;
Edje_List_Foreach_Data fdata;
- Edje_String *es;
Eina_List *l;
char *parent_name;
unsigned int i, j;
if (pc2->data)
{
- char *key;
+ char *key, *data;
memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
eina_hash_foreach(pc2->data,
_edje_data_item_list_foreach, &fdata);
- if (!pc->data)
- pc->data = eina_hash_string_small_new(free);
+ if (!pc->data) pc->data = eina_hash_string_small_new(free);
+ EINA_LIST_FREE(fdata.list, key)
+ {
+ data = eina_hash_find(pc2->data, key);
+ eina_hash_direct_add(pc->data, key, data);
+ }
+ }
+
+ if (pc2->alias)
+ {
+ char *key, *alias;
+ memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
+ eina_hash_foreach(pc2->alias,
+ _edje_data_item_list_foreach, &fdata);
+ if (!pc->alias) pc->alias = eina_hash_string_small_new(free);
+ EINA_LIST_FREE(fdata.list, key)
+ {
+ alias = eina_hash_find(pc2->alias, key);
+ eina_hash_direct_add(pc->alias, key, alias);
+ }
+ }
+ if (pc2->aliased)
+ {
+ char *key, *aliased;
+ memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
+ eina_hash_foreach(pc2->aliased,
+ _edje_data_item_list_foreach, &fdata);
+ if (!pc->aliased) pc->aliased = eina_hash_string_small_new(free);
EINA_LIST_FREE(fdata.list, key)
{
- es = mem_alloc(SZ(Edje_String));
- es = (Edje_String *)eina_hash_find(pc2->data, key);
- eina_hash_direct_add(pc->data, key, es);
+ aliased = eina_hash_find(pc2->aliased, key);
+ eina_hash_direct_add(pc->aliased, key, aliased);
}
}
ep->select_mode = ep2->select_mode;
ep->cursor_mode = ep2->cursor_mode;
ep->multiline = ep2->multiline;
+ ep->access = ep2->access;
ep->dragable.x = ep2->dragable.x;
ep->dragable.step_x = ep2->dragable.step_x;
ep->dragable.count_x = ep2->dragable.count_x;
ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
ep->precise_is_inside = 0;
ep->use_alternate_font_metrics = 0;
+ ep->access = 0;
ep->clip_to_id = -1;
ep->dragable.confine_id = -1;
ep->dragable.event_id = -1;
/**
@page edcref
+ @property
+ access
+ @parameters
+ [1 or 0]
+ @effect
+ Specifies whether the part will use accessibility feature (1),
+ or not (0). It's set to 0 by default.
+ @endproperty
+*/
+static void
+st_collections_group_parts_part_access(void)
+{
+ check_arg_count(1);
+
+ current_part->access = parse_bool(0);
+}
+
+/**
+ @page edcref
@block
dragable
@context
}
ed->visible = 1;
+ ed->limit = 0;
ed->align.x = FROM_DOUBLE(0.5);
ed->align.y = FROM_DOUBLE(0.5);
ed->min.w = 0;
current_desc->visible = parse_bool(0);
}
+/**
+ @page edcref
+ @property
+ limit
+ @parameters
+ [NONE, WIDTH, HEIGHT or BOTH]
+ @effect
+ Emit a signal when the part size change from zero or to a zero size
+ ('limit,width,over', 'limit,width,zero'). By default no signal are
+ emitted.
+ @endproperty
+ @since 1.7.0
+*/
+static void
+st_collections_group_parts_part_description_limit(void)
+{
+ check_arg_count(1);
+
+ current_desc->limit = parse_enum(0,
+ "NONE", 0,
+ "WIDTH", 1,
+ "HEIGHT", 2,
+ "BOTH", 3);
+
+ if (current_desc->limit)
+ {
+ Edje_Part_Collection *pc;
+ int count;
+
+ pc = eina_list_data_get(eina_list_last(edje_collections));
+ count = pc->limits.parts_count++;
+ pc->limits.parts = realloc(pc->limits.parts,
+ pc->limits.parts_count * sizeof (Edje_Part_Limit));
+ data_queue_part_lookup(pc, current_part->name,
+ &(pc->limits.parts[count].part));
+ }
+}
/**
@page edcref
sc->ef = ef;
sc->cd = cd;
sc->i = i;
- // XXX: from here
snprintf(sc->tmpn, PATH_MAX, "%s/edje_cc.sma-tmp-XXXXXX", tmp_dir);
sc->tmpn_fd = mkstemp(sc->tmpn);
if (sc->tmpn_fd < 0)
"compilation.\n", sc->tmpn);
}
create_script_file(ef, sc->tmpn, cd, sc->tmpn_fd);
- // XXX; to here -> can make set of threads that report back and then
- // spawn
snprintf(buf, sizeof(buf),
- "embryo_cc -i %s/include -o %s %s",
- eina_prefix_data_get(pfx), sc->tmpo, sc->tmpn);
+ "%s/embryo_cc -i %s/include -o %s %s",
+ eina_prefix_bin_get(pfx),
+ eina_prefix_data_get(pfx),
+ sc->tmpo, sc->tmpn);
pending_threads++;
sc->exe = ecore_exe_run(buf, sc);
ecore_event_handler_add(ECORE_EXE_EVENT_DEL,
}
else
{
+ char *alias;
+ alias = eina_hash_find(part->pc->alias, part->name);
+ if (!alias)
+ alias = part->name;
for (i = 0; i < part->pc->parts_count; ++i)
{
ep = part->pc->parts[i];
- if ((ep->name) && (!strcmp(ep->name, part->name)))
+ if ((ep->name) && (!strcmp(ep->name, alias)))
{
handle_slave_lookup(part_slave_lookups, part->dest, ep->id);
*(part->dest) = ep->id;
if (i == part->pc->parts_count)
{
- ERR("%s: Error. Unable to find part name \"%s\".",
- progname, part->name);
+ ERR("%s: Error. Unable to find part name \"%s\" needed in group '%s'.",
+ progname, alias, part->pc->part);
exit(-1);
}
}
EAPI Eina_Bool edje_object_part_box_remove_all (Evas_Object *obj, const char *part, Eina_Bool clear);
/**
+ * @brief Retrieve a list all accessibility part names
+ *
+ * @param obj A valid Evas_Object handle
+ * @return A list all accessibility part names on @p obj
+ * @since 1.3.0
+ */
+EAPI Eina_List * edje_object_access_part_list_get (const Evas_Object *obj);
+
+/**
* @brief Retrieve a child from a table
*
* @param obj A valid Evas_Object handle
edje_object_size_min_calc(ed->obj, &w, &h);
evas_object_size_hint_min_set(ed->obj, w, h);
}
+
+ if (!ed->collection) return ;
+
+ for (i = 0; i < ed->collection->limits.parts_count; i++)
+ {
+ const char *name;
+ unsigned char limit;
+ int part;
+
+ name = ed->collection->parts[i]->name;
+ part = ed->collection->limits.parts[i].part;
+ limit = ed->table_parts[part]->chosen_description->limit;
+ switch (limit)
+ {
+ case 0:
+ ed->collection->limits.parts[i].width = 2;
+ ed->collection->limits.parts[i].height = 2;
+ break;
+ case 1:
+ ed->collection->limits.parts[i].height = 2;
+ break;
+ case 2:
+ ed->collection->limits.parts[i].width = 2;
+ break;
+ case 3:
+ break;
+ }
+
+ if (limit | 1)
+ {
+ if (ed->table_parts[part]->w > 0 &&
+ (ed->collection->limits.parts[i].width <= 0 ||
+ ed->collection->limits.parts[i].width == 2))
+ {
+ ed->collection->limits.parts[i].width = 1;
+ _edje_emit(ed, "limit,width,over", name);
+ }
+ else if (ed->table_parts[part]->w < 0 &&
+ ed->collection->limits.parts[i].width >= 0)
+ {
+ ed->collection->limits.parts[i].width = -1;
+ _edje_emit(ed, "limit,width,below", name);
+ }
+ else if (ed->table_parts[part]->w == 0 &&
+ ed->collection->limits.parts[i].width != 0)
+ {
+ ed->collection->limits.parts[i].width = 0;
+ _edje_emit(ed, "limit,width,zero", name);
+ }
+ }
+ if (limit | 2)
+ {
+ if (ed->table_parts[part]->h > 0 &&
+ (ed->collection->limits.parts[i].height <= 0 ||
+ ed->collection->limits.parts[i].height == 2))
+ {
+ ed->collection->limits.parts[i].height = 1;
+ _edje_emit(ed, "limit,height,over", name);
+ }
+ else if (ed->table_parts[part]->h < 0 &&
+ ed->collection->limits.parts[i].height >= 0)
+ {
+ ed->collection->limits.parts[i].height = -1;
+ _edje_emit(ed, "limit,height,beloh", name);
+ }
+ else if (ed->table_parts[part]->h == 0 &&
+ ed->collection->limits.parts[i].height != 0)
+ {
+ ed->collection->limits.parts[i].height = 0;
+ _edje_emit(ed, "limit,height,zero", name);
+ }
+ }
+ }
}
void
if (*maxh < *minh) *maxh = *minh;
}
}
+ if ((chosen_desc->text.fit_x) || (chosen_desc->text.fit_y))
+ {
+ double s = 1.0;
+
+ if (ep->part->scale) s = TO_DOUBLE(sc);
+ evas_object_scale_set(ep->object, s);
+ evas_object_textblock_size_formatted_get(ep->object, &tw, &th);
+ if (chosen_desc->text.fit_x)
+ {
+ if ((tw > 0) && (tw > params->w))
+ {
+ s = (s * params->w) / (double)tw;
+ evas_object_scale_set(ep->object, s);
+ evas_object_textblock_size_formatted_get(ep->object, &tw, &th);
+ }
+ }
+ if (chosen_desc->text.fit_y)
+ {
+ if ((th > 0) && (th > params->h))
+ {
+ s = (s * params->h) / (double)th;
+ evas_object_scale_set(ep->object, s);
+ evas_object_textblock_size_formatted_get(ep->object, &tw, &th);
+ }
+ }
+ }
evas_object_textblock_valign_set(ep->object, TO_DOUBLE(chosen_desc->text.align.y));
}
}
Eet_Data_Descriptor *_edje_edd_edje_part_image_id = NULL;
Eet_Data_Descriptor *_edje_edd_edje_part_image_id_pointer = NULL;
Eet_Data_Descriptor *_edje_edd_edje_external_param = NULL;
+Eet_Data_Descriptor *_edje_edd_edje_part_limit = NULL;
#define EMP(Type, Minus) \
Eina_Mempool *_emp_##Type = NULL; \
{ EDJE_PART_TYPE_TABLE, "table" },
{ EDJE_PART_TYPE_EXTERNAL, "external" },
{ EDJE_PART_TYPE_PROXY, "proxy" },
- { EDJE_PART_TYPE_SPACER, "spacer" }
+ { EDJE_PART_TYPE_SPACER, "spacer" }
};
static const char *
FREED(_edje_edd_edje_external_param);
FREED(_edje_edd_edje_image_directory_set);
FREED(_edje_edd_edje_image_directory_set_entry);
+ FREED(_edje_edd_edje_part_limit);
}
#define EDJE_DEFINE_POINTER_TYPE(Type, Name) \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "state.name", state.name, EET_T_STRING); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "state.value", state.value, EET_T_DOUBLE); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "visible", visible, EET_T_CHAR); \
+ EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "limit", limit, EET_T_CHAR); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.x", align.x, EDJE_T_FLOAT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "align.y", align.y, EDJE_T_FLOAT); \
EET_DATA_DESCRIPTOR_ADD_BASIC(Edd, Type, "fixed.w", fixed.w, EET_T_UCHAR); \
EDJE_DATA_DESCRIPTOR_DESCRIPTION_COMMON_SUB(_edje_edd_edje_part_description_external, Edje_Part_Description_External, common);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_description_external, Edje_Part_Description_External, "external_params", external_params, _edje_edd_edje_external_param);
+ EDJE_DEFINE_POINTER_TYPE(Part_Description_Common, part_description_spacer);
EDJE_DEFINE_POINTER_TYPE(Part_Description_Common, part_description_rectangle);
EDJE_DEFINE_POINTER_TYPE(Part_Description_Common, part_description_swallow);
EDJE_DEFINE_POINTER_TYPE(Part_Description_Common, part_description_group);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "select_mode", select_mode, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "cursor_mode", cursor_mode, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "multiline", multiline, EET_T_UCHAR);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "access", access, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "api.name", api.name, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "api.description", api.description, EET_T_STRING);
+ EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Limit);
+ _edje_edd_edje_part_limit = eet_data_descriptor_file_new(&eddc);
+
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_limit, Edje_Part_Limit, "part", part, EET_T_INT);
+
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Part_Collection);
_edje_edd_edje_part_collection =
eet_data_descriptor_file_new(&eddc);
EDJE_DEFINE_POINTER_TYPE(Limit, limit);
EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_part_collection, Edje_Part_Collection, "limits.vertical", limits.vertical, _edje_edd_edje_limit_pointer);
EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_part_collection, Edje_Part_Collection, "limits.horizontal", limits.horizontal, _edje_edd_edje_limit_pointer);
+ EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_part_collection, Edje_Part_Collection, "limits.parts", limits.parts, _edje_edd_edje_part_limit);
EET_DATA_DESCRIPTOR_ADD_HASH(_edje_edd_edje_part_collection, Edje_Part_Collection, "data", data, _edje_edd_edje_string);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, Edje_Part_Collection, "id", id, EET_T_INT);
{
size_t start, end;
char *tmp;
- Edje_Entry_Change_Info *info = calloc(1, sizeof(*info));
- info->insert = EINA_FALSE;
+ Edje_Entry_Change_Info *info;
+
start = evas_textblock_cursor_pos_get(en->sel_start);
end = evas_textblock_cursor_pos_get(en->sel_end);
+ if (start == end)
+ goto noop;
+
+ info = calloc(1, sizeof(*info));
+ info->insert = EINA_FALSE;
info->change.del.start = start;
info->change.del.end = end;
_edje_emit(ed, "entry,changed", en->rp->part->name);
_edje_emit_full(ed, "entry,changed,user", en->rp->part->name, info,
_free_entry_change_info);
+noop:
_sel_clear(en->cursor, en->rp->object, en);
}
evas_textblock_cursor_char_prev(en->cursor);
evas_textblock_cursor_word_start(en->cursor);
- _sel_extend(en->cursor, rp->object, en);
+ _sel_preextend(en->cursor, rp->object, en);
_range_del_emit(ed, en->cursor, rp->object, en);
}
}
if (rp->swallowed_object)
{
- _edje_real_part_swallow_clear(rp);
/* Objects swallowed by the app do not get deleted,
but those internally swallowed (GROUP type) do. */
switch (rp->part->type)
default:
break;
}
+ _edje_real_part_swallow_clear(rp);
rp->swallowed_object = NULL;
}
if (rp->items)
emsg.sig = sig;
emsg.src = alias ? alias : new_src;
emsg.data = NULL;
- _edje_message_send(ed_parent, EDJE_QUEUE_SCRIPT,
- EDJE_MESSAGE_SIGNAL, 0, &emsg);
+ if (ed_parent)
+ _edje_message_send(ed_parent, EDJE_QUEUE_SCRIPT,
+ EDJE_MESSAGE_SIGNAL, 0, &emsg);
}
#define BUF_LEN 64
#define SND_PROCESS_LENGTH 2048
-#ifdef HAVE_LIBREMIX
+#ifdef ENABLE_MULTISENSE
static Ecore_Thread *player_thread = NULL;
static int command_pipe[2];
static Eina_Bool pipe_initialized = EINA_FALSE;
Edje_Tone_Action tone;
} type;
};
-
-#ifdef HAVE_LIBREMIX
+#ifdef ENABLE_MULTISENSE
static Multisense_Data *
init_multisense_environment(void)
{
m = _edje_module_handle_load(ms_factory);
if (!m) goto err;
-
+#ifdef HAVE_LIBREMIX
msdata->msenv->remixenv = remix_init();
-
- multisense_factory_init =
+#endif
+ multisense_factory_init =
eina_module_symbol_get(m, "multisense_factory_init");
if (multisense_factory_init) multisense_factory_init(msdata->msenv);
-
- msdata->multisense_sound_player_get =
+#ifdef HAVE_LIBREMIX
+ msdata->multisense_sound_player_get =
eina_module_symbol_get(m, "multisense_sound_player_get");
if (!msdata->multisense_sound_player_get) goto err;
msdata->player, msdata->player_layer,
REMIX_SAMPLES(0),
REMIX_SAMPLES(REMIX_COUNT_INFINITE));
+#endif
return msdata;
err:
if (msdata)
{
+#ifdef HAVE_LIBREMIX
if (msdata->deck) remix_destroy(msdata->msenv->remixenv, msdata->deck);
if (msdata->msenv->remixenv) remix_purge(msdata->msenv->remixenv);
+#endif
if (msdata->msenv) free(msdata->msenv);
free(msdata);
}
}
#endif
-#ifdef HAVE_LIBREMIX
+#if defined(ENABLE_MULTISENSE) && defined(HAVE_LIBREMIX)
static RemixBase *
-eet_sound_reader_get(Edje_Multisense_Env *msenv, const char *path, const char *sound_id, const double speed)
+eet_sound_reader_get(Edje_Multisense_Env *msenv, const char *path,
+ const char *sound_id, const double speed)
{
RemixPlugin *sf_plugin = NULL;
RemixBase * eet_snd_reader = NULL;
static RemixBase *
-edje_remix_sample_create(Multisense_Data *msdata, Edje*ed, Edje_Sample_Action *action)
+edje_remix_sample_create(Multisense_Data *msdata, Edje *ed, Edje_Sample_Action *action)
{
RemixBase *remix_snd = NULL;
Edje_Sound_Sample *sample;
}
static RemixBase *
-edje_remix_tone_create(Multisense_Data *msdata, Edje*ed, Edje_Tone_Action *action)
+edje_remix_tone_create(Multisense_Data *msdata, Edje *ed, Edje_Tone_Action *action)
{
Edje_Sound_Tone *tone;
RemixSquareTone *square = NULL;
RemixBase *sound;
if (read(command_pipe[0], &command, sizeof(command)) <= 0) return;
+
switch (command.action)
{
case EDJE_PLAY_SAMPLE:
}
#endif
-#ifdef HAVE_LIBREMIX
+#ifdef ENABLE_MULTISENSE
// msdata outside of thread due to thread issues in dlsym etc.
static Multisense_Data *msdata = NULL;
{
// cleanup msdata outside of thread due to thread issues in dlsym etc.
if (!msdata) return;
+#ifdef HAVE_LIBREMIX
//cleanup Remix stuffs
remix_destroy(msdata->msenv->remixenv, msdata->player);
remix_destroy(msdata->msenv->remixenv, msdata->deck);
remix_purge(msdata->msenv->remixenv);
-
+#endif
free(msdata->msenv);
free(msdata);
msdata = NULL;
_player_job(void *data __UNUSED__, Ecore_Thread *th)
{
fd_set wait_fds;
+#ifdef HAVE_LIBREMIX
RemixBase *sound;
RemixCount process_len;
-// disable and move outside of thread due to dlsym etc. thread issues
+#endif
+// disable and move outside of thread due to dlsym etc. thread issues
// Multisense_Data * msdata = init_multisense_environment();
if (!msdata) return;
fcntl(command_pipe[0], F_SETFL, O_NONBLOCK);
FD_ZERO(&wait_fds);
FD_SET(command_pipe[0], &wait_fds);
-
+#ifdef HAVE_LIBREMIX
while (!ecore_thread_check(th))
{
if (!msdata->remaining)
{
remix_destroy(msdata->msenv->remixenv, sound);
}
-
+#endif
close(command_pipe[0]);
close(command_pipe[1]);
}
-#endif
-#ifdef HAVE_LIBREMIX
static void
_player_cancel(void *data __UNUSED__, Ecore_Thread *th __UNUSED__)
{
_msdata_free();
player_thread = NULL;
}
-#endif
-#ifdef HAVE_LIBREMIX
static void
_player_end(void *data __UNUSED__, Ecore_Thread *th __UNUSED__)
{
_edje_multisense_internal_sound_sample_play(Edje *ed, const char *sample_name, const double speed)
{
ssize_t size = 0;
-#ifdef ENABLE_MULTISENSE
+#if defined(ENABLE_MULTISENSE) && defined(HAVE_LIBREMIX)
Edje_Multisense_Sound_Action command;
if ((!pipe_initialized) && (!player_thread)) return EINA_FALSE;
_edje_multisense_internal_sound_tone_play(Edje *ed, const char *tone_name, const double duration)
{
ssize_t size = 0;
-#ifdef ENABLE_MULTISENSE
+#if defined(ENABLE_MULTISENSE) && defined(HAVE_LIBREMIX)
Edje_Multisense_Sound_Action command;
if ((!pipe_initialized) && (!player_thread)) return EINA_FALSE;
/* increment this when you add new feature to edje file format without
* breaking backward compatibility.
*/
-#define EDJE_FILE_MINOR 3
+#define EDJE_FILE_MINOR 4
/* FIXME:
*
typedef struct _Edje_Part_Description_Spec_Table Edje_Part_Description_Spec_Table;
typedef struct _Edje_Patterns Edje_Patterns;
typedef struct _Edje_Part_Box_Animation Edje_Part_Box_Animation;
+typedef struct _Edje_Part_Limit Edje_Part_Limit;
typedef struct _Edje Edje;
typedef struct _Edje_Real_Part_State Edje_Real_Part_State;
unsigned short colspan, rowspan;
};
+struct _Edje_Part_Limit
+{
+ int part;
+
+ signed char width; /* -1, 0 or 1 */
+ signed char height; /* -1, 0, or 1 */
+};
+
/*----------*/
struct _Edje_Part_Collection
Edje_Limit **horizontal;
unsigned int horizontal_count;
+
+ Edje_Part_Limit *parts;
+ unsigned int parts_count;
} limits;
Edje_Part **parts; /* an array of Edje_Part */
unsigned char select_mode;
unsigned char cursor_mode;
unsigned char multiline;
+ unsigned char access; /* it will be used accessibility feature */
Edje_Part_Api api;
};
} persp;
unsigned char visible; /* is it shown */
+ unsigned char limit; /* 0 == no, 1 = width, 2 = height, 3 = both */
};
struct _Edje_Part_Description_Spec_Fill
rp->swallowed_object = NULL;
rp->swallow_params.min.w = 0;
rp->swallow_params.min.h = 0;
- rp->swallow_params.max.w = 0;
- rp->swallow_params.max.h = 0;
+ rp->swallow_params.max.w = 0;
+ rp->swallow_params.max.h = 0;
rp->edje->dirty = 1;
- rp->edje->recalc_call = 1;
+ rp->edje->recalc_call = 1;
#ifdef EDJE_CALC_CACHE
- rp->invalidate = 1;
+ rp->invalidate = 1;
#endif
- _edje_recalc(rp->edje);
+ _edje_recalc_do(rp->edje);
break;
case EDJE_USER_BOX_PACK:
child = eud->u.box.child;
Edje *ed;
Edje_Real_Part *rp;
Edje_User_Defined *eud = NULL;
- Eina_List *l;
ed = _edje_fetch(obj);
if ((!ed) || (!part)) return EINA_FALSE;
// XXX: by Sachiel, January 21th 2009, 19:30 UTC
_edje_recalc_do(ed);
- EINA_LIST_FOREACH(ed->user_defined, l, eud)
- if (eud->type == EDJE_USER_SWALLOW && !strcmp(part, eud->part))
- {
- ed->user_defined = eina_list_remove_list(ed->user_defined, l);
- if (!obj_swallow)
- {
- _edje_user_definition_free(eud);
- l = NULL;
- eud = NULL;
- break;
- }
- break;
- }
-
rp = evas_object_data_get(obj_swallow, "\377 edje.swallowing_part");
if (rp)
{
if (eud->type == EDJE_USER_SWALLOW && eud->u.swallow.child == obj_swallow)
{
_edje_user_definition_free(eud);
- break;
+ return ;
}
}
}
return r;
}
+EAPI Eina_List *
+edje_object_access_part_list_get(const Evas_Object *obj)
+{
+ Edje *ed;
+ Eina_List *access_parts = NULL;
+
+ ed = _edje_fetch(obj);
+ if ((!ed)) return NULL;
+
+ unsigned int i;
+ for (i = 0; i < ed->table_parts_size; i++)
+ {
+ Edje_Real_Part *rp;
+ rp = ed->table_parts[i];
+ if (rp->part->access)
+ access_parts = eina_list_append(access_parts, rp->part->name);
+ }
+
+ return access_parts;
+}
+
static void
_edje_box_child_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *child __UNUSED__, void *einfo __UNUSED__)
{
}
rp->swallow_params.aspect.w = aw;
rp->swallow_params.aspect.h = ah;
- evas_object_data_set(rp->swallowed_object, "\377 edje.swallowing_part", rp);
+ evas_object_data_set(rp->swallowed_object, "\377 edje.swallowing_part", rp);
}
#ifdef EDJE_CALC_CACHE
{
if (rp->swallowed_object != obj_swallow)
{
- _edje_real_part_swallow_clear(rp);
- rp->swallowed_object = NULL;
+ edje_object_part_unswallow(rp->edje->obj, rp->swallowed_object);
}
else
{
else evas_object_clip_set(rp->swallowed_object, rp->edje->base.clipper);
evas_object_stack_above(rp->swallowed_object, rp->object);
evas_object_event_callback_add(rp->swallowed_object,
- EVAS_CALLBACK_FREE,
+ EVAS_CALLBACK_DEL,
_edje_object_part_swallow_free_cb,
rp);
evas_object_event_callback_add(rp->swallowed_object,
{
evas_object_smart_member_del(rp->swallowed_object);
evas_object_event_callback_del_full(rp->swallowed_object,
- EVAS_CALLBACK_FREE,
+ EVAS_CALLBACK_DEL,
_edje_object_part_swallow_free_cb,
rp);
evas_object_event_callback_del_full(rp->swallowed_object,
if (rp->part->mouse_events)
_edje_callbacks_del(rp->swallowed_object, rp->edje);
_edje_callbacks_focus_del(rp->swallowed_object, rp->edje);
+ rp->swallowed_object = NULL;
}
static void