diff --git a/lv_core/lv_indev.c b/lv_core/lv_indev.c index 69dc29bd0..1955dea44 100644 --- a/lv_core/lv_indev.c +++ b/lv_core/lv_indev.c @@ -369,7 +369,7 @@ static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data) i->proc.last_state == LV_INDEV_STATE_REL) { i->proc.pr_timestamp = lv_tick_get(); lv_obj_t * focused = lv_group_get_focused(i->group); - if(focused) { + if(focused && data->key == LV_GROUP_KEY_ENTER) { focused->signal_func(focused, LV_SIGNAL_PRESSED, indev_act); } } diff --git a/lv_objx/lv_btn.c b/lv_objx/lv_btn.c index 66f94ea78..ab48666ec 100644 --- a/lv_objx/lv_btn.c +++ b/lv_objx/lv_btn.c @@ -674,10 +674,11 @@ static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * param) } else if(c == LV_GROUP_KEY_ENTER) { if(!ext->long_pr_action_executed) { if(lv_btn_get_toggle(btn)) { - if(state == LV_BTN_STATE_REL) lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL); - else if(state == LV_BTN_STATE_PR) lv_btn_set_state(btn, LV_BTN_STATE_TGL_PR); - else if(state == LV_BTN_STATE_TGL_REL) lv_btn_set_state(btn, LV_BTN_STATE_REL); - else if(state == LV_BTN_STATE_TGL_PR) lv_btn_set_state(btn, LV_BTN_STATE_PR); + if(state == LV_BTN_STATE_REL || state == LV_BTN_STATE_PR) lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL); + else if(state == LV_BTN_STATE_TGL_REL || state == LV_BTN_STATE_TGL_PR) lv_btn_set_state(btn, LV_BTN_STATE_REL); + } else { + if(state == LV_BTN_STATE_REL || state == LV_BTN_STATE_PR) lv_btn_set_state(btn, LV_BTN_STATE_REL); + else if(state == LV_BTN_STATE_TGL_REL || state == LV_BTN_STATE_TGL_PR) lv_btn_set_state(btn, LV_BTN_STATE_TGL_REL); } if(ext->actions[LV_BTN_ACTION_CLICK] && state != LV_BTN_STATE_INA) { res = ext->actions[LV_BTN_ACTION_CLICK](btn); diff --git a/lv_objx/lv_slider.c b/lv_objx/lv_slider.c index c94220261..bc7dfaa3f 100644 --- a/lv_objx/lv_slider.c +++ b/lv_objx/lv_slider.c @@ -490,11 +490,13 @@ static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, void * par } } else if(sign == LV_SIGNAL_CONTROLL) { char c = *((char *)param); + + ext->drag_value = LV_SLIDER_NOT_PRESSED; + #if USE_LV_GROUP lv_group_t * g = lv_obj_get_group(slider); bool editing = lv_group_get_editing(g); lv_hal_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act()); - /*Encoders need special handling*/ if(indev_type == LV_INDEV_TYPE_ENCODER && c == LV_GROUP_KEY_ENTER) { if(editing) lv_group_set_editing(g, false);