aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-04-04 18:47:15 +0530
committerAkshay Nair <phenax5@gmail.com>2025-04-04 18:47:18 +0530
commit8eda8343757b2161535388387b0525e0fd56f569 (patch)
tree3e027aac8cb03bffb598b6d6abf31671a2637ab1
parent8433630d1f315d1b66e8dd8f914c1fb73dade9ae (diff)
downloadnull-browser-8eda8343757b2161535388387b0525e0fd56f569.tar.gz
null-browser-8eda8343757b2161535388387b0525e0fd56f569.zip
Open new window on new window/dialog request
Diffstat (limited to '')
-rw-r--r--src/WindowActionRouter.cpp3
-rw-r--r--src/WindowActionRouter.hpp4
-rw-r--r--src/WindowMediator.cpp4
-rw-r--r--src/WindowMediator.hpp1
-rw-r--r--src/main.cpp2
-rw-r--r--src/widgets/BrowserApp.cpp10
-rw-r--r--src/widgets/BrowserApp.hpp2
-rw-r--r--src/widgets/BrowserWindow.cpp11
-rw-r--r--src/widgets/BrowserWindow.hpp3
-rw-r--r--src/widgets/WebViewStack.cpp4
-rw-r--r--src/widgets/WebViewStack.hpp1
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);