mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-08-17 23:55:04 +00:00
Fix for keyboard
This commit is contained in:
parent
6b68e9f194
commit
9c54ac4944
@ -50,11 +50,10 @@ void lvgl_keyboard_enable(lv_indev_t* indev);
|
|||||||
void lvgl_keyboard_disable(lv_indev_t* indev);
|
void lvgl_keyboard_disable(lv_indev_t* indev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Wires a textarea up to the on-screen keyboard: shows it on focus, hides it on
|
* @brief Adds the textarea to the shared keyboard navigation group (so any keypad indev -
|
||||||
* defocus/ready, and adds the textarea to the keyboard's navigation group.
|
* hardware or on-screen - can type into it once it's focused), and, only when
|
||||||
*
|
* lvgl_software_keyboard_is_enabled() is true (i.e. no hardware keyboard is present), wires it
|
||||||
* No-op if lvgl_software_keyboard_is_enabled() is false (i.e. a hardware keyboard is present).
|
* up to show/hide the on-screen keyboard on focus/defocus/ready.
|
||||||
*
|
|
||||||
* @warning Caller must hold the LVGL lock.
|
* @warning Caller must hold the LVGL lock.
|
||||||
* @param[in] keyboard the on-screen keyboard to associate with the textarea
|
* @param[in] keyboard the on-screen keyboard to associate with the textarea
|
||||||
* @param[in] textarea the lv_textarea_t object to wire up
|
* @param[in] textarea the lv_textarea_t object to wire up
|
||||||
|
|||||||
@ -177,17 +177,23 @@ LvglSoftwareKeyboard* lvgl_software_keyboard_get_last() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void lvgl_keyboard_add_textarea(LvglSoftwareKeyboard* keyboard, lv_obj_t* textarea) {
|
void lvgl_keyboard_add_textarea(LvglSoftwareKeyboard* keyboard, lv_obj_t* textarea) {
|
||||||
|
// Only the on-screen keyboard's show/hide wiring is specific to "no hardware keyboard"
|
||||||
|
// mode. Group membership must NOT be gated on it: a hardware keypad indev (see
|
||||||
|
// lvgl_keyboard_enable()/lvgl_software_keyboard_activate()) is bound to keyboard_group
|
||||||
|
// regardless of whether a software keyboard is in use, so skipping lv_group_add_obj()
|
||||||
|
// here left every textarea unreachable from a hardware keyboard - it was never a member
|
||||||
|
// of the group its indev delivers key events through.
|
||||||
if (lvgl_software_keyboard_is_enabled()) {
|
if (lvgl_software_keyboard_is_enabled()) {
|
||||||
lv_obj_add_event_cb(textarea, textarea_show_keyboard, LV_EVENT_FOCUSED, nullptr);
|
lv_obj_add_event_cb(textarea, textarea_show_keyboard, LV_EVENT_FOCUSED, nullptr);
|
||||||
lv_obj_add_event_cb(textarea, textarea_hide_keyboard, LV_EVENT_DEFOCUSED, nullptr);
|
lv_obj_add_event_cb(textarea, textarea_hide_keyboard, LV_EVENT_DEFOCUSED, nullptr);
|
||||||
lv_obj_add_event_cb(textarea, textarea_hide_keyboard, LV_EVENT_READY, nullptr);
|
lv_obj_add_event_cb(textarea, textarea_hide_keyboard, LV_EVENT_READY, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
// lv_obj_t auto-remove themselves from the group when they are destroyed (last checked in LVGL 8.3)
|
// lv_obj_t auto-remove themselves from the group when they are destroyed (last checked in LVGL 8.3)
|
||||||
lv_group_add_obj(keyboard_group, textarea);
|
lv_group_add_obj(keyboard_group, textarea);
|
||||||
|
|
||||||
lvgl_software_keyboard_activate(keyboard);
|
lvgl_software_keyboard_activate(keyboard);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void lvgl_software_keyboard_activate(LvglSoftwareKeyboard* keyboard) {
|
void lvgl_software_keyboard_activate(LvglSoftwareKeyboard* keyboard) {
|
||||||
auto* indev = lv_indev_get_next(nullptr);
|
auto* indev = lv_indev_get_next(nullptr);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user