diff --git a/frameworks/bridge/common/dom/dom_menu.cpp b/frameworks/bridge/common/dom/dom_menu.cpp index dba64f557c1123062ac1e733c9f3a6ffc9b71772..cad91311f336ebd8fb898ae8deae240b96aa172d 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 7ef84154d6c9a20edb002c4e1067d4a0c57116fd..4f44b38fbe2a67be541fd0a22ebb4f91957614ef 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; };