Better cleanup logic

This commit is contained in:
Soreepeong 2023-12-08 23:33:35 +09:00
parent 8967174cd9
commit 2521658a98

View file

@ -32,6 +32,7 @@ internal sealed unsafe class ImGuiClipboardConfig : IServiceType, IDisposable
private readonly nint clipboardUserDataOriginal;
private readonly delegate* unmanaged<nint, byte*, void> setTextOriginal;
private readonly delegate* unmanaged<nint, byte*> getTextOriginal;
private GCHandle clipboardUserData;
[ServiceManager.ServiceConstructor]
private ImGuiClipboardConfig(InterfaceManager.InterfaceManagerWithScene imws)
@ -46,7 +47,7 @@ internal sealed unsafe class ImGuiClipboardConfig : IServiceType, IDisposable
this.clipboardUserDataOriginal = io.ClipboardUserData;
io.SetClipboardTextFn = (nint)(delegate* unmanaged<nint, byte*, void>)(&StaticSetClipboardTextImpl);
io.GetClipboardTextFn = (nint)(delegate* unmanaged<nint, byte*>)&StaticGetClipboardTextImpl;
io.ClipboardUserData = GCHandle.ToIntPtr(GCHandle.Alloc(this));
io.ClipboardUserData = GCHandle.ToIntPtr(this.clipboardUserData = GCHandle.Alloc(this));
return;
[UnmanagedCallersOnly]
@ -76,14 +77,15 @@ internal sealed unsafe class ImGuiClipboardConfig : IServiceType, IDisposable
private void ReleaseUnmanagedResources()
{
var io = ImGui.GetIO();
if (io.ClipboardUserData == default)
if (!this.clipboardUserData.IsAllocated)
return;
GCHandle.FromIntPtr(io.ClipboardUserData).Free();
var io = ImGui.GetIO();
io.SetClipboardTextFn = (nint)this.setTextOriginal;
io.GetClipboardTextFn = (nint)this.getTextOriginal;
io.ClipboardUserData = this.clipboardUserDataOriginal;
this.clipboardUserData.Free();
}
private void SetClipboardTextImpl(byte* text)