diff --git a/src/bin/edje/edje_cc.h b/src/bin/edje/edje_cc.h index aec77a4587..afb7a99c03 100644 --- a/src/bin/edje/edje_cc.h +++ b/src/bin/edje/edje_cc.h @@ -167,6 +167,7 @@ struct _Edje_Part_Collection_Parser Eina_Bool default_mouse_events; Eina_Bool inherit_only; Eina_Bool inherit_script : 1; + Eina_Bool skip_namespace_validation : 1; }; typedef enum diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c index 6d987edb8f..17b3ce3768 100644 --- a/src/bin/edje/edje_cc_handlers.c +++ b/src/bin/edje/edje_cc_handlers.c @@ -257,6 +257,7 @@ static void st_collections_base_scale(void); static void ob_collections_group(void); static void st_collections_group_name(void); +static void st_collections_group_skip_namespace_validation(void); static void st_collections_group_inherit_only(void); static void st_collections_group_inherit(void); static void st_collections_group_program_source(void); @@ -749,6 +750,7 @@ New_Statement_Handler statement_handlers[] = }, /* dup */ {"collections.group.vibrations.sample.source", st_collections_group_vibration_sample_source}, /* dup */ {"collections.group.name", st_collections_group_name}, + {"collections.group.skip_namespace_validation", st_collections_group_skip_namespace_validation}, {"collections.group.program_source", st_collections_group_program_source}, {"collections.group.inherit", st_collections_group_inherit}, {"collections.group.inherit_only", st_collections_group_inherit_only}, @@ -4521,6 +4523,30 @@ st_collections_group_name(void) _group_name(parse_str(0)); } +/** + @page edcref + @property + skip_namespace_validation + @parameters + [1 or 0] + @effect + This disables namespace validation for the current group if validation has + been enabled with edje_cc's -N option. + This property can be inherited. + Defaults: 0 + + @warning Your edc file should always wrap this keyword with #ifdef HAVE_SKIP_NAMESPACE_VALIDATION + @since 1.21 + @endproperty + */ +static void +st_collections_group_skip_namespace_validation(void) +{ + Edje_Part_Collection_Parser *pcp = eina_list_last_data_get(edje_collections); + check_arg_count(1); + pcp->skip_namespace_validation = parse_bool(0); +} + typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data; struct _Edje_List_Foreach_Data { @@ -5170,6 +5196,7 @@ st_collections_group_inherit(void) pcp = (Edje_Part_Collection_Parser *)pc; pcp2 = (Edje_Part_Collection_Parser *)pc2; pcp->default_mouse_events = pcp2->default_mouse_events; + pcp->skip_namespace_validation = pcp2->skip_namespace_validation; if (pcp2->inherit_script) pcp->inherit_script = pcp2->inherit_script; diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c index 4d21668368..a28cc48505 100644 --- a/src/bin/edje/edje_cc_out.c +++ b/src/bin/edje/edje_cc_out.c @@ -631,6 +631,7 @@ _part_namespace_verify(Edje_Part_Collection *pc, Edje_Part *ep, Eet_File *ef EIN static void check_part(Edje_Part_Collection *pc, Edje_Part *ep, Eet_File *ef) { + Edje_Part_Collection_Parser *pcp = (Edje_Part_Collection_Parser*)pc; unsigned int i; Eina_List *group_path = NULL; /* FIXME: check image set and sort them. */ @@ -662,19 +663,22 @@ check_part(Edje_Part_Collection *pc, Edje_Part *ep, Eet_File *ef) check_text_part_desc(pc, ep, (Edje_Part_Description_Text *)ep->other.desc[i], ef); } - switch (ep->type) + if (!pcp->skip_namespace_validation) { - case EDJE_PART_TYPE_BOX: - case EDJE_PART_TYPE_TABLE: - case EDJE_PART_TYPE_SWALLOW: - _part_namespace_verify(pc, ep, ef, 1); - break; - case EDJE_PART_TYPE_TEXT: - case EDJE_PART_TYPE_TEXTBLOCK: - case EDJE_PART_TYPE_SPACER: - _part_namespace_verify(pc, ep, ef, 0); - break; - default: break; + switch (ep->type) + { + case EDJE_PART_TYPE_BOX: + case EDJE_PART_TYPE_TABLE: + case EDJE_PART_TYPE_SWALLOW: + _part_namespace_verify(pc, ep, ef, 1); + break; + case EDJE_PART_TYPE_TEXT: + case EDJE_PART_TYPE_TEXTBLOCK: + case EDJE_PART_TYPE_SPACER: + _part_namespace_verify(pc, ep, ef, 0); + break; + default: break; + } } /* FIXME: When smart masks are supported, remove this check */ @@ -716,6 +720,7 @@ _program_signal_namespace_verify(Edje_Part_Collection *pc, Eet_File *ef EINA_UNU static void check_program(Edje_Part_Collection *pc, Edje_Program *ep, Eet_File *ef) { + Edje_Part_Collection_Parser *pcp = (Edje_Part_Collection_Parser*)pc; switch (ep->action) { case EDJE_ACTION_TYPE_STATE_SET: @@ -744,7 +749,8 @@ check_program(Edje_Part_Collection *pc, Edje_Program *ep, Eet_File *ef) if ((!ep->targets) && (ep->action == EDJE_ACTION_TYPE_SIGNAL_EMIT)) { - _program_signal_namespace_verify(pc, ef, ep->state, ep->state2); + if (!pcp->skip_namespace_validation) + _program_signal_namespace_verify(pc, ef, ep->state, ep->state2); } EINA_LIST_FOREACH(ep->targets, l, et) diff --git a/src/bin/edje/edje_cc_parse.c b/src/bin/edje/edje_cc_parse.c index 068bd74eee..7a3335c559 100644 --- a/src/bin/edje/edje_cc_parse.c +++ b/src/bin/edje/edje_cc_parse.c @@ -22,6 +22,8 @@ # define EPP_EXT #endif +#define SKIP_NAMESPACE_VALIDATION_SUPPORTED " -DSKIP_NAMESPACE_VALIDATION=1 " + #define EDJE_1_18_SUPPORTED " -DEFL_VERSION_1_18=1 " #define EDJE_1_19_SUPPORTED " -DEFL_VERSION_1_19=1 " #define EDJE_1_20_SUPPORTED " -DEFL_VERSION_1_20=1 " @@ -1082,7 +1084,7 @@ compile(void) inc = ecore_file_dir_get(file_in); if (depfile) - snprintf(buf, sizeof(buf), "\"%s\" -MMD \"%s\" -MT \"%s\" \"%s\"" + snprintf(buf, sizeof(buf), "\"%s\" "SKIP_NAMESPACE_VALIDATION_SUPPORTED" -MMD \"%s\" -MT \"%s\" \"%s\"" " -I\"%s\" %s -o \"%s\"" " -DEFL_VERSION_MAJOR=%d -DEFL_VERSION_MINOR=%d" EDJE_CC_EFL_VERSION_SUPPORTED, @@ -1090,7 +1092,7 @@ compile(void) inc ? inc : "./", def, clean_file, EINA_VERSION_MAJOR, EINA_VERSION_MINOR); else if (annotate) - snprintf(buf, sizeof(buf), "\"%s\" -annotate -a \"%s\" \"%s\"" + snprintf(buf, sizeof(buf), "\"%s\" "SKIP_NAMESPACE_VALIDATION_SUPPORTED" -annotate -a \"%s\" \"%s\"" " -I\"%s\" %s -o \"%s\"" " -DEFL_VERSION_MAJOR=%d -DEFL_VERSION_MINOR=%d" EDJE_CC_EFL_VERSION_SUPPORTED, @@ -1098,7 +1100,7 @@ compile(void) inc ? inc : "./", def, clean_file, EINA_VERSION_MAJOR, EINA_VERSION_MINOR); else - snprintf(buf, sizeof(buf), "\"%s\" -a \"%s\" \"%s\" -I\"%s\" %s" + snprintf(buf, sizeof(buf), "\"%s\" "SKIP_NAMESPACE_VALIDATION_SUPPORTED" -a \"%s\" \"%s\" -I\"%s\" %s" " -o \"%s\"" " -DEFL_VERSION_MAJOR=%d -DEFL_VERSION_MINOR=%d" EDJE_CC_EFL_VERSION_SUPPORTED,