Fix datagrid crash bug

This commit is contained in:
Zihan Chen
2020-12-21 18:34:33 -08:00
parent 62f7fe1981
commit 4fbb25c072
2 changed files with 21 additions and 17 deletions
+18 -17
View File
@@ -20778,6 +20778,19 @@ GuiMenuButton
return ownerMenuService?ownerMenuService->GetPreferredDirection():IGuiMenuService::Horizontal; 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() GuiMenu* GuiMenuButton::ProvideDropdownMenu()
{ {
return GetSubMenu(); return GetSubMenu();
@@ -20800,10 +20813,7 @@ GuiMenuButton
GuiMenuButton::~GuiMenuButton() GuiMenuButton::~GuiMenuButton()
{ {
if(subMenu && ownedSubMenu) DetachSubMenu();
{
delete subMenu;
}
} }
Ptr<GuiImageData> GuiMenuButton::GetLargeImage() Ptr<GuiImageData> GuiMenuButton::GetLargeImage()
@@ -20874,19 +20884,13 @@ GuiMenuButton
void GuiMenuButton::SetSubMenu(GuiMenu* value, bool owned) void GuiMenuButton::SetSubMenu(GuiMenu* value, bool owned)
{ {
if(subMenu) DetachSubMenu();
{
if(ownedSubMenu)
{
delete subMenu;
}
}
subMenu=value; subMenu=value;
ownedSubMenu=owned; ownedSubMenu=owned;
if(subMenu) if(subMenu)
{ {
subMenu->WindowOpened.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowOpened); subMenuWindowOpenedHandler = subMenu->WindowOpened.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowOpened);
subMenu->WindowClosed.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowClosed); subMenuWindowClosedHandler = subMenu->WindowClosed.AttachMethod(this, &GuiMenuButton::OnSubMenuWindowClosed);
} }
GetControlTemplateObject(true)->SetSubMenuExisting(subMenu != nullptr); GetControlTemplateObject(true)->SetSubMenuExisting(subMenu != nullptr);
} }
@@ -20895,10 +20899,7 @@ GuiMenuButton
{ {
if(subMenu) if(subMenu)
{ {
if(ownedSubMenu) DetachSubMenu();
{
delete subMenu;
}
subMenu=0; subMenu=0;
ownedSubMenu=false; ownedSubMenu=false;
GetControlTemplateObject(true)->SetSubMenuExisting(false); GetControlTemplateObject(true)->SetSubMenuExisting(false);
+3
View File
@@ -15845,6 +15845,8 @@ MenuButton
using IEventHandler = compositions::IGuiGraphicsEventHandler; using IEventHandler = compositions::IGuiGraphicsEventHandler;
protected: protected:
Ptr<IEventHandler> subMenuWindowOpenedHandler;
Ptr<IEventHandler> subMenuWindowClosedHandler;
Ptr<IEventHandler> hostClickedHandler; Ptr<IEventHandler> hostClickedHandler;
Ptr<IEventHandler> hostMouseEnterHandler; Ptr<IEventHandler> hostMouseEnterHandler;
Ptr<GuiImageData> image; Ptr<GuiImageData> image;
@@ -15869,6 +15871,7 @@ MenuButton
virtual IGuiMenuService::Direction GetSubMenuDirection(); virtual IGuiMenuService::Direction GetSubMenuDirection();
private: private:
void DetachSubMenu();
GuiMenu* ProvideDropdownMenu()override; GuiMenu* ProvideDropdownMenu()override;
public: public: