WebContent: Notify client when web content selection changes

The WebContentView widgets reacts to this by requesting a repaint.
This commit is contained in:
Andreas Kling 2020-07-04 20:57:57 +02:00
parent 8476e3933b
commit a4b5350aff
Notes: sideshowbarker 2024-07-19 05:10:45 +09:00
7 changed files with 27 additions and 0 deletions

View File

@ -60,3 +60,9 @@ void WebContentClient::handle(const Messages::WebContentClient::DidInvalidateCon
// FIXME: Figure out a way to coalesce these messages to reduce unnecessary painting
m_view.notify_server_did_invalidate_content_rect({}, message.content_rect());
}
void WebContentClient::handle(const Messages::WebContentClient::DidChangeSelection&)
{
dbg() << "handle: WebContentClient::DidChangeSelection!";
m_view.notify_server_did_change_selection({});
}

View File

@ -47,6 +47,7 @@ private:
virtual void handle(const Messages::WebContentClient::DidPaint&) override;
virtual void handle(const Messages::WebContentClient::DidFinishLoad&) override;
virtual void handle(const Messages::WebContentClient::DidInvalidateContentRect&) override;
virtual void handle(const Messages::WebContentClient::DidChangeSelection&) override;
WebContentView& m_view;
};

View File

@ -87,6 +87,16 @@ void WebContentView::notify_server_did_paint(Badge<WebContentClient>, i32 shbuf_
void WebContentView::notify_server_did_invalidate_content_rect(Badge<WebContentClient>, const Gfx::IntRect& content_rect)
{
dbg() << "server did invalidate content_rect: " << content_rect << ", current shbuf_id=" << m_bitmap->shbuf_id();
request_repaint();
}
void WebContentView::notify_server_did_change_selection(Badge<WebContentClient>)
{
request_repaint();
}
void WebContentView::request_repaint()
{
client().post_message(Messages::WebContentServer::Paint(m_bitmap->rect(), m_bitmap->shbuf_id()));
}

View File

@ -40,6 +40,7 @@ public:
void notify_server_did_paint(Badge<WebContentClient>, i32 shbuf_id);
void notify_server_did_invalidate_content_rect(Badge<WebContentClient>, const Gfx::IntRect&);
void notify_server_did_change_selection(Badge<WebContentClient>);
private:
WebContentView();
@ -50,6 +51,8 @@ private:
virtual void mouseup_event(GUI::MouseEvent&) override;
virtual void mousemove_event(GUI::MouseEvent&) override;
void request_repaint();
WebContentClient& client();
RefPtr<WebContentClient> m_client;

View File

@ -104,4 +104,9 @@ void PageHost::page_did_invalidate(const Gfx::IntRect& content_rect)
m_client.post_message(Messages::WebContentClient::DidInvalidateContentRect(content_rect));
}
void PageHost::page_did_change_selection()
{
m_client.post_message(Messages::WebContentClient::DidChangeSelection());
}
}

View File

@ -52,6 +52,7 @@ private:
// ^PageHost
virtual Gfx::Palette palette() const override;
virtual void page_did_invalidate(const Gfx::IntRect&) override;
virtual void page_did_change_selection() override;
explicit PageHost(ClientConnection&);

View File

@ -3,4 +3,5 @@ endpoint WebContentClient = 90
DidFinishLoad(URL url) =|
DidPaint(Gfx::IntRect content_rect, i32 shbuf_id) =|
DidInvalidateContentRect(Gfx::IntRect content_rect) =|
DidChangeSelection() =|
}