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;
|
||||
|
||||
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
|
||||
{
|
||||
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_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_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 */
|
||||
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 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);
|
||||
|
||||
|
@ -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 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_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_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, Edje_Text_Filter_Cb func);
|
||||
|
||||
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);
|
||||
|
|
|
@ -153,9 +153,8 @@ _edje_focus_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
|
|||
#endif
|
||||
}
|
||||
|
||||
// need one for markup and format too - how to do it? extra type param?
|
||||
static void __UNUSED__
|
||||
_text_filter_prepend(Entry *en, const char *text)
|
||||
static void
|
||||
_text_filter_text_prepend(Entry *en, const char *text)
|
||||
{
|
||||
char *text2;
|
||||
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))
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
_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
|
||||
{
|
||||
//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);
|
||||
_anchors_get(en->cursor, rp->object, en);
|
||||
_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);
|
||||
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
|
||||
{
|
||||
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);
|
||||
_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);
|
||||
_sel_clear(en->cursor, rp->object, en);
|
||||
//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);
|
||||
_anchors_get(en->cursor, rp->object, en);
|
||||
_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);
|
||||
_sel_clear(en->cursor, rp->object, en);
|
||||
//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);
|
||||
_anchors_get(en->cursor, rp->object, en);
|
||||
_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
|
||||
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);
|
||||
_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;
|
||||
|
||||
//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);
|
||||
_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
|
||||
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;
|
||||
|
||||
|
|
|
@ -983,12 +983,12 @@ struct _Edje
|
|||
FLOAT_T scale;
|
||||
|
||||
struct {
|
||||
void (*func) (void *data, Evas_Object *obj, const char *part);
|
||||
Edje_Text_Change_Cb func;
|
||||
void *data;
|
||||
} text_change;
|
||||
|
||||
struct {
|
||||
void (*func) (void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg);
|
||||
Edje_Message_Handler_Cb func;
|
||||
void *data;
|
||||
int num;
|
||||
} message;
|
||||
|
@ -1025,7 +1025,7 @@ struct _Edje
|
|||
int lua_ref;
|
||||
|
||||
struct {
|
||||
Evas_Object *(*func) (void *data, Evas_Object *obj, const char *part, const char *item);
|
||||
Edje_Item_Provider_Cb func;
|
||||
void *data;
|
||||
} item_provider;
|
||||
};
|
||||
|
@ -1183,7 +1183,7 @@ struct _Edje_Signal_Callback
|
|||
{
|
||||
const char *signal;
|
||||
const char *source;
|
||||
void (*func) (void *data, Evas_Object *o, const char *emission, const char *source);
|
||||
Edje_Signal_Cb func;
|
||||
void *data;
|
||||
unsigned char just_added : 1;
|
||||
unsigned char delete_me : 1;
|
||||
|
@ -1192,7 +1192,7 @@ struct _Edje_Signal_Callback
|
|||
struct _Edje_Text_Insert_Filter_Callback
|
||||
{
|
||||
const char *part;
|
||||
void (*func) (void *data, Evas_Object *obj, const char *part, char **text);
|
||||
Edje_Text_Filter_Cb func;
|
||||
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).
|
||||
*/
|
||||
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;
|
||||
|
||||
|
@ -1215,7 +1215,7 @@ edje_object_item_provider_set(Evas_Object *obj, Evas_Object *(*func) (void *data
|
|||
*
|
||||
*/
|
||||
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;
|
||||
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;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -2145,8 +2145,14 @@ edje_object_part_text_cursor_content_get(const Evas_Object *obj, const char *par
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief XX
|
||||
*
|
||||
* @param obj A valid Evas_Object handle
|
||||
* @param part The part name
|
||||
*/
|
||||
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_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->part = eina_stringshare_add(part);
|
||||
cb->func = func;
|
||||
cb->data = (void*) data;
|
||||
cb->data = (void *)data;
|
||||
ed->text_insert_filter_callbacks =
|
||||
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_Text_Insert_Filter_Callback *cb;
|
||||
Eina_List *l;
|
||||
|
||||
ed = _edje_fetch(obj);
|
||||
if ((!ed) || (!part)) return;
|
||||
if ((!ed) || (!part)) return NULL;
|
||||
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 =
|
||||
eina_list_remove_list(ed->text_insert_filter_callbacks, l);
|
||||
eina_stringshare_del(cb->part);
|
||||
free(cb);
|
||||
return;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue