diff --git a/src/modules/event/sdl/Event.cpp b/src/modules/event/sdl/Event.cpp index b5e369abe..32881af3d 100644 --- a/src/modules/event/sdl/Event.cpp +++ b/src/modules/event/sdl/Event.cpp @@ -73,6 +73,16 @@ namespace sdl return ok && (SDL_PushEvent(&e) == 0); } + void Event::clear() + { + static SDL_Event e; + + while(SDL_PollEvent(&e)) + { + // Do nothing with 'e' ... + } + } + bool Event::convert(SDL_Event & e, Message & m) { switch(e.type) diff --git a/src/modules/event/sdl/Event.h b/src/modules/event/sdl/Event.h index 1502bc57e..01a91051c 100644 --- a/src/modules/event/sdl/Event.h +++ b/src/modules/event/sdl/Event.h @@ -74,6 +74,11 @@ namespace sdl **/ bool push(Message & message); + /** + * Clears the event queue. + */ + void clear(); + private: bool convert(SDL_Event & e, Message & m); diff --git a/src/modules/event/sdl/wrap_Event.cpp b/src/modules/event/sdl/wrap_Event.cpp index 77b4e6fe5..b9c494bd4 100644 --- a/src/modules/event/sdl/wrap_Event.cpp +++ b/src/modules/event/sdl/wrap_Event.cpp @@ -177,12 +177,19 @@ namespace sdl return 1; } + int w_clear(lua_State * L) + { + instance->clear(); + return 0; + } + // List of functions to wrap. static const luaL_Reg functions[] = { { "pump", w_pump }, { "poll", w_poll }, { "wait", w_wait }, { "push", w_push }, + { "clear", w_clear }, { 0, 0 } }; diff --git a/src/modules/event/sdl/wrap_Event.h b/src/modules/event/sdl/wrap_Event.h index 107a0ace9..d06401edb 100644 --- a/src/modules/event/sdl/wrap_Event.h +++ b/src/modules/event/sdl/wrap_Event.h @@ -35,6 +35,7 @@ namespace sdl int w_poll(lua_State * L); int w_wait(lua_State * L); int w_push(lua_State * L); + int w_clear(lua_State * L); extern "C" LOVE_EXPORT int luaopen_love_event(lua_State * L);