diff --git a/lib/tdeck_ui/UI/LXMF/NomadNetScreen.cpp b/lib/tdeck_ui/UI/LXMF/NomadNetScreen.cpp index 8d8c07af..319fbc9f 100644 --- a/lib/tdeck_ui/UI/LXMF/NomadNetScreen.cpp +++ b/lib/tdeck_ui/UI/LXMF/NomadNetScreen.cpp @@ -178,7 +178,9 @@ void NomadNetScreen::rebuild_focus(){ if(_editing){lv_group_add_obj(group,_address);lv_group_add_obj(group,_go_button);} else lv_group_add_obj(group,_edit_button); for(auto* object:_focusables)lv_group_add_obj(group,object); - if(!_editing&&!_focusables.empty())lv_group_focus_obj(_focusables.front());else lv_group_focus_obj(_editing?_address:_edit_button); + // Keep a newly loaded document at its beginning. Focusing the first link + // makes LVGL auto-scroll that link into view, which can hide the heading. + lv_group_focus_obj(_editing?_address:_edit_button); } void NomadNetScreen::apply_browser_layout(bool show_status){ if(_editing){ @@ -312,7 +314,7 @@ void NomadNetScreen::set_page(const NomadNet::Document& document) { } _page_loaded=true; show_browser(false); - if(_visible&&group&&!_focusables.empty())lv_group_focus_obj(_focusables.front()); + lv_obj_scroll_to_y(_content,0,LV_ANIM_OFF); } void NomadNetScreen::show(){ _visible=true;lv_obj_clear_flag(_screen,LV_OBJ_FLAG_HIDDEN);lv_obj_move_foreground(_screen); diff --git a/tests/native/test_app_launcher_nomadnet.py b/tests/native/test_app_launcher_nomadnet.py index 66637287..05bf5d8f 100644 --- a/tests/native/test_app_launcher_nomadnet.py +++ b/tests/native/test_app_launcher_nomadnet.py @@ -80,6 +80,8 @@ def test_ui_wiring_contract(): assert "lv_textarea_set_max_length" in browser_cpp assert "set_link_callback" in manager_cpp assert "_link_targets" in browser_cpp + assert "lv_obj_scroll_to_y(_content,0,LV_ANIM_OFF);" in browser_cpp + assert "lv_group_focus_obj(_focusables.front())" not in browser_cpp assert "LV_SYMBOL_HOME" in browser_cpp assert "lv_font_" in browser_cpp for detail in ("Inbox & calls", "Browse Micron", "Links & radio", "Device options"):