diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c index 0e24a3d36..05a07f61d 100644 --- a/src/video/android/SDL_androidvideo.c +++ b/src/video/android/SDL_androidvideo.c @@ -194,7 +194,6 @@ Android_VideoQuit(_THIS) Android_QuitTouch(); } -/* This function gets called before VideoInit() */ void Android_SetScreenResolution(int width, int height, Uint32 format, float rate) { @@ -203,6 +202,22 @@ Android_SetScreenResolution(int width, int height, Uint32 format, float rate) Android_ScreenFormat = format; Android_ScreenRate = rate; + /* + Update the resolution of the desktop mode, so that the window + can be properly resized. The screen resolution change can for + example happen when the Activity enters or exists immersive mode, + which can happen after VideoInit(). + */ + SDL_VideoDevice* device = SDL_GetVideoDevice(); + if (device && device->num_displays > 0) + { + SDL_VideoDisplay* display = &device->displays[0]; + display->desktop_mode.format = Android_ScreenFormat; + display->desktop_mode.w = Android_ScreenWidth; + display->desktop_mode.h = Android_ScreenHeight; + display->desktop_mode.refresh_rate = Android_ScreenRate; + } + if (Android_Window) { SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, width, height); }