Update joysticks and so forth during live resize

Fixes https://github.com/libsdl-org/SDL/issues/12022
This commit is contained in:
Sam Lantinga
2025-01-20 09:45:23 -08:00
parent 362f96a6cf
commit c975f77b0f
3 changed files with 33 additions and 24 deletions

View File

@@ -1354,29 +1354,8 @@ bool SDL_RunOnMainThread(SDL_MainThreadCallback callback, void *userdata, bool w
} }
} }
// Run the system dependent event loops void SDL_PumpEventMaintenance(void)
static void SDL_PumpEventsInternal(bool push_sentinel)
{ {
// Free any temporary memory from old events
SDL_FreeTemporaryMemory();
// Release any keys held down from last frame
SDL_ReleaseAutoReleaseKeys();
// Run any pending main thread callbacks
SDL_RunMainThreadCallbacks();
#ifdef SDL_PLATFORM_ANDROID
// Android event processing is independent of the video subsystem
Android_PumpEvents(0);
#else
// Get events from the video subsystem
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this) {
_this->PumpEvents(_this);
}
#endif
#ifndef SDL_AUDIO_DISABLED #ifndef SDL_AUDIO_DISABLED
SDL_UpdateAudio(); SDL_UpdateAudio();
#endif #endif
@@ -1402,6 +1381,32 @@ static void SDL_PumpEventsInternal(bool push_sentinel)
SDL_UpdateTrays(); SDL_UpdateTrays();
SDL_SendPendingSignalEvents(); // in case we had a signal handler fire, etc. SDL_SendPendingSignalEvents(); // in case we had a signal handler fire, etc.
}
// Run the system dependent event loops
static void SDL_PumpEventsInternal(bool push_sentinel)
{
// Free any temporary memory from old events
SDL_FreeTemporaryMemory();
// Release any keys held down from last frame
SDL_ReleaseAutoReleaseKeys();
// Run any pending main thread callbacks
SDL_RunMainThreadCallbacks();
#ifdef SDL_PLATFORM_ANDROID
// Android event processing is independent of the video subsystem
Android_PumpEvents(0);
#else
// Get events from the video subsystem
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this) {
_this->PumpEvents(_this);
}
#endif
SDL_PumpEventMaintenance();
if (push_sentinel && SDL_EventEnabled(SDL_EVENT_POLL_SENTINEL)) { if (push_sentinel && SDL_EventEnabled(SDL_EVENT_POLL_SENTINEL)) {
SDL_Event sentinel; SDL_Event sentinel;

View File

@@ -51,6 +51,8 @@ extern const char *SDL_CreateTemporaryString(const char *string);
extern void *SDL_ClaimTemporaryMemory(const void *mem); extern void *SDL_ClaimTemporaryMemory(const void *mem);
extern void SDL_FreeTemporaryMemory(void); extern void SDL_FreeTemporaryMemory(void);
extern void SDL_PumpEventMaintenance(void);
extern void SDL_SendQuit(void); extern void SDL_SendQuit(void);
extern bool SDL_InitEvents(void); extern bool SDL_InitEvents(void);

View File

@@ -3951,6 +3951,8 @@ void SDL_OnWindowLiveResizeUpdate(SDL_Window *window)
// Send an expose event so the application can redraw // Send an expose event so the application can redraw
SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_EXPOSED, 0, 0); SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_EXPOSED, 0, 0);
} }
SDL_PumpEventMaintenance();
} }
static void SDL_CheckWindowSafeAreaChanged(SDL_Window *window) static void SDL_CheckWindowSafeAreaChanged(SDL_Window *window)