Browse Source

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
Sam Lantinga 2 years ago
parent
commit
650e16a824
1 changed files with 19 additions and 3 deletions
  1. 19 3
      src/video/SDL_video.c

+ 19 - 3
src/video/SDL_video.c

@@ -1181,16 +1181,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;
     }
 }