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;
}
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<GuiImageData> 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);
+3
View File
@@ -15845,6 +15845,8 @@ MenuButton
using IEventHandler = compositions::IGuiGraphicsEventHandler;
protected:
Ptr<IEventHandler> subMenuWindowOpenedHandler;
Ptr<IEventHandler> subMenuWindowClosedHandler;
Ptr<IEventHandler> hostClickedHandler;
Ptr<IEventHandler> hostMouseEnterHandler;
Ptr<GuiImageData> image;
@@ -15869,6 +15871,7 @@ MenuButton
virtual IGuiMenuService::Direction GetSubMenuDirection();
private:
void DetachSubMenu();
GuiMenu* ProvideDropdownMenu()override;
public: