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) {