diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index da50c1c1003f3..3f5c8c935b6be 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -2866,17 +2866,16 @@ static void CheckMessages() break; #endif case SDL_WINDOWEVENT_SHOWN: - case SDL_WINDOWEVENT_EXPOSED: case SDL_WINDOWEVENT_MINIMIZED: - break; case SDL_WINDOWEVENT_FOCUS_GAINED: + break; + case SDL_WINDOWEVENT_EXPOSED: // Main menu redraw reinitialize_framebuffer(); - // TODO: redraw all game menus if they are open + ui_manager::redraw_all(); needupdate = true; break; case SDL_WINDOWEVENT_RESTORED: - needupdate = true; #if defined(__ANDROID__) needs_sdl_surface_visibility_refresh = true; if( android_is_hardware_keyboard_available() ) { @@ -2893,9 +2892,18 @@ static void CheckMessages() } break; case SDL_RENDER_TARGETS_RESET: - // todo fix flicker when restoring window from sleep - // tood also redraw in wincurses port + // FIXME this event only seems to be fired after the first redraw + // when restoring the window after system sleep, rather than immediately + // on focus gain. This seems to mess up the first redraw and + // causes black screen that lasts ~0.5 seconds before the screen + // contents are redrawn in the following code. + + // Main menu redraw + reinitialize_framebuffer(); + // todo also redraw in wincurses port + // todo migrate main menu ui_manager::redraw_all(); + needupdate = true; break; case SDL_KEYDOWN: { #if defined(__ANDROID__)