aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-03-29 14:23:35 +0530
committerAkshay Nair <phenax5@gmail.com>2025-03-29 15:58:20 +0530
commit23b8c2c0da0317562925d574e774cedb6a93a7ac (patch)
tree0704ffda4e8f2f1b442fd9fc6b31e025b4a4521e /src
parented15eba453b7ddd0f4962c2d381fe40751973131 (diff)
downloadnull-browser-23b8c2c0da0317562925d574e774cedb6a93a7ac.tar.gz
null-browser-23b8c2c0da0317562925d574e774cedb6a93a7ac.zip
Replace fetchers with fetch methods on router
Diffstat (limited to '')
-rw-r--r--src/LuaRuntime.cpp13
-rw-r--r--src/LuaRuntime.hpp3
-rw-r--r--src/WindowActionRouter.cpp26
-rw-r--r--src/WindowActionRouter.hpp8
-rw-r--r--src/WindowMediator.cpp6
-rw-r--r--src/WindowMediator.hpp2
-rw-r--r--src/utils.hpp6
-rw-r--r--src/widgets/BrowserApp.cpp3
-rw-r--r--src/widgets/BrowserWindow.hpp8
-rw-r--r--src/widgets/WebViewStack.cpp2
-rw-r--r--src/widgets/WebViewStack.hpp2
11 files changed, 51 insertions, 28 deletions
diff --git a/src/LuaRuntime.cpp b/src/LuaRuntime.cpp
index 0ef7ef8..2e711cb 100644
--- a/src/LuaRuntime.cpp
+++ b/src/LuaRuntime.cpp
@@ -1,3 +1,4 @@
+#include "WindowActionRouter.hpp"
#include <QtCore>
#include <lua.hpp>
extern "C" {
@@ -74,6 +75,7 @@ void LuaRuntime::init_web_lib() {
// web
luaL_Reg web[] = {
+ /// @deprecated
{"open", &LuaRuntime::lua_open_url},
{nullptr, nullptr},
};
@@ -169,15 +171,15 @@ int LuaRuntime::lua_keymap_set(lua_State *state) {
}
int LuaRuntime::lua_tab_current(lua_State *state) {
- auto *runtime = LuaRuntime::instance();
- auto tab_id = runtime->fetch_current_tab_id();
+ auto *router = WindowActionRouter::instance();
+ auto tab_id = router->fetch_current_tab_id();
lua_pushinteger(state, tab_id);
return 1;
}
int LuaRuntime::lua_tab_list(lua_State *state) {
- auto *runtime = LuaRuntime::instance();
- auto tabs = runtime->fetch_webview_data_list();
+ auto *router = WindowActionRouter::instance();
+ auto tabs = router->fetch_webview_data_list();
lua_newtable(state);
int index = 1; // 1-indexed
@@ -196,7 +198,8 @@ int LuaRuntime::lua_tab_list(lua_State *state) {
lua_pushstring(state, tab.title.toStdString().c_str());
lua_settable(state, -3);
- lua_rawseti(state, -2, index++);
+ lua_rawseti(state, -2, index);
+ index++;
}
return 1;
diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp
index ade8ed3..4d69760 100644
--- a/src/LuaRuntime.hpp
+++ b/src/LuaRuntime.hpp
@@ -36,9 +36,6 @@ public:
QVariant get_lua_value(int idx, QVariant default_value = 0);
DEFINE_GETTER(get_state, state)
- DEFINE_FETCHER(qsizetype(), current_tab_id)
- DEFINE_FETCHER(QList<WebViewData>(), webview_data_list)
-
signals:
void evaluation_completed(QVariant value);
void evaluation_failed(QString value);
diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp
index e530455..264c75e 100644
--- a/src/WindowActionRouter.cpp
+++ b/src/WindowActionRouter.cpp
@@ -69,7 +69,33 @@ WindowActionRouter::WindowActionRouter() {
void WindowActionRouter::add_window(BrowserWindow *window) {
window_map.insert({last_id, window});
+ window->set_id(last_id);
last_id++;
}
const WindowMap &WindowActionRouter::windows() { return window_map; }
+
+WebViewId WindowActionRouter::fetch_current_tab_id(WindowId win_id) {
+ for (auto &pair : window_map) {
+ auto *win = pair.second;
+ auto is_current_window =
+ win_id == win->get_id() || (win_id == 0 && win->isActiveWindow());
+ if (is_current_window) {
+ return win->mediator()->current_webview_id();
+ }
+ }
+ return 0;
+}
+
+QList<WebViewData>
+WindowActionRouter::fetch_webview_data_list(WindowId win_id) {
+ for (auto &pair : window_map) {
+ auto *win = pair.second;
+ auto is_current_window =
+ win_id == win->get_id() || (win_id == 0 && win->isActiveWindow());
+ if (is_current_window) {
+ return win->mediator()->get_webview_list();
+ }
+ }
+ return {};
+}
diff --git a/src/WindowActionRouter.hpp b/src/WindowActionRouter.hpp
index b6cd731..83c4137 100644
--- a/src/WindowActionRouter.hpp
+++ b/src/WindowActionRouter.hpp
@@ -1,13 +1,10 @@
#pragma once
-#include "widgets/BrowserWindow.hpp"
#include <QWidget>
#include <QtCore>
#include <cstdint>
-#include <unordered_map>
-using WindowId = uint64_t;
-using WindowMap = std::unordered_map<uint64_t, BrowserWindow *>;
+#include "widgets/BrowserWindow.hpp"
class WindowActionRouter : public QWidget {
Q_OBJECT
@@ -21,6 +18,9 @@ public:
void add_window(BrowserWindow *window);
const WindowMap &windows();
+ WebViewId fetch_current_tab_id(WindowId win_id = 0);
+ QList<WebViewData> fetch_webview_data_list(WindowId win_id = 0);
+
protected:
WindowActionRouter();
diff --git a/src/WindowMediator.cpp b/src/WindowMediator.cpp
index 8c49e94..7d6859b 100644
--- a/src/WindowMediator.cpp
+++ b/src/WindowMediator.cpp
@@ -27,12 +27,6 @@ WindowMediator::WindowMediator(WebViewStack *webview_stack,
&WebViewStack::close);
connect(this, &WindowMediator::webview_selected, webview_stack,
&WebViewStack::focus_webview);
-
- // TODO: Think of how to handle this for multi-window
- lua_runtime->set_current_tab_id_fetcher(
- [this]() { return this->webview_stack->current_webview_id(); });
- lua_runtime->set_webview_data_list_fetcher(
- [this]() { return this->webview_stack->get_webview_list(); });
}
void WindowMediator::add_keymap(const QString &mode_string,
diff --git a/src/WindowMediator.hpp b/src/WindowMediator.hpp
index f04763c..1a65fd7 100644
--- a/src/WindowMediator.hpp
+++ b/src/WindowMediator.hpp
@@ -18,6 +18,8 @@ public:
DELEGATE(keymap_evaluator, evaluate, evaluate_keymap)
DELEGATE(webview_stack, has_webview, has_webview)
+ DELEGATE(webview_stack, current_webview_id, current_webview_id)
+ DELEGATE(webview_stack, get_webview_list, get_webview_list)
signals:
void history_back_requested(WebViewId webview_id, qsizetype history_index);
diff --git a/src/utils.hpp b/src/utils.hpp
index e3de4dc..d5d4fc5 100644
--- a/src/utils.hpp
+++ b/src/utils.hpp
@@ -10,9 +10,3 @@
#define DEFINE_GETTER(METHOD, EXPR) \
decltype(auto) METHOD() { return EXPR; }
-
-#define DEFINE_FETCHER(TYPE, NAME) \
- void set_##NAME##_fetcher(const std::function<TYPE> &fetcher) { \
- fetch_##NAME = fetcher; \
- } \
- std::function<TYPE> fetch_##NAME;
diff --git a/src/widgets/BrowserApp.cpp b/src/widgets/BrowserApp.cpp
index 3cd06b4..9a4e1cf 100644
--- a/src/widgets/BrowserApp.cpp
+++ b/src/widgets/BrowserApp.cpp
@@ -16,9 +16,8 @@ BrowserApp::BrowserApp() {
BrowserWindow *BrowserApp::create_window() {
auto *win = new BrowserWindow((const Configuration &)configuration);
+ WindowActionRouter::instance()->add_window(win);
win->setWindowTitle("null-browser");
- auto *router = WindowActionRouter::instance();
- router->add_window(win);
win->show();
return win;
}
diff --git a/src/widgets/BrowserWindow.hpp b/src/widgets/BrowserWindow.hpp
index 6036ec1..364aa12 100644
--- a/src/widgets/BrowserWindow.hpp
+++ b/src/widgets/BrowserWindow.hpp
@@ -6,15 +6,23 @@
#include "WindowMediator.hpp"
#include "utils.hpp"
+using WindowId = uint64_t;
+
class BrowserWindow : public QMainWindow {
public:
BrowserWindow(const Configuration &configuration);
DEFINE_GETTER(mediator, input_mediator)
+ DEFINE_GETTER(get_id, win_id)
+ DEFINE_SETTER(set_id, win_id)
bool on_window_key_event(QKeyEvent *event);
private:
WindowMediator *input_mediator;
const Configuration &configuration;
+
+ WindowId win_id = -1;
};
+
+using WindowMap = std::unordered_map<uint64_t, BrowserWindow *>;
diff --git a/src/widgets/WebViewStack.cpp b/src/widgets/WebViewStack.cpp
index 6265855..5ec6364 100644
--- a/src/widgets/WebViewStack.cpp
+++ b/src/widgets/WebViewStack.cpp
@@ -8,6 +8,8 @@
#include "widgets/WebViewStack.hpp"
+static WebViewId next_webview_id = 1;
+
WebViewStack::WebViewStack(const Configuration *configuration,
QWebEngineProfile *profile, QWidget *parent)
: QWidget(parent), configuration(configuration), profile(profile) {
diff --git a/src/widgets/WebViewStack.hpp b/src/widgets/WebViewStack.hpp
index 03581e8..40c2184 100644
--- a/src/widgets/WebViewStack.hpp
+++ b/src/widgets/WebViewStack.hpp
@@ -23,8 +23,6 @@ struct WebViewData {
QString title;
};
-static WebViewId next_webview_id = 1;
-
class WebViewStack : public QWidget {
Q_OBJECT