Browse Source

x11: send move/resize events when waiting on fullscreen change.

Otherwise we ignore the Configure/etc events when they come in because
the window is already in an identical state as far as SDL is concerned.

Fixes #5593.

May also fix:
Issue #5572.
Issue #5595.
Ryan C. Gordon 2 years ago
parent
commit
9edd411a83
1 changed files with 14 additions and 6 deletions
  1. 14 6
      src/video/x11/SDL_x11window.c

+ 14 - 6
src/video/x11/SDL_x11window.c

@@ -27,6 +27,7 @@
 #include "../SDL_pixels_c.h"
 #include "../../events/SDL_keyboard_c.h"
 #include "../../events/SDL_mouse_c.h"
+#include "../../events/SDL_events_c.h"
 
 #include "SDL_x11video.h"
 #include "SDL_x11mouse.h"
@@ -1385,12 +1386,19 @@ X11_SetWindowFullscreenViaWM(_THIS, SDL_Window * window, SDL_VideoDisplay * _dis
                                       attrs.x, attrs.y, &x, &y, &childReturn);
 
             if (!caught_x11_error) {
-                if ((x != orig_x) || (y != orig_y) || (attrs.width != orig_w) || (attrs.height != orig_h)) {
-                    window->x = x;
-                    window->y = y;
-                    window->w = attrs.width;
-                    window->h = attrs.height;
-                    break;  /* window moved, time to go. */
+                SDL_bool window_changed = SDL_FALSE;
+                if ((x != orig_x) || (y != orig_y)) {
+                    SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_MOVED, x, y);
+                    window_changed = SDL_TRUE;
+                }
+
+                if ((attrs.width != orig_w) || (attrs.height != orig_h)) {
+                    SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_RESIZED, attrs.width, attrs.height);
+                    window_changed = SDL_TRUE;
+                }
+
+                if (window_changed) {
+                    break;  /* window changed, time to go. */
                 }
             }