diff --git a/Applications/Browser/Tab.cpp b/Applications/Browser/Tab.cpp index 9045588f6f..6e92d020ec 100644 --- a/Applications/Browser/Tab.cpp +++ b/Applications/Browser/Tab.cpp @@ -189,8 +189,8 @@ Tab::Tab() m_link_context_menu->popup(screen_position); }; - m_page_view->on_link_middle_click = [this](auto& href) { - m_page_view->on_link_click(href, "_blank", 0); + hooks().on_link_middle_click = [this](auto& href, auto&, auto) { + hooks().on_link_click(href, "_blank", 0); }; m_page_view->on_title_change = [this](auto& title) { diff --git a/Libraries/LibWeb/PageView.cpp b/Libraries/LibWeb/PageView.cpp index b53f816951..03bdaa70a8 100644 --- a/Libraries/LibWeb/PageView.cpp +++ b/Libraries/LibWeb/PageView.cpp @@ -213,10 +213,10 @@ void PageView::page_did_click_link(const URL& url, const String& target, unsigne on_link_click(url, target, modifiers); } -void PageView::page_did_middle_click_link(const URL& url, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) +void PageView::page_did_middle_click_link(const URL& url, const String& target, unsigned modifiers) { if (on_link_middle_click) - on_link_middle_click(url); + on_link_middle_click(url, target, modifiers); } void PageView::page_did_enter_tooltip_area(const Gfx::IntPoint& content_position, const String& title) diff --git a/Libraries/LibWeb/PageView.h b/Libraries/LibWeb/PageView.h index 83af62053e..be9d74532b 100644 --- a/Libraries/LibWeb/PageView.h +++ b/Libraries/LibWeb/PageView.h @@ -30,11 +30,13 @@ #include #include #include +#include namespace Web { class PageView final : public GUI::ScrollableWidget + , public WebViewHooks , public PageClient { C_OBJECT(PageView); @@ -59,17 +61,6 @@ public: void set_should_show_line_box_borders(bool value) { m_should_show_line_box_borders = value; } - Function on_context_menu_request; - Function on_link_click; - Function on_link_context_menu_request; - Function on_link_middle_click; - Function on_link_hover; - Function on_title_change; - Function on_load_start; - Function on_favicon_change; - Function on_url_drop; - Function on_set_document; - virtual bool accepts_focus() const override { return true; } GUI::Action& select_all_action() { return *m_select_all_action; } diff --git a/Libraries/LibWeb/WebContentView.h b/Libraries/LibWeb/WebContentView.h index 6af604a31c..b607909ab2 100644 --- a/Libraries/LibWeb/WebContentView.h +++ b/Libraries/LibWeb/WebContentView.h @@ -26,12 +26,16 @@ #pragma once +#include #include #include +#include class WebContentClient; -class WebContentView final : public GUI::ScrollableWidget { +class WebContentView final + : public GUI::ScrollableWidget + , public Web::WebViewHooks { C_OBJECT(WebContentView); public: @@ -39,11 +43,6 @@ public: void load(const URL&); - Function on_title_change; - Function on_link_hover; - Function on_link_click; - Function on_link_middle_click; - void notify_server_did_layout(Badge, const Gfx::IntSize& content_size); void notify_server_did_paint(Badge, i32 shbuf_id); void notify_server_did_invalidate_content_rect(Badge, const Gfx::IntRect&); diff --git a/Libraries/LibWeb/WebViewHooks.h b/Libraries/LibWeb/WebViewHooks.h new file mode 100644 index 0000000000..f5c9a2c2a6 --- /dev/null +++ b/Libraries/LibWeb/WebViewHooks.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2020, Andreas Kling + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include +#include +#include + +namespace Web { + +class WebViewHooks { +public: + Function on_context_menu_request; + Function on_link_click; + Function on_link_context_menu_request; + Function on_link_middle_click; + Function on_link_hover; + Function on_title_change; + Function on_load_start; + Function on_favicon_change; + Function on_url_drop; + Function on_set_document; +}; + +}