mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-19 13:02:37 +08:00
Fabric: Making EventEmitter reenableable
Summary: The first implementation of EventEmitter's enable/disable feature didn't not provide a way to enable an object after it was disabled. Apparently, we need this functionality due that fact that all nodes of the same family share same event emitter. Reviewed By: mdvacca Differential Revision: D10395849 fbshipit-source-id: 0eba54f0bb7ded35d64afb6559e6e27208c2b577
This commit is contained in:
committed by
Facebook Github Bot
parent
f2da2d1963
commit
764dd511d2
@@ -38,6 +38,7 @@ EventEmitter::EventEmitter(
|
||||
Tag tag,
|
||||
WeakEventDispatcher eventDispatcher)
|
||||
: eventTarget_(std::move(eventTarget)),
|
||||
weakEventTarget_({}),
|
||||
tag_(tag),
|
||||
eventDispatcher_(std::move(eventDispatcher)) {}
|
||||
|
||||
@@ -66,7 +67,11 @@ void EventEmitter::setEnabled(bool enabled) const {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!enabled) {
|
||||
if (enabled) {
|
||||
eventTarget_ = weakEventTarget_.lock();
|
||||
weakEventTarget_.reset();
|
||||
} else {
|
||||
weakEventTarget_ = eventTarget_;
|
||||
eventTarget_.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,8 +55,8 @@ class EventEmitter {
|
||||
/*
|
||||
* 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.
|
||||
* The `setEnabled` operation is not guaranteed: sometimes `EventEmitter`
|
||||
* can be re-enabled after disabling, sometimes not.
|
||||
*/
|
||||
void setEnabled(bool enabled) const;
|
||||
bool getEnabled() const;
|
||||
@@ -79,6 +79,7 @@ class EventEmitter {
|
||||
|
||||
private:
|
||||
mutable SharedEventTarget eventTarget_;
|
||||
mutable WeakEventTarget weakEventTarget_;
|
||||
Tag tag_;
|
||||
WeakEventDispatcher eventDispatcher_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user