diff --git a/src/core/lv_group.c b/src/core/lv_group.c index eb3ed793c..3e13b0b79 100644 --- a/src/core/lv_group.c +++ b/src/core/lv_group.c @@ -373,12 +373,6 @@ static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t *) bool can_move = true; bool can_begin = true; - if(group->obj_focus) { - lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_DEFOCUSED, get_indev(group)); - if(res != LV_RES_OK) return; - lv_obj_invalidate(*group->obj_focus); - } - for(;;) { if(obj_next == NULL) { if(group->wrap || obj_sentinel == NULL) { @@ -424,6 +418,14 @@ static void focus_next_core(lv_group_t * group, void * (*begin)(const lv_ll_t *) break; } + if(obj_next == group->obj_focus) return; /*There's only one visible object and it's already focused*/ + + if(group->obj_focus) { + lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_DEFOCUSED, get_indev(group)); + if(res != LV_RES_OK) return; + lv_obj_invalidate(*group->obj_focus); + } + group->obj_focus = obj_next; lv_res_t res = lv_event_send(*group->obj_focus, LV_EVENT_FOCUSED, get_indev(group));