From 191f1ba1d1532379dff91c5e2a5bd65c403490d7 Mon Sep 17 00:00:00 2001 From: David Vanderson Date: Tue, 13 May 2025 15:01:49 -0400 Subject: [PATCH] [rcore] add `SetEventWaitingTimeout()` --- src/platforms/rcore_desktop_glfw.c | 10 +++++++++- src/raylib.h | 1 + src/rcore.c | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/platforms/rcore_desktop_glfw.c b/src/platforms/rcore_desktop_glfw.c index 94c780ca3..6716e7538 100644 --- a/src/platforms/rcore_desktop_glfw.c +++ b/src/platforms/rcore_desktop_glfw.c @@ -1268,7 +1268,15 @@ void PollInputEvents(void) if ((CORE.Window.eventWaiting) || (IsWindowState(FLAG_WINDOW_MINIMIZED) && !IsWindowState(FLAG_WINDOW_ALWAYS_RUN))) { - glfwWaitEvents(); // Wait for in input events before continue (drawing is paused) + if ((CORE.Window.eventWaiting) && (CORE.Window.eventWaitingTimeout > 0)) + { + // Wait for timeout or input events before continue (drawing is paused) + glfwWaitEventsTimeout(CORE.Window.eventWaitingTimeout); + } + else { + glfwWaitEvents(); // Wait for input events before continue (drawing is paused) + } + CORE.Time.previous = GetTime(); } else glfwPollEvents(); // Poll input events: keyboard/mouse/window events (callbacks) -> Update keys state diff --git a/src/raylib.h b/src/raylib.h index 44a5653e4..300156892 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -1019,6 +1019,7 @@ RLAPI const char *GetClipboardText(void); // Get clipboa RLAPI Image GetClipboardImage(void); // Get clipboard image content RLAPI void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling RLAPI void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling +RLAPI void SetEventWaitingTimeout(double seconds); // Set timeout to wait for events [>0.0f], if waiting for events is enabled // Cursor-related functions RLAPI void ShowCursor(void); // Shows cursor diff --git a/src/rcore.c b/src/rcore.c index 207e112a4..ab9230d02 100644 --- a/src/rcore.c +++ b/src/rcore.c @@ -290,6 +290,7 @@ typedef struct CoreData { bool shouldClose; // Check if window set for closing bool resizedLastFrame; // Check if window has been resized last frame bool eventWaiting; // Wait for events before ending frame + double eventWaitingTimeout; // If waiting for events, wait with this timeout (0 means wait forever) bool usingFbo; // Using FBO (RenderTexture) for rendering instead of default framebuffer Point position; // Window position (required on fullscreen toggle) @@ -862,6 +863,13 @@ void DisableEventWaiting(void) CORE.Window.eventWaiting = false; } +// Set timeout to wait for events [>0.0f], if waiting for events is enabled +void SetEventWaitingTimeout(double seconds) +{ + if (seconds <= 0) CORE.Window.eventWaitingTimeout = 0; + else CORE.Window.eventWaitingTimeout = seconds; +} + // Check if cursor is not visible bool IsCursorHidden(void) {