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,
};
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_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);
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);
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);
#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;
{
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;
}
}
}
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)
{
Evas_Coord cx, cy, cw, ch;
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);
_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);
_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);
_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);
}
//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);
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);
*/
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;
FLOAT_T scale;
struct {
- void (*func) (void *data, Evas_Object *obj, const char *part);
- void *data;
+ 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);
- void *data;
- int num;
+ Edje_Message_Handler_Cb func;
+ void *data;
+ int num;
} message;
int processing_messages;
int lua_ref;
struct {
- Evas_Object *(*func) (void *data, Evas_Object *obj, const char *part, const char *item);
- void *data;
+ Edje_Item_Provider_Cb func;
+ void *data;
} item_provider;
};
{
const char *signal;
const char *source;
- void (*func) (void *data, Evas_Object *o, const char *emission, const char *source);
- void *data;
- unsigned char just_added : 1;
- unsigned char delete_me : 1;
+ Edje_Signal_Cb func;
+ void *data;
+ unsigned char just_added : 1;
+ unsigned char delete_me : 1;
};
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;
};
* 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;
*
*/
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;
Edje_Real_Part *rp;
rp = ed->table_parts[i];
- if (rp->part->type == EDJE_PART_TYPE_GROUP && rp->swallowed_object)
- edje_object_text_change_cb_set(rp->swallowed_object, func, data);
+ if ((rp->part->type == EDJE_PART_TYPE_GROUP) && (rp->swallowed_object))
+ edje_object_text_change_cb_set(rp->swallowed_object, func, data);
}
}
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;
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_list_remove_list(ed->text_insert_filter_callbacks, l);
eina_stringshare_del(cb->part);
free(cb);
- return;
+ return data;
}
}
+ return NULL;
}
/**