mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-14 20:54:16 +01:00
Add Move, MouseOver, MouseOut, Focus
This commit is contained in:
parent
b81cb9c74c
commit
78781c8988
6 changed files with 264 additions and 10 deletions
22
Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonCloseArgs.cs
Normal file
22
Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonCloseArgs.cs
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
namespace Dalamud.Game.Addon.Lifecycle.AddonArgTypes;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Addon argument data for Close events.
|
||||||
|
/// </summary>
|
||||||
|
public class AddonCloseArgs : AddonArgs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="AddonCloseArgs"/> class.
|
||||||
|
/// </summary>
|
||||||
|
internal AddonCloseArgs()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override AddonArgsType Type => AddonArgsType.Close;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether the window should fire the callback method on close.
|
||||||
|
/// </summary>
|
||||||
|
public bool FireCallback { get; set; }
|
||||||
|
}
|
||||||
32
Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonHideArgs.cs
Normal file
32
Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonHideArgs.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
namespace Dalamud.Game.Addon.Lifecycle.AddonArgTypes;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Addon argument data for Hide events.
|
||||||
|
/// </summary>
|
||||||
|
public class AddonHideArgs : AddonArgs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="AddonHideArgs"/> class.
|
||||||
|
/// </summary>
|
||||||
|
internal AddonHideArgs()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override AddonArgsType Type => AddonArgsType.Hide;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether to call the hide callback handler when this hides.
|
||||||
|
/// </summary>
|
||||||
|
public bool CallHideCallback { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the flags that the window will set when it Shows/Hides.
|
||||||
|
/// </summary>
|
||||||
|
public uint SetShowHideFlags { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether something for this event message.
|
||||||
|
/// </summary>
|
||||||
|
internal bool UnknownBool { get; set; }
|
||||||
|
}
|
||||||
27
Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonShowArgs.cs
Normal file
27
Dalamud/Game/Addon/Lifecycle/AddonArgTypes/AddonShowArgs.cs
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
namespace Dalamud.Game.Addon.Lifecycle.AddonArgTypes;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Addon argument data for Show events.
|
||||||
|
/// </summary>
|
||||||
|
public class AddonShowArgs : AddonArgs
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="AddonShowArgs"/> class.
|
||||||
|
/// </summary>
|
||||||
|
internal AddonShowArgs()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public override AddonArgsType Type => AddonArgsType.Show;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a value indicating whether the window should play open sound effects.
|
||||||
|
/// </summary>
|
||||||
|
public bool SilenceOpenSoundEffect { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the flags that the window will unset when it Shows/Hides.
|
||||||
|
/// </summary>
|
||||||
|
public uint UnsetShowHideFlags { get; set; }
|
||||||
|
}
|
||||||
|
|
@ -29,4 +29,19 @@ public enum AddonArgsType
|
||||||
/// Contains argument data for ReceiveEvent.
|
/// Contains argument data for ReceiveEvent.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
ReceiveEvent,
|
ReceiveEvent,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Contains argument data for Show.
|
||||||
|
/// </summary>
|
||||||
|
Show,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Contains argument data for Hide.
|
||||||
|
/// </summary>
|
||||||
|
Hide,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Contains argument data for Close.
|
||||||
|
/// </summary>
|
||||||
|
Close,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -127,32 +127,80 @@ public enum AddonEvent
|
||||||
PostOpen,
|
PostOpen,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An even that is fired before an addon processes its close method.
|
/// An even that is fired before an addon processes its Close method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PreClose,
|
PreClose,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An event that is fired after an addon has processed its close method.
|
/// An event that is fired after an addon has processed its Close method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PostClose,
|
PostClose,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An event that is fired before an addon processes its show method.
|
/// An event that is fired before an addon processes its Show method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PreShow,
|
PreShow,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An event that is fired after an addon has processed its show method.
|
/// An event that is fired after an addon has processed its Show method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PostShow,
|
PostShow,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An event that is fired before an addon processes its hide method.
|
/// An event that is fired before an addon processes its Hide method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PreHide,
|
PreHide,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An event that is fired after an addon has processed its hide method.
|
/// An event that is fired after an addon has processed its Hide method.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
PostHide,
|
PostHide,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired before an addon processes its OnMove method.
|
||||||
|
/// OnMove is triggered only when a move is completed.
|
||||||
|
/// </summary>
|
||||||
|
PreMove,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired after an addon has processed its OnMove method.
|
||||||
|
/// OnMove is triggered only when a move is completed.
|
||||||
|
/// </summary>
|
||||||
|
PostMove,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired before an addon processes its MouseOver method.
|
||||||
|
/// </summary>
|
||||||
|
PreMouseOver,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired after an addon has processed its MouseOver method.
|
||||||
|
/// </summary>
|
||||||
|
PostMouseOver,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired before an addon processes its MouseOut method.
|
||||||
|
/// </summary>
|
||||||
|
PreMouseOut,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired after an addon has processed its MouseOut method.
|
||||||
|
/// </summary>
|
||||||
|
PostMouseOut,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired before an addon processes its Focus method.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Be aware this is only called for certain popup windows, it is not triggered when clicking on windows.
|
||||||
|
/// </remarks>
|
||||||
|
PreFocus,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// An event that is fired after an addon has processed its Focus method.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Be aware this is only called for certain popup windows, it is not triggered when clicking on windows.
|
||||||
|
/// </remarks>
|
||||||
|
PostFocus,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
// Copying extra entries is not problematic, and is considered safe.
|
// Copying extra entries is not problematic, and is considered safe.
|
||||||
private const int VirtualTableEntryCount = 200;
|
private const int VirtualTableEntryCount = 200;
|
||||||
|
|
||||||
private const bool EnableLogging = false;
|
private const bool EnableLogging = true;
|
||||||
|
|
||||||
private static readonly ModuleLog Log = new("LifecycleVT");
|
private static readonly ModuleLog Log = new("LifecycleVT");
|
||||||
|
|
||||||
|
|
@ -35,9 +35,13 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
private readonly AddonRequestedUpdateArgs requestedUpdateArgs = new();
|
private readonly AddonRequestedUpdateArgs requestedUpdateArgs = new();
|
||||||
private readonly AddonReceiveEventArgs receiveEventArgs = new();
|
private readonly AddonReceiveEventArgs receiveEventArgs = new();
|
||||||
private readonly AddonArgs openArgs = new();
|
private readonly AddonArgs openArgs = new();
|
||||||
private readonly AddonArgs closeArgs = new();
|
private readonly AddonCloseArgs closeArgs = new();
|
||||||
private readonly AddonArgs showArgs = new();
|
private readonly AddonShowArgs showArgs = new();
|
||||||
private readonly AddonArgs hideArgs = new();
|
private readonly AddonHideArgs hideArgs = new();
|
||||||
|
private readonly AddonArgs onMoveArgs = new();
|
||||||
|
private readonly AddonArgs onMouseOverArgs = new();
|
||||||
|
private readonly AddonArgs onMouseOutArgs = new();
|
||||||
|
private readonly AddonArgs focusArgs = new();
|
||||||
|
|
||||||
private readonly AtkUnitBase* atkUnitBase;
|
private readonly AtkUnitBase* atkUnitBase;
|
||||||
|
|
||||||
|
|
@ -58,6 +62,10 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
private readonly AtkUnitBase.Delegates.Close closeFunction;
|
private readonly AtkUnitBase.Delegates.Close closeFunction;
|
||||||
private readonly AtkUnitBase.Delegates.Show showFunction;
|
private readonly AtkUnitBase.Delegates.Show showFunction;
|
||||||
private readonly AtkUnitBase.Delegates.Hide hideFunction;
|
private readonly AtkUnitBase.Delegates.Hide hideFunction;
|
||||||
|
private readonly AtkUnitBase.Delegates.OnMove onMoveFunction;
|
||||||
|
private readonly AtkUnitBase.Delegates.OnMouseOver onMouseOverFunction;
|
||||||
|
private readonly AtkUnitBase.Delegates.OnMouseOut onMouseOutFunction;
|
||||||
|
private readonly AtkUnitBase.Delegates.Focus focusFunction;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="AddonVirtualTable"/> class.
|
/// Initializes a new instance of the <see cref="AddonVirtualTable"/> class.
|
||||||
|
|
@ -94,6 +102,10 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
this.closeFunction = this.OnAddonClose;
|
this.closeFunction = this.OnAddonClose;
|
||||||
this.showFunction = this.OnAddonShow;
|
this.showFunction = this.OnAddonShow;
|
||||||
this.hideFunction = this.OnAddonHide;
|
this.hideFunction = this.OnAddonHide;
|
||||||
|
this.onMoveFunction = this.OnMove;
|
||||||
|
this.onMouseOverFunction = this.OnMouseOver;
|
||||||
|
this.onMouseOutFunction = this.OnMouseOut;
|
||||||
|
this.focusFunction = this.OnFocus;
|
||||||
|
|
||||||
// Overwrite specific virtual table entries
|
// Overwrite specific virtual table entries
|
||||||
this.modifiedVirtualTable->Dtor = (delegate* unmanaged<AtkUnitBase*, byte, AtkEventListener*>)Marshal.GetFunctionPointerForDelegate(this.destructorFunction);
|
this.modifiedVirtualTable->Dtor = (delegate* unmanaged<AtkUnitBase*, byte, AtkEventListener*>)Marshal.GetFunctionPointerForDelegate(this.destructorFunction);
|
||||||
|
|
@ -108,6 +120,10 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
this.modifiedVirtualTable->Close = (delegate* unmanaged<AtkUnitBase*, bool, bool>)Marshal.GetFunctionPointerForDelegate(this.closeFunction);
|
this.modifiedVirtualTable->Close = (delegate* unmanaged<AtkUnitBase*, bool, bool>)Marshal.GetFunctionPointerForDelegate(this.closeFunction);
|
||||||
this.modifiedVirtualTable->Show = (delegate* unmanaged<AtkUnitBase*, bool, uint, void>)Marshal.GetFunctionPointerForDelegate(this.showFunction);
|
this.modifiedVirtualTable->Show = (delegate* unmanaged<AtkUnitBase*, bool, uint, void>)Marshal.GetFunctionPointerForDelegate(this.showFunction);
|
||||||
this.modifiedVirtualTable->Hide = (delegate* unmanaged<AtkUnitBase*, bool, bool, uint, void>)Marshal.GetFunctionPointerForDelegate(this.hideFunction);
|
this.modifiedVirtualTable->Hide = (delegate* unmanaged<AtkUnitBase*, bool, bool, uint, void>)Marshal.GetFunctionPointerForDelegate(this.hideFunction);
|
||||||
|
this.modifiedVirtualTable->OnMove = (delegate* unmanaged<AtkUnitBase*, void>)Marshal.GetFunctionPointerForDelegate(this.onMoveFunction);
|
||||||
|
this.modifiedVirtualTable->OnMouseOver = (delegate* unmanaged<AtkUnitBase*, void>)Marshal.GetFunctionPointerForDelegate(this.onMouseOverFunction);
|
||||||
|
this.modifiedVirtualTable->OnMouseOut = (delegate* unmanaged<AtkUnitBase*, void>)Marshal.GetFunctionPointerForDelegate(this.onMouseOutFunction);
|
||||||
|
this.modifiedVirtualTable->Focus = (delegate* unmanaged<AtkUnitBase*, void>)Marshal.GetFunctionPointerForDelegate(this.focusFunction);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
|
|
@ -200,6 +216,9 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
this.updateArgs.Addon = addon;
|
this.updateArgs.Addon = addon;
|
||||||
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreUpdate, this.updateArgs);
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreUpdate, this.updateArgs);
|
||||||
|
|
||||||
|
// Note: Do not pass or allow manipulation of delta.
|
||||||
|
// It's realistically not something that should be needed.
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.originalVirtualTable->Update(addon, delta);
|
this.originalVirtualTable->Update(addon, delta);
|
||||||
|
|
@ -321,8 +340,11 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
var result = false;
|
var result = false;
|
||||||
|
|
||||||
this.closeArgs.Addon = thisPtr;
|
this.closeArgs.Addon = thisPtr;
|
||||||
|
this.closeArgs.FireCallback = fireCallback;
|
||||||
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreClose, this.closeArgs);
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreClose, this.closeArgs);
|
||||||
|
|
||||||
|
fireCallback = this.closeArgs.FireCallback;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
result = this.originalVirtualTable->Close(thisPtr, fireCallback);
|
result = this.originalVirtualTable->Close(thisPtr, fireCallback);
|
||||||
|
|
@ -342,8 +364,13 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
this.LogEvent(EnableLogging);
|
this.LogEvent(EnableLogging);
|
||||||
|
|
||||||
this.showArgs.Addon = thisPtr;
|
this.showArgs.Addon = thisPtr;
|
||||||
|
this.showArgs.SilenceOpenSoundEffect = silenceOpenSoundEffect;
|
||||||
|
this.showArgs.UnsetShowHideFlags = unsetShowHideFlags;
|
||||||
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreShow, this.showArgs);
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreShow, this.showArgs);
|
||||||
|
|
||||||
|
silenceOpenSoundEffect = this.showArgs.SilenceOpenSoundEffect;
|
||||||
|
unsetShowHideFlags = this.showArgs.UnsetShowHideFlags;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.originalVirtualTable->Show(thisPtr, silenceOpenSoundEffect, unsetShowHideFlags);
|
this.originalVirtualTable->Show(thisPtr, silenceOpenSoundEffect, unsetShowHideFlags);
|
||||||
|
|
@ -361,8 +388,15 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
this.LogEvent(EnableLogging);
|
this.LogEvent(EnableLogging);
|
||||||
|
|
||||||
this.hideArgs.Addon = thisPtr;
|
this.hideArgs.Addon = thisPtr;
|
||||||
|
this.hideArgs.UnknownBool = unkBool;
|
||||||
|
this.hideArgs.CallHideCallback = callHideCallback;
|
||||||
|
this.hideArgs.SetShowHideFlags = setShowHideFlags;
|
||||||
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreHide, this.hideArgs);
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreHide, this.hideArgs);
|
||||||
|
|
||||||
|
unkBool = this.hideArgs.UnknownBool;
|
||||||
|
callHideCallback = this.hideArgs.CallHideCallback;
|
||||||
|
setShowHideFlags = this.hideArgs.SetShowHideFlags;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.originalVirtualTable->Hide(thisPtr, unkBool, callHideCallback, setShowHideFlags);
|
this.originalVirtualTable->Hide(thisPtr, unkBool, callHideCallback, setShowHideFlags);
|
||||||
|
|
@ -375,6 +409,82 @@ internal unsafe class AddonVirtualTable : IDisposable
|
||||||
this.lifecycleService.InvokeListenersSafely(AddonEvent.PostHide, this.hideArgs);
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PostHide, this.hideArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnMove(AtkUnitBase* thisPtr)
|
||||||
|
{
|
||||||
|
this.LogEvent(EnableLogging);
|
||||||
|
|
||||||
|
this.onMoveArgs.Addon = thisPtr;
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreMove, this.onMoveArgs);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.originalVirtualTable->OnMove(thisPtr);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e, "Caught exception when calling original OnMove. This may be a bug in the game or another plugin hooking this method.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PostMove, this.onMoveArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMouseOver(AtkUnitBase* thisPtr)
|
||||||
|
{
|
||||||
|
this.LogEvent(EnableLogging);
|
||||||
|
|
||||||
|
this.onMouseOverArgs.Addon = thisPtr;
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreMouseOver, this.onMouseOverArgs);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.originalVirtualTable->OnMouseOver(thisPtr);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e, "Caught exception when calling original OnMouseOver. This may be a bug in the game or another plugin hooking this method.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PostMouseOver, this.onMouseOverArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnMouseOut(AtkUnitBase* thisPtr)
|
||||||
|
{
|
||||||
|
this.LogEvent(EnableLogging);
|
||||||
|
|
||||||
|
this.onMouseOutArgs.Addon = thisPtr;
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreMouseOut, this.onMouseOutArgs);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.originalVirtualTable->OnMouseOut(thisPtr);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e, "Caught exception when calling original OnMouseOut. This may be a bug in the game or another plugin hooking this method.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PostMouseOut, this.onMouseOutArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnFocus(AtkUnitBase* thisPtr)
|
||||||
|
{
|
||||||
|
this.LogEvent(EnableLogging);
|
||||||
|
|
||||||
|
this.focusArgs.Addon = thisPtr;
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PreFocus, this.focusArgs);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.originalVirtualTable->Focus(thisPtr);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.Error(e, "Caught exception when calling original OnFocus. This may be a bug in the game or another plugin hooking this method.");
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lifecycleService.InvokeListenersSafely(AddonEvent.PostFocus, this.focusArgs);
|
||||||
|
}
|
||||||
|
|
||||||
[Conditional("DEBUG")]
|
[Conditional("DEBUG")]
|
||||||
private void LogEvent(bool loggingEnabled, [CallerMemberName] string caller = "")
|
private void LogEvent(bool loggingEnabled, [CallerMemberName] string caller = "")
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue