diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index cf81f7d009..8e48ac261e 100644 --- a/apps/gui/viewport.c +++ b/apps/gui/viewport.c @@ -57,6 +57,7 @@ #include "language.h" #include "statusbar-skinned.h" #include "skin_engine/skin_engine.h" +#include "skin_engine/wps_internals.h" #include "debug.h" #define VPSTACK_DEPTH 16 @@ -122,7 +123,17 @@ static void toggle_theme(enum screen_type screen, bool force) /* remove the left overs from the previous screen. * could cause a tiny flicker. Redo your screen code if that happens */ #ifdef HAVE_BACKDROP_IMAGE - skin_backdrop_show(sb_get_backdrop(screen)); + int backdrop_id = sb_get_backdrop(screen); + if (get_current_activity() == ACTIVITY_WPS) + { + struct wps_data *sbs = skin_get_gwps(CUSTOM_STATUSBAR, screen)->data; + struct wps_data *wps = skin_get_gwps(WPS, screen)->data; + /* Extra framebuffer shared between WPS and SBS; + prevents flashing previous backdrop: */ + if (wps->use_extra_framebuffer && sbs->use_extra_framebuffer) + backdrop_id = -1; + } + skin_backdrop_show(backdrop_id); #endif if (LIKELY(after_boot[screen]) && (!was_enabled[screen] || force)) { diff --git a/apps/gui/wps.c b/apps/gui/wps.c index c552709f24..080fb461b8 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -542,18 +542,7 @@ static void gwps_leave_wps(bool theme_enabled) struct gui_wps *gwps = skin_get_gwps(WPS, i); gwps->display->scroll_stop(); if (theme_enabled) - { -#ifdef HAVE_BACKDROP_IMAGE - skin_backdrop_show(sb_get_backdrop(i)); - - /* The following is supposed to erase any traces of %VB - viewports drawn by the WPS. May need further thought... */ - struct wps_data *sbs = skin_get_gwps(CUSTOM_STATUSBAR, i)->data; - if (gwps->data->use_extra_framebuffer && sbs->use_extra_framebuffer) - skin_update(CUSTOM_STATUSBAR, i, SKIN_REFRESH_ALL); -#endif viewportmanager_theme_undo(i, skin_has_sbs(gwps)); - } } #if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)