From d4eb6a2ad321e3c82fe9d95437b63c1d62e6f4dc Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 3 Mar 2021 02:23:11 +0100 Subject: [PATCH] fix(layout): fix layout update trigger in lv_obj_add/clear_flag() --- src/lv_core/lv_obj.c | 20 +++++++++++++------- src/lv_core/lv_obj_pos.c | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/lv_core/lv_obj.c b/src/lv_core/lv_obj.c index e4e0f4b90..574f2c177 100644 --- a/src/lv_core/lv_obj.c +++ b/src/lv_core/lv_obj.c @@ -325,17 +325,18 @@ void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t f) { LV_ASSERT_OBJ(obj, MY_CLASS); + bool was_on_layout = lv_obj_is_layout_positioned(obj); + if(f & LV_OBJ_FLAG_HIDDEN) lv_obj_invalidate(obj); obj->flags |= f; - if(f & (LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) lv_signal_send(lv_obj_get_parent(obj), LV_SIGNAL_CHILD_CHG, obj); - - if(f & (LV_OBJ_FLAG_HIDDEN | LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2)) { + if(f & LV_OBJ_FLAG_HIDDEN) { lv_obj_invalidate(obj); - if(lv_obj_is_layout_positioned(obj)) { - lv_obj_update_layout(lv_obj_get_parent(obj), obj); - } + } + + if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) { + lv_obj_update_layout(lv_obj_get_parent(obj), obj); } } @@ -343,6 +344,8 @@ void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t f) { LV_ASSERT_OBJ(obj, MY_CLASS); + bool was_on_layout = lv_obj_is_layout_positioned(obj); + obj->flags &= (~f); if(f & LV_OBJ_FLAG_HIDDEN) { @@ -351,7 +354,10 @@ void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t f) lv_obj_update_layout(lv_obj_get_parent(obj), obj); } } - if(f & (LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) lv_signal_send(lv_obj_get_parent(obj), LV_SIGNAL_CHILD_CHG, obj); + + if((was_on_layout != lv_obj_is_layout_positioned(obj)) || (f & (LV_OBJ_FLAG_LAYOUT_1 | LV_OBJ_FLAG_LAYOUT_2))) { + lv_obj_update_layout(lv_obj_get_parent(obj), obj); + } } void lv_obj_add_state(lv_obj_t * obj, lv_state_t state) diff --git a/src/lv_core/lv_obj_pos.c b/src/lv_core/lv_obj_pos.c index c0f123e3c..3a5ddd992 100644 --- a/src/lv_core/lv_obj_pos.c +++ b/src/lv_core/lv_obj_pos.c @@ -153,7 +153,7 @@ void lv_obj_set_layout(lv_obj_t * obj, const void * layout) bool lv_obj_is_layout_positioned(const lv_obj_t * obj) { - if(lv_obj_has_flag_any(obj, LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) return false; + if(lv_obj_has_flag_any(obj, LV_OBJ_FLAG_HIDDEN | LV_OBJ_FLAG_IGNORE_LAYOUT | LV_OBJ_FLAG_FLOATING)) return false; lv_obj_t * parent = lv_obj_get_parent(obj); if(parent == NULL) return false;