mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:57:44 +00:00
LibWeb: Handle scrolling an OutOfProcessWebView
When a mousewheel scroll event isn't handled by the web content itself (e.g. an overflowed box or similar), the event needs to get passed back up to the OutOfProcessWebView.
This commit is contained in:
parent
e9c1d9c89a
commit
0e881bc5d7
9 changed files with 24 additions and 0 deletions
|
@ -245,6 +245,11 @@ void OutOfProcessWebView::notify_server_did_change_title(Badge<WebContentClient>
|
|||
on_title_change(title);
|
||||
}
|
||||
|
||||
void OutOfProcessWebView::notify_server_did_request_scroll(Badge<WebContentClient>, int wheel_delta)
|
||||
{
|
||||
vertical_scrollbar().set_value(vertical_scrollbar().value() + wheel_delta * 20);
|
||||
}
|
||||
|
||||
void OutOfProcessWebView::notify_server_did_request_scroll_into_view(Badge<WebContentClient>, const Gfx::IntRect& rect)
|
||||
{
|
||||
scroll_into_view(rect, true, true);
|
||||
|
|
|
@ -60,6 +60,7 @@ public:
|
|||
void notify_server_did_change_selection(Badge<WebContentClient>);
|
||||
void notify_server_did_request_cursor_change(Badge<WebContentClient>, Gfx::StandardCursor cursor);
|
||||
void notify_server_did_change_title(Badge<WebContentClient>, const String&);
|
||||
void notify_server_did_request_scroll(Badge<WebContentClient>, int);
|
||||
void notify_server_did_request_scroll_into_view(Badge<WebContentClient>, const Gfx::IntRect&);
|
||||
void notify_server_did_hover_link(Badge<WebContentClient>, const URL&);
|
||||
void notify_server_did_unhover_link(Badge<WebContentClient>);
|
||||
|
|
|
@ -141,6 +141,10 @@ bool EventHandler::handle_mousewheel(const Gfx::IntPoint& position, unsigned int
|
|||
if (result.layout_node) {
|
||||
if (result.layout_node->handle_mousewheel({}, position, buttons, modifiers, wheel_delta))
|
||||
return true;
|
||||
}
|
||||
|
||||
if (auto* page = m_frame.page()) {
|
||||
page->client().page_did_request_scroll(wheel_delta);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ public:
|
|||
virtual void page_did_invalidate(const Gfx::IntRect&) { }
|
||||
virtual void page_did_change_favicon(const Gfx::Bitmap&) { }
|
||||
virtual void page_did_layout() { }
|
||||
virtual void page_did_request_scroll(int) { }
|
||||
virtual void page_did_request_scroll_into_view(const Gfx::IntRect&) { }
|
||||
virtual void page_did_request_alert(const String&) { }
|
||||
virtual bool page_did_request_confirm(const String&) { return false; }
|
||||
|
|
|
@ -95,6 +95,11 @@ void WebContentClient::handle(const Messages::WebContentClient::DidChangeTitle&
|
|||
m_view.notify_server_did_change_title({}, message.title());
|
||||
}
|
||||
|
||||
void WebContentClient::handle(const Messages::WebContentClient::DidRequestScroll& message)
|
||||
{
|
||||
m_view.notify_server_did_request_scroll({}, message.wheel_delta());
|
||||
}
|
||||
|
||||
void WebContentClient::handle(const Messages::WebContentClient::DidRequestScrollIntoView& message)
|
||||
{
|
||||
dbgln_if(SPAM_DEBUG, "handle: WebContentClient::DidRequestScrollIntoView! rect={}", message.rect());
|
||||
|
|
|
@ -57,6 +57,7 @@ private:
|
|||
virtual void handle(const Messages::WebContentClient::DidRequestCursorChange&) override;
|
||||
virtual void handle(const Messages::WebContentClient::DidLayout&) override;
|
||||
virtual void handle(const Messages::WebContentClient::DidChangeTitle&) override;
|
||||
virtual void handle(const Messages::WebContentClient::DidRequestScroll&) override;
|
||||
virtual void handle(const Messages::WebContentClient::DidRequestScrollIntoView&) override;
|
||||
virtual void handle(const Messages::WebContentClient::DidHoverLink&) override;
|
||||
virtual void handle(const Messages::WebContentClient::DidUnhoverLink&) override;
|
||||
|
|
|
@ -131,6 +131,11 @@ void PageHost::page_did_change_title(const String& title)
|
|||
m_client.post_message(Messages::WebContentClient::DidChangeTitle(title));
|
||||
}
|
||||
|
||||
void PageHost::page_did_request_scroll(int wheel_delta)
|
||||
{
|
||||
m_client.post_message(Messages::WebContentClient::DidRequestScroll(wheel_delta));
|
||||
}
|
||||
|
||||
void PageHost::page_did_request_scroll_into_view(const Gfx::IntRect& rect)
|
||||
{
|
||||
m_client.post_message(Messages::WebContentClient::DidRequestScrollIntoView(rect));
|
||||
|
|
|
@ -59,6 +59,7 @@ private:
|
|||
virtual void page_did_request_cursor_change(Gfx::StandardCursor) override;
|
||||
virtual void page_did_layout() override;
|
||||
virtual void page_did_change_title(const String&) override;
|
||||
virtual void page_did_request_scroll(int) override;
|
||||
virtual void page_did_request_scroll_into_view(const Gfx::IntRect&) override;
|
||||
virtual void page_did_hover_link(const URL&) override;
|
||||
virtual void page_did_unhover_link() override;
|
||||
|
|
|
@ -8,6 +8,7 @@ endpoint WebContentClient = 90
|
|||
DidRequestCursorChange(i32 cursor_type) =|
|
||||
DidLayout(Gfx::IntSize content_size) =|
|
||||
DidChangeTitle(String title) =|
|
||||
DidRequestScroll(int wheel_delta) =|
|
||||
DidRequestScrollIntoView(Gfx::IntRect rect) =|
|
||||
DidHoverLink(URL url) =|
|
||||
DidUnhoverLink() =|
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue