tyfuzz: better mock termio_take_selection()

+ fix leak
+ make the code more readable to me
This commit is contained in:
Boris Faure 2019-02-18 20:57:38 +01:00
parent e3a2d70e6d
commit b7305bfc59
3 changed files with 53 additions and 16 deletions

View File

@ -322,7 +322,7 @@ termio_internal_get_selection(Termio *sd, size_t *lenp)
const char *s = NULL;
size_t len = 0;
EINA_SAFETY_ON_NULL_RETURN_VAL(sd, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(sd, NULL);
if (sd->pty->selection.is_active)
{
start_x = sd->pty->selection.start.x;
@ -376,6 +376,7 @@ termio_internal_get_selection(Termio *sd, size_t *lenp)
termio_selection_get(sd, start_x, start_y, end_x, end_y, &sb, EINA_TRUE);
len = sb.len;
s = eina_stringshare_add_length(ty_sb_steal_buf(&sb), len);
ty_sb_free(&sb);
}
@ -858,8 +859,12 @@ _sel_word(Termio *sd, int cx, int cy)
goto end;
}
cells = termpty_cellrow_get(sd->pty, y, &w);
if (!cells) goto end;
if (x >= w) x = w - 1;
if (!cells)
{
goto end;
}
if (x >= w)
x = w - 1;
do
{
@ -901,7 +906,10 @@ _sel_word(Termio *sd, int cx, int cy)
{
y = cy;
cells = termpty_cellrow_get(sd->pty, y, &w);
if (!cells) goto end;
if (!cells)
{
goto end;
}
}
x = cx;
@ -925,11 +933,15 @@ _sel_word(Termio *sd, int cx, int cy)
}
if (!done)
{
if (!cells[w - 1].att.autowrapped) goto end;
if (!cells[w - 1].att.autowrapped)
goto end;
y++;
x = 0;
cells = termpty_cellrow_get(sd->pty, y, &w);
if (!cells) goto end;
if (!cells)
{
goto end;
}
}
}
while (!done);
@ -938,6 +950,7 @@ _sel_word(Termio *sd, int cx, int cy)
sd->pty->selection.by_word = EINA_TRUE;
sd->pty->selection.is_top_to_bottom = EINA_TRUE;
_trim_sel_word(sd);
termpty_backlog_unlock();
@ -1639,15 +1652,23 @@ termio_internal_mouse_down(Termio *sd,
else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
{
if (!sd->pty->selection.is_active && sd->didclick)
sd->pty->selection.is_active = EINA_TRUE;
{
sd->pty->selection.is_active = EINA_TRUE;
}
if (modifiers.shift && sd->pty->selection.is_active)
_sel_word_to(sd, cx, cy - sd->scroll, EINA_TRUE);
{
_sel_word_to(sd, cx, cy - sd->scroll, EINA_TRUE);
}
else
_sel_word(sd, cx, cy - sd->scroll);
{
_sel_word(sd, cx, cy - sd->scroll);
}
if (sd->pty->selection.is_active)
{
if (!termio_take_selection(sd->self, ELM_SEL_TYPE_PRIMARY))
termio_sel_set(sd, EINA_FALSE);
{
termio_sel_set(sd, EINA_FALSE);
}
}
sd->didclick = EINA_TRUE;
_sel_fill_in_codepoints_array(sd);

View File

@ -116,9 +116,8 @@ _tytest_modifiers_get(const Eina_Unicode *buf, Termio_Modifiers *m)
/**
* FLAGS can be:
* - 0
* - 1: SINGLE_CLICK
* - 2: DOUBLE_CLICK
* - 3: TRIPLE_CLICK
* - 1: DOUBLE_CLICK
* - 2: TRIPLE_CLICK
*/
/*
@ -220,8 +219,13 @@ _handle_selection_is(Termpty *ty,
const Eina_Unicode *buf)
{
size_t len = 0;
Termio *sd = termio_get_from_obj(ty->obj);
const char *s = termio_internal_get_selection(sd, &len);
Termio *sd;
const char *s;
assert(ty->selection.is_active);
sd = termio_get_from_obj(ty->obj);
s = termio_internal_get_selection(sd, &len);
assert(s != NULL && "no selection");
@ -238,6 +242,7 @@ _handle_selection_is(Termpty *ty,
}
buf++;
}
eina_stringshare_del(s);
}
static void

View File

@ -200,9 +200,20 @@ termio_block_activate(Evas_Object *obj EINA_UNUSED,
}
Eina_Bool
termio_take_selection(Evas_Object *obj EINA_UNUSED,
termio_take_selection(Evas_Object *obj,
Elm_Sel_Type type EINA_UNUSED)
{
Termio *sd;
const char *s;
size_t len;
sd = termio_get_from_obj(obj);
s = termio_internal_get_selection(sd, &len);
if (s)
{
eina_stringshare_del(s);
return EINA_TRUE;
}
return EINA_FALSE;
}