diff --git a/Userland/Libraries/LibWeb/DOM/Text.cpp b/Userland/Libraries/LibWeb/DOM/Text.cpp index b9a6921acc8..5758e9b2e06 100644 --- a/Userland/Libraries/LibWeb/DOM/Text.cpp +++ b/Userland/Libraries/LibWeb/DOM/Text.cpp @@ -35,8 +35,7 @@ void Text::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); SlottableMixin::visit_edges(visitor); - - visitor.visit(dynamic_cast(m_owner.ptr())); + visitor.visit(m_owner); } // https://dom.spec.whatwg.org/#dom-text-text @@ -47,6 +46,15 @@ WebIDL::ExceptionOr> Text::construct_impl(JS::Realm& real return realm.heap().allocate(realm, window.associated_document(), data); } +EditableTextNodeOwner* Text::editable_text_node_owner() +{ + if (!m_owner) + return nullptr; + EditableTextNodeOwner* owner = dynamic_cast(m_owner.ptr()); + VERIFY(owner); + return owner; +} + // https://dom.spec.whatwg.org/#dom-text-splittext // https://dom.spec.whatwg.org/#concept-text-split WebIDL::ExceptionOr> Text::split_text(size_t offset) diff --git a/Userland/Libraries/LibWeb/DOM/Text.h b/Userland/Libraries/LibWeb/DOM/Text.h index 621273880f9..4f35a54632e 100644 --- a/Userland/Libraries/LibWeb/DOM/Text.h +++ b/Userland/Libraries/LibWeb/DOM/Text.h @@ -39,8 +39,8 @@ public: void set_max_length(Optional max_length) { m_max_length = move(max_length); } template T> - void set_editable_text_node_owner(Badge, EditableTextNodeOwner& owner_element) { m_owner = &owner_element; } - EditableTextNodeOwner* editable_text_node_owner() { return m_owner.ptr(); } + void set_editable_text_node_owner(Badge, Element& owner_element) { m_owner = &owner_element; } + EditableTextNodeOwner* editable_text_node_owner(); WebIDL::ExceptionOr> split_text(size_t offset); @@ -55,7 +55,7 @@ protected: virtual void visit_edges(Cell::Visitor&) override; private: - JS::GCPtr m_owner; + JS::GCPtr m_owner; bool m_always_editable { false }; Optional m_max_length {}; diff --git a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp index 8d690c92389..22ff77cf23a 100644 --- a/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp +++ b/Userland/Libraries/LibWeb/HTML/BrowsingContext.cpp @@ -328,7 +328,7 @@ void BrowsingContext::did_edit(Badge) if (m_cursor_position && is(*m_cursor_position->node())) { auto& text_node = static_cast(*m_cursor_position->node()); - if (auto* text_node_owner = text_node.editable_text_node_owner()) + if (auto text_node_owner = text_node.editable_text_node_owner()) text_node_owner->did_edit_text_node({}); } }