diff options
Diffstat (limited to '')
| -rw-r--r-- | src/LuaRuntime.cpp | 23 | ||||
| -rw-r--r-- | src/LuaRuntime.hpp | 12 |
2 files changed, 29 insertions, 6 deletions
diff --git a/src/LuaRuntime.cpp b/src/LuaRuntime.cpp index 1dc9a85..d9bc86e 100644 --- a/src/LuaRuntime.cpp +++ b/src/LuaRuntime.cpp @@ -1,6 +1,6 @@ -#include "WindowActionRouter.hpp" -#include "lua.h" #include <QtCore> +#include <cstdlib> +#include <cstring> #include <lua.hpp> extern "C" { #include <luv/luv.h> @@ -8,12 +8,29 @@ extern "C" { #include "AsyncEventLoop.hpp" #include "LuaRuntime.hpp" +#include "WindowActionRouter.hpp" LuaRuntime::LuaRuntime() { state = luaL_newstate(); luaL_openlibs(state); - preserve_top(state, { init_web_lib(); }) + preserve_top(state, { init_web_lib(); }); + + auto lua_path = QString(PROJECT_LUA_PATH); + preserve_top(state, { + lua_getglobal(state, "package"); + lua_getfield(state, -1, "path"); + auto pkg_path = QString(lua_tostring(state, -1)) + ";" + lua_path; + lua_pop(state, 1); + lua_pushstring(state, pkg_path.toStdString().c_str()); + lua_setfield(state, -2, "path"); + + lua_getglobal(state, "require"); + lua_pushstring(state, "null-browser.api"); + if (lua_pcall(state, 1, 0, 0) != LUA_OK) { + qCritical() << "Unable to load browser api" << lua_tostring(state, -1); + } + }); } void LuaRuntime::start_event_loop() { diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp index 74b7810..2b834aa 100644 --- a/src/LuaRuntime.hpp +++ b/src/LuaRuntime.hpp @@ -10,10 +10,16 @@ #include "utils.hpp" #include "widgets/WebViewStack.hpp" +#ifndef PROJECT_LUA_PATH +#define PROJECT_LUA_PATH "" +#endif + #define preserve_top(STATE, BODY) \ - const int __top = lua_gettop(STATE); \ - BODY; \ - lua_settop(STATE, __top); + { \ + const int __top = lua_gettop(STATE); \ + BODY; \ + lua_settop(STATE, __top); \ + }; class LuaRuntime : public QObject { Q_OBJECT |
