On Tue, Feb 7, 2012 at 1:51 PM, Iván Briano (Sachiel) <sachi...@gmail.com> wrote: > 2012/2/7 Vincent Torri <vincent.to...@gmail.com>: >> @since >> > > Gave up on the Changelog?
no, he added the entry (wrongly, though, but he fixed that) Vincent > >> 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 ------------------------------------------------------------------------------ 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