diff options
Diffstat (limited to '')
| -rw-r--r-- | src/WindowActionRouter.cpp | 3 | ||||
| -rw-r--r-- | src/WindowActionRouter.hpp | 4 | ||||
| -rw-r--r-- | src/WindowMediator.cpp | 4 | ||||
| -rw-r--r-- | src/WindowMediator.hpp | 1 | ||||
| -rw-r--r-- | src/main.cpp | 2 | ||||
| -rw-r--r-- | src/widgets/BrowserApp.cpp | 10 | ||||
| -rw-r--r-- | src/widgets/BrowserApp.hpp | 2 | ||||
| -rw-r--r-- | src/widgets/BrowserWindow.cpp | 11 | ||||
| -rw-r--r-- | src/widgets/BrowserWindow.hpp | 3 | ||||
| -rw-r--r-- | src/widgets/WebViewStack.cpp | 4 | ||||
| -rw-r--r-- | src/widgets/WebViewStack.hpp | 1 |
11 files changed, 33 insertions, 12 deletions
diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp index 89f92c7..1cc39cb 100644 --- a/src/WindowActionRouter.cpp +++ b/src/WindowActionRouter.cpp @@ -5,6 +5,7 @@ #include "LuaRuntime.hpp" #include "WindowActionRouter.hpp" +#include "WindowMediator.hpp" #include "keymap/KeymapEvaluator.hpp" #include "widgets/BrowserWindow.hpp" #include "widgets/WebViewStack.hpp" @@ -91,6 +92,8 @@ void WindowActionRouter::add_window(BrowserWindow *window) { window->set_id(win_id); connect(window, &BrowserWindow::closed, this, [this, win_id]() { window_map.erase(win_id); }); + connect(window->mediator(), &WindowMediator::new_window_requested, this, + &WindowActionRouter::new_window_requested); } const WindowMap &WindowActionRouter::windows() { return window_map; } diff --git a/src/WindowActionRouter.hpp b/src/WindowActionRouter.hpp index 62aa65d..67bc681 100644 --- a/src/WindowActionRouter.hpp +++ b/src/WindowActionRouter.hpp @@ -46,9 +46,13 @@ protected: void add_keymap(const QString &mode_string, const QString &keyseq, std::function<void()> action); +signals: + void new_window_requested(const QUrl &url); + private: WindowMap window_map; uint64_t last_id = 1; + Configuration *configuration; std::mutex events_mutex; std::unordered_map<std::string, std::vector<EventHandlerRequest>> events; diff --git a/src/WindowMediator.cpp b/src/WindowMediator.cpp index df81f9f..0596d28 100644 --- a/src/WindowMediator.cpp +++ b/src/WindowMediator.cpp @@ -18,6 +18,10 @@ WindowMediator::WindowMediator(WebViewStack *webview_stack) &WebViewStack::close); connect(this, &WindowMediator::webview_selected, webview_stack, &WebViewStack::focus_webview); + + // Delegate signal + connect(webview_stack, &WebViewStack::new_window_requested, this, + &WindowMediator::new_window_requested); } WindowMediator::~WindowMediator() { diff --git a/src/WindowMediator.hpp b/src/WindowMediator.hpp index c4f4260..e8050e9 100644 --- a/src/WindowMediator.hpp +++ b/src/WindowMediator.hpp @@ -23,6 +23,7 @@ signals: void url_opened(QString url, OpenType open_type, WebViewId webview_id); void webview_closed(WebViewId webview_id); void webview_selected(WebViewId webview_id); + void new_window_requested(const QUrl &url); private: WebViewStack *webview_stack; diff --git a/src/main.cpp b/src/main.cpp index 9409583..d5ab486 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,7 +7,7 @@ int main(int argc, char *argv[]) { BrowserApp browser; browser.create_window(); - browser.create_window(); + // browser.create_window(); return QApplication::exec(); } diff --git a/src/widgets/BrowserApp.cpp b/src/widgets/BrowserApp.cpp index d65a122..2ab47c2 100644 --- a/src/widgets/BrowserApp.cpp +++ b/src/widgets/BrowserApp.cpp @@ -11,17 +11,21 @@ BrowserApp::BrowserApp() { lua.start_event_loop(); // Router init - WindowActionRouter::instance().initialize(); + auto &window_action_router = WindowActionRouter::instance(); + window_action_router.initialize(); // Global event filter qApp->installEventFilter(this); // NOTE: TMP lua.load_file("./config.lua"); + + connect(&window_action_router, &WindowActionRouter::new_window_requested, + this, [this](const QUrl &url) { create_window(url.toString()); }); }; -BrowserWindow *BrowserApp::create_window() { - auto *window = new BrowserWindow((const Configuration &)configuration); +BrowserWindow *BrowserApp::create_window(const QString &url) { + auto *window = new BrowserWindow((const Configuration &)configuration, url); window->setWindowTitle("null-browser"); WindowActionRouter::instance().add_window(window); window->show(); diff --git a/src/widgets/BrowserApp.hpp b/src/widgets/BrowserApp.hpp index f124a71..b20d710 100644 --- a/src/widgets/BrowserApp.hpp +++ b/src/widgets/BrowserApp.hpp @@ -8,7 +8,7 @@ class BrowserApp : public QObject { public: BrowserApp(); - BrowserWindow *create_window(); + BrowserWindow *create_window(const QString &url = ""); protected: bool eventFilter(QObject *target, QEvent *event) override; diff --git a/src/widgets/BrowserWindow.cpp b/src/widgets/BrowserWindow.cpp index e38f234..701167f 100644 --- a/src/widgets/BrowserWindow.cpp +++ b/src/widgets/BrowserWindow.cpp @@ -10,7 +10,8 @@ #include "widgets/BrowserWindow.hpp" #include "widgets/WebViewStack.hpp" -BrowserWindow::BrowserWindow(const Configuration &configuration) +BrowserWindow::BrowserWindow(const Configuration &configuration, + const QString &start_url) : configuration(configuration) { setCentralWidget(new QWidget()); @@ -51,9 +52,11 @@ BrowserWindow::BrowserWindow(const Configuration &configuration) // TODO: remove auto &lua = LuaRuntime::instance(); - lua.queue_task([this]() { - emit win_mediator->url_opened("https://github.com/phenax/null-browser", - OpenType::OpenUrl, 0); + lua.queue_task([this, start_url]() { + auto def_url = start_url.isEmpty() + ? "https://github.com/phenax/null-browser" + : start_url; + emit win_mediator->url_opened(def_url, OpenType::OpenUrlInTab, 0); emit win_mediator->url_opened("https://ediblemonad.dev", OpenType::OpenUrlInBgTab, 0); emit win_mediator->url_opened("https://github.com/trending", diff --git a/src/widgets/BrowserWindow.hpp b/src/widgets/BrowserWindow.hpp index 4865ec9..db3c181 100644 --- a/src/widgets/BrowserWindow.hpp +++ b/src/widgets/BrowserWindow.hpp @@ -12,7 +12,8 @@ class BrowserWindow : public QMainWindow { Q_OBJECT public: - BrowserWindow(const Configuration &configuration); + BrowserWindow(const Configuration &configuration, + const QString &start_url = ""); DEFINE_GETTER(mediator, win_mediator) DEFINE_GETTER(get_id, win_id) diff --git a/src/widgets/WebViewStack.cpp b/src/widgets/WebViewStack.cpp index 6de170a..10aa6b8 100644 --- a/src/widgets/WebViewStack.cpp +++ b/src/widgets/WebViewStack.cpp @@ -69,6 +69,7 @@ QList<WebViewData> WebViewStack::get_webview_list() { void WebViewStack::on_new_webview_request( const QWebEngineNewWindowRequest &request) { + qDebug() << request.destination(); switch (request.destination()) { case QWebEngineNewWindowRequest::InNewTab: create_new_webview(request.requestedUrl(), true); @@ -78,8 +79,7 @@ void WebViewStack::on_new_webview_request( break; case QWebEngineNewWindowRequest::InNewWindow: case QWebEngineNewWindowRequest::InNewDialog: - // TODO: Impl - create_new_webview(request.requestedUrl(), true); + emit new_window_requested(request.requestedUrl()); break; } } diff --git a/src/widgets/WebViewStack.hpp b/src/widgets/WebViewStack.hpp index 0f0d923..67d443f 100644 --- a/src/widgets/WebViewStack.hpp +++ b/src/widgets/WebViewStack.hpp @@ -47,6 +47,7 @@ public: signals: void current_webview_changed(int index); + void new_window_requested(const QUrl &url); protected: void set_current_url(const QUrl &url); |
