From cc675cbe249d2a1fcf751ee0dfe98ef5e26e6cf8 Mon Sep 17 00:00:00 2001 From: Andrew Kaster Date: Sat, 27 Jun 2020 14:21:58 -0600 Subject: [PATCH] LibWeb: Add Page context menu request Pages can request a context menu on right click. This is plumbed through the PageClient. --- Libraries/LibWeb/Frame/EventHandler.cpp | 3 +++ Libraries/LibWeb/Page.h | 1 + Libraries/LibWeb/PageView.cpp | 6 ++++++ Libraries/LibWeb/PageView.h | 2 ++ 4 files changed, 12 insertions(+) diff --git a/Libraries/LibWeb/Frame/EventHandler.cpp b/Libraries/LibWeb/Frame/EventHandler.cpp index be2775a92b..d9fb51d48c 100644 --- a/Libraries/LibWeb/Frame/EventHandler.cpp +++ b/Libraries/LibWeb/Frame/EventHandler.cpp @@ -150,6 +150,9 @@ bool EventHandler::handle_mousedown(const Gfx::IntPoint& position, unsigned butt dump_selection("MouseDown"); m_in_mouse_selection = true; } + else if (button == GUI::MouseButton::Right) { + page_client.page_did_request_context_menu(m_frame.to_main_frame_position(position)); + } } return true; } diff --git a/Libraries/LibWeb/Page.h b/Libraries/LibWeb/Page.h index 5d2967abf7..850de68594 100644 --- a/Libraries/LibWeb/Page.h +++ b/Libraries/LibWeb/Page.h @@ -74,6 +74,7 @@ public: virtual void page_did_start_loading(const URL&) { } virtual void page_did_change_selection() { } virtual void page_did_request_cursor_change(GUI::StandardCursor) { } + virtual void page_did_request_context_menu(const Gfx::IntPoint&) { } virtual void page_did_request_link_context_menu(const Gfx::IntPoint&, [[maybe_unused]] const String& href, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { } virtual void page_did_click_link([[maybe_unused]] const String& href, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { } virtual void page_did_middle_click_link([[maybe_unused]] const String& href, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { } diff --git a/Libraries/LibWeb/PageView.cpp b/Libraries/LibWeb/PageView.cpp index ef4111ad18..756a63eb01 100644 --- a/Libraries/LibWeb/PageView.cpp +++ b/Libraries/LibWeb/PageView.cpp @@ -103,6 +103,12 @@ void PageView::page_did_request_cursor_change(GUI::StandardCursor cursor) window()->set_override_cursor(cursor); } +void PageView::page_did_request_context_menu(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 PageView::page_did_request_link_context_menu(const Gfx::IntPoint& content_position, const String& href, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { if (on_link_context_menu_request) diff --git a/Libraries/LibWeb/PageView.h b/Libraries/LibWeb/PageView.h index 584ab2da0e..e1d8dce03a 100644 --- a/Libraries/LibWeb/PageView.h +++ b/Libraries/LibWeb/PageView.h @@ -60,6 +60,7 @@ 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; @@ -95,6 +96,7 @@ private: virtual void page_did_start_loading(const URL&) override; virtual void page_did_change_selection() override; virtual void page_did_request_cursor_change(GUI::StandardCursor) override; + virtual void page_did_request_context_menu(const Gfx::IntPoint&) override; virtual void page_did_request_link_context_menu(const Gfx::IntPoint&, const String& href, const String& target, unsigned modifiers) override; virtual void page_did_click_link(const String& href, const String& target, unsigned modifiers) override; virtual void page_did_middle_click_link(const String& href, const String& target, unsigned modifiers) override;