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 коммит произвёл Facebook Github Bot
Родитель c25d5948a5
Коммит b6e42517e5
2 изменённых файлов: 9 добавлений и 4 удалений

Просмотреть файл

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

Просмотреть файл

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