From e075a26ff784b2262088d87ce7bfcf121a107844 Mon Sep 17 00:00:00 2001
From: Ottermandias <70807659+Ottermandias@users.noreply.github.com>
Date: Thu, 11 Apr 2024 23:19:19 +0200
Subject: [PATCH 01/24] Make IPC work with nullable types and null values.
(#1765)
---
Dalamud/Plugin/Ipc/Internal/CallGateChannel.cs | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Dalamud/Plugin/Ipc/Internal/CallGateChannel.cs b/Dalamud/Plugin/Ipc/Internal/CallGateChannel.cs
index 54adf2163..ead4d8df9 100644
--- a/Dalamud/Plugin/Ipc/Internal/CallGateChannel.cs
+++ b/Dalamud/Plugin/Ipc/Internal/CallGateChannel.cs
@@ -166,7 +166,12 @@ internal class CallGateChannel
if (arg == null)
{
if (paramType.IsValueType)
+ {
+ if (paramType.IsGenericType && paramType.GetGenericTypeDefinition() == typeof(Nullable<>))
+ continue;
+
throw new IpcValueNullError(this.Name, paramType, i);
+ }
continue;
}
From e32fc002775b71a16663f0eb9ac3b69e2f70eabc Mon Sep 17 00:00:00 2001
From: MidoriKami <9083275+MidoriKami@users.noreply.github.com>
Date: Thu, 11 Apr 2024 14:23:13 -0700
Subject: [PATCH 02/24] IContextMenu Tweaks and Cleanup (#1753)
* Tweaks and cleanup
* Fix backwards logic
---
Dalamud/Game/Gui/ContextMenu/ContextMenu.cs | 41 ++++++++++-----------
Dalamud/Game/Gui/ContextMenu/MenuArgs.cs | 18 +++++++--
Dalamud/Game/Gui/ContextMenu/MenuItem.cs | 15 ++++++++
Dalamud/Plugin/Services/IContextMenu.cs | 7 ++--
4 files changed, 53 insertions(+), 28 deletions(-)
diff --git a/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs b/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs
index 70b0f53d2..80324a2d3 100644
--- a/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs
+++ b/Dalamud/Game/Gui/ContextMenu/ContextMenu.cs
@@ -47,14 +47,14 @@ internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextM
this.addonContextMenuOnMenuSelectedHook.Enable();
}
- private unsafe delegate ushort RaptureAtkModuleOpenAddonByAgentDelegate(RaptureAtkModule* module, byte* addonName, AtkUnitBase* addon, int valueCount, AtkValue* values, AgentInterface* agent, nint a7, ushort parentAddonId);
+ private delegate ushort RaptureAtkModuleOpenAddonByAgentDelegate(RaptureAtkModule* module, byte* addonName, AtkUnitBase* addon, int valueCount, AtkValue* values, AgentInterface* agent, nint a7, ushort parentAddonId);
- private unsafe delegate bool AddonContextMenuOnMenuSelectedDelegate(AddonContextMenu* addon, int selectedIdx, byte a3);
+ private delegate bool AddonContextMenuOnMenuSelectedDelegate(AddonContextMenu* addon, int selectedIdx, byte a3);
- private unsafe delegate ushort RaptureAtkModuleOpenAddonDelegate(RaptureAtkModule* a1, uint addonNameId, uint valueCount, AtkValue* values, AgentInterface* parentAgent, ulong unk, ushort parentAddonId, int unk2);
+ private delegate ushort RaptureAtkModuleOpenAddonDelegate(RaptureAtkModule* a1, uint addonNameId, uint valueCount, AtkValue* values, AgentInterface* parentAgent, ulong unk, ushort parentAddonId, int unk2);
///
- public event IContextMenu.OnMenuOpenedDelegate OnMenuOpened;
+ public event IContextMenu.OnMenuOpenedDelegate? OnMenuOpened;
private Dictionary> MenuItems { get; } = new();
@@ -171,7 +171,7 @@ internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextM
private void SetupGenericMenu(int headerCount, int sizeHeaderIdx, int returnHeaderIdx, int submenuHeaderIdx, IReadOnlyList