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.
This commit is contained in:
Ryan C. Gordon 2022-05-19 17:15:10 -04:00 committed by Sam Lantinga
parent 09086aefaa
commit 031c9b03f1
1 changed files with 14 additions and 6 deletions

View File

@ -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"
@ -1392,12 +1393,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. */
}
}