From c82fec0a8cc871aa331de5a557db1adddca7711c Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 21 Aug 2024 08:54:11 -0400 Subject: [PATCH] LibWeb: Add a factory method to create a DataTransferItem A DataTransferItem is associated with a DataTransfer, and points to an item in the drag data store. We don't yet support removing items from the store, but when we do, we will clear the index stored here to set the DataTransferItem's mode to "disabled". --- .../Libraries/LibWeb/HTML/DataTransferItem.cpp | 16 +++++++++++++++- .../Libraries/LibWeb/HTML/DataTransferItem.h | 9 ++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItem.cpp b/Userland/Libraries/LibWeb/HTML/DataTransferItem.cpp index 543f87fd148..471fe7a547a 100644 --- a/Userland/Libraries/LibWeb/HTML/DataTransferItem.cpp +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItem.cpp @@ -7,14 +7,22 @@ #include #include #include +#include #include namespace Web::HTML { JS_DEFINE_ALLOCATOR(DataTransferItem); -DataTransferItem::DataTransferItem(JS::Realm& realm) +JS::NonnullGCPtr DataTransferItem::create(JS::Realm& realm, JS::NonnullGCPtr data_transfer, size_t item_index) +{ + return realm.heap().allocate(realm, realm, data_transfer, item_index); +} + +DataTransferItem::DataTransferItem(JS::Realm& realm, JS::NonnullGCPtr data_transfer, size_t item_index) : PlatformObject(realm) + , m_data_transfer(data_transfer) + , m_item_index(item_index) { } @@ -26,4 +34,10 @@ void DataTransferItem::initialize(JS::Realm& realm) WEB_SET_PROTOTYPE_FOR_INTERFACE(DataTransferItem); } +void DataTransferItem::visit_edges(JS::Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_data_transfer); +} + } diff --git a/Userland/Libraries/LibWeb/HTML/DataTransferItem.h b/Userland/Libraries/LibWeb/HTML/DataTransferItem.h index 68aa0380b8f..ea27da64095 100644 --- a/Userland/Libraries/LibWeb/HTML/DataTransferItem.h +++ b/Userland/Libraries/LibWeb/HTML/DataTransferItem.h @@ -6,8 +6,10 @@ #pragma once +#include #include #include +#include namespace Web::HTML { @@ -17,12 +19,17 @@ class DataTransferItem : public Bindings::PlatformObject { JS_DECLARE_ALLOCATOR(DataTransferItem); public: + static JS::NonnullGCPtr create(JS::Realm&, JS::NonnullGCPtr, size_t item_index); virtual ~DataTransferItem() override; private: - DataTransferItem(JS::Realm&); + DataTransferItem(JS::Realm&, JS::NonnullGCPtr, size_t item_index); virtual void initialize(JS::Realm&) override; + virtual void visit_edges(JS::Cell::Visitor&) override; + + JS::NonnullGCPtr m_data_transfer; + Optional m_item_index; }; }