From 4a4bac95eb72d90d8dc247702749f51e18d2d407 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 12 Jun 2018 13:22:58 -0700 Subject: [PATCH] Deal with fullscreen limitations under windowed Android environments (Chromebook, DeX, etc.) (Thanks Rachel!) --- src/video/SDL_video.c | 7 +++++++ src/video/android/SDL_androidwindow.c | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index 5c36e669fd1d4..761b5393f0466 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -1289,8 +1289,15 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) /* Generate a mode change event here */ if (resized) { +#ifndef ANDROID + // Android may not resize the window to exactly what our fullscreen mode is, especially on + // windowed Android environments like the Chromebook or Samsung DeX. Given this, we shouldn't + // use fullscreen_mode.w and fullscreen_mode.h, but rather get our current native size. As such, + // Android's SetWindowFullscreen will generate the window event for us with the proper final size. + SDL_SendWindowEvent(other, SDL_WINDOWEVENT_RESIZED, fullscreen_mode.w, fullscreen_mode.h); +#endif } else { SDL_OnWindowResized(other); } diff --git a/src/video/android/SDL_androidwindow.c b/src/video/android/SDL_androidwindow.c index 1ac1a2afe6b17..93d60d35090b6 100644 --- a/src/video/android/SDL_androidwindow.c +++ b/src/video/android/SDL_androidwindow.c @@ -26,6 +26,7 @@ #include "../SDL_sysvideo.h" #include "../../events/SDL_keyboard_c.h" #include "../../events/SDL_mouse_c.h" +#include "../../events/SDL_windowevents_c.h" #include "SDL_androidvideo.h" #include "SDL_androidwindow.h" @@ -101,6 +102,28 @@ void Android_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen) { Android_JNI_SetWindowStyle(fullscreen); + + // Ensure our size matches reality after we've executed the window style change. + // + // It is possible that we've set width and height to the full-size display, but on + // Samsung DeX or Chromebooks or other windowed Android environemtns, our window may + // still not be the full display size. + // + SDL_WindowData * data = (SDL_WindowData *)window->driverdata; + + if (!data || !data->native_window) { + return; + } + + int old_w = window->w; + int old_h = window->h; + + int new_w = ANativeWindow_getWidth(data->native_window); + int new_h = ANativeWindow_getHeight(data->native_window); + + if (old_w != new_w || old_h != new_h) { + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, new_w, new_h); + } } void