diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index 9cc62912227..dac48eccf2b 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -477,14 +477,11 @@ Document::Document(JS::Realm& realm, const URL::URL& url, TemporaryDocumentForFr if (!cursor_position) return; - auto node = cursor_position->node(); - if (!node) - return; - auto navigable = this->navigable(); if (!navigable || !navigable->is_focused()) return; + auto node = cursor_position->node(); node->document().update_layout(UpdateLayoutReason::CursorBlinkTimer); if (node->paintable()) { diff --git a/Libraries/LibWeb/DOM/Position.cpp b/Libraries/LibWeb/DOM/Position.cpp index 0c8c28840c4..b45fe15335d 100644 --- a/Libraries/LibWeb/DOM/Position.cpp +++ b/Libraries/LibWeb/DOM/Position.cpp @@ -1,6 +1,7 @@ /* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2021, Max Wipfli + * Copyright (c) 2025, Jelle Raaijmakers * * SPDX-License-Identifier: BSD-2-Clause */ @@ -13,7 +14,7 @@ namespace Web::DOM { GC_DEFINE_ALLOCATOR(Position); -Position::Position(GC::Ptr node, unsigned offset) +Position::Position(GC::Ref node, unsigned offset) : m_node(node) , m_offset(offset) { @@ -27,8 +28,6 @@ void Position::visit_edges(Visitor& visitor) ErrorOr Position::to_string() const { - if (!node()) - return String::formatted("DOM::Position(nullptr, {})", offset()); return String::formatted("DOM::Position({} ({})), {})", node()->node_name(), node().ptr(), offset()); } diff --git a/Libraries/LibWeb/DOM/Position.h b/Libraries/LibWeb/DOM/Position.h index 9464f695f5b..d831474b549 100644 --- a/Libraries/LibWeb/DOM/Position.h +++ b/Libraries/LibWeb/DOM/Position.h @@ -1,6 +1,7 @@ /* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2021, Max Wipfli + * Copyright (c) 2025, Jelle Raaijmakers * * SPDX-License-Identifier: BSD-2-Clause */ @@ -8,7 +9,6 @@ #pragma once #include -#include #include #include #include @@ -26,24 +26,24 @@ public: return realm.create(node, offset); } - GC::Ptr node() { return m_node; } - GC::Ptr node() const { return m_node; } + GC::Ref node() { return m_node; } + GC::Ref node() const { return m_node; } unsigned offset() const { return m_offset; } bool equals(GC::Ref other) const { - return m_node.ptr() == other->m_node.ptr() && m_offset == other->m_offset; + return m_node == other->m_node && m_offset == other->m_offset; } ErrorOr to_string() const; private: - Position(GC::Ptr, unsigned offset); + Position(GC::Ref, unsigned offset); virtual void visit_edges(Visitor&) override; - GC::Ptr m_node; + GC::Ref m_node; unsigned m_offset { 0 }; }; diff --git a/Libraries/LibWeb/Painting/PaintableBox.cpp b/Libraries/LibWeb/Painting/PaintableBox.cpp index 3fd09e3d9e0..b1b7a6fc23f 100644 --- a/Libraries/LibWeb/Painting/PaintableBox.cpp +++ b/Libraries/LibWeb/Painting/PaintableBox.cpp @@ -695,7 +695,7 @@ void paint_cursor_if_needed(DisplayListRecordingContext& context, TextPaintable return; auto cursor_position = document.cursor_position(); - if (!cursor_position || !cursor_position->node()) + if (!cursor_position) return; if (cursor_position->node() != paintable.dom_node())