Quantcast

misc fixes and lib updates

Steven Jackson [07-15-15 - 01:23]
misc fixes and lib updates
Filename
SVUI_!Core/assets/textures/NPC-NAMETAG.blp
SVUI_!Core/libs/_SVUI_Lib/Registry.lua
SVUI_!Core/system/funstuff.lua
SVUI_!Core/xml/widgets.xml
SVUI_!Options/SVUI_!Options.lua
SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua
SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.xml
SVUI_ActionBars/libs/LibActionButton-1.0/Changelog-LibActionButton-1.0-0.27.txt
SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua
SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.toc
SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.xml
SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.lua
SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.toc
SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.lua
SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.toc
SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.lua
SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.toc
SVUI_Skins/components/blizzard/garrison.lua
SVUI_Skins/components/blizzard/misc.lua
SVUI_Skins/components/blizzard/quest.lua
diff --git a/SVUI_!Core/assets/textures/NPC-NAMETAG.blp b/SVUI_!Core/assets/textures/NPC-NAMETAG.blp
new file mode 100644
index 0000000..b6c4077
Binary files /dev/null and b/SVUI_!Core/assets/textures/NPC-NAMETAG.blp differ
diff --git a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
index de18eb2..52bfb1b 100644
--- a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
+++ b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
@@ -541,18 +541,43 @@ local function CheckForDeprecated(oldKey)
   end
 end

+-- local function GenerateProfileKey(key)
+--     local safeKey = key or PRIVATE_SV.SAFEDATA.CurrentProfile;
+--     key = safeKey or "Default";
+--     if(key and key:find(playerName)) then
+--         safeKey = safeKey or ("%s - %s"):format(playerName, "Default");
+--         if(not GLOBAL_SV.profileRealms[safeKey]) then
+--             GLOBAL_SV.profileRealms[safeKey] = playerRealm;
+--         elseif(GLOBAL_SV.profileRealms[safeKey] ~= playerRealm) then
+--             if(not safeKey:find(playerRealm)) then
+--               safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, "Default");
+--             end
+--             GLOBAL_SV.profileRealms[safeKey] = playerRealm;
+--         end
+--     end
+
+--     PRIVATE_SV.SAFEDATA.CurrentProfile = safeKey
+--     return safeKey
+-- end
+
 local function GenerateProfileKey(key)
-    local safeKey = key or PRIVATE_SV.SAFEDATA.CurrentProfile;
-    if(not safeKey) then safeKey = ("%s - %s"):format(playerName, "Default"); end
+    local safeKey = key;
+    if(not safeKey) then
+        safeKey = PRIVATE_SV.SAFEDATA.CurrentProfile or ("%s - %s"):format(playerName, "Default");
+    end
+    key = key or "Default";
     if(not GLOBAL_SV.profileRealms[safeKey]) then
         GLOBAL_SV.profileRealms[safeKey] = playerRealm;
-    elseif(GLOBAL_SV.profileRealms[safeKey] ~= playerRealm) then
-        if(not safeKey:find(playerRealm)) then
-          safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, "Default");
+    elseif(safeKey:find(playerName) and GLOBAL_SV.profileRealms[safeKey] ~= playerRealm) then
+        if(key:find(playerName)) then
+            safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, "Default");
+        else
+            safeKey = ("%s [%s] - %s"):format(playerName, playerRealm, key);
         end
         GLOBAL_SV.profileRealms[safeKey] = playerRealm;
     end
     PRIVATE_SV.SAFEDATA.CurrentProfile = safeKey
+
     return safeKey
 end

diff --git a/SVUI_!Core/system/funstuff.lua b/SVUI_!Core/system/funstuff.lua
index 0b1a830..9c45bfd 100644
--- a/SVUI_!Core/system/funstuff.lua
+++ b/SVUI_!Core/system/funstuff.lua
@@ -29,6 +29,8 @@ local format        = string.format;
 local find          = string.find;
 --MATH
 local math          = _G.math;
+local min 			= math.min;
+local max 			= math.max;
 local random 		= math.random;
 --BLIZZARD API
 local CreateFrame           = _G.CreateFrame;
@@ -61,17 +63,28 @@ NPC
 ]]--
 SV.NPC = _G["SVUI_NPCFrame"];

