Ensure we wait on the surface resize before returning from setting fullscreen mode.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
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 0ece200..071b343 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 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
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 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
}
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 0f7561b..bac4fd3 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 93d60d3..037b490 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) {