Fabric: Now EventEmitter::setEnabled() relies on stored eventTarget is not being nullptr

Summary:
This diff implements a new model of managing `enabled` flag in EventEmitter.
Now we simply rely on `eventTarget_` is not being `nullptr` (and we reset the pointer to "disable" the event emitter).

Reviewed By: mdvacca

Differential Revision: D9764857

fbshipit-source-id: 1dd3ce0c8589048babbf2dbac9f8359358b31a34
This commit is contained in:
Valentin Shergin
2018-09-13 22:56:02 -07:00
committed by Facebook Github Bot
parent c25d5948a5
commit b6e42517e5
2 changed files with 9 additions and 4 deletions

View File

@@ -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

View File

@@ -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