From 74638ea3c5b3f8c0fa3b2514b1b6b61483ceb216 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 28 Sep 2018 20:39:57 -0700 Subject: [PATCH] Ensure we wait on the surface resize before returning from setting fullscreen mode. --- Xcode/SDL/SDL.xcodeproj/project.pbxproj | 0 .../main/java/org/libsdl/app/SDLActivity.java | 21 ++++++++++++++++++- src/core/android/SDL_android.h | 5 +++++ src/video/android/SDL_androidwindow.c | 5 +++++ 4 files changed, 30 insertions(+), 1 deletion(-) mode change 100644 => 100755 Xcode/SDL/SDL.xcodeproj/project.pbxproj diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj old mode 100644 new mode 100755 diff --git a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index 0ece200d100f8..071b343b41095 100644 --- a/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -643,7 +643,22 @@ boolean sendCommand(int command, Object data) { Message msg = commandHandler.obtainMessage(); msg.arg1 = command; msg.obj = data; - return commandHandler.sendMessage(msg); + boolean result = commandHandler.sendMessage(msg); + + // Ensure we don't return until the resize has actually happened, + // or 250ms have passed. + if (command == COMMAND_CHANGE_WINDOW_STYLE) { + synchronized(SDLActivity.getContext()) { + try { + SDLActivity.getContext().wait(250); + } + catch (InterruptedException ie) { + ie.printStackTrace(); + } + } + } + + return result; } // C functions we call @@ -1577,6 +1592,10 @@ public void surfaceChanged(SurfaceHolder holder, } catch ( java.lang.Throwable throwable ) {} + synchronized(SDLActivity.getContext()) { + SDLActivity.getContext().notifyAll(); + } + Log.v("SDL", "Window size: " + width + "x" + height); Log.v("SDL", "Device size: " + nDeviceWidth + "x" + nDeviceHeight); SDLActivity.onNativeResize(width, height, nDeviceWidth, nDeviceHeight, sdlFormat, mDisplay.getRefreshRate()); diff --git a/src/core/android/SDL_android.h b/src/core/android/SDL_android.h index 0f7561b412de4..bac4fd33ef123 100644 --- a/src/core/android/SDL_android.h +++ b/src/core/android/SDL_android.h @@ -19,6 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ #include "../../SDL_internal.h" +#include "SDL_system.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus @@ -53,6 +54,10 @@ extern int Android_JNI_CaptureAudioBuffer(void *buffer, int buflen); extern void Android_JNI_FlushCapturedAudio(void); extern void Android_JNI_CloseAudioDevice(const int iscapture); +/* Detecting device type */ +extern SDL_bool Android_IsDeXMode(); +extern SDL_bool Android_IsChromebook(); + #include "SDL_rwops.h" int Android_JNI_FileOpen(SDL_RWops* ctx, const char* fileName, const char* mode); diff --git a/src/video/android/SDL_androidwindow.c b/src/video/android/SDL_androidwindow.c index 93d60d35090b6..037b49079fdbc 100644 --- a/src/video/android/SDL_androidwindow.c +++ b/src/video/android/SDL_androidwindow.c @@ -27,6 +27,7 @@ #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" @@ -109,6 +110,10 @@ Android_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * displ // 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) {