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.
119 lines
3.7 KiB
119 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);
|
|
|
|
|
|
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
|
|
|
|
|