Detect display change when fullscreen desktop windows move displays This happens when using Win+Alt+Left/Right on a resizable fullscreen desktop window on Windows (cherry picked from commit 650e16a8245f3fb5056fc7f6b398fb88244b3477)
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
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index 1dcd199..1a52916 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -1198,16 +1198,32 @@ int SDL_GetWindowDisplayIndex(SDL_Window *window)
return displayIndex;
}
+ displayIndex = GetRectDisplayIndex(window->x, window->y, window->w, window->h);
+
/* Find the display containing the window if fullscreen */
for (i = 0; i < _this->num_displays; ++i) {
SDL_VideoDisplay *display = &_this->displays[i];
if (display->fullscreen_window == window) {
- return i;
+ if (displayIndex != i) {
+ if (displayIndex < 0) {
+ displayIndex = i;
+ } else {
+ SDL_VideoDisplay *new_display = &_this->displays[displayIndex];
+
+ /* The window was moved to a different display */
+ if (new_display->fullscreen_window != NULL) {
+ /* Uh oh, there's already a fullscreen window here */
+ } else {
+ new_display->fullscreen_window = window;
+ }
+ display->fullscreen_window = NULL;
+ }
+ }
+ break;
}
}
-
- return GetRectDisplayIndex(window->x, window->y, window->w, window->h);
+ return displayIndex;
}
}