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; /** --