diff --git a/data/core/init.lua b/data/core/init.lua index a25cdb5f..13c9c3a5 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -347,7 +347,10 @@ function core.step() -- update core.root_view.size.x, core.root_view.size.y = width, height core.root_view:update() - if not core.redraw then return end + if not core.redraw then + if not system.window_has_focus() then system.wait_event(0.5) end + return + end core.redraw = false -- close unreferenced docs diff --git a/src/api/system.c b/src/api/system.c index 65dda196..47a11219 100644 --- a/src/api/system.c +++ b/src/api/system.c @@ -123,6 +123,13 @@ top: } +static int f_wait_event(lua_State *L) { + double n = luaL_checknumber(L, 1); + lua_pushboolean(L, SDL_WaitEventTimeout(NULL, n * 1000)); + return 1; +} + + static SDL_Cursor* cursor_cache[SDL_SYSTEM_CURSOR_HAND + 1]; static const char *cursor_opts[] = { @@ -339,6 +346,7 @@ static int f_fuzzy_match(lua_State *L) { static const luaL_Reg lib[] = { { "poll_event", f_poll_event }, + { "wait_event", f_wait_event }, { "set_cursor", f_set_cursor }, { "set_window_title", f_set_window_title }, { "set_window_mode", f_set_window_mode },