WebContent: Notify client when web content selection changes
The WebContentView widgets reacts to this by requesting a repaint.
This commit is contained in:
parent
8476e3933b
commit
a4b5350aff
Notes:
sideshowbarker
2024-07-19 05:10:45 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/a4b5350aff2
7 changed files with 27 additions and 0 deletions
|
@ -60,3 +60,9 @@ void WebContentClient::handle(const Messages::WebContentClient::DidInvalidateCon
|
||||||
// FIXME: Figure out a way to coalesce these messages to reduce unnecessary painting
|
// FIXME: Figure out a way to coalesce these messages to reduce unnecessary painting
|
||||||
m_view.notify_server_did_invalidate_content_rect({}, message.content_rect());
|
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({});
|
||||||
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ private:
|
||||||
virtual void handle(const Messages::WebContentClient::DidPaint&) override;
|
virtual void handle(const Messages::WebContentClient::DidPaint&) override;
|
||||||
virtual void handle(const Messages::WebContentClient::DidFinishLoad&) override;
|
virtual void handle(const Messages::WebContentClient::DidFinishLoad&) override;
|
||||||
virtual void handle(const Messages::WebContentClient::DidInvalidateContentRect&) override;
|
virtual void handle(const Messages::WebContentClient::DidInvalidateContentRect&) override;
|
||||||
|
virtual void handle(const Messages::WebContentClient::DidChangeSelection&) override;
|
||||||
|
|
||||||
WebContentView& m_view;
|
WebContentView& m_view;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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)
|
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();
|
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()));
|
client().post_message(Messages::WebContentServer::Paint(m_bitmap->rect(), m_bitmap->shbuf_id()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ public:
|
||||||
|
|
||||||
void notify_server_did_paint(Badge<WebContentClient>, i32 shbuf_id);
|
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_invalidate_content_rect(Badge<WebContentClient>, const Gfx::IntRect&);
|
||||||
|
void notify_server_did_change_selection(Badge<WebContentClient>);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
WebContentView();
|
WebContentView();
|
||||||
|
@ -50,6 +51,8 @@ private:
|
||||||
virtual void mouseup_event(GUI::MouseEvent&) override;
|
virtual void mouseup_event(GUI::MouseEvent&) override;
|
||||||
virtual void mousemove_event(GUI::MouseEvent&) override;
|
virtual void mousemove_event(GUI::MouseEvent&) override;
|
||||||
|
|
||||||
|
void request_repaint();
|
||||||
|
|
||||||
WebContentClient& client();
|
WebContentClient& client();
|
||||||
|
|
||||||
RefPtr<WebContentClient> m_client;
|
RefPtr<WebContentClient> m_client;
|
||||||
|
|
|
@ -104,4 +104,9 @@ void PageHost::page_did_invalidate(const Gfx::IntRect& content_rect)
|
||||||
m_client.post_message(Messages::WebContentClient::DidInvalidateContentRect(content_rect));
|
m_client.post_message(Messages::WebContentClient::DidInvalidateContentRect(content_rect));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PageHost::page_did_change_selection()
|
||||||
|
{
|
||||||
|
m_client.post_message(Messages::WebContentClient::DidChangeSelection());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ private:
|
||||||
// ^PageHost
|
// ^PageHost
|
||||||
virtual Gfx::Palette palette() const override;
|
virtual Gfx::Palette palette() const override;
|
||||||
virtual void page_did_invalidate(const Gfx::IntRect&) override;
|
virtual void page_did_invalidate(const Gfx::IntRect&) override;
|
||||||
|
virtual void page_did_change_selection() override;
|
||||||
|
|
||||||
explicit PageHost(ClientConnection&);
|
explicit PageHost(ClientConnection&);
|
||||||
|
|
||||||
|
|
|
@ -3,4 +3,5 @@ endpoint WebContentClient = 90
|
||||||
DidFinishLoad(URL url) =|
|
DidFinishLoad(URL url) =|
|
||||||
DidPaint(Gfx::IntRect content_rect, i32 shbuf_id) =|
|
DidPaint(Gfx::IntRect content_rect, i32 shbuf_id) =|
|
||||||
DidInvalidateContentRect(Gfx::IntRect content_rect) =|
|
DidInvalidateContentRect(Gfx::IntRect content_rect) =|
|
||||||
|
DidChangeSelection() =|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue