[EGIT] [core/efl] master 01/01: evas/textblock: apply style paddings in fit calculation

2020-10-27 Thread Youngbok Shin
woohyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=94c2d2295f5effea80a21031d84a5ef370a93ef3

commit 94c2d2295f5effea80a21031d84a5ef370a93ef3
Author: Youngbok Shin 
Date:   Wed Oct 28 14:50:23 2020 +0900

evas/textblock: apply style paddings in fit calculation

Summary:
The style paddings should be calculated for fitting text into
the given object's size.

Test Plan:
1. Put shadow effect in your style string.
"... style=shadow,far_bottom shadow_color=#000 ..."

2. Apply fit option( and ellipsis to see how it goes wrong without this 
patch.)

3. See results.

Reviewers: woohyun, ali.alzyod

Reviewed By: woohyun, ali.alzyod

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12183
---
 src/lib/evas/canvas/evas_object_textblock.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 77f3d3d07a..c8fd924b78 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -17793,10 +17793,13 @@ int fit_text_block(Evas_Object *eo_obj)
 }
   else
 {
+   int pad_l, pad_r, pad_t, pad_b;
+

fit_style_update(eo_obj,fc->p_size_array[mid],EINA_TRUE,bwrap);
Eina_Size2D size = 
efl_canvas_textblock_size_formatted_get(eo_obj);
-   wf_new = size.w;
-   hf_new = size.h;
+   efl_canvas_textblock_style_insets_get(eo_obj, _l, 
_r, _t, _b);
+   wf_new = size.w + pad_l + pad_r;
+   hf_new = size.h + pad_t + pad_b;
if (fc->p_size_array[mid]<255)
  {
  fc->size_cache[font_size].w = wf_new;

-- 




[EGIT] [core/efl] efl-1.25 01/03: evas: sw font draw - protect against null pointer access

2020-10-06 Thread Youngbok Shin
stefan pushed a commit to branch efl-1.25.

http://git.enlightenment.org/core/efl.git/commit/?id=92da0a3339e97b818d2ba787220d571efb3a5df5

commit 92da0a3339e97b818d2ba787220d571efb3a5df5
Author: Youngbok Shin 
Date:   Thu Sep 24 09:12:06 2020 +

evas: sw font draw - protect against null pointer access

The image data of dst could be null in a rare case.
@fix

Reviewed-by: Christopher Michael 
Differential Revision: https://phab.enlightenment.org/D12163
---
 src/lib/evas/common/evas_font_draw.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/lib/evas/common/evas_font_draw.c 
b/src/lib/evas/common/evas_font_draw.c
index 241f772f49..9792e9d408 100644
--- a/src/lib/evas/common/evas_font_draw.c
+++ b/src/lib/evas/common/evas_font_draw.c
@@ -457,6 +457,8 @@ evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
DATA32 coltab[16], col;
DATA16 mtab[16], v;
 
+   if (!dst) return;
+
// FIXME: Use dw, dh for scaling glyphs...
(void) dw;
(void) dh;

-- 




[EGIT] [core/efl] master 01/01: evas: sw font draw - protect against null pointer access

2020-09-28 Thread Youngbok Shin
devilhorns pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=85a0af8281ffd8fd28f0e96657da6e0550225ca8

commit 85a0af8281ffd8fd28f0e96657da6e0550225ca8
Author: Youngbok Shin 
Date:   Thu Sep 24 09:12:06 2020 +

evas: sw font draw - protect against null pointer access

The image data of dst could be null in a rare case.
@fix

Reviewed-by: Christopher Michael 
Differential Revision: https://phab.enlightenment.org/D12163
---
 src/lib/evas/common/evas_font_draw.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/lib/evas/common/evas_font_draw.c 
b/src/lib/evas/common/evas_font_draw.c
index 241f772f49..9792e9d408 100644
--- a/src/lib/evas/common/evas_font_draw.c
+++ b/src/lib/evas/common/evas_font_draw.c
@@ -457,6 +457,8 @@ evas_common_font_glyph_draw(RGBA_Font_Glyph *fg,
DATA32 coltab[16], col;
DATA16 mtab[16], v;
 
+   if (!dst) return;
+
// FIXME: Use dw, dh for scaling glyphs...
(void) dw;
(void) dh;

-- 




[EGIT] [core/efl] master 01/01: evas_textblock: remove style padding from native width and formatted height

2020-09-01 Thread Youngbok Shin
woohyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6e025575350276a0f43ffc33ade696e6bffca395

commit 6e025575350276a0f43ffc33ade696e6bffca395
Author: Youngbok Shin 
Date:   Tue Sep 1 19:39:13 2020 +0900

evas_textblock: remove style padding from native width and formatted height

Summary:
The style padding was included in native width(not in native height)
and formatted height(not in formatted width).
This is so weired. In addition, there is no enough document about
the relation between formatted size, native size and the style padding.
This issue is caused by a confusing code which is about how to handle
the style padding on item's width and height.("x_adjustment"!)

When Evas calculates "c->wmax" in line finalization stage, it explicitly 
subtract
style padding from line width. So, I assumed the formatted size has not to 
include
style padding. It is same for the native size.

The style padding will not be included in formatted size and native size by 
this commit.
@fix

Test Plan:
A test case is included in this commit.

Evas_Object *tb = evas_object_textblock_add(evas);

newst = evas_textblock_style_new();
evas_textblock_style_set(newst, "DEFAULT='font=Sans font_size=50 color=#000 
text_class=entry'");
evas_object_textblock_style_set(tb, newst);

evas_object_textblock_text_markup_set(tb, "Test");
evas_object_textblock_style_insets_get(tb, , , , );
fail_if((l != 0) || (r != 4) || (t != 0) || (b != 4));

/* Size with style padding */
evas_object_textblock_size_formatted_get(tb, , );
evas_object_textblock_size_native_get(tb, , );

/* It is non-sense if the following condition is true. */
fail_if((w + l + r == nw) && (h == nh + t + b));

Reviewers: raster, ali.alzyod, woohyun, bowonryu

Reviewed By: ali.alzyod

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12110
---
 src/lib/evas/canvas/efl_canvas_textblock.eo |  8 +
 src/lib/evas/canvas/evas_object_textblock.c | 48 ++---
 src/tests/evas/evas_test_textblock.c|  7 +
 3 files changed, 38 insertions(+), 25 deletions(-)

diff --git a/src/lib/evas/canvas/efl_canvas_textblock.eo 
b/src/lib/evas/canvas/efl_canvas_textblock.eo
index e819d0df09..b4ef328c14 100644
--- a/src/lib/evas/canvas/efl_canvas_textblock.eo
+++ b/src/lib/evas/canvas/efl_canvas_textblock.eo
@@ -355,6 +355,10 @@ class Efl.Canvas.Textblock extends Efl.Canvas.Object 
implements Efl.Text,
size after wrapping text according to the size restrictions of the
object.
 
+   The formatted width and height do not include padding size.
+   To get the total size of text with style, you need to query padding 
size
+   from @.style_insets.
+
For example a text block containing the text:
"You shall not pass!" with no margins or padding and assuming
a monospace font and a size of 7x10 char widths (for simplicity)
@@ -378,6 +382,10 @@ class Efl.Canvas.Textblock extends Efl.Canvas.Object 
implements Efl.Text,
size after wrapping text according to the size restrictions of the
object.
 
+   The native width and height do not include padding size.
+   To get the total size of text with style, you need to query padding 
size
+   from @.style_insets.
+
For example a text block containing the text:
"You shall not pass!" with no margins or padding and assuming
a monospace font and a size of 7x10 char widths (for simplicity)
diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 1a46ea614c..aacc251b1b 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -311,7 +311,6 @@ struct _Evas_Object_Textblock_Text_Item
 {
Evas_Object_Textblock_Item   parent;  /**< Textblock item. */
Evas_Text_Props  text_props;  /**< Props for this item. */
-   Evas_Coord   x_adjustment; /**< Used to indicate by how 
much we adjusted sizes */
Text_Item_Filter*gfx_filter;
 };
 
@@ -4963,7 +4962,7 @@ loop_advance:
 /* c->o->style_pad.r is already included in the line width, so it's
  * not used in this calculation. . */
 c->ln->x = c->marginl + c->o->style_pad.l +
-   ((c->w - c->ln->w - c->o->style_pad.l -
+   ((c->w - c->ln->w - c->o->style_pad.l - c->o->style_pad.r -
  c->marginl - c->marginr) * _layout_line_align_get(c));
  }
else
@@ -4979,8 +4978,7 @@ loop_advance:
 

[EGIT] [core/efl] master 01/01: embryo: fix a integer(cell) overflow problem

2020-08-03 Thread Youngbok Shin
sanghyeonlee pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=5af8301bad989a49a1feb736bc62125ac6b3ddbd

commit 5af8301bad989a49a1feb736bc62125ac6b3ddbd
Author: Youngbok Shin 
Date:   Tue Aug 4 14:47:14 2020 +0900

embryo: fix a integer(cell) overflow problem

Summary:
The most of functions for embryo based on cell(int) types.
addvariable(), defsymbol(), modstk() and etc.
Because of this, if embryo script has a really big(INT_MAX / 4) stack 
variable,
integer overflow problem has been happened.
@fix

Test Plan:
Put a script in your EDC like the following code.
Build it and try to access the variable.
Or check the writen HEX value by embryo_cc.

script {
   // It's size is 1,000,000,000.
   // Remember, INT_MAX is 2,147,483,647.
   new my_big_variable[10];
   ...
}

Reviewers: cedric, woohyun, raster, eunue, SanghyeonLee

Reviewed By: eunue, SanghyeonLee

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12081
---
 src/bin/embryo/embryo_cc_sc1.c | 7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/bin/embryo/embryo_cc_sc1.c b/src/bin/embryo/embryo_cc_sc1.c
index 1189ce807b..7595be8299 100644
--- a/src/bin/embryo/embryo_cc_sc1.c
+++ b/src/bin/embryo/embryo_cc_sc1.c
@@ -1203,10 +1203,8 @@ declloc(int fstatic)
 if (numdim > 0 && dim[numdim - 1] == 0)
error(52);  /* only last dimension may be variable length */
 size = needsub([numdim]);   /* get size; size==0 for 
"var[]" */
-#if INT_MAX < CELL_MAX
-if (size > INT_MAX)
+if ((unsigned long long)size * sizeof(cell) > MIN(INT_MAX, 
CELL_MAX))
error(105); /* overflow, exceeding capacity */
-#endif
 dim[numdim++] = (int)size;
  } /* while */
if (ident == iARRAY || fstatic)
@@ -1237,6 +1235,9 @@ declloc(int fstatic)
  }
else
  {
+ if (((unsigned long long)declared + (unsigned long long)size) * 
sizeof(cell) >
+ MIN(INT_MAX, CELL_MAX))
+error(105);
 declared += (int)size; /* variables are put on stack,
 * adjust "declared" */
 sym =

-- 




[EGIT] [core/efl] master 01/01: edje: add json file support feature

2020-02-17 Thread YoungBok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=2fe158ce652860b2aa5a2e883e6b2beb0ee1c670

commit 2fe158ce652860b2aa5a2e883e6b2beb0ee1c670
Author: YoungBok Shin 
Date:   Mon Feb 17 18:59:09 2020 +0900

edje: add json file support feature

Summary:
It also starts to support following new edc properties.
This is backported patch from Tizen 5.0

1. frame
desc { "default"
   vector {
  frame: 0.5; // 0.0 ~ 1.0
   }
}

2. actions
program { "vector_animation";
   // VG_ANIM_PLAY, VG_ANIM_PLAY_BACK, VG_ANIM_LOOP,
   // VG_ANIM_STOP, VG_ANIM_PAUSE, VG_ANIM_RESUME
   action: VG_ANIM_PLAY;
   target: "your_vector_part";
}

@feature

Co-authored-by: Jaehyun Cho 
  - Fix to remove Efl.Canvas.Animation_Player on edje

Test Plan:
{F3840540}
{F3840542}
{F3840543}
make and test attached file

edje_cc -beta -id ./ json_edc.edc json.edj
gcc -o test test_edc.c -g `pkg-config --cflags --libs evas elementary 
rlottie`
./test

Reviewers: Hermet, Jaehyun_Cho, id213sin

Reviewed By: Hermet

Subscribers: segfaultxavi, raster, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11228
---
 src/bin/edje/edje_cc_handlers.c |  56 +++
 src/bin/edje/edje_cc_out.c  |  51 +++---
 src/lib/edje/Edje_Common.h  |   8 ++-
 src/lib/edje/edje_calc.c| 150 ++--
 src/lib/edje/edje_data.c|   3 +
 src/lib/edje/edje_load.c|  20 ++
 src/lib/edje/edje_private.h |  32 -
 src/lib/edje/edje_program.c |  72 +++
 8 files changed, 371 insertions(+), 21 deletions(-)

diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 6b7ec172e7..59a0f377a8 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -516,6 +516,9 @@ static void   
st_collections_group_parts_part_description_params_bool(void);
 static void   
st_collections_group_parts_part_description_params_choice(void);
 static void   
st_collections_group_parts_part_description_params_smart(void);
 
+/* vector part parameter */
+static void   
st_collections_group_parts_part_description_vector_frame(void);
+
 static void   ob_collections_group_programs_program(void);
 static void   st_collections_group_programs_program_name(void);
 static void   st_collections_group_programs_program_signal(void);
@@ -1047,6 +1050,7 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.parts.part.description.params.bool", 
st_collections_group_parts_part_description_params_bool},
{"collections.group.parts.part.description.params.choice", 
st_collections_group_parts_part_description_params_choice},
{"collections.group.parts.part.description.params.*", 
st_collections_group_parts_part_description_params_smart},
+   {"collections.group.parts.part.description.vector.frame", 
st_collections_group_parts_part_description_vector_frame},
IMAGE_STATEMENTS("collections.group.parts.part.description.")
{
   "collections.group.parts.part.description.font", st_fonts_font
@@ -1590,6 +1594,7 @@ New_Object_Handler object_handlers[] =
{"collections.group.parts.part.description.map.zoom", NULL},
{"collections.group.parts.part.description.perspective", NULL},
{"collections.group.parts.part.description.params", NULL},
+   {"collections.group.parts.part.description.vector", NULL},
{"collections.group.parts.part.description.color_classes", NULL},   /* dup 
*/
{"collections.group.parts.part.description.color_classes.color_class", 
ob_color_class},   /* dup */
{"collections.group.parts.part.description.text_classes", NULL},   /* dup */
@@ -2545,6 +2550,7 @@ _handle_vector_image(void)
   {
  ed->vg.set = EINA_TRUE;
  ed->vg.id = edje_file->image_dir->vectors[i].id;
+ ed->vg.type = edje_file->image_dir->vectors[i].type;
  break;
   }
  }
@@ -2587,6 +2593,7 @@ st_images_vector(void)
Edje_Vector_Directory_Entry *vector;
const char *tmp;
unsigned int i;
+   size_t entry_len;
 
check_min_arg_count(1);
 
@@ -2618,6 +2625,16 @@ st_images_vector(void)
 
vector->entry = tmp;
vector->id = edje_file->image_dir->vectors_count - 1;
+
+   entry_len = strlen(vector->entry);
+   if ((entry_len > 5) && !strncmp(vector->entry + entry_len - 5, ".json", 5))
+ {
+vector->type = EDJE_VECTOR_FILE_TYPE_JSON;
+ }
+   else
+ {
+vector->type = EDJE_VECTOR_FILE_TYPE_SVG;
+ }
 }
 
 /**
@@ -89

[EGIT] [core/efl] master 01/01: elm textpath: reduces differences between actual pos and modified pos

2019-02-24 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=45b475d9d4ce00d7dd2c2334e2b29d674db2fdc0

commit 45b475d9d4ce00d7dd2c2334e2b29d674db2fdc0
Author: Youngbok Shin 
Date:   Mon Feb 25 15:26:25 2019 +0900

elm textpath: reduces differences between actual pos and modified pos

Summary:
In a previous patch, textpath was modified to use differences between
prev/next values to decide next position. Actually, it improved rendering
quality. But, the modified position could have a big difference from actual 
position.
It caused a distortion problem.
So, this patch was made for reducing that differences.
@fix

Test Plan:
I'll attach some screenshots of before/after.

1. Modify text in text_ui_textpath.c to see distortion of text. ex) 
"―――..."
2. Build and install.
3. Run
   "ELM_SCALE=0.8 ELM_ACCEL=gl elementary_test -to efl.ui.textpath"

Reviewers: Hermet, raster, cedric

Reviewed By: Hermet

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7418
---
 src/lib/elementary/efl_ui_textpath.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/lib/elementary/efl_ui_textpath.c 
b/src/lib/elementary/efl_ui_textpath.c
index 8d4076ecdc..59b85480bf 100644
--- a/src/lib/elementary/efl_ui_textpath.c
+++ b/src/lib/elementary/efl_ui_textpath.c
@@ -178,7 +178,8 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, 
double dt, double dist,
 
 /* Set mp1, mp2 position according to difference between
  * previous points and next points.
- * It improves smoothness of curve's slope changing. */
+ * It improves smoothness of curve's slope changing.
+ * But, it can cause huge differeces from actual positions. */
 mp0_x = *last_x1;
 mp0_y = *last_y1;
 mp1_x = *last_x1 + (int) round(vec1.x - vec0.x);
@@ -188,6 +189,12 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, 
double dt, double dist,
 mp3_x = *last_x2;
 mp3_y = *last_y2;
 
+/* It reduces differences between actual position and modified 
position. */
+mp1_x += (int)round(((double)vec1.x - mp1_x) / 2);
+mp1_y += (int)round(((double)vec1.y - mp1_y) / 2);
+mp2_x += (int)round(((double)vec2.x - mp2_x) / 2);
+mp2_y += (int)round(((double)vec2.y - mp2_y) / 2);
+
 evas_map_point_coord_set(map, cmp + i * 4, mp0_x, mp0_y, 0);
 evas_map_point_coord_set(map, cmp + i * 4 + 1, mp1_x, mp1_y, 0);
 evas_map_point_coord_set(map, cmp + i * 4 + 2, mp2_x, mp2_y, 0);

-- 




[EGIT] [core/efl] master 02/03: evas: remove memory leaks from deleted Textblock objects

2019-01-10 Thread Youngbok Shin
derekf pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9201fc5a65368a40234977c3c176a806655afea2

commit 9201fc5a65368a40234977c3c176a806655afea2
Author: Youngbok Shin 
Date:   Fri Dec 7 06:27:13 2018 +

evas: remove memory leaks from deleted Textblock objects

Even if a object is deleted, its render_pre function could be called.
Especially, Evas Textblock is calling relayout() function if there are
any changes. In relayout() function, it creates at least one paragraph
and one line. Normally, all of paragraphs and its line should be removed
when Evas Textblock object is deleted. But, paragraphs and lines which are
created after deleting its object never be free'd.

@fix
Differential Revision: https://phab.enlightenment.org/D7427
---
 src/lib/evas/canvas/evas_object_textblock.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index b33cb6f5eb..0a79e30472 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -6788,6 +6788,8 @@ _relayout_if_needed(const Evas_Object *eo_obj, 
Efl_Canvas_Text_Data *o)
ASYNC_BLOCK;
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, 
EFL_CANVAS_OBJECT_CLASS);
 
+   if (obj->delete_me) return EINA_TRUE;
+
/* XXX const */
evas_object_textblock_coords_recalc((Evas_Object *)eo_obj, obj, 
obj->private_data);
if (o->formatted.valid)

-- 




[EGIT] [core/efl] master 02/02: eina: fix a build failure caused by missing 'locale_t' from OSX

2018-12-05 Thread Youngbok Shin
bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=443f63c6197bf87b0ce387613a79610742fcc23f

commit 443f63c6197bf87b0ce387613a79610742fcc23f
Author: Youngbok Shin 
Date:   Wed Dec 5 07:56:22 2018 +

eina: fix a build failure caused by missing 'locale_t' from OSX

In OSX, locale_t is included in xlocale.h
@fix
Differential Revision: https://phab.enlightenment.org/D7395
---
 src/lib/eina/eina_private.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h
index be826e0fb0..d377357b67 100644
--- a/src/lib/eina/eina_private.h
+++ b/src/lib/eina/eina_private.h
@@ -21,6 +21,9 @@
 
 #include 
 #include 
+#if defined (__MacOSX__) || (defined (__MACH__) && defined (__APPLE__))
+#include 
+#endif
 
 #ifdef _WIN32
 # include 

-- 




[EGIT] [core/efl] master 01/01: eina: add locale-independent eina_convert_strtod_c function

2018-11-29 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=bef1c5cc433b89add2cf0292e1098e1bd74ac640

commit bef1c5cc433b89add2cf0292e1098e1bd74ac640
Author: Youngbok Shin 
Date:   Wed Aug 22 01:53:11 2018 +

eina: add locale-independent eina_convert_strtod_c function

strtod's behavior is changed by system locale.
http://man7.org/linux/man-pages/man3/strtod.3.html
https://en.wikipedia.org/wiki/Decimal_separator

Because of this, strtod(0.5) returns 0.0 in some locales.
When a given value string is locale-independent, strtod has to be
replaced to eina_convert_strtod_c function.
Internally, it calls strtod_l function with "C" locale.

@feature

Reviewed-by: Cedric BAIL 
Reviewed-by: Vincent Torri 
Differential Revision: https://phab.enlightenment.org/D6644
---
 src/lib/eina/eina_convert.c| 10 ++
 src/lib/eina/eina_convert.h| 16 
 src/lib/eina/eina_main.c   | 19 +++
 src/lib/eina/eina_private.h|  6 ++
 src/tests/eina/eina_test_convert.c | 21 +
 5 files changed, 72 insertions(+)

diff --git a/src/lib/eina/eina_convert.c b/src/lib/eina/eina_convert.c
index 2943b37343..152ef5be4a 100644
--- a/src/lib/eina/eina_convert.c
+++ b/src/lib/eina/eina_convert.c
@@ -453,6 +453,16 @@ eina_convert_atofp(const char *src, int length, 
Eina_F32p32 *fp)
return EINA_TRUE;
 }
 
+EAPI double
+eina_convert_strtod_c(const char *nptr, char **endptr)
+{
+#ifdef _WIN32
+   return _strtod_l(nptr, endptr, _eina_c_locale_get());
+#else
+   return strtod_l(nptr, endptr, _eina_c_locale_get());
+#endif
+}
+
 /**
  * @}
  */
diff --git a/src/lib/eina/eina_convert.h b/src/lib/eina/eina_convert.h
index 026fc6c8f6..337cd88ad8 100644
--- a/src/lib/eina/eina_convert.h
+++ b/src/lib/eina/eina_convert.h
@@ -333,6 +333,22 @@ EAPI Eina_Bool eina_convert_atofp(const char  *src,
   int  length,
   Eina_F32p32 *fp) EINA_ARG_NONNULL(1, 3);
 
+/**
+ * @brief Converts a string to a floating point number.
+ *
+ * @param[in] nptr a string to convert. It shouldn't be NULL.
+ * @param[out] endptr If endptr is not NULL, a pointer to the character after 
the last
+ *character used in the conversion is stored in the 
location referenced
+ *by endptr.
+ * @return a double type floating point number.
+ *
+ * This function returns converted floating point number with 
locale-independency.
+ * Actually, it use "C" locale for strtod_l function internally. If you need 
strtod
+ * without locale-dependency, this function can replace strtod.
+ * For more information, please refer documents of strtod, strtod_l.
+ */
+EAPI double eina_convert_strtod_c(const char *nptr, char **endptr);
+
 /**
  * @}
  */
diff --git a/src/lib/eina/eina_main.c b/src/lib/eina/eina_main.c
index 024d1e3eaa..535e4e7611 100644
--- a/src/lib/eina/eina_main.c
+++ b/src/lib/eina/eina_main.c
@@ -85,6 +85,7 @@ static int _eina_main_count = 0;
 static int _eina_main_thread_count = 0;
 #endif
 static int _eina_log_dom = -1;
+static locale_t _eina_c_locale;
 
 #ifdef ERR
 #undef ERR
@@ -285,6 +286,12 @@ eina_init(void)
if (EINA_LIKELY(_eina_main_count > 0))
   return ++_eina_main_count;
 
+#ifdef _WIN32
+   _eina_c_locale = _create_locale(LC_ALL, "C");
+#else
+   _eina_c_locale = newlocale(LC_ALL_MASK, "C", NULL);
+#endif
+
srand(time(NULL));
while (eina_seed == 0)
  eina_seed = rand();
@@ -348,6 +355,12 @@ eina_init(void)
return 1;
 }
 
+locale_t
+_eina_c_locale_get(void)
+{
+   return _eina_c_locale;
+}
+
 EAPI int
 eina_shutdown(void)
 {
@@ -359,6 +372,12 @@ eina_shutdown(void)
_eina_main_count--;
if (EINA_UNLIKELY(_eina_main_count == 0))
  {
+#ifdef _WIN32
+_free_locale(_eina_c_locale);
+#else
+freelocale(_eina_c_locale);
+#endif
+
 eina_log_timing(_eina_log_dom,
 EINA_LOG_STATE_START,
 EINA_LOG_STATE_SHUTDOWN);
diff --git a/src/lib/eina/eina_private.h b/src/lib/eina/eina_private.h
index eab59586c1..be826e0fb0 100644
--- a/src/lib/eina/eina_private.h
+++ b/src/lib/eina/eina_private.h
@@ -20,6 +20,7 @@
 #define EINA_PRIVATE_H_
 
 #include 
+#include 
 
 #ifdef _WIN32
 # include 
@@ -151,6 +152,11 @@ Eina_Stringshare *eina_file_sanitize(const char *path);
 
 void eina_freeq_main_set(Eina_FreeQ *fq);
 
+#ifdef _WIN32
+typedef _locale_t locale_t;
+#endif
+locale_t _eina_c_locale_get(void);
+
 #include "eina_inline_private.h"
 
 #endif /* EINA_PRIVATE_H_ */
diff --git a/src/tests/eina/eina_test_convert.c 
b/src/tests/eina/eina_test_convert.c
index 1b08a00a19..c8ccfcb772 100644
--- a/src/tests/eina/eina_test_convert.c
+++ b/src/tests/eina/eina_test_convert.c
@@ -160,10 +160,31 @@ _eina_convert_fp_check(double d, Eina_F3

[EGIT] [core/efl] efl-1.21 01/01: evas textblock: remove white space after line-break by a next item

2018-11-14 Thread Youngbok Shin
herdsman pushed a commit to branch efl-1.21.

http://git.enlightenment.org/core/efl.git/commit/?id=6924ab421f0c28f4fa01f575fb3f50487ceaad3f

commit 6924ab421f0c28f4fa01f575fb3f50487ceaad3f
Author: Youngbok Shin 
Date:   Wed Nov 14 09:19:30 2018 +0200

evas textblock: remove white space after line-break by a next item

Summary:
In some cases, white space at end of line is remained after line-break.
This issue is happened when Textblock do word wrap at the next item. Without
spliting a previous text item. Then, Textblock just skipped calling
_layout_item_text_split_strip_white() function.

This patch also fixed a wrong test case based on wrong logic.
The range rectangles shouldn't be overlapped. Because of remained white 
space,
a meaningless rectangle was added. And it overlapped by next rectangle.
@fix

Test Plan:
Fixed an exising test case for range renctangles.
Run test case.

Reviewers: herdsman, woohyun, raster, cedric, subodh, subodh6129

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7204
---
 src/lib/evas/canvas/evas_object_textblock.c | 10 +-
 src/tests/evas/evas_test_textblock.c| 15 +--
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index f523f131e9..2bc0bbdfba 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -5565,7 +5565,7 @@ _layout_item_obstacle_get(Ctxt *c, 
Evas_Object_Textblock_Item *it);
 static int
 _layout_par(Ctxt *c)
 {
-   Evas_Object_Textblock_Item *it;
+   Evas_Object_Textblock_Item *it, *prev_it;
Eina_List *i;
int ret = 0;
int wrap = -1;
@@ -5674,6 +5674,7 @@ _layout_par(Ctxt *c)
Eina_Bool item_preadv = EINA_FALSE;
Evas_Textblock_Obstacle *obs = NULL;
c->par->last_fw = 0;
+   it = NULL;
for (i = c->par->logical_items ; i ; )
  {
 Evas_Coord prevdescent = 0, prevascent = 0;
@@ -5682,6 +5683,7 @@ _layout_par(Ctxt *c)
 Evas_Textblock_Obstacle_Info *obs_info = NULL;
 Evas_Coord itw;
 
+prev_it = it;
 it = _ITEM(eina_list_data_get(i));
 /* Skip visually deleted items */
 if (it->visually_deleted ||
@@ -5960,6 +5962,12 @@ _layout_par(Ctxt *c)
   else if (wrap == 0)
 {
/* Should wrap before the item */
+   if (prev_it && (prev_it->type == 
EVAS_TEXTBLOCK_ITEM_TEXT))
+ {
+_layout_item_text_split_strip_white(c,
+  _ITEM_TEXT(prev_it), eina_list_prev(i),
+  _ITEM_TEXT(prev_it)->text_props.text_len);
+ }
 
/* We didn't end up using the item, so revert the ascent
 * and descent changes. */
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 1f6cb139b2..bdb9505741 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -2695,23 +2695,26 @@ EFL_START_TEST(evas_textblock_geometries)
fail_if(!it);
rects = eina_iterator_container_get(it);
fail_if(!rects);
-   ck_assert_int_eq(eina_list_count(rects), 3);
+   ck_assert_int_eq(eina_list_count(rects), 2);
 
  {
-Evas_Coord y1, y2;
+Evas_Coord x1, y1, x2, y2;
 void *tmp = tr;
-/* We have 3 rectangles */
+/* We have 2 rectangles */
 Eina_Iterator *itr = it;
 fail_if (!eina_iterator_next(itr, ));
 tr = tmp;
+x1 = tr->x;
 y1 = tr->y;
 fail_if (!eina_iterator_next(itr, ));
 tr = tmp;
+x2 = tr->x;
 y2 = tr->y;
 
-/* Basically it means that the "extending" rectangle should not somehow
- * reach the second line in this example. */
-ck_assert_int_eq(y1, y2);
+/* These rectangles must be placed without overlapping.
+ * In this test case, we expect to see a rect for each line. */
+fail_if((x1 == x2) && (y1 == y2));
+ck_assert_int_ne(y1, y2);
 eina_iterator_free(it);
  }
 

-- 




[EGIT] [core/efl] master 01/01: evas textblock: remove white space after line-break by a next item

2018-11-14 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=09da85807a6447d6e9c04fc72fdb485a78192d82

commit 09da85807a6447d6e9c04fc72fdb485a78192d82
Author: Youngbok Shin 
Date:   Wed Nov 14 09:19:30 2018 +0200

evas textblock: remove white space after line-break by a next item

Summary:
In some cases, white space at end of line is remained after line-break.
This issue is happened when Textblock do word wrap at the next item. Without
spliting a previous text item. Then, Textblock just skipped calling
_layout_item_text_split_strip_white() function.

This patch also fixed a wrong test case based on wrong logic.
The range rectangles shouldn't be overlapped. Because of remained white 
space,
a meaningless rectangle was added. And it overlapped by next rectangle.
@fix

Test Plan:
Fixed an exising test case for range renctangles.
Run test case.

Reviewers: herdsman, woohyun, raster, cedric, subodh, subodh6129

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7204
---
 src/lib/evas/canvas/evas_object_textblock.c | 10 +-
 src/tests/evas/evas_test_textblock.c| 15 +--
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index a194899d48..3da95a97a0 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -5564,7 +5564,7 @@ _layout_item_obstacle_get(Ctxt *c, 
Evas_Object_Textblock_Item *it);
 static int
 _layout_par(Ctxt *c)
 {
-   Evas_Object_Textblock_Item *it;
+   Evas_Object_Textblock_Item *it, *prev_it;
Eina_List *i;
int ret = 0;
int wrap = -1;
@@ -5673,6 +5673,7 @@ _layout_par(Ctxt *c)
Eina_Bool item_preadv = EINA_FALSE;
Evas_Textblock_Obstacle *obs = NULL;
c->par->last_fw = 0;
+   it = NULL;
for (i = c->par->logical_items ; i ; )
  {
 Evas_Coord prevdescent = 0, prevascent = 0;
@@ -5681,6 +5682,7 @@ _layout_par(Ctxt *c)
 Evas_Textblock_Obstacle_Info *obs_info = NULL;
 Evas_Coord itw;
 
+prev_it = it;
 it = _ITEM(eina_list_data_get(i));
 /* Skip visually deleted items */
 if (it->visually_deleted ||
@@ -5959,6 +5961,12 @@ _layout_par(Ctxt *c)
   else if (wrap == 0)
 {
/* Should wrap before the item */
+   if (prev_it && (prev_it->type == 
EVAS_TEXTBLOCK_ITEM_TEXT))
+ {
+_layout_item_text_split_strip_white(c,
+  _ITEM_TEXT(prev_it), eina_list_prev(i),
+  _ITEM_TEXT(prev_it)->text_props.text_len);
+ }
 
/* We didn't end up using the item, so revert the ascent
 * and descent changes. */
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 9246f77a52..29ab7110f7 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -2717,23 +2717,26 @@ EFL_START_TEST(evas_textblock_geometries)
fail_if(!it);
rects = eina_iterator_container_get(it);
fail_if(!rects);
-   ck_assert_int_eq(eina_list_count(rects), 3);
+   ck_assert_int_eq(eina_list_count(rects), 2);
 
  {
-Evas_Coord y1, y2;
+Evas_Coord x1, y1, x2, y2;
 void *tmp = tr;
-/* We have 3 rectangles */
+/* We have 2 rectangles */
 Eina_Iterator *itr = it;
 fail_if (!eina_iterator_next(itr, ));
 tr = tmp;
+x1 = tr->x;
 y1 = tr->y;
 fail_if (!eina_iterator_next(itr, ));
 tr = tmp;
+x2 = tr->x;
 y2 = tr->y;
 
-/* Basically it means that the "extending" rectangle should not somehow
- * reach the second line in this example. */
-ck_assert_int_eq(y1, y2);
+/* These rectangles must be placed without overlapping.
+ * In this test case, we expect to see a rect for each line. */
+fail_if((x1 == x2) && (y1 == y2));
+ck_assert_int_ne(y1, y2);
 eina_iterator_free(it);
  }
 

-- 




[EGIT] [core/efl] master 01/01: edje: fix an overflow issue for state values

2018-11-13 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b89b221b97897a29d009fc5910274c545d33e06f

commit b89b221b97897a29d009fc5910274c545d33e06f
Author: Youngbok Shin 
Date:   Wed Nov 14 16:43:13 2018 +0900

edje: fix an overflow issue for state values

Summary:
Whenever _edje_recalc_do() is called, a state value of
Edje structure is increased. This increased value will be stored
in Edje_Real_Part and Edje_Real_Part_State for calculation optimazation.
But, once the state value is overflowed, it ruins calculation logic.
@fix

Test Plan:
Run an Edje file which has infinite animation for over an hour.
I'll attach an example to phab.

Reviewers: raster, cedric, woohyun, Hermet

Reviewed By: Hermet

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7264
---
 src/lib/edje/edje_calc.c | 22 ++
 1 file changed, 22 insertions(+)

diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 1055791495..5877ebb6ed 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -938,6 +938,9 @@ _edje_recalc_do(Edje *ed)
 {
unsigned short i;
Eina_Bool need_calc;
+#ifdef EDJE_CALC_CACHE
+   Eina_Bool need_reinit_state = EINA_FALSE;
+#endif
 
 // XXX: dont need this with current smart calc infra. remove me later
 //   ed->postponed = EINA_FALSE;
@@ -946,6 +949,16 @@ _edje_recalc_do(Edje *ed)
if (!ed->dirty) return;
ed->dirty = EINA_FALSE;
ed->state++;
+
+   /* Avoid overflow problem */
+   if (ed->state == USHRT_MAX)
+ {
+ed->state = 0;
+#ifdef EDJE_CALC_CACHE
+need_reinit_state = EINA_TRUE;
+#endif
+ }
+
for (i = 0; i < ed->table_parts_size; i++)
  {
 Edje_Real_Part *ep;
@@ -953,6 +966,15 @@ _edje_recalc_do(Edje *ed)
 ep = ed->table_parts[i];
 ep->calculated = FLAG_NONE; // FIXME: this is dubious (see below)
 ep->calculating = FLAG_NONE;
+#ifdef EDJE_CALC_CACHE
+if (need_reinit_state)
+  {
+ ep->state = 0;
+ ep->param1.state = 0;
+ if (ep->param2)
+   ep->param2->state = 0;
+  }
+#endif
  }
for (i = 0; i < ed->table_parts_size; i++)
  {

-- 




[EGIT] [core/efl] master 01/01: evas filter: remove critical messages from Evas Filter

2018-10-26 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=4107e7644dddcc6dea819da1ae0979a03e428772

commit 4107e7644dddcc6dea819da1ae0979a03e428772
Author: Youngbok Shin 
Date:   Fri Oct 26 19:30:28 2018 +0900

evas filter: remove critical messages from Evas Filter

Summary:
When you run filter examples with enabling GL engine support,
you can see critical messages which say don't use efl_unref for buffer 
object.
So, efl_unref has to be replaced with efl_del.
@fix

Test Plan: Run filter example with GL

Reviewers: cedric, Hermet, raster, woohyun

Reviewed By: Hermet

Subscribers: segfaultxavi, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7119
---
 src/lib/evas/filters/evas_filter.c | 15 +--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/lib/evas/filters/evas_filter.c 
b/src/lib/evas/filters/evas_filter.c
index fcbad016f2..055c72d555 100644
--- a/src/lib/evas/filters/evas_filter.c
+++ b/src/lib/evas/filters/evas_filter.c
@@ -41,6 +41,17 @@ static void _filter_buffer_unlock_all(Evas_Filter_Context 
*ctx);
 #define _free(ptr) free(ptr)
 //eina_freeq_ptr_main_add(ptr, NULL, sizeof(*ptr))
 
+static void
+_buffer_del(Eo *buffer)
+{
+   if (!buffer) return;
+
+   if (efl_parent_get(buffer))
+ efl_del(buffer);
+   else
+ efl_unref(buffer);
+}
+
 Evas_Filter_Context *
 evas_filter_context_new(Evas_Public_Data *evas, Eina_Bool async, void 
*user_data)
 {
@@ -116,7 +127,7 @@ static void
 _filter_buffer_backing_free(Evas_Filter_Buffer *fb)
 {
if (!fb || !fb->buffer) return;
-   efl_unref(fb->buffer);
+   _buffer_del((Eo *)fb->buffer);
fb->buffer = NULL;
 }
 
@@ -600,7 +611,7 @@ evas_filter_buffer_backing_set(Evas_Filter_Context *ctx, 
int bufid,
ret = EINA_TRUE;
 
 end:
-   if (fb->buffer != buffer) efl_unref(fb->buffer);
+   if (fb->buffer != buffer) _buffer_del((Eo *)fb->buffer);
fb->buffer = buffer;
return ret;
 }

-- 




[EGIT] [core/efl] master 01/01: eina debug: fix a double unlock issue

2018-10-04 Thread Youngbok Shin
woohyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=038346dce0177d474a902602b553b0306bd668d5

commit 038346dce0177d474a902602b553b0306bd668d5
Author: Youngbok Shin 
Date:   Thu Oct 4 18:58:04 2018 +0900

eina debug: fix a double unlock issue

Summary:
It was caught by Covertity.
This patch will remove a potential double unlock issue.
@fix

Test Plan: N/A

Reviewers: zmike, raster, cedric, Hermet, eagleeye

Reviewed By: eagleeye

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7137
---
 src/lib/eina/eina_debug_cpu.c | 9 ++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/lib/eina/eina_debug_cpu.c b/src/lib/eina/eina_debug_cpu.c
index b4c3cf49c4..931139f5c0 100644
--- a/src/lib/eina/eina_debug_cpu.c
+++ b/src/lib/eina/eina_debug_cpu.c
@@ -281,11 +281,14 @@ _stop_cpu_thread(void)
  {
 usleep(1000);
 eina_lock_take(&_sysmon_lock);
-if (_eina_debug_cpu_active == -1) break;
+if (_eina_debug_cpu_active == -1)
+  {
+ _eina_debug_cpu_active = 0;
+ eina_lock_release(&_sysmon_lock);
+ break;
+  }
 eina_lock_release(&_sysmon_lock);
  }
-   _eina_debug_cpu_active = 0;
-   eina_lock_release(&_sysmon_lock);
 }
 
 static Eina_Bool

-- 




[EGIT] [core/efl] master 01/01: elementary entry: apply scale to all edje objects

2018-10-04 Thread Youngbok Shin
woohyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=75296e32df14610ec5d49316cee1966eb99f5cb2

commit 75296e32df14610ec5d49316cee1966eb99f5cb2
Author: Youngbok Shin 
Date:   Thu Oct 4 18:53:36 2018 +0900

elementary entry: apply scale to all edje objects

Summary:
When an entry is scrollable, its resize object is scr_edje.
So, to apply scale properly, elm_entry needs to apply scale
to its entry_edje, too.
@fix

Test Plan: Apply scale to scrollable entry

Reviewers: herdsman, woohyun, cedric, eagleeye

Reviewed By: eagleeye

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7140
---
 src/lib/elementary/elm_entry.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/src/lib/elementary/elm_entry.c b/src/lib/elementary/elm_entry.c
index c15b02da52..1bc579817c 100644
--- a/src/lib/elementary/elm_entry.c
+++ b/src/lib/elementary/elm_entry.c
@@ -882,6 +882,12 @@ _elm_entry_efl_ui_widget_theme_apply(Eo *obj, 
Elm_Entry_Data *sd)
edje_object_scale_set
  (wd->resize_obj,
  efl_gfx_entity_scale_get(obj) * elm_config_scale_get());
+   if (sd->scroll)
+ {
+edje_object_scale_set
+   (sd->entry_edje,
+efl_gfx_entity_scale_get(obj) * elm_config_scale_get());
+ }
 
_mirrored_set(obj, efl_ui_mirrored_get(obj));
 

-- 




[EGIT] [core/efl] master 01/01: elementary_test: use snprintf to prevent memory overflow in test_efl_ui_text

2018-09-24 Thread Youngbok Shin
netstar pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e9e63f3c0d98346764aee01add601dd8df4af8d4

commit e9e63f3c0d98346764aee01add601dd8df4af8d4
Author: Youngbok Shin 
Date:   Mon Sep 24 11:17:26 2018 +0100

elementary_test: use snprintf to prevent memory overflow in test_efl_ui_text

Summary: To prevent memory overflow, use snprintf instead of sprintf.

Test Plan: N/A

Reviewers: raster, cedric, zmike, Hermet, netstar

Reviewed By: netstar

Subscribers: netstar, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7095
---
 src/bin/elementary/test_efl_ui_text.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/bin/elementary/test_efl_ui_text.c 
b/src/bin/elementary/test_efl_ui_text.c
index 9ad0e9a50a..6cfe0af008 100644
--- a/src/bin/elementary/test_efl_ui_text.c
+++ b/src/bin/elementary/test_efl_ui_text.c
@@ -218,7 +218,7 @@ test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *eve
efl_text_cursor_position_set(en, cur, 2);
efl_text_cursor_item_insert(en, cur, "emoticon/happy", "size=32x32");
efl_text_cursor_position_set(en, cur, 50);
-   sprintf(buf, "file://%s/images/sky_01.jpg", elm_app_data_dir_get());
+   snprintf(buf, sizeof(buf), "file://%s/images/sky_01.jpg", 
elm_app_data_dir_get());
efl_text_cursor_item_insert(en, cur, buf, "size=32x32");
 
efl_text_cursor_position_set(en, main_cur, 5);
@@ -416,18 +416,18 @@ test_ui_text_item_factory(void *data EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
   efl_add(EFL_UI_TEXT_FACTORY_EMOTICONS_CLASS, en);
 
// Test assigning file path source
-   sprintf(buf, "%s/images/sky_01.jpg", elm_app_data_dir_get());
+   snprintf(buf, sizeof(buf), "%s/images/sky_01.jpg", elm_app_data_dir_get());

efl_ui_text_factory_images_matches_add(factories[FACTORY_IMAGE].item_factory,
  images[0], buf, NULL);
-   sprintf(buf, "%s/images/logo.png", elm_app_data_dir_get());
+   snprintf(buf, sizeof(buf), "%s/images/logo.png", elm_app_data_dir_get());

efl_ui_text_factory_images_matches_add(factories[FACTORY_IMAGE].item_factory,
  images[1], buf, NULL);
-   sprintf(buf, "%s/images/mystrale.jpg", elm_app_data_dir_get());
+   snprintf(buf, sizeof(buf), "%s/images/mystrale.jpg", 
elm_app_data_dir_get());

efl_ui_text_factory_images_matches_add(factories[FACTORY_IMAGE].item_factory,
  images[2], buf, NULL);
 
// Open EET source w/ key
-   sprintf(buf, "%s/images/image_items.eet", elm_app_data_dir_get());
+   snprintf(buf, sizeof(buf), "%s/images/image_items.eet", 
elm_app_data_dir_get());
f = eina_file_open(buf, EINA_FALSE);
if (f)
  {
@@ -460,7 +460,7 @@ test_ui_text_item_factory(void *data EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
efl_text_cursor_item_insert(en, cur, "emoticon/happy", "size=32x32");
efl_text_cursor_position_set(en, cur, 50);
 
-   sprintf(buf, "file://%s/images/sky_01.jpg", elm_app_data_dir_get());
+   snprintf(buf, sizeof(buf), "file://%s/images/sky_01.jpg", 
elm_app_data_dir_get());
efl_text_cursor_item_insert(en, cur, buf, "size=32x32");
efl_text_cursor_position_set(en, main_cur, 5);
 

-- 




[EGIT] [core/efl] master 01/01: elementary: fix memory leak from Efl.Ui.Layout.Object

2018-09-21 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=0098aa66705f1736f093bbf0f15302c9c8ac3598

commit 0098aa66705f1736f093bbf0f15302c9c8ac3598
Author: Youngbok Shin 
Date:   Fri Sep 21 16:50:30 2018 +0900

elementary: fix memory leak from Efl.Ui.Layout.Object

Summary:
The 'data' could not be added to hash in a condition.
It has to be free'd before ending the function.
@fix

Test Plan: N/A

Reviewers: cedric, raster, Hermet, zmike

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7083
---
 src/lib/elementary/efl_ui_layout_object.c | 14 +-
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/lib/elementary/efl_ui_layout_object.c 
b/src/lib/elementary/efl_ui_layout_object.c
index fd11223f2e..b3f5796f16 100644
--- a/src/lib/elementary/efl_ui_layout_object.c
+++ b/src/lib/elementary/efl_ui_layout_object.c
@@ -2165,12 +2165,16 @@ _efl_ui_layout_object_efl_ui_model_connect_connect(Eo 
*obj EINA_UNUSED, Efl_Ui_L
  }
 
// Update display right away if possible
-   if (!pd->connect.model) return ;
+   if (pd->connect.model)
+ {
+if (hash == pd->connect.signals)
+  _efl_ui_layout_view_model_signal_update(pd, data, sprop);
+else
+  _efl_ui_layout_view_model_property_update(pd, data, sprop);
+ }
 
-   if (hash == pd->connect.signals)
- _efl_ui_layout_view_model_signal_update(pd, data, sprop);
-   else
- _efl_ui_layout_view_model_property_update(pd, data, sprop);
+   if (!sprop)
+ free(data);
 }
 
 EOLIAN static void

-- 




[EGIT] [core/efl] master 01/01: evas cache: add more null check for cache

2018-09-21 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=ed621d700302d267963aa7de72ad32942a7b48db

commit ed621d700302d267963aa7de72ad32942a7b48db
Author: Youngbok Shin 
Date:   Fri Sep 21 16:32:07 2018 +0900

evas cache: add more null check for cache

Summary:
The 'cache' pointer is checked against null but then
dereferenced anyway. It needs to add null checking conditions.

Test Plan: N/A

Reviewers: raster, cedric, Hermet, zmike

Reviewed By: Hermet

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7084
---
 src/lib/evas/cache/evas_cache_image.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/lib/evas/cache/evas_cache_image.c 
b/src/lib/evas/cache/evas_cache_image.c
index 52440a23eb..f52e12ae91 100644
--- a/src/lib/evas/cache/evas_cache_image.c
+++ b/src/lib/evas/cache/evas_cache_image.c
@@ -183,17 +183,17 @@ _evas_cache_image_entry_delete(Evas_Cache_Image *cache, 
Image_Entry *ie)
_evas_cache_image_lru_del(ie);
_evas_cache_image_lru_nodata_del(ie);
 
-   cache->func.destructor(ie);
+   if ((cache) && (cache->func.destructor)) cache->func.destructor(ie);
FREESTRC(ie->cache_key);
FREESTRC(ie->file);
FREESTRC(ie->key);
if (ie->f && ie->flags.given_mmap) eina_file_close(ie->f);
ie->cache = NULL;
-   cache->func.surface_delete(ie);
+   if ((cache) && (cache->func.surface_delete)) cache->func.surface_delete(ie);
 
SLKD(ie->lock);
SLKD(ie->lock_cancel);
-   cache->func.dealloc(ie);
+   if ((cache) && (cache->func.dealloc)) cache->func.dealloc(ie);
 }
 
 #if 0

-- 




[EGIT] [core/efl] master 01/03: elementary: remove meaningless memory allocation and leaking

2018-09-21 Thread Youngbok Shin
bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6a8f2ce86316be8ce2d7f856706822bd92338cec

commit 6a8f2ce86316be8ce2d7f856706822bd92338cec
Author: Youngbok Shin 
Date:   Fri Sep 21 07:23:36 2018 +

elementary: remove meaningless memory allocation and leaking

'evt_data' was allocated. Actually, it was not used in anywhere in its 
function.
@fix
Differential Revision: https://phab.enlightenment.org/D7086
---
 src/lib/elementary/elc_fileselector.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/src/lib/elementary/elc_fileselector.c 
b/src/lib/elementary/elc_fileselector.c
index 94abf68a82..1cbb41cea8 100644
--- a/src/lib/elementary/elc_fileselector.c
+++ b/src/lib/elementary/elc_fileselector.c
@@ -1951,19 +1951,14 @@ _elm_fileselector_efl_object_constructor(Eo *obj, 
Elm_Fileselector_Data *sd)
 static Eina_Bool
 _from_efl_event_call(Elm_Fileselector *fs, const Efl_Event_Description 
*evt_desc, Efl_Model *model)
 {
-   Legacy_Event_Path_Then_Data *evt_data;
Eina_Value *fetch;
char *path;
 
-   evt_data = calloc(1, sizeof(Legacy_Event_Path_Then_Data));
-   evt_data->eo_obj = fs;
-   evt_data->evt_desc = evt_desc;
-
// Call legacy smart callback with path
fetch = efl_model_property_get(model, "path");
path = eina_value_to_string(fetch);
 
-   _event_to_legacy_call(evt_data->eo_obj, evt_data->evt_desc, path);
+   _event_to_legacy_call(fs, evt_desc, path);
 
// Call Eo event with model
return efl_event_callback_call(fs, evt_desc, model);

-- 




[EGIT] [core/efl] master 01/01: evas textblock: add/apply cursor cluster APIs based on grapheme cluster

2018-08-20 Thread Youngbok Shin
discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=517018e00897f61136418861563a49144a5fe39a

commit 517018e00897f61136418861563a49144a5fe39a
Author: Youngbok Shin 
Date:   Mon Aug 20 07:21:53 2018 -0400

evas textblock: add/apply cursor cluster APIs based on grapheme cluster

Summary:
Add a feature for moving cursor over a grapheme cluster.
It is applied to edje_entry.c and elm_entry.c for improving
cursor handling just like other modern text editors. ex) gedit
The patch on Evas needs to update libunibreak library.
So, the patch will update libunibreak, too.
@feature

Test Plan:
1. Put "ഹലോ" in your entry.
2. Your cursor can reach at the end of text from the beginning
   only in 2 right key event with this feature.

Reviewers: raster, cedric, jpeg, herdsman, zmike, devilhorns

Reviewed By: herdsman, zmike

Subscribers: #reviewers, #committers, zmike, bowonryu, woohyun

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D5490
---
 src/Makefile_Evas.am   |8 +-
 src/lib/edje/edje_entry.c  |   51 +-
 src/lib/efl/interfaces/efl_text_cursor.eo  |   25 +
 src/lib/evas/canvas/efl_canvas_text.eo |3 +
 src/lib/evas/canvas/evas_object_textblock.c|  276 +++-
 src/lib/evas/canvas/evas_textblock_legacy.h|   26 +
 src/static_libs/libunibreak/ChangeLog  |   92 ++
 src/static_libs/libunibreak/LICENCE|5 +-
 src/static_libs/libunibreak/NEWS   |7 +
 src/static_libs/libunibreak/README.md  |   14 +-
 src/static_libs/libunibreak/graphemebreak.c|  283 +
 .../libunibreak/{wordbreak.h => graphemebreak.h}   |   47 +-
 src/static_libs/libunibreak/graphemebreakdata.c| 1337 
 src/static_libs/libunibreak/graphemebreakdef.h |   82 ++
 src/static_libs/libunibreak/linebreak.c|   28 +-
 src/static_libs/libunibreak/linebreak.h|1 -
 src/static_libs/libunibreak/linebreakdef.c |1 -
 src/static_libs/libunibreak/linebreakdef.h |1 -
 src/static_libs/libunibreak/unibreakbase.c |3 +-
 src/static_libs/libunibreak/unibreakbase.h |5 +-
 src/static_libs/libunibreak/unibreakdef.c  |3 +-
 src/static_libs/libunibreak/unibreakdef.h  |3 +-
 src/static_libs/libunibreak/wordbreak.c|   33 +-
 src/static_libs/libunibreak/wordbreak.h|9 +-
 src/static_libs/libunibreak/wordbreakdef.h |9 +-
 src/tests/evas/evas_test_textblock.c   |   24 +-
 26 files changed, 2246 insertions(+), 130 deletions(-)

diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am
index 0699dde533..b09521cb72 100644
--- a/src/Makefile_Evas.am
+++ b/src/Makefile_Evas.am
@@ -193,7 +193,10 @@ static_libs/libunibreak/linebreak.h \
 static_libs/libunibreak/linebreakdef.h \
 static_libs/libunibreak/wordbreakdef.h \
 static_libs/libunibreak/wordbreak.h \
-static_libs/libunibreak/wordbreakdata.c
+static_libs/libunibreak/wordbreakdata.c \
+static_libs/libunibreak/graphemebreak.h \
+static_libs/libunibreak/graphemebreakdef.h \
+static_libs/libunibreak/graphemebreakdata.c
 
 # Linebreak
 lib_evas_libevas_la_SOURCES = \
@@ -202,7 +205,8 @@ static_libs/libunibreak/unibreakdef.c \
 static_libs/libunibreak/linebreak.c \
 static_libs/libunibreak/linebreakdata.c \
 static_libs/libunibreak/linebreakdef.c \
-static_libs/libunibreak/wordbreak.c
+static_libs/libunibreak/wordbreak.c \
+static_libs/libunibreak/graphemebreak.c
 
 # Main
 lib_evas_libevas_la_SOURCES += \
diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c
index 6c1f8960ff..1ad3c30b65 100644
--- a/src/lib/edje/edje_entry.c
+++ b/src/lib/edje/edje_entry.c
@@ -536,7 +536,7 @@ _curs_jump_line(Evas_Textblock_Cursor *c, Evas_Object *o, 
Entry *en, int ln)
 
if (!evas_object_textblock_line_number_geometry_get(o, ln, , , , 
))
  return EINA_FALSE;
-   if (evas_textblock_cursor_char_coord_set(c, cx, ly + (lh / 2)))
+   if (evas_textblock_cursor_cluster_coord_set(c, cx, ly + (lh / 2)))
  return EINA_TRUE;
evas_textblock_cursor_line_set(c, ln);
if (cx < (lx + (lw / 2)))
@@ -1607,24 +1607,33 @@ _delete_emit(Edje *ed, Evas_Textblock_Cursor *c, Entry 
*en, size_t pos,
 ERR("Running very low on memory");
 return;
  }
-   char *tmp = evas_textblock_cursor_content_get(c);
+   char *tmp = NULL;
 
info->insert = EINA_FALSE;
if (backspace)
  {
 info->change.del.start = pos - 1;
 info->change.del.end = pos;
+tmp = evas_textblock_cursor_content_get(c);
+evas_textblock_cursor_char_delete(c);
  }
else
  {
-info->change.del.start = pos + 1;
+Evas_Textblock_Cursor *cc = 
evas_obje

[EGIT] [core/efl] master 01/01: evas textblock: adds missing legacy types

2018-07-12 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=61e8834acc24da7fc667ae66839e8d26617e11db

commit 61e8834acc24da7fc667ae66839e8d26617e11db
Author: Youngbok Shin 
Date:   Thu Jul 12 12:09:26 2018 +0300

evas textblock: adds missing legacy types

Summary:
Adds missing legacy types. The following types were generated in
"*.eo.legacy.h" by Eolian.
- Evas_Textblock
  evas_textblock.eo.legacy.h:7:typedef Eo Evas_Textblock;

- Evas_Textblock_Node_Format
  evas_textblock.eo.legacy.h:14:typedef struct _Evas_Textblock_Node_Format 
Evas_Textblock_Node_Format;

@fix

Test Plan: N/A

Reviewers: raster, cedric, herdsman, devilhorns

Subscribers: #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6529
---
 src/lib/evas/canvas/evas_textblock_legacy.h | 9 +
 1 file changed, 9 insertions(+)

diff --git a/src/lib/evas/canvas/evas_textblock_legacy.h 
b/src/lib/evas/canvas/evas_textblock_legacy.h
index f55691d48b..0d84075fa0 100644
--- a/src/lib/evas/canvas/evas_textblock_legacy.h
+++ b/src/lib/evas/canvas/evas_textblock_legacy.h
@@ -127,6 +127,7 @@
  *
  * @{
  */
+typedef Eo Evas_Textblock;
 
 /**
  * @typedef Evas_Textblock_Style
@@ -157,6 +158,14 @@ typedef struct _Efl_Text_Cursor_Cursor   
Evas_Textblock_Cursor;
 typedef struct _Evas_Textblock_Node_Format Evas_Object_Textblock_Node_Format;
 
 /**
+ * @typedef Evas_Textblock_Node_Format
+ * A format node.
+ *
+ * XXX: Adapter for legacy.
+ */
+typedef struct _Evas_Textblock_Node_Format Evas_Textblock_Node_Format;
+
+/**
  * @typedef Evas_Textblock_Rectangle
  * General-purpose rectangle that represents some geometry in this object.
  *

-- 




[EGIT] [core/efl] master 01/01: Evas Textblock: Don't convert to after changing text

2018-07-02 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f6acd6f9e4de945f1eee7fe6cd7cd55cff570eb9

commit f6acd6f9e4de945f1eee7fe6cd7cd55cff570eb9
Author: Youngbok Shin 
Date:   Mon Jul 2 16:17:33 2018 +0300

Evas Textblock: Don't convert  to  after changing text

Summary:
It was only happened when legacy newline is enabled. By default,
legacy newline is enabled. As I know, legacy newline option has
to change textblock's internal behavior. But, it shouldn't change
the given original text. It fixes T3399.

Test Plan: A Test case is included in Evas test suite.

Reviewers: Jaehyun_Cho, z-wony, tasn, woohyun, herdsman, Blackmole, 
devilhorns

Subscribers: #committers, zmike, raster, cedric, jpeg

Tags: #efl

Maniphest Tasks: T3399

Differential Revision: https://phab.enlightenment.org/D3874
---
 src/lib/evas/canvas/evas_object_textblock.c |  2 +-
 src/tests/evas/evas_test_textblock.c| 15 +++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index b9712a2243..652ac3e631 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -10836,7 +10836,7 @@ 
_evas_textblock_cursor_format_append(Efl_Text_Cursor_Cursor *cur,
 Eina_Unicode insert_char;
 /* Insert a visual representation according to the type of the
format */
-if (_IS_PARAGRAPH_SEPARATOR(o, format))
+if (_IS_PARAGRAPH_SEPARATOR_SIMPLE(format))
insert_char = _PARAGRAPH_SEPARATOR;
 else if (_IS_LINE_SEPARATOR(format))
insert_char = _NEWLINE;
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 715ec1fd33..1f6cb139b2 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -2977,6 +2977,21 @@ EFL_START_TEST(evas_textblock_editing)
evas_textblock_cursor_paragraph_first(cur);
fail_if(evas_textblock_cursor_paragraph_next(cur));
 
+   /* Test cursor range delete with  tags when legacy newline is enabled.
+* After deleting first  tag, the second  tag shouldn't be 
changed to  */
+   evas_object_textblock_legacy_newline_set(tb, EINA_TRUE);
+   evas_object_textblock_text_markup_set(tb, "AB");
+   evas_textblock_cursor_paragraph_first(cur);
+   evas_textblock_cursor_paragraph_first(main_cur);
+   evas_textblock_cursor_pos_set(main_cur, 2);
+   ck_assert_str_eq(evas_textblock_cursor_range_text_get(cur, main_cur, 
EVAS_TEXTBLOCK_TEXT_MARKUP), "A");
+
+   evas_textblock_cursor_range_delete(cur, main_cur);
+   ck_assert_str_eq(evas_object_textblock_text_markup_get(tb), "B");
+
+   /* Restore legacy newline disabled setting */
+   evas_object_textblock_legacy_newline_set(tb, EINA_FALSE);
+
  {
 /* Limit to 1000 iterations so we'll never get into an infinite loop,
  * even if broken */

-- 




[EGIT] [core/efl] master 01/01: edje: fix text set/get issue without edje calculation

2018-06-22 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=69b5d67367b8ae16d6e98734d2b07e40725d4a0f

commit 69b5d67367b8ae16d6e98734d2b07e40725d4a0f
Author: Youngbok Shin 
Date:   Fri Jun 22 12:15:11 2018 +0300

edje: fix text set/get issue without edje calculation

Summary:
Some changes broke really basical function behavior of text.
I couldn't get text from an edje object which I just set to the given edje 
object.
In the past code, edje called recalc function before trying to get text.
So, this patch bring that code to fix this issue.
@fix

Test Plan: Included. Run "make check"

Reviewers: herdsman, raster, cedric, woohyun, devilhorns

Subscribers: #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6364
---
 src/Makefile_Edje.am   |  2 ++
 src/lib/edje/edje_util.c   |  3 +++
 src/tests/edje/data/test_textblock.edc | 20 
 src/tests/edje/edje_test_edje.c| 20 
 4 files changed, 45 insertions(+)

diff --git a/src/Makefile_Edje.am b/src/Makefile_Edje.am
index 87d67b5e89..745da03501 100644
--- a/src/Makefile_Edje.am
+++ b/src/Makefile_Edje.am
@@ -300,6 +300,7 @@ tests/edje/data/test_messages.edc \
 tests/edje/data/test_signals.edc \
 tests/edje/data/test_signal_callback_del_full.edc \
 tests/edje/data/test_text_cursor.edc \
+tests/edje/data/test_textblock.edc \
 tests/edje/data/filter.lua
 
 
@@ -344,6 +345,7 @@ EDJE_TEST_FILES = tests/edje/data/test_layout.edj \
  tests/edje/data/test_signals.edj \
  tests/edje/data/test_signal_callback_del_full.edj \
  tests/edje/data/test_text_cursor.edj \
+ tests/edje/data/test_textblock.edj \
  $(NULL)
 
 CLEANFILES += $(EDJE_TEST_FILES)
diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index 7ab54bb4bd..98d6c78023 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -2052,6 +2052,9 @@ _edje_efl_text_text_get(const Eo *obj EINA_UNUSED, Edje 
*ed, const char *part,
 
if ((!ed) || (!part)) return NULL;
 
+   /* Need to recalc before providing the object. */
+   _edje_recalc_do(ed);
+
rp = _edje_real_part_recursive_get(, part);
if (!rp) return NULL;
if ((rp->type != EDJE_RP_TYPE_TEXT) ||
diff --git a/src/tests/edje/data/test_textblock.edc 
b/src/tests/edje/data/test_textblock.edc
new file mode 100644
index 00..e3569a6467
--- /dev/null
+++ b/src/tests/edje/data/test_textblock.edc
@@ -0,0 +1,20 @@
+collections {
+   styles {
+  style { name: "tb_style";
+ base: "font=Sans font_size=20 color=#fff";
+  }
+   }
+   group { name: "test_textblock";
+  parts {
+ part { name: "text";
+type: TEXTBLOCK;
+description { state: "default" 0.0;
+   min: 300 300;
+   text {
+  style: "tb_style";
+   }
+}
+ }
+  }
+   }
+}
diff --git a/src/tests/edje/edje_test_edje.c b/src/tests/edje/edje_test_edje.c
index 3a39becdb1..0f98e3cb8d 100644
--- a/src/tests/edje/edje_test_edje.c
+++ b/src/tests/edje/edje_test_edje.c
@@ -1072,6 +1072,25 @@ EFL_START_TEST(edje_test_part_caching)
 }
 EFL_END_TEST
 
+EFL_START_TEST(edje_test_textblock)
+{
+   Evas *evas;
+   Evas_Object *obj;
+   const char *buf = "Hello";
+   const char *txt;
+
+   evas = EDJE_TEST_INIT_EVAS();
+
+   obj = edje_object_add(evas);
+   fail_unless(edje_object_file_set(obj, 
test_layout_get("test_textblock.edj"), "test_textblock"));
+   edje_object_part_text_set(obj, "text", buf);
+   txt = edje_object_part_text_get(obj, "text");
+   fail_if(!txt || strcmp(txt, buf));
+
+   EDJE_TEST_FREE_EVAS();
+}
+EFL_END_TEST
+
 void edje_test_edje(TCase *tc)
 {
tcase_add_test(tc, edje_test_edje_init);
@@ -1100,4 +1119,5 @@ void edje_test_edje(TCase *tc)
tcase_add_test(tc, edje_test_signal_callback_del_full);
tcase_add_test(tc, edje_test_text_cursor);
tcase_add_test(tc, edje_test_part_caching);
+   tcase_add_test(tc, edje_test_textblock);
 }

-- 




[EGIT] [core/efl] master 01/01: edje: fix an issue "description.text.text" is not shown

2018-06-11 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a99f3374135fb3728fecdaed611ede511b15b8e1

commit a99f3374135fb3728fecdaed611ede511b15b8e1
Author: Youngbok Shin 
Date:   Mon Jun 11 16:19:38 2018 +0300

edje: fix an issue "description.text.text" is not shown

Summary:
"description.text.text" is not shown after applying a patch for
supporting text translation of Textblock part.
@fix T6997

Test Plan:
- Try to show a TEXTBLOCK part which has built-in text.
ex)
  textblock {
 scale;
 desc { "default";
text {
   style: "my_style";
   text: "You can't see this text without this patch";
}
 }
  }

Reviewers: Hermet, subodh6129, herdsman

Subscribers: cedric, #committers, zmike

Tags: #efl

Maniphest Tasks: T6997

Differential Revision: https://phab.enlightenment.org/D6257
---
 src/lib/edje/edje_textblock.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lib/edje/edje_textblock.c b/src/lib/edje/edje_textblock.c
index 9b9f17cc25..312238735c 100644
--- a/src/lib/edje/edje_textblock.c
+++ b/src/lib/edje/edje_textblock.c
@@ -438,6 +438,7 @@ _edje_part_recalc_single_textblock(FLOAT_T sc,
 else
   {
  ep->typedata.text->text_source = NULL;
+ text = NULL;
  if (chosen_desc->text.domain)
{
   if (!chosen_desc->text.text.translated)

-- 




[EGIT] [core/efl] master 01/01: elementary textpath: update Evas map when text is updated

2018-05-27 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=8d249c9445b1ebaea22fc711e3778b5623445c73

commit 8d249c9445b1ebaea22fc711e3778b5623445c73
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon May 28 14:48:41 2018 +0900

elementary textpath: update Evas map when text is updated

Summary:
Evas map was not updated when text was updated.
@fix

Test Plan:
1. Run the following test case.
  elementary_test -to "efl.ui.textpath"
2. Toggle short text.
3. See a long line from the end of text which is wrong.
  If you change angle, Evas map will be updated properly.
  But, it should be updated when text is updated.

Reviewers: raster, cedric, thiepha, Hermet

Reviewed By: Hermet

Subscribers: Hermet, #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6216
---
 src/lib/elementary/efl_ui_textpath.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lib/elementary/efl_ui_textpath.c 
b/src/lib/elementary/efl_ui_textpath.c
index 2896979373..a378bdf7a9 100644
--- a/src/lib/elementary/efl_ui_textpath.c
+++ b/src/lib/elementary/efl_ui_textpath.c
@@ -570,6 +570,7 @@ _textpath_text_set_internal(Eo *obj, Efl_Ui_Textpath_Data 
*pd, const char *part,
if (!text) text = "";
ret = edje_object_part_text_set(pd->text_obj, part, text);
_ellipsis_set(pd);
+   _sizing_eval(pd);
 
return ret;
 }

-- 




[EGIT] [core/efl] master 06/13: elementary widget: Do super's efl_gfx_color_set to apply color to widget itself

2018-05-25 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6e6ed72921aa1fb114115e2202f92126ea04b25b

commit 6e6ed72921aa1fb114115e2202f92126ea04b25b
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri May 25 10:08:21 2018 -0700

elementary widget: Do super's efl_gfx_color_set to apply color to widget 
itself

Summary:
The efl_gfx_color interface was not applied properly.
The implementation code of evas_object_smart_color_set was moved
to efl_gfx_color_set implementation code. But, these two functions are not 
same.
In efl_gfx_color_set impl, it has to call super's color set to apply
the given color values to widget object itself.

This bug caused color_set/get test failure and the following bug.
1. elm_image_add
2. evas_object_color_set
3. elm_image_file_set
4. show. See the given color is not applied. It was applied in the past.

Test Plan: color_set/get to elm_image object is included in test suite.

Reviewers: raster, cedric, herdsman, woohyun

Reviewed By: cedric

Subscribers: #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6163

Reviewed-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/elementary/efl_ui_widget.c|  2 ++
 src/tests/elementary/elm_test_image.c | 23 +++
 2 files changed, 25 insertions(+)

diff --git a/src/lib/elementary/efl_ui_widget.c 
b/src/lib/elementary/efl_ui_widget.c
index 0f7b19f546..6140f40baa 100644
--- a/src/lib/elementary/efl_ui_widget.c
+++ b/src/lib/elementary/efl_ui_widget.c
@@ -997,6 +997,8 @@ _efl_ui_widget_efl_gfx_color_color_set(Eo *obj, 
Elm_Widget_Smart_Data *pd, int r
if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_COLOR_SET, 0, 
r, g, b, a))
  return;
 
+   efl_gfx_color_set(efl_super(obj, MY_CLASS), r, g, b, a);
+
it = evas_object_smart_iterator_new(obj);
EINA_ITERATOR_FOREACH(it, o)
  {
diff --git a/src/tests/elementary/elm_test_image.c 
b/src/tests/elementary/elm_test_image.c
index 5fc727e303..109c56d122 100644
--- a/src/tests/elementary/elm_test_image.c
+++ b/src/tests/elementary/elm_test_image.c
@@ -195,6 +195,28 @@ EFL_START_TEST (elm_image_async_mmap)
 }
 EFL_END_TEST
 
+EFL_START_TEST (elm_image_evas_object_color_set)
+{
+   Evas_Object *win, *image;
+   Eina_Bool ok;
+   Test_Data td;
+   Eina_File *f;
+   char path[PATH_MAX];
+   int r = 128, g = 99, b = 3, a = 230;
+   int rr = 0, gg = 0, bb = 0, aa = 0;
+
+   win = win_add(NULL, "image", ELM_WIN_BASIC);
+
+   image = elm_image_add(win);
+   evas_object_color_set(image, r, g, b, a);
+   evas_object_color_get(image, , , , );
+   ck_assert(r == rr);
+   ck_assert(g == gg);
+   ck_assert(b == bb);
+   ck_assert(a == aa);
+}
+EFL_END_TEST
+
 EFL_START_TEST (efl_ui_image_icon)
 {
Evas_Object *win, *image;
@@ -225,5 +247,6 @@ void elm_test_image(TCase *tc)
tcase_add_test(tc, elm_atspi_role_get);
tcase_add_test(tc, elm_image_async_path);
tcase_add_test(tc, elm_image_async_mmap);
+   tcase_add_test(tc, elm_image_evas_object_color_set);
tcase_add_test(tc, efl_ui_image_icon);
 }

-- 




[EGIT] [core/efl] master 01/13: elementary textpath: improves text rendering quality of curved text

2018-05-25 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=455775c2e32ba72919996cf9a876a89ac133029e

commit 455775c2e32ba72919996cf9a876a89ac133029e
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri May 25 09:59:01 2018 -0700

elementary textpath: improves text rendering quality of curved text

Summary:
There was wrong logic for calculating # of slices, dt, dist of each segment.
It caused bad rendering quality by putting too much slices on small text.

In addition, textpath didn't care about smoothness of curve's slope 
changing.
The patch fixes to check differences of previous points and next points for 
Evas Map.
So, textpath can show more smoothly curved text.

Also, it fixes "autofit" bug when text is much huge than given circle's 
size.

@tix

Test Plan:
- I'll attach screenshots for comparing rendering quality.
- To see "autofit" bug.
1. Run the following command.
   ELM_ACCEL=gl ELM_SCALE=2.0 elementary_test -to "efl.ui.textpath"

2. Toggle "autofit" check box.
3. See the bug case. Textpath can't show all text properly.

Reviewers: raster, cedric, thiepha

Subscribers: #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6195

Reviewed-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/elementary/efl_ui_textpath.c | 181 ---
 1 file changed, 148 insertions(+), 33 deletions(-)

diff --git a/src/lib/elementary/efl_ui_textpath.c 
b/src/lib/elementary/efl_ui_textpath.c
index c818380a5f..2896979373 100644
--- a/src/lib/elementary/efl_ui_textpath.c
+++ b/src/lib/elementary/efl_ui_textpath.c
@@ -47,6 +47,10 @@ struct _Efl_Ui_Textpath_Segment
  };
 };
 
+/* If you need to draw slices using Evas Line,
+ * define the following debug flag manually. */
+//#define EFL_UI_TEXTPATH_LINE_DEBUG
+
 struct _Efl_Ui_Textpath_Data
 {
Evas_Object *text_obj;
@@ -64,6 +68,9 @@ struct _Efl_Ui_Textpath_Data
 
Eina_Inlist *segments;
int total_length;
+#ifdef EFL_UI_TEXTPATH_LINE_DEBUG
+   Eina_List *lines;
+#endif
 };
 
 #define EFL_UI_TEXTPATH_DATA_GET(o, sd) \
@@ -76,26 +83,25 @@ _deg_to_rad(double angle)
 }
 
 static void
-_segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, int w1, int w2, int cmp, 
Evas_Map *map, Eina_Bezier bezier)
+_segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, double dt, double dist,
+  int w1, int cmp, Evas_Map *map, Eina_Bezier bezier,
+  int *last_x1, int *last_y1, int *last_x2, int *last_y2)
 {
-   int i, len, seg_len;
+   int i;
double u0, u1, v0, v1;
-   double dist, t, dt;
+   double t;
double px, py, px2, py2;
double rad;
Eina_Rect r;
Eina_Vector2 vec, nvec, vec0, vec1, vec2, vec3;
Eina_Matrix2 mat;
+#ifdef EFL_UI_TEXTPATH_LINE_DEBUG
+   static Eina_Bool yello_color_flag = EINA_FALSE;
+   yello_color_flag = !yello_color_flag;
+#endif
 
-   len = w2 - w1;
r = efl_gfx_entity_geometry_get(pd->text_obj);
 
-   seg_len = eina_bezier_length_get();
-   if (pd->autofit)
- dt = len / (seg_len * (double) slice_no);
-   else
- dt = 1.0 / (double) slice_no;
-   dist = len / (double)slice_no;
rad = _deg_to_rad(90);
eina_matrix2_values_set(, cos(rad), -sin(rad), sin(rad), cos(rad));
 
@@ -117,19 +123,46 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, int 
w1, int w2, int cmp, E
vec2.x = (-vec.x + px);
vec2.y = (-vec.y + py);
 
+   if (cmp == 0)
+ {
+*last_x1 = (int) floor(vec1.x + r.x + 0.5);
+*last_y1 = (int) floor(vec1.y + r.y + 0.5);
+*last_x2 = (int) floor(vec2.x + r.x + 0.5);
+*last_y2 = (int) floor(vec2.y + r.y + 0.5);
+ }
+
//add points to map
for (i = 0; i < slice_no; i++)
  {
+int mp0_x, mp0_y;
+int mp1_x, mp1_y;
+int mp2_x, mp2_y;
+int mp3_x, mp3_y;
+double next_dt = dt;
+
 //v0, v3
 vec0.x = vec1.x;
 vec0.y = vec1.y;
 vec3.x = vec2.x;
 vec3.y = vec2.y;
 
+//UV
+u0 = w1 + i * dist;
+u1 = u0 + dist;
+if (u1 > r.w)
+  u1 = r.w;
+v0 = (double) 0;
+v1 = (double) r.h;
+
+/* If u1 is modified not to exceed its end,
+ * modify next_dt according to changes of dist. */
+if (u1 < u0 + dist)
+  next_dt = dt * (u1 - u0) / dist;
+
 //v1, v2
-t = ((double) (i + 1) * dt);
+t = (double) (i * dt) + next_dt;
 eina_bezier_point_at(, t, , );
-eina_bezier_point_at(, t + dt, , );
+eina_bezier_point_at(, t + next_dt, , );
 
 vec.x = (px2 - px);
 vec.y = (py2 - py);
@@ -143,21 +176,80 @@ _segment_draw(Efl_Ui_Textpath_Data *pd, int slice_no, int 
w1, int w2, int cmp, E
 vec2.x = (-vec.x + px);
 vec2.y = (-vec.y + py);

[EGIT] [core/efl] master 07/13: edje: don't give a wrong Edje data when an Edje object has group parts

2018-05-25 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=cae57ff51bc5942a28f4f98c75183dc262df5008

commit cae57ff51bc5942a28f4f98c75183dc262df5008
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri May 25 10:09:13 2018 -0700

edje: don't give a wrong Edje data when an Edje object has group parts

Summary:
_edje_part_fetch() function gets an Edje which has the requested 
Edje_Real_Part.
Basically, it gets main Edje of the given object.
But, if a requested part is in a GROUP part, it gets the Edje of GROUP part.
It shouldn't be passed to _edje_efl_text_text_get() function directly.
@fix

Test Plan: N/A

Reviewers: herdsman, raster, cedric, woohyun

Reviewed By: cedric

Subscribers: #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6149

Reviewed-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/edje/edje_util.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index 71577832aa..7ab54bb4bd 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -6340,6 +6340,14 @@ edje_object_part_text_get(const Edje_Object *obj, const 
char *part)
 ERR("Invalid call on a non-text or non-textblock part: '%s' in group 
'%s'", part, ed->group);
 return NULL;
  }
+
+   ed = _edje_fetch(obj);
+   if (!ed)
+ {
+ERR("Failed to get Edje data from object: '%p'", obj);
+return NULL;
+ }
+
return _edje_efl_text_text_get(obj, ed, part, EINA_TRUE, EINA_FALSE);
 }
 

-- 




[EGIT] [core/efl] master 02/02: evas textblock: manage default style properly for new interfaces

2018-05-16 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f17cae08e6841bace7db1ab903d4a5841435a6f4

commit f17cae08e6841bace7db1ab903d4a5841435a6f4
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed May 16 20:56:27 2018 +0300

evas textblock: manage default style properly for new interfaces

Summary:
Calling efl_canvas_text_style_set() with empty key means
setting a default style to object. But, it counldn't store style
as default properly. It caused a crash issue from elementary_test.
@fix

Test Plan:
New test case is included. Run test suite. Or,
1. Run elementary_test
2. Find and launch "Image Zoomable animation" test.
3. Close the image test window.
4. See the crash issue.

Reviewers: raster, herdsman, jpeg, cedric, zmike

Subscribers: zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D5692

Committer's note: rebased and removed unrelated test.
---
 src/lib/evas/canvas/evas_object_textblock.c |  9 +-
 src/tests/evas/evas_test_textblock.c| 43 +
 2 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 9ed2a33918..d1f6123562 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -7295,7 +7295,14 @@ _efl_canvas_text_style_set(Eo *eo_obj, 
Efl_Canvas_Text_Data *o, const char *key,
 ts = evas_textblock_style_new();
 evas_textblock_style_set(ts, style);
 ts->key = eina_stringshare_add(key);
-o->styles = eina_list_append(o->styles, ts);
+
+/* If the given key value is NULL, newly created Evas Textblock Style
+ * has to be assigned to o->style. */
+if (ts->key)
+  o->styles = eina_list_append(o->styles, ts);
+else
+  o->style = ts;
+
 _textblock_style_generic_set(eo_obj, ts, );
  }
else if (ts && style)
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 03e92adb9a..715ec1fd33 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -4480,6 +4480,48 @@ EFL_START_TEST(evas_textblock_annotation)
 }
 EFL_END_TEST;
 
+#define START_EFL_CANVAS_TEXT_TEST() \
+   Evas *evas; \
+   Eo *txt; \
+   Efl_Text_Cursor_Cursor *cur; \
+   evas = EVAS_TEST_INIT_EVAS(); \
+   evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO); \
+   txt = efl_add(EFL_CANVAS_TEXT_CLASS, evas); \
+   fail_if(!txt); \
+   efl_canvas_text_legacy_newline_set(txt, EINA_FALSE); \
+   efl_canvas_text_style_set(txt, NULL, style_buf); \
+   fail_if(!efl_canvas_text_style_get(txt, NULL) || \
+  strcmp(style_buf, efl_canvas_text_style_get(txt, NULL))); \
+   cur = efl_text_cursor_new(txt); \
+   fail_if(!cur); \
+do \
+{ \
+} \
+while (0)
+
+#define END_EFL_CANVAS_TEXT_TEST() \
+do \
+{ \
+   efl_text_cursor_free(txt, cur); \
+   efl_del(txt); \
+   evas_free(evas); \
+} \
+while (0)
+
+EFL_START_TEST(efl_canvas_text_simple)
+{
+   START_EFL_CANVAS_TEXT_TEST();
+
+   /* It is simple test for Efl_Canvas_Text.
+* The main object is "txt". */
+   const char *buf = "This is a  test.";
+   efl_text_set(txt, buf);
+   fail_if(strcmp(efl_text_get(txt), buf));
+
+   END_EFL_CANVAS_TEXT_TEST();
+}
+EFL_END_TEST
+
 EFL_START_TEST(efl_canvas_text_cursor)
 {
START_TB_TEST();
@@ -4541,6 +4583,7 @@ void evas_test_textblock(TCase *tc)
 #endif
tcase_add_test(tc, evas_textblock_text_iface);
tcase_add_test(tc, evas_textblock_annotation);
+   tcase_add_test(tc, efl_canvas_text_simple);
tcase_add_test(tc, efl_canvas_text_cursor);
 }
 

-- 




[EGIT] [core/efl] master 01/02: evas textblock: update format nodes when a Evas Textblock Style is updated

2018-05-16 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f437a3075a867b2a62e571f0c4f39450f3dcf835

commit f437a3075a867b2a62e571f0c4f39450f3dcf835
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed May 16 20:21:08 2018 +0300

evas textblock: update format nodes when a Evas Textblock Style is updated

Summary:
A style tag among a text has to be replcaed by its matched tag when
a format node is created. If the matched tag is changed, format nodes
should be updated.
But, if a style text for Evas Textblock Style is changed,
related format nodes are not updated without setting new text.
The patch changes to update format nodes when new style text is set.
@fix

Test Plan: Included in Evas Test Suite.

Reviewers: raster, tasn, herdsman, subodh6129, zmike

Subscribers: zmike, cedric, z-wony, Blackmole

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D4697

Committer's note: rebased.
---
 src/lib/evas/canvas/evas_object_textblock.c | 82 ++---
 src/tests/evas/evas_test_textblock.c| 10 
 2 files changed, 61 insertions(+), 31 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 1b66ce507b..9ed2a33918 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -766,6 +766,7 @@ static Eina_Bool 
_evas_textblock_cursor_format_is_visible_get(const Efl_Text_Cur
 static void _evas_textblock_cursor_at_format_set(Efl_Text_Cursor_Cursor *cur, 
const Evas_Object_Textblock_Node_Format *fmt);
 static void _evas_textblock_cursor_init(Efl_Text_Cursor_Cursor *cur, const 
Evas_Object *tb);
 static Evas_Filter_Program *_format_filter_program_get(Efl_Canvas_Text_Data 
*o, Evas_Object_Textblock_Format *fmt);
+static const char *_textblock_format_node_from_style_tag(Efl_Canvas_Text_Data 
*o, Evas_Object_Textblock_Node_Format *fnode, const char *format, size_t 
format_len);
 #ifdef HAVE_HYPHEN
 /* Hyphenation */
 #include "evas_textblock_hyphenation.x"
@@ -6954,6 +6955,47 @@ evas_textblock_style_free(Evas_Textblock_Style *ts)
free(ts);
 }
 
+static void
+_evas_textblock_update_format_nodes_from_style_tag(Efl_Canvas_Text_Data *o)
+{
+   Evas_Object_Textblock_Node_Format *fnode = o->format_nodes;
+
+   if (!o)
+ {
+ERR("The given address Efl_Canvas_Text_Data is NULL");
+return;
+ }
+
+   while (fnode)
+ {
+const char *match;
+size_t format_len = eina_stringshare_strlen(fnode->orig_format);
+/* Is this safe to use alloca here? Strings might possibly get large */
+
+if (fnode->own_closer &&
+(format_len > 0) && (fnode->orig_format[format_len - 1] == '/'))
+  {
+ format_len--;
+  }
+
+match = _textblock_format_node_from_style_tag(o, fnode, 
fnode->orig_format,
+  format_len);
+
+if (match && fnode->format && strcmp(match, fnode->format))
+  {
+ if ((*match == '+') || (*match == '-'))
+   {
+  match++;
+  while (*match == ' ') match++;
+   }
+ fnode->is_new = EINA_TRUE;
+ eina_stringshare_replace(>format, match);
+  }
+
+fnode = _NODE_FORMAT(EINA_INLIST_GET(fnode)->next);
+ }
+}
+
 EAPI void
 evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text)
 {
@@ -6968,11 +7010,8 @@ evas_textblock_style_set(Evas_Textblock_Style *ts, const 
char *text)
 
EINA_LIST_FOREACH(ts->objects, l, eo_obj)
  {
-Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
 Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, 
EFL_CANVAS_OBJECT_CLASS);
 evas_object_async_block(obj);
-_evas_textblock_invalidate_all(o);
-_evas_textblock_changed(o, eo_obj);
  }
 
_style_replace(ts, text);
@@ -7095,6 +7134,14 @@ evas_textblock_style_set(Evas_Textblock_Style *ts, const 
char *text)
  p++;
   }
  }
+
+   EINA_LIST_FOREACH(ts->objects, l, eo_obj)
+ {
+Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
+_evas_textblock_update_format_nodes_from_style_tag(o);
+_evas_textblock_invalidate_all(o);
+_evas_textblock_changed(o, eo_obj);
+ }
 }
 
 EAPI const char *
@@ -7167,34 +7214,7 @@ _textblock_style_generic_set(Evas_Object *eo_obj, 
Evas_Textblock_Style *ts,
  }
*obj_ts = ts;
 
-   Evas_Object_Textblock_Node_Format *fnode = o->format_nodes;
-   while (fnode)
- {
-const char *match;
-size_t format_len = eina_stringshare_strlen(fnode->orig_format);
-/* Is this safe to use alloca here? Strings

[EGIT] [core/efl] master 01/03: evas textblock: fix double free issue from user style push/pop and free

2018-05-06 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=c33ef15d5dd68203dd0e7720aa17a83b2bed6ded

commit c33ef15d5dd68203dd0e7720aa17a83b2bed6ded
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Sat May 5 22:15:54 2018 +0300

evas textblock: fix double free issue from user style push/pop and free

Summary: The Textblock Style which is created for user style was managed
application side.  It is created and free'd from application - outside
of Evas Textblock.  Recently, evas_object_textblock_style_user_push/pop
start to call efl_canvas_text_style_set() instead of legacy code. The
problem is efl_canvas_text_style_set() is always going to call free()
when a style is going to be deleted.  It makes conflicts(double free
issue) with application which is used to call
evas_textblock_style_free().  So, the issue will be fixed by this patch.

The patch also revise push/pop/peek code to make clean and avoid
meaningless calculation/events.

@fix

Test Plan:
A test case is Included in this patch.
The test case try to trigger double free.

Reviewers: herdsman, raster, cedric

Subscribers: zmike, woohyun

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D5812

Committer's note: formatted commit summary (80 width).
---
 src/lib/evas/canvas/evas_object_textblock.c | 50 ++---
 src/tests/evas/evas_test_textblock.c| 25 +++
 2 files changed, 64 insertions(+), 11 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index ce6e60edd8..f17ae47975 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -7221,6 +7221,16 @@ _style_by_key_find(Efl_Canvas_Text_Data *o, const char 
*key)
return NULL;
 }
 
+static void
+_style_remove_from_obj(Eo *eo_obj, Efl_Canvas_Text_Data *o, 
Evas_Textblock_Style *ts, Eina_Bool style_free)
+{
+   o->styles = eina_list_remove(o->styles, ts);
+   ts->objects = eina_list_remove(ts->objects, eo_obj);
+
+   if (style_free || (ts->delete_me && !ts->objects))
+ evas_textblock_style_free(ts);
+}
+
 EOLIAN static void
 _efl_canvas_text_style_set(Eo *eo_obj, Efl_Canvas_Text_Data *o, const char 
*key, const char *style)
 {
@@ -7246,9 +7256,7 @@ _efl_canvas_text_style_set(Eo *eo_obj, 
Efl_Canvas_Text_Data *o, const char *key,
   }
 else
   {
- o->styles = eina_list_remove(o->styles, ts);
- ts->objects = eina_list_remove(ts->objects, eo_obj);
- evas_textblock_style_free(ts);
+ _style_remove_from_obj(eo_obj, o, ts, EINA_TRUE);
   }
  }
else if (!ts && style)
@@ -7296,20 +7304,29 @@ EAPI void
 evas_object_textblock_style_user_push(Eo *eo_obj, Evas_Textblock_Style *ts)
 {
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
-   Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, 
EFL_CANVAS_OBJECT_CLASS);
evas_object_async_block(obj);
+   Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
+   Evas_Textblock_Style *old_ts, *tmp = NULL;
 
-   Evas_Textblock_Style *old_ts = _style_by_key_find(o, _STYLE_USER);
+   old_ts = _style_by_key_find(o, _STYLE_USER);
+
+   if (old_ts == ts) return;
 
if (old_ts)
+ _style_remove_from_obj(eo_obj, o, old_ts, EINA_FALSE);
+
+   if (ts)
  {
-efl_canvas_text_style_set(eo_obj, _STYLE_USER, NULL);
+_textblock_style_generic_set(eo_obj, ts, );
+ts->key = eina_stringshare_add(_STYLE_USER);
+o->styles = eina_list_append(o->styles, ts);
  }
-   Evas_Textblock_Style *tmp = NULL;
-   _textblock_style_generic_set(eo_obj, ts, );
-   ts->key = eina_stringshare_add(_STYLE_USER);
-   o->styles = eina_list_append(o->styles, ts);
+
+   o->format_changed = EINA_TRUE;
+   _evas_textblock_invalidate_all(o);
+   _evas_textblock_changed(o, eo_obj);
+   efl_event_callback_call(eo_obj, EFL_CANVAS_TEXT_EVENT_CHANGED, NULL);
 }
 
 EAPI const Evas_Textblock_Style*
@@ -7320,6 +7337,7 @@ evas_object_textblock_style_user_peek(const Eo *eo_obj)
evas_object_async_block(obj);
Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
Evas_Textblock_Style *ts = _style_by_key_find(o, _STYLE_USER);
+
return ts;
 }
 
@@ -7329,8 +7347,18 @@ evas_object_textblock_style_user_pop(Eo *eo_obj)
EINA_SAFETY_ON_NULL_RETURN(eo_obj);
Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, 
EFL_CANVAS_OBJECT_CLASS);
evas_object_async_block(obj);
+   Efl_Canvas_Text_Data *o = efl_data_scope_get(eo_obj, MY_CLASS);
+   Evas_Textblock_Style *ts = _style_by_key_find(o, _STYLE_USER);
 
-   efl_canvas_text_style_set(eo_obj, _STYLE_USER, NULL);
+   if (ts)
+ {

[EGIT] [core/efl] master 03/03: evas textblock: remove NULL checking after dereferencing

2018-05-06 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=fa8aa7c9c85a2a5cab47f6093a2de94d74ec42e3

commit fa8aa7c9c85a2a5cab47f6093a2de94d74ec42e3
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Sun May 6 10:49:42 2018 +0300

evas textblock: remove NULL checking after dereferencing

Summary:
c->paragraphs couldn't be NULL if it is created by
_layout_paragraph_new() well. So, NULL checking should be
moved to after _layout_paragraph_new().

Test Plan: N/A

Reviewers: jpeg, tasn, raster, herdsman, cedric

Subscribers: zmike, stefan_schmidt, jpeg

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D4300
---
 src/lib/evas/canvas/evas_object_textblock.c | 18 +-
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index f17ae47975..1b66ce507b 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -3152,13 +3152,18 @@ _layout_find_paragraph_by_line_no(Efl_Canvas_Text_Data 
*o, int line_no)
  * @param c The context to work on - Not NULL.
  * @param n the associated text node
  * @param append true to append, false to prpend.
+ * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
  */
-static void
+static Eina_Bool
 _layout_paragraph_new(Ctxt *c, Evas_Object_Textblock_Node_Text *n,
   Eina_Bool append)
 {
Evas_Object_Textblock_Paragraph *rel_par = c->par;
-   c->par = calloc(1, sizeof(Evas_Object_Textblock_Paragraph));
+   Evas_Object_Textblock_Paragraph *new_par = calloc(1, 
sizeof(Evas_Object_Textblock_Paragraph));
+
+   if (!new_par) return EINA_FALSE;
+   c->par = new_par;
+
if (append || !rel_par)
   c->paragraphs = (Evas_Object_Textblock_Paragraph *)
  eina_inlist_append_relative(EINA_INLIST_GET(c->paragraphs),
@@ -3177,6 +3182,8 @@ _layout_paragraph_new(Ctxt *c, 
Evas_Object_Textblock_Node_Text *n,
c->par->line_no = -1;
c->par->visible = 1;
c->o->num_paragraphs++;
+
+   return EINA_TRUE;
 }
 
 #ifdef BIDI_SUPPORT
@@ -6323,7 +6330,8 @@ _layout_pre(Ctxt *c)
  else
{
   /* If it's a new paragraph, just add it. */
-  _layout_paragraph_new(c, n, EINA_FALSE);
+  if (!_layout_paragraph_new(c, n, EINA_FALSE))
+break;
}
 
 #ifdef BIDI_SUPPORT
@@ -6428,7 +6436,7 @@ _layout_pre(Ctxt *c)
 * if the last paragraph has no lines/text, create that as well */
if (!c->paragraphs)
  {
-_layout_paragraph_new(c, NULL, EINA_TRUE);
+if (!_layout_paragraph_new(c, NULL, EINA_TRUE)) return;
 o->paragraphs = c->paragraphs;
  }
c->par = (Evas_Object_Textblock_Paragraph *)
@@ -6551,7 +6559,7 @@ _layout_visual(Ctxt *c)
 }
 
   /* Get the last visible paragraph in the layout */
-  if (!last_vis_par && c->paragraphs)
+  if (!last_vis_par)
  last_vis_par = (Evas_Object_Textblock_Paragraph *)
 EINA_INLIST_GET(c->paragraphs)->last;
 

-- 




[EGIT] [core/efl] efl-1.20 01/01: edje: fix backward compatibility issue caused by legacy cursor funcs

2018-05-02 Thread Youngbok Shin
herdsman pushed a commit to branch efl-1.20.

http://git.enlightenment.org/core/efl.git/commit/?id=434247391dc8ad4e66b3b11507b03e81e60746bc

commit 434247391dc8ad4e66b3b11507b03e81e60746bc
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed May 2 10:33:35 2018 +0300

edje: fix backward compatibility issue caused by legacy cursor funcs

Summary:
edje_object_part_text_cursor_prev/next/up/down has return value.
It has to return EINA_TRUE when only it successed.
But, when these funcs moved to legacy, it changed to return EINA_TRUE
whenever it fails or success. It must return EINA_FALSE when it fails.
@fix

Test Plan:
- Run test suite
  make check

Reviewers: herdsman, raster, cedric, woohyun

Subscribers: zmike

Differential Revision: https://phab.enlightenment.org/D5972

Committer's note: backported with an additional fix to tests.
---
 src/Makefile_Edje.am |  2 +
 src/lib/edje/edje_legacy.c   | 64 -
 src/tests/edje/data/test_text_cursor.edc | 22 +
 src/tests/edje/edje_test_edje.c  | 81 
 4 files changed, 157 insertions(+), 12 deletions(-)

diff --git a/src/Makefile_Edje.am b/src/Makefile_Edje.am
index 4ca20e570b..925880514b 100644
--- a/src/Makefile_Edje.am
+++ b/src/Makefile_Edje.am
@@ -287,6 +287,7 @@ tests/edje/data/test_combine_keywords.edc \
 tests/edje/data/test_messages.edc \
 tests/edje/data/test_signals.edc \
 tests/edje/data/test_signal_callback_del_full.edc \
+tests/edje/data/test_text_cursor.edc \
 tests/edje/data/filter.lua
 
 
@@ -330,6 +331,7 @@ EDJE_TEST_FILES = tests/edje/data/test_layout.edj \
  tests/edje/data/test_messages.edj \
  tests/edje/data/test_signals.edj \
  tests/edje/data/test_signal_callback_del_full.edj \
+ tests/edje/data/test_text_cursor.edj \
  $(NULL)
 
 CLEANFILES += $(EDJE_TEST_FILES)
diff --git a/src/lib/edje/edje_legacy.c b/src/lib/edje/edje_legacy.c
index 256f468fe9..052805cda5 100644
--- a/src/lib/edje/edje_legacy.c
+++ b/src/lib/edje/edje_legacy.c
@@ -250,33 +250,73 @@ edje_object_part_text_cursor_line_end_set(Edje_Object 
*obj, const char *part, Ed
 EAPI Eina_Bool
 edje_object_part_text_cursor_prev(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_char_prev(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur));
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_char_prev(efl_part(obj, part), c);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI Eina_Bool
 edje_object_part_text_cursor_next(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_char_next(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur));
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_char_next(efl_part(obj, part), c);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI Eina_Bool
 edje_object_part_text_cursor_down(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_line_jump_by(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur), 1);
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_line_jump_by(efl_part(obj, part), c, 1);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI Eina_Bool
 edje_object_part_text_cursor_up(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_line_jump_by(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur), -1);
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_line_jump_by(efl_part(obj, part), c, -1);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI void
diff --git a/src/tests/edje/data/test_text_cursor.edc 
b/src/tests/edj

[EGIT] [core/efl] master 01/01: edje: fix backward compatibility issue caused by legacy cursor funcs

2018-05-02 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=cd0bd865eb93d47d87e6e921d3743152784fc1fd

commit cd0bd865eb93d47d87e6e921d3743152784fc1fd
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed May 2 10:33:35 2018 +0300

edje: fix backward compatibility issue caused by legacy cursor funcs

Summary:
edje_object_part_text_cursor_prev/next/up/down has return value.
It has to return EINA_TRUE when only it successed.
But, when these funcs moved to legacy, it changed to return EINA_TRUE
whenever it fails or success. It must return EINA_FALSE when it fails.
@fix

Test Plan:
- Run test suite
  make check

Reviewers: herdsman, raster, cedric, woohyun

Subscribers: zmike

Differential Revision: https://phab.enlightenment.org/D5972
---
 src/Makefile_Edje.am |  2 +
 src/lib/edje/edje_legacy.c   | 64 -
 src/tests/edje/data/test_text_cursor.edc | 22 +
 src/tests/edje/edje_test_edje.c  | 81 
 4 files changed, 157 insertions(+), 12 deletions(-)

diff --git a/src/Makefile_Edje.am b/src/Makefile_Edje.am
index 1179d5e92e..87d67b5e89 100644
--- a/src/Makefile_Edje.am
+++ b/src/Makefile_Edje.am
@@ -299,6 +299,7 @@ tests/edje/data/test_combine_keywords.edc \
 tests/edje/data/test_messages.edc \
 tests/edje/data/test_signals.edc \
 tests/edje/data/test_signal_callback_del_full.edc \
+tests/edje/data/test_text_cursor.edc \
 tests/edje/data/filter.lua
 
 
@@ -342,6 +343,7 @@ EDJE_TEST_FILES = tests/edje/data/test_layout.edj \
  tests/edje/data/test_messages.edj \
  tests/edje/data/test_signals.edj \
  tests/edje/data/test_signal_callback_del_full.edj \
+ tests/edje/data/test_text_cursor.edj \
  $(NULL)
 
 CLEANFILES += $(EDJE_TEST_FILES)
diff --git a/src/lib/edje/edje_legacy.c b/src/lib/edje/edje_legacy.c
index 3549eee059..a0c51749ad 100644
--- a/src/lib/edje/edje_legacy.c
+++ b/src/lib/edje/edje_legacy.c
@@ -325,33 +325,73 @@ edje_object_part_text_cursor_line_end_set(Edje_Object 
*obj, const char *part, Ed
 EAPI Eina_Bool
 edje_object_part_text_cursor_prev(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_char_prev(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur));
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_char_prev(efl_part(obj, part), c);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI Eina_Bool
 edje_object_part_text_cursor_next(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_char_next(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur));
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_char_next(efl_part(obj, part), c);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI Eina_Bool
 edje_object_part_text_cursor_down(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_line_jump_by(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur), 1);
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_line_jump_by(efl_part(obj, part), c, 1);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI Eina_Bool
 edje_object_part_text_cursor_up(Edje_Object *obj, const char *part, 
Edje_Cursor cur)
 {
-   efl_text_cursor_line_jump_by(efl_part(obj, part),
- efl_text_cursor_get(efl_part(obj, part), (int) cur), -1);
-   return EINA_TRUE;
+   Efl_Text_Cursor_Cursor *c;
+   int old_pos, new_pos;
+
+   c = efl_text_cursor_get(efl_part(obj, part), (int) cur);
+
+   old_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+   efl_text_cursor_line_jump_by(efl_part(obj, part), c, -1);
+   new_pos = efl_text_cursor_position_get(efl_part(obj, part), c);
+
+   if (old_pos != new_pos)
+ return EINA_TRUE;
+
+   return EINA_FALSE;
 }
 
 EAPI void
diff --git a/src/tests/edje/data/test_text_cursor.edc 
b/src/tests/edje/data/test_text_cursor.edc
new file mode 100644
index 00..7392

[EGIT] [core/efl] master 01/01: elementary bg: allow NULL pointers in legacy usage

2018-04-23 Thread Youngbok Shin
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f7826ea1af61c8e379244628288a20171b5a2bcd

commit f7826ea1af61c8e379244628288a20171b5a2bcd
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon Apr 23 21:24:13 2018 +0900

elementary bg: allow NULL pointers in legacy usage

Summary:
It should not cause crash with NULL parameters.
@fix

Reviewers: woohyun, raster, cedric

Reviewed By: woohyun, raster

Differential Revision: https://phab.enlightenment.org/D5979
---
 src/lib/elementary/efl_ui_bg_widget.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/lib/elementary/efl_ui_bg_widget.c 
b/src/lib/elementary/efl_ui_bg_widget.c
index 09f07b1e63..8fe8072345 100644
--- a/src/lib/elementary/efl_ui_bg_widget.c
+++ b/src/lib/elementary/efl_ui_bg_widget.c
@@ -218,8 +218,8 @@ _efl_ui_bg_widget_efl_file_file_get(const Eo *obj, 
Efl_Ui_Bg_Widget_Data *sd, co
 {
if (elm_widget_is_legacy(obj))
  {
-*file = sd->file;
-*key = sd->key;
+if (file) *file = sd->file;
+if (key) *key = sd->key;
 return;
  }
 

-- 




[EGIT] [core/efl] master 12/13: elementary: bg - keep file path and key string for legacy bg widget

2018-03-06 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b147b5062fc110e12efc72c81dd58439ee7ad06f

commit b147b5062fc110e12efc72c81dd58439ee7ad06f
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Mar 6 17:56:56 2018 -0800

elementary: bg - keep file path and key string for legacy bg widget

Summary:
If a file path and key string was passed to elm_bg, we could get
the same file path and key string. Even if it failed to load the image file.
And the file path also remained its original form.
ex) Setting file path "~/image.png" => Getting file path "~/image.png"
   (Not "/home/user_name/image.png")

@fix

Test Plan: Included in elementary test suite.

Reviewers: jpeg, cedric, raster

Reviewed By: cedric

Subscribers: woohyun

Differential Revision: https://phab.enlightenment.org/D5823

Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/lib/elementary/efl_ui_bg_widget.c | 23 +-
 src/lib/elementary/efl_ui_bg_widget.eo|  1 +
 src/lib/elementary/efl_ui_bg_widget_private.h |  2 ++
 src/tests/elementary/elm_test_bg.c| 28 +++
 4 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/src/lib/elementary/efl_ui_bg_widget.c 
b/src/lib/elementary/efl_ui_bg_widget.c
index 3cc8fb1c58..7f18b8a8c4 100644
--- a/src/lib/elementary/efl_ui_bg_widget.c
+++ b/src/lib/elementary/efl_ui_bg_widget.c
@@ -45,6 +45,8 @@ _efl_ui_bg_widget_efl_object_constructor(Eo *obj, 
Efl_Ui_Bg_Widget_Data *pd)
pd->img = efl_add(EFL_UI_IMAGE_CLASS, obj,
  efl_image_scale_type_set(efl_added, 
EFL_IMAGE_SCALE_TYPE_FIT_OUTSIDE),
  efl_content_set(efl_part(obj, "elm.swallow.background"), 
efl_added));
+   pd->file = NULL;
+   pd->key = NULL;
 
efl_access_type_set(obj, EFL_ACCESS_TYPE_DISABLED);
 
@@ -53,6 +55,15 @@ _efl_ui_bg_widget_efl_object_constructor(Eo *obj, 
Efl_Ui_Bg_Widget_Data *pd)
return obj;
 }
 
+EOLIAN static void
+_efl_ui_bg_widget_efl_object_destructor(Eo *obj, Efl_Ui_Bg_Widget_Data *sd)
+{
+   ELM_SAFE_FREE(sd->file, eina_stringshare_del);
+   ELM_SAFE_FREE(sd->key, eina_stringshare_del);
+
+   efl_destructor(efl_super(obj, MY_CLASS));
+}
+
 EAPI void
 elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option)
 {
@@ -191,6 +202,9 @@ elm_bg_file_set(Eo *obj, const char *file, const char 
*group)
 EOLIAN static Eina_Bool
 _efl_ui_bg_widget_efl_file_file_set(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Widget_Data 
*sd, const char *file, const char *key)
 {
+   eina_stringshare_replace(>file, file);
+   eina_stringshare_replace(>key, key);
+
return efl_file_set(sd->img, file, key);
 }
 EAPI void
@@ -200,8 +214,15 @@ elm_bg_file_get(const Eo *obj, const char **file, const 
char **group)
 }
 
 EOLIAN static void
-_efl_ui_bg_widget_efl_file_file_get(Eo *obj EINA_UNUSED, Efl_Ui_Bg_Widget_Data 
*sd, const char **file, const char **key)
+_efl_ui_bg_widget_efl_file_file_get(Eo *obj, Efl_Ui_Bg_Widget_Data *sd, const 
char **file, const char **key)
 {
+   if (elm_widget_is_legacy(obj))
+ {
+*file = sd->file;
+*key = sd->key;
+return;
+ }
+
efl_file_get(sd->img, file, key);
 }
 
diff --git a/src/lib/elementary/efl_ui_bg_widget.eo 
b/src/lib/elementary/efl_ui_bg_widget.eo
index ef8882d7ac..105108c750 100644
--- a/src/lib/elementary/efl_ui_bg_widget.eo
+++ b/src/lib/elementary/efl_ui_bg_widget.eo
@@ -9,6 +9,7 @@ class Efl.Ui.Bg_Widget (Efl.Ui.Layout, Efl.Ui.Bg, 
Efl.Image.Load)
legacy_prefix: elm_bg;
implements {
   Efl.Object.constructor;
+  Efl.Object.destructor;
   Efl.File.file { get; set; }
   Efl.File.mmap { get; set; }
   Efl.Gfx.Color.color { get; set; }
diff --git a/src/lib/elementary/efl_ui_bg_widget_private.h 
b/src/lib/elementary/efl_ui_bg_widget_private.h
index 0ef56c113b..e886db50ba 100644
--- a/src/lib/elementary/efl_ui_bg_widget_private.h
+++ b/src/lib/elementary/efl_ui_bg_widget_private.h
@@ -28,6 +28,8 @@ struct _Efl_Ui_Bg_Widget_Data
 {
Evas_Object  *rect; /*<< Used for elm_bg_color_set(): 
elm.swallow.rectangle */
Evas_Object  *img; /*<< Used for elm_bg_file_set(): 
elm.swallow.content */
+   const char   *file; /*<< Used for elm_bg_file_set() with legacy 
widget */
+   const char   *key; /*<< Used for elm_bg_file_set() with legacy 
widget */
 };
 
 /**
diff --git a/src/tests/elementary/elm_test_bg.c 
b/src/tests/elementary/elm_test_bg.c
index 7a7fbd9c47..9ce43bcb5b 100644
--- a/src/tests/elementary/elm_test_bg.c
+++ b/src/tests/elementary/elm_test_bg.c
@@ -28,7 +28,35 @@ START_TEST (elm_bg_legacy_type_check)
 }
 END_TEST
 
+START_TEST (elm_bg_legacy_file_set_get_check)
+{
+   Evas_Object *win, *bg;
+   const char *file = NUL

[EGIT] [core/efl] master 05/13: evas: increase offset by 4 to do work for next map points

2018-03-06 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=255e9c788acdd5b64ddd18ad44aae24b3e77cbaa

commit 255e9c788acdd5b64ddd18ad44aae24b3e77cbaa
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Mar 6 17:01:02 2018 -0800

evas: increase offset by 4 to do work for next map points

Summary:
Increasing offset as 2 for next map points is wrong.
If evas tries to draw for wrong combination of map points,
it can cause wrong results. Actually, every drawing code for
map points use and increase offset as 4.

@fix

Test Plan:
A test case for textpach is modified for testing this issue.
1. Run elementary_test with sync render mode.
   ex) ECORE_EVAS_FORCE_SYNC_RENDER=1 elementary_test
2. Open textpath test.
3. Set a short text by clicking newly added check box.
4. (It will show another issues... So,) change slice number to update 
textpath properly.
5. See some noises at top-left side of text.
   It is drawn from the two of end map points to the two of empty(not used) 
map points.

Reviewers: raster, cedric, jpeg, jypark

Differential Revision: https://phab.enlightenment.org/D5833

Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/bin/elementary/test_ui_textpath.c  | 23 +-
 .../evas/engines/software_generic/evas_engine.c|  4 ++--
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/src/bin/elementary/test_ui_textpath.c 
b/src/bin/elementary/test_ui_textpath.c
index 9b27cdb7ac..094c7970fb 100644
--- a/src/bin/elementary/test_ui_textpath.c
+++ b/src/bin/elementary/test_ui_textpath.c
@@ -9,6 +9,9 @@
 #define CY 150
 #define CR 100
 
+#define TEST_UI_TEXTPATH_LONG_TEXT "This text follows the path which you 
defined. This is a long text designed to make it ellipsis."
+#define TEST_UI_TEXTPATH_SHORT_TEXT "This text is short."
+
 static Evas_Object *angle_sld, *slice_sld, *dir_chk;
 static int path_type;
 
@@ -50,6 +53,18 @@ _angle_changed_cb(void *data, const Efl_Event *event)
 }
 
 static void
+_short_text_changed_cb(void *data, const Efl_Event *event)
+{
+   Evas_Object *txtpath = data;
+   Eina_Bool val = elm_check_selected_get(event->object);
+
+   if (val)
+ efl_text_set(txtpath, TEST_UI_TEXTPATH_SHORT_TEXT);
+   else
+ efl_text_set(txtpath, TEST_UI_TEXTPATH_LONG_TEXT);
+}
+
+static void
 _change_shape_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
Evas_Object *txtpath = data;
@@ -99,7 +114,7 @@ test_ui_textpath(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *eve
elm_box_pack_end(box, txtpath);
efl_ui_textpath_autofit_set(txtpath, EINA_TRUE);
 
-   efl_text_set(txtpath, "This text follows the path which you defined. This 
is a long text designed to make it ellipsis.");
+   efl_text_set(txtpath, TEST_UI_TEXTPATH_LONG_TEXT);
 
efl_ui_textpath_circle_set(txtpath, CX, CY, CR, 0, 
EFL_UI_TEXTPATH_DIRECTION_CCW);
efl_gfx_visible_set(txtpath, EINA_TRUE);
@@ -133,6 +148,12 @@ test_ui_textpath(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *eve
efl_gfx_visible_set(chk, EINA_TRUE);
dir_chk = chk;
 
+   chk = elm_check_add(win);
+   elm_object_text_set(chk, "Short text");
+   efl_event_callback_add(chk, EFL_UI_CHECK_EVENT_CHANGED, 
_short_text_changed_cb, txtpath);
+   elm_box_pack_end(hbox, chk);
+   efl_gfx_visible_set(chk, EINA_TRUE);
+
hbox = elm_box_add(win);
elm_box_horizontal_set(hbox, EINA_TRUE);
efl_gfx_size_hint_weight_set(hbox, EFL_GFX_SIZE_HINT_EXPAND, 
EFL_GFX_SIZE_HINT_EXPAND);
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c 
b/src/modules/evas/engines/software_generic/evas_engine.c
index a265c42d9c..46b6764081 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -2773,7 +2773,7 @@ _map_draw_thread_cmd(RGBA_Image *src, RGBA_Image *dst, 
RGBA_Draw_Context *dc, RG
 static void
 evas_software_image_map_draw(void *engine EINA_UNUSED, void *data, void 
*context, RGBA_Image *surface, RGBA_Image *im, RGBA_Map *m, int smooth, int 
level, int offset)
 {
-   if (m->count - offset < 3) return;
+   if (m->count - offset < 4) return;
 
if ((m->pts[0 + offset].x == m->pts[3 + offset].x) &&
(m->pts[1 + offset].x == m->pts[2 + offset].x) &&
@@ -2834,7 +2834,7 @@ evas_software_image_map_draw(void *engine EINA_UNUSED, 
void *data, void *context
 
if (m->count > 4)
  {
-evas_software_image_map_draw(engine, data, context, surface, im, m, 
smooth, level, offset + 2);
+evas_software_image_map_draw(engine, data, context, surface, im, m, 
smooth, level, offset + 4);
  }
 }
 

-- 




[EGIT] [core/efl] master 10/10: elementary: fix legacy widget type name for backward compat

2018-02-14 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=855c1886b68d898722e5aab5e27a10eba4294655

commit 855c1886b68d898722e5aab5e27a10eba4294655
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Feb 14 12:04:24 2018 -0800

elementary: fix legacy widget type name for backward compat

Summary:
For example, the widget type of elm_button was "Elm_Button".
But, the object which is created by elm_button_add() will
return its widget type "Efl.Ui.Button_Legacy".
It is not legacy name. It should be fixed to return "Elm_Button".

I don't know when but eolian start to make class name with ".".
So, it should be converted to "_" for all widgets.

@fix

Test Plan:
All test cases are included in this patch.
Run "make check"

Reviewers: raster, cedric, jpeg, taxi2se

Reviewed By: cedric

Subscribers: taxi2se, woohyun

Differential Revision: https://phab.enlightenment.org/D5782

Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/lib/elementary/efl_ui_widget.c | 91 +-
 src/tests/elementary/elm_test_actionslider.c   | 25 +-
 src/tests/elementary/elm_test_bg.c | 23 ++
 src/tests/elementary/elm_test_box.c| 25 +-
 src/tests/elementary/elm_test_bubble.c | 25 +-
 src/tests/elementary/elm_test_button.c | 27 ++-
 src/tests/elementary/elm_test_calendar.c   | 25 +-
 src/tests/elementary/elm_test_check.c  | 23 ++
 src/tests/elementary/elm_test_clock.c  | 25 +-
 src/tests/elementary/elm_test_colorselector.c  | 23 ++
 src/tests/elementary/elm_test_conformant.c | 25 +-
 src/tests/elementary/elm_test_ctxpopup.c   | 25 +-
 src/tests/elementary/elm_test_datetime.c   | 25 +-
 src/tests/elementary/elm_test_dayselector.c| 25 +-
 src/tests/elementary/elm_test_diskselector.c   | 25 +-
 src/tests/elementary/elm_test_entry.c  | 23 ++
 src/tests/elementary/elm_test_fileselector.c   | 22 ++
 .../elementary/elm_test_fileselector_button.c  | 25 +-
 src/tests/elementary/elm_test_fileselector_entry.c | 25 +-
 src/tests/elementary/elm_test_flip.c   | 24 +-
 src/tests/elementary/elm_test_flipselector.c   | 24 +-
 src/tests/elementary/elm_test_frame.c  | 24 +-
 src/tests/elementary/elm_test_gengrid.c| 24 +-
 src/tests/elementary/elm_test_genlist.c| 22 ++
 src/tests/elementary/elm_test_glview.c | 27 ++-
 src/tests/elementary/elm_test_grid.c   | 24 +-
 src/tests/elementary/elm_test_hover.c  | 24 +-
 src/tests/elementary/elm_test_hoversel.c   | 24 +-
 src/tests/elementary/elm_test_icon.c   | 24 +-
 src/tests/elementary/elm_test_image.c  | 31 +++-
 src/tests/elementary/elm_test_index.c  | 24 +-
 src/tests/elementary/elm_test_inwin.c  | 24 +-
 src/tests/elementary/elm_test_label.c  | 24 +-
 src/tests/elementary/elm_test_layout.c | 22 ++
 src/tests/elementary/elm_test_list.c   | 41 +++---
 src/tests/elementary/elm_test_map.c| 24 +-
 src/tests/elementary/elm_test_mapbuf.c | 24 +-
 src/tests/elementary/elm_test_menu.c   | 24 +-
 src/tests/elementary/elm_test_multibuttonentry.c   | 24 +-
 src/tests/elementary/elm_test_naviframe.c  | 24 +-
 src/tests/elementary/elm_test_notify.c | 24 +-
 src/tests/elementary/elm_test_panel.c  | 24 +-
 src/tests/elementary/elm_test_panes.c  | 24 +-
 src/tests/elementary/elm_test_photo.c  | 24 +-
 src/tests/elementary/elm_test_photocam.c   | 22 ++
 src/tests/elementary/elm_test_player.c | 24 +-
 src/tests/elementary/elm_test_plug.c   | 24 +-
 src/tests/elementary/elm_test_popup.c  | 24 +-
 src/tests/elementary/elm_test_prefs.c  | 25 ++
 src/tests/elementary/elm_test_progressbar.c| 24 +-
 src/tests/elementary/elm_test_radio.c  | 24 +-
 src/tests/elementary/elm_test_scroller.c   | 24 +-
 src/tests/elementary/elm_test_segmentcontrol.c | 24 +-
 src/tests/elementary/elm_test_separator.c  | 24 +-
 src/tests/elementary/elm_test_slider.c | 24 +-
 src/tests/elementary/elm_test_slideshow.c  | 24 +-
 src/tests/elementary/elm_test_spinner.c| 24 +-
 src/tests/elementary/elm_test_table.c  | 24 +-
 src/tests/elementary/elm_test_thumb.c  | 25 +-
 src/tests/elementary/elm_test

[EGIT] [core/efl] efl-1.20 14/45: elementary config: Fix to use ELEMENTARY_BASE_DIR for configure path

2018-02-06 Thread Youngbok Shin
raster pushed a commit to branch efl-1.20.

http://git.enlightenment.org/core/efl.git/commit/?id=afeca7dda97362fada60f9944beeb94ad66f2246

commit afeca7dda97362fada60f9944beeb94ad66f2246
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon Jan 22 21:01:27 2018 +0900

elementary config: Fix to use ELEMENTARY_BASE_DIR for configure path

Summary:
"--with-elementary-base-dir" option was ignored by recent patches on 
elm_config.
The macro is being used in elm_theme. It should be syncronized.
The default value of the macro is ".elementary".

@fix

Test Plan: N/A

Reviewers: raster, cedric, jpeg

Reviewed By: jpeg

Differential Revision: https://phab.enlightenment.org/D5755
---
 src/lib/elementary/elm_config.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c
index 62e5f80f01..937c9bfe76 100644
--- a/src/lib/elementary/elm_config.c
+++ b/src/lib/elementary/elm_config.c
@@ -626,7 +626,7 @@ _elm_config_user_dir_snprintf(char   *dst,
 "(:config:)/elementary");
else
  file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS,
-"(:home:)/.elementary");
+"(:home:)/"ELEMENTARY_BASE_DIR);
eina_strlcpy(dst, efl_vpath_file_result_get(file_obj), size);
efl_del(file_obj);
 

-- 




[EGIT] [core/efl] master 01/01: elementary config: Fix to use ELEMENTARY_BASE_DIR for configure path

2018-01-22 Thread Youngbok Shin
jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=32f8e0c7268182d5a6d2bb57003d8211e4e67601

commit 32f8e0c7268182d5a6d2bb57003d8211e4e67601
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon Jan 22 21:01:27 2018 +0900

elementary config: Fix to use ELEMENTARY_BASE_DIR for configure path

Summary:
"--with-elementary-base-dir" option was ignored by recent patches on 
elm_config.
The macro is being used in elm_theme. It should be syncronized.
The default value of the macro is ".elementary".

@fix

Test Plan: N/A

Reviewers: raster, cedric, jpeg

Reviewed By: jpeg

Differential Revision: https://phab.enlightenment.org/D5755
---
 src/lib/elementary/elm_config.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c
index 2841c140cf..ac1fae0262 100644
--- a/src/lib/elementary/elm_config.c
+++ b/src/lib/elementary/elm_config.c
@@ -628,7 +628,7 @@ _elm_config_user_dir_snprintf(char   *dst,
 "(:config:)/elementary");
else
  file_obj = efl_vpath_manager_fetch(EFL_VPATH_MANAGER_CLASS,
-"(:home:)/.elementary");
+"(:home:)/"ELEMENTARY_BASE_DIR);
eina_strlcpy(dst, efl_vpath_file_result_get(file_obj), size);
efl_del(file_obj);
 

-- 




[EGIT] [core/efl] efl-1.20 02/47: edje_cc: fix a memory leak issue when edje_cc writes images

2017-11-07 Thread Youngbok Shin
raster pushed a commit to branch efl-1.20.

http://git.enlightenment.org/core/efl.git/commit/?id=eb7053a6728e4e92c522b244a519ef03abca59f5

commit eb7053a6728e4e92c522b244a519ef03abca59f5
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Oct 13 11:55:02 2017 -0700

edje_cc: fix a memory leak issue when edje_cc writes images

Summary:
If there is no given pathes for image files as parameter of edje_cc,
"img_dirs" will be NULL. Then, a local variable "load_err" is always
EVAS_LOAD_ERROR_NONE. Because of this, the "if" condition just after
EINA_LIST_FOREACH() will fail. It causes memory leak from "iw".
@fix

Test Plan: N/A

Reviewers: raster, cedric, jpeg, woohyun

Differential Revision: https://phab.enlightenment.org/D5285

Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/bin/edje/edje_cc_out.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c
index 391e46cc9f..d793cacc8b 100644
--- a/src/bin/edje/edje_cc_out.c
+++ b/src/bin/edje/edje_cc_out.c
@@ -1390,7 +1390,7 @@ data_write_images(Eet_File *ef, int *image_num)
   break;
}
   }
-if (load_err != EVAS_LOAD_ERROR_NONE)
+if (!img_dirs || (load_err != EVAS_LOAD_ERROR_NONE))
   {
  evas_object_image_file_set(im, img->entry, NULL);
  load_err = evas_object_image_load_error_get(im);

-- 




[EGIT] [core/efl] efl-1.20 21/47: elementary index: fix wrong reference in its header document

2017-11-07 Thread Youngbok Shin
raster pushed a commit to branch efl-1.20.

http://git.enlightenment.org/core/efl.git/commit/?id=48b74e171052aa79dce933ec7eda61fa7d903518

commit 48b74e171052aa79dce933ec7eda61fa7d903518
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Oct 26 14:36:32 2017 +0900

elementary index: fix wrong reference in its header document

Summary:
elm_index.h uses legacy keyword for ref tag.
The patch update each keywords for widgets.
And colon ":" character should be seperated from reference keyword.
It will remove doxygen warning messages from elm_index.h file.

Test Plan: N/A

Reviewers: cedric, raster, jpeg

Differential Revision: https://phab.enlightenment.org/D5387
---
 src/lib/elementary/elm_index.h | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/lib/elementary/elm_index.h b/src/lib/elementary/elm_index.h
index 538e96b601..e10bc2e110 100644
--- a/src/lib/elementary/elm_index.h
+++ b/src/lib/elementary/elm_index.h
@@ -14,21 +14,21 @@
  *
  * Index widgets are by default hidden and just appear when the
  * user clicks over it's reserved area in the canvas. In its
- * default theme, it's an area one @ref Fingers "finger" wide on
+ * default theme, it's an area one @ref Elm_Fingers "finger" wide on
  * the right side of the index widget's container.
  *
  * When items on the index are selected, smart callbacks get
  * called, so that its user can make other container objects to
  * show a given area or child object depending on the index item
  * selected. You'd probably be using an index together with @ref
- * List "lists", @ref Genlist "generic lists" or @ref Gengrid
+ * Elm_List "lists", @ref Elm_Genlist "generic lists" or @ref Elm_Gengrid
  * "general grids".
  *
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
  * functions acting on it also work for index objects.
  *
  * This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
  * - @c "changed" - When the selected index item changes. @c
  *  event_info is the selected item's data pointer.
  * - @c "delay,changed" - When the selected index item changes, but

-- 




[EGIT] [core/efl] master 01/01: evas textblock: handle ellipsis when text's height exceed its area by "br"

2017-11-05 Thread Youngbok Shin
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a386597ad92a1022ba41f94afdb28bdf9136d551

commit a386597ad92a1022ba41f94afdb28bdf9136d551
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon Nov 6 11:29:43 2017 +0900

evas textblock: handle ellipsis when text's height exceed its area by "br"

Summary:
Textblock's ellipsis feature only worked when text's width exceeds its area.
So, it didn't work when text's height exceeds its area by "br" tags.
This patch will do ellipsis when only ellipsis=1.0 is set.
@fix

Test Plan: make check

Reviewers: herdsman, raster, cedric, jpeg, sohyun

Reviewed By: raster

Subscribers: woohyun

Differential Revision: https://phab.enlightenment.org/D5412
---
 src/lib/evas/canvas/evas_object_textblock.c | 104 +++-
 src/tests/evas/evas_test_textblock.c|   9 +++
 2 files changed, 112 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index ea0a4ffb69..c311b58909 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -2904,6 +2904,7 @@ struct _Ctxt
Evas_Textblock_Align_Auto align_auto : 2;
Eina_Bool width_changed : 1;
Eina_Bool handle_obstacles : 1;
+   Eina_Bool vertical_ellipsis : 1;  /**ellipsis == 1.0) &&
+   (c->h > 0) && (c->y + c->ln->h > c->h))
+ {
+/* No text is shown when the object height is smaller than actual font 
size's height.
+ * Vertical ellipsis is not handled if the object has only one line. */
+if ((EINA_INLIST_GET(c->paragraphs) != EINA_INLIST_GET(c->par)) ||
+EINA_INLIST_GET(c->par->lines) != EINA_INLIST_GET(c->ln))
+  {
+ if (((c->position == TEXTBLOCK_POSITION_START) ||
+  (c->position == TEXTBLOCK_POSITION_SINGLE))
+ && (c->maxascent > c->ascent))
+   c->y -= c->o->style_pad.t;
+
+ /* Remove current line */
+ c->par->lines = (Evas_Object_Textblock_Line *)eina_inlist_remove(
+EINA_INLIST_GET(c->par->lines), EINA_INLIST_GET(c->ln));
+
+ if (c->o->ellip_ti && (_ITEM(c->o->ellip_ti)->ln == c->ln))
+   _ITEM(c->o->ellip_ti)->ln = NULL;
+
+ _line_free(c->ln);
+ c->ln = NULL;
+ c->vertical_ellipsis = EINA_TRUE;
+
+ return;
+  }
+ }
+
c->ln->baseline = c->ascent;
/* FIXME: Actually needs to be adjusted using the actual font value.
 * Also, underline_extend is actually not being used. */
@@ -3997,7 +4027,9 @@ _layout_line_advance(Ctxt *c, 
Evas_Object_Textblock_Format *fmt)
 last_fmt = _ITEM(EINA_INLIST_GET(c->ln->items)->last)->format;
  }
_layout_line_finalize(c, last_fmt);
-   _layout_line_new(c, fmt);
+
+   if (!c->vertical_ellipsis)
+ _layout_line_new(c, fmt);
 }
 
 /**
@@ -5903,6 +5935,13 @@ _layout_par(Ctxt *c)
else
  {
 _layout_line_advance(c, it->format);
+
+if (c->vertical_ellipsis)
+  {
+ ret = 1;
+ goto end;
+  }
+
 item_preadv = EINA_FALSE;
  }
 }
@@ -5954,6 +5993,12 @@ _layout_par(Ctxt *c)
   it = _ITEM(eina_list_data_get(i));
}
  _layout_line_advance(c, it->format);
+
+ if (c->vertical_ellipsis)
+   {
+  ret = 1;
+  goto end;
+   }
   }
  }
 
@@ -5967,6 +6012,9 @@ _layout_par(Ctxt *c)
 
 /* Here 'it' is the last format used */
 _layout_line_finalize(c, it->format);
+
+if (c->vertical_ellipsis)
+  ret = 1;
  }
 
 end:
@@ -6401,6 +6449,59 @@ _layout_visual(Ctxt *c)
   /* Clear the rest of the paragraphs and mark as invisible */
   if (c->par)
 {
+   if (c->vertical_ellipsis)
+ {
+c->vertical_ellipsis = EINA_FALSE;
+
+/* If there is no lines, go to the previous paragraph */
+if (!c->par->lines)
+  c->par = (Evas_Object_Textblock_Paragraph 
*)EINA_INLIST_GET(c->par)->prev;
+
+if (c->par)
+  {
+ if (c->par->lines)
+   c->ln = (Evas_Object_Textblock_Line 
*)EINA_INLIST_GET(c->par->lines)->last;
+
+ if (c-&g

[EGIT] [core/efl] master 01/01: edje: don't return negative width and height from _parts_extends

2017-11-05 Thread Youngbok Shin
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=de9f0aff5764ff42368c0e5164d439aba19d4e0c

commit de9f0aff5764ff42368c0e5164d439aba19d4e0c
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon Nov 6 11:06:41 2017 +0900

edje: don't return negative width and height from _parts_extends

Summary:
It should return width and height with positive values or zero.
@fix

Test Plan: make check

Reviewers: raster, jpeg, cedric

Reviewed By: raster

Subscribers: jiin.moon

Differential Revision: https://phab.enlightenment.org/D5422
---
 src/lib/edje/edje_util.c| 7 +--
 src/tests/edje/edje_test_edje.c | 6 ++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c
index 8db4ffd9a3..1b772d4be7 100644
--- a/src/lib/edje/edje_util.c
+++ b/src/lib/edje/edje_util.c
@@ -3274,7 +3274,7 @@ EOLIAN Eina_Rectangle
 _edje_object_efl_canvas_layout_calc_calc_parts_extends(Eo *obj EINA_UNUSED, 
Edje *ed)
 {
Evas_Coord xx1 = INT_MAX, yy1 = INT_MAX;
-   Evas_Coord xx2 = 0, yy2 = 0;
+   Evas_Coord xx2 = 0, yy2 = 0, w = 0, h = 0;
unsigned short i;
 
ed->calc_only = EINA_TRUE;
@@ -3304,7 +3304,10 @@ 
_edje_object_efl_canvas_layout_calc_calc_parts_extends(Eo *obj EINA_UNUSED, Edje
 
ed->calc_only = EINA_FALSE;
 
-   return (Eina_Rectangle) { xx1, yy1, xx2 - xx1, yy2 - yy1 };
+   if ((xx2 - xx1) > 0) w = xx2 - xx1;
+   if ((yy2 - yy1) > 0) h = yy2 - yy1;
+
+   return (Eina_Rectangle) { xx1, yy1, w, h };
 }
 
 EOLIAN Eina_Size2D
diff --git a/src/tests/edje/edje_test_edje.c b/src/tests/edje/edje_test_edje.c
index c47dccb693..3ea0a34acf 100644
--- a/src/tests/edje/edje_test_edje.c
+++ b/src/tests/edje/edje_test_edje.c
@@ -151,8 +151,14 @@ START_TEST(edje_test_calculate_parens)
int x, y, w, h;
Evas *evas = EDJE_TEST_INIT_EVAS();
Evas_Object *obj;
+   Eina_Rect rect;
 
obj = edje_object_add(evas);
+
+   /* A negative test case for efl_canvas_layout_calc_parts_extends */
+   rect = efl_canvas_layout_calc_parts_extends(obj);
+   fail_if(rect.w < 0 || rect.h < 0);
+
fail_unless(edje_object_file_set(obj, test_layout_get("test_parens.edj"), 
"test_group"));
 
evas_object_resize(obj, 100, 100);

-- 




[EGIT] [core/efl] master 04/05: evas: add a missing description for a newly added parameter

2017-10-27 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a191a052b8a80931b65a92a68ee776894f4a4c30

commit a191a052b8a80931b65a92a68ee776894f4a4c30
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Oct 27 11:45:34 2017 -0700

evas: add a missing description for a newly added parameter

Summary:
A new parameter "width_offset" was added to
evas_common_font_query_last_up_to_pos() internal function.
But, internal documentation was not updated.
So, it adds a simple description for the new parameter.

Test Plan: N/A

Reviewers: jpeg, cedric, herdsman, shilpasingh

Differential Revision: https://phab.enlightenment.org/D5035
---
 src/lib/evas/common/evas_font_query.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lib/evas/common/evas_font_query.c 
b/src/lib/evas/common/evas_font_query.c
index 8fe82dacbb..0fd5bc1360 100644
--- a/src/lib/evas/common/evas_font_query.c
+++ b/src/lib/evas/common/evas_font_query.c
@@ -816,6 +816,7 @@ end:
  * @param text_props the string object.
  * @param x the x boundary.
  * @param y the y boundary.
+ * @param width_offset the additional width only for allowing glyph's.
  * @return the position found, -1 on failure.
  */
 EAPI int

-- 




[EGIT] [core/efl] master 01/02: elementary index: fix wrong reference in its header document

2017-10-26 Thread Youngbok Shin
jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=084ce3d6e5a7ec250f6653e0f1291ba6a4c9c603

commit 084ce3d6e5a7ec250f6653e0f1291ba6a4c9c603
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Oct 26 14:36:32 2017 +0900

elementary index: fix wrong reference in its header document

Summary:
elm_index.h uses legacy keyword for ref tag.
The patch update each keywords for widgets.
And colon ":" character should be seperated from reference keyword.
It will remove doxygen warning messages from elm_index.h file.

Test Plan: N/A

Reviewers: cedric, raster, jpeg

Differential Revision: https://phab.enlightenment.org/D5387
---
 src/lib/elementary/elm_index.h | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/lib/elementary/elm_index.h b/src/lib/elementary/elm_index.h
index 7e697c5f8d..4b124eab6c 100644
--- a/src/lib/elementary/elm_index.h
+++ b/src/lib/elementary/elm_index.h
@@ -11,21 +11,21 @@
  *
  * Index widgets are by default hidden and just appear when the
  * user clicks over it's reserved area in the canvas. In its
- * default theme, it's an area one @ref Fingers "finger" wide on
+ * default theme, it's an area one @ref Elm_Fingers "finger" wide on
  * the right side of the index widget's container.
  *
  * When items on the index are selected, smart callbacks get
  * called, so that its user can make other container objects to
  * show a given area or child object depending on the index item
  * selected. You'd probably be using an index together with @ref
- * List "lists", @ref Genlist "generic lists" or @ref Gengrid
+ * Elm_List "lists", @ref Elm_Genlist "generic lists" or @ref Elm_Gengrid
  * "general grids".
  *
- * This widget inherits from the @ref Layout one, so that all the
+ * This widget inherits from the @ref Elm_Layout one, so that all the
  * functions acting on it also work for index objects.
  *
  * This widget emits the following signals, besides the ones sent from
- * @ref Layout:
+ * @ref Elm_Layout :
  * - @c "changed" - When the selected index item changes. @c
  *  event_info is the selected item's data pointer.
  * - @c "delay,changed" - When the selected index item changes, but

-- 




[EGIT] [core/efl] master 01/01: evas textblocke: add align=end for putting a text at the opposite side of LTR/RTL

2017-10-25 Thread Youngbok Shin
raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9906cd211f805d971733f0815617256429f0304e

commit 9906cd211f805d971733f0815617256429f0304e
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Oct 26 11:40:44 2017 +0900

evas textblocke: add align=end for putting a text at the opposite side of 
LTR/RTL

Summary:
There is a requirement for putting text at right side for LTR and at left 
side for RTL.
It satisfies that reqirement easily.

It also add "start" keywork for "align" tag. "start" will be same with 
"auto".
Intuitionally, developer will try "align=start" if they once saw 
"align=end" in elsewhere.
On the other hand, it only add "END" as new enumeration value for efl 
interface.
@feature

Test Plan: N/A

Reviewers: herdsman, cedric, jpeg, raster

Reviewed By: raster

Subscribers: woohyun

Differential Revision: https://phab.enlightenment.org/D5342
---
 src/lib/efl/interfaces/efl_text_format.eo   |  3 ++-
 src/lib/evas/canvas/evas_object_textblock.c | 36 ++---
 2 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/lib/efl/interfaces/efl_text_format.eo 
b/src/lib/efl/interfaces/efl_text_format.eo
index 0ec06a91d4..5e14893f06 100644
--- a/src/lib/efl/interfaces/efl_text_format.eo
+++ b/src/lib/efl/interfaces/efl_text_format.eo
@@ -14,7 +14,8 @@ enum Efl.Text.Format.Horizontal_Alignment_Type {
locale,  [[Respects locale's langauge settings]]
left,[[Text is placed at the left end of the line]]
right,   [[Text is placed at the right end of the line]]
-   center   [[Text is places at the center of the line]]
+   center,  [[Text is places at the center of the line]]
+   end  [[Text is places at opposite side of LTR/RTL (bidirectional) 
settings]]
 }
 
 enum Efl.Text.Format.Vertical_Alignment_Type {
diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 44006d2860..ea0a4ffb69 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -425,7 +425,8 @@ typedef enum _Evas_Textblock_Align_Auto
 {
EVAS_TEXTBLOCK_ALIGN_AUTO_NONE,
EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL,
-   EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE
+   EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE,
+   EVAS_TEXTBLOCK_ALIGN_AUTO_END
 } Evas_Textblock_Align_Auto;
 
 struct _Evas_Object_Textblock_Item
@@ -1957,6 +1958,8 @@ _format_command(Evas_Object *eo_obj, 
Evas_Object_Textblock_Format *fmt, const ch
  * @li "middle" - Alias for "center"
  * @li "left" - Puts the text at the left of the line
  * @li "right" - Puts the text at the right of the line
+ * @li "start" - Respects LTR/RTL settings. It is same with "auto"
+ * @li "end" - Puts the text at the opposite side of LTR/RTL settings
  * @li  - A number between 0.0 and 1.0 where 0.0 represents
  * "left" and 1.0 represents "right"
  * @li % - A percentage between 0% and 100% where 0%
@@ -1965,11 +1968,16 @@ _format_command(Evas_Object *eo_obj, 
Evas_Object_Textblock_Format *fmt, const ch
  * align=
  * @endcode
  */
-if (len == 4 && !strcmp(param, "auto"))
+if ((len == 4 && !strcmp(param, "auto")) ||
+(len == 5 && !strcmp(param, "start")))
   {
  fmt->halign_auto = EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL;
   }
-if (len == 6 && !strcmp(param, "locale"))
+else if (len == 3 && !strcmp(param, "end"))
+  {
+ fmt->halign_auto = EVAS_TEXTBLOCK_ALIGN_AUTO_END;
+  }
+else if (len == 6 && !strcmp(param, "locale"))
   {
  fmt->halign_auto = EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE;
   }
@@ -3537,6 +3545,20 @@ _layout_line_align_get(Ctxt *c)
  return 0.0;
   }
  }
+   else if ((c->align_auto == EVAS_TEXTBLOCK_ALIGN_AUTO_END) && c->ln)
+ {
+if (c->ln->items && c->ln->items->text_node &&
+  (c->ln->par->direction == EVAS_BIDI_DIRECTION_RTL))
+  {
+ /* Align left*/
+ return 0.0;
+  }
+else
+  {
+ /* Align right */
+ return 1.0;
+  }
+ }
else if (c->align_auto == EVAS_TEXTBLOCK_ALIGN_AUTO_LOCALE)
  {
 if (evas_common_language_direction_get() == EVAS_BIDI_DIRECTION_RTL)
@@ -15614,6 +15636,10 @@ _efl_canvas_text_efl_text_format_halign_set(Eo *obj, 
Efl_Canvas_Text_Data *o, Ef
  {
 _FMT_SET(halign_auto, EVAS_TEXTBLOCK_ALIGN_AUTO_NORMAL);

[EGIT] [core/efl] master 05/23: edje_cc: fix a memory leak issue when edje_cc writes images

2017-10-13 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=5a24f1404a2af4437f4002f326bfa15f24332fc3

commit 5a24f1404a2af4437f4002f326bfa15f24332fc3
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Oct 13 11:55:02 2017 -0700

edje_cc: fix a memory leak issue when edje_cc writes images

Summary:
If there is no given pathes for image files as parameter of edje_cc,
"img_dirs" will be NULL. Then, a local variable "load_err" is always
EVAS_LOAD_ERROR_NONE. Because of this, the "if" condition just after
EINA_LIST_FOREACH() will fail. It causes memory leak from "iw".
@fix

Test Plan: N/A

Reviewers: raster, cedric, jpeg, woohyun

Differential Revision: https://phab.enlightenment.org/D5285

Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/bin/edje/edje_cc_out.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c
index 391e46cc9f..d793cacc8b 100644
--- a/src/bin/edje/edje_cc_out.c
+++ b/src/bin/edje/edje_cc_out.c
@@ -1390,7 +1390,7 @@ data_write_images(Eet_File *ef, int *image_num)
   break;
}
   }
-if (load_err != EVAS_LOAD_ERROR_NONE)
+if (!img_dirs || (load_err != EVAS_LOAD_ERROR_NONE))
   {
  evas_object_image_file_set(im, img->entry, NULL);
  load_err = evas_object_image_load_error_get(im);

-- 




[EGIT] [core/efl] master 01/02: elementary interface/scrollable: remove duplicated function calls for bars

2016-04-26 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9e2b06cf9815a81665c58b564a2ea73f6f0dc421

commit 9e2b06cf9815a81665c58b564a2ea73f6f0dc421
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Apr 26 14:20:36 2016 -0700

elementary interface/scrollable: remove duplicated function calls for bars

Summary:
 *_visibility_apply() functions are called from each *_visibility_adjust()
function. And it is also called from _elm_scroll_scroll_bar_size_adjust().
So, calling *_visibility_apply() functions after calling
_elm_scroll_scroll_bar_size_adjust() is unnecessary.
@fix

Test Plan: N/A

Reviewers: raster, jaehwan, eagleeye, woohyun, cedric

Subscribers: jpeg

Differential Revision: https://phab.enlightenment.org/D3914

Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/lib/elementary/elm_interface_scrollable.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/lib/elementary/elm_interface_scrollable.c 
b/src/lib/elementary/elm_interface_scrollable.c
index f40552c..6c465b6 100644
--- a/src/lib/elementary/elm_interface_scrollable.c
+++ b/src/lib/elementary/elm_interface_scrollable.c
@@ -3513,8 +3513,6 @@ static void
 _elm_scroll_reconfigure(Elm_Scrollable_Smart_Interface_Data *sid)
 {
_elm_scroll_scroll_bar_size_adjust(sid);
-   _elm_scroll_scroll_bar_h_visibility_apply(sid);
-   _elm_scroll_scroll_bar_v_visibility_apply(sid);
_elm_scroll_page_adjust(sid);
 }
 

-- 




[EGIT] [core/efl] master 01/01: Evas: Add API to reinit the language and use it in elementary.

2016-04-08 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f4f9753c201c569b1a31f0b394d9352c80a7d9d0

commit f4f9753c201c569b1a31f0b394d9352c80a7d9d0
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Apr 8 11:17:51 2016 +0100

Evas: Add API to reinit the language and use it in elementary.

Summary:
evas_common_language_from_locale_* functions kept static pointers
inside of its functions. Once these function was called, it was never reset.
It made big problems for harfbuzz and hyphenation. Also, Elementary
provides elm_language_set() API. Then we need to support it fully.
@fix

Test Plan: Test case for hyphenation is included in Evas test suite.

Reviewers: raster, tasn, herdsman, woohyun, z-wony, Blackmole, minudf

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3864
---
 src/lib/elementary/elm_main.c  |  1 +
 src/lib/evas/Evas_Common.h | 10 +
 src/lib/evas/canvas/evas_main.c|  6 ++
 src/lib/evas/common/language/evas_language_utils.c | 19 ++--
 src/lib/evas/common/language/evas_language_utils.h |  3 +++
 src/tests/evas/evas_test_textblock.c   | 25 --
 6 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/src/lib/elementary/elm_main.c b/src/lib/elementary/elm_main.c
index eaafac4..528604c 100644
--- a/src/lib/elementary/elm_main.c
+++ b/src/lib/elementary/elm_main.c
@@ -1180,6 +1180,7 @@ EAPI void
 elm_language_set(const char *lang)
 {
setlocale(LC_ALL, lang);
+   evas_language_reinit();
_elm_win_translate();
edje_language_set(lang);
 }
diff --git a/src/lib/evas/Evas_Common.h b/src/lib/evas/Evas_Common.h
index cf6fb1b..d44644b 100644
--- a/src/lib/evas/Evas_Common.h
+++ b/src/lib/evas/Evas_Common.h
@@ -5116,6 +5116,16 @@ EAPI int  evas_string_char_prev_get(const char *str, int 
pos, int *decoded) EINA
 EAPI int  evas_string_char_len_get(const char *str) EINA_WARN_UNUSED_RESULT 
EINA_ARG_NONNULL(1);
 
 /**
+ * Reinitialize language from the environment.
+ *
+ * The locale can change while a process is running. This call tells evas to
+ * reload the locale from the environment like it does on start.
+ * @ingroup Evas_Utils
+ * @since 1.18
+ */
+EAPI voidevas_language_reinit(void);
+
+/**
  * @defgroup Evas_Keys Key Input Functions
  *
  * Functions which feed key events to the canvas.
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 38e901a..87061b6 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -705,4 +705,10 @@ evas_ector_get(Evas_Public_Data *e)
return e->engine.ector;
 }
 
+EAPI void
+evas_language_reinit(void)
+{
+   evas_common_language_reinit();
+}
+
 #include "canvas/evas_canvas.eo.c"
diff --git a/src/lib/evas/common/language/evas_language_utils.c 
b/src/lib/evas/common/language/evas_language_utils.c
index 19638d5..f8b38b6 100644
--- a/src/lib/evas/common/language/evas_language_utils.c
+++ b/src/lib/evas/common/language/evas_language_utils.c
@@ -45,6 +45,9 @@
 #define EXPLICIT_SCRIPT(script) \
(((script) != EVAS_SCRIPT_UNKNOWN) && ((script) > EVAS_SCRIPT_INHERITED))
 
+static char lang[6]; /* FIXME: Maximum length I know about */
+static char lang_full[32];
+
 static Evas_Script_Type
 _evas_common_language_char_script_search(Eina_Unicode unicode)
 {
@@ -135,7 +138,6 @@ evas_common_language_script_type_get(const Eina_Unicode 
*str, size_t len)
 const char *
 evas_common_language_from_locale_get(void)
 {
-   static char lang[6]; /* FIXME: Maximum length I know about */
if (*lang) return lang;
 
const char *locale;
@@ -163,8 +165,7 @@ evas_common_language_from_locale_get(void)
 const char *
 evas_common_language_from_locale_full_get(void)
 {
-   static char lang[32];
-   if (*lang) return lang;
+   if (*lang_full) return lang_full;
 
const char *locale;
locale = setlocale(LC_MESSAGES, NULL);
@@ -177,14 +178,20 @@ evas_common_language_from_locale_full_get(void)
  if ((c == '.') || (c == '@') || (c == ' ')) /* Looks like 
en_US.UTF8 or de_DE@euro or aa_ER UTF-8*/
 break;
   }
-strncpy(lang, locale, i);
-lang[i] = '\0';
-return lang;
+strncpy(lang_full, locale, i);
+lang_full[i] = '\0';
+return lang_full;
  }
 
return "";
 }
 
+void
+evas_common_language_reinit(void)
+{
+   *lang = *lang_full = '\0';
+}
+
 /*
  * @}
  */
diff --git a/src/lib/evas/common/language/evas_language_utils.h 
b/src/lib/evas/common/language/evas_language_utils.h
index 5e24912..8c7529a 100644
--- a/src/lib/evas/common/language/evas_language_utils.h
+++ b/src/lib/evas/common/language/evas_language_utils.h
@@ -131,5 +131,8 @@ evas_common_language_from_locale_get(void);
 
 const char *
 evas_common_lang

[EGIT] [core/elementary] master 01/02: modules: remove error message from dlsym() when a module is loaded

2016-03-18 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=7e801846e9c77328f42364f5b9aebe3d4b75b812

commit 7e801846e9c77328f42364f5b9aebe3d4b75b812
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Mar 18 11:54:00 2016 -0700

modules: remove error message from dlsym() when a module is loaded

Summary:
dlsym() could print error message when it tried to load
a nonexistent symbol. Whenever eina_module_load is called,
it checks __eina_module_init symbol. Even if there is no
symbol for init, module loading could be done well.
But, it will print an error message. So, we need to use
EINA_MODULE_INIT, EINA_MODULE_SHUTDOWN in every modules
for removing error messages.

Test Plan: N/A

Reviewers: woohyun, raster, Hermet, seoz, cedric

Reviewed By: cedric

Differential Revision: https://phab.enlightenment.org/D3805

Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/modules/access_output/mod.c| 14 ++
 .../datetime_input_ctxpopup/datetime_input_ctxpopup.c  | 14 ++
 src/modules/test_entry/mod.c   | 14 ++
 3 files changed, 42 insertions(+)

diff --git a/src/modules/access_output/mod.c b/src/modules/access_output/mod.c
index 3f15f32..0dff159 100644
--- a/src/modules/access_output/mod.c
+++ b/src/modules/access_output/mod.c
@@ -121,3 +121,17 @@ out_done_callback_set(void (*func) (void *data), const 
void *data)
cb_func = func;
cb_data = (void *)data;
 }
+
+static Eina_Bool
+_module_init(void)
+{
+   return EINA_TRUE;
+}
+
+static void
+_module_shutdown(void)
+{
+}
+
+EINA_MODULE_INIT(_module_init);
+EINA_MODULE_SHUTDOWN(_module_shutdown);
diff --git a/src/modules/datetime_input_ctxpopup/datetime_input_ctxpopup.c 
b/src/modules/datetime_input_ctxpopup/datetime_input_ctxpopup.c
index b8dc56c..198f095 100644
--- a/src/modules/datetime_input_ctxpopup/datetime_input_ctxpopup.c
+++ b/src/modules/datetime_input_ctxpopup/datetime_input_ctxpopup.c
@@ -382,3 +382,17 @@ elm_modapi_shutdown(void *m EINA_UNUSED)
 {
return 1; // succeed always
 }
+
+static Eina_Bool
+_module_init(void)
+{
+   return EINA_TRUE;
+}
+
+static void
+_module_shutdown(void)
+{
+}
+
+EINA_MODULE_INIT(_module_init);
+EINA_MODULE_SHUTDOWN(_module_shutdown);
diff --git a/src/modules/test_entry/mod.c b/src/modules/test_entry/mod.c
index 025d9b4..d2d5171 100644
--- a/src/modules/test_entry/mod.c
+++ b/src/modules/test_entry/mod.c
@@ -35,3 +35,17 @@ obj_longpress(Evas_Object *obj)
 {
printf("longpress: %p\n", obj);
 }
+
+static Eina_Bool
+_module_init(void)
+{
+   return EINA_TRUE;
+}
+
+static void
+_module_shutdown(void)
+{
+}
+
+EINA_MODULE_INIT(_module_init);
+EINA_MODULE_SHUTDOWN(_module_shutdown);

-- 




[EGIT] [core/efl] master 01/01: Evas font: allow ":fallbacks" keyword when Evas parses font keyword

2016-02-17 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=d9b93542cf36e9dbc1ad649c8c47f483554ce1cd

commit d9b93542cf36e9dbc1ad649c8c47f483554ce1cd
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Feb 17 09:23:06 2016 +

Evas font: allow ":fallbacks" keyword when Evas parses font keyword

Summary:
Developers could use fallback fonts using only font_fallbacks keyword.
The keyword is only allowed for Evas Textblock. It has to be common
feature for other text type objects.
Applying this patch, Text and Textgrid can add fallback fonts.
@feature

Test Plan:
Set font like the following example to Textblock, Text, Textgrid.
Sans:fallbacks=Inconsolata

Reviewers: tasn, herdsman, woohyun

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3704
---
 src/lib/evas/canvas/evas_font_dir.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/src/lib/evas/canvas/evas_font_dir.c 
b/src/lib/evas/canvas/evas_font_dir.c
index 3e544de..bfab21f 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -533,6 +533,11 @@ evas_font_name_parse(Evas_Font_Description *fdesc, const 
char *name)
  eina_stringshare_replace_length(&(fdesc->lang), tmp, tend - tmp);
  eina_stringshare_replace(&(fdesc->lang), 
evas_font_lang_normalize(fdesc->lang));
   }
+else if (!strncmp(name, ":fallbacks=", 11))
+  {
+ const char *tmp = name + 11;
+ eina_stringshare_replace_length(&(fdesc->fallbacks), tmp, tend - 
tmp);
+  }
  }
 }
 

-- 




[EGIT] [core/efl] master 01/01: Evas Text: Update text layout when ellipsis is changed without resize

2016-02-16 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=471c7635eed67509a24fc6dcc04de65622568f4c

commit 471c7635eed67509a24fc6dcc04de65622568f4c
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Feb 16 17:14:38 2016 +0200

Evas Text: Update text layout when ellipsis is changed without resize

Summary:
When only ellipsis is changed from 0.0~1.0 to -1.0 without resize,
the text is never updated. Because, previous state for ellipsis is never 
kept
and used properly to check when Evas Text needs to be updated.

It does not have any effect when ellipsis is changed from -1.0 to 0.0~1.0.
Because, Evas text always resize itself according to its text size.
So, necessarily, Evas text object has to be resized to the smaller size.
Commonly, Edje will handle its size if Evas text needs to be ellipsized.
@fix

Test Plan: Test case is included.

Reviewers: tasn, woohyun, herdsman

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3448
---
 src/lib/evas/canvas/evas_object_text.c |  7 ---
 src/tests/evas/evas_test_text.c| 30 ++
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_text.c 
b/src/lib/evas/canvas/evas_object_text.c
index 91fcfa1..d6d3ee5 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -995,6 +995,7 @@ _evas_text_ellipsis_set(Eo *eo_obj, Evas_Text_Data *o, 
double ellipsis)
if (o->cur.ellipsis == ellipsis) return;
 
evas_object_async_block(obj);
+   o->prev.ellipsis = o->cur.ellipsis;
o->cur.ellipsis = ellipsis;
o->changed = 1;
if (o->has_filter)
@@ -1596,7 +1597,7 @@ evas_object_text_init(Evas_Object *eo_obj)
 
Evas_Text_Data *o = obj->private_data;
/* alloc obj private data */
-   o->cur.ellipsis = -1.0;
+   o->prev.ellipsis = o->cur.ellipsis = -1.0;
o->prev = o->cur;
 #ifdef BIDI_SUPPORT
o->bidi_par_props = evas_bidi_paragraph_props_new();
@@ -2019,10 +2020,10 @@ evas_object_text_render_pre(Evas_Object *eo_obj,
 #endif
 
/* If object size changed and ellipsis is set */
-   if (((o->cur.ellipsis >= 0.0 ||
-   o->cur.ellipsis != o->prev.ellipsis) &&
+   if (((o->cur.ellipsis >= 0.0) &&
((obj->cur->geometry.w != o->last_computed.w) ||
(obj->cur->geometry.h != o->last_computed.h))) ||
+   (o->cur.ellipsis != o->prev.ellipsis) ||
(obj->cur->scale != obj->prev->scale) ||
(o->changed_paragraph_direction))
  {
diff --git a/src/tests/evas/evas_test_text.c b/src/tests/evas/evas_test_text.c
index 746fbee..a7c3242 100644
--- a/src/tests/evas/evas_test_text.c
+++ b/src/tests/evas/evas_test_text.c
@@ -6,6 +6,7 @@
 #include 
 
 #include 
+#include 
 
 #include "evas_suite.h"
 #include "evas_tests_helpers.h"
@@ -624,6 +625,34 @@ START_TEST(evas_text_bidi)
 END_TEST
 #endif
 
+START_TEST(evas_text_render)
+{
+   Ecore_Evas *ee = ecore_evas_buffer_new(500, 500);
+   Evas *evas = ecore_evas_get(ee);
+   Evas_Object *to;
+   const char *font = TEST_FONT_NAME;
+   Evas_Font_Size size = 14;
+   int w;
+
+   evas_font_hinting_set(evas, EVAS_FONT_HINTING_AUTO);
+   to = evas_object_text_add(evas);
+   evas_object_text_font_source_set(to, TEST_FONT_SOURCE);
+   evas_object_show(to);
+
+   /* Check the changing ellipsis is updated properly. */
+   evas_object_text_font_set(to, font, size);
+   evas_object_text_text_set(to, "Dynamically changing ellipsis!");
+   evas_object_text_ellipsis_set(to, 0.0);
+   evas_object_resize(to, 50, 100);
+   w = evas_object_text_horiz_advance_get(to);
+   evas_object_text_ellipsis_set(to, -1.0);
+   evas_render(evas);
+   ck_assert_int_gt(evas_object_text_horiz_advance_get(to), w);
+
+   ecore_evas_free(ee);
+}
+END_TEST
+
 void evas_test_text(TCase *tc)
 {
tcase_add_test(tc, evas_text_simple);
@@ -637,4 +666,5 @@ void evas_test_text(TCase *tc)
 #endif
 
tcase_add_test(tc, evas_text_unrelated);
+   tcase_add_test(tc, evas_text_render);
 }

-- 




[EGIT] [core/efl] master 01/01: Evas text: set NULL free'd pointers in evas_object_text_free()

2016-02-15 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b85ae776335e2e4d8c232c263eba94ecbc309ec5

commit b85ae776335e2e4d8c232c263eba94ecbc309ec5
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon Feb 15 10:41:37 2016 +

Evas text: set NULL free'd pointers in evas_object_text_free()

Summary:
_render_pre() function could be called for an object which is
going to be deleted. According to state changes of the object,
text could be recalculated with free'd pointers. It caused an
invalid read and crash.
@fix

Test Plan:
1. Apply D1747.
2. Run elementary_test.
3. Put any character in elm_entry and change paragraph direction.
4. Put any character again.
5. It can cause a crash which is caused by invalid read in Evas Text.

Reviewers: herdsman, woohyun, tasn, raster

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3445
---
 src/lib/evas/canvas/evas_object_text.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/src/lib/evas/canvas/evas_object_text.c 
b/src/lib/evas/canvas/evas_object_text.c
index 3ccac40..91fcfa1 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -1631,8 +1631,16 @@ evas_object_text_free(Evas_Object *eo_obj, 
Evas_Object_Protected_Data *obj)
if (o->font && obj->layer && obj->layer->evas)
   evas_font_free(obj->layer->evas->evas, o->font);
o->font = NULL;
+   o->cur.utf8_text = NULL;
+   o->cur.font = NULL;
+   o->cur.fdesc = NULL;
+   o->cur.source = NULL;
+   o->bidi_delimiters = NULL;
+   o->cur.text = NULL;
+   o->prev = o->cur;
 #ifdef BIDI_SUPPORT
evas_bidi_paragraph_props_unref(o->bidi_par_props);
+   o->bidi_par_props = NULL;
 #endif
 }
 

-- 




[EGIT] [core/efl] master 01/01: Evas textblock: Fix _dict_hyphen_load could return an uninitialized pointer

2016-02-12 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=0186f87c4905340d842d79ae8ad39648eec19c3d

commit 0186f87c4905340d842d79ae8ad39648eec19c3d
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Feb 12 09:46:33 2016 +

Evas textblock: Fix _dict_hyphen_load could return an uninitialized pointer

Summary:
If there are hyph_*.dic files except for requested language,
"dict" pointer could be return without initialized. It doesn't make any
warning messages when it is compiled. Normally, it is NULL implicitly.
But, it is good to set NULL explicitly for understanding code.

Test Plan: N/A

Reviewers: herdsman, tasn, woohyun

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3674
---
 src/lib/evas/canvas/evas_textblock_hyphenation.x | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_textblock_hyphenation.x 
b/src/lib/evas/canvas/evas_textblock_hyphenation.x
index 1a3f6c6..9c5f47c 100644
--- a/src/lib/evas/canvas/evas_textblock_hyphenation.x
+++ b/src/lib/evas/canvas/evas_textblock_hyphenation.x
@@ -31,7 +31,7 @@ _dict_hyphen_load(const char *lang)
 {
Eina_Iterator *it;
Eina_File_Direct_Info *dir;
-   void *dict;
+   void *dict = NULL;
 
it = eina_file_direct_ls(EVAS_DICTS_HYPHEN_DIR);
if (!it)

-- 




[EGIT] [core/elementary] master 01/01: label: add elm.swallow.background part to all of groups

2016-02-12 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=f2f435614bd32b50c8d7f00beb2b443161768f26

commit f2f435614bd32b50c8d7f00beb2b443161768f26
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Feb 12 19:39:53 2016 +0900

label: add elm.swallow.background part to all of groups

Summary:
elm.swallow.background part will be a default part for
widget's background image.

Test Plan: N/A

Reviewers: woohyun, cedric, kimcinoo

Differential Revision: https://phab.enlightenment.org/D3675
---
 data/themes/edc/elm/label.edc | 9 +
 1 file changed, 9 insertions(+)

diff --git a/data/themes/edc/elm/label.edc b/data/themes/edc/elm/label.edc
index f8123c3..e684e0c 100644
--- a/data/themes/edc/elm/label.edc
+++ b/data/themes/edc/elm/label.edc
@@ -12,6 +12,11 @@ group { name: "elm/label/base/default";
  description { state: "default" 0.0;
  }
   }
+  part { name: "elm.swallow.background"; type: SWALLOW;
+ clip_to: "label.text.clip";
+ description { state: "default" 0.0;
+ }
+  }
   part { name: "elm.text"; type: TEXTBLOCK;
  clip_to: "label.text.clip";
  scale: 1;
@@ -28,6 +33,7 @@ group { name: "elm/label/base/default";
 }
 
 group { name: "elm/label/base/marker";
+   inherit: "elm/label/base/default";
styles {
   style { name: "label_style2";
  base: "font="FNBD" font_size=10 text_class=tb_plain align=center 
color=# style=shadow,bottom shadow_color=#0080";
@@ -50,6 +56,7 @@ group { name: "elm/label/base/marker";
 }
 
 group { name: "elm/label/base/slide_long";
+   inherit: "elm/label/base/default";
script {
   public g_duration, g_stopslide, g_timer_id, g_anim_id;
 
@@ -167,6 +174,7 @@ group { name: "elm/label/base/slide_long";
 
 
 group { name: "elm/label/base/slide_short";
+   inherit: "elm/label/base/default";
script {
   public g_duration, g_stopslide, g_timer_id, g_anim_id;
 
@@ -280,6 +288,7 @@ group { name: "elm/label/base/slide_short";
 }
 
 group { name: "elm/label/base/slide_bounce";
+   inherit: "elm/label/base/default";
script {
   public g_duration, g_stopslide, g_timer_id, g_anim_id;
 

-- 




[EGIT] [core/elementary] master 01/01: entry: add elm_entry_select_region_get() API

2016-02-12 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=c0a0d801953593e51cfbf93faae98156cd55f3e4

commit c0a0d801953593e51cfbf93faae98156cd55f3e4
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Feb 12 20:18:05 2016 +0900

entry: add elm_entry_select_region_get() API

Summary:
Already, there is a way to set a selection region:
elm_entry_select_region_set()
The get() API also useful and there is needs for this
inside of elm_entry.c. Add the API and replace codes
in atspi_text_selection_get with the API.
@feature

Test Plan:
1. Run "elementary_test -to entry3"
2. Make a selection on text.
3. Press "Sel" button.

Reviewers: tasn, herdsman, cedric, woohyun, Jaehyun, Hermet

Subscribers: Hermet

Differential Revision: https://phab.enlightenment.org/D3639
---
 src/bin/test_entry.c |  9 +
 src/lib/elm_entry.c  | 21 +
 src/lib/elm_entry.eo |  6 ++
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/src/bin/test_entry.c b/src/bin/test_entry.c
index b679f3a..f79505e 100644
--- a/src/bin/test_entry.c
+++ b/src/bin/test_entry.c
@@ -35,6 +35,9 @@ my_entry_bt_3(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UN
 {
Evas_Object *en = data;
const char *s = elm_entry_selection_get(en);
+   int start = 0, end = 0;
+   elm_entry_select_region_get(en, , );
+   printf("SELECTION REGION: %d - %d\n", start, end);
printf("SELECTION:\n");
if (s) printf("%s\n", s);
printf("SELECTION PLAIN UTF8:\n");
@@ -256,6 +259,9 @@ my_scrolled_entry_bt_3(void *data, Evas_Object *obj 
EINA_UNUSED, void *event_inf
 {
Evas_Object *en = data;
const char *s = elm_entry_selection_get(en);
+   int start = 0, end = 0;
+   elm_entry_select_region_get(en, , );
+   printf("SELECTION REGION: %d - %d\n", start, end);
printf("SELECTION:\n");
if (s) printf("%s\n", s);
printf("SELECTION PLAIN UTF8:\n");
@@ -685,6 +691,9 @@ my_ent_bt_sel(void *data, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UN
 {
Evas_Object *en = data;
const char *s = elm_entry_selection_get(en);
+   int start = 0, end = 0;
+   elm_entry_select_region_get(en, , );
+   printf("SELECTION REGION: %d - %d\n", start, end);
printf("SELECTION:\n");
if (s) printf("%s\n", s);
printf("SELECTION PLAIN UTF8:\n");
diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c
index b6df9c8..70cc5ae 100644
--- a/src/lib/elm_entry.c
+++ b/src/lib/elm_entry.c
@@ -4176,6 +4176,22 @@ _elm_entry_select_region_set(Eo *obj EINA_UNUSED, 
Elm_Entry_Data *sd, int start,
edje_object_part_text_select_extend(sd->entry_edje, "elm.text");
 }
 
+EOLIAN static void
+_elm_entry_select_region_get(Eo *obj, Elm_Entry_Data *sd, int *start, int *end)
+{
+   if (!elm_entry_selection_get(obj))
+ {
+if (start) *start = -1;
+if (end) *end = -1;
+return;
+ }
+
+   if (start)
+ *start = edje_object_part_text_cursor_pos_get(sd->entry_edje, "elm.text", 
EDJE_CURSOR_SELECTION_BEGIN);
+   if (end)
+ *end = edje_object_part_text_cursor_pos_get(sd->entry_edje, "elm.text", 
EDJE_CURSOR_SELECTION_END);
+}
+
 EOLIAN static Eina_Bool
 _elm_entry_cursor_geometry_get(Eo *obj EINA_UNUSED, Elm_Entry_Data *sd, 
Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
 {
@@ -5428,12 +5444,9 @@ 
_elm_entry_elm_interface_atspi_text_selections_count_get(Eo *obj, Elm_Entry_Data
 EOLIAN static void
 _elm_entry_elm_interface_atspi_text_selection_get(Eo *obj, Elm_Entry_Data *_pd 
EINA_UNUSED, int selection_number, int *start_offset, int *end_offset)
 {
-   *start_offset = *end_offset = -1;
-   if (!elm_entry_selection_get(obj)) return;
if (selection_number != 0) return;
 
-   *start_offset = edje_object_part_text_cursor_pos_get(_pd->entry_edje, 
"elm.text", EDJE_CURSOR_SELECTION_BEGIN);
-   *end_offset = edje_object_part_text_cursor_pos_get(_pd->entry_edje, 
"elm.text", EDJE_CURSOR_SELECTION_END);
+   eo_do(obj, elm_obj_entry_select_region_get(start_offset, end_offset));
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/elm_entry.eo b/src/lib/elm_entry.eo
index 1609cb3..166c6c7 100644
--- a/src/lib/elm_entry.eo
+++ b/src/lib/elm_entry.eo
@@ -493,6 +493,12 @@ class Elm.Entry (Elm.Layout, Elm.Interface_Scrollable, 
Evas.Clickable_Interface,
   @since 1.9
 ]]
  }
+ get {
+[[Get the current position of the selection cursors in the entry.
+
+  @since 1.18
+]]
+ }
  values {
 start: int; [[The starting position.]]
 end: int; [[The end position.]]

-- 




[EGIT] [core/efl] master 01/01: Evas font: Use proper enum value for extrabold

2016-02-11 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b4f254e1a37d0e66d4bbf73c5e4531d52112b301

commit b4f254e1a37d0e66d4bbf73c5e4531d52112b301
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Feb 11 10:17:46 2016 +

Evas font: Use proper enum value for extrabold

Summary:
ULTRABOLD is identical to EXTRABOLD in freetype.
But, "extrabold" word is added for FC_WEIGHT_EXTRABOLD.
So, it has to be changed to use EXTRABOLD instead of
ULTRABOLD. It was mistake in my previous commit.
@fix

Test Plan: N/A

Reviewers: tasn, herdsman, woohyun

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3673
---
 src/lib/evas/canvas/evas_font_dir.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_font_dir.c 
b/src/lib/evas/canvas/evas_font_dir.c
index d357ce8..3e544de 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -339,7 +339,7 @@ static Style_Map _style_weight_map[] =
  {"semibold", EVAS_FONT_WEIGHT_SEMIBOLD},
  {"bold", EVAS_FONT_WEIGHT_BOLD},
  {"ultrabold", EVAS_FONT_WEIGHT_ULTRABOLD},
- {"extrabold", EVAS_FONT_WEIGHT_ULTRABOLD},
+ {"extrabold", EVAS_FONT_WEIGHT_EXTRABOLD},
  {"black", EVAS_FONT_WEIGHT_BLACK},
  {"extrablack", EVAS_FONT_WEIGHT_EXTRABLACK}
 };

-- 




[EGIT] [core/efl] master 01/01: Evas: Use proper language for harfbuzz shaping

2016-02-04 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=33ea5653477c97072c62c7d7d32b6263b89f8509

commit 33ea5653477c97072c62c7d7d32b6263b89f8509
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Feb 4 10:07:08 2016 +

Evas: Use proper language for harfbuzz shaping

Summary:
Evas Text, Textblock, Textgrid keeps own language information.
This language information could be vary from the result of setlocale().
Especially, Evas Textblock supports  tag. The language could be
changed in the middle of text. All of these language has to be used
for harfbuzz shaping.
@fix

Test Plan: N/A

Reviewers: herdsman, raster, woohyun, tasn

Reviewed By: tasn

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3628
---
 src/lib/evas/canvas/evas_object_text.c  | 3 ++-
 src/lib/evas/canvas/evas_object_textblock.c | 9 ++---
 src/lib/evas/canvas/evas_object_textgrid.c  | 6 --
 src/lib/evas/common/evas_font_ot.c  | 5 ++---
 src/lib/evas/common/evas_font_ot.h  | 2 +-
 src/lib/evas/common/evas_text_utils.c   | 9 +
 src/lib/evas/common/evas_text_utils.h   | 2 +-
 src/lib/evas/include/evas_private.h | 2 +-
 src/modules/evas/engines/software_generic/evas_engine.c | 4 ++--
 9 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_text.c 
b/src/lib/evas/canvas/evas_object_text.c
index 0402781..3ccac40 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -546,7 +546,8 @@ _evas_object_text_item_new(Evas_Object_Protected_Data *obj,
  {
 ENFN->font_text_props_info_create(ENDT,
   fi, str + pos, >text_props,
-  o->bidi_par_props, it->text_pos, len, 
EVAS_TEXT_PROPS_MODE_SHAPE);
+  o->bidi_par_props, it->text_pos, len, EVAS_TEXT_PROPS_MODE_SHAPE,
+  o->cur.fdesc->lang);
 _evas_object_text_item_update_sizes(obj, o, it);
  }
o->items = (Evas_Object_Text_Item *)
diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 17c37c4..743f35e 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -4086,7 +4086,8 @@ skip:
{
   ENFN->font_text_props_info_create(ENDT,
 cur_fi, str, >text_props, c->par->bidi_props,
-ti->parent.text_pos, run_len, 
EVAS_TEXT_PROPS_MODE_SHAPE);
+ti->parent.text_pos, run_len, 
EVAS_TEXT_PROPS_MODE_SHAPE,
+ti->parent.format->font.fdesc->lang);
}
 
  while ((queue->start + queue->off) < (run_start + run_len))
@@ -4765,7 +4766,8 @@ _layout_ellipsis_item_new(Ctxt *c, const 
Evas_Object_Textblock_Item *cur_it)
 
 ENFN->font_text_props_info_create(ENDT,
   cur_fi, _ellip_str, _ti->text_props,
-  c->par->bidi_props, ellip_ti->parent.text_pos, len, 
EVAS_TEXT_PROPS_MODE_SHAPE);
+  c->par->bidi_props, ellip_ti->parent.text_pos, len, 
EVAS_TEXT_PROPS_MODE_SHAPE,
+  ellip_ti->parent.format->font.fdesc->lang);
  }
 
_text_item_update_sizes(c, ellip_ti);
@@ -7541,7 +7543,8 @@ _layout_hyphen_item_new(Ctxt *c, const 
Evas_Object_Textblock_Text_Item *cur_ti)
 
 ENFN->font_text_props_info_create(ENDT,
   cur_fi, _hyphen_str, _ti->text_props,
-  c->par->bidi_props, hyphen_ti->parent.text_pos, len, 
EVAS_TEXT_PROPS_MODE_SHAPE);
+  c->par->bidi_props, hyphen_ti->parent.text_pos, len, 
EVAS_TEXT_PROPS_MODE_SHAPE,
+  hyphen_ti->parent.format->font.fdesc->lang);
  }
 
_text_item_update_sizes(c, hyphen_ti);
diff --git a/src/lib/evas/canvas/evas_object_textgrid.c 
b/src/lib/evas/canvas/evas_object_textgrid.c
index 7aa7216..bc2f9d9 100644
--- a/src/lib/evas/canvas/evas_object_textgrid.c
+++ b/src/lib/evas/canvas/evas_object_textgrid.c
@@ -189,7 +189,8 @@ evas_object_textgrid_textprop_get(Evas_Object *eo_obj, 
Evas_Textgrid_Data *o, Ei
 evas_common_text_props_script_set(&(glyph->props[idx]), script);
 ENFN->font_text_props_info_create(ENDT, script_fi, ,
   &(glyph->props[idx]), NULL, 0, 1,
-  EVAS_TEXT_PROPS_MODE_NONE);
+  EVAS_TEXT_PROPS_MODE_NONE,
+  o->cur.font_description->lang);
 (*used)++;
  }
else
@@ -1216,7 +1217,8 @@ _evas_textgrid_efl_text_propert

[EGIT] [core/elementary] master 07/12: win: fix a possible crash in elm_win_add

2016-02-04 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=adc6e4e0da809c6cb5bf284b482260bdbd42dd25

commit adc6e4e0da809c6cb5bf284b482260bdbd42dd25
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Feb 5 08:15:29 2016 +0100

win: fix a possible crash in elm_win_add

Summary:
The enginelist[0] can be NULL in some very rare cases.
Then enginelist[0] will be used for strcmp and it make a crash.
@fix

Test Plan: N/A

Reviewers: raster, cedric, woohyun, jypark, jaehwan

Differential Revision: https://phab.enlightenment.org/D3649

Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/elm_win.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c
index a3d139e..24041a9 100644
--- a/src/lib/elm_win.c
+++ b/src/lib/elm_win.c
@@ -3514,7 +3514,8 @@ _elm_win_finalize_internal(Eo *obj, Elm_Win_Data *sd, 
const char *name, Elm_Win_
  if (_accel_is_gl())
{
 // add all engines with selected engine first - if any
-  enginelist[p++] = ENGINE_GET();
+  if (ENGINE_GET())
+enginelist[p++] = ENGINE_GET();
 
 // add all engines with gl/accelerated ones first - only engines compiled
 #ifdef HAVE_ELEMENTARY_X
@@ -3558,8 +3559,9 @@ _elm_win_finalize_internal(Eo *obj, Elm_Win_Data *sd, 
const char *name, Elm_Win_
   if (elm_config_preferred_engine_get())
 enginelist[p++] = elm_config_preferred_engine_get();
 // add check _elm_gl_preference whether "none" or not
-  else if (!elm_config_accel_preference_get() ||
-   strcmp(elm_config_accel_preference_get(),"none"))
+  else if (_elm_config->engine &&
+   elm_config_accel_preference_get() &&
+   !strcmp(elm_config_accel_preference_get(),"none"))
 enginelist[p++] = _elm_config->engine;
 // add all engines with gl/accelerated ones first - only engines compiled
 #ifdef HAVE_ELEMENTARY_X

-- 




[EGIT] [core/efl] master 01/01: Evas textblock: Save memory space reducing unused hyphen dictionary loads

2016-02-04 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=931b225895609f90855151700566df816dc47681

commit 931b225895609f90855151700566df816dc47681
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Feb 4 11:29:03 2016 +0200

Evas textblock: Save memory space reducing unused hyphen dictionary loads

Summary:
Commonly, only few hyphenation dictionaries are used at a application.
So, loading all of dictionary files could cause waste of memory.
Evas textblock has to load hyphenation dictionaries only when it is
really needed.

Test Plan: N/A

Reviewers: woohyun, tasn, herdsman

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3626
---
 src/lib/evas/canvas/evas_object_textblock.c  |  4 +--
 src/lib/evas/canvas/evas_textblock_hyphenation.x | 34 ++--
 2 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 743f35e..841918b 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -1900,7 +1900,7 @@ _format_command(Evas_Object *eo_obj, 
Evas_Object_Textblock_Format *fmt, const ch
  * the hyphenation dictionaries on-demand. */
 if (fmt->wrap_hyphenation)
   {
- _dicts_hyphen_update(eo_obj);
+ _dicts_hyphen_init(eo_obj);
   }
 #endif
 
@@ -11976,7 +11976,7 @@ evas_object_textblock_free(Evas_Object *eo_obj)
   /* Hyphenation */
   if (o->hyphenating)
 {
-   _dicts_hyphen_detach();
+   _dicts_hyphen_detach(eo_obj);
 }
 #endif
 }
diff --git a/src/lib/evas/canvas/evas_textblock_hyphenation.x 
b/src/lib/evas/canvas/evas_textblock_hyphenation.x
index 930b5af..1a3f6c6 100644
--- a/src/lib/evas/canvas/evas_textblock_hyphenation.x
+++ b/src/lib/evas/canvas/evas_textblock_hyphenation.x
@@ -11,16 +11,12 @@ typedef struct
 
 /* Hyphenation dictionaries */
 static Dict_Hyphen _dicts_hyphen[64];
-static Eina_Bool  _dicts_hyphen_init = EINA_FALSE;
 static size_t _hyphens_num = 0;
 static size_t _hyphen_clients = 0;
 
 static void
-_dicts_hyphen_update(Eo *eo_obj)
+_dicts_hyphen_init(Eo *eo_obj)
 {
-   Eina_Iterator *it;
-   Eina_File_Direct_Info *dir;
-
Evas_Textblock_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
 
if (!o->hyphenating)
@@ -28,18 +24,22 @@ _dicts_hyphen_update(Eo *eo_obj)
 _hyphen_clients++;
 o->hyphenating = EINA_TRUE;
  }
+}
 
-   if (_dicts_hyphen_init) return;
+static void *
+_dict_hyphen_load(const char *lang)
+{
+   Eina_Iterator *it;
+   Eina_File_Direct_Info *dir;
+   void *dict;
 
it = eina_file_direct_ls(EVAS_DICTS_HYPHEN_DIR);
if (!it)
  {
 ERR("Couldn't list files in hyphens path: %s\n", 
EVAS_DICTS_HYPHEN_DIR);
-return;
+return NULL;
  }
 
-   _dicts_hyphen_init = EINA_TRUE;
-
/* The following is based on how files are installed in arch linux:
 * the files are in the pattern of "hyph_xx_XX.dic" (e.g. hyph_en_US.dic).
 * We are actually trying a bit more in case these are installed in another
@@ -49,7 +49,6 @@ _dicts_hyphen_update(Eo *eo_obj)
 const char *file = dir->path + dir->name_start;
 char *prefix_off; /* 'hyph_' prefix (may be in some distros) */
 char *dic_off; /* '.dic' file extension offset */
-void *dict;
 
 /* Check a few assumptions and reject if aren't met. */
 prefix_off = strstr(file, "hyph_");
@@ -57,7 +56,7 @@ _dicts_hyphen_update(Eo *eo_obj)
 if (!dic_off || ((size_t) (dic_off - file) + 4 != dir->name_length) ||
 (dic_off - file < 5)  ||
 ((dic_off - file > 0) && !prefix_off) ||
-strncmp(dic_off, ".dic", 4))
+strncmp(dic_off, ".dic", 4) || strncmp((dic_off - 5), lang, 
strlen(lang)))
   {
  continue;
   }
@@ -70,9 +69,12 @@ _dicts_hyphen_update(Eo *eo_obj)
   }
 _dicts_hyphen[_hyphens_num].lang = strndup(dic_off - 5, 5);
 _dicts_hyphen[_hyphens_num++].dict = dict;
+break;
  }
 
if (it) eina_iterator_free(it);
+
+   return dict;
 }
 
 static void
@@ -86,12 +88,15 @@ _dicts_hyphen_free(void)
  }
 
_hyphens_num = 0;
-   _dicts_hyphen_init = EINA_FALSE;
 }
 
 static inline void
-_dicts_hyphen_detach(void)
+_dicts_hyphen_detach(Eo *eo_obj)
 {
+   Evas_Textblock_Data *o = eo_data_scope_get(eo_obj, MY_CLASS);
+
+   if (!o->hyphenating) return;
+   o->hyphenating = EINA_FALSE;
_hyphen_clients--;
if (_hyphen_clients == 0) _dicts_hyphen_free();
 }
@@ -114,7 +119,8 @@ _hyphen_dict_get_from_lang(const char *lang)
  return _dicts_hyphen[i].dict;
   }
  }
-   return NULL;
+
+   return _dict_hyphen_load(lang);
 }
 
 static char *

-- 




[EGIT] [core/efl] master 01/01: Evas textgrid: Use default language according to locale

2016-02-03 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=757f8429922f0f5bbb4ae503a2bac643f42c4195

commit 757f8429922f0f5bbb4ae503a2bac643f42c4195
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Feb 3 09:34:32 2016 +

Evas textgrid: Use default language according to locale

Summary:
Use default language according to locale.
It's the same as the recent changes on Evas Text, Textblock.
@feature

Test Plan: N/A

Reviewers: herdsman, raster, tasn

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3642
---
 src/lib/evas/canvas/evas_object_textgrid.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/src/lib/evas/canvas/evas_object_textgrid.c 
b/src/lib/evas/canvas/evas_object_textgrid.c
index 0e10f3c..7aa7216 100644
--- a/src/lib/evas/canvas/evas_object_textgrid.c
+++ b/src/lib/evas/canvas/evas_object_textgrid.c
@@ -1157,6 +1157,10 @@ _evas_textgrid_efl_text_properties_font_set(Eo *eo_obj, 
Evas_Textgrid_Data *o, c
 
evas_object_async_block(obj);
font_description = evas_font_desc_new();
+
+   /* Set default language according to locale. */
+   eina_stringshare_replace(&(font_description->lang),
+evas_font_lang_normalize("auto"));
evas_font_name_parse(font_description, font_name);
if (o->cur.font_description &&
!evas_font_desc_cmp(font_description, o->cur.font_description) &&

-- 




[EGIT] [core/efl] master 03/03: Evas textblock: Use a common thickness and position at a underline.

2016-02-02 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=cd01636d76fd158a6253ab36e344781d0bfae3df

commit cd01636d76fd158a6253ab36e344781d0bfae3df
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Jan 27 13:14:52 2016 +

Evas textblock: Use a common thickness and position at a underline.

Summary:
If a underline is drawn with seperated thickness and position, it doesn't 
look good.
It will take the thickest and the lowest underline.

@feature

Test Plan:
Set the following markup text in Evas Textblock.

[EGIT] [core/efl] master 01/03: edje: Reduce duplicated item obj creations and deletions.

2016-02-02 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=6b12ae1e03e93a10b0120aa15d1ff40b022ec189

commit 6b12ae1e03e93a10b0120aa15d1ff40b022ec189
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Jan 12 13:20:19 2016 +

edje: Reduce duplicated item obj creations and deletions.

Summary:
When text is changed, all of objects for item tag are deleted
and recreated. It is unnecessary work and can cause performance
issues. Actually, many of application developers wonder why
item provider callback functions are called every text changes.
@fix

Test Plan:
Run elementary_test -to "entry emoticon"
When you make a very little change on text,
36 emoticon objects are recreated.

Reviewers: woohyun, jaehwan, herdsman, tasn

Reviewed By: tasn

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3537
---
 src/lib/edje/edje_entry.c | 112 ++
 1 file changed, 103 insertions(+), 9 deletions(-)

diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c
index ffcbc11..34f98a0 100644
--- a/src/lib/edje/edje_entry.c
+++ b/src/lib/edje/edje_entry.c
@@ -12,6 +12,7 @@ static Eina_Bool _edje_entry_imf_retrieve_selection_cb(void 
*data, Ecore_IMF_Con
 typedef struct _Entry  Entry;
 typedef struct _SelSel;
 typedef struct _Anchor Anchor;
+typedef struct _Item_Obj Item_Obj;
 
 static void _edje_entry_imf_cursor_location_set(Entry *en);
 static void _edje_entry_imf_cursor_info_set(Entry *en);
@@ -35,6 +36,7 @@ struct _Entry
Eina_List *anchorlist;
Eina_List *itemlist;
Eina_List *seq;
+   Item_Obj  *item_objs;
char  *selection;
Edje_Input_Panel_Lang  input_panel_lang;
Eina_Bool  composing : 1;
@@ -70,6 +72,14 @@ struct _Anchor
Eina_Bool  item : 1;
 };
 
+struct _Item_Obj
+{
+   EINA_INLIST;
+   Anchor*an;
+   char  *name;
+   Evas_Object   *obj;
+};
+
 #ifdef HAVE_ECORE_IMF
 static void
 _preedit_clear(Entry *en)
@@ -914,6 +924,89 @@ _edje_anchor_mouse_out_cb(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA
 }
 
 static void
+_item_obj_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+   Item_Obj *io = data;
+   Anchor *an = io->an;
+   Entry *en;
+
+   if (!an)
+ {
+ERR("Failed to free item object struct. Anchor is NULL!");
+return;
+ }
+
+   en = an->en;
+   en->item_objs = (Item_Obj 
*)eina_inlist_remove(EINA_INLIST_GET(en->item_objs),
+  EINA_INLIST_GET(io));
+   io->an = NULL;
+   free(io->name);
+   free(io);
+}
+
+static Evas_Object *
+_item_obj_get(Anchor *an, Evas_Object *o, Evas_Object *smart, Evas_Object 
*clip)
+{
+   Evas_Object *obj;
+   Item_Obj *io;
+   Entry *en = an->en;
+   Edje *ed = en->ed;
+
+   EINA_INLIST_FOREACH(en->item_objs, io)
+ {
+if (!io->an && io->name && !strcmp(an->name, io->name))
+  {
+ io->an = an;
+ return io->obj;
+  }
+ }
+
+   io = calloc(1, sizeof(Item_Obj));
+
+   obj = ed->item_provider.func
+  (ed->item_provider.data, smart,
+   en->rp->part->name, an->name);
+   evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _item_obj_del_cb, 
io);
+   evas_object_smart_member_add(obj, smart);
+   evas_object_stack_above(obj, o);
+   evas_object_clip_set(obj, clip);
+   evas_object_pass_events_set(obj, EINA_TRUE);
+   evas_object_show(obj);
+
+   io->an = an;
+   io->name = strdup(an->name);
+   io->obj = obj;
+   en->item_objs = (Item_Obj 
*)eina_inlist_append(EINA_INLIST_GET(en->item_objs),
+  EINA_INLIST_GET(io));
+
+   return io->obj;
+}
+
+static void
+_unused_item_objs_free(Entry *en)
+{
+   Item_Obj *io;
+   Eina_Inlist *l;
+
+   EINA_INLIST_FOREACH_SAFE(en->item_objs, l, io)
+ {
+if (!io->an)
+  {
+ if (io->obj)
+   {
+  evas_object_event_callback_del_full(io->obj, 
EVAS_CALLBACK_DEL, _item_obj_del_cb, io);
+  evas_object_del(io->obj);
+   }
+
+ en->item_objs = (Item_Obj 
*)eina_inlist_remove(EINA_INLIST_GET(en->item_objs),
+
EINA_INLIST_GET(io));
+ free(io->name);
+ free(io);
+  }
+ }
+}
+
+static void
 _anchors_update(Evas_Textblock_Cursor *c EINA_UNUSED, Evas_Object *o, Entry 
*en)
 {
Eina_List *l, *ll, *range = NULL;
@@ -944,14 +1037,7 @@ _anchors_update(Evas_Textblock_Cursor *c EINA_UNUSED, 
Evas_Object *o, Entry *en)
 
   

[EGIT] [core/efl] master 02/03: Evas Text/Textblock: Use locale for lang as default.

2016-02-02 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=d15d91e0da48fc589a6e38dfb9f8bca35846de70

commit d15d91e0da48fc589a6e38dfb9f8bca35846de70
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Jan 26 10:48:42 2016 +

Evas Text/Textblock: Use locale for lang as default.

Summary:
The configuration files for Fontconfig can describe
how font list is made according to language information.
EFL also set the language for each Evas textblock styles
and used for loading font list.

But, this is inconvenient to use if we want to apply language
for loading font list according to system-wide locale information.
This patch will apply locale information for font list if there is
no specific language in description.

And it also add [lang=auto] for Evas Textblock.
auto - It loads locale for language.
none - It disables language.

@feature

Test Plan: N/A

Reviewers: woohyun, herdsman, tasn

Subscribers: jpeg, cedric

Differential Revision: https://phab.enlightenment.org/D3344
---
 src/lib/evas/canvas/evas_font_dir.c | 12 
 src/lib/evas/canvas/evas_object_text.c  |  3 +++
 src/lib/evas/canvas/evas_object_textblock.c | 10 +-
 src/lib/evas/include/evas_private.h |  1 +
 4 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_font_dir.c 
b/src/lib/evas/canvas/evas_font_dir.c
index ffb4423..d357ce8 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -469,6 +469,17 @@ evas_font_desc_cmp(const Evas_Font_Description *a,
  (a->spacing == b->spacing) && (a->lang == b->lang));
 }
 
+const char *
+evas_font_lang_normalize(const char *lang)
+{
+   if (!lang || !strcmp(lang, "none")) return NULL;
+
+   if (!strcmp(lang, "auto"))
+ return evas_common_language_from_locale_full_get();
+
+   return lang;
+}
+
 void
 evas_font_name_parse(Evas_Font_Description *fdesc, const char *name)
 {
@@ -520,6 +531,7 @@ evas_font_name_parse(Evas_Font_Description *fdesc, const 
char *name)
   {
  const char *tmp = name + 6;
  eina_stringshare_replace_length(&(fdesc->lang), tmp, tend - tmp);
+ eina_stringshare_replace(&(fdesc->lang), 
evas_font_lang_normalize(fdesc->lang));
   }
  }
 }
diff --git a/src/lib/evas/canvas/evas_object_text.c 
b/src/lib/evas/canvas/evas_object_text.c
index 355c8f8..0402781 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -423,6 +423,9 @@ _evas_text_efl_text_properties_font_set(Eo *eo_obj, 
Evas_Text_Data *o, const cha
if (!(o->cur.font && !strcmp(font, o->cur.font)))
  {
 fdesc = evas_font_desc_new();
+
+/* Set default language according to locale. */
+eina_stringshare_replace(&(fdesc->lang), 
evas_font_lang_normalize("auto"));
 evas_font_name_parse(fdesc, font);
  }
else
diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 70a9e3a..2c7472a 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -1357,6 +1357,10 @@ _format_command(Evas_Object *eo_obj, 
Evas_Object_Textblock_Format *fmt, const ch
 if (!fmt->font.fdesc)
   {
  fmt->font.fdesc = evas_font_desc_new();
+
+ /* Set default language according to locale. */
+ eina_stringshare_replace(&(fmt->font.fdesc->lang),
+  evas_font_lang_normalize("auto"));
   }
 else if (!fmt->font.fdesc->is_new)
   {
@@ -1515,11 +1519,15 @@ _format_command(Evas_Object *eo_obj, 
Evas_Object_Textblock_Format *fmt, const ch
  * @subsection evas_textblock_style_lang Language
  *
  * Sets the language of the text for FontConfig.
+ * The value can either be a language text or one of presets:
+ * @li "auto" - Respects system locale settings as language
+ * @li "none" - Disable language support
  * @code
  * lang=
  * @endcode
  */
-eina_stringshare_replace(&(fmt->font.fdesc->lang), param);
+eina_stringshare_replace(&(fmt->font.fdesc->lang),
+ evas_font_lang_normalize(param));
  }
else if (cmd == colorstr)
  /**
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index ac814ba..664c144 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1591,6 +1591,7 @@ Evas_Font_Description *evas_font_desc_dup(const 
Evas_Font_Description *fdesc);
 void evas_font_desc_unr

[EGIT] [core/elementary] master 01/01: toolbar: Revert a theme change for shrink mode signals.

2016-01-06 Thread Youngbok Shin
jaehwan pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=352ba03e2cd782f7e2626a3f9462aef40faa3b34

commit 352ba03e2cd782f7e2626a3f9462aef40faa3b34
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Jan 6 19:38:05 2016 +0900

toolbar: Revert a theme change for shrink mode signals.

Summary:
It was changed for testing shrink mode signals.
But, it was unnecessary change for default theme.

Test Plan: N/A

Reviewers: zmike, jaehwan

Differential Revision: https://phab.enlightenment.org/D3536
---
 data/themes/edc/elm/toolbar.edc | 90 +++--
 1 file changed, 6 insertions(+), 84 deletions(-)

diff --git a/data/themes/edc/elm/toolbar.edc b/data/themes/edc/elm/toolbar.edc
index f6cb533..d932ff2 100644
--- a/data/themes/edc/elm/toolbar.edc
+++ b/data/themes/edc/elm/toolbar.edc
@@ -379,8 +379,6 @@ group { name: "elm/toolbar/item/default";
 #define DISABLE  4
script {   
   public btmode;
-  public vertical = 0;
-  public scroll = 0;
   public eval_mode(m) {
  new m1 = m & MASK;
  new d = m & DISABLE;
@@ -434,44 +432,6 @@ group { name: "elm/toolbar/item/default";
 }
  }
   }
-
-  public enable_scroll() {
- set_int(scroll, 1);
-
- if (get_int(vertical))
-set_state(PART:"base", "vert_scroll", 0.0);
- else
-set_state(PART:"base", "scroll", 0.0);
-  }
-
-  public disable_scroll() {
- set_int(scroll, 0);
-
- if (get_int(vertical))
-set_state(PART:"base", "vert", 0.0);
- else
-set_state(PART:"base", "default", 0.0);
-  }
-
-  public enable_vertical() {
- set_int(vertical, 1);
-
- if (get_int(scroll))
-set_state(PART:"base", "vert_scroll", 0.0);
- else
-set_state(PART:"base", "vert", 0.0);
- set_state(PART:"bend_clip", "vert", 0.0);
-  }
-
-  public disable_vertical() {
- set_int(vertical, 0);
-
- if (get_int(scroll))
-set_state(PART:"base", "scroll", 0.0);
- else
-set_state(PART:"base", "default", 0.0);
- set_state(PART:"bend_clip", "default", 0.0);
-  }
}
parts {
   part { name: "base"; type: SPACER;
@@ -481,14 +441,6 @@ group { name: "elm/toolbar/item/default";
 rel1.offset: -1 0;
 rel2.offset: 0 -1;
  }
- description { state: "scroll" 0.0;
-inherit: "default" 0.0;
-min: 80 0;
- }
- description { state: "vert_scroll" 0.0;
-inherit: "vert" 0.0;
-min: 0 80;
- }
   }
   part { name: "shadow1"; mouse_events: 0;
  description { state: "default" 0.0;
@@ -858,45 +810,15 @@ group { name: "elm/toolbar/item/default";
programs {
   program {
  signal: "elm,orient,horizontal"; source: "elm";
- script {
-disable_vertical();
- }
+ action: STATE_SET "default" 0.0;
+ target: "base";
+ target: "bend_clip";
   }
   program {
  signal: "elm,orient,vertical"; source: "elm";
- script {
-enable_vertical();
- }
-  }
-  program {
- signal: "elm,state,shrink,scroll"; source: "elm";
- script {
-enable_scroll();
- }
-  }
-  program {
- signal: "elm,state,shrink,none"; source: "elm";
- script {
-disable_scroll()
- }
-  }
-  program {
- signal: "elm,state,shrink,hide"; source: "elm";
- script {
-disable_scroll()
- }
-  }
-  program {
- signal: "elm,state,shrink,menu"; source: "elm";
- script {
-disable_scroll()
- }
-  }
-  program {
- signal: "elm,state,shrink,expand"; source: "elm";
- script {
-disable_scroll()
- }
+ action: STATE_SET "vert" 0.0;
+ target: "base";
+ target: "bend_clip";
   }
   
   program { name: "st0";

-- 




[EGIT] [core/efl] master 01/01: Evas Textblock: Fix NULL dereferencing issue

2015-12-13 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=fcba96384f40fbff6f3b6c7fb1fbe3d0d7e62699

commit fcba96384f40fbff6f3b6c7fb1fbe3d0d7e62699
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Sun Dec 13 17:13:13 2015 +0200

Evas Textblock: Fix NULL dereferencing issue

Summary:
Even if the given two cursor is NULL, it shouldn't be crashed.
@fix

Test Plan:
Test case included in Evas test suite.
Run "make check".

Reviewers: herdsman, tasn

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3422
---
 src/lib/evas/canvas/evas_object_textblock.c | 14 +++---
 src/tests/evas/evas_test_textblock.c|  8 
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index d2bd6ee..48e7b3b 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -9873,9 +9873,6 @@ _evas_textblock_cursor_range_text_markup_get(const 
Evas_Textblock_Cursor *cur1,
Eina_Strbuf *buf;
Evas_Textblock_Cursor *cur2;
 
-   if (!cur1 || !cur1->node) return NULL;
-   if (!_cur2 || !_cur2->node) return NULL;
-   if (cur1->obj != _cur2->obj) return NULL;
buf = eina_strbuf_new();
 
if (evas_textblock_cursor_compare(cur1, _cur2) > 0)
@@ -9984,9 +9981,6 @@ _evas_textblock_cursor_range_text_plain_get(const 
Evas_Textblock_Cursor *cur1, c
Evas_Object_Textblock_Node_Text *n1, *n2;
Evas_Textblock_Cursor *cur2;
 
-   if (!cur1 || !cur1->node) return NULL;
-   if (!_cur2 || !_cur2->node) return NULL;
-   if (cur1->obj != _cur2->obj) return NULL;
buf = eina_ustrbuf_new();
 
if (evas_textblock_cursor_compare(cur1, _cur2) > 0)
@@ -10111,7 +10105,13 @@ evas_textblock_cursor_range_formats_get(const 
Evas_Textblock_Cursor *cur1, const
 EAPI char *
 evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const 
Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format)
 {
-   Evas_Object_Protected_Data *obj = eo_data_scope_get(cur1->obj, 
EVAS_OBJECT_CLASS);
+   Evas_Object_Protected_Data *obj;
+
+   if (!cur1 || !cur1->node) return NULL;
+   if (!cur2 || !cur2->node) return NULL;
+   if (cur1->obj != cur2->obj) return NULL;
+
+   obj = eo_data_scope_get(cur1->obj, EVAS_OBJECT_CLASS);
evas_object_async_block(obj);
if (format == EVAS_TEXTBLOCK_TEXT_MARKUP)
   return _evas_textblock_cursor_range_text_markup_get(cur1, cur2);
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 6a0b7b1..467e164 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -2923,6 +2923,14 @@ START_TEST(evas_textblock_text_getters)
 "and now in english."));
 
/* Range get */
+   /* If one of the given cursor is NULL, it returns NULL. */
+   fail_if(evas_textblock_cursor_range_text_get(NULL, NULL,
+EVAS_TEXTBLOCK_TEXT_MARKUP));
+   fail_if(evas_textblock_cursor_range_text_get(cur, NULL,
+EVAS_TEXTBLOCK_TEXT_MARKUP));
+   fail_if(evas_textblock_cursor_range_text_get(NULL, cur,
+EVAS_TEXTBLOCK_TEXT_MARKUP));
+
Evas_Textblock_Cursor *main_cur = evas_object_textblock_cursor_get(tb);
evas_textblock_cursor_pos_set(main_cur, 2);
evas_textblock_cursor_pos_set(cur, 2);

-- 




[EGIT] [core/efl] master 01/01: Evas text: Fix Evas Text truncated text case.

2015-12-09 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=20ef85e307818c7c92927688ee6fd5d9dec1ee8f

commit 20ef85e307818c7c92927688ee6fd5d9dec1ee8f
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Dec 9 09:50:33 2015 +0200

Evas text: Fix Evas Text truncated text case.

Summary:
Evas Text only concerns about a advance of each text item.
When a width of last character is bigger than its advance, the last 
character can be truncated.
And the different line size calculation caused different aligning between 
Evas Text and Evas Textblock.
So, the width of last character will be considered in Evas Text just like 
Evas Textblock.
@fix

Test Plan:
The following text shows how the size calculation is different between Evas 
Textblock and Text.
Get native size from Evas Textblock and get width(geometry) of Evas Text.
You can see the width of Evas Text is bigger than native size of Evas 
Textblock.
(adv > width)
こんにちは。

The following text will be truncated without this patch.
(adv < width)
ନୂଁ

Reviewers: woohyun, tasn, herdsman

Subscribers: jpeg, cedric

Differential Revision: https://phab.enlightenment.org/D3004
---
 src/lib/evas/canvas/evas_object_text.c | 33 ++---
 src/tests/evas/evas_test_text.c| 65 ++
 2 files changed, 71 insertions(+), 27 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_text.c 
b/src/lib/evas/canvas/evas_object_text.c
index ff3e761..46b2039 100644
--- a/src/lib/evas/canvas/evas_object_text.c
+++ b/src/lib/evas/canvas/evas_object_text.c
@@ -54,7 +54,7 @@ struct _Evas_Text_Data
   Evas_Object_Text_Item*ellipsis_end;
   Evas_Coordw, h;
   int   advance;
-  int   advance_without_ellipsis;
+  int   width_without_ellipsis;
   Eina_Bool ellipsis;
} last_computed;
 
@@ -348,9 +348,9 @@ _evas_object_text_char_at_coords(const Evas_Object *eo_obj,
 }
 
 static Evas_Coord
-_evas_object_text_horiz_advance_without_ellipsis_get(const Evas_Text_Data *o)
+_evas_object_text_horiz_width_without_ellipsis_get(const Evas_Text_Data *o)
 {
-   return o->last_computed.advance_without_ellipsis;
+   return o->last_computed.width_without_ellipsis;
 }
 
 static Evas_Coord
@@ -685,7 +685,7 @@ _evas_object_text_layout(Evas_Object *eo_obj, 
Evas_Text_Data *o, Eina_Unicode *t
 {
Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, 
EVAS_OBJECT_CLASS);
EvasBiDiStrIndex *v_to_l = NULL;
-   Evas_Coord advance = 0;
+   Evas_Coord advance = 0, width = 0;
size_t pos, visual_pos;
int len = eina_unicode_strlen(text);
int l = 0, r = 0;
@@ -754,6 +754,8 @@ _evas_object_text_layout(Evas_Object *eo_obj, 
Evas_Text_Data *o, Eina_Unicode *t
 
if (text)
  {
+const Evas_Object_Text_Item *last_it = NULL;
+
 while (len > 0)
   {
  Evas_Font_Instance *script_fi = NULL;
@@ -791,15 +793,22 @@ _evas_object_text_layout(Evas_Object *eo_obj, 
Evas_Text_Data *o, Eina_Unicode *t
   pos += run_len;
   script_len -= run_len;
   len -= run_len;
+
+  if (it->w > 0)
+last_it = it;
}
   }
+
+width = advance;
+if (last_it)
+  width += last_it->w - last_it->adv;
  }
-   o->last_computed.advance_without_ellipsis = advance;
+   o->last_computed.width_without_ellipsis = width;
 
_evas_object_text_pad_get(eo_obj, o, , , NULL, NULL);
 
/* Handle ellipsis */
-   if (pos && (o->cur.ellipsis >= 0.0) && (advance + l + r > 
obj->cur->geometry.w) && (obj->cur->geometry.w > 0))
+   if (pos && (o->cur.ellipsis >= 0.0) && (width + l + r > 
obj->cur->geometry.w) && (obj->cur->geometry.w > 0))
  {
 Evas_Coord ellip_frame = obj->cur->geometry.w;
 Evas_Object_Text_Item *start_ellip_it = NULL, *end_ellip_it = NULL;
@@ -821,7 +830,7 @@ _evas_object_text_layout(Evas_Object *eo_obj, 
Evas_Text_Data *o, Eina_Unicode *t
   start_ellip_it = _layout_ellipsis_item_new(obj, o);
}
  o->last_computed.ellipsis_start = start_ellip_it;
- ellip_frame -= start_ellip_it->adv;
+ ellip_frame -= start_ellip_it->w;
   }
 if (o->cur.ellipsis != 1)
   {
@@ -837,18 +846,18 @@ _evas_object_text_layout(Evas_Object *eo_obj, 
Evas_Text_Data *o, Eina_Unicode *t
   end_ellip_it = _layout_ellipsis_item_new(obj, o);
}
  o->last_computed.ellipsis_end = end_ellip_it;
- ellip_frame -= end_ellip_it->adv;
+ ellip_frame -= end_elli

[EGIT] [core/efl] master 01/01: Evas textblock: Skip layout logic for an text item which doesn't have font.

2015-12-04 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=76fa1159c5713cd8e4bdacc88dd249603eacef24

commit 76fa1159c5713cd8e4bdacc88dd249603eacef24
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Dec 4 14:46:26 2015 +

Evas textblock: Skip layout logic for an text item which doesn't have font.

Summary:
Evas textblock could cause infinite loop if there is no fonts to use.
If there is no fonts, text_props.text_len is never set.
When text_props.text_len is 0, the for loop in _layout_par runs forever.
It is ridiculous to use Textblock without fonts. But, it shouldn't runs
infinite loop in any situation.

@fix

Test Plan:
1. Remove all of fonts in your EFL or Tizen device.
   (Or you can test it modifying some codes in Textblock by skipping load 
fonts.)
2. Run elementary_test -to entry3 or see any multiline textblocks.

Reviewers: tasn, herdsman, woohyun

Subscribers: cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3402
---
 src/lib/evas/canvas/evas_object_textblock.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index df4734a..51d244d 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -5173,7 +5173,8 @@ _layout_par(Ctxt *c)
 
 it = _ITEM(eina_list_data_get(i));
 /* Skip visually deleted items */
-if (it->visually_deleted)
+if (it->visually_deleted ||
+((it->type == EVAS_TEXTBLOCK_ITEM_TEXT) && !it->format->font.font))
   {
  //one more chance for ellipsis special cases
  if (c->o->ellip_prev_it == i)

-- 




[EGIT] [core/efl] master 01/01: Evas Textblock: Fix text disappear issue when text is made up with multiple items.

2015-12-02 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=809d8fdafea0b38aa21c40dd9460be82dffece3a

commit 809d8fdafea0b38aa21c40dd9460be82dffece3a
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Dec 2 09:36:47 2015 +0200

Evas Textblock: Fix text disappear issue when text is made up with multiple 
items.

Summary:
Text is disappearing when we resize a singleline Evas Textblock with 
ellipsis.
It is happened by putting a Text item at logical_items list without 
considering about logical position.
It is only happended the text is made up with multiple items.
@fix

Test Plan:
1. Run elementary_test
2. Click Label Ellipsis
3. Resize the window dynamically and see the result.

Reviewers: woohyun, tasn, herdsman

Subscribers: jpeg, subodh6129, shilpasingh, cedric

Maniphest Tasks: T2709

Differential Revision: https://phab.enlightenment.org/D3022
---
 src/lib/evas/canvas/evas_object_textblock.c | 11 +-
 src/tests/evas/evas_test_textblock.c| 31 +
 2 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index bb9e8af..879659c 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -4803,7 +4803,16 @@ _layout_handle_ellipsis(Ctxt *c, 
Evas_Object_Textblock_Item *it, Eina_List *i)
 
  if ((wrap > 0) && !IS_AT_END(ti, (size_t) wrap))
{
-  _layout_item_text_split_strip_white(c, ti, i, wrap);
+  Eina_List *l = i;
+
+  while (l)
+{
+   Evas_Object_Textblock_Item *iit = eina_list_data_get(l);
+   if (iit == _ITEM(ti)) break;
+   l = eina_list_prev(l);
+}
+
+  _layout_item_text_split_strip_white(c, ti, l, wrap);
   break;
}
  else if (wrap < 0)
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 70592b9..ad16793 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -2018,6 +2018,37 @@ START_TEST(evas_textblock_wrapping)
evas_object_textblock_size_formatted_get(tb, , );
ck_assert_int_le(w, ellip_w);
 
+   /* Ellipsis test for multiple items in singleline. */
+ {
+evas_object_resize(tb, 500, 500);
+evas_object_textblock_text_markup_set(tb, "ABC 한글한글 DEF");
+evas_textblock_cursor_format_prepend(cur, "+ ellipsis=1.0");
+evas_object_textblock_size_native_get(tb, , );
+evas_object_resize(tb, nw, nh);
+evas_object_textblock_size_formatted_get(tb, , );
+
+/* Make the object's width smaller. */
+for (i = 1; (nw / 5) <= (nw - i); i++)
+  {
+ evas_object_resize(tb, nw - i, nh);
+ evas_object_textblock_size_formatted_get(tb, , );
+ ck_assert_int_le(bw, w);
+  }
+
+/* Revert the object's width to native width. */
+for (; (nw - i) <= nw; i--)
+  {
+ evas_object_resize(tb, nw - i, nh);
+ evas_object_textblock_size_formatted_get(tb, , );
+ ck_assert_int_le(bw, w);
+  }
+
+/* The object resized same as native size.
+ * So, formatted width and native width should be same
+ * just like our first check. */
+ck_assert_int_eq(bw, w);
+ }
+
{
   double ellip;
   for(ellip = 0.0; ellip <= 1.0; ellip = ellip + 0.1)

-- 




[EGIT] [core/efl] master 01/01: efl: fix build failure when it builds with coverage.

2015-12-01 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=c421e519b0e834053023a600e8cad5b77173b4ad

commit c421e519b0e834053023a600e8cad5b77173b4ad
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Dec 1 15:30:04 2015 -0800

efl: fix build failure when it builds with coverage.

Summary:
When src/bin/efl/ builds with [--with-tests=coverage], it fails to find 
gcov lib.
The gcov/lcov related options has to be passed when it is builded.
And it only contained in EFL_CFLAGS, EFL_LIBS.
@fix

Test Plan:
Be sure the your enviroments to build src/bin/efl/.

1. Run ./autogen.sh --with-tests=coverage
2. make or make check
3. See the build errors.

Reviewers: raster, jpeg, cedric

Reviewed By: cedric

Subscribers: herdsman

Differential Revision: https://phab.enlightenment.org/D3370

Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/Makefile_Efl.am | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/Makefile_Efl.am b/src/Makefile_Efl.am
index ea0809d..aad9686 100644
--- a/src/Makefile_Efl.am
+++ b/src/Makefile_Efl.am
@@ -90,7 +90,7 @@ bin/efl/efl_debugd.c \
 bin/efl/efl_debug_common.c \
 bin/efl/efl_debug_common.h
 bin_efl_efl_debugd_CPPFLAGS = -I$(top_builddir)/src/bin/efl @EINA_CFLAGS@ 
@ECORE_CFLAGS@ @ECORE_CON_CFLAGS@
-bin_efl_efl_debugd_LDADD = @USE_EINA_INTERNAL_LIBS@ @USE_ECORE_INTERNAL_LIBS@ 
@USE_ECORE_CON_INTERNAL_LIBS@
+bin_efl_efl_debugd_LDADD = @EFL_LIBS@ @USE_EINA_INTERNAL_LIBS@ 
@USE_ECORE_INTERNAL_LIBS@ @USE_ECORE_CON_INTERNAL_LIBS@
 bin_efl_efl_debugd_DEPENDENCIES = @USE_EINA_INTERNAL_LIBS@ 
@USE_ECORE_INTERNAL_LIBS@ @USE_ECORE_CON_INTERNAL_LIBS@
 
 bin_efl_efl_debug_SOURCES = \
@@ -98,6 +98,6 @@ bin/efl/efl_debug.c \
 bin/efl/efl_debug_common.c \
 bin/efl/efl_debug_common.h
 bin_efl_efl_debug_CPPFLAGS = -I$(top_builddir)/src/bin/efl @EINA_CFLAGS@ 
@ECORE_CFLAGS@ @ECORE_CON_CFLAGS@
-bin_efl_efl_debug_LDADD = @USE_EINA_INTERNAL_LIBS@ @USE_ECORE_INTERNAL_LIBS@ 
@USE_ECORE_CON_INTERNAL_LIBS@
+bin_efl_efl_debug_LDADD = @EFL_LIBS@ @USE_EINA_INTERNAL_LIBS@ 
@USE_ECORE_INTERNAL_LIBS@ @USE_ECORE_CON_INTERNAL_LIBS@
 bin_efl_efl_debug_DEPENDENCIES = @USE_EINA_INTERNAL_LIBS@ 
@USE_ECORE_INTERNAL_LIBS@ @USE_ECORE_CON_INTERNAL_LIBS@
 

-- 




[EGIT] [core/efl] master 01/01: evas: fix a NULL dereference issue in font.

2015-12-01 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=917fdbd59706145ea37eae59a6a47f7b9d1e7ff3

commit 917fdbd59706145ea37eae59a6a47f7b9d1e7ff3
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Dec 1 15:03:27 2015 -0800

evas: fix a NULL dereference issue in font.

Summary:
eina_list_remove returns Eina_List pointer.
It could be NULL if the last list item is removed.
And the returned Eina_List pointer could be different from the given list.
So, calling free for fdir->data after fdir's address is changed is 
dangerous.
@fix

Test Plan: Run expedite or test app with evas_font_path_append() API.

Reviewers: stefan_schmidt, jpeg

Reviewed By: jpeg

Subscribers: stefan, jiin.moon, cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D3392

Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/evas/canvas/evas_font_dir.c | 15 +++
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/lib/evas/canvas/evas_font_dir.c 
b/src/lib/evas/canvas/evas_font_dir.c
index dc9ac20..b54e6c0 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -1122,7 +1122,7 @@ static Evas_Font_Dir *
 object_text_font_cache_dir_add(char *dir)
 {
Evas_Font_Dir *fd;
-   char *tmp, *tmp2;
+   char *tmp, *tmp2, *file;
Eina_List *fdir;
Evas_Font *fn;
 
@@ -1183,9 +1183,9 @@ object_text_font_cache_dir_add(char *dir)
 
/* directoy listing */
fdir = evas_file_path_list(dir, "*.ttf", 0);
-   while (fdir)
+   EINA_LIST_FREE(fdir, file)
  {
-   tmp = evas_file_path_join(dir, fdir->data);
+   tmp = evas_file_path_join(dir, file);
if (tmp)
  {
 fn = calloc(1, sizeof(Evas_Font));
@@ -1194,12 +1194,12 @@ object_text_font_cache_dir_add(char *dir)
  char *p;
 
  fn->type = 0;
- tmp2 = alloca(strlen(fdir->data) + 1);
- strcpy(tmp2, fdir->data);
+ tmp2 = alloca(strlen(file) + 1);
+ strcpy(tmp2, file);
  p = strrchr(tmp2, '.');
  if (p) *p = 0;
  fn->simple.name = eina_stringshare_add(tmp2);
- tmp2 = evas_file_path_join(dir, fdir->data);
+ tmp2 = evas_file_path_join(dir, file);
  if (tmp2)
{
   fn->path = eina_stringshare_add(tmp2);
@@ -1209,8 +1209,7 @@ object_text_font_cache_dir_add(char *dir)
   }
 free(tmp);
  }
-   fdir = eina_list_remove(fdir, fdir->data);
-   free(fdir->data);
+   free(file);
  }
 
/* fonts.alias */

-- 




[EGIT] [core/efl] master 01/01: evas: Add ExtraLight, ExtraBold for font weight.

2015-11-26 Thread Youngbok Shin
herdsman pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=507baf4891951933bcd8bd5baee5f9e716398fee

commit 507baf4891951933bcd8bd5baee5f9e716398fee
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Thu Nov 26 10:16:13 2015 +0200

evas: Add ExtraLight, ExtraBold for font weight.

Summary:
Evas supports UltraLight, UltraBold as font weight.
These terms have same weight value as ExtraLight, ExtraBold.
Some applications, for example, fontforge, use ExtraLight, ExtraBold terms 
for these weight values.
So, it would be better to support these terms, too.
@feature

Test Plan: None

Reviewers: tasn, woohyun, herdsman

Reviewed By: herdsman

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D3126
---
 src/lib/evas/canvas/evas_font_dir.c | 4 
 src/lib/evas/canvas/evas_object_textblock.c | 2 ++
 src/lib/evas/include/evas_private.h | 2 ++
 3 files changed, 8 insertions(+)

diff --git a/src/lib/evas/canvas/evas_font_dir.c 
b/src/lib/evas/canvas/evas_font_dir.c
index c3491cc..df0f5ef 100644
--- a/src/lib/evas/canvas/evas_font_dir.c
+++ b/src/lib/evas/canvas/evas_font_dir.c
@@ -268,12 +268,14 @@ static int _fc_weight_map[] =
FC_WEIGHT_NORMAL,
FC_WEIGHT_THIN,
FC_WEIGHT_ULTRALIGHT,
+   FC_WEIGHT_EXTRALIGHT,
FC_WEIGHT_LIGHT,
FC_WEIGHT_BOOK,
FC_WEIGHT_MEDIUM,
FC_WEIGHT_SEMIBOLD,
FC_WEIGHT_BOLD,
FC_WEIGHT_ULTRABOLD,
+   FC_WEIGHT_EXTRABOLD,
FC_WEIGHT_BLACK,
FC_WEIGHT_EXTRABLACK
 };
@@ -328,12 +330,14 @@ static Style_Map _style_weight_map[] =
  {"normal", EVAS_FONT_WEIGHT_NORMAL},
  {"thin", EVAS_FONT_WEIGHT_THIN},
  {"ultralight", EVAS_FONT_WEIGHT_ULTRALIGHT},
+ {"extralight", EVAS_FONT_WEIGHT_EXTRALIGHT},
  {"light", EVAS_FONT_WEIGHT_LIGHT},
  {"book", EVAS_FONT_WEIGHT_BOOK},
  {"medium", EVAS_FONT_WEIGHT_MEDIUM},
  {"semibold", EVAS_FONT_WEIGHT_SEMIBOLD},
  {"bold", EVAS_FONT_WEIGHT_BOLD},
  {"ultrabold", EVAS_FONT_WEIGHT_ULTRABOLD},
+ {"extrabold", EVAS_FONT_WEIGHT_ULTRABOLD},
  {"black", EVAS_FONT_WEIGHT_BLACK},
  {"extrablack", EVAS_FONT_WEIGHT_EXTRABLACK}
 };
diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 7a9aafc..bb9e8af 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -1443,12 +1443,14 @@ _format_command(Evas_Object *eo_obj, 
Evas_Object_Textblock_Format *fmt, const ch
  * @li "normal"
  * @li "thin"
  * @li "ultralight"
+ * @li "extralight"
  * @li "light"
  * @li "book"
  * @li "medium"
  * @li "semibold"
  * @li "bold"
  * @li "ultrabold"
+ * @li "extrabold"
  * @li "black"
  * @li "extrablack"
  * @code
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 26868c1..56407d9 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -485,12 +485,14 @@ enum _Evas_Font_Weight
EVAS_FONT_WEIGHT_NORMAL,
EVAS_FONT_WEIGHT_THIN,
EVAS_FONT_WEIGHT_ULTRALIGHT,
+   EVAS_FONT_WEIGHT_EXTRALIGHT,
EVAS_FONT_WEIGHT_LIGHT,
EVAS_FONT_WEIGHT_BOOK,
EVAS_FONT_WEIGHT_MEDIUM,
EVAS_FONT_WEIGHT_SEMIBOLD,
EVAS_FONT_WEIGHT_BOLD,
EVAS_FONT_WEIGHT_ULTRABOLD,
+   EVAS_FONT_WEIGHT_EXTRABOLD,
EVAS_FONT_WEIGHT_BLACK,
EVAS_FONT_WEIGHT_EXTRABLACK
 };

-- 




[EGIT] [misc/ephysics_tests] master 01/01: ephysics_test: remove error messages from edje calculations.

2015-11-19 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/misc/ephysics_tests.git/commit/?id=23138ef8b52614be5991a57cd1e08340a34a7d67

commit 23138ef8b52614be5991a57cd1e08340a34a7d67
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Fri Nov 20 04:08:55 2015 +0100

ephysics_test: remove error messages from edje calculations.

Summary:
There was missing [fixed] attributes in some parts.
It caused a lot of error messages when it loads edje.
@fix

Test Plan:
1. Run ephysics_test and click any test cases.
2. See error messages from your console.

Reviewers: cedric, dorileo, bdilly

Subscribers: CHAN

Differential Revision: https://phab.enlightenment.org/D3320

Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 data/themes/frame.edc   | 1 +
 data/themes/loading_bar.edc | 1 +
 2 files changed, 2 insertions(+)

diff --git a/data/themes/frame.edc b/data/themes/frame.edc
index 48fd754..6bc634c 100644
--- a/data/themes/frame.edc
+++ b/data/themes/frame.edc
@@ -129,6 +129,7 @@
 "  Y Axis   J - K"
 "  Z Axis  F - G";
}
+   fixed: 1 1;
 }
 description {
state: "msg1" 0.0;
diff --git a/data/themes/loading_bar.edc b/data/themes/loading_bar.edc
index 0b962d9..1ec78a4 100644
--- a/data/themes/loading_bar.edc
+++ b/data/themes/loading_bar.edc
@@ -34,6 +34,7 @@
rel2.to: "bar";
align: 0 0.5;
image.normal: "loading_knob.png";
+   fixed: 1 1;
 }
 description {
state: "end" 0.0;

-- 




[EGIT] [core/elementary] master 01/01: gengrid: Prevent duplicated selected function calls when item is unselected in the function.

2015-11-18 Thread Youngbok Shin
sanghyeonlee pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=df93efe12322fcc10d63cc700062ed398dca9bef

commit df93efe12322fcc10d63cc700062ed398dca9bef
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Wed Nov 18 19:39:13 2015 +0900

gengrid: Prevent duplicated selected function calls when item is unselected 
in the function.

Summary:
If item is unselected in a selected function,
selected function will be called once more from 
_elm_gengrid_elm_widget_on_focus.
It is happened when elm_gengrid object has no focus and one of item is 
selected by mouse up event.
To fix this issue, we need to set focus to item and keep the address of 
selected item before calling selected function.
@fix

Test Plan:
1. Install & Run efbb (Escape From Booty Bay: 
https://git.enlightenment.org/games/efbb.git/)
2. Select a level in the main menu. (It is using elm_gengrid).
3. See duplicated target images.

Reviewers: cedric, SanghyeonLee

Reviewed By: SanghyeonLee

Differential Revision: https://phab.enlightenment.org/D3323
---
 src/lib/elm_gengrid.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c
index ce18912..1b6f0b4 100644
--- a/src/lib/elm_gengrid.c
+++ b/src/lib/elm_gengrid.c
@@ -4125,13 +4125,16 @@ _item_select(Elm_Gen_Item *it)
evas_object_ref(obj);
it->walking++;
sd->walking++;
+
+   elm_object_item_focus_set(eo_it, EINA_TRUE);
+   sd->last_selected_item = eo_it;
+
if (it->func.func) it->func.func((void *)it->func.data, WIDGET(it), eo_it);
if (it->generation == sd->generation)
  {
 eo_do(WIDGET(it), 
eo_event_callback_call(EVAS_SELECTABLE_INTERFACE_EVENT_SELECTED, eo_it));
 if (_elm_config->atspi_mode)
   elm_interface_atspi_accessible_state_changed_signal_emit(eo_it, 
ELM_ATSPI_STATE_SELECTED, EINA_TRUE);
-elm_object_item_focus_set(eo_it, EINA_TRUE);
  }
 
it->walking--;
@@ -4144,9 +4147,8 @@ _item_select(Elm_Gen_Item *it)
   {
  it->del_cb(it);
  eo_del(eo_it);
+ sd->last_selected_item = NULL;
   }
-else
-  sd->last_selected_item = eo_it;
  }
evas_object_unref(obj);
 }

-- 




[EGIT] [core/efl] efl-1.16 02/02: edje: initialize map.zoom values to fix old *.edj compatibility issues.

2015-11-11 Thread Youngbok Shin
cedric pushed a commit to branch efl-1.16.

http://git.enlightenment.org/core/efl.git/commit/?id=62b6a86ef2eff43dcc1422885add9887c0afa93d

commit 62b6a86ef2eff43dcc1422885add9887c0afa93d
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Nov 10 14:52:57 2015 -0800

edje: initialize map.zoom values to fix old *.edj compatibility issues.

Summary:
The initial values for map.zoom.x(y) should be [1.0]: it means 100%.
The values from newly builded edj has been set properly.
But, if a part from old *.edj turns on map feature, map.zoom.x(y) will be 
set [0.0]: it means 0%.
So, the part will be invisible. We need to initialize these values.
@fix

Test Plan:
1. Build a *.edc file which has a part with [description.map.on: 1;] in EFL 
1.13.
2. See it works well in EFL 1.13.
3. Install EFL 1.14 or laters.
4. See the part is disappear.

Reviewers: Hermet, jpeg, cedric

Reviewed By: cedric

Subscribers: jiin.moon

Differential Revision: https://phab.enlightenment.org/D3302

Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/edje/edje_data.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
index 1dc890b..f499181 100644
--- a/src/lib/edje/edje_data.c
+++ b/src/lib/edje/edje_data.c
@@ -95,6 +95,7 @@ Eet_Data_Descriptor *_edje_edd_edje_filter_directory = NULL;
  data = eina_mempool_malloc(_emp_##Type, size); \
  memset(data, 0, size); \
  data->clip_to_id = -1; \
+ data->map.zoom.x = data->map.zoom.y = 1.0; \
  return data;   \
   } \
 \

-- 




[EGIT] [core/efl] efl-1.15 01/01: edje: initialize map.zoom values to fix old *.edj compatibility issues.

2015-11-11 Thread Youngbok Shin
cedric pushed a commit to branch efl-1.15.

http://git.enlightenment.org/core/efl.git/commit/?id=f61ba2bfce204c59cfd70e5d7410034d3ac4f784

commit f61ba2bfce204c59cfd70e5d7410034d3ac4f784
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Tue Nov 10 14:52:57 2015 -0800

edje: initialize map.zoom values to fix old *.edj compatibility issues.

Summary:
The initial values for map.zoom.x(y) should be [1.0]: it means 100%.
The values from newly builded edj has been set properly.
But, if a part from old *.edj turns on map feature, map.zoom.x(y) will be 
set [0.0]: it means 0%.
So, the part will be invisible. We need to initialize these values.
@fix

Test Plan:
1. Build a *.edc file which has a part with [description.map.on: 1;] in EFL 
1.13.
2. See it works well in EFL 1.13.
3. Install EFL 1.14 or laters.
4. See the part is disappear.

Reviewers: Hermet, jpeg, cedric

Reviewed By: cedric

Subscribers: jiin.moon

Differential Revision: https://phab.enlightenment.org/D3302

Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/edje/edje_data.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
index cedda6d..18d81fa 100644
--- a/src/lib/edje/edje_data.c
+++ b/src/lib/edje/edje_data.c
@@ -93,6 +93,7 @@ Eet_Data_Descriptor *_edje_edd_edje_filter_directory = NULL;
  data = eina_mempool_malloc(_emp_##Type, size); \
  memset(data, 0, size); \
  data->clip_to_id = -1; \
+ data->map.zoom.x = data->map.zoom.y = 1.0; \
  return data;   \
   } \
 \

-- 




[EGIT] [core/elementary] master 06/09: toolbar: remove a legacy code.

2015-11-09 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=c315ff1876afad4f340297291123072e6c4ee9d6

commit c315ff1876afad4f340297291123072e6c4ee9d6
Author: Youngbok Shin <youngb.s...@samsung.com>
Date:   Mon Nov 9 12:24:08 2015 -0800

toolbar: remove a legacy code.

Summary:
The icon is already sub object of VIEW(item) by content_set.
We don't need to make icon as a sub object of obj again.
It was used when VIEW(item) is Edje object.

Test Plan: None

Reviewers: Hermet, eagleeye, cedric

Reviewed By: cedric

Differential Revision: https://phab.enlightenment.org/D3249

Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/elm_toolbar.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c
index 5d46d1f..0484544 100644
--- a/src/lib/elm_toolbar.c
+++ b/src/lib/elm_toolbar.c
@@ -2412,7 +2412,6 @@ _item_new(Evas_Object *obj,
 elm_layout_signal_emit(VIEW(it), "elm,state,icon,visible", "elm");
 elm_layout_signal_emit(VIEW(it), "elm,icon,visible", "elm");
 evas_object_show(it->icon);
-elm_widget_sub_object_add(obj, it->icon);
  }
else
  {

-- 




[EGIT] [core/efl] efl-1.15 01/01: edje: Fix double free scenario caused by static pointer.

2015-08-27 Thread Youngbok Shin
tasn pushed a commit to branch efl-1.15.

http://git.enlightenment.org/core/efl.git/commit/?id=a3cc5810cbc6878e9aa458688d0fb8e397fd4d9e

commit a3cc5810cbc6878e9aa458688d0fb8e397fd4d9e
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Thu Aug 27 11:04:57 2015 +0100

edje: Fix double free scenario caused by static pointer.

Summary:
The result of evas_object_textblock_cursor_content_get() API has to be 
cleaned
by outside.  _edje_entry_cursor_content_get() is calling free() inside of 
the
function for handle the result using static pointer. But, the caller of
_edje_entry_cursor_content_get() is already handling the result using 
free().
It can cause double free problem.

The bigger issue is in elementary. See elm_entry_cursor_content_get() API's
document. The document advice developers to free the result when it is done.

@fix

Test Plan: N/A

Reviewers: tasn, raster, woohyun

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2991
---
 src/lib/edje/edje_entry.c | 9 +
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c
index 4a57d56..deeac86 100644
--- a/src/lib/edje/edje_entry.c
+++ b/src/lib/edje/edje_entry.c
@@ -3854,18 +3854,11 @@ _edje_entry_cursor_is_visible_format_get(Edje_Real_Part 
*rp, Edje_Cursor cur)
 char *
 _edje_entry_cursor_content_get(Edje_Real_Part *rp, Edje_Cursor cur)
 {
-   static char *s = NULL;
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
 
if (!c) return NULL;
-   if (s)
- {
-free(s);
-s = NULL;
- }
 
-   s = evas_textblock_cursor_content_get(c);
-   return s;
+   return evas_textblock_cursor_content_get(c);
 }
 
 void

-- 




[EGIT] [core/efl] master 01/01: edje: Fix double free scenario caused by static pointer.

2015-08-27 Thread Youngbok Shin
tasn pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=f210e429663d9bdb0eadf46d42c0ae8742bc615c

commit f210e429663d9bdb0eadf46d42c0ae8742bc615c
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Thu Aug 27 11:04:57 2015 +0100

edje: Fix double free scenario caused by static pointer.

Summary:
The result of evas_object_textblock_cursor_content_get() API has to be 
cleaned
by outside.  _edje_entry_cursor_content_get() is calling free() inside of 
the
function for handle the result using static pointer. But, the caller of
_edje_entry_cursor_content_get() is already handling the result using 
free().
It can cause double free problem.

The bigger issue is in elementary. See elm_entry_cursor_content_get() API's
document. The document advice developers to free the result when it is done.

@fix

Test Plan: N/A

Reviewers: tasn, raster, woohyun

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2991
---
 src/lib/edje/edje_entry.c | 9 +
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c
index b7289b4..237e49a 100644
--- a/src/lib/edje/edje_entry.c
+++ b/src/lib/edje/edje_entry.c
@@ -3871,18 +3871,11 @@ _edje_entry_cursor_is_visible_format_get(Edje_Real_Part 
*rp, Edje_Cursor cur)
 char *
 _edje_entry_cursor_content_get(Edje_Real_Part *rp, Edje_Cursor cur)
 {
-   static char *s = NULL;
Evas_Textblock_Cursor *c = _cursor_get(rp, cur);
 
if (!c) return NULL;
-   if (s)
- {
-free(s);
-s = NULL;
- }
 
-   s = evas_textblock_cursor_content_get(c);
-   return s;
+   return evas_textblock_cursor_content_get(c);
 }
 
 void

-- 




[EGIT] [core/elementary] master 01/01: multibuttonentry/spinner: Fix memory leak when eina_strbuf_string_steal is misused.

2015-08-07 Thread Youngbok Shin
hermet pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=ba7588d21a9ec9f859ef6da6ad0282a30a376df8

commit ba7588d21a9ec9f859ef6da6ad0282a30a376df8
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Fri Aug 7 15:15:45 2015 +0900

multibuttonentry/spinner: Fix memory leak when eina_strbuf_string_steal is 
misused.

Summary:
_elm_access_say() does not free the given text.
But, the text from eina_strbuf_string_steal() is not cared
from outside of _elm_access_say(), too.
It should be changed to eina_strbuf_string_get().

Test Plan: N/A

Reviewers: cedric, woohyun, kimcinoo, JackDanielZ, Hermet

Reviewed By: Hermet

Differential Revision: https://phab.enlightenment.org/D2918
---
 src/lib/elc_multibuttonentry.c | 9 +++--
 src/lib/elm_spinner.c  | 8 ++--
 2 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/src/lib/elc_multibuttonentry.c b/src/lib/elc_multibuttonentry.c
index 9c8d15a..f8558a3 100644
--- a/src/lib/elc_multibuttonentry.c
+++ b/src/lib/elc_multibuttonentry.c
@@ -463,7 +463,7 @@ _item_select(Evas_Object *obj,
{
   Evas_Object *ao, *po;
   Eina_Strbuf *buf;
-  const char *part, *text;
+  const char *part;
 
   part = elm.btn.text;
   po = (Evas_Object 
*)edje_object_part_object_get(elm_layout_edje_get(VIEW(it)), part);
@@ -475,8 +475,7 @@ _item_select(Evas_Object *obj,
 multi button entry item %s is selected,
 edje_object_part_text_get(elm_layout_edje_get(VIEW(it)), 
part));
 
-  text = (const char*)eina_strbuf_string_steal(buf);
-  _elm_access_say(text);
+  _elm_access_say(eina_strbuf_string_get(buf));
   eina_strbuf_free(buf);
}
   }
@@ -758,7 +757,6 @@ _item_new(Elm_Multibuttonentry_Data *sd,
// ACCESS
if (_elm_config-access_mode == ELM_ACCESS_MODE_ON)
  {
-const char *text;
 Eina_Strbuf *buf;
 buf = eina_strbuf_new();
 
@@ -766,8 +764,7 @@ _item_new(Elm_Multibuttonentry_Data *sd,
   multi button entry item %s is added,
   edje_object_part_text_get(elm_layout_edje_get(VIEW(item)), 
elm.btn.text));
 
-text = (const char*)eina_strbuf_string_steal(buf);
-_elm_access_say(text);
+_elm_access_say(eina_strbuf_string_get(buf));
 eina_strbuf_free(buf);
 
 _access_multibuttonentry_item_register(obj, eo_item, EINA_TRUE);
diff --git a/src/lib/elm_spinner.c b/src/lib/elm_spinner.c
index 46e884c..255135f 100644
--- a/src/lib/elm_spinner.c
+++ b/src/lib/elm_spinner.c
@@ -788,10 +788,8 @@ _access_activate_cb(void *data,
eina_strbuf_append_printf(buf, %s, %s, text,
  elm_layout_text_get(data, elm.text));
 
-   text = eina_strbuf_string_steal(buf);
+   _elm_access_say(eina_strbuf_string_get(buf));
eina_strbuf_free(buf);
-
-   _elm_access_say(text);
 }
 
 static char *
@@ -842,7 +840,6 @@ static void
 _access_increment_decrement_info_say(Evas_Object *obj,
  Eina_Bool is_incremented)
 {
-   char *text;
Eina_Strbuf *buf;
 
ELM_SPINNER_DATA_GET(obj, sd);
@@ -864,9 +861,8 @@ _access_increment_decrement_info_say(Evas_Object *obj,
eina_strbuf_append_printf
   (buf, %s, elm_object_text_get(sd-text_button));
 
-   text = eina_strbuf_string_steal(buf);
+   _elm_access_say(eina_strbuf_string_get(buf));
eina_strbuf_free(buf);
-   _elm_access_say(text);
 }
 
 static void

-- 




[EGIT] [core/elementary] elementary-1.15 01/01: multibuttonentry/spinner: Fix memory leak when eina_strbuf_string_steal is misused.

2015-08-07 Thread Youngbok Shin
hermet pushed a commit to branch elementary-1.15.

http://git.enlightenment.org/core/elementary.git/commit/?id=8746e5ad4b96f7b4cf0c9cdacbb1480458ef832a

commit 8746e5ad4b96f7b4cf0c9cdacbb1480458ef832a
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Fri Aug 7 15:15:45 2015 +0900

multibuttonentry/spinner: Fix memory leak when eina_strbuf_string_steal is 
misused.

Summary:
_elm_access_say() does not free the given text.
But, the text from eina_strbuf_string_steal() is not cared
from outside of _elm_access_say(), too.
It should be changed to eina_strbuf_string_get().

Test Plan: N/A

Reviewers: cedric, woohyun, kimcinoo, JackDanielZ, Hermet

Reviewed By: Hermet

Differential Revision: https://phab.enlightenment.org/D2918
---
 src/lib/elc_multibuttonentry.c | 9 +++--
 src/lib/elm_spinner.c  | 8 ++--
 2 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/src/lib/elc_multibuttonentry.c b/src/lib/elc_multibuttonentry.c
index 8255e35..3ab5641 100644
--- a/src/lib/elc_multibuttonentry.c
+++ b/src/lib/elc_multibuttonentry.c
@@ -453,7 +453,7 @@ _item_select(Evas_Object *obj,
{
   Evas_Object *ao, *po;
   Eina_Strbuf *buf;
-  const char *part, *text;
+  const char *part;
 
   part = elm.btn.text;
   po = (Evas_Object 
*)edje_object_part_object_get(elm_layout_edje_get(VIEW(it)), part);
@@ -465,8 +465,7 @@ _item_select(Evas_Object *obj,
 multi button entry item %s is selected,
 edje_object_part_text_get(elm_layout_edje_get(VIEW(it)), 
part));
 
-  text = (const char*)eina_strbuf_string_steal(buf);
-  _elm_access_say(text);
+  _elm_access_say(eina_strbuf_string_get(buf));
   eina_strbuf_free(buf);
}
   }
@@ -748,7 +747,6 @@ _item_new(Elm_Multibuttonentry_Data *sd,
// ACCESS
if (_elm_config-access_mode == ELM_ACCESS_MODE_ON)
  {
-const char *text;
 Eina_Strbuf *buf;
 buf = eina_strbuf_new();
 
@@ -756,8 +754,7 @@ _item_new(Elm_Multibuttonentry_Data *sd,
   multi button entry item %s is added,
   edje_object_part_text_get(elm_layout_edje_get(VIEW(item)), 
elm.btn.text));
 
-text = (const char*)eina_strbuf_string_steal(buf);
-_elm_access_say(text);
+_elm_access_say(eina_strbuf_string_get(buf));
 eina_strbuf_free(buf);
 
 _access_multibuttonentry_item_register(obj, eo_item, EINA_TRUE);
diff --git a/src/lib/elm_spinner.c b/src/lib/elm_spinner.c
index 42ff096..9fc90a2 100644
--- a/src/lib/elm_spinner.c
+++ b/src/lib/elm_spinner.c
@@ -776,10 +776,8 @@ _access_activate_cb(void *data,
eina_strbuf_append_printf(buf, %s, %s, text,
  elm_layout_text_get(data, elm.text));
 
-   text = eina_strbuf_string_steal(buf);
+   _elm_access_say(eina_strbuf_string_get(buf));
eina_strbuf_free(buf);
-
-   _elm_access_say(text);
 }
 
 static char *
@@ -830,7 +828,6 @@ static void
 _access_increment_decrement_info_say(Evas_Object *obj,
  Eina_Bool is_incremented)
 {
-   char *text;
Eina_Strbuf *buf;
 
ELM_SPINNER_DATA_GET(obj, sd);
@@ -852,9 +849,8 @@ _access_increment_decrement_info_say(Evas_Object *obj,
eina_strbuf_append_printf
   (buf, %s, elm_object_text_get(sd-text_button));
 
-   text = eina_strbuf_string_steal(buf);
+   _elm_access_say(eina_strbuf_string_get(buf));
eina_strbuf_free(buf);
-   _elm_access_say(text);
 }
 
 static void

-- 




[EGIT] [core/elementary] master 01/01: focus/list/genlist/gengrid: fix focus highlight issues on list widgets when auto focus enable is on.

2015-08-05 Thread Youngbok Shin
ami pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=1c7defb8ff900e399f9446807420e45576531cb3

commit 1c7defb8ff900e399f9446807420e45576531cb3
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Wed Aug 5 12:27:11 2015 +0530

focus/list/genlist/gengrid: fix focus highlight issues on list widgets when 
auto focus enable is on.

Summary:
elm_list, elm_genlist widgets are handle focus highlight
relying on only elm_widget_focus_highlight_enabled_get() API.
The API is not considered about auto focus highlight feature.
So, we need to check a flag for auto focus from _elm_config.
It resolves T2555.
@fix

Test Plan: elementary_test - List Focus or Genlist Focus

Reviewers: raster, cedric, SanghyeonLee, singh.amitesh

Reviewed By: SanghyeonLee, singh.amitesh

Maniphest Tasks: T2555

Differential Revision: https://phab.enlightenment.org/D2914
---
 src/bin/test_gengrid.c | 46 ++
 src/bin/test_genlist.c | 46 ++
 src/bin/test_list.c| 46 ++
 src/lib/elm_gengrid.c  |  6 +++---
 src/lib/elm_genlist.c  |  8 
 src/lib/elm_list.c |  6 +++---
 src/lib/elm_win.c  |  2 +-
 7 files changed, 137 insertions(+), 23 deletions(-)

diff --git a/src/bin/test_gengrid.c b/src/bin/test_gengrid.c
index ffd4857..93d7f38 100644
--- a/src/bin/test_gengrid.c
+++ b/src/bin/test_gengrid.c
@@ -1610,6 +1610,22 @@ _gg_focus_focus_move_policy_changed_cb(void *data 
EINA_UNUSED,
 }
 
 static void
+_gg_focus_win_auto_focus_enable_changed(void *data EINA_UNUSED,
+Evas_Object *obj,
+void *event_info EINA_UNUSED)
+{
+   elm_config_window_auto_focus_enable_set(elm_check_state_get(obj));
+}
+
+static void
+_gg_focus_win_auto_focus_animate_changed(void *data EINA_UNUSED,
+ Evas_Object *obj,
+ void *event_info EINA_UNUSED)
+{
+   elm_config_window_auto_focus_animate_set(elm_check_state_get(obj));
+}
+
+static void
 _gg_focus_focus_highlight_changed_cb(void *data,
  Evas_Object *obj,
  void *event_info EINA_UNUSED)
@@ -1666,8 +1682,10 @@ test_gengrid_focus(void *data EINA_UNUSED,
int i, n;
 
win = elm_win_util_standard_add(gengrid-focus, Gengrid Focus);
-   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
-   elm_win_focus_highlight_animate_set(win, EINA_TRUE);
+   elm_config_window_auto_focus_enable_set(EINA_TRUE);
+   elm_config_window_auto_focus_animate_set(EINA_TRUE);
+   elm_win_focus_highlight_enabled_set(win, EINA_FALSE);
+   elm_win_focus_highlight_animate_set(win, EINA_FALSE);
elm_win_autodel_set(win, EINA_TRUE);
 
bx_horiz = elm_box_add(win);
@@ -1734,10 +1752,30 @@ test_gengrid_focus(void *data EINA_UNUSED,
evas_object_show(bx_opt);
 
ck = elm_check_add(bx_opt);
-   elm_object_text_set(ck, Focus Highlight);
+   elm_object_text_set(ck, Window Auto Focus Enable);
+   elm_check_state_set(ck, EINA_TRUE);
+   evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(ck, changed,
+  _gg_focus_win_auto_focus_enable_changed,
+  NULL);
+   elm_box_pack_end(bx_opt, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(bx_opt);
+   elm_object_text_set(ck, Window Auto Focus Animate);
elm_check_state_set(ck, EINA_TRUE);
evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
evas_object_smart_callback_add(ck, changed,
+  _gg_focus_win_auto_focus_animate_changed,
+  NULL);
+   elm_box_pack_end(bx_opt, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(bx_opt);
+   elm_object_text_set(ck, Focus Highlight);
+   elm_check_state_set(ck, EINA_FALSE);
+   evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
+   evas_object_smart_callback_add(ck, changed,
   _gg_focus_focus_highlight_changed_cb,
   win);
elm_box_pack_end(bx_opt, ck);
@@ -1745,7 +1783,7 @@ test_gengrid_focus(void *data EINA_UNUSED,
 
ck = elm_check_add(bx_opt);
elm_object_text_set(ck, Focus Animation);
-   elm_check_state_set(ck, EINA_TRUE);
+   elm_check_state_set(ck, EINA_FALSE);
evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
evas_object_smart_callback_add(ck, changed,
   _gg_focus_focus_animate_changed_cb,
diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c
index 01b5311..9114665 100644
--- a/src/bin/test_genlist.c
+++ b/src/bin/test_genlist.c
@@ -4184,6 +4184,22 @@ _gl_focus_focus_on_selection_changed_cb(void *data, 
Evas_Object *obj

[EGIT] [core/elementary] master 03/11: calendar: show days of prev/next month.

2015-06-25 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=60396b1158df8a6ea4ca958c6ead92965ca61822

commit 60396b1158df8a6ea4ca958c6ead92965ca61822
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Thu Jun 25 16:13:56 2015 +0200

calendar: show days of prev/next month.

Summary:
Show days of previous and next month on the blank area of calendar.
@feature

Test Plan: See calendar widget on elementary_test.

Reviewers: raster, seoz, woohyun, cedric

Reviewed By: cedric

Differential Revision: https://phab.enlightenment.org/D2728

Signed-off-by: Cedric BAIL ced...@osg.samsung.com
---
 data/themes/edc/elm/calendar.edc | 26 ++
 src/lib/elm_calendar.c   | 57 
 2 files changed, 72 insertions(+), 11 deletions(-)

diff --git a/data/themes/edc/elm/calendar.edc b/data/themes/edc/elm/calendar.edc
index b1b15c8..35a0367 100644
--- a/data/themes/edc/elm/calendar.edc
+++ b/data/themes/edc/elm/calendar.edc
@@ -8,6 +8,9 @@
   style { name: calendar_date_today_style;\
  base: font=FN font_size=10 color=#3399ff style=glow 
glow_color=#3399ff18 align=center;\
   }\
+  style { name: calendar_date_disabled_style;\
+ base: font=FN font_size=10 color=#151515 style=shadow_bottom 
shadow_color=#ffc0 align=center;\
+  }\
 
 #define CAL_SPIN(_sufix, _signal_sufix, _text, _relative)\
   part { name: left_bt#_sufix; type: RECT;\
@@ -291,6 +294,10 @@
  inherit: default 0.0; \
  text.style: calendar_date_today_style; \
   } \
+  description { state: disabled 0.0; \
+ inherit: default 0.0; \
+ text.style: calendar_date_disabled_style; \
+  } \
} \
part { name: cit_#_pos.check; mouse_events: 0; \
   scale: 1; \
@@ -355,6 +362,25 @@
  target:  cit_#_pos.text; \
   } \
   program { \
+ name:cit_#_pos.enable; \
+ signal:  cit_#_pos,enable; \
+ source:  elm; \
+ script { \
+new st[31]; \
+new Float:vl; \
+get_state(PART:cit_#_pos.text, st, 30, vl); \
+if (!strcmp(st, disabled)) \
+  set_state(PART:cit_#_pos.text, default, 0.0); \
+ } \
+  } \
+  program { \
+ name:cit_#_pos.disable; \
+ signal:  cit_#_pos,disable; \
+ source:  elm; \
+ action:  STATE_SET disabled 0.0; \
+ target:  cit_#_pos.text; \
+  } \
+  program { \
  source: cit_#_pos.clicked; \
  signal: mouse,down,1; \
  source: cit_#_pos.event; \
diff --git a/src/lib/elm_calendar.c b/src/lib/elm_calendar.c
index 58d4d6c..18574a1 100644
--- a/src/lib/elm_calendar.c
+++ b/src/lib/elm_calendar.c
@@ -90,13 +90,15 @@ _elm_calendar_elm_layout_sizing_eval(Eo *obj, 
Elm_Calendar_Data *_pd EINA_UNUSED
 }
 
 static inline int
-_maxdays_get(struct tm *selected_time)
+_maxdays_get(struct tm *selected_time, int month_offset)
 {
int month, year;
 
-   month = selected_time-tm_mon;
+   month = (selected_time-tm_mon + month_offset) % 12;
year = selected_time-tm_year + 1900;
 
+   if (month  0) month += 12;
+
return _days_in_month
   [((!(year % 4))  ((!(year % 400)) || (year % 100)))][month];
 }
@@ -145,6 +147,28 @@ _today(Elm_Calendar_Data *sd,
sd-today_it = it;
 }
 
+static inline void
+_enable(Elm_Calendar_Data *sd,
+int it)
+{
+   char emission[32];
+
+   snprintf(emission, sizeof(emission), cit_%i,enable, it);
+   elm_layout_signal_emit(sd-obj, emission, elm);
+   sd-today_it = it;
+}
+
+static inline void
+_disable(Elm_Calendar_Data *sd,
+ int it)
+{
+   char emission[32];
+
+   snprintf(emission, sizeof(emission), cit_%i,disable, it);
+   elm_layout_signal_emit(sd-obj, emission, elm);
+   sd-today_it = it;
+}
+
 static char *
 _format_month_year(struct tm *selected_time)
 {
@@ -272,7 +296,7 @@ _access_calendar_item_register(Evas_Object *obj)
ELM_CALENDAR_DATA_GET(obj, sd);
 
day = 0;
-   maxdays = _maxdays_get(sd-shown_time);
+   maxdays = _maxdays_get(sd-shown_time, 0);
for (i = 0; i  42; i++)
  {
 if ((!day)  (i == sd-first_day_it)) day = 1;
@@ -355,7 +379,7 @@ _access_calendar_register(Evas_Object *obj)
 static void
 _populate(Evas_Object *obj)
 {
-   int maxdays, day, mon, yr, i;
+   int maxdays, prev_month_maxdays, day, mon, yr, i;
Elm_Calendar_Mark *mark;
char part[12], day_s[3];
struct tm first_day;
@@ -369,7 +393,8 @@ _populate(Evas_Object *obj)
sd-filling = EINA_FALSE;
if (sd-today_it  0) _not_today(sd);
 
-   maxdays = _maxdays_get(sd-shown_time);
+   maxdays = _maxdays_get(sd-shown_time, 0);
+   prev_month_maxdays = _maxdays_get(sd-shown_time, -1);
mon = sd-shown_time.tm_mon;
yr = sd-shown_time.tm_year;
 
@@ -459,9 +484,19 @@ _populate(Evas_Object *obj)
   }
 
 if ((day)  (day = maxdays))
-  snprintf(day_s

[EGIT] [core/elementary] master 09/11: colorselector: add safety check for NULL pointer from ecore_x_image_new().

2015-06-17 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=b52cbe891530f3e2e02ca1a2ff0a805380b017fd

commit b52cbe891530f3e2e02ca1a2ff0a805380b017fd
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Wed Jun 17 15:09:13 2015 +0200

colorselector: add safety check for NULL pointer from ecore_x_image_new().

Summary:
ecore_x_image_new() API can return NULL.
@fix

Reviewers: raster, woohyun, Hermet, cedric

Differential Revision: https://phab.enlightenment.org/D2667

Signed-off-by: Cedric BAIL ced...@osg.samsung.com
---
 src/lib/elm_colorselector.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/src/lib/elm_colorselector.c b/src/lib/elm_colorselector.c
index 3d99d63..78bcb93 100644
--- a/src/lib/elm_colorselector.c
+++ b/src/lib/elm_colorselector.c
@@ -620,6 +620,13 @@ _mouse_grab_pixels(void *data, int type EINA_UNUSED, void 
*event EINA_UNUSED)
scr = ecore_x_default_screen_get();
visual = ecore_x_default_visual_get(display, scr);
img = ecore_x_image_new(17, 17, visual, 
ecore_x_window_depth_get(sd-grab.xroot));
+
+   if (!img)
+ {
+ERR(Failed to get an image from ecore_x_image_new());
+return EINA_TRUE;
+ }
+
ecore_x_image_get(img, sd-grab.xroot, x - 8, y - 8, 0, 0, 17, 17);
src = ecore_x_image_data_get(img, bpl, rows, bpp);
if (!ecore_x_image_is_argb32_get(img))

-- 




[EGIT] [core/elementary] master 02/02: cnp: Add safety check for NULL pointer from malloc().

2015-06-14 Thread Youngbok Shin
jackdanielz pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=39ffbf1c921797f5885e782910fc0a14e903293a

commit 39ffbf1c921797f5885e782910fc0a14e903293a
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Mon Jun 15 08:08:34 2015 +0300

cnp: Add safety check for NULL pointer from malloc().

Summary:
It could make crash when malloc is failed.
@fix

Reviewers: raster, woohyun, Hermet, JackDanielZ, thiepha

Subscribers: JackDanielZ

Differential Revision: https://phab.enlightenment.org/D2671
---
 src/lib/elm_cnp.c | 25 ++---
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c
index 5d32fee..22e71e1 100644
--- a/src/lib/elm_cnp.c
+++ b/src/lib/elm_cnp.c
@@ -1024,18 +1024,21 @@ _x11_data_preparer_uri(Ecore_X_Event_Selection_Notify 
*notify,
   else
 p = files-files[i];
 
-  len = strlen(p);
-  strcpy(s, p);
-  if (i  (files-num_files - 1))
+  if (s)
 {
-   s[len] = '\n';
-   s[len + 1] = 0;
-   s += len + 1;
-}
-  else
-{
-   s[len] = 0;
-   s += len;
+   len = strlen(p);
+   strcpy(s, p);
+   if (i  (files-num_files - 1))
+ {
+s[len] = '\n';
+s[len + 1] = 0;
+s += len + 1;
+ }
+   else
+ {
+s[len] = 0;
+s += len;
+ }
 }
 
   if (uri[i])

-- 




[EGIT] [core/elementary] master 01/02: cnp: Fix memory leak issue.

2015-06-14 Thread Youngbok Shin
jackdanielz pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=b67c791c8a2186d57fa643fb347e68e59c731770

commit b67c791c8a2186d57fa643fb347e68e59c731770
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Mon Jun 15 08:05:02 2015 +0300

cnp: Fix memory leak issue.

Summary: Call efreet_uri_free() API to free Efreet_Uri structure.

Test Plan: None.

Reviewers: raster, cedric, woohyun, Hermet, thiepha, JackDanielZ

Subscribers: JackDanielZ

Differential Revision: https://phab.enlightenment.org/D2655
---
 src/lib/elm_cnp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c
index f4a487c..5d32fee 100644
--- a/src/lib/elm_cnp.c
+++ b/src/lib/elm_cnp.c
@@ -1061,6 +1061,7 @@ _x11_data_preparer_uri(Ecore_X_Event_Selection_Notify 
*notify,
   {
  free(p);
  stripstr = (char *)eina_memdup((unsigned char *)uri-path, 
strlen(uri-path), EINA_TRUE);
+ efreet_uri_free(uri);
  if (!stripstr) return EINA_FALSE;
   }
  }

-- 




[EGIT] [core/elementary] master 03/03: cnp: Add safety check for NULL pointer from strdup().

2015-06-12 Thread Youngbok Shin
jackdanielz pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=01be46a784115daa6235170ef9d33d4a6b8da0b1

commit 01be46a784115daa6235170ef9d33d4a6b8da0b1
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Fri Jun 12 11:02:05 2015 +0300

cnp: Add safety check for NULL pointer from strdup().

Summary:
It could make crash when strdup() is failed.
CID - 329115
@fix

Reviewers: raster, thiepha, woohyun, Hermet

Differential Revision: https://phab.enlightenment.org/D2673
---
 src/lib/elm_cnp.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c
index 12f71fb..31f7d14 100644
--- a/src/lib/elm_cnp.c
+++ b/src/lib/elm_cnp.c
@@ -1316,6 +1316,14 @@ _x11_text_converter(char *target, void *data, int size, 
void **data_ret, int *si
(const char **)data_ret, NULL);
 if (!*data_ret) *data_ret = strdup(No file);
 else *data_ret = strdup(*data_ret);
+
+if (!*data_ret)
+  {
+ ERR(Failed to allocate memory!);
+ *size_ret = 0;
+ return EINA_FALSE;
+  }
+
 *size_ret = strlen(*data_ret);
  }
return EINA_TRUE;

-- 




[EGIT] [core/elementary] master 01/03: cnp: Add safety check for NULL pointer from _elm_util_text_to_mkup().

2015-06-12 Thread Youngbok Shin
jackdanielz pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=e2fbca3297dfddcb5d0aef2a23007da3593ac6a5

commit e2fbca3297dfddcb5d0aef2a23007da3593ac6a5
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Fri Jun 12 10:56:22 2015 +0300

cnp: Add safety check for NULL pointer from _elm_util_text_to_mkup().

Summary:
_elm_util_text_to_mkup() func could return NULL when malloc is failed 
internally.
CID - 398441
@fix

Reviewers: raster, thiepha, woohyun, Hermet

Differential Revision: https://phab.enlightenment.org/D2668
---
 src/lib/elm_cnp.c | 8 
 1 file changed, 8 insertions(+)

diff --git a/src/lib/elm_cnp.c b/src/lib/elm_cnp.c
index 2916a6f..d2bd5e0 100644
--- a/src/lib/elm_cnp.c
+++ b/src/lib/elm_cnp.c
@@ -996,6 +996,14 @@ _x11_notify_handler_text(X11_Cnp_Selection *sel, 
Ecore_X_Event_Selection_Notify
 cnp_debug(Notify handler text %d %d %p\n, data-format,
   data-length, data-data);
 mkupstr = _elm_util_text_to_mkup((const char *)stripstr);
+
+if (!mkupstr)
+  {
+ ERR(Failed to convert text to markup text!);
+ free(stripstr);
+ goto end;
+  }
+
 cnp_debug(String is %s (from %s)\n, stripstr, data-data);
 /* TODO BUG: should never NEVER assume it's an elm_entry! */
 _elm_entry_entry_paste(sel-requestwidget, mkupstr);

-- 




[EGIT] [core/efl] master 01/05: eina: print error message when eina_module_load() fails.

2015-05-19 Thread Youngbok Shin
cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=b9cd26c906970d3ccdd7508e2a903a89ef5c630e

commit b9cd26c906970d3ccdd7508e2a903a89ef5c630e
Author: Youngbok Shin youngb.s...@samsung.com
Date:   Tue May 19 12:36:46 2015 +0200

eina: print error message when eina_module_load() fails.

Summary:
When dlopen() fails, eina_module_load() print error information using 
dlerror().
But, it is printed with WRN. If EINA_LOG_LEVEL is lower than WRN,
application developer is hard to see which has a problem.

Reviewers: woohyun, Hermet, raster, cedric

Reviewed By: cedric

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2536

Signed-off-by: Cedric BAIL ced...@osg.samsung.com
---
 src/lib/eina/eina_module.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/lib/eina/eina_module.c b/src/lib/eina/eina_module.c
index fbdeeeb..65c18ab 100644
--- a/src/lib/eina/eina_module.c
+++ b/src/lib/eina/eina_module.c
@@ -325,7 +325,7 @@ EAPI Eina_Bool eina_module_load(Eina_Module *m)
 
if (!dl_handle)
  {
-WRN(could not dlopen(\%s\, %s): %s, m-file, dlerror(), 
+ERR(could not dlopen(\%s\, %s): %s, m-file, dlerror(),
 (flag == RTLD_NOW) ? RTLD_NOW : RTLD_LAZY);
 return EINA_FALSE;
  }
@@ -337,7 +337,7 @@ EAPI Eina_Bool eina_module_load(Eina_Module *m)
if ((*initcall)() == EINA_TRUE)
   goto ok;
 
-   WRN(could not find eina's entry symbol %s inside module %s, or the init 
function failed,
+   ERR(could not find eina's entry symbol %s inside module %s, or the init 
function failed,
EINA_MODULE_SYMBOL_INIT, m-file);
dlclose(dl_handle);
return EINA_FALSE;

--