Description
I wanted to try the Menu example, and I was surprised because it doesn’t work the way I expected. I was not able to correct the given example of doing it that way
properly. The problem is this: When he focuses and clicks on “<”, a MsgBox opens that has a Close “X” button. Now he can focus on “<” and “X” with the keys.
“<” is on the screen below the MsgBox and “X” is on the MsgBox. The example needs to be changed, in such a way that only an element inside the MsgBox can be focused.
What MCU/Processor/Board and compiler are you using?
ESP32-C3, ESP-IDF v5.0
What LVGL version are you using?
v8.3.9
What do you want to achieve?
When MsgBox is opened, all input device events should be forwarded to MsgBox only. At the moment it is so that “<” can also be focused, it can even be opened many times msgbox again.
Code to reproduce
Add a code snippet which can run in the simulator. It should contain only the relevant code that compiles without errors when separated from your main code base.
The code block(s) should be formatted like:
#include "../../lv_examples.h"
static lv_group_t * g;
static void back_event_handler(lv_event_t * e)
{
lv_obj_t * obj = lv_event_get_target(e);
lv_obj_t * menu = lv_event_get_user_data(e);
if(lv_menu_back_btn_is_root(menu, obj)) {
lv_obj_t * mbox1 = lv_msgbox_create(NULL, "Hello", "Root back btn click.", NULL, true);
lv_obj_center(mbox1);
}
}
void lv_example_menu_2(void)
{
g = lv_group_get_default();
if(g == NULL) {
g = lv_group_create();
lv_group_set_default(g);
}
lv_indev_t * cur_drv = NULL;
for(;;) {
cur_drv = lv_indev_get_next(cur_drv);
if(!cur_drv) {
break;
}
if(cur_drv->driver->type == LV_INDEV_TYPE_KEYPAD) {
lv_indev_set_group(cur_drv, g);
}
if(cur_drv->driver->type == LV_INDEV_TYPE_ENCODER) {
lv_indev_set_group(cur_drv, g);
}
}
lv_obj_t * menu = lv_menu_create(lv_scr_act());
lv_menu_set_mode_root_back_btn(menu, LV_MENU_ROOT_BACK_BTN_ENABLED);
lv_obj_add_event_cb(menu, back_event_handler, LV_EVENT_CLICKED, menu);
lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL));
lv_obj_center(menu);
lv_obj_t * cont;
lv_obj_t * label;
/*Create a sub page*/
lv_obj_t * sub_page = lv_menu_page_create(menu, NULL);
cont = lv_menu_cont_create(sub_page);
label = lv_label_create(cont);
lv_label_set_text(label, "Hello, I am hiding here");
/*Create a main page*/
lv_obj_t * main_page = lv_menu_page_create(menu, NULL);
cont = lv_menu_cont_create(main_page);
label = lv_label_create(cont);
lv_label_set_text(label, "Item 1");
cont = lv_menu_cont_create(main_page);
label = lv_label_create(cont);
lv_label_set_text(label, "Item 2");
cont = lv_menu_cont_create(main_page);
label = lv_label_create(cont);
lv_label_set_text(label, "Item 3 (Click me!)");
lv_menu_set_load_page_event(menu, cont, sub_page);
lv_menu_set_page(menu, main_page);
}
Screenshot and/or video
If possible, add screenshots and/or videos about the current state.