-local talkAnims = {60,64,65};
+local talkAnims = {60,64,65,67};

 local function NPCTalking()
 	local timer = 0;
 	local sequence = random(1, #talkAnims);
-	SV.NPC.ModelLeft:SetAnimation(talkAnims[sequence],0)
-	SV.NPC.ModelLeft:SetScript("OnUpdate",function(self,e)
+	SV.NPC.Model:ClearModel()
+	SV.NPC.Model:SetUnit('target')
+	SV.NPC.Model:SetCamDistanceScale(1)
+	SV.NPC.Model:SetPortraitZoom(0.95)
+	SV.NPC.Model:SetPosition(0,0,0)
+	SV.NPC.Model:SetAnimation(talkAnims[sequence],0)
+	SV.NPC.Model:SetScript("OnUpdate",function(self,e)
 		if(timer < 2000) then
 			timer = (timer + (e*1000))
 		else
 			timer = 0;
+			self:ClearModel()
+			self:SetUnit('player')
+			self:SetCamDistanceScale(1)
+			self:SetPortraitZoom(0.95)
+			self:SetPosition(0.15,0,0)
+			self:SetRotation(-1)
 			self:SetAnimation(0)
 			self:SetScript("OnUpdate", nil)
 		end
@@ -81,12 +94,26 @@ end
 local function PlayerTalking()
 	local timer = 0;
 	local sequence = random(1, #talkAnims);
-	SV.NPC.ModelRight:SetAnimation(talkAnims[sequence],0)
-	SV.NPC.ModelRight:SetScript("OnUpdate",function(self,e)
+	SV.NPC.Model:ClearModel()
+	SV.NPC.Model:SetUnit('player')
+	SV.NPC.Model:SetCamDistanceScale(1)
+	SV.NPC.Model:SetPortraitZoom(0.95)
+	SV.NPC.Model:SetPosition(0.15,0,0)
+	SV.NPC.Model:SetRotation(-1)
+	SV.NPC.Model:SetAnimation(talkAnims[sequence],0)
+	SV.NPC.Model:SetScript("OnUpdate",function(self,e)
 		if(timer < 2000) then
 			timer = (timer + (e*1000))
 		else
 			timer = 0;
+			if(UnitExists("target")) then
+				self:ClearModel()
+				self:SetUnit('target')
+				self:SetCamDistanceScale(1)
+				self:SetPortraitZoom(0.95)
+				self:SetPosition(0,0,0)
+				self:SetRotation(0)
+			end
 			self:SetAnimation(0)
 			self:SetScript("OnUpdate", nil)
 		end
@@ -96,9 +123,14 @@ end
 function SV.NPC:NPCTalksFirst()
 	if(InCombatLockdown() or (not SV.db.FunStuff.NPC) or (not UnitExists("target"))) then return end
 	local timer = 0;
-	local sequence = random(1, #talkAnims);
-	self.ModelLeft:SetAnimation(talkAnims[sequence],0)
-	self.ModelLeft:SetScript("OnUpdate",function(self,e)
+	self.Model:ClearModel()
+	self.Model:SetUnit('target')
+	self.Model:SetCamDistanceScale(1)
+	self.Model:SetPortraitZoom(0.95)
+	self.Model:SetPosition(0,0,0)
+	self.Model:SetRotation(0)
+	self.Model:SetAnimation(67)
+	self.Model:SetScript("OnUpdate",function(self,e)
 		if(timer < 2000) then
 			timer = (timer + (e*1000))
 		else
@@ -113,9 +145,14 @@ end
 function SV.NPC:PlayerTalksFirst()
 	if(InCombatLockdown() or (not SV.db.FunStuff.NPC) or (not UnitExists("target"))) then return end
 	local timer = 0;
-	local sequence = random(1, #talkAnims);
-	self.ModelRight:SetAnimation(talkAnims[sequence],0)
-	self.ModelRight:SetScript("OnUpdate",function(self,e)
+	self.Model:ClearModel()
+	self.Model:SetUnit('player')
+	self.Model:SetCamDistanceScale(1)
+	self.Model:SetPortraitZoom(0.95)
+	self.Model:SetPosition(0.15,0,0)
+	self.Model:SetRotation(-1)
+	self.Model:SetAnimation(67)
+	self.Model:SetScript("OnUpdate",function(self,e)
 		if(timer < 2000) then
 			timer = (timer + (e*1000))
 		else
@@ -127,7 +164,13 @@ function SV.NPC:PlayerTalksFirst()
 	end)
 end

-function SV.NPC:Toggle(parentFrame)
+local SetNPCText = function(self, text)
+	self:Hide()
+	SV.NPC.InfoTop.Text:SetText(text)
+	SV.NPC.InfoTop:Show()
+end
+
+function SV.NPC:Toggle(parentFrame, textFrame)
 	if(InCombatLockdown() or (not SV.db.FunStuff.NPC) or (not UnitExists("target"))) then return end
 	local timer = 0;
 	if(parentFrame) then
@@ -136,32 +179,39 @@ function SV.NPC:Toggle(parentFrame)
 		self:SetAllPoints(parentFrame)
 		self:Show();
 		self:SetAlpha(1);
-		if(parentFrame:GetLeft() < 150) then
-			local a1,p,a2,x,y = parentFrame:GetPoint()
-			parentFrame:ClearAllPoints();
-			parentFrame:SetPoint(a1,p,a2,x + 150,y)
-		end

-		self.ModelLeft:ClearModel()
-		self.ModelLeft:SetUnit('target')
-		self.ModelLeft:SetCamDistanceScale(1)
-		self.ModelLeft:SetPortraitZoom(0.95)
-		self.ModelLeft:SetPosition(0,0,0)
-
-		self.ModelRight:ClearModel()
-		self.ModelRight:SetUnit('player')
-		self.ModelRight:SetCamDistanceScale(1)
-		self.ModelRight:SetPortraitZoom(0.95)
-		self.ModelRight:SetPosition(0.2,0,0)
-		self.ModelRight:SetRotation(-1)
+		self.Model:ClearModel()
+		self.Model:SetUnit('target')
+		self.Model:SetCamDistanceScale(1)
+		self.Model:SetPortraitZoom(0.95)
+		self.Model:SetPosition(0,0,0)
+
+		if(textFrame and textFrame.GetText) then
+			local text = textFrame:GetText()
+			textFrame:Hide()
+			self.InfoTop.Text:SetText(text)
+			self.InfoTop:Show()
+		else
+			self.InfoTop:Hide()
+		end

 		SV.NPC:NPCTalksFirst()
 	else
-		self.ModelRight:SetScript("OnUpdate", nil)
+		self.Model:SetScript("OnUpdate", nil)
 		self:SetAlpha(0);
+		self.InfoTop:Hide();
 		self:Hide();
 	end
 end
+
+function SV.NPC:Register(parentFrame, textFrame)
+	if(not SV.db.FunStuff.NPC) then return end
+	parentFrame:HookScript('OnShow', function() SV.NPC:Toggle(parentFrame, textFrame) end)
+	parentFrame:HookScript('OnHide', function() SV.NPC:Toggle() end)
+	if(textFrame and textFrame.SetText) then
+		hooksecurefunc(textFrame, "SetText", SetNPCText)
+	end
+end
 --[[
 ##########################################################
 AFK
@@ -680,8 +730,30 @@ local function InitializeFunStuff()
 	gamemenu:SetScript("OnShow", GameMenu_Activate)

 	local npc = SV.NPC;
-	npc.ModelLeft:SetStyle("Frame", "Model", false, 5, 3, 3)
-	npc.ModelRight:SetStyle("Frame", "Model", false, 3, 3, 3)
+	npc.Model:SetStyle("Frame", "Model", false, 5, 3, 3)
+	npc.InfoTop = CreateFrame("Frame", nil, npc)
+	npc.InfoTop:SetPoint("BOTTOMLEFT", npc.Model, "BOTTOMRIGHT", 2, 22)
+	npc.InfoTop:SetSize(196, 98)
+	npc.InfoTop:SetBackdrop({
+		bgFile = [[Interface\AddOns\SVUI_!Core\assets\textures\NPC-NAMETAG]],
+	    tile = false,
+	    tileSize = 0,
+	    edgeFile = [[Interface\AddOns\SVUI_!Core\assets\textures\EMPTY]],
+	    edgeSize = 1,
+	    insets =
+	    {
+	        left = 0,
+	        right = 0,
+	        top = 0,
+	        bottom = 0,
+	    },
+	});
+  	npc.InfoTop:SetBackdropColor(1, 1, 0, 1)
+	npc.InfoTop:SetFrameLevel(npc:GetFrameLevel() + 1)
+
+	npc.InfoTop.Text = npc.InfoTop:CreateFontString(nil, "OVERLAY", "GameFontHighlight")
+	npc.InfoTop.Text:SetPoint("TOPLEFT", npc.InfoTop, "TOPLEFT", 0, -33)
+	npc.InfoTop.Text:SetPoint("BOTTOMRIGHT", npc.InfoTop, "BOTTOMRIGHT", 0, 0)
 end

 SV.Events:On("CORE_INITIALIZED", InitializeFunStuff);
diff --git a/SVUI_!Core/xml/widgets.xml b/SVUI_!Core/xml/widgets.xml
index a5b4042..d421e8e 100644
--- a/SVUI_!Core/xml/widgets.xml
+++ b/SVUI_!Core/xml/widgets.xml
@@ -849,16 +849,10 @@
     <Frame name="SVUI_NPCFrame" hidden="true">
         <Size x="384" y="512"/>
         <Frames>
-            <PlayerModel name="$parentModelLeft" parentKey="ModelLeft" frameStrata="HIGH">
-                <Size x="150" y="256"/>
-                <Anchors>
-                    <Anchor point="RIGHT" relativeTo="$parent" relativePoint="LEFT" x="-6" y="0" />
-                </Anchors>
-            </PlayerModel>
-            <PlayerModel name="$parentModelRight" parentKey="ModelRight" frameStrata="HIGH">
-                <Size x="150" y="256"/>
+            <PlayerModel name="$parentModel" parentKey="Model" frameStrata="HIGH">
+                <Size x="100" y="100"/>
                 <Anchors>
-                    <Anchor point="LEFT" relativeTo="$parent" relativePoint="RIGHT" x="6" y="0" />
+                    <Anchor point="BOTTOM" relativeTo="$parent" relativePoint="TOPLEFT" x="40" y="-50" />
                 </Anchors>
             </PlayerModel>
         </Frames>
diff --git a/SVUI_!Options/SVUI_!Options.lua b/SVUI_!Options/SVUI_!Options.lua
index 1e8bc57..76903a2 100644
--- a/SVUI_!Options/SVUI_!Options.lua
+++ b/SVUI_!Options/SVUI_!Options.lua
@@ -216,6 +216,7 @@ local function RefreshProfileOptions()
 	optionGroup.delete = {
 		order = 11,
 		type = "select",
+		width = "full",
 		name = L["delete"],
 		desc = L["delete_sub"],
 		get = function() return " SELECT ONE" end,
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua
deleted file mode 100644
index 2a64013..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.lua
+++ /dev/null
@@ -1,238 +0,0 @@
---[[ $Id: CallbackHandler-1.0.lua 18 2014-10-16 02:52:20Z mikk $ ]]
-local MAJOR, MINOR = "CallbackHandler-1.0", 6
-local CallbackHandler = LibStub:NewLibrary(MAJOR, MINOR)
-
-if not CallbackHandler then return end -- No upgrade needed
-
-local meta = {__index = function(tbl, key) tbl[key] = {} return tbl[key] end}
-
--- Lua APIs
-local tconcat = table.concat
-local assert, error, loadstring = assert, error, loadstring
-local setmetatable, rawset, rawget = setmetatable, rawset, rawget
-local next, select, pairs, type, tostring = next, select, pairs, type, tostring
-
--- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
--- List them here for Mikk's FindGlobals script
--- GLOBALS: geterrorhandler
-
-local xpcall = xpcall
-
-local function errorhandler(err)
-	return geterrorhandler()(err)
-end
-
-local function CreateDispatcher(argCount)
-	local code = [[
-	local next, xpcall, eh = ...
-
-	local method, ARGS
-	local function call() method(ARGS) end
-
-	local function dispatch(handlers, ...)
-		local index
-		index, method = next(handlers)
-		if not method then return end
-		local OLD_ARGS = ARGS
-		ARGS = ...
-		repeat
-			xpcall(call, eh)
-			index, method = next(handlers, index)
-		until not method
-		ARGS = OLD_ARGS
-	end
-
-	return dispatch
-	]]
-
-	local ARGS, OLD_ARGS = {}, {}
-	for i = 1, argCount do ARGS[i], OLD_ARGS[i] = "arg"..i, "old_arg"..i end
-	code = code:gsub("OLD_ARGS", tconcat(OLD_ARGS, ", ")):gsub("ARGS", tconcat(ARGS, ", "))
-	return assert(loadstring(code, "safecall Dispatcher["..argCount.."]"))(next, xpcall, errorhandler)
-end
-
-local Dispatchers = setmetatable({}, {__index=function(self, argCount)
-	local dispatcher = CreateDispatcher(argCount)
-	rawset(self, argCount, dispatcher)
-	return dispatcher
-end})
-
---------------------------------------------------------------------------
--- CallbackHandler:New
---
---   target            - target object to embed public APIs in
---   RegisterName      - name of the callback registration API, default "RegisterCallback"
---   UnregisterName    - name of the callback unregistration API, default "UnregisterCallback"
---   UnregisterAllName - name of the API to unregister all callbacks, default "UnregisterAllCallbacks". false == don't publish this API.
-
-function CallbackHandler:New(target, RegisterName, UnregisterName, UnregisterAllName)
-
-	RegisterName = RegisterName or "RegisterCallback"
-	UnregisterName = UnregisterName or "UnregisterCallback"
-	if UnregisterAllName==nil then	-- false is used to indicate "don't want this method"
-		UnregisterAllName = "UnregisterAllCallbacks"
-	end
-
-	-- we declare all objects and exported APIs inside this closure to quickly gain access
-	-- to e.g. function names, the "target" parameter, etc
-
-
-	-- Create the registry object
-	local events = setmetatable({}, meta)
-	local registry = { recurse=0, events=events }
-
-	-- registry:Fire() - fires the given event/message into the registry
-	function registry:Fire(eventname, ...)
-		if not rawget(events, eventname) or not next(events[eventname]) then return end
-		local oldrecurse = registry.recurse
-		registry.recurse = oldrecurse + 1
-
-		Dispatchers[select('#', ...) + 1](events[eventname], eventname, ...)
-
-		registry.recurse = oldrecurse
-
-		if registry.insertQueue and oldrecurse==0 then
-			-- Something in one of our callbacks wanted to register more callbacks; they got queued
-			for eventname,callbacks in pairs(registry.insertQueue) do
-				local first = not rawget(events, eventname) or not next(events[eventname])	-- test for empty before. not test for one member after. that one member may have been overwritten.
-				for self,func in pairs(callbacks) do
-					events[eventname][self] = func
-					-- fire OnUsed callback?
-					if first and registry.OnUsed then
-						registry.OnUsed(registry, target, eventname)
-						first = nil
-					end
-				end
-			end
-			registry.insertQueue = nil
-		end
-	end
-
-	-- Registration of a callback, handles:
-	--   self["method"], leads to self["method"](self, ...)
-	--   self with function ref, leads to functionref(...)
-	--   "addonId" (instead of self) with function ref, leads to functionref(...)
-	-- all with an optional arg, which, if present, gets passed as first argument (after self if present)
-	target[RegisterName] = function(self, eventname, method, ... --[[actually just a single arg]])
-		if type(eventname) ~= "string" then
-			error("Usage: "..RegisterName.."(eventname, method[, arg]): 'eventname' - string expected.", 2)
-		end
-
-		method = method or eventname
-
-		local first = not rawget(events, eventname) or not next(events[eventname])	-- test for empty before. not test for one member after. that one member may have been overwritten.
-
-		if type(method) ~= "string" and type(method) ~= "function" then
-			error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - string or function expected.", 2)
-		end
-
-		local regfunc
-
-		if type(method) == "string" then
-			-- self["method"] calling style
-			if type(self) ~= "table" then
-				error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): self was not a table?", 2)
-			elseif self==target then
-				error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): do not use Library:"..RegisterName.."(), use your own 'self'", 2)
-			elseif type(self[method]) ~= "function" then
-				error("Usage: "..RegisterName.."(\"eventname\", \"methodname\"): 'methodname' - method '"..tostring(method).."' not found on self.", 2)
-			end
-
-			if select("#",...)>=1 then	-- this is not the same as testing for arg==nil!
-				local arg=select(1,...)
-				regfunc = function(...) self[method](self,arg,...) end
-			else
-				regfunc = function(...) self[method](self,...) end
-			end
-		else
-			-- function ref with self=object or self="addonId" or self=thread
-			if type(self)~="table" and type(self)~="string" and type(self)~="thread" then
-				error("Usage: "..RegisterName.."(self or \"addonId\", eventname, method): 'self or addonId': table or string or thread expected.", 2)
-			end
-
-			if select("#",...)>=1 then	-- this is not the same as testing for arg==nil!
-				local arg=select(1,...)
-				regfunc = function(...) method(arg,...) end
-			else
-				regfunc = method
-			end
-		end
-
-
-		if events[eventname][self] or registry.recurse<1 then
-		-- if registry.recurse<1 then
-			-- we're overwriting an existing entry, or not currently recursing. just set it.
-			events[eventname][self] = regfunc
-			-- fire OnUsed callback?
-			if registry.OnUsed and first then
-				registry.OnUsed(registry, target, eventname)
-			end
-		else
-			-- we're currently processing a callback in this registry, so delay the registration of this new entry!
-			-- yes, we're a bit wasteful on garbage, but this is a fringe case, so we're picking low implementation overhead over garbage efficiency
-			registry.insertQueue = registry.insertQueue or setmetatable({},meta)
-			registry.insertQueue[eventname][self] = regfunc
-		end
-	end
-
-	-- Unregister a callback
-	target[UnregisterName] = function(self, eventname)
-		if not self or self==target then
-			error("Usage: "..UnregisterName.."(eventname): bad 'self'", 2)
-		end
-		if type(eventname) ~= "string" then
-			error("Usage: "..UnregisterName.."(eventname): 'eventname' - string expected.", 2)
-		end
-		if rawget(events, eventname) and events[eventname][self] then
-			events[eventname][self] = nil
-			-- Fire OnUnused callback?
-			if registry.OnUnused and not next(events[eventname]) then
-				registry.OnUnused(registry, target, eventname)
-			end
-		end
-		if registry.insertQueue and rawget(registry.insertQueue, eventname) and registry.insertQueue[eventname][self] then
-			registry.insertQueue[eventname][self] = nil
-		end
-	end
-
-	-- OPTIONAL: Unregister all callbacks for given selfs/addonIds
-	if UnregisterAllName then
-		target[UnregisterAllName] = function(...)
-			if select("#",...)<1 then
-				error("Usage: "..UnregisterAllName.."([whatFor]): missing 'self' or \"addonId\" to unregister events for.", 2)
-			end
-			if select("#",...)==1 and ...==target then
-				error("Usage: "..UnregisterAllName.."([whatFor]): supply a meaningful 'self' or \"addonId\"", 2)
-			end
-
-
-			for i=1,select("#",...) do
-				local self = select(i,...)
-				if registry.insertQueue then
-					for eventname, callbacks in pairs(registry.insertQueue) do
-						if callbacks[self] then
-							callbacks[self] = nil
-						end
-					end
-				end
-				for eventname, callbacks in pairs(events) do
-					if callbacks[self] then
-						callbacks[self] = nil
-						-- Fire OnUnused callback?
-						if registry.OnUnused and not next(callbacks) then
-							registry.OnUnused(registry, target, eventname)
-						end
-					end
-				end
-			end
-		end
-	end
-
-	return registry
-end
-
-
--- CallbackHandler purposefully does NOT do explicit embedding. Nor does it
--- try to upgrade old implicit embeds since the system is selfcontained and
--- relies on closures to work.
-
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.xml b/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.xml
deleted file mode 100644
index 876df83..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/CallbackHandler-1.0/CallbackHandler-1.0.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
-..\FrameXML\UI.xsd">
-	<Script file="CallbackHandler-1.0.lua"/>
-</Ui>
\ No newline at end of file
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/Changelog-LibActionButton-1.0-0.27.txt b/SVUI_ActionBars/libs/LibActionButton-1.0/Changelog-LibActionButton-1.0-0.27.txt
deleted file mode 100644
index 59094a0..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/Changelog-LibActionButton-1.0-0.27.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-tag 0.27
-e9f4cff39c93f597bcf285af8990cc6c634ba3c1
-Hendrik Leppkes <h.leppkes@gmail.com>
-2015-06-23 15:47:08 +0200
-
-Tag as 0.27
-
-
---------------------
-
-Hendrik Leppkes:
-	- The year is 2015
-	- Update TOC for 6.2
-	- Remove unused function
-	- Fix leaked global
-	- Update charge cooldown handling for 6.2
-	- Remove obsolete overlay glow variables
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua
index 9a62432..da6fd9f 100644
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua
+++ b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.lua
@@ -3,16 +3,16 @@ Copyright (c) 2010-2014, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com>

 All rights reserved.

-Redistribution and use in source and binary forms, with or without
+Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:

-    * Redistributions of source code must retain the above copyright notice,
+    * Redistributions of source code must retain the above copyright notice,
       this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
       and/or other materials provided with the distribution.
-    * Neither the name of the developer nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
+    * Neither the name of the developer nor the names of its contributors
+      may be used to endorse or promote products derived from this software without
       specific prior written permission.

 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
@@ -29,7 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 ]]
 local MAJOR_VERSION = "LibActionButton-1.0"
-local MINOR_VERSION = 61
+local MINOR_VERSION = 57

 if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end
 local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
@@ -55,11 +55,9 @@ local str_match, format, tinsert, tremove = string.match, format, tinsert, tremo
 -- GLOBALS: GetItemIcon, GetItemCount, GetItemCooldown, IsEquippedItem, IsCurrentItem, IsUsableItem, IsConsumableItem, IsItemInRange
 -- GLOBALS: GetActionCharges, IsItemAction, GetSpellCharges
 -- GLOBALS: RANGE_INDICATOR, ATTACK_BUTTON_FLASH_TIME, TOOLTIP_UPDATE_TIME
--- GLOBALS: DraenorZoneAbilityFrame, HasDraenorZoneAbility, GetLastDraenorSpellTexture

 local KeyBound = LibStub("LibKeyBound-1.0", true)
 local CBH = LibStub("CallbackHandler-1.0")
-local LBG = LibStub("LibButtonGlow-1.0", true)

 lib.eventFrame = lib.eventFrame or CreateFrame("Frame")
 lib.eventFrame:UnregisterAllEvents()
@@ -69,8 +67,8 @@ lib.activeButtons = lib.activeButtons or {}
 lib.actionButtons = lib.actionButtons or {}
 lib.nonActionButtons = lib.nonActionButtons or {}

-lib.ChargeCooldowns = lib.ChargeCooldowns or {}
-lib.NumChargeCooldowns = lib.NumChargeCooldowns or 0
+lib.unusedOverlayGlows = lib.unusedOverlayGlows or {}
+lib.numOverlays = lib.numOverlays or 0

 lib.ACTION_HIGHLIGHT_MARKS = lib.ACTION_HIGHLIGHT_MARKS or setmetatable({}, { __index = ACTION_HIGHLIGHT_MARKS })

@@ -112,32 +110,18 @@ local ButtonRegistry, ActiveButtons, ActionButtons, NonActionButtons = lib.butto
 local Update, UpdateButtonState, UpdateUsable, UpdateCount, UpdateCooldown, UpdateTooltip, UpdateNewAction
 local StartFlash, StopFlash, UpdateFlash, UpdateHotkeys, UpdateRangeTimer, UpdateOverlayGlow
 local UpdateFlyout, ShowGrid, HideGrid, UpdateGrid, SetupSecureSnippets, WrapOnClick
-local ShowOverlayGlow, HideOverlayGlow
-local EndChargeCooldown
+local ShowOverlayGlow, HideOverlayGlow, GetOverlayGlow, OverlayGlowAnimOutFinished
+local HookCooldown

 local InitializeEventHandler, OnEvent, ForAllButtons, OnUpdate

-
-local SPELL_POWER_HOLY_POWER = SPELL_POWER_HOLY_POWER;
-local HAND_OF_LIGHT = GetSpellInfo(90174);
-local DIVINE_CRUSADER = GetSpellInfo(144595)
-local PLAYERCLASS = select(2, UnitClass('player'))
-local HOLY_POWER_SPELLS = {
-	[85256] = GetSpellInfo(85256), --Templar's Verdict
-	[53385] = GetSpellInfo(53385), --Divine Storm
-	[53600] = GetSpellInfo(53600), --Shield of the Righteous
-	[157048] = GetSpellInfo(157048), -- Final Verdict
-	[152262] = GetSpellInfo(152262), --Seraphim
-};
-
 local DefaultConfig = {
 	outOfRangeColoring = "button",
 	tooltip = "enabled",
 	showGrid = false,
 	colors = {
 		range = { 0.8, 0.1, 0.1 },
-		mana = { 0.5, 0.5, 1.0 },
-		hp = { 0.5, 0.5, 1.0 }
+		mana = { 0.5, 0.5, 1.0 }
 	},
 	hideElements = {
 		macro = false,
@@ -197,6 +181,9 @@ function lib:CreateButton(id, name, header, config)
 	-- adjust count/stack size
 	button.Count:SetFont(button.Count:GetFont(), 16, "OUTLINE")

+	-- hook Cooldown stuff for alpha fix in 6.0
+	HookCooldown(button)
+
 	-- Store the button in the registry, needed for event and OnUpdate handling
 	if not next(ButtonRegistry) then
 		InitializeEventHandler()
@@ -503,6 +490,10 @@ function Generic:AddToMasque(group)
 	self.MasqueSkinned = true
 end

+function Generic:UpdateAlpha()
+	UpdateCooldown(self)
+end
+
 -----------------------------------------------------------
 --- frame scripts

@@ -530,31 +521,6 @@ local function PickupAny(kind, target, detail, ...)
 	end
 end

-function Generic:OnUpdate(elapsed)
-	if not GetCVarBool('lockActionBars') then return; end
-
-	self.lastupdate = (self.lastupdate or 0) + elapsed;
-	if (self.lastupdate < .2) then return end
-	self.lastupdate = 0
-
-	local isDragKeyDown
-	if GetModifiedClick("PICKUPACTION") == 'ALT' then
-		isDragKeyDown = IsAltKeyDown()
-	elseif GetModifiedClick("PICKUPACTION") == 'CTRL' then
-		isDragKeyDown = IsControlKeyDown()
-	elseif GetModifiedClick("PICKUPACTION") == 'SHIFT' then
-		isDragKeyDown = IsShiftKeyDown()
-	end
-
-	if isDragKeyDown and (self.clickState == 'AnyDown' or self.clickState == nil) then
-		self.clickState = 'AnyUp'
-		self:RegisterForClicks(self.clickState)
-	elseif self.clickState == 'AnyUp' and not isDragKeyDown then
-		self.clickState = 'AnyDown'
-		self:RegisterForClicks(self.clickState)
-	end
-end
-
 function Generic:OnEnter()
 	if self.config.tooltip ~= "disabled" and (self.config.tooltip ~= "nocombat" or not InCombatLockdown()) then
 		UpdateTooltip(self)
@@ -567,15 +533,10 @@ function Generic:OnEnter()
 		lib.ACTION_HIGHLIGHT_MARKS[self._state_action] = false
 		UpdateNewAction(self)
 	end
-
-	if self.config.clickOnDown then
-		self:SetScript('OnUpdate', Generic.OnUpdate)
-	end
 end

 function Generic:OnLeave()
 	GameTooltip:Hide()
-	self:SetScript('OnUpdate', nil)
 end

 -- Insecure drag handler to allow clicking on the button with an action on the cursor
@@ -1067,10 +1028,6 @@ function Update(self)
 		end
 		self.cooldown:Hide()
 		self:SetChecked(false)
-
-		if self.chargeCooldown then
-			EndChargeCooldown(self.chargeCooldown)
-		end
 	end

 	-- Add a green border if button is an equipped item
@@ -1090,23 +1047,6 @@ function Update(self)

 	-- Update icon and hotkey
 	local texture = self:GetTexture()
-
-	-- Draenor zone button handling
-	self.draenorZoneDisabled = false
-	self.icon:SetDesaturated(false)
-	if self._state_type == "action" then
-		local action_type, id = GetActionInfo(self._state_action)
-		if ((action_type == "spell" or action_type == "companion") and DraenorZoneAbilityFrame and DraenorZoneAbilityFrame.baseName and not HasDraenorZoneAbility()) then
-			local name = GetSpellInfo(DraenorZoneAbilityFrame.baseName)
-			local abilityName = GetSpellInfo(id)
-			if name == abilityName then
-				texture = GetLastDraenorSpellTexture()
-				self.draenorZoneDisabled = true
-				self.icon:SetDesaturated(true)
-			end
-		end
-	end
-
 	if texture then
 		self.icon:SetTexture(texture)
 		self.icon:Show()
@@ -1171,23 +1111,6 @@ function UpdateButtonState(self)
 	lib.callbacks:Fire("OnButtonState", self)
 end

-local function IsHolyPowerAbility(actionId)
-	if not actionId or type(actionId) ~= 'number' then return false; end
-	local actionType, id = GetActionInfo(actionId);
-	if actionType == 'macro' then
-		local macroSpell = GetMacroSpell(id);
-		if macroSpell then
-			for spellId, spellName in pairs(HOLY_POWER_SPELLS) do
-				if macroSpell == spellName then
-					return true;
-				end
-			end
-		end
-	else
-		return HOLY_POWER_SPELLS[id];
-	end
-	return false;
-end
 function UpdateUsable(self)
 	-- TODO: make the colors configurable
 	-- TODO: allow disabling of the whole recoloring
@@ -1195,10 +1118,7 @@ function UpdateUsable(self)
 		self.icon:SetVertexColor(unpack(self.config.colors.range))
 	else
 		local isUsable, notEnoughMana = self:IsUsable()
-		local action = self._state_action
-		if PLAYERCLASS == 'PALADIN' and IsHolyPowerAbility(action) and not(UnitPower('player', SPELL_POWER_HOLY_POWER) >= 3 or UnitBuff('player', HAND_OF_LIGHT) or UnitBuff('player', DIVINE_CRUSADER)) then
-			self.icon:SetVertexColor(unpack(self.config.colors.hp))
-		elseif isUsable then
+		if isUsable then
 			self.icon:SetVertexColor(1.0, 1.0, 1.0)
 			--self.NormalTexture:SetVertexColor(1.0, 1.0, 1.0)
 		elseif notEnoughMana then
@@ -1226,7 +1146,7 @@ function UpdateCount(self)
 		end
 	else
 		local charges, maxCharges, chargeStart, chargeDuration = self:GetCharges()
-		if charges and maxCharges and maxCharges > 1 then
+		if charges and maxCharges and maxCharges > 0 then
 			self.Count:SetText(charges)
 		else
 			self.Count:SetText("")
@@ -1234,74 +1154,73 @@ function UpdateCount(self)
 	end
 end

-function EndChargeCooldown(self)
-	self:Hide()
-	self:SetParent(UIParent)
-	self.parent.chargeCooldown = nil
-	self.parent = nil
-	tinsert(lib.ChargeCooldowns, self)
-end
+local function SetCooldownHook(cooldown, ...)
+	local effectiveAlpha = cooldown:GetEffectiveAlpha()
+	local start, duration = ...
+
+	if start ~= 0 or duration ~= 0 then
+		-- update swipe alpha
+		cooldown.__metaLAB.SetSwipeColor(cooldown, cooldown.__SwipeR, cooldown.__SwipeG, cooldown.__SwipeB, cooldown.__SwipeA * effectiveAlpha)

-local function StartChargeCooldown(parent, chargeStart, chargeDuration)
-	if not parent.chargeCooldown then
-		local cooldown = tremove(lib.ChargeCooldowns)
-		if not cooldown then
-			lib.NumChargeCooldowns = lib.NumChargeCooldowns + 1
-			cooldown = CreateFrame("Cooldown", "LAB10ChargeCooldown"..lib.NumChargeCooldowns, parent, "CooldownFrameTemplate");
-			cooldown:SetScript("OnCooldownDone", EndChargeCooldown)
-			cooldown:SetHideCountdownNumbers(true)
-			cooldown:SetDrawEdge(true)
+		-- only draw bling and edge if alpha is over 50%
+		cooldown:SetDrawBling(effectiveAlpha > 0.5)
+		if effectiveAlpha < 0.5 then
+			cooldown:SetDrawEdge(false)
+		end
+
+		-- ensure the swipe isn't drawn on fully faded bars
+		if effectiveAlpha <= 0.0 then
 			cooldown:SetDrawSwipe(false)
 		end
-		cooldown:SetParent(parent)
-		cooldown:SetAllPoints(parent)
-		cooldown:SetFrameStrata("TOOLTIP")
-		cooldown:Show()
-		parent.chargeCooldown = cooldown
-		cooldown.parent = parent
 	end
-	parent.chargeCooldown:SetCooldown(chargeStart, chargeDuration)
-	if not chargeStart or chargeStart == 0 then
-		EndChargeCooldown(parent.chargeCooldown)
+
+	return cooldown.__metaLAB.SetCooldown(cooldown, ...)
+end
+
+local function SetSwipeColorHook(cooldown, r, g, b, a)
+	local effectiveAlpha = cooldown:GetEffectiveAlpha()
+	cooldown.__SwipeR, cooldown.__SwipeG, cooldown.__SwipeB, cooldown.__SwipeA = r, g, b, (a or 1)
+	return cooldown.__metaLAB.SetSwipeColor(cooldown, r, g, b, a * effectiveAlpha)
+end
+
+function HookCooldown(button)
+	if not button.cooldown.__metaLAB then
+		button.cooldown.__metaLAB = getmetatable(button.cooldown).__index
+		button.cooldown.__SwipeR, button.cooldown.__SwipeG, button.cooldown.__SwipeB, button.cooldown.__SwipeA = 0, 0, 0, 0.8
+
+		button.cooldown.SetCooldown = SetCooldownHook
+		button.cooldown.SetSwipeColor = SetSwipeColorHook
 	end
 end

-local function OnCooldownDone(self)
+function OnCooldownDone(self)
 	self:SetScript("OnCooldownDone", nil)
 	UpdateCooldown(self:GetParent())
 end

 function UpdateCooldown(self)
 	local locStart, locDuration = self:GetLossOfControlCooldown()
-	local start, duration, enable = self:GetCooldown()
-	local charges, maxCharges, chargeStart, chargeDuration = self:GetCharges()
+	local start, duration, enable, charges, maxCharges = self:GetCooldown()

 	if (locStart + locDuration) > (start + duration) then
 		if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_LOSS_OF_CONTROL then
 			self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge-LoC")
-			self.cooldown:SetSwipeColor(0.17, 0, 0)
 			self.cooldown:SetHideCountdownNumbers(true)
 			self.cooldown.currentCooldownType = COOLDOWN_TYPE_LOSS_OF_CONTROL
+			self.cooldown:SetSwipeColor(0.17, 0, 0, 0.8)
 		end
-		CooldownFrame_SetTimer(self.cooldown, locStart, locDuration, 1, true)
+		CooldownFrame_SetTimer(self.cooldown, locStart, locDuration, 1, nil, nil, true)
 	else
 		if self.cooldown.currentCooldownType ~= COOLDOWN_TYPE_NORMAL then
 			self.cooldown:SetEdgeTexture("Interface\\Cooldown\\edge")
-			self.cooldown:SetSwipeColor(0, 0, 0)
 			self.cooldown:SetHideCountdownNumbers(false)
 			self.cooldown.currentCooldownType = COOLDOWN_TYPE_NORMAL
+			self.cooldown:SetSwipeColor(0, 0, 0, 0.8)
 		end
 		if locStart > 0 then
 			self.cooldown:SetScript("OnCooldownDone", OnCooldownDone)
 		end
-
-		if charges and maxCharges and maxCharges > 0 and charges < maxCharges then
-			StartChargeCooldown(self, chargeStart, chargeDuration)
-		elseif self.chargeCooldown then
-			EndChargeCooldown(self.chargeCooldown)
-		end
-
-		CooldownFrame_SetTimer(self.cooldown, start, duration, enable)
+		CooldownFrame_SetTimer(self.cooldown, start, duration, enable, charges, maxCharges)
 	end
 end

@@ -1355,18 +1274,64 @@ function UpdateHotkeys(self)
 	end
 end

+local function OverlayGlow_OnHide(self)
+	if self.animOut:IsPlaying() then
+		self.animOut:Stop()
+		OverlayGlowAnimOutFinished(self.animOut)
+	end
+end
+
+function GetOverlayGlow()
+	local overlay = tremove(lib.unusedOverlayGlows);
+	if not overlay then
+		lib.numOverlays = lib.numOverlays + 1
+		overlay = CreateFrame("Frame", "LAB10ActionButtonOverlay"..lib.numOverlays, UIParent, "ActionBarButtonSpellActivationAlert")
+		overlay.animOut:SetScript("OnFinished", OverlayGlowAnimOutFinished)
+		overlay:SetScript("OnHide", OverlayGlow_OnHide)
+	end
+	return overlay
+end
+
 function ShowOverlayGlow(self)
-	if LBG then
-		LBG.ShowOverlayGlow(self)
+	if self.overlay then
+		if self.overlay.animOut:IsPlaying() then
+			self.overlay.animOut:Stop()
+			self.overlay.animIn:Play()
+		end
+	else
+		self.overlay = GetOverlayGlow()
+		local frameWidth, frameHeight = self:GetSize()
+		self.overlay:SetParent(self)
+		self.overlay:ClearAllPoints()
+		--Make the height/width available before the next frame:
+		self.overlay:SetSize(frameWidth * 1.4, frameHeight * 1.4)
+		self.overlay:SetPoint("TOPLEFT", self, "TOPLEFT", -frameWidth * 0.2, frameHeight * 0.2)
+		self.overlay:SetPoint("BOTTOMRIGHT", self, "BOTTOMRIGHT", frameWidth * 0.2, -frameHeight * 0.2)
+		self.overlay.animIn:Play()
 	end
 end

 function HideOverlayGlow(self)
-	if LBG then
-		LBG.HideOverlayGlow(self)
+	if self.overlay then
+		if self.overlay.animIn:IsPlaying() then
+			self.overlay.animIn:Stop()
+		end
+		if self:IsVisible() then
+			self.overlay.animOut:Play()
+		else
+			OverlayGlowAnimOutFinished(self.overlay.animOut)
+		end
 	end
 end

+function OverlayGlowAnimOutFinished(animGroup)
+	local overlay = animGroup:GetParent()
+	local actionButton = overlay:GetParent()
+	overlay:Hide()
+	tinsert(lib.unusedOverlayGlows, overlay)
+	actionButton.overlay = nil
+end
+
 function UpdateOverlayGlow(self)
 	local spellId = self:GetSpellId()
 	if spellId and IsSpellOverlayed(spellId) then
@@ -1437,10 +1402,6 @@ function UpdateFlyout(self)
 				SetClampedTextureRotation(self.FlyoutArrow, 0)
 			end

-			if self.FlyoutUpdateFunc then
-				self.FlyoutUpdateFunc(nil, self)
-			end
-
 			-- return here, otherwise flyout is hidden
 			return
 		end
@@ -1452,6 +1413,15 @@ function UpdateRangeTimer()
 	rangeTimer = -1
 end

+local function GetSpellIdByName(spellName)
+	if not spellName then return end
+	local spellLink = GetSpellLink(spellName)
+	if spellLink then
+		return tonumber(spellLink:match("spell:(%d+)"))
+	end
+	return nil
+end
+
 -----------------------------------------------------------
 --- WoW API mapping
 --- Generic Button
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.toc
deleted file mode 100644
index 9ef0961..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.toc
+++ /dev/null
@@ -1,18 +0,0 @@
-## Interface: 60200
-## Title: Lib: ActionButton-1.0
-## Notes: Creates and manages secure Action Buttons
-## Author: Nevcairiel
-## X-eMail: h.leppkes@gmail.com
-## X-Category: Library
-## X-License: BSD
-## OptionalDeps: LibKeyBound-1.0, LibButtonGlow-1.0
-## X-Curse-Packaged-Version: 0.27
-## X-Curse-Project-Name: LibActionButton-1.0
-## X-Curse-Project-ID: libactionbutton-1-0
-## X-Curse-Repository-ID: wow/libactionbutton-1-0/mainline
-
-LibStub\LibStub.lua
-CallbackHandler-1.0\CallbackHandler-1.0.lua
-LibButtonGlow-1.0\LibButtonGlow-1.0.lua
-
-LibActionButton-1.0.lua
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.xml b/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.xml
deleted file mode 100644
index 2ae6662..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibActionButton-1.0.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
-..\FrameXML\UI.xsd">
-	<Script file="LibButtonGlow-1.0\LibButtonGlow-1.0.lua"/>
-	<Script file="LibActionButton-1.0.lua"/>
-</Ui>
\ No newline at end of file
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.lua
deleted file mode 100644
index b587030..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.lua
+++ /dev/null
@@ -1,242 +0,0 @@
---[[
-Copyright (c) 2015, Hendrik "nevcairiel" Leppkes <h.leppkes@gmail.com>
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright notice,
-      this list of conditions and the following disclaimer in the documentation
-      and/or other materials provided with the distribution.
-    * Neither the name of the developer nor the names of its contributors
-      may be used to endorse or promote products derived from this software without
-      specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-]]
-local MAJOR_VERSION = "LibButtonGlow-1.0"
-local MINOR_VERSION = 4
-
-if not LibStub then error(MAJOR_VERSION .. " requires LibStub.") end
-local lib, oldversion = LibStub:NewLibrary(MAJOR_VERSION, MINOR_VERSION)
-if not lib then return end
-
-local Masque = LibStub("Masque", true)
-
-lib.unusedOverlays = lib.unusedOverlays or {}
-lib.numOverlays = lib.numOverlays or 0
-
-local tinsert, tremove, tostring = table.insert, table.remove, tostring
-
-local function OverlayGlowAnimOutFinished(animGroup)
-	local overlay = animGroup:GetParent()
-	local frame = overlay:GetParent()
-	overlay:Hide()
-	tinsert(lib.unusedOverlays, overlay)
-	frame.__LBGoverlay = nil
-end
-
-local function OverlayGlow_OnHide(self)
-	if self.animOut:IsPlaying() then
-		self.animOut:Stop()
-		OverlayGlowAnimOutFinished(self.animOut)
-	end
-end
-
-local function CreateScaleAnim(group, target, order, duration, x, y, delay)
-	local scale = group:CreateAnimation("Scale")
-	scale:SetTarget(target:GetName())
-	scale:SetOrder(order)
-	scale:SetDuration(duration)
-	scale:SetScale(x, y)
-
-	if delay then
-		scale:SetStartDelay(delay)
-	end
-end
-
-local function CreateAlphaAnim(group, target, order, duration, change, delay)
-	local alpha = group:CreateAnimation("Alpha")
-	alpha:SetTarget(target:GetName())
-	alpha:SetOrder(order)
-	alpha:SetDuration(duration)
-	alpha:SetChange(change)
-
-	if delay then
-		alpha:SetStartDelay(delay)
-	end
-end
-
-local function AnimIn_OnPlay(group)
-	local frame = group:GetParent()
-	local frameWidth, frameHeight = frame:GetSize()
-	frame.spark:SetSize(frameWidth, frameHeight)
-	frame.spark:SetAlpha(0.3)
-	frame.innerGlow:SetSize(frameWidth / 2, frameHeight / 2)
-	frame.innerGlow:SetAlpha(1.0)
-	frame.innerGlowOver:SetAlpha(1.0)
-	frame.outerGlow:SetSize(frameWidth * 2, frameHeight * 2)
-	frame.outerGlow:SetAlpha(1.0)
-	frame.outerGlowOver:SetAlpha(1.0)
-	frame.ants:SetSize(frameWidth * 0.85, frameHeight * 0.85)
-	frame.ants:SetAlpha(0)
-	frame:Show()
-end
-
-local function AnimIn_OnFinished(group)
-	local frame = group:GetParent()
-	local frameWidth, frameHeight = frame:GetSize()
-	frame.spark:SetAlpha(0)
-	frame.innerGlow:SetAlpha(0)
-	frame.innerGlow:SetSize(frameWidth, frameHeight)
-	frame.innerGlowOver:SetAlpha(0.0)
-	frame.outerGlow:SetSize(frameWidth, frameHeight)
-	frame.outerGlowOver:SetAlpha(0.0)
-	frame.outerGlowOver:SetSize(frameWidth, frameHeight)
-	frame.ants:SetAlpha(1.0)
-end
-
-local function CreateOverlayGlow()
-	lib.numOverlays = lib.numOverlays + 1
-
-	-- create frame and textures
-	local name = "ButtonGlowOverlay" .. tostring(lib.numOverlays)
-	local overlay = CreateFrame("Frame", name, UIParent)
-
-	-- spark
-	overlay.spark = overlay:CreateTexture(name .. "Spark", "BACKGROUND")
-	overlay.spark:SetPoint("CENTER")
-	overlay.spark:SetAlpha(0)
-	overlay.spark:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
-	overlay.spark:SetTexCoord(0.00781250, 0.61718750, 0.00390625, 0.26953125)
-
-	-- inner glow
-	overlay.innerGlow = overlay:CreateTexture(name .. "InnerGlow", "ARTWORK")
-	overlay.innerGlow:SetPoint("CENTER")
-	overlay.innerGlow:SetAlpha(0)
-	overlay.innerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
-	overlay.innerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375)
-
-	-- inner glow over
-	overlay.innerGlowOver = overlay:CreateTexture(name .. "InnerGlowOver", "ARTWORK")
-	overlay.innerGlowOver:SetPoint("TOPLEFT", overlay.innerGlow, "TOPLEFT")
-	overlay.innerGlowOver:SetPoint("BOTTOMRIGHT", overlay.innerGlow, "BOTTOMRIGHT")
-	overlay.innerGlowOver:SetAlpha(0)
-	overlay.innerGlowOver:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
-	overlay.innerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625)
-
-	-- outer glow
-	overlay.outerGlow = overlay:CreateTexture(name .. "OuterGlow", "ARTWORK")
-	overlay.outerGlow:SetPoint("CENTER")
-	overlay.outerGlow:SetAlpha(0)
-	overlay.outerGlow:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
-	overlay.outerGlow:SetTexCoord(0.00781250, 0.50781250, 0.27734375, 0.52734375)
-
-	-- outer glow over
-	overlay.outerGlowOver = overlay:CreateTexture(name .. "OuterGlowOver", "ARTWORK")
-	overlay.outerGlowOver:SetPoint("TOPLEFT", overlay.outerGlow, "TOPLEFT")
-	overlay.outerGlowOver:SetPoint("BOTTOMRIGHT", overlay.outerGlow, "BOTTOMRIGHT")
-	overlay.outerGlowOver:SetAlpha(0)
-	overlay.outerGlowOver:SetTexture([[Interface\SpellActivationOverlay\IconAlert]])
-	overlay.outerGlowOver:SetTexCoord(0.00781250, 0.50781250, 0.53515625, 0.78515625)
-
-	-- ants
-	overlay.ants = overlay:CreateTexture(name .. "Ants", "OVERLAY")
-	overlay.ants:SetPoint("CENTER")
-	overlay.ants:SetAlpha(0)
-	overlay.ants:SetTexture([[Interface\SpellActivationOverlay\IconAlertAnts]])
-
-	-- setup antimations
-	overlay.animIn = overlay:CreateAnimationGroup()
-	CreateScaleAnim(overlay.animIn, overlay.spark,          1, 0.2, 1.5, 1.5)
-	CreateAlphaAnim(overlay.animIn, overlay.spark,          1, 0.2, 1)
-	CreateScaleAnim(overlay.animIn, overlay.innerGlow,      1, 0.3, 2, 2)
-	CreateScaleAnim(overlay.animIn, overlay.innerGlowOver,  1, 0.3, 2, 2)
-	CreateAlphaAnim(overlay.animIn, overlay.innerGlowOver,  1, 0.3, -1)
-	CreateScaleAnim(overlay.animIn, overlay.outerGlow,      1, 0.3, 0.5, 0.5)
-	CreateScaleAnim(overlay.animIn, overlay.outerGlowOver,  1, 0.3, 0.5, 0.5)
-	CreateAlphaAnim(overlay.animIn, overlay.outerGlowOver,  1, 0.3, -1)
-	CreateScaleAnim(overlay.animIn, overlay.spark,          1, 0.2, 2/3, 2/3, 0.2)
-	CreateAlphaAnim(overlay.animIn, overlay.spark,          1, 0.2, -1, 0.2)
-	CreateAlphaAnim(overlay.animIn, overlay.innerGlow,      1, 0.2, -1, 0.3)
-	CreateAlphaAnim(overlay.animIn, overlay.ants,           1, 0.2, 1, 0.3)
-	overlay.animIn:SetScript("OnPlay", AnimIn_OnPlay)
-	overlay.animIn:SetScript("OnFinished", AnimIn_OnFinished)
-
-	overlay.animOut = overlay:CreateAnimationGroup()
-	CreateAlphaAnim(overlay.animOut, overlay.outerGlowOver, 1, 0.2, 1)
-	CreateAlphaAnim(overlay.animOut, overlay.ants,          1, 0.2, -1)
-	CreateAlphaAnim(overlay.animOut, overlay.outerGlowOver, 2, 0.2, -1)
-	CreateAlphaAnim(overlay.animOut, overlay.outerGlow,     2, 0.2, -1)
-	overlay.animOut:SetScript("OnFinished", OverlayGlowAnimOutFinished)
-
-	-- scripts
-	overlay:SetScript("OnUpdate", ActionButton_OverlayGlowOnUpdate)
-	overlay:SetScript("OnHide", OverlayGlow_OnHide)
-
-	overlay.__LBGVersion = MINOR_VERSION
-
-	return overlay
-end
-
-local function GetOverlayGlow()
-	local overlay = tremove(lib.unusedOverlays)
-	if not overlay then
-		overlay = CreateOverlayGlow()
-	end
-	return overlay
-end
-
-function lib.ShowOverlayGlow(frame)
-	if frame.__LBGoverlay then
-		if frame.__LBGoverlay.animOut:IsPlaying() then
-			frame.__LBGoverlay.animOut:Stop()
-			frame.__LBGoverlay.animIn:Play()
-		end
-	else
-		local overlay = GetOverlayGlow()
-		local frameWidth, frameHeight = frame:GetSize()
-		overlay:SetParent(frame)
-		overlay:ClearAllPoints()
-		--Make the height/width available before the next frame:
-		overlay:SetSize(frameWidth * 1.4, frameHeight * 1.4)
-		overlay:SetPoint("TOPLEFT", frame, "TOPLEFT", -frameWidth * 0.2, frameHeight * 0.2)
-		overlay:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", frameWidth * 0.2, -frameHeight * 0.2)
-		overlay.animIn:Play()
-		frame.__LBGoverlay = overlay
-
-		if Masque and Masque.UpdateSpellAlert and (not frame.overlay or not issecurevariable(frame, "overlay")) then
-			local old_overlay = frame.overlay
-			frame.overlay = overlay
-			Masque:UpdateSpellAlert(frame)
-
-			frame.overlay = old_overlay
-		end
-	end
-end
-
-function lib.HideOverlayGlow(frame)
-	if frame.__LBGoverlay then
-		if frame.__LBGoverlay.animIn:IsPlaying() then
-			frame.__LBGoverlay.animIn:Stop()
-		end
-		if frame:IsVisible() then
-			frame.__LBGoverlay.animOut:Play()
-		else
-			OverlayGlowAnimOutFinished(frame.__LBGoverlay.animOut)
-		end
-	end
-end
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.toc
deleted file mode 100644
index c92563f..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibButtonGlow-1.0.toc
+++ /dev/null
@@ -1,18 +0,0 @@
-## Interface: 60200
-## Title: Lib: ButtonGlow-1.0
-## Notes: Replacement for ActionButton_Show/HideOverlayGlow APIs
-## Author: Nevcairiel
-## X-eMail: h.leppkes@gmail.com
-## X-Category: Library
-## X-License: BSD
-## X-Website: http://www.wowace.com/addons/libbuttonglow-1-0/
-## Version: 1.2.3
-## OptionalDeps: Masque
-## X-Curse-Packaged-Version: 1.2.2
-## X-Curse-Project-Name: LibButtonGlow-1.0
-## X-Curse-Project-ID: libbuttonglow-1-0
-## X-Curse-Repository-ID: wow/libbuttonglow-1-0/mainline
-
-LibStub\LibStub.lua
-
-LibButtonGlow-1.0.lua
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.lua
deleted file mode 100644
index 0a41ac0..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.lua
+++ /dev/null
@@ -1,30 +0,0 @@
--- LibStub is a simple versioning stub meant for use in Libraries.  http://www.wowace.com/wiki/LibStub for more info
--- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
-local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2  -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
-local LibStub = _G[LIBSTUB_MAJOR]
-
-if not LibStub or LibStub.minor < LIBSTUB_MINOR then
-	LibStub = LibStub or {libs = {}, minors = {} }
-	_G[LIBSTUB_MAJOR] = LibStub
-	LibStub.minor = LIBSTUB_MINOR
-
-	function LibStub:NewLibrary(major, minor)
-		assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
-		minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
-
-		local oldminor = self.minors[major]
-		if oldminor and oldminor >= minor then return nil end
-		self.minors[major], self.libs[major] = minor, self.libs[major] or {}
-		return self.libs[major], oldminor
-	end
-
-	function LibStub:GetLibrary(major, silent)
-		if not self.libs[major] and not silent then
-			error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
-		end
-		return self.libs[major], self.minors[major]
-	end
-
-	function LibStub:IterateLibraries() return pairs(self.libs) end
-	setmetatable(LibStub, { __call = LibStub.GetLibrary })
-end
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.toc
deleted file mode 100644
index 17cf732..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibButtonGlow-1.0/LibStub/LibStub.toc
+++ /dev/null
@@ -1,13 +0,0 @@
-## Interface: 20400
-## Title: Lib: LibStub
-## Notes: Universal Library Stub
-## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel
-## X-Website: http://jira.wowace.com/browse/LS
-## X-Category: Library
-## X-License: Public Domain
-## X-Curse-Packaged-Version: 1.0
-## X-Curse-Project-Name: LibStub
-## X-Curse-Project-ID: libstub
-## X-Curse-Repository-ID: wow/libstub/mainline
-
-LibStub.lua
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.lua b/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.lua
deleted file mode 100644
index 0a41ac0..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.lua
+++ /dev/null
@@ -1,30 +0,0 @@
--- LibStub is a simple versioning stub meant for use in Libraries.  http://www.wowace.com/wiki/LibStub for more info
--- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
-local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2  -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
-local LibStub = _G[LIBSTUB_MAJOR]
-
-if not LibStub or LibStub.minor < LIBSTUB_MINOR then
-	LibStub = LibStub or {libs = {}, minors = {} }
-	_G[LIBSTUB_MAJOR] = LibStub
-	LibStub.minor = LIBSTUB_MINOR
-
-	function LibStub:NewLibrary(major, minor)
-		assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
-		minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
-
-		local oldminor = self.minors[major]
-		if oldminor and oldminor >= minor then return nil end
-		self.minors[major], self.libs[major] = minor, self.libs[major] or {}
-		return self.libs[major], oldminor
-	end
-
-	function LibStub:GetLibrary(major, silent)
-		if not self.libs[major] and not silent then
-			error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
-		end
-		return self.libs[major], self.minors[major]
-	end
-
-	function LibStub:IterateLibraries() return pairs(self.libs) end
-	setmetatable(LibStub, { __call = LibStub.GetLibrary })
-end
diff --git a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.toc b/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.toc
deleted file mode 100644
index 17cf732..0000000
--- a/SVUI_ActionBars/libs/LibActionButton-1.0/LibStub/LibStub.toc
+++ /dev/null
@@ -1,13 +0,0 @@
-## Interface: 20400
-## Title: Lib: LibStub
-## Notes: Universal Library Stub
-## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel
-## X-Website: http://jira.wowace.com/browse/LS
-## X-Category: Library
-## X-License: Public Domain
-## X-Curse-Packaged-Version: 1.0
-## X-Curse-Project-Name: LibStub
-## X-Curse-Project-ID: libstub
-## X-Curse-Repository-ID: wow/libstub/mainline
-
-LibStub.lua
diff --git a/SVUI_Skins/components/blizzard/garrison.lua b/SVUI_Skins/components/blizzard/garrison.lua
index 9fa45d1..b619599 100644
--- a/SVUI_Skins/components/blizzard/garrison.lua
+++ b/SVUI_Skins/components/blizzard/garrison.lua
@@ -559,9 +559,10 @@ local function LoadGarrisonStyle()
 		SV.API:Set("EditBox", GarrisonCapacitiveDisplayFrame.Count)
 		SV.API:Set("PageButton", GarrisonCapacitiveDisplayFrame.IncrementButton)
 	end
-
+	GarrisonCapacitiveDisplayFrame.CapacitiveDisplay.FollowerActive:ClearAllPoints()
+	GarrisonCapacitiveDisplayFrame.CapacitiveDisplay.FollowerActive:SetPoint("TOP", GarrisonCapacitiveDisplayFrame, "TOP", 0, -32)
 	hooksecurefunc("GarrisonCapacitiveDisplayFrame_Update", _hook_GarrisonCapacitiveDisplayFrame_Update)
-	GarrisonCapacitiveDisplayFrame:HookScript('OnShow', function() SV.NPC:Toggle(GarrisonCapacitiveDisplayFrame) end)
+	SV.NPC:Register(GarrisonCapacitiveDisplayFrame, GarrisonCapacitiveDisplayFrameTitleText)
 	GarrisonCapacitiveDisplayFrame.StartWorkOrderButton:HookScript('OnClick', function() SV.NPC:PlayerTalksFirst() end)
 	--[[
 	##############################################################################
diff --git a/SVUI_Skins/components/blizzard/misc.lua b/SVUI_Skins/components/blizzard/misc.lua
index 86ed582..4efda21 100644
--- a/SVUI_Skins/components/blizzard/misc.lua
+++ b/SVUI_Skins/components/blizzard/misc.lua
@@ -254,7 +254,7 @@ local function MiscStyles()
 		NPCFriendshipStatusBar.icon:ClearAllPoints()
 		NPCFriendshipStatusBar.icon:SetPoint("RIGHT", NPCFriendshipStatusBar, "LEFT", 0, -2)

-		GossipFrame:SetScript('OnShow', function() SV.NPC:Toggle(GossipFrame) end)
+		SV.NPC:Register(GossipFrame, GossipFrameNpcNameText)
 		hooksecurefunc("GossipTitleButton_OnClick", function() SV.NPC:PlayerTalksFirst() end)
 	end

@@ -552,7 +552,7 @@ local function MiscStyles()
 		SV.API:Set("!_PageButton", MerchantNextPageButton)
 		SV.API:Set("!_PageButton", MerchantPrevPageButton)

-		MerchantFrame:HookScript('OnShow', function() SV.NPC:Toggle(MerchantFrame) end)
+		SV.NPC:Register(MerchantFrame, MerchantNameText)
 	end

 	if(SV.db.Skins.blizzard.petition) then
diff --git a/SVUI_Skins/components/blizzard/quest.lua b/SVUI_Skins/components/blizzard/quest.lua
index 5e67886..22d648a 100644
--- a/SVUI_Skins/components/blizzard/quest.lua
+++ b/SVUI_Skins/components/blizzard/quest.lua
@@ -227,7 +227,7 @@ local function QuestFrameStyle()
 	hooksecurefunc("QuestFrame_ShowQuestPortrait", Hook_QuestNPCModel)
 	hooksecurefunc("QuestFrame_SetTitleTextColor", Hook_QuestFrame_SetTitleTextColor)

-	QuestFrame:HookScript('OnShow', function() SV.NPC:Toggle(QuestFrame) end)
+	SV.NPC:Register(QuestFrame, QuestFrameNpcNameText)
 end

 local function QuestChoiceFrameStyle()