include return value from hooked chat handler; this seems to fix t… (#9)

include return value from hooked chat handler; this seems to fix the context menu issues
This commit is contained in:
goaaats 2019-11-18 20:32:15 +09:00 committed by GitHub
commit 9727dc7fff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,7 +10,7 @@ using Serilog;
namespace Dalamud.Game.Internal.Gui { namespace Dalamud.Game.Internal.Gui {
public sealed class ChatGui : IDisposable { public sealed class ChatGui : IDisposable {
[UnmanagedFunctionPointer(CallingConvention.ThisCall)] [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
private delegate void PrintMessageDelegate(IntPtr manager, XivChatType chatType, IntPtr senderName, private delegate IntPtr PrintMessageDelegate(IntPtr manager, XivChatType chatType, IntPtr senderName,
IntPtr message, IntPtr message,
uint senderId, IntPtr parameter); uint senderId, IntPtr parameter);
@ -79,8 +79,10 @@ namespace Dalamud.Game.Internal.Gui {
} }
} }
private void HandlePrintMessageDetour(IntPtr manager, XivChatType chattype, IntPtr pSenderName, IntPtr pMessage, private IntPtr HandlePrintMessageDetour(IntPtr manager, XivChatType chattype, IntPtr pSenderName, IntPtr pMessage,
uint senderid, IntPtr parameter) { uint senderid, IntPtr parameter) {
IntPtr retVal = IntPtr.Zero;
try { try {
var senderName = StdString.ReadFromPointer(pSenderName); var senderName = StdString.ReadFromPointer(pSenderName);
var message = StdString.ReadFromPointer(pMessage); var message = StdString.ReadFromPointer(pMessage);
@ -105,7 +107,7 @@ namespace Dalamud.Game.Internal.Gui {
// Print the original chat if it's handled. // Print the original chat if it's handled.
if (!isHandled) if (!isHandled)
this.printMessageHook.Original(manager, chattype, pSenderName, messagePtr, senderid, parameter); retVal = this.printMessageHook.Original(manager, chattype, pSenderName, messagePtr, senderid, parameter);
if (this.baseAddress == IntPtr.Zero) if (this.baseAddress == IntPtr.Zero)
this.baseAddress = manager; this.baseAddress = manager;
@ -113,8 +115,10 @@ namespace Dalamud.Game.Internal.Gui {
allocatedString?.Dispose(); allocatedString?.Dispose();
} catch (Exception ex) { } catch (Exception ex) {
Log.Error(ex, "Exception on OnChatMessage hook."); Log.Error(ex, "Exception on OnChatMessage hook.");
this.printMessageHook.Original(manager, chattype, pSenderName, pMessage, senderid, parameter); retVal = this.printMessageHook.Original(manager, chattype, pSenderName, pMessage, senderid, parameter);
} }
return retVal;
} }
/// <summary> /// <summary>