diff options
| -rw-r--r-- | src/WindowActionRouter.cpp | 20 | ||||
| -rw-r--r-- | src/WindowActionRouter.hpp | 7 | ||||
| -rw-r--r-- | src/WindowMediator.cpp | 20 | ||||
| -rw-r--r-- | src/WindowMediator.hpp | 13 | ||||
| -rw-r--r-- | src/keymap/KeymapEvaluator.hpp | 4 | ||||
| -rw-r--r-- | src/main.cpp | 3 | ||||
| -rw-r--r-- | src/utils.hpp | 5 | ||||
| -rw-r--r-- | src/widgets/BrowserApp.cpp | 7 | ||||
| -rw-r--r-- | src/widgets/BrowserWindow.cpp | 27 | ||||
| -rw-r--r-- | src/widgets/WebViewStack.cpp | 1 |
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 |
