mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-02-06 10:22:17 +08:00
event: Only consider topmost windows when generating SDL_QUIT
Otherwise, the quit event can be sent prematurely. The topmost status must be queried and cached before sending the close request event, as the window may be destroyed in an event handler.
This commit is contained in:
@@ -228,6 +228,9 @@ bool SDL_SendWindowEvent(SDL_Window *window, SDL_EventType windowevent, int data
|
||||
post_event = false;
|
||||
}
|
||||
|
||||
// The window might be destroyed in an event handler, so cache the topmost status first.
|
||||
const bool window_is_topmost = !window->parent;
|
||||
|
||||
// Post the event, if desired
|
||||
SDL_Event event;
|
||||
event.type = windowevent;
|
||||
@@ -301,7 +304,7 @@ bool SDL_SendWindowEvent(SDL_Window *window, SDL_EventType windowevent, int data
|
||||
}
|
||||
}
|
||||
|
||||
if (windowevent == SDL_EVENT_WINDOW_CLOSE_REQUESTED && !SDL_HasActiveTrays()) {
|
||||
if (windowevent == SDL_EVENT_WINDOW_CLOSE_REQUESTED && window_is_topmost && !SDL_HasActiveTrays()) {
|
||||
int count = window ? 0 : 1;
|
||||
for (SDL_Window *n = _this->windows; n; n = n->next) {
|
||||
if (!n->parent && !(n->flags & SDL_WINDOW_HIDDEN)) {
|
||||
|
||||
Reference in New Issue
Block a user