billiob pushed a commit to branch master.

http://git.enlightenment.org/apps/terminology.git/commit/?id=b7305bfc597978ea159f422b9c95bacb266233c0

commit b7305bfc597978ea159f422b9c95bacb266233c0
Author: Boris Faure <[email protected]>
Date:   Mon Feb 18 20:57:38 2019 +0100

    tyfuzz: better mock termio_take_selection()
    
    + fix leak
    + make the code more readable to me
---
 src/bin/termiointernals.c | 41 +++++++++++++++++++++++++++++++----------
 src/bin/termptyext.c      | 15 ++++++++++-----
 src/bin/tyfuzz.c          | 13 ++++++++++++-
 3 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/src/bin/termiointernals.c b/src/bin/termiointernals.c
index 594300c..22f7253 100644
--- a/src/bin/termiointernals.c
+++ b/src/bin/termiointernals.c
@@ -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);
diff --git a/src/bin/termptyext.c b/src/bin/termptyext.c
index ae08f24..5d70fa2 100644
--- a/src/bin/termptyext.c
+++ b/src/bin/termptyext.c
@@ -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
diff --git a/src/bin/tyfuzz.c b/src/bin/tyfuzz.c
index 9785df1..999b047 100644
--- a/src/bin/tyfuzz.c
+++ b/src/bin/tyfuzz.c
@@ -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;
 }
 

-- 


Reply via email to