aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/WindowActionRouter.cpp20
-rw-r--r--src/WindowActionRouter.hpp7
-rw-r--r--src/WindowMediator.cpp20
-rw-r--r--src/WindowMediator.hpp13
-rw-r--r--src/keymap/KeymapEvaluator.hpp4
-rw-r--r--src/main.cpp3
-rw-r--r--src/utils.hpp5
-rw-r--r--src/widgets/BrowserApp.cpp7
-rw-r--r--src/widgets/BrowserWindow.cpp27
-rw-r--r--src/widgets/WebViewStack.cpp1
10 files changed, 52 insertions, 55 deletions
diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp
index 264c75e..51fb1af 100644
--- a/src/WindowActionRouter.cpp
+++ b/src/WindowActionRouter.cpp
@@ -3,19 +3,14 @@
#include "LuaRuntime.hpp"
#include "WindowActionRouter.hpp"
+#include "keymap/KeymapEvaluator.hpp"
#include "widgets/WebViewStack.hpp"
-WindowActionRouter::WindowActionRouter() {
+void WindowActionRouter::initialize() {
auto *runtime = LuaRuntime::instance();
connect(runtime, &LuaRuntime::keymap_added, this,
- [this](const QString &mode, const QString &keyseq,
- const std::function<void()> &callback) {
- for (auto &win : window_map) {
- auto *mediator = win.second->mediator();
- emit mediator->keymap_added(mode, keyseq, callback);
- }
- });
+ &WindowActionRouter::add_keymap);
connect(runtime, &LuaRuntime::history_back_requested, this,
[this](WebViewId webview_id, qsizetype history_index) {
@@ -75,6 +70,15 @@ void WindowActionRouter::add_window(BrowserWindow *window) {
const WindowMap &WindowActionRouter::windows() { return window_map; }
+void WindowActionRouter::add_keymap(const QString &mode_string,
+ const QString &keyseq,
+ std::function<void()> action) {
+ qDebug() << "ADD KEY" << mode_string << keyseq;
+ auto *keymap_evaluator = KeymapEvaluator::instance();
+ const KeyMode mode = keymap_evaluator->mode_from_string(mode_string);
+ keymap_evaluator->add_keymap(mode, keyseq, std::move(action));
+}
+
WebViewId WindowActionRouter::fetch_current_tab_id(WindowId win_id) {
for (auto &pair : window_map) {
auto *win = pair.second;
diff --git a/src/WindowActionRouter.hpp b/src/WindowActionRouter.hpp
index 83c4137..9a5059b 100644
--- a/src/WindowActionRouter.hpp
+++ b/src/WindowActionRouter.hpp
@@ -15,6 +15,8 @@ public:
return router;
}
+ void initialize();
+
void add_window(BrowserWindow *window);
const WindowMap &windows();
@@ -22,7 +24,10 @@ public:
QList<WebViewData> fetch_webview_data_list(WindowId win_id = 0);
protected:
- WindowActionRouter();
+ WindowActionRouter() = default;
+
+ void add_keymap(const QString &mode_string, const QString &keyseq,
+ std::function<void()> action);
private:
WindowMap window_map;
diff --git a/src/WindowMediator.cpp b/src/WindowMediator.cpp
index 7d6859b..1e24173 100644
--- a/src/WindowMediator.cpp
+++ b/src/WindowMediator.cpp
@@ -2,20 +2,11 @@
#include <QWidget>
#include <QtCore>
-#include "LuaRuntime.hpp"
#include "WindowMediator.hpp"
-#include "keymap/KeymapEvaluator.hpp"
#include "widgets/WebViewStack.hpp"
-WindowMediator::WindowMediator(WebViewStack *webview_stack,
- LuaRuntime *lua_runtime,
- KeymapEvaluator *keymap_evaluator)
- : webview_stack(webview_stack), lua_runtime(lua_runtime),
- keymap_evaluator(keymap_evaluator) {
-
- connect(this, &WindowMediator::keymap_added, this,
- &WindowMediator::add_keymap);
-
+WindowMediator::WindowMediator(WebViewStack *webview_stack)
+ : webview_stack(webview_stack) {
connect(this, &WindowMediator::history_back_requested, webview_stack,
&WebViewStack::webview_history_back);
connect(this, &WindowMediator::history_forward_requested, webview_stack,
@@ -29,11 +20,4 @@ WindowMediator::WindowMediator(WebViewStack *webview_stack,
&WebViewStack::focus_webview);
}
-void WindowMediator::add_keymap(const QString &mode_string,
- const QString &keyseq,
- std::function<void()> action) {
- const KeyMode mode = keymap_evaluator->mode_from_string(mode_string);
- keymap_evaluator->add_keymap(mode, keyseq, std::move(action));
-}
-
WindowMediator::~WindowMediator() { delete webview_stack; }
diff --git a/src/WindowMediator.hpp b/src/WindowMediator.hpp
index 1a65fd7..c4f4260 100644
--- a/src/WindowMediator.hpp
+++ b/src/WindowMediator.hpp
@@ -3,8 +3,6 @@
#include <QWidget>
#include <QtCore>
-#include "LuaRuntime.hpp"
-#include "keymap/KeymapEvaluator.hpp"
#include "utils.hpp"
#include "widgets/WebViewStack.hpp"
@@ -12,11 +10,9 @@ class WindowMediator : public QObject {
Q_OBJECT
public:
- WindowMediator(WebViewStack *webview_stack, LuaRuntime *lua_runtime,
- KeymapEvaluator *keymap_evaluator);
+ WindowMediator(WebViewStack *webview_stack);
~WindowMediator() override;
- 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)
@@ -24,17 +20,10 @@ public:
signals:
void history_back_requested(WebViewId webview_id, qsizetype history_index);
void history_forward_requested(WebViewId webview_id, qsizetype history_index);
- void keymap_added(QString mode, QString keyseq, std::function<void()>);
void url_opened(QString url, OpenType open_type, WebViewId webview_id);
void webview_closed(WebViewId webview_id);
void webview_selected(WebViewId webview_id);
-protected slots:
- void add_keymap(const QString &mode_string, const QString &keyseq,
- std::function<void()> action);
-
private:
WebViewStack *webview_stack;
- LuaRuntime *lua_runtime;
- KeymapEvaluator *keymap_evaluator;
};
diff --git a/src/keymap/KeymapEvaluator.hpp b/src/keymap/KeymapEvaluator.hpp
index 75ded60..f3ee791 100644
--- a/src/keymap/KeymapEvaluator.hpp
+++ b/src/keymap/KeymapEvaluator.hpp
@@ -24,8 +24,8 @@ public:
KeymapEvaluator() = default;
static KeymapEvaluator *instance() {
- static auto *keymap_evaluator = new KeymapEvaluator;
- return keymap_evaluator;
+ static KeymapEvaluator keymap_evaluator;
+ return &keymap_evaluator;
}
void add_keymap(KeyMode mode, const QString &key, KeyAction action);
diff --git a/src/main.cpp b/src/main.cpp
index 8c30b31..9409583 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -9,8 +9,5 @@ int main(int argc, char *argv[]) {
browser.create_window();
browser.create_window();
- // NOTE: TMP
- LuaRuntime::instance()->load_file("./config.lua");
-
return QApplication::exec();
}
diff --git a/src/utils.hpp b/src/utils.hpp
index d5d4fc5..d7ca4c0 100644
--- a/src/utils.hpp
+++ b/src/utils.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include <memory>
+
#define DELEGATE(OBJ, METHOD, METHOD_AS) \
template <typename... Args> decltype(auto) METHOD_AS(Args &&...args) { \
return OBJ->METHOD(std::forward<Args>(args)...); \
@@ -10,3 +12,6 @@
#define DEFINE_GETTER(METHOD, EXPR) \
decltype(auto) METHOD() { return EXPR; }
+
+#define DEFER(DEFERRED_BLOCK) \
+ std::shared_ptr<void> __deferred(nullptr, [](...) DEFERRED_BLOCK);
diff --git a/src/widgets/BrowserApp.cpp b/src/widgets/BrowserApp.cpp
index 9a4e1cf..13d855b 100644
--- a/src/widgets/BrowserApp.cpp
+++ b/src/widgets/BrowserApp.cpp
@@ -10,8 +10,15 @@ BrowserApp::BrowserApp() {
auto *lua = LuaRuntime::instance();
lua->start_event_loop();
+ // Router init
+ auto *router = WindowActionRouter::instance();
+ router->initialize();
+
// Global event filter
qApp->installEventFilter(this);
+
+ // NOTE: TMP
+ LuaRuntime::instance()->load_file("./config.lua");
};
BrowserWindow *BrowserApp::create_window() {
diff --git a/src/widgets/BrowserWindow.cpp b/src/widgets/BrowserWindow.cpp
index 3ff4d3c..4eb0ad7 100644
--- a/src/widgets/BrowserWindow.cpp
+++ b/src/widgets/BrowserWindow.cpp
@@ -4,6 +4,8 @@
#include <QtCore>
#include "Configuration.hpp"
+#include "LuaRuntime.hpp"
+#include "WindowActionRouter.hpp"
#include "WindowMediator.hpp"
#include "keymap/KeymapEvaluator.hpp"
#include "widgets/BrowserWindow.hpp"
@@ -27,13 +29,6 @@ BrowserWindow::BrowserWindow(const Configuration &configuration)
auto *keymap_evaluator = KeymapEvaluator::instance();
- // TODO: remoev
- web_view_stack->open_url(QUrl("https://duckduckgo.com"), OpenType::OpenUrl);
- web_view_stack->open_url(QUrl("https://ediblemonad.dev"),
- OpenType::OpenUrlInBgTab);
- web_view_stack->open_url(QUrl("https://github.com/trending"),
- OpenType::OpenUrlInBgTab);
-
// TODO: remove
keymap_evaluator->add_keymap(KeyMode::Normal, "i", [keymap_evaluator]() {
keymap_evaluator->set_current_mode(KeyMode::Insert);
@@ -44,13 +39,23 @@ BrowserWindow::BrowserWindow(const Configuration &configuration)
keymap_evaluator->add_keymap(KeyMode::Normal, "<c-t>a",
[]() { qDebug() << "Stuff"; });
- input_mediator = new WindowMediator(web_view_stack, LuaRuntime::instance(),
- keymap_evaluator);
+ input_mediator = new WindowMediator(web_view_stack);
+
+ auto *lua = LuaRuntime::instance();
+ lua->queue_task([this]() {
+ emit input_mediator->url_opened("https://github.com/phenax/null-browser",
+ OpenType::OpenUrl, 0);
+ emit input_mediator->url_opened("https://ediblemonad.dev",
+ OpenType::OpenUrlInBgTab, 0);
+ emit input_mediator->url_opened("https://github.com/trending",
+ OpenType::OpenUrlInBgTab, 0);
+ });
}
bool BrowserWindow::on_window_key_event(QKeyEvent *event) {
- const bool should_skip = input_mediator->evaluate_keymap(
- event->modifiers(), (Qt::Key)event->key());
+ auto *keymap_evaluator = KeymapEvaluator::instance();
+ const bool should_skip =
+ keymap_evaluator->evaluate(event->modifiers(), (Qt::Key)event->key());
return should_skip;
}
diff --git a/src/widgets/WebViewStack.cpp b/src/widgets/WebViewStack.cpp
index 5ec6364..f01b75c 100644
--- a/src/widgets/WebViewStack.cpp
+++ b/src/widgets/WebViewStack.cpp
@@ -81,6 +81,7 @@ void WebViewStack::on_new_webview_request(
int32_t WebViewStack::get_webview_index(WebViewId webview_id) {
if (webview_id == 0) {
+ // TODO: Check how to detect "active" window before qapp start (lua init)?
if (window()->isActiveWindow())
webview_id = current_webview_id();
else