forked from enlightenment/efl
edje_cc can now use group.program_remove to remove inherited programs
@feature
This commit is contained in:
parent
7cfde40500
commit
f3d5cee0e4
|
@ -157,6 +157,7 @@ void data_queue_part_reallocated_lookup(Edje_Part_Collection *pc, const char
|
||||||
void data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *dest);
|
void data_queue_copied_part_lookup(Edje_Part_Collection *pc, int *src, int *dest);
|
||||||
void *data_queue_program_lookup(Edje_Part_Collection *pc, const char *name, int *dest);
|
void *data_queue_program_lookup(Edje_Part_Collection *pc, const char *name, int *dest);
|
||||||
void program_lookup_rename(void *p, const char *name);
|
void program_lookup_rename(void *p, const char *name);
|
||||||
|
void copied_program_lookup_delete(Edje_Part_Collection *pc, const char *name);
|
||||||
void data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest);
|
void data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest);
|
||||||
void data_queue_anonymous_lookup(Edje_Part_Collection *pc, Edje_Program *ep, int *dest);
|
void data_queue_anonymous_lookup(Edje_Part_Collection *pc, Edje_Program *ep, int *dest);
|
||||||
void data_queue_copied_anonymous_lookup(Edje_Part_Collection *pc, int *src, int *dest);
|
void data_queue_copied_anonymous_lookup(Edje_Part_Collection *pc, int *src, int *dest);
|
||||||
|
|
|
@ -195,6 +195,7 @@ static void ob_collections_group(void);
|
||||||
static void st_collections_group_name(void);
|
static void st_collections_group_name(void);
|
||||||
static void st_collections_group_inherit(void);
|
static void st_collections_group_inherit(void);
|
||||||
static void st_collections_group_part_remove(void);
|
static void st_collections_group_part_remove(void);
|
||||||
|
static void st_collections_group_program_remove(void);
|
||||||
static void st_collections_group_script_only(void);
|
static void st_collections_group_script_only(void);
|
||||||
static void st_collections_group_alias(void);
|
static void st_collections_group_alias(void);
|
||||||
static void st_collections_group_min(void);
|
static void st_collections_group_min(void);
|
||||||
|
@ -498,6 +499,7 @@ New_Statement_Handler statement_handlers[] =
|
||||||
{"collections.group.name", st_collections_group_name},
|
{"collections.group.name", st_collections_group_name},
|
||||||
{"collections.group.inherit", st_collections_group_inherit},
|
{"collections.group.inherit", st_collections_group_inherit},
|
||||||
{"collections.group.part_remove", st_collections_group_part_remove},
|
{"collections.group.part_remove", st_collections_group_part_remove},
|
||||||
|
{"collections.group.program_remove", st_collections_group_program_remove},
|
||||||
{"collections.group.script_only", st_collections_group_script_only},
|
{"collections.group.script_only", st_collections_group_script_only},
|
||||||
{"collections.group.lua_script_only", st_collections_group_script_only},
|
{"collections.group.lua_script_only", st_collections_group_script_only},
|
||||||
{"collections.group.alias", st_collections_group_alias},
|
{"collections.group.alias", st_collections_group_alias},
|
||||||
|
@ -3555,6 +3557,95 @@ st_collections_group_parts_part_inherit(void)
|
||||||
free(name);
|
free(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_program_remove(const char *name, Edje_Program **pgrms, unsigned int count)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
Edje_Part_Collection *pc;
|
||||||
|
|
||||||
|
pc = eina_list_last_data_get(edje_collections);
|
||||||
|
|
||||||
|
for (i = 0; i < count; ++i)
|
||||||
|
if (pgrms[i]->name && (!strcmp(name, pgrms[i]->name)))
|
||||||
|
{
|
||||||
|
Edje_Program_Target *prt;
|
||||||
|
Edje_Program_After *pa;
|
||||||
|
Edje_Program *pr = pgrms[i];
|
||||||
|
|
||||||
|
_edje_program_remove(pc, pgrms[i]);
|
||||||
|
|
||||||
|
free((void*)pr->name);
|
||||||
|
free((void*)pr->signal);
|
||||||
|
free((void*)pr->source);
|
||||||
|
free((void*)pr->filter.part);
|
||||||
|
free((void*)pr->filter.state);
|
||||||
|
free((void*)pr->state);
|
||||||
|
free((void*)pr->state2);
|
||||||
|
free((void*)pr->sample_name);
|
||||||
|
free((void*)pr->tone_name);
|
||||||
|
EINA_LIST_FREE(pr->targets, prt);
|
||||||
|
free(prt);
|
||||||
|
EINA_LIST_FREE(pr->after, pa)
|
||||||
|
free(pa);
|
||||||
|
free(pr);
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@page edcref
|
||||||
|
@property
|
||||||
|
program_remove
|
||||||
|
@parameters
|
||||||
|
[program name] [program name] [program name] ...
|
||||||
|
@effect
|
||||||
|
Removes the listed programs from an inherited group. Removing nonexistent
|
||||||
|
programs is not allowed.
|
||||||
|
This will break program sequences if a program in the middle of the sequence is removed.
|
||||||
|
@endproperty
|
||||||
|
@since 1.10
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
st_collections_group_program_remove(void)
|
||||||
|
{
|
||||||
|
unsigned int n, argc;
|
||||||
|
Edje_Part_Collection *pc;
|
||||||
|
|
||||||
|
check_min_arg_count(1);
|
||||||
|
|
||||||
|
if (!current_group_inherit)
|
||||||
|
{
|
||||||
|
ERR("Cannot remove programs from non-inherited group '%s'", current_de->entry);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
pc = eina_list_last_data_get(edje_collections);
|
||||||
|
|
||||||
|
for (n = 0, argc = get_arg_count(); n < argc; n++)
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
Eina_Bool success = EINA_FALSE;
|
||||||
|
|
||||||
|
name = parse_str(n);
|
||||||
|
|
||||||
|
success |= _program_remove(name, pc->programs.fnmatch, pc->programs.fnmatch_count);
|
||||||
|
success |= _program_remove(name, pc->programs.strcmp, pc->programs.strcmp_count);
|
||||||
|
success |= _program_remove(name, pc->programs.strncmp, pc->programs.strncmp_count);
|
||||||
|
success |= _program_remove(name, pc->programs.strrncmp, pc->programs.strrncmp_count);
|
||||||
|
success |= _program_remove(name, pc->programs.nocmp, pc->programs.nocmp_count);
|
||||||
|
|
||||||
|
copied_program_lookup_delete(pc, name);
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
ERR("Attempted removal of nonexistent program '%s' in group '%s'.",
|
||||||
|
name, current_de->entry);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
free(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@page edcref
|
@page edcref
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -2376,6 +2376,21 @@ program_lookup_rename(void *p, const char *name)
|
||||||
pl->u.name = strdup(name);
|
pl->u.name = strdup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
copied_program_lookup_delete(Edje_Part_Collection *pc, const char *name)
|
||||||
|
{
|
||||||
|
Program_Lookup *pl;
|
||||||
|
Eina_List *l, *ll;
|
||||||
|
|
||||||
|
EINA_LIST_FOREACH_SAFE(program_lookups, l, ll, pl)
|
||||||
|
{
|
||||||
|
if (pl->anonymous || (pl->pc != pc) || strcmp(pl->u.name, name)) continue;
|
||||||
|
free(pl->u.name);
|
||||||
|
program_lookups = eina_list_remove_list(program_lookups, l);
|
||||||
|
free(pl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest)
|
data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue