fix(fragment): fixed child fragment event dispatch (#3683)
This commit is contained in:
@@ -187,14 +187,15 @@ void lv_fragment_manager_replace(lv_fragment_manager_t * manager, lv_fragment_t
|
|||||||
bool lv_fragment_manager_send_event(lv_fragment_manager_t * manager, int code, void * userdata)
|
bool lv_fragment_manager_send_event(lv_fragment_manager_t * manager, int code, void * userdata)
|
||||||
{
|
{
|
||||||
LV_ASSERT_NULL(manager);
|
LV_ASSERT_NULL(manager);
|
||||||
lv_fragment_stack_item_t * top = _lv_ll_get_tail(&manager->stack);
|
lv_fragment_managed_states_t * p = NULL;
|
||||||
if(!top) return false;
|
_LV_LL_READ_BACK(&manager->attached, p) {
|
||||||
lv_fragment_managed_states_t * states = top->states;
|
if(!p->obj_created || p->destroying_obj) continue;
|
||||||
lv_fragment_t * instance = states->instance;
|
lv_fragment_t * instance = p->instance;
|
||||||
if(!instance) return false;
|
if(!instance) continue;
|
||||||
if(lv_fragment_manager_send_event(instance->child_manager, code, userdata)) return true;
|
if(lv_fragment_manager_send_event(instance->child_manager, code, userdata)) return true;
|
||||||
if(!states->cls->event_cb) return false;
|
if(p->cls->event_cb && p->cls->event_cb(instance, code, userdata)) return true;
|
||||||
return states->cls->event_cb(instance, code, userdata);
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t lv_fragment_manager_get_stack_size(lv_fragment_manager_t * manager)
|
size_t lv_fragment_manager_get_stack_size(lv_fragment_manager_t * manager)
|
||||||
|
|||||||
Reference in New Issue
Block a user