From b1d89d0e3c972373d8189dd6ea62ff83445d345f Mon Sep 17 00:00:00 2001 From: yangfan Date: Wed, 9 Feb 2022 16:34:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4dommenu=E4=B8=AD=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E6=B3=A8=E5=86=8C=E7=9A=84backend=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: yangfan Change-Id: If189c2c9d04f8c66d9165e4673361af69ecd4440 --- frameworks/bridge/common/dom/dom_menu.cpp | 31 ++++++++++++++++------- frameworks/bridge/common/dom/dom_menu.h | 5 +++- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/frameworks/bridge/common/dom/dom_menu.cpp b/frameworks/bridge/common/dom/dom_menu.cpp index dba64f557c1..cad91311f33 100644 --- a/frameworks/bridge/common/dom/dom_menu.cpp +++ b/frameworks/bridge/common/dom/dom_menu.cpp @@ -34,6 +34,19 @@ DOMMenu::DOMMenu(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, n menuChild_ = AceType::MakeRefPtr(std::to_string(nodeId), nodeName); } +DOMMenu::~DOMMenu() +{ + if (!clickMarkerId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(clickMarkerId_); + } + if (!focusMarkerId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(focusMarkerId_); + } + if (!longPressMarkerId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(longPressMarkerId_); + } +} + void DOMMenu::InitializeStyle() { ResetInitializedStyle(); @@ -130,9 +143,9 @@ RefPtr DOMMenu::GetSpecializedComponent() void DOMMenu::BindIdNode(const RefPtr& idNode) { if (SystemProperties::GetDeviceType() == DeviceType::TV) { - EventMarker clickMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + focusMarkerId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); BackEndEventManager::GetInstance().BindBackendEvent( - clickMarker, [weak = WeakClaim(this), idNode]() { + focusMarkerId_, [weak = WeakClaim(this), idNode]() { if (!idNode || idNode->IsNodeDisabled()) { return; } @@ -146,12 +159,12 @@ void DOMMenu::BindIdNode(const RefPtr& idNode) targetCallback(targetId, Offset(0, 0)); } }); - idNode->SetOnFocusClick(clickMarker); + idNode->SetOnFocusClick(focusMarkerId_); } if (isClickType_) { - EventMarker clickMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + clickMarkerId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); BackEndEventManager::GetInstance().BindBackendEvent( - clickMarker, [weak = WeakClaim(this), idNode](const ClickInfo& clickInfo) { + clickMarkerId_, [weak = WeakClaim(this), idNode](const ClickInfo& clickInfo) { auto domMenu = weak.Upgrade(); if (!domMenu || !idNode) { return; @@ -162,12 +175,12 @@ void DOMMenu::BindIdNode(const RefPtr& idNode) targetCallback(targetId, clickInfo.GetGlobalLocation()); } }); - idNode->SetOnClick(clickMarker); + idNode->SetOnClick(clickMarkerId_); } else { - EventMarker longPressMarker = + longPressMarkerId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); BackEndEventManager::GetInstance().BindBackendEvent( - longPressMarker, [weak = WeakClaim(this), idNode](const LongPressInfo& longPressInfo) { + longPressMarkerId_, [weak = WeakClaim(this), idNode](const LongPressInfo& longPressInfo) { auto domMenu = weak.Upgrade(); if (!domMenu || !idNode) { return; @@ -178,7 +191,7 @@ void DOMMenu::BindIdNode(const RefPtr& idNode) targetCallback(targetId, longPressInfo.GetGlobalLocation()); } }); - idNode->SetOnLongPress(longPressMarker); + idNode->SetOnLongPress(longPressMarkerId_); } } diff --git a/frameworks/bridge/common/dom/dom_menu.h b/frameworks/bridge/common/dom/dom_menu.h index 7ef84154d6c..4f44b38fbe2 100644 --- a/frameworks/bridge/common/dom/dom_menu.h +++ b/frameworks/bridge/common/dom/dom_menu.h @@ -27,7 +27,7 @@ class DOMMenu final : public DOMNode { public: DOMMenu(NodeId nodeId, const std::string& nodeName); - ~DOMMenu() override = default; + ~DOMMenu() override; void BindIdNode(const RefPtr& idNode); @@ -51,6 +51,9 @@ private: RefPtr menuChild_; TextStyle titleStyle_; + EventMarker clickMarkerId_; + EventMarker focusMarkerId_; + EventMarker longPressMarkerId_; bool isClickType_ = true; }; -- Gitee