aboutsummaryrefslogtreecommitdiff
path: root/src/LuaRuntime.hpp
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-04-02 20:49:49 +0530
committerAkshay Nair <phenax5@gmail.com>2025-04-02 20:49:49 +0530
commit96727d6e63ca927f3c7b68d4baa4fe672a4dcd0b (patch)
tree2e5b99bb3324a35a0bd9ecdaa2caefcf9260767a /src/LuaRuntime.hpp
parent4f945367ebc8e34263acbfca0416e3f75653924e (diff)
downloadnull-browser-96727d6e63ca927f3c7b68d4baa4fe672a4dcd0b.tar.gz
null-browser-96727d6e63ca927f3c7b68d4baa4fe672a4dcd0b.zip
Add events system for lua runtime to dispatch and register events
Diffstat (limited to '')
-rw-r--r--src/LuaRuntime.hpp36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp
index d2211df..074b76a 100644
--- a/src/LuaRuntime.hpp
+++ b/src/LuaRuntime.hpp
@@ -3,8 +3,10 @@
#include <QtCore>
#include <functional>
#include <lua.hpp>
+#include <string>
#include "AsyncEventLoop.hpp"
+#include "lua.h"
#include "utils.hpp"
#include "widgets/WebViewStack.hpp"
@@ -18,6 +20,7 @@ class LuaRuntime : public QObject {
const char *uv_global_name = "uv";
const char *web_global_name = "web";
+ const char *internals_global_name = "__internals";
public:
static LuaRuntime &instance() {
@@ -27,7 +30,6 @@ public:
void evaluate(const QString &code);
void load_file(const QString &path);
- QVariant evaluate_sync(const QString &code);
void stop_event_loop();
void start_event_loop();
@@ -55,6 +57,7 @@ protected:
// Lua api
static int lua_history_back(lua_State *state);
static int lua_history_forward(lua_State *state);
+ static int lua_event_register(lua_State *state);
static int lua_keymap_set(lua_State *state);
static int lua_open_url(lua_State *state);
static int lua_tab_close(lua_State *state);
@@ -66,4 +69,35 @@ protected:
private:
lua_State *state;
AsyncEventLoop *event_loop = nullptr;
+
+ // TEMP
+public:
+ static void inspect_lua_stack(lua_State *state) {
+ int top = lua_gettop(state);
+ qDebug() << "Lua Stack (top: " << top << "):\n";
+
+ for (int i = 1; i <= top; i++) {
+ int type = lua_type(state, i);
+ qDebug() << i << ": " << lua_typename(state, type);
+ }
+
+ qDebug() << "---------------------------\n";
+ lua_settop(state, top);
+ }
+
+ static std::vector<std::string> lua_tostringlist(lua_State *state) {
+ std::vector<std::string> values;
+ if (!lua_istable(state, -1))
+ return values;
+
+ lua_pushnil(state); // First key for lua_next()
+ while (lua_next(state, -2) != 0) {
+ if (lua_isstring(state, -1))
+ values.emplace_back(lua_tostring(state, -1));
+ lua_pop(state, 1);
+ }
+ lua_pop(state, 1);
+
+ return values;
+ }
};