You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

120 lines
3.7 KiB

--[[
This file contains hooks which are required by WIM's core.
Module specific hooks are found within it's own files.
]]
-------------------------------------------------------------------------------------------
-- The following hooks will account for anything that is being inserted into default chat frame and
-- spoofs other callers into thinking that they are actually linking into the chat frame.
--DEFAULT_CHAT_FRAME.editBox
local Hooked_ChatFrameEditBoxes = {};
-- may no longer be needed.... not sure of other addons depend on it...
local function hookChatFrameEditBox(editBox)
if(editBox and not Hooked_ChatFrameEditBoxes[editBox:GetName()]) then
hooksecurefunc(editBox, "Insert", function(self,theText)
if(WIM.EditBoxInFocus) then
WIM.EditBoxInFocus:Insert(theText);
end
end )
editBox.wimIsVisible = editBox.IsVisible;
editBox.IsVisible = function(self)
if(WIM.EditBoxInFocus) then
return true;
else
return self:wimIsVisible();
end
end
editBox.wimIsShown = editBox.IsShown;
editBox.IsShown = function(self)
if(WIM.EditBoxInFocus) then
return true;
else
return self:wimIsShown();
end
end
-- can not hook GetText() because it taints the chat bar. Breaks /tar
hooksecurefunc(editBox, "SetText", function(self,theText)
local firstChar = "";
--if a slash command is being set, ignore it. Let WoW take control of it.
if(string.len(theText) > 0) then firstChar = string.sub(theText, 1, 1); end
if(WIM.EditBoxInFocus and firstChar ~= "/") then
WIM.EditBoxInFocus:SetText(theText);
end
end );
editBox.wimHighlightText = editBox.HighlightText;
editBox.HighlightText = function(self, theStart, theEnd)
if(WIM.EditBoxInFocus) then
WIM.EditBoxInFocus:HighlightText(theStart, theEnd);
else
self:wimHighlightText(theStart, theEnd);
end
end
Hooked_ChatFrameEditBoxes[editBox:GetName()] = true;
end
end
hooksecurefunc("ChatEdit_ActivateChat", function(editBox)
hookChatFrameEditBox(editBox);
end);
4 years ago
function WIM.getVisibleChatFrameEditBox()
for eb in pairs(Hooked_ChatFrameEditBoxes) do
if _G[eb]:wimIsVisible() then
return _G[eb];
end
end
end
-------------------------------------------------------------------------------------------
-- linking hooks
local ChatEdit_GetActiveWindow_orig = ChatEdit_GetActiveWindow;
function ChatEdit_GetActiveWindow()
--[[
--local tb = debugstack();
--DEFAULT_CHAT_FRAME:AddMessage(tb);
if(WIM.EditBoxInFocus) then
-- if WIM has focus, see where its coming from first...
-- if from ChatEdit_InsertLink, return EditBoxInFocus, otherwise, return normal.
if(tb:match('ChatEdit_InsertLink')) then
return WIM.EditBoxInFocus;
end
end
]]
return WIM.EditBoxInFocus or ChatEdit_GetActiveWindow_orig();
end
--ItemRef Definitions
local registeredItemRef = {};
function WIM.RegisterItemRefHandler(cmd, fun)
registeredItemRef[cmd] = fun;
end
local ItemRefTooltip_SetHyperlink = ItemRefTooltip.SetHyperlink;
ItemRefTooltip.SetHyperlink = function(self, link)
for cmd, fun in pairs(registeredItemRef) do
if(string.match(link, "^"..cmd..":")) then
fun(link);
return;
end
end
ItemRefTooltip_SetHyperlink(self, link);
end
-- Dri: workaround for WoW build15050 whisper bug when x-realm server name contains a space.
local origChatFrame_SendTell = _G.ChatFrame_SendTell
_G.ChatFrame_SendTell = function(name, chatframe, ...)
name = gsub(name," ","")
origChatFrame_SendTell(name, chatframe, ...)
end