Explorar el Código

WebContent: Notify client when web content selection changes

The WebContentView widgets reacts to this by requesting a repaint.
Andreas Kling hace 5 años
padre
commit
a4b5350aff

+ 6 - 0
Demos/WebView/WebContentClient.cpp

@@ -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({});
+}

+ 1 - 0
Demos/WebView/WebContentClient.h

@@ -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;
 };

+ 10 - 0
Demos/WebView/WebContentView.cpp

@@ -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()));
 }
 

+ 3 - 0
Demos/WebView/WebContentView.h

@@ -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;

+ 5 - 0
Services/WebContent/PageHost.cpp

@@ -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());
+}
+
 }

+ 1 - 0
Services/WebContent/PageHost.h

@@ -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&);
 

+ 1 - 0
Services/WebContent/WebContentClient.ipc

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