diff --git a/ReactCommon/fabric/events/EventEmitter.cpp b/ReactCommon/fabric/events/EventEmitter.cpp index 9d8b0ffbd..213a80f2d 100644 --- a/ReactCommon/fabric/events/EventEmitter.cpp +++ b/ReactCommon/fabric/events/EventEmitter.cpp @@ -76,14 +76,18 @@ void EventEmitter::dispatchEvent( } void EventEmitter::setEnabled(bool enabled) const { - enabled_ = enabled; + bool alreadyEnabled = eventTarget_ != nullptr; + if (enabled == alreadyEnabled) { + return; + } + if (!enabled) { - eventTarget_ = nullptr; + eventTarget_.reset(); } } bool EventEmitter::getEnabled() const { - return enabled_; + return eventTarget_ != nullptr; } } // namespace react diff --git a/ReactCommon/fabric/events/EventEmitter.h b/ReactCommon/fabric/events/EventEmitter.h index 788f4c2cf..eb757b4a8 100644 --- a/ReactCommon/fabric/events/EventEmitter.h +++ b/ReactCommon/fabric/events/EventEmitter.h @@ -56,6 +56,8 @@ public: /* * Indicates that an event can be delivered to `eventTarget`. * Callsite must acquire `DispatchMutex` to access those methods. + * The `setEnabled` operation is not guaranteed: the `EventEmitter` cannot + * be re-enabled after disabling; in this case, the method does nothing. */ void setEnabled(bool enabled) const; bool getEnabled() const; @@ -75,7 +77,6 @@ private: mutable SharedEventTarget eventTarget_; Tag tag_; WeakEventDispatcher eventDispatcher_; - mutable bool enabled_; // Protected by `DispatchMutex`. }; } // namespace react