gui: fix "lock screens" making UI viewport disappear

rockbox-gerrit-noreply--- via rockbox-cvs <[email protected]> Sat, 2 May 2026 12:42:11 -0400
Newsgroups gmane.comp.systems.archos.rockbox.cvs
Message-ID <[email protected]>
commit 88d4903d10385fade0a6eeb3c679c91a7a20d623
Author: Christian Soffke <[email protected]>
Date:   Fri May 1 19:28:12 2026 +0200

    gui: fix "lock screens" making UI viewport disappear
    
    Themes like Adwaitapod, Themify, or FreshOS have
    custom "lock screens" that are drawn on top of the
    UI viewport.
    
    Request a full skin update when unlocked, so you don't
    have to press a button to make the hidden UI viewport
    appear again.
    
    Change-Id: Idf5023b4e12f7aea1cd7a2e9d9ab2f754387dc48

diff --git a/apps/action.c b/apps/action.c
index 34af7f30a1..c7dd74f60a 100644
--- a/apps/action.c
+++ b/apps/action.c
@@ -939,7 +939,7 @@ static inline void do_softlock(action_last_t *last, action_cur_t *cur)
     if (notify_user)
     {
 #ifndef BOOTLOADER
-        skin_request_update_locked();
+        skin_request_update_locked(last->keys_locked);
 #endif
         action_handle_backlight(true, false);
 
diff --git a/apps/gui/skin_engine/skin_engine.c b/apps/gui/skin_engine/skin_engine.c
index 99a33caea8..5528385f80 100644
--- a/apps/gui/skin_engine/skin_engine.c
+++ b/apps/gui/skin_engine/skin_engine.c
@@ -344,12 +344,16 @@ void skin_request_full_update(enum skinnable_screens skin)
 
 
 /* Request skin update for lock state change */
-void skin_request_update_locked(void)
+void skin_request_update_locked(bool locked)
 {
     if (get_current_activity() == ACTIVITY_WPS)
         return;
 
     sb_skin_force_next_update();
+
+    /* fix themes that draw on top of the UI viewport when locked */
+    if (!locked)
+        skin_request_full_update(CUSTOM_STATUSBAR);
 #ifdef HAS_BUTTON_HOLD
     button_queue_post(BUTTON_NONE, 0);
 #endif
diff --git a/apps/gui/skin_engine/skin_engine.h b/apps/gui/skin_engine/skin_engine.h
index 383086a19c..fbaf1bf68a 100644
--- a/apps/gui/skin_engine/skin_engine.h
+++ b/apps/gui/skin_engine/skin_engine.h
@@ -82,7 +82,7 @@ void skin_unload_all(void);
 
 bool skin_do_full_update(enum skinnable_screens skin, enum screen_type screen);
 void skin_request_full_update(enum skinnable_screens skin);
-void skin_request_update_locked(void);
+void skin_request_update_locked(bool locked);
 
 bool dbg_skin_engine(void);
 
diff --git a/firmware/backlight.c b/firmware/backlight.c
index c6bc7d8aba..3623162adb 100644
--- a/firmware/backlight.c
+++ b/firmware/backlight.c
@@ -889,7 +889,7 @@ void backlight_set_timeout_plugged(int value)
 void backlight_hold_changed(bool hold_button)
 {
 #ifndef BOOTLOADER
-    skin_request_update_locked();
+    skin_request_update_locked(hold_button);
 #endif
     if (!hold_button || (backlight_on_button_hold > 0))
     {
-- 
rockbox-cvs mailing list
[email protected]
https://lists.haxx.se/mailman/listinfo/rockbox-cvs