From 14c9ef25637abccf383c199b4ec5677365d629fe Mon Sep 17 00:00:00 2001 From: Coderdreams Date: Wed, 22 Mar 2023 21:24:15 -0300 Subject: [PATCH] Ladybird: Open target _blank links in new tab --- Ladybird/BrowserWindow.cpp | 19 +++++++++++++++++++ Ladybird/WebContentView.cpp | 15 ++++++--------- Ladybird/WebContentView.h | 1 + 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Ladybird/BrowserWindow.cpp b/Ladybird/BrowserWindow.cpp index c346187d8f..3cd5a34fd3 100644 --- a/Ladybird/BrowserWindow.cpp +++ b/Ladybird/BrowserWindow.cpp @@ -369,6 +369,25 @@ Tab& BrowserWindow::new_tab(QString const& url, Web::HTML::ActivateTab activate_ return tab.view().handle(); }; + tab_ptr->view().on_tab_open_request = [this](auto url, auto activate_tab) { + auto& tab = new_tab(qstring_from_ak_deprecated_string(url.to_deprecated_string()), activate_tab); + return tab.view().handle(); + }; + + tab_ptr->view().on_link_click = [this](auto url, auto target, unsigned modifiers) { + // TODO: maybe activate tabs according to some configuration, this is just normal current browser behavior + if (modifiers == Mod_Ctrl) { + m_current_tab->view().on_tab_open_request(url, Web::HTML::ActivateTab::No); + } else if (target == "_blank") { + m_current_tab->view().on_tab_open_request(url, Web::HTML::ActivateTab::Yes); + } + }; + + tab_ptr->view().on_link_middle_click = [this](auto url, auto target, unsigned modifiers) { + m_current_tab->view().on_link_click(url, target, Mod_Ctrl); + (void)modifiers; + }; + tab_ptr->view().on_get_all_cookies = [this](auto const& url) { return m_cookie_jar.get_all_cookies(url); }; diff --git a/Ladybird/WebContentView.cpp b/Ladybird/WebContentView.cpp index a67f72d865..4d4e7c931d 100644 --- a/Ladybird/WebContentView.cpp +++ b/Ladybird/WebContentView.cpp @@ -778,19 +778,16 @@ void WebContentView::notify_server_did_unhover_link(Badge) void WebContentView::notify_server_did_click_link(Badge, AK::URL const& url, DeprecatedString const& target, unsigned int modifiers) { - // FIXME - (void)url; - (void)target; - (void)modifiers; - // if (on_link_click) - // on_link_click(url, target, modifiers); + if (on_link_click) { + on_link_click(url, target, modifiers); + } } void WebContentView::notify_server_did_middle_click_link(Badge, AK::URL const& url, DeprecatedString const& target, unsigned int modifiers) { - (void)url; - (void)target; - (void)modifiers; + if (on_link_middle_click) { + on_link_middle_click(url, target, modifiers); + } } void WebContentView::notify_server_did_start_loading(Badge, AK::URL const& url, bool is_redirect) diff --git a/Ladybird/WebContentView.h b/Ladybird/WebContentView.h index 9d84e1604d..b6855c1435 100644 --- a/Ladybird/WebContentView.h +++ b/Ladybird/WebContentView.h @@ -51,6 +51,7 @@ public: virtual ~WebContentView() override; Function on_new_tab; + Function on_tab_open_request; Function on_close; Function on_context_menu_request; Function on_link_click;