summaryrefslogtreecommitdiff
path: root/Source/3rdParty/SDL2/src/video/android/SDL_androidwindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/3rdParty/SDL2/src/video/android/SDL_androidwindow.c')
-rw-r--r--Source/3rdParty/SDL2/src/video/android/SDL_androidwindow.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/Source/3rdParty/SDL2/src/video/android/SDL_androidwindow.c b/Source/3rdParty/SDL2/src/video/android/SDL_androidwindow.c
index f1cbf58..cf18e67 100644
--- a/Source/3rdParty/SDL2/src/video/android/SDL_androidwindow.c
+++ b/Source/3rdParty/SDL2/src/video/android/SDL_androidwindow.c
@@ -26,6 +26,8 @@
#include "../SDL_sysvideo.h"
#include "../../events/SDL_keyboard_c.h"
#include "../../events/SDL_mouse_c.h"
+#include "../../events/SDL_windowevents_c.h"
+#include "../../core/android/SDL_android.h"
#include "SDL_androidvideo.h"
#include "SDL_androidwindow.h"
@@ -49,8 +51,8 @@ Android_CreateWindow(_THIS, SDL_Window * window)
/* Adjust the window data to match the screen */
window->x = 0;
window->y = 0;
- window->w = Android_ScreenWidth;
- window->h = Android_ScreenHeight;
+ window->w = Android_SurfaceWidth;
+ window->h = Android_SurfaceHeight;
window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */
window->flags &= ~SDL_WINDOW_HIDDEN;
@@ -100,7 +102,36 @@ Android_SetWindowTitle(_THIS, SDL_Window * window)
void
Android_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen)
{
- Android_JNI_SetWindowStyle(fullscreen);
+ /* If the window is being destroyed don't change visible state */
+ if (!window->is_destroying) {
+ 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.
+ */
+ if (!SDL_IsDeXMode() && !SDL_IsChromebook()) {
+ return;
+ }
+
+ 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