1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

add LV_PROTECT_CLICK_FOCUS

This commit is contained in:
Gabor Kiss-Vamosi 2018-09-03 15:45:12 +02:00
parent 298cba3c01
commit cafdce69fe
2 changed files with 21 additions and 12 deletions

View File

@ -385,7 +385,7 @@ static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data)
} }
/*Release happened*/ /*Release happened*/
else if(data->state == LV_INDEV_STATE_REL && i->proc.last_state == LV_INDEV_STATE_PR) { else if(data->state == LV_INDEV_STATE_REL && i->proc.last_state == LV_INDEV_STATE_PR) {
/*The user might clear the key it was released. Always release the pressed key*/ /*The user might clear the key when it was released. Always release the pressed key*/
data->key = i->proc.last_key; data->key = i->proc.last_key;
if((data->key == LV_GROUP_KEY_NEXT) || if((data->key == LV_GROUP_KEY_NEXT) ||
@ -591,17 +591,25 @@ static void indev_proc_release(lv_indev_proc_t * proc)
/*Handle click focus*/ /*Handle click focus*/
#if USE_LV_GROUP #if USE_LV_GROUP
lv_group_t * g = lv_obj_get_group(proc->act_obj); /*Check, if the parent is in a group focus on it.*/
lv_obj_t * parent = proc->act_obj; if(lv_obj_is_protected(proc->act_obj, LV_PROTECT_CLICK_FOCUS) == false) { /*Respect the click protection*/
while(g == NULL) { lv_group_t * g = lv_obj_get_group(proc->act_obj);
parent = lv_obj_get_parent(parent); lv_obj_t * parent = proc->act_obj;
if(parent == NULL) break;
g = lv_obj_get_group(parent);
}
if(g != NULL && parent != NULL) while(g == NULL) {
if(lv_group_get_click_focus(g)) { parent = lv_obj_get_parent(parent);
lv_group_focus_obj(parent); if(parent == NULL) break;
if(lv_obj_is_protected(parent, LV_PROTECT_CLICK_FOCUS)) { /*Ignore is the protected against click focus*/
parent = NULL;
break;
}
g = lv_obj_get_group(parent);
}
if(g != NULL && parent != NULL)
if(lv_group_get_click_focus(g)) {
lv_group_focus_obj(parent);
}
} }
#endif #endif

View File

@ -157,7 +157,8 @@ typedef enum
LV_PROTECT_PARENT = 0x02, /*Prevent automatic parent change (e.g. in lv_page)*/ LV_PROTECT_PARENT = 0x02, /*Prevent automatic parent change (e.g. in lv_page)*/
LV_PROTECT_POS = 0x04, /*Prevent automatic positioning (e.g. in lv_cont layout)*/ LV_PROTECT_POS = 0x04, /*Prevent automatic positioning (e.g. in lv_cont layout)*/
LV_PROTECT_FOLLOW = 0x08, /*Prevent the object be followed in automatic ordering (e.g. in lv_cont PRETTY layout)*/ LV_PROTECT_FOLLOW = 0x08, /*Prevent the object be followed in automatic ordering (e.g. in lv_cont PRETTY layout)*/
LV_PROTECT_PRESS_LOST= 0x10, /*TODO */ LV_PROTECT_PRESS_LOST= 0x10, /*If the `indev` was pressing this object but swiped out while pressing do not search other object.*/
LV_PROTECT_CLICK_FOCUS= 0x20,/*Prevent focusing the object by clicking on it*/
} lv_protect_t; } lv_protect_t;