mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-02-23 08:17:47 +01:00
Better cleanup logic
This commit is contained in:
parent
8967174cd9
commit
2521658a98
1 changed files with 6 additions and 4 deletions
|
|
@ -32,6 +32,7 @@ internal sealed unsafe class ImGuiClipboardConfig : IServiceType, IDisposable
|
||||||
private readonly nint clipboardUserDataOriginal;
|
private readonly nint clipboardUserDataOriginal;
|
||||||
private readonly delegate* unmanaged<nint, byte*, void> setTextOriginal;
|
private readonly delegate* unmanaged<nint, byte*, void> setTextOriginal;
|
||||||
private readonly delegate* unmanaged<nint, byte*> getTextOriginal;
|
private readonly delegate* unmanaged<nint, byte*> getTextOriginal;
|
||||||
|
private GCHandle clipboardUserData;
|
||||||
|
|
||||||
[ServiceManager.ServiceConstructor]
|
[ServiceManager.ServiceConstructor]
|
||||||
private ImGuiClipboardConfig(InterfaceManager.InterfaceManagerWithScene imws)
|
private ImGuiClipboardConfig(InterfaceManager.InterfaceManagerWithScene imws)
|
||||||
|
|
@ -46,7 +47,7 @@ internal sealed unsafe class ImGuiClipboardConfig : IServiceType, IDisposable
|
||||||
this.clipboardUserDataOriginal = io.ClipboardUserData;
|
this.clipboardUserDataOriginal = io.ClipboardUserData;
|
||||||
io.SetClipboardTextFn = (nint)(delegate* unmanaged<nint, byte*, void>)(&StaticSetClipboardTextImpl);
|
io.SetClipboardTextFn = (nint)(delegate* unmanaged<nint, byte*, void>)(&StaticSetClipboardTextImpl);
|
||||||
io.GetClipboardTextFn = (nint)(delegate* unmanaged<nint, byte*>)&StaticGetClipboardTextImpl;
|
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;
|
return;
|
||||||
|
|
||||||
[UnmanagedCallersOnly]
|
[UnmanagedCallersOnly]
|
||||||
|
|
@ -76,14 +77,15 @@ internal sealed unsafe class ImGuiClipboardConfig : IServiceType, IDisposable
|
||||||
|
|
||||||
private void ReleaseUnmanagedResources()
|
private void ReleaseUnmanagedResources()
|
||||||
{
|
{
|
||||||
var io = ImGui.GetIO();
|
if (!this.clipboardUserData.IsAllocated)
|
||||||
if (io.ClipboardUserData == default)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GCHandle.FromIntPtr(io.ClipboardUserData).Free();
|
var io = ImGui.GetIO();
|
||||||
io.SetClipboardTextFn = (nint)this.setTextOriginal;
|
io.SetClipboardTextFn = (nint)this.setTextOriginal;
|
||||||
io.GetClipboardTextFn = (nint)this.getTextOriginal;
|
io.GetClipboardTextFn = (nint)this.getTextOriginal;
|
||||||
io.ClipboardUserData = this.clipboardUserDataOriginal;
|
io.ClipboardUserData = this.clipboardUserDataOriginal;
|
||||||
|
|
||||||
|
this.clipboardUserData.Free();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetClipboardTextImpl(byte* text)
|
private void SetClipboardTextImpl(byte* text)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue