diff --git a/Import/GacUI.cpp b/Import/GacUI.cpp index e5b80c4e..9240e1dc 100644 --- a/Import/GacUI.cpp +++ b/Import/GacUI.cpp @@ -20778,6 +20778,19 @@ GuiMenuButton return ownerMenuService?ownerMenuService->GetPreferredDirection():IGuiMenuService::Horizontal; } + void GuiMenuButton::DetachSubMenu() + { + if (subMenu) + { + subMenu->WindowOpened.Detach(subMenuWindowOpenedHandler); + subMenu->WindowClosed.Detach(subMenuWindowClosedHandler); + if (ownedSubMenu) + { + delete subMenu; + } + } + } + GuiMenu* GuiMenuButton::ProvideDropdownMenu() { return GetSubMenu(); @@ -20800,10 +20813,7 @@ GuiMenuButton GuiMenuButton::~GuiMenuButton() { - if(subMenu && ownedSubMenu) - { - delete subMenu; - } + DetachSubMenu(); } Ptr GuiMenuButton::GetLargeImage() @@ -20874,19 +20884,13 @@ GuiMenuButton void GuiMenuButton::SetSubMenu(GuiMenu* value, bool owned) { - if(subMenu) - { - if(ownedSubMenu) - { - delete subMenu; - } - } + DetachSubMenu(); subMenu=value; ownedSubMenu=owned; if(subMenu) { - subMenu->WindowOpened.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowOpened); - subMenu->WindowClosed.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowClosed); + subMenuWindowOpenedHandler = subMenu->WindowOpened.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowOpened); + subMenuWindowClosedHandler = subMenu->WindowClosed.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowClosed); } GetControlTemplateObject(true)->SetSubMenuExisting(subMenu != nullptr); } @@ -20895,10 +20899,7 @@ GuiMenuButton { if(subMenu) { - if(ownedSubMenu) - { - delete subMenu; - } + DetachSubMenu(); subMenu=0; ownedSubMenu=false; GetControlTemplateObject(true)->SetSubMenuExisting(false); diff --git a/Import/GacUI.h b/Import/GacUI.h index ce2620f8..4a1c20f8 100644 --- a/Import/GacUI.h +++ b/Import/GacUI.h @@ -15845,6 +15845,8 @@ MenuButton using IEventHandler = compositions::IGuiGraphicsEventHandler; protected: + Ptr subMenuWindowOpenedHandler; + Ptr subMenuWindowClosedHandler; Ptr hostClickedHandler; Ptr hostMouseEnterHandler; Ptr image; @@ -15869,6 +15871,7 @@ MenuButton virtual IGuiMenuService::Direction GetSubMenuDirection(); private: + void DetachSubMenu(); GuiMenu* ProvideDropdownMenu()override; public: