From 58347677f95f6cd34dc30ae69a75d6ebb5dc3916 Mon Sep 17 00:00:00 2001 From: Samuel Susla Date: Tue, 3 Mar 2020 04:19:11 -0800 Subject: [PATCH] Back out "UIManager.findNodeAtPoint now returns shadowNode instead of instanceHandle" Summary: Original commit changeset: bd2a1bcd26ab changelog: [Internal] Reviewed By: mdvacca Differential Revision: D20196869 fbshipit-source-id: 53235dc3475d79f9e3545c9aa42171f23137be5a --- ReactCommon/fabric/core/events/EventEmitter.h | 2 ++ ReactCommon/fabric/uimanager/UIManagerBinding.cpp | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/ReactCommon/fabric/core/events/EventEmitter.h b/ReactCommon/fabric/core/events/EventEmitter.h index db11b43007a..91db82ed3a6 100644 --- a/ReactCommon/fabric/core/events/EventEmitter.h +++ b/ReactCommon/fabric/core/events/EventEmitter.h @@ -81,6 +81,8 @@ class EventEmitter { private: void toggleEventTargetOwnership_() const; + friend class UIManagerBinding; + mutable SharedEventTarget eventTarget_; EventDispatcher::Weak eventDispatcher_; diff --git a/ReactCommon/fabric/uimanager/UIManagerBinding.cpp b/ReactCommon/fabric/uimanager/UIManagerBinding.cpp index c57af017cd6..c300bcc828b 100644 --- a/ReactCommon/fabric/uimanager/UIManagerBinding.cpp +++ b/ReactCommon/fabric/uimanager/UIManagerBinding.cpp @@ -268,8 +268,15 @@ jsi::Value UIManagerBinding::get( arguments[3].getObject(runtime).getFunction(runtime); auto targetNode = uiManager->findNodeAtPoint(node, Point{locationX, locationY}); - - onSuccessFunction.call(runtime, valueFromShadowNode(runtime, targetNode)); + auto &eventTarget = targetNode->getEventEmitter()->eventTarget_; + + EventEmitter::DispatchMutex().lock(); + eventTarget->retain(runtime); + auto instanceHandle = eventTarget->getInstanceHandle(runtime); + eventTarget->release(runtime); + EventEmitter::DispatchMutex().unlock(); + + onSuccessFunction.call(runtime, std::move(instanceHandle)); return jsi::Value::undefined(); }); }