|
@@ -103,3 +103,28 @@ void HtmlView::mousemove_event(GMouseEvent& event)
|
|
|
update();
|
|
|
event.accept();
|
|
|
}
|
|
|
+
|
|
|
+void HtmlView::mousedown_event(GMouseEvent& event)
|
|
|
+{
|
|
|
+ if (!m_layout_root)
|
|
|
+ return GScrollableWidget::mousemove_event(event);
|
|
|
+
|
|
|
+ bool hovered_node_changed = false;
|
|
|
+ auto result = m_layout_root->hit_test(event.position());
|
|
|
+ if (result.layout_node) {
|
|
|
+ auto* node = result.layout_node->node();
|
|
|
+ m_document->set_hovered_node(const_cast<Node*>(node));
|
|
|
+ hovered_node_changed = node == m_document->hovered_node();
|
|
|
+ if (node) {
|
|
|
+ dbg() << "HtmlView: mousedown: " << node->tag_name() << "{" << node << "}";
|
|
|
+ if (auto* link = node->enclosing_link_element()) {
|
|
|
+ dbg() << "HtmlView: clicking on a link to " << link->href();
|
|
|
+ if (on_link_click)
|
|
|
+ on_link_click(link->href());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (hovered_node_changed)
|
|
|
+ update();
|
|
|
+ event.accept();
|
|
|
+}
|