Skip to content

Commit 764dd51

Browse files
sherginfacebook-github-bot
authored andcommitted
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
1 parent f2da2d1 commit 764dd51

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

Diff for: ReactCommon/fabric/events/EventEmitter.cpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ EventEmitter::EventEmitter(
3838
Tag tag,
3939
WeakEventDispatcher eventDispatcher)
4040
: eventTarget_(std::move(eventTarget)),
41+
weakEventTarget_({}),
4142
tag_(tag),
4243
eventDispatcher_(std::move(eventDispatcher)) {}
4344

@@ -66,7 +67,11 @@ void EventEmitter::setEnabled(bool enabled) const {
6667
return;
6768
}
6869

69-
if (!enabled) {
70+
if (enabled) {
71+
eventTarget_ = weakEventTarget_.lock();
72+
weakEventTarget_.reset();
73+
} else {
74+
weakEventTarget_ = eventTarget_;
7075
eventTarget_.reset();
7176
}
7277
}

Diff for: ReactCommon/fabric/events/EventEmitter.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ class EventEmitter {
5555
/*
5656
* Indicates that an event can be delivered to `eventTarget`.
5757
* Callsite must acquire `DispatchMutex` to access those methods.
58-
* The `setEnabled` operation is not guaranteed: the `EventEmitter` cannot
59-
* be re-enabled after disabling; in this case, the method does nothing.
58+
* The `setEnabled` operation is not guaranteed: sometimes `EventEmitter`
59+
* can be re-enabled after disabling, sometimes not.
6060
*/
6161
void setEnabled(bool enabled) const;
6262
bool getEnabled() const;
@@ -79,6 +79,7 @@ class EventEmitter {
7979

8080
private:
8181
mutable SharedEventTarget eventTarget_;
82+
mutable WeakEventTarget weakEventTarget_;
8283
Tag tag_;
8384
WeakEventDispatcher eventDispatcher_;
8485
};

0 commit comments

Comments
 (0)