forked from enlightenment/efl
eolian: add support for restartable event.
This commit is contained in:
parent
7cb53a3ae2
commit
842a020e1f
|
@ -672,8 +672,10 @@ eo_source_beginning_generate(const Eolian_Class *class, Eina_Strbuf *buf)
|
|||
Eina_Stringshare *evname = eolian_event_c_name_get(event);
|
||||
|
||||
eina_strbuf_append_printf(tmpbuf,
|
||||
"EOAPI const Eo_Event_Description _%s =\n EO_EVENT_DESCRIPTION%s(\"%s\");\n",
|
||||
evname, eolian_event_is_hot(event) ? "_HOT" : "",
|
||||
"EOAPI const Eo_Event_Description _%s =\n EO_EVENT_DESCRIPTION%s%s(\"%s\");\n",
|
||||
evname,
|
||||
eolian_event_is_hot(event) ? "_HOT" : "",
|
||||
eolian_event_is_restart(event) ? "_RESTART" : "",
|
||||
eolian_event_name_get(event));
|
||||
eina_stringshare_del(evname);
|
||||
}
|
||||
|
|
|
@ -1206,6 +1206,20 @@ EAPI Eina_Bool eolian_event_is_beta(const Eolian_Event *event);
|
|||
*/
|
||||
EAPI Eina_Bool eolian_event_is_hot(const Eolian_Event *event);
|
||||
|
||||
/*
|
||||
* @brief Get whether an event is a restartable event.
|
||||
*
|
||||
* @param[in] event the event handle
|
||||
* @return EINA_TRUE and EINA_FALSE respectively
|
||||
*
|
||||
* In case of nested call, restartable event will start processing from where
|
||||
* they where in the parent callback call skipping all the previously executed
|
||||
* callback. Especially useful for nested main loop use case.
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
EAPI Eina_Bool eolian_event_is_restart(const Eolian_Event *event);
|
||||
|
||||
/*
|
||||
* @brief Returns the C name of an event
|
||||
*
|
||||
|
|
|
@ -47,6 +47,13 @@ eolian_event_is_hot(const Eolian_Event *event)
|
|||
return event->is_hot;
|
||||
}
|
||||
|
||||
EAPI Eina_Bool
|
||||
eolian_event_is_restart(const Eolian_Event *event)
|
||||
{
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(event, EINA_FALSE);
|
||||
return event->is_restart;
|
||||
}
|
||||
|
||||
EAPI Eina_Stringshare *
|
||||
eolian_event_c_name_get(const Eolian_Event *event)
|
||||
{
|
||||
|
|
|
@ -30,7 +30,7 @@ enum Tokens
|
|||
KW(legacy_prefix), KW(methods), KW(mixin), KW(own), KW(params), \
|
||||
KW(set), KW(type), KW(values), KW(var), KWAT(auto), KWAT(beta), \
|
||||
KWAT(c_only), KWAT(class), KWAT(const), KWAT(empty), KWAT(extern), \
|
||||
KWAT(free), KWAT(hot), KWAT(in), KWAT(inout), KWAT(nonull), KWAT(nullable), \
|
||||
KWAT(free), KWAT(hot), KWAT(restart), KWAT(in), KWAT(inout), KWAT(nonull), KWAT(nullable), \
|
||||
KWAT(optional), KWAT(out), KWAT(private), KWAT(property), \
|
||||
KWAT(protected), KWAT(virtual), KWAT(warn_unused), \
|
||||
\
|
||||
|
|
|
@ -1547,7 +1547,7 @@ parse_event(Eo_Lexer *ls)
|
|||
ev->name = eina_stringshare_add(eina_strbuf_string_get(buf));
|
||||
pop_strbuf(ls);
|
||||
Eina_Bool has_scope = EINA_FALSE, has_beta = EINA_FALSE,
|
||||
has_hot = EINA_FALSE;
|
||||
has_hot = EINA_FALSE, has_restart = EINA_FALSE;
|
||||
for (;;) switch (ls->t.kw)
|
||||
{
|
||||
case KW_at_private:
|
||||
|
@ -1568,6 +1568,11 @@ parse_event(Eo_Lexer *ls)
|
|||
ev->is_hot = EINA_TRUE;
|
||||
eo_lexer_get(ls);
|
||||
break;
|
||||
case KW_at_restart:
|
||||
CASE_LOCK(ls, restart, "restart qualifier");
|
||||
ev->is_restart = EINA_TRUE;
|
||||
eo_lexer_get(ls);
|
||||
break;
|
||||
default:
|
||||
goto end;
|
||||
}
|
||||
|
|
|
@ -222,6 +222,7 @@ struct _Eolian_Event
|
|||
int scope;
|
||||
Eina_Bool is_beta :1;
|
||||
Eina_Bool is_hot :1;
|
||||
Eina_Bool is_restart :1;
|
||||
};
|
||||
|
||||
struct _Eolian_Struct_Type_Field
|
||||
|
|
Loading…
Reference in New Issue