aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/LuaRuntime.cpp23
-rw-r--r--src/LuaRuntime.hpp12
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