From f3d7c6f2ea81660e4e664dd076064ad897447be8 Mon Sep 17 00:00:00 2001 From: goat Date: Thu, 26 Dec 2024 17:05:10 +0100 Subject: [PATCH] don't access nullptr addon when shutting down early --- Dalamud/Game/Gui/ContextMenu/ContextMenu.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs b/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs index 604af5ac7..fb78e6b80 100644 --- a/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs +++ b/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs @@ -47,9 +47,9 @@ internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextM } private delegate ushort AtkModuleVf22OpenAddonByAgentDelegate(AtkModule* module, byte* addonName, int valueCount, AtkValue* values, AgentInterface* agent, nint a7, bool a8); - + private delegate bool AddonContextMenuOnMenuSelectedDelegate(AddonContextMenu* addon, int selectedIdx, byte a3); - + private delegate ushort RaptureAtkModuleOpenAddonDelegate(RaptureAtkModule* a1, uint addonNameId, uint valueCount, AtkValue* values, AgentInterface* parentAgent, ulong unk, ushort parentAddonId, int unk2); /// @@ -92,16 +92,22 @@ internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextM /// void IInternalDisposableService.DisposeService() { + this.atkModuleVf22OpenAddonByAgentHook.Dispose(); + this.addonContextMenuOnMenuSelectedHook.Dispose(); + var manager = RaptureAtkUnitManager.Instance(); + if (manager == null) + return; + var menu = manager->GetAddonByName("ContextMenu"); var submenu = manager->GetAddonByName("AddonContextSub"); + if (menu == null || submenu == null) + return; + if (menu->IsVisible) menu->FireCallbackInt(-1); if (submenu->IsVisible) submenu->FireCallbackInt(-1); - - this.atkModuleVf22OpenAddonByAgentHook.Dispose(); - this.addonContextMenuOnMenuSelectedHook.Dispose(); } ///