2012/2/7 Vincent Torri <vincent.to...@gmail.com>: > @since > Gave up on the Changelog?
> Vincent > > On Tue, Feb 7, 2012 at 9:49 AM, Enlightenment SVN > <no-re...@enlightenment.org> wrote: >> Log: >> [edje/markup filter] Add new API, edje_object_markup_filter_callback_add. >> When using >> edje_object_text_insert_filter_callback_add, a filter function >> should check the type(format, text, or markup) of text for correct >> filtering. But in markup filter function(added by new API), text is >> always markup so no need to check the type of text. >> >> >> Author: woohyun >> Date: 2012-02-07 00:49:56 -0800 (Tue, 07 Feb 2012) >> New Revision: 67724 >> Trac: http://trac.enlightenment.org/e/changeset/67724 >> >> Modified: >> trunk/edje/src/lib/Edje.h trunk/edje/src/lib/edje_entry.c >> trunk/edje/src/lib/edje_private.h trunk/edje/src/lib/edje_util.c >> >> Modified: trunk/edje/src/lib/Edje.h >> =================================================================== >> --- trunk/edje/src/lib/Edje.h 2012-02-07 02:30:36 UTC (rev 67723) >> +++ trunk/edje/src/lib/Edje.h 2012-02-07 08:49:56 UTC (rev 67724) >> @@ -1054,6 +1054,7 @@ >> typedef void (*Edje_Text_Change_Cb) (void *data, Evas_Object >> *obj, const char *part); >> typedef void (*Edje_Message_Handler_Cb) (void *data, Evas_Object >> *obj, Edje_Message_Type type, int id, void *msg); /**< Edje message handler >> callback functions's prototype definition. @c data will have the auxiliary >> data pointer set at the time the callback registration. @c obj will be a >> pointer the Edje object where the message comes from. @c type will identify >> the type of the given message and @c msg will be a pointer the message's >> contents, de facto, which depend on @c type. */ >> typedef void (*Edje_Text_Filter_Cb) (void *data, Evas_Object >> *obj, const char *part, Edje_Text_Filter_Type type, char **text); >> +typedef void (*Edje_Markup_Filter_Cb) (void *data, Evas_Object >> *obj, const char *part, char **text); >> typedef Evas_Object *(*Edje_Item_Provider_Cb) (void *data, Evas_Object >> *obj, const char *part, const char *item); >> >> /** >> @@ -2924,8 +2925,20 @@ >> * will make Edje break out of the filter cycle and reject the inserted >> * text. >> * >> + * @warning This function will be deprecated because of difficulty in use. >> + * The type(format, text, or makrup) of text should be always >> + * checked in the filter function for correct filtering. >> + * Please use edje_object_markup_filter_callback_add() instead. >> There >> + * is no need to check the type of text in the filter function >> + * because the text is always markup. >> + * @warning If you use this function with >> + * edje_object_markup_filter_callback_add() togehter, all >> + * Edje_Text_Filter_Cb functions and Edje_Markup_Filter_Cb >> functions >> + * will be executed, and then filtered text will be inserted. >> + * >> * @see edje_object_text_insert_filter_callback_del >> * @see edje_object_text_insert_filter_callback_del_full >> + * @see edje_object_markup_filter_callback_add >> * >> * @param obj A valid Evas_Object handle >> * @param part The part name >> @@ -2971,6 +2984,74 @@ >> EAPI void *edje_object_text_insert_filter_callback_del_full >> (Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data); >> >> /** >> + * Add a markup filter function for newly inserted text. >> + * >> + * Whenever text is inserted (not the same as set) into the given @p part, >> + * the list of markup filter functions will be called to decide if and how >> + * the new text will be accepted. >> + * The text parameter in the @p func filter is always markup. It can be >> + * modified by the user and it's up to him to free the one passed if he's to >> + * change the pointer. If doing so, the newly set text should be malloc'ed, >> + * as once all the filters are called Edje will free it. >> + * If the text is to be rejected, freeing it and setting the pointer to NULL >> + * will make Edje break out of the filter cycle and reject the inserted >> + * text. >> + * This function is different from >> edje_object_text_insert_filter_callback_add() >> + * in that the text parameter in the @p fucn filter is always markup. >> + * >> + * @warning If you use this function with >> + * edje_object_text_insert_filter_callback_add() togehter, all >> + * Edje_Text_Filter_Cb functions and Edje_Markup_Filter_Cb >> functions >> + * will be executed, and then filtered text will be inserted. >> + * >> + * @see edje_object_markup_filter_callback_del >> + * @see edje_object_markup_filter_callback_del_full >> + * @see edje_object_text_insert_filter_callback_add >> + * >> + * @param obj A valid Evas_Object handle >> + * @param part The part name >> + * @param func The callback function that will act as markup filter >> + * @param data User provided data to pass to the filter function >> + */ >> +EAPI void edje_object_markup_filter_callback_add(Evas_Object *obj, const >> char *part, Edje_Markup_Filter_Cb func, void *data); >> + >> +/** >> + * Delete a function from the markup filter list. >> + * >> + * Delete the given @p func filter from the list in @p part. Returns >> + * the user data pointer given when added. >> + * >> + * @see edje_object_markup_filter_callback_add >> + * @see edje_object_markup_filter_callback_del_full >> + * >> + * @param obj A valid Evas_Object handle >> + * @param part The part name >> + * @param func The function callback to remove >> + * >> + * @return The user data pointer if succesful, or NULL otherwise >> + */ >> +EAPI void *edje_object_markup_filter_callback_del(Evas_Object *obj, const >> char *part, Edje_Markup_Filter_Cb func); >> + >> +/** >> + * Delete a function and matching user data from the markup filter list. >> + * >> + * Delete the given @p func filter and @p data user data from the list >> + * in @p part. >> + * Returns the user data pointer given when added. >> + * >> + * @see edje_object_markup_filter_callback_add >> + * @see edje_object_markup_filter_callback_del >> + * >> + * @param obj A valid Evas_Object handle >> + * @param part The part name >> + * @param func The function callback to remove >> + * @param data The data passed to the callback function >> + * >> + * @return The same data pointer if succesful, or NULL otherwise >> + */ >> +EAPI void *edje_object_markup_filter_callback_del_full(Evas_Object *obj, >> const char *part, Edje_Markup_Filter_Cb func, void *data); >> + >> +/** >> * @brief Swallows an object into the edje. >> * >> * @param obj A valid Evas_Object handle >> >> Modified: trunk/edje/src/lib/edje_entry.c >> =================================================================== >> --- trunk/edje/src/lib/edje_entry.c 2012-02-07 02:30:36 UTC (rev 67723) >> +++ trunk/edje/src/lib/edje_entry.c 2012-02-07 08:49:56 UTC (rev 67724) >> @@ -180,6 +180,27 @@ >> } >> >> static void >> +_text_filter_markup_prepend_internal(Entry *en, Evas_Textblock_Cursor *c, >> char *text) >> +{ >> + Edje_Markup_Filter_Callback *cb; >> + Eina_List *l; >> + >> + EINA_LIST_FOREACH(en->rp->edje->markup_filter_callbacks, l, cb) >> + { >> + if (!strcmp(cb->part, en->rp->part->name)) >> + { >> + cb->func(cb->data, en->rp->edje->obj, cb->part, &text); >> + if (!text) break; >> + } >> + } >> + if (text) >> + { >> + evas_object_textblock_text_markup_prepend(c, text); >> + free(text); >> + } >> +} >> + >> +static void >> _text_filter_text_prepend(Entry *en, Evas_Textblock_Cursor *c, const char >> *text) >> { >> char *text2; >> @@ -197,8 +218,11 @@ >> } >> if (text2) >> { >> - evas_textblock_cursor_text_prepend(c, text2); >> + char *markup_text; >> + markup_text = evas_textblock_text_utf8_to_markup(NULL, text2); >> free(text2); >> + if (markup_text) >> + _text_filter_markup_prepend_internal(en, c, markup_text); >> } >> } >> >> @@ -220,8 +244,61 @@ >> } >> if (text2) >> { >> - evas_textblock_cursor_format_prepend(c, text2); >> + char *s, *markup_text; >> + >> + s = text2; >> + if (*s == '+') >> + { >> + s++; >> + while (*s == ' ') s++; >> + if (!s) >> + { >> + free(text2); >> + return; >> + } >> + markup_text = (char*) malloc(strlen(s) + 3); >> + if (markup_text) >> + { >> + *(markup_text) = '<'; >> + strncpy((markup_text + 1), s, strlen(s)); >> + *(markup_text + strlen(s) + 1) = '>'; >> + *(markup_text + strlen(s) + 2) = '\0'; >> + } >> + } >> + else if (s[0] == '-') >> + { >> + s++; >> + while (*s == ' ') s++; >> + if (!s) >> + { >> + free(text2); >> + return; >> + } >> + markup_text = (char*) malloc(strlen(s) + 4); >> + if (markup_text) >> + { >> + *(markup_text) = '<'; >> + *(markup_text + 1) = '/'; >> + strncpy((markup_text + 2), s, strlen(s)); >> + *(markup_text + strlen(s) + 2) = '>'; >> + *(markup_text + strlen(s) + 3) = '\0'; >> + } >> + } >> + else >> + { >> + markup_text = (char*) malloc(strlen(s) + 4); >> + if (markup_text) >> + { >> + *(markup_text) = '<'; >> + strncpy((markup_text + 1), s, strlen(s)); >> + *(markup_text + strlen(s) + 1) = '/'; >> + *(markup_text + strlen(s) + 2) = '>'; >> + *(markup_text + strlen(s) + 3) = '\0'; >> + } >> + } >> free(text2); >> + if (markup_text) >> + _text_filter_markup_prepend_internal(en, c, markup_text); >> } >> } >> >> @@ -242,10 +319,7 @@ >> } >> } >> if (text2) >> - { >> - evas_object_textblock_text_markup_prepend(c, text2); >> - free(text2); >> - } >> + _text_filter_markup_prepend_internal(en, c, text2); >> } >> >> static void >> >> Modified: trunk/edje/src/lib/edje_private.h >> =================================================================== >> --- trunk/edje/src/lib/edje_private.h 2012-02-07 02:30:36 UTC (rev 67723) >> +++ trunk/edje/src/lib/edje_private.h 2012-02-07 08:49:56 UTC (rev 67724) >> @@ -322,6 +322,7 @@ >> typedef struct _Edje_Var_Pool Edje_Var_Pool; >> typedef struct _Edje_Signal_Source_Char Edje_Signal_Source_Char; >> typedef struct _Edje_Text_Insert_Filter_Callback >> Edje_Text_Insert_Filter_Callback; >> +typedef struct _Edje_Markup_Filter_Callback Edje_Markup_Filter_Callback; >> >> #define EDJE_INF_MAX_W 100000 >> #define EDJE_INF_MAX_H 100000 >> @@ -1077,6 +1078,7 @@ >> Edje_Real_Part *focused_part; >> Eina_List *subobjs; >> Eina_List *text_insert_filter_callbacks; >> + Eina_List *markup_filter_callbacks; >> void *script_only_data; >> >> int table_programs_size; >> @@ -1337,6 +1339,13 @@ >> void *data; >> }; >> >> +struct _Edje_Markup_Filter_Callback >> +{ >> + const char *part; >> + Edje_Markup_Filter_Cb func; >> + void *data; >> +}; >> + >> struct _Edje_Pending_Program >> { >> Edje *edje; >> >> Modified: trunk/edje/src/lib/edje_util.c >> =================================================================== >> --- trunk/edje/src/lib/edje_util.c 2012-02-07 02:30:36 UTC (rev 67723) >> +++ trunk/edje/src/lib/edje_util.c 2012-02-07 08:49:56 UTC (rev 67724) >> @@ -1941,6 +1941,71 @@ >> return NULL; >> } >> >> +EAPI void >> +edje_object_markup_filter_callback_add(Evas_Object *obj, const char *part, >> Edje_Markup_Filter_Cb func, void *data) >> +{ >> + Edje *ed; >> + Edje_Markup_Filter_Callback *cb; >> + >> + ed = _edje_fetch(obj); >> + if ((!ed) || (!part)) return; >> + cb = calloc(1, sizeof(Edje_Markup_Filter_Callback)); >> + cb->part = eina_stringshare_add(part); >> + cb->func = func; >> + cb->data = (void *)data; >> + ed->markup_filter_callbacks = >> + eina_list_append(ed->markup_filter_callbacks, cb); >> +} >> + >> +EAPI void * >> +edje_object_markup_filter_callback_del(Evas_Object *obj, const char *part, >> Edje_Markup_Filter_Cb func) >> +{ >> + Edje *ed; >> + Edje_Markup_Filter_Callback *cb; >> + Eina_List *l; >> + >> + ed = _edje_fetch(obj); >> + if ((!ed) || (!part)) return NULL; >> + EINA_LIST_FOREACH(ed->markup_filter_callbacks, l, cb) >> + { >> + if ((!strcmp(cb->part, part)) && (cb->func == func)) >> + { >> + void *data = cb->data; >> + ed->markup_filter_callbacks = >> + eina_list_remove_list(ed->markup_filter_callbacks, l); >> + eina_stringshare_del(cb->part); >> + free(cb); >> + return data; >> + } >> + } >> + return NULL; >> +} >> + >> +EAPI void * >> +edje_object_markup_filter_callback_del_full(Evas_Object *obj, const char >> *part, Edje_Markup_Filter_Cb func, void *data) >> +{ >> + Edje *ed; >> + Edje_Markup_Filter_Callback *cb; >> + Eina_List *l; >> + >> + ed = _edje_fetch(obj); >> + if ((!ed) || (!part)) return NULL; >> + EINA_LIST_FOREACH(ed->markup_filter_callbacks, l, cb) >> + { >> + if ((!strcmp(cb->part, part)) && (cb->func == func) && >> + (cb->data == data)) >> + { >> + void *tmp = cb->data; >> + ed->markup_filter_callbacks = >> + eina_list_remove_list(ed->markup_filter_callbacks, l); >> + eina_stringshare_del(cb->part); >> + free(cb); >> + return tmp; >> + } >> + } >> + return NULL; >> +} >> + >> EAPI Eina_Bool >> edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object >> *obj_swallow) >> { >> >> >> ------------------------------------------------------------------------------ >> Keep Your Developer Skills Current with LearnDevNow! >> The most comprehensive online learning library for Microsoft developers >> is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, >> Metro Style Apps, more. Free future releases when you subscribe now! >> http://p.sf.net/sfu/learndevnow-d2d >> _______________________________________________ >> enlightenment-svn mailing list >> enlightenment-...@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > ------------------------------------------------------------------------------ > Keep Your Developer Skills Current with LearnDevNow! > The most comprehensive online learning library for Microsoft developers > is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, > Metro Style Apps, more. Free future releases when you subscribe now! > http://p.sf.net/sfu/learndevnow-d2d > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel ------------------------------------------------------------------------------ Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel