diff --git a/applications/services/desktop/scenes/desktop_scene_lock_menu.c b/applications/services/desktop/scenes/desktop_scene_lock_menu.c index 77c956ff1..91e5f11b4 100644 --- a/applications/services/desktop/scenes/desktop_scene_lock_menu.c +++ b/applications/services/desktop/scenes/desktop_scene_lock_menu.c @@ -34,6 +34,10 @@ void desktop_scene_lock_menu_on_enter(void* context) { desktop->lock_menu->save_xtreme = false; desktop->lock_menu->save_bt = false; + Gui* gui = furi_record_open(RECORD_GUI); + gui_set_lockmenu(gui, true); + furi_record_close(RECORD_GUI); + view_dispatcher_switch_to_view(desktop->view_dispatcher, DesktopViewIdLockMenu); } @@ -134,4 +138,8 @@ void desktop_scene_lock_menu_on_exit(void* context) { if(desktop->lock_menu->save_bt) { bt_settings_save(&desktop->lock_menu->bt->bt_settings); } + + Gui* gui = furi_record_open(RECORD_GUI); + gui_set_lockmenu(gui, false); + furi_record_close(RECORD_GUI); } diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 6ca38a942..fbce4baf7 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -276,7 +276,9 @@ static void gui_redraw(Gui* gui) { if(!gui_redraw_window(gui)) { gui_redraw_desktop(gui); } - gui_redraw_status_bar(gui, false); + if(!gui->lockmenu) { + gui_redraw_status_bar(gui, false); + } } } @@ -525,6 +527,17 @@ void gui_set_lockdown(Gui* gui, bool lockdown) { gui_update(gui); } +void gui_set_lockmenu(Gui* gui, bool lockmenu) { + furi_assert(gui); + + gui_lock(gui); + gui->lockmenu = lockmenu; + gui_unlock(gui); + + // Request redraw + gui_update(gui); +} + Canvas* gui_direct_draw_acquire(Gui* gui) { furi_assert(gui); gui_lock(gui); diff --git a/applications/services/gui/gui.h b/applications/services/gui/gui.h index d7d73f27b..7b33e7fb8 100644 --- a/applications/services/gui/gui.h +++ b/applications/services/gui/gui.h @@ -106,6 +106,15 @@ size_t gui_get_framebuffer_size(const Gui* gui); */ void gui_set_lockdown(Gui* gui, bool lockdown); +/** Set lockmenu mode + * + * When lockmenu mode is enabled, the lockmenu is visible and statusbar is hidden. + * + * @param gui Gui instance + * @param lockmenu bool, true if enabled + */ +void gui_set_lockmenu(Gui* gui, bool lockmenu); + /** Acquire Direct Draw lock and get Canvas instance * * This method return Canvas instance for use in monopoly mode. Direct draw lock diff --git a/applications/services/gui/gui_i.h b/applications/services/gui/gui_i.h index a5cd84120..aa0968599 100644 --- a/applications/services/gui/gui_i.h +++ b/applications/services/gui/gui_i.h @@ -63,6 +63,7 @@ struct Gui { // Layers and Canvas bool lockdown; + bool lockmenu; bool direct_draw; ViewPortArray_t layers[GuiLayerMAX]; Canvas* canvas; diff --git a/firmware/targets/f18/api_symbols.csv b/firmware/targets/f18/api_symbols.csv index b6be56f60..b5be60238 100644 --- a/firmware/targets/f18/api_symbols.csv +++ b/firmware/targets/f18/api_symbols.csv @@ -1311,6 +1311,7 @@ Function,+,gui_get_framebuffer_size,size_t,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockmenu,void,"Gui*, _Bool" Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,+,hal_sd_detect,_Bool, diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 34cb7b64c..706d526e2 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1694,6 +1694,7 @@ Function,+,gui_get_framebuffer_size,size_t,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockmenu,void,"Gui*, _Bool" Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,+,hal_sd_detect,_Bool,