diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 326105a3b..4cf7259bf 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -43,6 +43,7 @@ #include "lzf.h" #include "lua_script.h" #include "lua_hook.h" +#include "lua_libs.h" #include "md5.h" #include "m_perfstats.h" @@ -3331,6 +3332,9 @@ static inline void SV_GenContext(void) // void D_QuitNetGame(void) { + mousegrabbedbylua = true; + I_UpdateMouseGrab(); + if (!netgame || !netbuffer) return; diff --git a/src/lua_inputlib.c b/src/lua_inputlib.c index 6e3085e94..661d93641 100644 --- a/src/lua_inputlib.c +++ b/src/lua_inputlib.c @@ -19,6 +19,8 @@ #include "lua_script.h" #include "lua_libs.h" +boolean mousegrabbedbylua = true; + /////////////// // FUNCTIONS // /////////////// @@ -106,14 +108,14 @@ static int lib_shiftKeyNum(lua_State *L) static int lib_getMouseGrab(lua_State *L) { - lua_pushboolean(L, I_GetMouseGrab()); + lua_pushboolean(L, mousegrabbedbylua); return 1; } static int lib_setMouseGrab(lua_State *L) { - boolean grab = luaL_checkboolean(L, 1); - I_SetMouseGrab(grab); + mousegrabbedbylua = luaL_checkboolean(L, 1); + I_UpdateMouseGrab(); return 0; } diff --git a/src/lua_libs.h b/src/lua_libs.h index de174283c..8903834e8 100644 --- a/src/lua_libs.h +++ b/src/lua_libs.h @@ -12,6 +12,8 @@ extern lua_State *gL; +extern boolean mousegrabbedbylua; + #define MUTABLE_TAGS #define LREG_VALID "VALID_USERDATA" diff --git a/src/sdl/i_video.c b/src/sdl/i_video.c index a18ea32ba..97e4a7214 100644 --- a/src/sdl/i_video.c +++ b/src/sdl/i_video.c @@ -73,6 +73,8 @@ #include "../console.h" #include "../command.h" #include "../r_main.h" +#include "../lua_script.h" +#include "../lua_libs.h" #include "../lua_hook.h" #include "sdlmain.h" #ifdef HWRENDER @@ -372,6 +374,8 @@ static boolean IgnoreMouse(void) if (gamestate != GS_LEVEL && gamestate != GS_INTERMISSION && gamestate != GS_CONTINUING && gamestate != GS_CUTSCENE) return true; + if (!mousegrabbedbylua) + return true; return false; }