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(&sd->file, file);
+   eina_stringshare_replace(&sd->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 = NULL, *key = NULL;
+
+   elm_init(1, NULL);
+   win = elm_win_add(NULL, "bg", ELM_WIN_BASIC);
+
+   bg = elm_bg_add(win);
+
+   /* This test case will check the following things for legacy widget.
+       * It is all about backward compatibility.
+       * 1. Set and Get file path, key even if there is no proper image file 
for the given file path.
+       * 2. Even if there is a proper image file and the given file path is 
interpreted to full file path,
+       *    the Get function should give original file path. NOT interpreted. 
*/
+   elm_bg_file_set(bg, "~/test.png", "test_key");
+   elm_bg_file_get(bg, &file, &key);
+
+   ck_assert(file != NULL);
+   ck_assert(!strcmp(file, "~/test.png"));
+   ck_assert(key != NULL);
+   ck_assert(!strcmp(key, "test_key"));
+
+   elm_shutdown();
+}
+END_TEST
+
 void elm_test_bg(TCase *tc EINA_UNUSED)
 {
    tcase_add_test(tc, elm_bg_legacy_type_check);
+   tcase_add_test(tc, elm_bg_legacy_file_set_get_check);
 }

-- 


Reply via email to