forked from enlightenment/efl
actually hook in filter callbacks - have 2 types and pass in enum to
each as to what text they are seeing to filter. fix up other typdef uses. SVN revision: 52975
This commit is contained in:
parent
44093c2bdc
commit
57d15d3ef8
|
@ -259,6 +259,13 @@ typedef enum _Edje_Load_Error
|
||||||
EDJE_LOAD_ERROR_RECURSIVE_REFERENCE = 9
|
EDJE_LOAD_ERROR_RECURSIVE_REFERENCE = 9
|
||||||
} Edje_Load_Error;
|
} Edje_Load_Error;
|
||||||
|
|
||||||
|
typedef enum _Edje_Text_Filter_Type
|
||||||
|
{
|
||||||
|
EDJE_TEXT_FILTER_TEXT = 0,
|
||||||
|
EDJE_TEXT_FILTER_FORMAT = 1,
|
||||||
|
EDJE_TEXT_FILTER_MARKUP = 2
|
||||||
|
} Edje_Text_Filter_Type;
|
||||||
|
|
||||||
typedef enum _Edje_External_Param_Type
|
typedef enum _Edje_External_Param_Type
|
||||||
{
|
{
|
||||||
EDJE_EXTERNAL_PARAM_TYPE_INT,
|
EDJE_EXTERNAL_PARAM_TYPE_INT,
|
||||||
|
@ -471,6 +478,8 @@ typedef struct _Edje_External_Type_Info Edje_External_Type_Info;
|
||||||
typedef void (*Edje_Signal_Cb) (void *data, Evas_Object *obj, const char *emission, const char *source);
|
typedef void (*Edje_Signal_Cb) (void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
typedef void (*Edje_Text_Change_Cb) (void *data, Evas_Object *obj, const char *part);
|
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);
|
typedef void (*Edje_Message_Handler_Cb) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg);
|
||||||
|
typedef void (*Edje_Text_Filter_Cb) (void *data, Evas_Object *obj, const char *part, Edje_Text_Filter_Type type, char **text);
|
||||||
|
typedef Evas_Object *(*Edje_Item_Provider_Cb) (void *data, Evas_Object *obj, const char *part, const char *item);
|
||||||
|
|
||||||
/* edje_main.c */
|
/* edje_main.c */
|
||||||
EAPI int edje_init (void);
|
EAPI int edje_init (void);
|
||||||
|
@ -556,7 +565,7 @@ typedef void (*Edje_Message_Handler_Cb) (void *data, Evas_Object *obj, Edje_Mess
|
||||||
EAPI const Evas_Object *edje_object_part_object_get (const Evas_Object *obj, const char *part);
|
EAPI const Evas_Object *edje_object_part_object_get (const Evas_Object *obj, const char *part);
|
||||||
EAPI Eina_Bool edje_object_part_geometry_get (const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
|
EAPI Eina_Bool edje_object_part_geometry_get (const Evas_Object *obj, const char *part, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
|
||||||
|
|
||||||
EAPI void edje_object_item_provider_set (Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *obj, const char *part, const char *item), void *data);
|
EAPI void edje_object_item_provider_set (Evas_Object *obj, Edje_Item_Provider_Cb func, void *data);
|
||||||
|
|
||||||
EAPI void edje_object_text_change_cb_set (Evas_Object *obj, Edje_Text_Change_Cb func, void *data);
|
EAPI void edje_object_text_change_cb_set (Evas_Object *obj, Edje_Text_Change_Cb func, void *data);
|
||||||
|
|
||||||
|
@ -593,8 +602,8 @@ typedef void (*Edje_Message_Handler_Cb) (void *data, Evas_Object *obj, Edje_Mess
|
||||||
EAPI Eina_Bool edje_object_part_text_cursor_is_visible_format_get(const Evas_Object *obj, const char *part, Edje_Cursor cur);
|
EAPI Eina_Bool edje_object_part_text_cursor_is_visible_format_get(const Evas_Object *obj, const char *part, Edje_Cursor cur);
|
||||||
EAPI const char *edje_object_part_text_cursor_content_get (const Evas_Object *obj, const char *part, Edje_Cursor cur);
|
EAPI const char *edje_object_part_text_cursor_content_get (const Evas_Object *obj, const char *part, Edje_Cursor cur);
|
||||||
|
|
||||||
EAPI void edje_object_text_insert_filter_callback_add (Evas_Object *obj, const char *part, void (*func) (void *data, Evas_Object *obj, const char *part, char **text), const void *data);
|
EAPI void edje_object_text_insert_filter_callback_add (Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data);
|
||||||
EAPI void edje_object_text_insert_filter_callback_del (Evas_Object *obj, const char *part, void (*func) (void *data, Evas_Object *obj, const char *part, char **text), const void *data);
|
EAPI void *edje_object_text_insert_filter_callback_del (Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func);
|
||||||
|
|
||||||
EAPI Eina_Bool edje_object_part_swallow (Evas_Object *obj, const char *part, Evas_Object *obj_swallow);
|
EAPI Eina_Bool edje_object_part_swallow (Evas_Object *obj, const char *part, Evas_Object *obj_swallow);
|
||||||
EAPI void edje_object_part_unswallow (Evas_Object *obj, Evas_Object *obj_swallow);
|
EAPI void edje_object_part_unswallow (Evas_Object *obj, Evas_Object *obj_swallow);
|
||||||
|
|
|
@ -153,9 +153,8 @@ _edje_focus_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// need one for markup and format too - how to do it? extra type param?
|
static void
|
||||||
static void __UNUSED__
|
_text_filter_text_prepend(Entry *en, const char *text)
|
||||||
_text_filter_prepend(Entry *en, const char *text)
|
|
||||||
{
|
{
|
||||||
char *text2;
|
char *text2;
|
||||||
Edje_Text_Insert_Filter_Callback *cb;
|
Edje_Text_Insert_Filter_Callback *cb;
|
||||||
|
@ -166,7 +165,7 @@ _text_filter_prepend(Entry *en, const char *text)
|
||||||
{
|
{
|
||||||
if (!strcmp(cb->part, en->rp->part->name))
|
if (!strcmp(cb->part, en->rp->part->name))
|
||||||
{
|
{
|
||||||
cb->func(cb->data, en->rp->edje->obj, cb->part, &text2);
|
cb->func(cb->data, en->rp->edje->obj, cb->part, EDJE_TEXT_FILTER_TEXT, &text2);
|
||||||
if (!text2) break;
|
if (!text2) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -177,6 +176,52 @@ _text_filter_prepend(Entry *en, const char *text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_text_filter_format_prepend(Entry *en, const char *text)
|
||||||
|
{
|
||||||
|
char *text2;
|
||||||
|
Edje_Text_Insert_Filter_Callback *cb;
|
||||||
|
Eina_List *l;
|
||||||
|
|
||||||
|
text2 = strdup(text);
|
||||||
|
EINA_LIST_FOREACH(en->rp->edje->text_insert_filter_callbacks, l, cb)
|
||||||
|
{
|
||||||
|
if (!strcmp(cb->part, en->rp->part->name))
|
||||||
|
{
|
||||||
|
cb->func(cb->data, en->rp->edje->obj, cb->part, EDJE_TEXT_FILTER_FORMAT, &text2);
|
||||||
|
if (!text2) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (text2)
|
||||||
|
{
|
||||||
|
evas_textblock_cursor_format_prepend(en->cursor, text2);
|
||||||
|
free(text2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_text_filter_markup_prepend(Entry *en, const char *text)
|
||||||
|
{
|
||||||
|
char *text2;
|
||||||
|
Edje_Text_Insert_Filter_Callback *cb;
|
||||||
|
Eina_List *l;
|
||||||
|
|
||||||
|
text2 = strdup(text);
|
||||||
|
EINA_LIST_FOREACH(en->rp->edje->text_insert_filter_callbacks, l, cb)
|
||||||
|
{
|
||||||
|
if (!strcmp(cb->part, en->rp->part->name))
|
||||||
|
{
|
||||||
|
cb->func(cb->data, en->rp->edje->obj, cb->part, EDJE_TEXT_FILTER_MARKUP, &text2);
|
||||||
|
if (!text2) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (text2)
|
||||||
|
{
|
||||||
|
evas_object_textblock_text_markup_prepend(en->cursor, text2);
|
||||||
|
free(text2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_curs_update_from_curs(Evas_Textblock_Cursor *c, Evas_Object *o __UNUSED__, Entry *en)
|
_curs_update_from_curs(Evas_Textblock_Cursor *c, Evas_Object *o __UNUSED__, Entry *en)
|
||||||
{
|
{
|
||||||
|
@ -1163,7 +1208,8 @@ _edje_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//yy
|
//yy
|
||||||
evas_textblock_cursor_format_prepend(en->cursor, "\t");
|
// evas_textblock_cursor_format_prepend(en->cursor, "\t");
|
||||||
|
_text_filter_format_prepend(en, "\t");
|
||||||
_curs_update_from_curs(en->cursor, rp->object, en);
|
_curs_update_from_curs(en->cursor, rp->object, en);
|
||||||
_anchors_get(en->cursor, rp->object, en);
|
_anchors_get(en->cursor, rp->object, en);
|
||||||
_edje_emit(ed, "entry,changed", rp->part->name);
|
_edje_emit(ed, "entry,changed", rp->part->name);
|
||||||
|
@ -1216,11 +1262,15 @@ _edje_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
|
||||||
_sel_clear(en->cursor, rp->object, en);
|
_sel_clear(en->cursor, rp->object, en);
|
||||||
if (shift)
|
if (shift)
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_format_prepend(en->cursor, "\n");
|
//yy
|
||||||
|
// evas_textblock_cursor_format_prepend(en->cursor, "\n");
|
||||||
|
_text_filter_format_prepend(en, "\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_format_prepend(en->cursor, "ps");
|
//yy
|
||||||
|
// evas_textblock_cursor_format_prepend(en->cursor, "ps");
|
||||||
|
_text_filter_format_prepend(en, "ps");
|
||||||
}
|
}
|
||||||
_curs_update_from_curs(en->cursor, rp->object, en);
|
_curs_update_from_curs(en->cursor, rp->object, en);
|
||||||
_anchors_get(en->cursor, rp->object, en);
|
_anchors_get(en->cursor, rp->object, en);
|
||||||
|
@ -1239,7 +1289,8 @@ _edje_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
|
||||||
_range_del(en->cursor, rp->object, en);
|
_range_del(en->cursor, rp->object, en);
|
||||||
_sel_clear(en->cursor, rp->object, en);
|
_sel_clear(en->cursor, rp->object, en);
|
||||||
//zz
|
//zz
|
||||||
evas_textblock_cursor_text_prepend(en->cursor, ev->string);
|
// evas_textblock_cursor_text_prepend(en->cursor, ev->string);
|
||||||
|
_text_filter_text_prepend(en, ev->string);
|
||||||
_curs_update_from_curs(en->cursor, rp->object, en);
|
_curs_update_from_curs(en->cursor, rp->object, en);
|
||||||
_anchors_get(en->cursor, rp->object, en);
|
_anchors_get(en->cursor, rp->object, en);
|
||||||
_edje_emit(ed, "entry,changed", rp->part->name);
|
_edje_emit(ed, "entry,changed", rp->part->name);
|
||||||
|
@ -1879,7 +1930,8 @@ _edje_entry_text_markup_insert(Edje_Real_Part *rp, const char *text)
|
||||||
_range_del(en->cursor, rp->object, en);
|
_range_del(en->cursor, rp->object, en);
|
||||||
_sel_clear(en->cursor, rp->object, en);
|
_sel_clear(en->cursor, rp->object, en);
|
||||||
//xx
|
//xx
|
||||||
evas_object_textblock_text_markup_prepend(en->cursor, text);
|
// evas_object_textblock_text_markup_prepend(en->cursor, text);
|
||||||
|
_text_filter_markup_prepend(en, text);
|
||||||
_curs_update_from_curs(en->cursor, rp->object, en);
|
_curs_update_from_curs(en->cursor, rp->object, en);
|
||||||
_anchors_get(en->cursor, rp->object, en);
|
_anchors_get(en->cursor, rp->object, en);
|
||||||
_edje_emit(rp->edje, "entry,changed", rp->part->name);
|
_edje_emit(rp->edje, "entry,changed", rp->part->name);
|
||||||
|
@ -2509,7 +2561,8 @@ _edje_entry_imf_event_commit_cb(void *data, int type __UNUSED__, void *event)
|
||||||
}
|
}
|
||||||
|
|
||||||
//yy
|
//yy
|
||||||
evas_textblock_cursor_text_prepend(en->cursor, ev->str);
|
// evas_textblock_cursor_text_prepend(en->cursor, ev->str);
|
||||||
|
_text_filter_text_prepend(en, ev->str);
|
||||||
|
|
||||||
_curs_update_from_curs(en->cursor, rp->object, en);
|
_curs_update_from_curs(en->cursor, rp->object, en);
|
||||||
_anchors_get(en->cursor, rp->object, en);
|
_anchors_get(en->cursor, rp->object, en);
|
||||||
|
@ -2564,7 +2617,8 @@ _edje_entry_imf_event_changed_cb(void *data, int type __UNUSED__, void *event)
|
||||||
en->have_composition = EINA_TRUE;
|
en->have_composition = EINA_TRUE;
|
||||||
|
|
||||||
//xx
|
//xx
|
||||||
evas_object_textblock_text_markup_prepend(en->cursor, preedit_string);
|
// evas_object_textblock_text_markup_prepend(en->cursor, preedit_string);
|
||||||
|
_text_filter_markup_prepend(en, preedit_string);
|
||||||
|
|
||||||
_curs_update_from_curs(en->cursor, rp->object, en);
|
_curs_update_from_curs(en->cursor, rp->object, en);
|
||||||
_anchors_get(en->cursor, rp->object, en);
|
_anchors_get(en->cursor, rp->object, en);
|
||||||
|
|
|
@ -71,7 +71,7 @@ edje_object_message_send(Evas_Object *obj, Edje_Message_Type type, int id, void
|
||||||
*/
|
*/
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
edje_object_message_handler_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg), void *data)
|
edje_object_message_handler_set(Evas_Object *obj, Edje_Message_Handler_Cb func, void *data)
|
||||||
{
|
{
|
||||||
Edje *ed;
|
Edje *ed;
|
||||||
|
|
||||||
|
|
|
@ -983,12 +983,12 @@ struct _Edje
|
||||||
FLOAT_T scale;
|
FLOAT_T scale;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
void (*func) (void *data, Evas_Object *obj, const char *part);
|
Edje_Text_Change_Cb func;
|
||||||
void *data;
|
void *data;
|
||||||
} text_change;
|
} text_change;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg);
|
Edje_Message_Handler_Cb func;
|
||||||
void *data;
|
void *data;
|
||||||
int num;
|
int num;
|
||||||
} message;
|
} message;
|
||||||
|
@ -1025,7 +1025,7 @@ struct _Edje
|
||||||
int lua_ref;
|
int lua_ref;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
Evas_Object *(*func) (void *data, Evas_Object *obj, const char *part, const char *item);
|
Edje_Item_Provider_Cb func;
|
||||||
void *data;
|
void *data;
|
||||||
} item_provider;
|
} item_provider;
|
||||||
};
|
};
|
||||||
|
@ -1183,7 +1183,7 @@ struct _Edje_Signal_Callback
|
||||||
{
|
{
|
||||||
const char *signal;
|
const char *signal;
|
||||||
const char *source;
|
const char *source;
|
||||||
void (*func) (void *data, Evas_Object *o, const char *emission, const char *source);
|
Edje_Signal_Cb func;
|
||||||
void *data;
|
void *data;
|
||||||
unsigned char just_added : 1;
|
unsigned char just_added : 1;
|
||||||
unsigned char delete_me : 1;
|
unsigned char delete_me : 1;
|
||||||
|
@ -1192,7 +1192,7 @@ struct _Edje_Signal_Callback
|
||||||
struct _Edje_Text_Insert_Filter_Callback
|
struct _Edje_Text_Insert_Filter_Callback
|
||||||
{
|
{
|
||||||
const char *part;
|
const char *part;
|
||||||
void (*func) (void *data, Evas_Object *obj, const char *part, char **text);
|
Edje_Text_Filter_Cb func;
|
||||||
void *data;
|
void *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1190,7 +1190,7 @@ edje_object_part_geometry_get(const Evas_Object *obj, const char *part, Evas_Coo
|
||||||
* Edje object is deleted (or file is set to a new file).
|
* Edje object is deleted (or file is set to a new file).
|
||||||
*/
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
edje_object_item_provider_set(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *obj, const char *part, const char *item), void *data)
|
edje_object_item_provider_set(Evas_Object *obj, Edje_Item_Provider_Cb func, void *data)
|
||||||
{
|
{
|
||||||
Edje *ed;
|
Edje *ed;
|
||||||
|
|
||||||
|
@ -1215,7 +1215,7 @@ edje_object_item_provider_set(Evas_Object *obj, Evas_Object *(*func) (void *data
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
edje_object_text_change_cb_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, const char *part), void *data)
|
edje_object_text_change_cb_set(Evas_Object *obj, Edje_Text_Change_Cb func, void *data)
|
||||||
{
|
{
|
||||||
Edje *ed;
|
Edje *ed;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -1230,7 +1230,7 @@ edje_object_text_change_cb_set(Evas_Object *obj, void (*func) (void *data, Evas_
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
|
|
||||||
rp = ed->table_parts[i];
|
rp = ed->table_parts[i];
|
||||||
if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object)
|
if ((rp->part->type == EDJE_PART_TYPE_GROUP) && (rp->swallowed_object))
|
||||||
edje_object_text_change_cb_set(rp->swallowed_object, func, data);
|
edje_object_text_change_cb_set(rp->swallowed_object, func, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2145,8 +2145,14 @@ edje_object_part_text_cursor_content_get(const Evas_Object *obj, const char *par
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief XX
|
||||||
|
*
|
||||||
|
* @param obj A valid Evas_Object handle
|
||||||
|
* @param part The part name
|
||||||
|
*/
|
||||||
EAPI void
|
EAPI void
|
||||||
edje_object_text_insert_filter_callback_add(Evas_Object *obj, const char *part, void (*func) (void *data, Evas_Object *obj, const char *part, char **text), const void *data)
|
edje_object_text_insert_filter_callback_add(Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data)
|
||||||
{
|
{
|
||||||
Edje *ed;
|
Edje *ed;
|
||||||
Edje_Text_Insert_Filter_Callback *cb;
|
Edje_Text_Insert_Filter_Callback *cb;
|
||||||
|
@ -2156,31 +2162,39 @@ edje_object_text_insert_filter_callback_add(Evas_Object *obj, const char *part,
|
||||||
cb = calloc(1, sizeof(Edje_Text_Insert_Filter_Callback));
|
cb = calloc(1, sizeof(Edje_Text_Insert_Filter_Callback));
|
||||||
cb->part = eina_stringshare_add(part);
|
cb->part = eina_stringshare_add(part);
|
||||||
cb->func = func;
|
cb->func = func;
|
||||||
cb->data = (void*) data;
|
cb->data = (void *)data;
|
||||||
ed->text_insert_filter_callbacks =
|
ed->text_insert_filter_callbacks =
|
||||||
eina_list_append(ed->text_insert_filter_callbacks, cb);
|
eina_list_append(ed->text_insert_filter_callbacks, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
/**
|
||||||
edje_object_text_insert_filter_callback_del(Evas_Object *obj, const char *part, void (*func) (void *data, Evas_Object *obj, const char *part, char **text), const void *data)
|
* @brief XX
|
||||||
|
*
|
||||||
|
* @param obj A valid Evas_Object handle
|
||||||
|
* @param part The part name
|
||||||
|
*/
|
||||||
|
EAPI void *
|
||||||
|
edje_object_text_insert_filter_callback_del(Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func)
|
||||||
{
|
{
|
||||||
Edje *ed;
|
Edje *ed;
|
||||||
Edje_Text_Insert_Filter_Callback *cb;
|
Edje_Text_Insert_Filter_Callback *cb;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
|
||||||
ed = _edje_fetch(obj);
|
ed = _edje_fetch(obj);
|
||||||
if ((!ed) || (!part)) return;
|
if ((!ed) || (!part)) return NULL;
|
||||||
EINA_LIST_FOREACH(ed->text_insert_filter_callbacks, l, cb)
|
EINA_LIST_FOREACH(ed->text_insert_filter_callbacks, l, cb)
|
||||||
{
|
{
|
||||||
if ((!strcmp(cb->part, part)) && (cb->func == func) && (cb->data == data))
|
if ((!strcmp(cb->part, part)) && (cb->func == func))
|
||||||
{
|
{
|
||||||
|
void *data = cb->data;
|
||||||
ed->text_insert_filter_callbacks =
|
ed->text_insert_filter_callbacks =
|
||||||
eina_list_remove_list(ed->text_insert_filter_callbacks, l);
|
eina_list_remove_list(ed->text_insert_filter_callbacks, l);
|
||||||
eina_stringshare_del(cb->part);
|
eina_stringshare_del(cb->part);
|
||||||
free(cb);
|
free(cb);
|
||||||
return;
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue