From 69b5d67367b8ae16d6e98734d2b07e40725d4a0f Mon Sep 17 00:00:00 2001 From: Youngbok Shin Date: Fri, 22 Jun 2018 12:15:11 +0300 Subject: [PATCH] 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(+) create mode 100644 src/tests/edje/data/test_textblock.edc 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(&ed, 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 0000000000..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); }