diff --git a/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.cpp b/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.cpp index 5b95b5d62b3..f55e5023297 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.cpp +++ b/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.cpp @@ -59,12 +59,13 @@ void EventDispatcher::dispatchUniqueEvent(RawEvent&& rawEvent) const { if (eventListeners_.willDispatchEvent(rawEvent)) { return; } + eventQueue_.enqueueUniqueEvent(std::move(rawEvent)); } void EventDispatcher::addListener( - const std::shared_ptr& listener) const { - eventListeners_.addListener(listener); + std::shared_ptr listener) const { + eventListeners_.addListener(std::move(listener)); } /* diff --git a/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.h b/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.h index f339ba6d831..36e4d03c6d9 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.h +++ b/packages/react-native/ReactCommon/react/renderer/core/EventDispatcher.h @@ -64,7 +64,7 @@ class EventDispatcher { /* * Adds provided event listener to the event dispatcher. */ - void addListener(const std::shared_ptr& listener) const; + void addListener(std::shared_ptr listener) const; /* * Removes provided event listener to the event dispatcher. diff --git a/packages/react-native/ReactCommon/react/renderer/core/EventListener.cpp b/packages/react-native/ReactCommon/react/renderer/core/EventListener.cpp index cbe8d3287ba..a64e24fdff7 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/EventListener.cpp +++ b/packages/react-native/ReactCommon/react/renderer/core/EventListener.cpp @@ -16,16 +16,19 @@ bool EventListenerContainer::willDispatchEvent(const RawEvent& event) { bool handled = false; for (const auto& listener : eventListeners_) { - handled = handled || listener->operator()(event); + handled = (*listener)(event); + if (handled) { + break; + } } return handled; } void EventListenerContainer::addListener( - const std::shared_ptr& listener) { + std::shared_ptr listener) { std::unique_lock lock(mutex_); - eventListeners_.push_back(listener); + eventListeners_.push_back(std::move(listener)); } void EventListenerContainer::removeListener( diff --git a/packages/react-native/ReactCommon/react/renderer/core/EventListener.h b/packages/react-native/ReactCommon/react/renderer/core/EventListener.h index ca36430a453..1d5e72168dd 100644 --- a/packages/react-native/ReactCommon/react/renderer/core/EventListener.h +++ b/packages/react-native/ReactCommon/react/renderer/core/EventListener.h @@ -30,7 +30,7 @@ class EventListenerContainer { */ bool willDispatchEvent(const RawEvent& event); - void addListener(const std::shared_ptr& listener); + void addListener(std::shared_ptr listener); void removeListener(const std::shared_ptr& listener); private: diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp index 8469db75820..a178f2b3a76 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.cpp @@ -364,9 +364,9 @@ std::shared_ptr Scheduler::getUIManager() const { } void Scheduler::addEventListener( - const std::shared_ptr& listener) { + std::shared_ptr listener) { if (eventDispatcher_->has_value()) { - eventDispatcher_->value().addListener(listener); + eventDispatcher_->value().addListener(std::move(listener)); } } diff --git a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h index 265aebc9a65..893030895d7 100644 --- a/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h +++ b/packages/react-native/ReactCommon/react/renderer/scheduler/Scheduler.h @@ -109,7 +109,7 @@ class Scheduler final : public UIManagerDelegate { void reportMount(SurfaceId surfaceId) const; #pragma mark - Event listeners - void addEventListener(const std::shared_ptr& listener); + void addEventListener(std::shared_ptr listener); void removeEventListener( const std::shared_ptr& listener);