From 92374fc94227ad6774d1243e10e19871d0d5c0db Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 7 Jul 2020 12:24:29 +0200 Subject: [PATCH] LibWeb: Make context menus work in WebContentView As usual, this was just a matter of plumbing the PageClient calls from the WebContent side over to the WebContentView side. :^) --- Libraries/LibWeb/WebContentClient.cpp | 10 ++++++++++ Libraries/LibWeb/WebContentClient.h | 2 ++ Libraries/LibWeb/WebContentView.cpp | 12 ++++++++++++ Libraries/LibWeb/WebContentView.h | 2 ++ Services/WebContent/PageHost.cpp | 10 ++++++++++ Services/WebContent/PageHost.h | 2 ++ Services/WebContent/WebContentClient.ipc | 2 ++ 7 files changed, 40 insertions(+) diff --git a/Libraries/LibWeb/WebContentClient.cpp b/Libraries/LibWeb/WebContentClient.cpp index 8e5b892e84..8482dabd96 100644 --- a/Libraries/LibWeb/WebContentClient.cpp +++ b/Libraries/LibWeb/WebContentClient.cpp @@ -129,3 +129,13 @@ void WebContentClient::handle(const Messages::WebContentClient::DidStartLoading& { m_view.notify_server_did_start_loading({}, message.url()); } + +void WebContentClient::handle(const Messages::WebContentClient::DidRequestContextMenu& message) +{ + m_view.notify_server_did_request_context_menu({}, message.content_position()); +} + +void WebContentClient::handle(const Messages::WebContentClient::DidRequestLinkContextMenu& message) +{ + m_view.notify_server_did_request_link_context_menu({}, message.content_position(), message.url(), message.target(), message.modifiers()); +} diff --git a/Libraries/LibWeb/WebContentClient.h b/Libraries/LibWeb/WebContentClient.h index 72450ca421..8852e14ca5 100644 --- a/Libraries/LibWeb/WebContentClient.h +++ b/Libraries/LibWeb/WebContentClient.h @@ -56,6 +56,8 @@ private: virtual void handle(const Messages::WebContentClient::DidClickLink&) override; virtual void handle(const Messages::WebContentClient::DidMiddleClickLink&) override; virtual void handle(const Messages::WebContentClient::DidStartLoading&) override; + virtual void handle(const Messages::WebContentClient::DidRequestContextMenu&) override; + virtual void handle(const Messages::WebContentClient::DidRequestLinkContextMenu&) override; WebContentView& m_view; }; diff --git a/Libraries/LibWeb/WebContentView.cpp b/Libraries/LibWeb/WebContentView.cpp index 9ac6467c13..3273c7b478 100644 --- a/Libraries/LibWeb/WebContentView.cpp +++ b/Libraries/LibWeb/WebContentView.cpp @@ -162,6 +162,18 @@ void WebContentView::notify_server_did_start_loading(Badge, co on_load_start(url); } +void WebContentView::notify_server_did_request_context_menu(Badge, const Gfx::IntPoint& content_position) +{ + if (on_context_menu_request) + on_context_menu_request(screen_relative_rect().location().translated(to_widget_position(content_position))); +} + +void WebContentView::notify_server_did_request_link_context_menu(Badge, const Gfx::IntPoint& content_position, const URL& url, const String&, unsigned) +{ + if (on_link_context_menu_request) + on_link_context_menu_request(url, screen_relative_rect().location().translated(to_widget_position(content_position))); +} + void WebContentView::did_scroll() { client().post_message(Messages::WebContentServer::SetViewportRect(visible_content_rect())); diff --git a/Libraries/LibWeb/WebContentView.h b/Libraries/LibWeb/WebContentView.h index 30d69ccb4e..07ed3f0359 100644 --- a/Libraries/LibWeb/WebContentView.h +++ b/Libraries/LibWeb/WebContentView.h @@ -55,6 +55,8 @@ public: void notify_server_did_click_link(Badge, const URL&, const String& target, unsigned modifiers); void notify_server_did_middle_click_link(Badge, const URL&, const String& target, unsigned modifiers); void notify_server_did_start_loading(Badge, const URL&); + void notify_server_did_request_context_menu(Badge, const Gfx::IntPoint&); + void notify_server_did_request_link_context_menu(Badge, const Gfx::IntPoint&, const URL&, const String& target, unsigned modifiers); private: WebContentView(); diff --git a/Services/WebContent/PageHost.cpp b/Services/WebContent/PageHost.cpp index 21fe0abeab..ee17a96ece 100644 --- a/Services/WebContent/PageHost.cpp +++ b/Services/WebContent/PageHost.cpp @@ -159,4 +159,14 @@ void PageHost::page_did_start_loading(const URL& url) m_client.post_message(Messages::WebContentClient::DidStartLoading(url)); } +void PageHost::page_did_request_context_menu(const Gfx::IntPoint& content_position) +{ + m_client.post_message(Messages::WebContentClient::DidRequestContextMenu(content_position)); +} + +void PageHost::page_did_request_link_context_menu(const Gfx::IntPoint& content_position, const URL& url, const String& target, unsigned modifiers) +{ + m_client.post_message(Messages::WebContentClient::DidRequestLinkContextMenu(content_position, url, target, modifiers)); +} + } diff --git a/Services/WebContent/PageHost.h b/Services/WebContent/PageHost.h index 6ab5094247..315f3b940d 100644 --- a/Services/WebContent/PageHost.h +++ b/Services/WebContent/PageHost.h @@ -60,6 +60,8 @@ private: virtual void page_did_unhover_link() override; virtual void page_did_click_link(const URL&, const String& target, unsigned modifiers) override; virtual void page_did_middle_click_link(const URL&, const String& target, unsigned modifiers) override; + virtual void page_did_request_context_menu(const Gfx::IntPoint&) override; + virtual void page_did_request_link_context_menu(const Gfx::IntPoint&, const URL&, const String& target, unsigned modifiers) override; virtual void page_did_start_loading(const URL&) override; explicit PageHost(ClientConnection&); diff --git a/Services/WebContent/WebContentClient.ipc b/Services/WebContent/WebContentClient.ipc index ddaa8fb934..6778d2eda5 100644 --- a/Services/WebContent/WebContentClient.ipc +++ b/Services/WebContent/WebContentClient.ipc @@ -12,4 +12,6 @@ endpoint WebContentClient = 90 DidClickLink(URL url, String target, unsigned modifiers) =| DidMiddleClickLink(URL url, String target, unsigned modifiers) =| DidStartLoading(URL url) =| + DidRequestContextMenu(Gfx::IntPoint content_position) =| + DidRequestLinkContextMenu(Gfx::IntPoint content_position, URL url, String target, unsigned modifiers) =| }