/** Handle an event with mouse grabber if needed * \param x The x coordinate. * \param y The y coordinate. * \param mask The mask buttons. */ static void event_handle_mousegrabber(int x, int y, uint16_t mask) { if(globalconf.mousegrabber != LUA_REFNIL) { lua_rawgeti(globalconf.L, LUA_REGISTRYINDEX, globalconf.mousegrabber); mousegrabber_handleevent(globalconf.L, x, y, mask); if(lua_pcall(globalconf.L, 1, 1, 0)) { warn("error running function: %s", lua_tostring(globalconf.L, -1)); luaA_mousegrabber_stop(globalconf.L); } else if(!lua_isboolean(globalconf.L, -1) || !lua_toboolean(globalconf.L, -1)) luaA_mousegrabber_stop(globalconf.L); lua_pop(globalconf.L, 1); /* pop returned value */ } }
/** Handle an event with mouse grabber if needed * \param x The x coordinate. * \param y The y coordinate. * \param mask The mask buttons. * \return True if the event was handled. */ static bool event_handle_mousegrabber(int x, int y, uint16_t mask) { if(globalconf.mousegrabber != LUA_REFNIL) { lua_State *L = globalconf_get_lua_State(); mousegrabber_handleevent(L, x, y, mask); lua_rawgeti(L, LUA_REGISTRYINDEX, globalconf.mousegrabber); if(!luaA_dofunction(L, 1, 1)) { warn("Stopping mousegrabber."); luaA_mousegrabber_stop(L); } else { if(!lua_isboolean(L, -1) || !lua_toboolean(L, -1)) luaA_mousegrabber_stop(L); lua_pop(L, 1); /* pop returned value */ } return true; } return false; }