forked from enlightenment/efl
edje: Updated edje to conform with recent textblock changes.
'Return' now inserts a Paragraph Separator. 'Shift + Return' now inserts a New Line. SVN revision: 50931
This commit is contained in:
parent
d5e579c2e9
commit
48180c9859
|
@ -81,12 +81,12 @@ struct _Anchor
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_ECORE_IMF
|
#ifdef HAVE_ECORE_IMF
|
||||||
static void
|
static void
|
||||||
_edje_entry_focus_in_cb(void *data, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
_edje_entry_focus_in_cb(void *data, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Entry *en;
|
Entry *en;
|
||||||
|
|
||||||
rp = data;
|
rp = data;
|
||||||
if (!rp || !rp->entry_data || !rp->edje || !rp->edje->obj) return;
|
if (!rp || !rp->entry_data || !rp->edje || !rp->edje->obj) return;
|
||||||
|
|
||||||
|
@ -95,12 +95,12 @@ _edje_entry_focus_in_cb(void *data, Evas_Object *o __UNUSED__, const char *emiss
|
||||||
|
|
||||||
if (evas_object_focus_get(rp->edje->obj))
|
if (evas_object_focus_get(rp->edje->obj))
|
||||||
{
|
{
|
||||||
ecore_imf_context_reset(en->imf_context);
|
ecore_imf_context_reset(en->imf_context);
|
||||||
ecore_imf_context_focus_in(en->imf_context);
|
ecore_imf_context_focus_in(en->imf_context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_edje_entry_focus_out_cb(void *data, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
_edje_entry_focus_out_cb(void *data, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
|
||||||
{
|
{
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
|
@ -118,7 +118,7 @@ _edje_entry_focus_out_cb(void *data, Evas_Object *o __UNUSED__, const char *emis
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_edje_focus_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
_edje_focus_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
Edje *ed = data;
|
Edje *ed = data;
|
||||||
|
@ -126,26 +126,26 @@ _edje_focus_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
|
||||||
Edje_Real_Part *rp;
|
Edje_Real_Part *rp;
|
||||||
Entry *en;
|
Entry *en;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_edje_emit(ed, "focus,in", "");
|
_edje_emit(ed, "focus,in", "");
|
||||||
#ifdef HAVE_ECORE_IMF
|
#ifdef HAVE_ECORE_IMF
|
||||||
rp = ed->focused_part;
|
rp = ed->focused_part;
|
||||||
if (rp == NULL) return;
|
if (rp == NULL) return;
|
||||||
|
|
||||||
en = rp->entry_data;
|
en = rp->entry_data;
|
||||||
if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
|
if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
|
||||||
(rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
|
(rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (en->imf_context)
|
if (en->imf_context)
|
||||||
{
|
{
|
||||||
ecore_imf_context_reset(en->imf_context);
|
ecore_imf_context_reset(en->imf_context);
|
||||||
ecore_imf_context_focus_in(en->imf_context);
|
ecore_imf_context_focus_in(en->imf_context);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_edje_focus_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
_edje_focus_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
|
||||||
{
|
{
|
||||||
Edje *ed = data;
|
Edje *ed = data;
|
||||||
|
@ -153,34 +153,34 @@ _edje_focus_out_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__,
|
||||||
Edje_Real_Part *rp = ed->focused_part;
|
Edje_Real_Part *rp = ed->focused_part;
|
||||||
Entry *en;
|
Entry *en;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
_edje_emit(ed, "focus,out", "");
|
_edje_emit(ed, "focus,out", "");
|
||||||
|
|
||||||
#ifdef HAVE_ECORE_IMF
|
#ifdef HAVE_ECORE_IMF
|
||||||
if (!rp) return;
|
if (!rp) return;
|
||||||
en = rp->entry_data;
|
en = rp->entry_data;
|
||||||
if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
|
if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
|
||||||
(rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
|
(rp->part->entry_mode < EDJE_ENTRY_EDIT_MODE_EDITABLE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (en->imf_context)
|
if (en->imf_context)
|
||||||
{
|
{
|
||||||
ecore_imf_context_reset(en->imf_context);
|
ecore_imf_context_reset(en->imf_context);
|
||||||
ecore_imf_context_cursor_position_set(en->imf_context,
|
ecore_imf_context_cursor_position_set(en->imf_context,
|
||||||
evas_textblock_cursor_pos_get(en->cursor));
|
evas_textblock_cursor_pos_get(en->cursor));
|
||||||
ecore_imf_context_focus_out(en->imf_context);
|
ecore_imf_context_focus_out(en->imf_context);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// need one for markup and format too - how to do it? extra type param?
|
// need one for markup and format too - how to do it? extra type param?
|
||||||
static void
|
static void
|
||||||
_text_filter_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;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
|
||||||
text2 = strdup(text);
|
text2 = strdup(text);
|
||||||
EINA_LIST_FOREACH(en->rp->edje->text_insert_filter_callbacks, l, cb)
|
EINA_LIST_FOREACH(en->rp->edje->text_insert_filter_callbacks, l, cb)
|
||||||
{
|
{
|
||||||
|
@ -193,8 +193,6 @@ _text_filter_prepend(Entry *en, const char *text)
|
||||||
if (text2)
|
if (text2)
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_text_prepend(en->cursor, text2);
|
evas_textblock_cursor_text_prepend(en->cursor, text2);
|
||||||
// evas_textblock_cursor_format_prepend(en->cursor, text2);
|
|
||||||
// evas_object_textblock_text_markup_prepend(en->cursor, text2);
|
|
||||||
free(text2);
|
free(text2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,105 +210,14 @@ _curs_update_from_curs(Evas_Textblock_Cursor *c, Evas_Object *o __UNUSED__, Entr
|
||||||
static void
|
static void
|
||||||
_curs_back(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_curs_back(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
if (!evas_textblock_cursor_char_prev(c))
|
evas_textblock_cursor_char_prev(c);
|
||||||
{
|
|
||||||
if (evas_textblock_cursor_node_prev(c))
|
|
||||||
{
|
|
||||||
while (evas_textblock_cursor_node_format_get(c))
|
|
||||||
{
|
|
||||||
if (evas_textblock_cursor_node_format_is_visible_get(c)) break;
|
|
||||||
if (!evas_textblock_cursor_node_prev(c)) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_curs_update_from_curs(c, o, en);
|
_curs_update_from_curs(c, o, en);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_curs_next(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_curs_next(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
int ln, ln2, ok;
|
evas_textblock_cursor_char_next(c);
|
||||||
Eina_Bool eol;
|
|
||||||
|
|
||||||
ln = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
|
|
||||||
eol = evas_textblock_cursor_eol_get(c);
|
|
||||||
if (!evas_textblock_cursor_char_next(c))
|
|
||||||
{
|
|
||||||
if (!eol)
|
|
||||||
{
|
|
||||||
ln2 = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
|
|
||||||
if (ln2 != ln)
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_char_prev(c);
|
|
||||||
evas_textblock_cursor_eol_set(c, 1);
|
|
||||||
_curs_update_from_curs(c, o, en);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
ok = evas_textblock_cursor_node_next(c);
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_line_last(c);
|
|
||||||
_curs_update_from_curs(c, o, en);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
while (evas_textblock_cursor_node_format_get(c))
|
|
||||||
{
|
|
||||||
if (evas_textblock_cursor_node_format_is_visible_get(c))
|
|
||||||
break;
|
|
||||||
if (!evas_textblock_cursor_node_next(c))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
evas_textblock_cursor_eol_set(c, 0);
|
|
||||||
if (evas_textblock_cursor_node_next(c))
|
|
||||||
{
|
|
||||||
while (evas_textblock_cursor_node_format_get(c))
|
|
||||||
{
|
|
||||||
if (evas_textblock_cursor_node_format_is_visible_get(c))
|
|
||||||
break;
|
|
||||||
if (!evas_textblock_cursor_node_next(c))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int len, pos;
|
|
||||||
|
|
||||||
len = evas_textblock_cursor_node_text_length_get(c);
|
|
||||||
pos = evas_textblock_cursor_pos_get(c);
|
|
||||||
if (pos == len)
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_node_next(c);
|
|
||||||
if (!eol)
|
|
||||||
{
|
|
||||||
ln2 = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
|
|
||||||
if (ln2 != ln)
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_node_prev(c);
|
|
||||||
evas_textblock_cursor_line_last(c);
|
|
||||||
_curs_update_from_curs(c, o, en);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!eol)
|
|
||||||
{
|
|
||||||
ln2 = evas_textblock_cursor_line_geometry_get(c, NULL, NULL, NULL, NULL);
|
|
||||||
if (ln2 != ln)
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_char_prev(c);
|
|
||||||
evas_textblock_cursor_eol_set(c, 1);
|
|
||||||
_curs_update_from_curs(c, o, en);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
evas_textblock_cursor_eol_set(c, 0);
|
|
||||||
}
|
|
||||||
_curs_update_from_curs(c, o, en);
|
_curs_update_from_curs(c, o, en);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,9 +226,9 @@ _curs_line_last_get(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *cc;
|
Evas_Textblock_Cursor *cc;
|
||||||
int ln;
|
int ln;
|
||||||
|
|
||||||
cc = evas_object_textblock_cursor_new(o);
|
cc = evas_object_textblock_cursor_new(o);
|
||||||
evas_textblock_cursor_node_last(cc);
|
evas_textblock_cursor_paragraph_last(cc);
|
||||||
ln = evas_textblock_cursor_line_geometry_get(cc, NULL, NULL, NULL, NULL);
|
ln = evas_textblock_cursor_line_geometry_get(cc, NULL, NULL, NULL, NULL);
|
||||||
evas_textblock_cursor_free(cc);
|
evas_textblock_cursor_free(cc);
|
||||||
return ln;
|
return ln;
|
||||||
|
@ -330,34 +237,29 @@ _curs_line_last_get(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *
|
||||||
static void
|
static void
|
||||||
_curs_lin_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_curs_lin_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_line_first(c);
|
evas_textblock_cursor_line_char_first(c);
|
||||||
_curs_update_from_curs(c, o, en);
|
_curs_update_from_curs(c, o, en);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_curs_lin_end(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_curs_lin_end(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_line_last(c);
|
evas_textblock_cursor_line_char_last(c);
|
||||||
// if (!evas_textblock_cursor_node_format_get(c))
|
|
||||||
// _curs_next(c, o, en);
|
|
||||||
_curs_update_from_curs(c, o, en);
|
_curs_update_from_curs(c, o, en);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_curs_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_curs_start(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_line_set(c, 0);
|
evas_textblock_cursor_paragraph_first(c);
|
||||||
evas_textblock_cursor_line_first(c);
|
|
||||||
_curs_update_from_curs(c, o, en);
|
_curs_update_from_curs(c, o, en);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_curs_end(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_curs_end(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_node_last(c);
|
evas_textblock_cursor_paragraph_last(c);
|
||||||
_curs_lin_end(c, o, en);
|
_curs_lin_end(c, o, en);
|
||||||
// evas_textblock_cursor_line_set(c, _curs_line_last_get(c, o, en));
|
|
||||||
// _curs_lin_end(c, o, en);
|
|
||||||
_curs_update_from_curs(c, o, en);
|
_curs_update_from_curs(c, o, en);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,7 +282,7 @@ _curs_jump_line(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en, int ln)
|
||||||
if (en->cx < (lx + (lw / 2)))
|
if (en->cx < (lx + (lw / 2)))
|
||||||
{
|
{
|
||||||
if (ln == last) _curs_end(c, o, en);
|
if (ln == last) _curs_end(c, o, en);
|
||||||
// evas_textblock_cursor_line_first(c);
|
// evas_textblock_cursor_line_char_last(c);
|
||||||
_curs_lin_start(c, o, en);
|
_curs_lin_start(c, o, en);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -389,7 +291,7 @@ _curs_jump_line(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en, int ln)
|
||||||
_curs_end(c, o, en);
|
_curs_end(c, o, en);
|
||||||
else
|
else
|
||||||
_curs_lin_end(c, o, en);
|
_curs_lin_end(c, o, en);
|
||||||
// evas_textblock_cursor_line_last(c);
|
// evas_textblock_cursor_line_char_last(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -923,17 +825,18 @@ static void
|
||||||
_anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *c1;
|
Evas_Textblock_Cursor *c1;
|
||||||
|
const Evas_Object_Textblock_Node_Format *node;
|
||||||
Anchor *an = NULL;
|
Anchor *an = NULL;
|
||||||
int firsttext = 0;
|
|
||||||
|
|
||||||
_anchors_clear(c, o, en);
|
_anchors_clear(c, o, en);
|
||||||
c1 = evas_object_textblock_cursor_new(o);
|
c1 = evas_object_textblock_cursor_new(o);
|
||||||
evas_textblock_cursor_node_first(c1);
|
node = evas_textblock_node_format_first_get(o);
|
||||||
do
|
for (; node ; node = evas_textblock_node_format_next_get(node))
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
|
|
||||||
s = evas_textblock_cursor_node_format_get(c1);
|
evas_textblock_cursor_at_format_set(c1, node);
|
||||||
|
s = evas_textblock_node_format_text_get(node);
|
||||||
if (s)
|
if (s)
|
||||||
{
|
{
|
||||||
if ((!strncmp(s, "+ a ", 4)) || (!strncmp(s, "+a ", 3)))
|
if ((!strncmp(s, "+ a ", 4)) || (!strncmp(s, "+a ", 3)))
|
||||||
|
@ -942,7 +845,7 @@ _anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
if (an)
|
if (an)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
an->en = en;
|
an->en = en;
|
||||||
p = strstr(s, "href=");
|
p = strstr(s, "href=");
|
||||||
if (p)
|
if (p)
|
||||||
|
@ -958,9 +861,11 @@ _anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
}
|
}
|
||||||
else if ((!strcmp(s, "- a")) || (!strcmp(s, "-a")))
|
else if ((!strcmp(s, "- a")) || (!strcmp(s, "-a")))
|
||||||
{
|
{
|
||||||
|
/* Close the anchor, if the anchor was without text, free it as well */
|
||||||
if (an)
|
if (an)
|
||||||
{
|
{
|
||||||
if (!firsttext)
|
evas_textblock_cursor_at_format_set(an->end, node);
|
||||||
|
if (!evas_textblock_cursor_compare(an->start, an->end))
|
||||||
{
|
{
|
||||||
if (an->name) free(an->name);
|
if (an->name) free(an->name);
|
||||||
evas_textblock_cursor_free(an->start);
|
evas_textblock_cursor_free(an->start);
|
||||||
|
@ -968,7 +873,6 @@ _anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
en->anchors = eina_list_remove(en->anchors, an);
|
en->anchors = eina_list_remove(en->anchors, an);
|
||||||
free(an);
|
free(an);
|
||||||
}
|
}
|
||||||
firsttext = 0;
|
|
||||||
an = NULL;
|
an = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -978,7 +882,7 @@ _anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
if (an)
|
if (an)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
an->en = en;
|
an->en = en;
|
||||||
an->item = 1;
|
an->item = 1;
|
||||||
p = strstr(s, "href=");
|
p = strstr(s, "href=");
|
||||||
|
@ -997,7 +901,7 @@ _anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
if (an)
|
if (an)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
if (!firsttext)
|
if (!firsttext)
|
||||||
{
|
{
|
||||||
if (an->name) free(an->name);
|
if (an->name) free(an->name);
|
||||||
|
@ -1007,30 +911,11 @@ _anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
free(an);
|
free(an);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
firsttext = 0;
|
|
||||||
an = NULL;
|
an = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
s = evas_textblock_cursor_node_text_get(c1);
|
|
||||||
if (an)
|
|
||||||
{
|
|
||||||
if (!an->item)
|
|
||||||
{
|
|
||||||
if (!firsttext)
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_copy(c1, an->start);
|
|
||||||
firsttext = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
evas_textblock_cursor_char_last(c1);
|
|
||||||
evas_textblock_cursor_copy(c1, an->end);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (evas_textblock_cursor_node_next(c1));
|
|
||||||
evas_textblock_cursor_free(c1);
|
evas_textblock_cursor_free(c1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1038,111 +923,22 @@ _anchors_get(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
static void
|
static void
|
||||||
_range_del(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
_range_del(Evas_Textblock_Cursor *c __UNUSED__, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *c1;
|
|
||||||
|
|
||||||
c1 = evas_object_textblock_cursor_new(o);
|
|
||||||
evas_textblock_cursor_node_last(c1);
|
|
||||||
if (!evas_textblock_cursor_compare(en->sel_end, c1))
|
|
||||||
evas_textblock_cursor_node_prev(en->sel_end);
|
|
||||||
if (!evas_textblock_cursor_compare(en->sel_start, c1))
|
|
||||||
evas_textblock_cursor_node_prev(en->sel_start);
|
|
||||||
evas_textblock_cursor_free(c1);
|
|
||||||
evas_textblock_cursor_range_delete(en->sel_start, en->sel_end);
|
evas_textblock_cursor_range_delete(en->sel_start, en->sel_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_backspace(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_backspace(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *c1, *c2;
|
if (evas_textblock_cursor_char_prev(c))
|
||||||
int nodel = 0;
|
|
||||||
|
|
||||||
c1 = evas_object_textblock_cursor_new(o);
|
|
||||||
if (!evas_textblock_cursor_char_prev(c))
|
|
||||||
{
|
{
|
||||||
if (!evas_textblock_cursor_node_prev(c))
|
evas_textblock_cursor_char_delete(c);
|
||||||
nodel = 1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_copy(c, c1);
|
|
||||||
if (evas_textblock_cursor_node_format_get(c) &&
|
|
||||||
(!evas_textblock_cursor_node_format_is_visible_get(c)))
|
|
||||||
_curs_back(c, o, en);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_copy(c, c1);
|
|
||||||
}
|
|
||||||
c2 = evas_object_textblock_cursor_new(o);
|
|
||||||
evas_textblock_cursor_copy(c, c2);
|
|
||||||
if (!nodel)
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_range_delete(c1, c2);
|
|
||||||
}
|
|
||||||
evas_textblock_cursor_copy(c, c1);
|
|
||||||
_curs_back(c, o, en);
|
|
||||||
evas_textblock_cursor_copy(c, c2);
|
|
||||||
if ((!evas_textblock_cursor_char_next(c2)) &&
|
|
||||||
(!evas_textblock_cursor_node_next(c2)))
|
|
||||||
{
|
|
||||||
_curs_end(c, o, en);
|
|
||||||
}
|
|
||||||
else if (evas_textblock_cursor_compare(c, c1))
|
|
||||||
{
|
|
||||||
_curs_next(c, o, en);
|
|
||||||
}
|
|
||||||
|
|
||||||
evas_textblock_cursor_free(c1);
|
|
||||||
evas_textblock_cursor_free(c2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_delete(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
_delete(Evas_Textblock_Cursor *c, Evas_Object *o, Entry *en)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *c1, *c2;
|
evas_textblock_cursor_char_delete(c);
|
||||||
|
|
||||||
c1 = evas_object_textblock_cursor_new(o);
|
|
||||||
c2 = evas_object_textblock_cursor_new(o);
|
|
||||||
evas_textblock_cursor_copy(c, c1);
|
|
||||||
evas_textblock_cursor_copy(c, c2);
|
|
||||||
evas_textblock_cursor_char_last(c2);
|
|
||||||
if (evas_textblock_cursor_node_format_get(c1) &&
|
|
||||||
(!evas_textblock_cursor_node_format_is_visible_get(c1)))
|
|
||||||
{
|
|
||||||
// non-visible format-node
|
|
||||||
evas_textblock_cursor_copy(c1, c2);
|
|
||||||
while (evas_textblock_cursor_node_next(c2))
|
|
||||||
{
|
|
||||||
if ((!evas_textblock_cursor_node_format_get(c2)) ||
|
|
||||||
(evas_textblock_cursor_node_format_is_visible_get(c2)))
|
|
||||||
{
|
|
||||||
evas_textblock_cursor_node_prev(c2);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (evas_textblock_cursor_node_format_is_visible_get(c1))
|
|
||||||
{
|
|
||||||
// visible format node
|
|
||||||
// do nothing just copy c to c1/c2 and range del
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// if it's a text node
|
|
||||||
if (!evas_textblock_cursor_char_next(c1))
|
|
||||||
{
|
|
||||||
if (evas_textblock_cursor_compare(c1, c2) > 0)
|
|
||||||
_curs_next(c, o, en);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
evas_textblock_cursor_copy(c, c1);
|
|
||||||
evas_textblock_cursor_copy(c, c2);
|
|
||||||
}
|
|
||||||
evas_textblock_cursor_range_delete(c1, c2);
|
|
||||||
evas_textblock_cursor_free(c1);
|
|
||||||
evas_textblock_cursor_free(c2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1444,8 +1240,14 @@ _edje_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
|
||||||
if (en->have_selection)
|
if (en->have_selection)
|
||||||
_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);
|
||||||
//yy
|
if (shift)
|
||||||
evas_textblock_cursor_format_prepend(en->cursor, "\n");
|
{
|
||||||
|
evas_textblock_cursor_format_prepend(en->cursor, "\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
evas_textblock_cursor_format_prepend(en->cursor, "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);
|
||||||
_edje_emit(ed, "entry,changed", rp->part->name);
|
_edje_emit(ed, "entry,changed", rp->part->name);
|
||||||
|
@ -2072,7 +1874,7 @@ _edje_entry_text_markup_set(Edje_Real_Part *rp, const char *text)
|
||||||
_sel_clear(en->cursor, rp->object, en);
|
_sel_clear(en->cursor, rp->object, en);
|
||||||
evas_object_textblock_text_markup_set(rp->object, text);
|
evas_object_textblock_text_markup_set(rp->object, text);
|
||||||
/*
|
/*
|
||||||
evas_textblock_cursor_node_last(en->cursor);
|
evas_textblock_cursor_paragraph_last(en->cursor);
|
||||||
if (!evas_textblock_cursor_node_format_get(en->cursor))
|
if (!evas_textblock_cursor_node_format_get(en->cursor))
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_format_append(en->cursor, "\n");
|
evas_textblock_cursor_format_append(en->cursor, "\n");
|
||||||
|
@ -2371,11 +2173,8 @@ _edje_entry_cursor_next(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
if (!c) return EINA_FALSE;
|
if (!c) return EINA_FALSE;
|
||||||
if (!evas_textblock_cursor_char_next(c))
|
if (!evas_textblock_cursor_char_next(c))
|
||||||
{
|
{
|
||||||
evas_textblock_cursor_eol_set(c, 0);
|
return EINA_FALSE;
|
||||||
if (evas_textblock_cursor_node_next(c)) goto ok;
|
|
||||||
else return EINA_FALSE;
|
|
||||||
}
|
}
|
||||||
ok:
|
|
||||||
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
||||||
_sel_update(c, rp->object, rp->entry_data);
|
_sel_update(c, rp->object, rp->entry_data);
|
||||||
|
|
||||||
|
@ -2401,7 +2200,7 @@ _edje_entry_cursor_prev(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
if (!c) return EINA_FALSE;
|
if (!c) return EINA_FALSE;
|
||||||
if (!evas_textblock_cursor_char_prev(c))
|
if (!evas_textblock_cursor_char_prev(c))
|
||||||
{
|
{
|
||||||
if (evas_textblock_cursor_node_prev(c)) goto ok;
|
if (evas_textblock_cursor_paragraph_prev(c)) goto ok;
|
||||||
else return EINA_FALSE;
|
else return EINA_FALSE;
|
||||||
}
|
}
|
||||||
ok:
|
ok:
|
||||||
|
@ -2440,9 +2239,9 @@ _edje_entry_cursor_up(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
if (!evas_textblock_cursor_char_coord_set(c, cx, ly + (lh / 2)))
|
if (!evas_textblock_cursor_char_coord_set(c, cx, ly + (lh / 2)))
|
||||||
{
|
{
|
||||||
if (cx < (lx +(lw / 2)))
|
if (cx < (lx +(lw / 2)))
|
||||||
evas_textblock_cursor_line_first(c);
|
evas_textblock_cursor_line_char_last(c);
|
||||||
else
|
else
|
||||||
evas_textblock_cursor_line_last(c);
|
evas_textblock_cursor_line_char_last(c);
|
||||||
}
|
}
|
||||||
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
||||||
_sel_update(c, rp->object, rp->entry_data);
|
_sel_update(c, rp->object, rp->entry_data);
|
||||||
|
@ -2478,9 +2277,9 @@ _edje_entry_cursor_down(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
if (!evas_textblock_cursor_char_coord_set(c, cx, ly + (lh / 2)))
|
if (!evas_textblock_cursor_char_coord_set(c, cx, ly + (lh / 2)))
|
||||||
{
|
{
|
||||||
if (cx < (lx +(lw / 2)))
|
if (cx < (lx +(lw / 2)))
|
||||||
evas_textblock_cursor_line_first(c);
|
evas_textblock_cursor_line_char_last(c);
|
||||||
else
|
else
|
||||||
evas_textblock_cursor_line_last(c);
|
evas_textblock_cursor_line_char_last(c);
|
||||||
}
|
}
|
||||||
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
||||||
_sel_update(c, rp->object, rp->entry_data);
|
_sel_update(c, rp->object, rp->entry_data);
|
||||||
|
@ -2505,7 +2304,7 @@ _edje_entry_cursor_begin(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
Entry *en = rp->entry_data;
|
Entry *en = rp->entry_data;
|
||||||
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
||||||
if (!c) return;
|
if (!c) return;
|
||||||
evas_textblock_cursor_node_first(c);
|
evas_textblock_cursor_paragraph_first(c);
|
||||||
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
||||||
_sel_update(c, rp->object, rp->entry_data);
|
_sel_update(c, rp->object, rp->entry_data);
|
||||||
|
|
||||||
|
@ -2575,7 +2374,7 @@ _edje_entry_cursor_line_begin(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
Entry *en = rp->entry_data;
|
Entry *en = rp->entry_data;
|
||||||
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
||||||
if (!c) return;
|
if (!c) return;
|
||||||
evas_textblock_cursor_line_first(c);
|
evas_textblock_cursor_line_char_last(c);
|
||||||
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
||||||
_sel_update(c, rp->object, rp->entry_data);
|
_sel_update(c, rp->object, rp->entry_data);
|
||||||
|
|
||||||
|
@ -2598,7 +2397,7 @@ _edje_entry_cursor_line_end(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
Entry *en = rp->entry_data;
|
Entry *en = rp->entry_data;
|
||||||
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
||||||
if (!c) return;
|
if (!c) return;
|
||||||
evas_textblock_cursor_line_last(c);
|
evas_textblock_cursor_line_char_last(c);
|
||||||
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
_curs_update_from_curs(c, rp->object, rp->entry_data);
|
||||||
_sel_update(c, rp->object, rp->entry_data);
|
_sel_update(c, rp->object, rp->entry_data);
|
||||||
|
|
||||||
|
@ -2620,7 +2419,7 @@ _edje_entry_cursor_is_format_get(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
||||||
if (!c) return EINA_FALSE;
|
if (!c) return EINA_FALSE;
|
||||||
if (evas_textblock_cursor_node_format_get(c)) return EINA_TRUE;
|
if (evas_textblock_cursor_is_format(c)) return EINA_TRUE;
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2629,7 +2428,7 @@ _edje_entry_cursor_is_visible_format_get(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
|
||||||
if (!c) return EINA_FALSE;
|
if (!c) return EINA_FALSE;
|
||||||
return evas_textblock_cursor_node_format_is_visible_get(c);
|
return evas_textblock_cursor_format_is_visible_get(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
|
@ -2640,9 +2439,9 @@ _edje_entry_cursor_content_get(Edje_Real_Part *rp, Edje_Cursor cur)
|
||||||
static char buf[16];
|
static char buf[16];
|
||||||
int pos, pos2, ch;
|
int pos, pos2, ch;
|
||||||
if (!c) return NULL;
|
if (!c) return NULL;
|
||||||
s = evas_textblock_cursor_node_format_get(c);
|
s = evas_textblock_node_format_text_get(evas_textblock_cursor_format_get(c));
|
||||||
if (s) return s;
|
if (s) return s;
|
||||||
s = evas_textblock_cursor_node_text_get(c);
|
s = evas_textblock_cursor_paragraph_text_get(c);
|
||||||
if (!s) return NULL;
|
if (!s) return NULL;
|
||||||
pos = evas_textblock_cursor_pos_get(c);
|
pos = evas_textblock_cursor_pos_get(c);
|
||||||
pos2 = evas_string_char_next_get(s, pos, &ch);
|
pos2 = evas_string_char_next_get(s, pos, &ch);
|
||||||
|
|
Loading…
Reference in New Issue