tasn pushed a commit to branch master.

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

commit 0e126b7091edcd9bd905fdbbe5b4f7d04f569586
Author: Shinwoo Kim <cinoo....@samsung.com>
Date:   Tue Jun 9 14:05:58 2015 +0100

    [layout] support mirrored set for layout which is using 
elm_layout_file_set()
    
    Summary: mirroed mode does not work, if layout uses elm_layout_file_set().
    
    Test Plan:
    the following is test code.
    [test.edc]
    collections {
    
       group {
          name: "layout/test";
    
          parts {
    
             part {
                name: "bg";
                type: RECT;
                   description {
                   state: "default" 0.0;
                   color: 255 255 0 100;
                }
             }
    
             part {
                name: "test.rect";
                type: RECT;
                   description {
                   state: "default" 0.0;
                   color: 255 0 0 255;
                   rel1.to: bg;
                   rel1.relative: 0.2 0.1;
                   rel2.to: bg;
                   rel2.relative: 0.5 0.2;
                }
             }
    
          } /* parts */
       } /* group */
    } /* collections */
    
    [test.c]
    //Compile with:
    //gcc -g test.c -o test `pkg-config --cflags --libs elementary`
    
    #include <Elementary.h>
    #include <Ecore_X.h>
    
    static void
    _bt_click(void *data, Evas_Object *obj, void *event_info)
    {
       Eina_Bool mirrored;
       Evas_Object *layout;
    
       layout = data;
    
       mirrored = elm_config_mirrored_get();
       mirrored = !mirrored;
       printf("mirred: %d\n", mirrored);
       elm_config_mirrored_set(mirrored);
    }
    
    EAPI_MAIN int
    elm_main(int argc, char **argv)
    {
       Evas_Object *win, *box, *layout, *bt, *check;
       char buf[PATH_MAX];
    
       elm_app_info_set(elm_main, "elementary", "./test.edj");
       elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
    
       win = elm_win_add(NULL, "Layout", ELM_WIN_BASIC);
       elm_win_autodel_set(win, EINA_TRUE);
    
       box = elm_box_add(win);
       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
       elm_win_resize_object_add(win, box);
       evas_object_show(box);
    
       // Adding layout and filling it with widgets
       layout = elm_layout_add(win);
       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
       snprintf(buf, sizeof(buf), "./test.edj");
       elm_layout_file_set(layout, buf, "layout/test");
       elm_box_pack_end(box, layout);
       evas_object_show(layout);
    
       bt = elm_button_add(win);
       elm_object_text_set(bt, "mirrored");
       evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
       evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
       evas_object_smart_callback_add(bt, "clicked", _bt_click, layout);
       elm_box_pack_end(box, bt);
       evas_object_show(bt);
    
       check = elm_check_add(win);
       elm_object_text_set(check, "test");
       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
       elm_box_pack_end(box, check);
       evas_object_show(check);
    
       evas_object_resize(win, 500, 500);
       evas_object_show(win);
    
       elm_run();
       elm_shutdown();
    
       return 0;
    }
    ELM_MAIN()
    
    Reviewers: seoz, raster, tasn, Hermet
    
    Subscribers: seoz, cedric
    
    Differential Revision: https://phab.enlightenment.org/D2142
---
 src/lib/elm_layout.c        | 21 +++++++++++++++------
 src/lib/elm_theme.c         |  1 -
 src/lib/elm_widget_layout.h |  1 +
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/lib/elm_layout.c b/src/lib/elm_layout.c
index 991112b..f49d158 100644
--- a/src/lib/elm_layout.c
+++ b/src/lib/elm_layout.c
@@ -359,13 +359,17 @@ _elm_layout_theme_internal(Eo *obj, Elm_Layout_Smart_Data 
*sd)
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
 
    /* function already prints error messages, if any */
-   if (!elm_widget_theme_object_set(obj, wd->resize_obj, sd->klass, sd->group,
-                                    elm_widget_style_get(obj)))
-     return EINA_FALSE;
+   if (!sd->file_set)
+     {
+        ret = elm_widget_theme_object_set
+                (obj, wd->resize_obj, sd->klass, sd->group,
+                 elm_widget_style_get(obj));
+     }
 
-   ret = _visuals_refresh(obj, sd);
+   if (ret)
+     evas_object_smart_callback_call(obj, SIG_THEME_CHANGED, NULL);
 
-   evas_object_smart_callback_call(obj, SIG_THEME_CHANGED, NULL);
+   ret = _visuals_refresh(obj, sd) && ret;
 
    return ret;
 }
@@ -852,7 +856,11 @@ _elm_layout_efl_file_file_set(Eo *obj, 
Elm_Layout_Smart_Data *sd, const char *fi
    int_ret =
      edje_object_file_set(wd->resize_obj, file, group);
 
-   if (int_ret) _visuals_refresh(obj, sd);
+   if (int_ret)
+     {
+        sd->file_set = EINA_TRUE;
+        _visuals_refresh(obj, sd);
+     }
    else
      ERR("failed to set edje file '%s', group '%s': %s",
          file, group,
@@ -874,6 +882,7 @@ _elm_layout_theme_set(Eo *obj, Elm_Layout_Smart_Data *sd, 
const char *klass, con
 {
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
 
+   if (sd->file_set) sd->file_set = EINA_FALSE;
    eina_stringshare_replace(&(sd->klass), klass);
    eina_stringshare_replace(&(sd->group), group);
    eina_stringshare_replace(&(wd->style), style);
diff --git a/src/lib/elm_theme.c b/src/lib/elm_theme.c
index e2db509..8fa383e 100644
--- a/src/lib/elm_theme.c
+++ b/src/lib/elm_theme.c
@@ -293,7 +293,6 @@ _elm_theme_set(Elm_Theme *th, Evas_Object *o, const char 
*clas, const char *grou
 
    if ((!clas) || (!group) || (!style)) return EINA_FALSE;
    if (!th) th = &(theme_default);
-
    snprintf(buf2, sizeof(buf2), "elm/%s/%s/%s", clas, group, style);
    if (!eina_hash_find(th->cache_style_load_failed, buf2))
      {
diff --git a/src/lib/elm_widget_layout.h b/src/lib/elm_widget_layout.h
index f109da6..0e0871c 100644
--- a/src/lib/elm_widget_layout.h
+++ b/src/lib/elm_widget_layout.h
@@ -84,6 +84,7 @@ typedef struct _Elm_Layout_Smart_Data
    Eina_Bool             restricted_calc_h : 1;
    Eina_Bool             can_access : 1; /**< This is true when all 
text(including textblock) parts can be accessible by accessibility. */
    Eina_Bool             destructed_is : 1; /**< This flag indicates if 
Elm_Layout destructor was called */
+   Eina_Bool             file_set : 1; /**< This flag indicates if Elm_Layout 
source file is set */
 } Elm_Layout_Smart_Data;
 
 /**

-- 


Reply via email to