Quantcast

Fixed LFG/LFD role skins, chat handlers, data retention and rarity coloring on character screen slots and tooltips

failcoder [08-15-15 - 22:22]
Fixed LFG/LFD role skins, chat handlers, data retention and rarity coloring on character screen slots and tooltips
Filename
SVUI_!Core/SVUI_!Core.toc
SVUI_!Core/libs/_SVUI_Lib/Registry.lua
SVUI_!Core/system/media.lua
SVUI_!Options/SVUI_!Options.toc
SVUI_ActionBars/SVUI_ActionBars.toc
SVUI_ActionBars/components/keybind.lua
SVUI_Auras/SVUI_Auras.toc
SVUI_Chat/SVUI_Chat.lua
SVUI_Chat/SVUI_Chat.toc
SVUI_Inventory/SVUI_Inventory.toc
SVUI_Maps/SVUI_Maps.toc
SVUI_NamePlates/SVUI_NamePlates.toc
SVUI_QuestTracker/SVUI_QuestTracker.toc
SVUI_Skins/SVUI_Skins.toc
SVUI_Skins/components/blizzard/character.lua
SVUI_Skins/components/blizzard/lfd.lua
SVUI_Tooltip/SVUI_Tooltip.lua
SVUI_Tooltip/SVUI_Tooltip.toc
SVUI_UnitFrames/SVUI_UnitFrames.toc
diff --git a/SVUI_!Core/SVUI_!Core.toc b/SVUI_!Core/SVUI_!Core.toc
index 0e66e0b..1d3f066 100644
--- a/SVUI_!Core/SVUI_!Core.toc
+++ b/SVUI_!Core/SVUI_!Core.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cff00FF00!Core|r
 ## Notes: SVUI [|cff9911FFCore Framework|r].
 ## SavedVariables: SVUI_Global, SVUI_Errors, SVUI_Filters, SVUI_Media
diff --git a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
index 92288d2..658f67d 100644
--- a/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
+++ b/SVUI_!Core/libs/_SVUI_Lib/Registry.lua
@@ -56,24 +56,6 @@ local wipe          = _G.wipe;

 local date          = _G.date;

---BLIZZARD API
-local ReloadUI              = _G.ReloadUI;
-local GetLocale             = _G.GetLocale;
-local CreateFrame           = _G.CreateFrame;
-local IsAddOnLoaded         = _G.IsAddOnLoaded;
-local GetNumAddOns          = _G.GetNumAddOns;
-local GetAddOnInfo          = _G.GetAddOnInfo;
-local IsLoggedIn            = _G.IsLoggedIn;
-local LoadAddOn             = _G.LoadAddOn;
-local EnableAddOn           = _G.EnableAddOn;
-local DisableAddOn          = _G.DisableAddOn;
-local GetAddOnMetadata      = _G.GetAddOnMetadata;
-local InCombatLockdown      = _G.InCombatLockdown;
-local IsAddOnLoadOnDemand   = _G.IsAddOnLoadOnDemand;
-local GetSpecialization     = _G.GetSpecialization;
-local GetSpecializationInfo = _G.GetSpecializationInfo;
-local C_PetBattles          = _G.C_PetBattles;
-
 --[[ LIB CONSTRUCT ]]--

 local Librarian = _G.Librarian;
@@ -190,6 +172,17 @@ local function importdata(s, d)
     return d
 end

+local function clear_data(db)
+    if(type(db) ~= "table") then return end
+    for k,v in pairs(db) do
+        if(type(v) == "table") then
+            clear_data(db[k]);
+        else
+            db[k] = nil;
+        end
+    end
+end
+
 local function remove_undefined(src, db)
     if(type(src) ~= "table") then return end
     if(type(db) ~= "table") then return end
@@ -319,6 +312,13 @@ end

 --OBJECT INTERNALS

+local clearPrivateDB = function(self)
+    --print(self.Schema)
+    if(self.private) then
+        clear_data(self.private);
+    end
+end
+
 local changeDBVar = function(self, value, key, sub1, sub2, sub3)
     local db = CoreObject.db[self.Schema]
     if((sub1 and sub2 and sub3) and (db[sub1] and db[sub1][sub2] and db[sub1][sub2][sub3])) then
@@ -857,6 +857,7 @@ local Core_NewPlugin = function(self, addonName, addonObject, gfile, pfile)
     addonObject.LoD                 = lod
     addonObject.initialized         = false
     addonObject.CombatLocked        = false
+    addonObject.ClearPrivateData    = clearPrivateDB
     addonObject.ChangeDBVar         = changeDBVar
     addonObject.RegisterEvent       = registerEvent
     addonObject.UnregisterEvent     = unregisterEvent
@@ -887,6 +888,7 @@ local Core_NewPackage = function(self, schema, header)
         Schema              = schema,
         initialized         = false,
         CombatLocked        = false,
+        ClearPrivateData    = clearPrivateDB,
         ChangeDBVar         = changeDBVar,
         RegisterEvent       = registerEvent,
         UnregisterEvent     = unregisterEvent,
@@ -943,6 +945,7 @@ local Core_NewModule = function(self, addonName, addonObject, gfile, pfile)
     addonObject.LoD                 = lod
     addonObject.initialized         = false
     addonObject.CombatLocked        = false
+    addonObject.ClearPrivateData    = clearPrivateDB
     addonObject.ChangeDBVar         = changeDBVar
     addonObject.RegisterEvent       = registerEvent
     addonObject.UnregisterEvent     = unregisterEvent
@@ -1118,17 +1121,21 @@ function lib:Launch()
                         end

                         if(files.PRIVATE) then
-                            if not _G[files.PRIVATE] then _G[files.PRIVATE] = {} end
-                            local private = setmetatable({}, meta_database)
-                            private.data = _G[files.PRIVATE]
-                            obj.private = private
+                            if not _G[files.PRIVATE] then
+                                _G[files.PRIVATE] = {}
+                            end
+                            --local private = setmetatable({}, meta_database)
+                            --private.data = _G[files.PRIVATE]
+                            obj.private = _G[files.PRIVATE];
                         end

                         if(files.PUBLIC) then
-                            if not _G[files.PUBLIC] then _G[files.PUBLIC] = {} end
-                            local public = setmetatable({}, meta_database)
-                            public.data = _G[files.PUBLIC]
-                            obj.public = public
+                            if not _G[files.PUBLIC] then
+                                _G[files.PUBLIC] = {}
+                            end
+                            --local public = setmetatable({}, meta_database)
+                            --public.data = _G[files.PUBLIC]
+                            obj.public = _G[files.PUBLIC]
                         end
                     end

diff --git a/SVUI_!Core/system/media.lua b/SVUI_!Core/system/media.lua
index 7a3f9ea..38f87e4 100644
--- a/SVUI_!Core/system/media.lua
+++ b/SVUI_!Core/system/media.lua
@@ -719,6 +719,7 @@ local function ChangeSystemFonts()
 	_alterFont("GameFontHighlightLeft", "default", 1)
 	_alterFont("GameFontHighlightRight", "default", 1)
 	_alterFont("GameFontHighlightLarge2", "default", 2)
+	_alterFont("MailFont_Large", "default", 3)
 	_alterFont("SystemFont_Med1", "default")
 	_alterFont("SystemFont_Med3", "default")
 	_alterFont("SystemFont_Outline_Small", "default", 0, "OUTLINE")
diff --git a/SVUI_!Options/SVUI_!Options.toc b/SVUI_!Options/SVUI_!Options.toc
index e6024dd..e6e6ae6 100644
--- a/SVUI_!Options/SVUI_!Options.toc
+++ b/SVUI_!Options/SVUI_!Options.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cff00FF00!Options|r
 ## Notes: SVUI [|cff9911FFConfig Options|r]
 ## RequiredDeps: SVUI_!Core
diff --git a/SVUI_ActionBars/SVUI_ActionBars.toc b/SVUI_ActionBars/SVUI_ActionBars.toc
index 36818e0..072b89f 100644
--- a/SVUI_ActionBars/SVUI_ActionBars.toc
+++ b/SVUI_ActionBars/SVUI_ActionBars.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Action Bars|r
 ## Notes: Action Bar Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0, LibActionButton-1.0
diff --git a/SVUI_ActionBars/components/keybind.lua b/SVUI_ActionBars/components/keybind.lua
index 9c951b4..cca88b3 100644
--- a/SVUI_ActionBars/components/keybind.lua
+++ b/SVUI_ActionBars/components/keybind.lua
@@ -14,33 +14,11 @@ local type    = _G.type;
 local string  = _G.string;
 local math    = _G.math;
 local table   = _G.table;
-local GetTime = _G.GetTime;
 --[[ STRING METHODS ]]--
 local format, find = string.format, string.find;
 --[[ MATH METHODS ]]--
 local floor = math.floor;
 local tonumber = tonumber;
---BLIZZARD API
-local SpellFlyout       = _G.SpellFlyout;
-local GetFlyoutID       = _G.GetFlyoutID;
-local GetNumFlyouts     = _G.GetNumFlyouts;
-local GetFlyoutInfo     = _G.GetFlyoutInfo;
-local LoadBindings      = _G.LoadBindings;
-local SaveBindings      = _G.SaveBindings;
-local SetBinding        = _G.SetBinding;
-local GetBindingKey     = _G.GetBindingKey;
-local CreateFrame       = _G.CreateFrame;
-local InCombatLockdown  = _G.InCombatLockdown;
-local GameTooltip       = _G.GameTooltip;
-local hooksecurefunc    = _G.hooksecurefunc;
-local IsAltKeyDown      = _G.IsAltKeyDown;
-local IsShiftKeyDown    = _G.IsShiftKeyDown;
-local IsControlKeyDown  = _G.IsControlKeyDown;
-local IsModifiedClick   = _G.IsModifiedClick;
-local OKAY              = _G.OKAY;
-local CANCEL            = _G.CANCEL;
-local CONFIRM_LOSE_BINDING_CHANGES = _G.CONFIRM_LOSE_BINDING_CHANGES;
-local CHARACTER_SPECIFIC_KEYBINDINGS = _G.CHARACTER_SPECIFIC_KEYBINDINGS;
 --[[
 ##########################################################
 GET ADDON DATA
@@ -50,8 +28,6 @@ local SV = _G['SVUI']
 local L = SV.L;
 local MOD = SV.ActionBars;

-local _G = getfenv(0);
-
 local RefreshBindings
 local NewFrame = CreateFrame;
 local NewHook = hooksecurefunc;
diff --git a/SVUI_Auras/SVUI_Auras.toc b/SVUI_Auras/SVUI_Auras.toc
index b9dfb6f..fbeb17b 100644
--- a/SVUI_Auras/SVUI_Auras.toc
+++ b/SVUI_Auras/SVUI_Auras.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Auras|r
 ## Notes: Aura Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_Chat/SVUI_Chat.lua b/SVUI_Chat/SVUI_Chat.lua
index bfe1ffb..31d3316 100644
--- a/SVUI_Chat/SVUI_Chat.lua
+++ b/SVUI_Chat/SVUI_Chat.lua
@@ -101,27 +101,7 @@ local HIDE_REALM = false;
 INIT SETTINGS
 ##########################################################
 ]]--
-local CHAT_FRAMES = _G.CHAT_FRAMES
-local CHAT_GUILD_GET = "|Hchannel:GUILD|hG|h %s ";
-local CHAT_OFFICER_GET = "|Hchannel:OFFICER|hO|h %s ";
-local CHAT_RAID_GET = "|Hchannel:RAID|hR|h %s ";
-local CHAT_RAID_WARNING_GET = "RW %s ";
-local CHAT_RAID_LEADER_GET = "|Hchannel:RAID|hRL|h %s ";
-local CHAT_PARTY_GET = "|Hchannel:PARTY|hP|h %s ";
-local CHAT_PARTY_LEADER_GET = "|Hchannel:PARTY|hPL|h %s ";
-local CHAT_PARTY_GUIDE_GET = "|Hchannel:PARTY|hPG|h %s ";
-local CHAT_INSTANCE_CHAT_GET = "|Hchannel:Battleground|hI.|h %s: ";
-local CHAT_INSTANCE_CHAT_LEADER_GET = "|Hchannel:Battleground|hIL.|h %s: ";
-local CHAT_WHISPER_INFORM_GET = "to %s ";
-local CHAT_WHISPER_GET = "from %s ";
-local CHAT_BN_WHISPER_INFORM_GET = "to %s ";
-local CHAT_BN_WHISPER_GET = "from %s ";
-local CHAT_SAY_GET = "%s ";
-local CHAT_YELL_GET = "%s ";
-local CHAT_FLAG_AFK = "[AFK] ";
-local CHAT_FLAG_DND = "[DND] ";
-local CHAT_FLAG_GM = "[GM] ";
-
+local REFRESH_LOCKED = false;
 local CHANNEL_LINK   		= "|Hchannel:%1$s|h%d:|h"
 local CHANNEL_PATTERN      	= "|Hchannel:(.-)|h%[(%d+)%.%s?([^:%-%]]+)%s?[:%-]?%s?[^|%]]*%]|h%s?"
 local CHANNEL_PATTERN_PLUS 	= CHANNEL_PATTERN .. ".+"
@@ -509,7 +489,6 @@ end

 do
 	local EB_HISTORY, EBH_LINE = {},{};
-	local refreshLocked = false;
 	local doskey = false;

 	local _hook_AddHistoryLine = function(self, text)
@@ -1036,7 +1015,7 @@ do

 	function MOD:RefreshChatFrames(event, forced)
 		--print(event)
-		if ((not forced) and (refreshLocked and (IsMouseButtonDown("LeftButton") or InCombatLockdown()))) then return; end
+		if ((not forced) and (REFRESH_LOCKED and (IsMouseButtonDown("LeftButton") or InCombatLockdown()))) then return; end

 		for i,name in pairs(CHAT_FRAMES) do
 			local chat = _G[name]
@@ -1120,37 +1099,31 @@ do
 			chat.isUninteractable = true;
 			chat.oldAlpha = 0;
 			--FCF_FadeInChatFrame(chat);
-			local dockingKey = chat.Dock:GetName()
-			chat.Dock.Button:SetDocked(MOD.private.activeTabs[dockingKey])
+			local isActive = MOD:IsChatActive(chat)
+			chat.Dock:UpdateBackdrop()
+			chat.Dock.Button:SetDocked(isActive)
 			chat:ClearAllPoints();
 			chat:SetAllPoints(chat.Dock);
 			FCF_SetLocked(chat, true);
 			SetChatWindowUninteractable(i, false);
 		end

-		-- for name,isset in pairs(MOD.private.activeTabs) do
-		-- 	if(not _G[name]) then
-		-- 		MOD.private.activeTabs[name] = nil
-		-- 	end
-		-- end
-
-		refreshLocked = true
+		REFRESH_LOCKED = true
 	end
 end

 local function OpenNewSVUIChatFrame(newname)
 	local chatFrame, chatTab;
-	--print(name)
 	for i,name in pairs(CHAT_FRAMES) do
-		local _, _, _, _, _, _, shown = FCF_GetChatWindowInfo(i);
 		chatFrame = _G[name];
 		chatTab = _G[name.."Tab"];
-		local key = format("SVUI_ChatFrameDock%d", i)
-		if((not MOD.private.activeTabs[key]) or (not chatTab:IsShown())) then
-			if((not newname) or (newname == "")) then
-				newname = format(CHAT_NAME_TEMPLATE, i);
-			end
-			FCF_SetWindowName(chatFrame, newname);
+		local key = format("SVUI_ChatFrameDock%d", i);
+		local tabText = newname;
+		if((not newname) or (newname == "")) then
+			tabText = format(CHAT_NAME_TEMPLATE, i);
+		end
+		if(not MOD:IsChatActive(chatFrame)) then
+			FCF_SetWindowName(chatFrame, tabText);
 			FCF_SetLocked(chatFrame, false);

 			-- clear stale messages
@@ -1184,7 +1157,7 @@ local function OpenNewSVUIChatFrame(newname)
 			-- FCF_FadeInChatFrame(FCFDock_GetSelectedWindow(GENERAL_CHAT_DOCK));

 			--FCF_CopyChatSettings(chatFrame, DEFAULT_CHAT_FRAME);
-			MOD.private.activeTabs[key] = true
+			MOD:SaveActiveFlag(key,tabText);
 			chatFrame:FadeIn(0.2, chatFrame:GetAlpha(), 1)
 			MOD.RefreshChatFrames()
 			return;
@@ -1193,6 +1166,9 @@ local function OpenNewSVUIChatFrame(newname)
 end

 function MOD:ResetChatWindows()
+	REFRESH_LOCKED = false;
+	FCF_ResetChatWindows();
+
 	MOD:ResetInternalData();

 	for k,v in pairs(SV.Dock.private.Disabled) do
@@ -1209,14 +1185,13 @@ function MOD:ResetChatWindows()
 		end
 	end

-	FCF_ResetChatWindows()
 	FCF_SetLocked(ChatFrame1, true)
 	FCF_SetWindowName(ChatFrame1, GENERAL)
 	if(ChatFrame1.Dock) then
 		ChatFrame1.Dock:UpdateBackdrop()
 		ChatFrame1.Dock:SetDocked(true)
 	end
-	MOD.private.activeTabs['SVUI_ChatFrameDock1'] = true
+	MOD:SaveActiveFlag('SVUI_ChatFrameDock1',GENERAL);

 	FCF_SetLocked(ChatFrame2, true)
 	FCF_SetWindowName(ChatFrame2, GUILD_EVENT_LOG)
@@ -1224,21 +1199,20 @@ function MOD:ResetChatWindows()
 		ChatFrame2.Dock:UpdateBackdrop()
 		ChatFrame2.Dock:SetDocked(true)
 	end
-	MOD.private.activeTabs['SVUI_ChatFrameDock2'] = true
+	MOD:SaveActiveFlag('SVUI_ChatFrameDock2',GUILD_EVENT_LOG);

-	OpenNewSVUIChatFrame(LOOT)
+	FCF_OpenNewWindow(LOOT)
 	FCF_SetLocked(ChatFrame3, true)
 	FCF_SetWindowName(ChatFrame3, LOOT)
 	if(ChatFrame3.Dock) then
 		ChatFrame3.Dock:UpdateBackdrop()
 		ChatFrame3.Dock:SetDocked(true)
 	end
-	MOD.private.activeTabs['SVUI_ChatFrameDock3'] = true
+	MOD:SaveActiveFlag('SVUI_ChatFrameDock3',LOOT);

 	for i=4, NUM_CHAT_WINDOWS do
 		local chatFrame = _G["ChatFrame"..i];
 		if(chatFrame and chatFrame.Dock) then
-			chatFrame.Dock:UpdateBackdrop()
 			chatFrame.Dock:SetDocked(false)
 		end
 	end
@@ -1561,8 +1535,8 @@ do
 		local chatFrame = self or _G["ChatFrame" .. CURRENT_CHAT_FRAME_ID]
 		if((not chatFrame) or (not chatFrame.Dock)) then return end
 		local key = format("SVUI_ChatFrameDock%d", chatFrame:GetID())
-		chatFrame.Dock:SetDocked(false)
-		MOD.private.activeTabs[key] = nil;
+		chatFrame.Dock:SetDocked(false);
+		MOD:DeleteActiveFlag(key);
 	end

 	local _hook_FCF_Tab_OnClick = function(self)
@@ -1577,7 +1551,10 @@ do
 			local frame = _G[chatFrameName];
 			local key = format("SVUI_ChatFrameDock%d", id)
 			if ( frame.isTemporary and (not MOD.private.activeTabs[key]) ) then
-				MOD.private.activeTabs[key] = true;
+				local tabText = frame.name;
+				if(tabText) then
+					MOD:SaveActiveFlag(key,tabText);
+				end
 				if(frame.Dock) then
 					frame.oldAlpha = 0;
 					frame.Dock:UpdateBackdrop();
@@ -1626,7 +1603,10 @@ do
 		FCF_SetLocked(self, false);
 		if(self.Dock) then
 			local key = self.Dock:GetName();
-			MOD.private.activeTabs[key] = true;
+			local tabText = self.name;
+			if(tabText) then
+				MOD:SaveActiveFlag(key,tabText);
+			end
 			self.oldAlpha = 0;
 			self.Dock:UpdateBackdrop();
 			--self.Dock.Parent.Bar:SetDefault(self.Dock.Button)
@@ -1742,11 +1722,60 @@ local function DockFadeOutChat(location)
 end

 function MOD:ResetInternalData()
-	wipe(self.private.history);
-	wipe(self.private.activeTabs);
-	wipe(self.private.channelList);
-	wipe(self.private.zoneChannelList);
-	wipe(self.private.messageTypeList);
+	self:ClearPrivateData();
+	self.private.history = {};
+	self.private.activeTabs = {};
+	self.private.tabNames = {};
+	self.ChatHistory = self.private.history;
+	for _, internal in pairs(INTERNAL_TABLES) do
+		self.private[internal] = {};
+	end
+end
+
+function MOD:IsChatActive(chatFrame)
+	if(not chatFrame) then return false; end
+	local id = chatFrame:GetID();
+	local name,isActive = '',false;
+	local key = format("SVUI_ChatFrameDock%d", id);
+	for tabName, tabKey in pairs(self.private.tabNames) do
+		if(tabKey == key) then
+			name = tabName;
+		end
+	end
+	for tabKey, tabName in pairs(self.private.activeTabs) do
+		if(tabName == name) then
+			isActive = true;
+		end
+	end
+	return isActive;
+end
+
+function MOD:SaveActiveFlag(key,name)
+	if((not key) or (not name)) then return false; end
+	for tabName, tabKey in pairs(self.private.tabNames) do
+		if(tabKey == key) then
+			self.private.tabNames[tabName] = nil;
+		end
+	end
+	for tabKey, tabName in pairs(self.private.activeTabs) do
+		if(tabName == name) then
+			self.private.activeTabs[tabKey] = nil;
+		end
+	end
+	self.private.activeTabs[key] = name;
+	self.private.tabNames[name] = key;
+	return true;
+end
+
+function MOD:DeleteActiveFlag(key)
+	if(not key) then return false; end
+	for tabName, tabKey in pairs(self.private.tabNames) do
+		if(tabKey == key) then
+			self.private.tabNames[tabName] = nil;
+		end
+	end
+	self.private.activeTabs[key] = nil;
+	return true;
 end

 function MOD:ReLoad()
@@ -1756,9 +1785,7 @@ end
 function MOD:Load()
 	self.private.history = self.private.history or {};
 	self.private.activeTabs = self.private.activeTabs or {};
-	self.private.channelList = self.private.channelList or {};
-	self.private.zoneChannelList = self.private.zoneChannelList or {};
-	self.private.messageTypeList = self.private.messageTypeList or {};
+	self.private.tabNames = self.private.tabNames or {};
 	self.ChatHistory = self.private.history;

 	local baseDock = SV.Dock.BottomLeft;
@@ -1781,28 +1808,30 @@ function MOD:Load()

 	self:UpdateLocals()

+	for _, internal in pairs(INTERNAL_TABLES) do
+		self.private[internal] = self.private[internal] or {};
+	end
+
 	for i,name in pairs(CHAT_FRAMES) do
 		local chatFrame = _G[name];
 		if(chatFrame) then
 			SetChatWindowUninteractable(i, false)
 			for _, internal in pairs(INTERNAL_TABLES) do
-				self.private[internal] = self.private[internal] or {};
-				if(not self.private[internal][name]) then
-					self.private[internal][name] = {};
-					if(chatFrame[internal]) then
-						for x,y in pairs(chatFrame[internal]) do
-							self.private[internal][name][x] = y
-						end
-					else
-						self.private[internal][name] = {};
+				self.private[internal][name] = self.private[internal][name] or {};
+				if(chatFrame[internal]) then
+					for x,y in pairs(chatFrame[internal]) do
+						self.private[internal][name][x] = y
 					end
 				end
 				chatFrame[internal] = self.private[internal][name];
 			end
 			chatFrame.oldAlpha = 0;
 			local key = format("SVUI_ChatFrameDock%d", i)
-			if((not self.private.activeTabs[key]) and (i < 4)) then
-				self.private.activeTabs[key] = true
+			if(self.private.activeTabs[key] or ((not self.private.activeTabs[key]) and (i < 4))) then
+				local tabText = chatFrame.name;
+				if(tabText) then
+					self:SaveActiveFlag(key,tabText);
+				end
 			end
 		end
 	end
diff --git a/SVUI_Chat/SVUI_Chat.toc b/SVUI_Chat/SVUI_Chat.toc
index ce44f5f..afb034d 100644
--- a/SVUI_Chat/SVUI_Chat.toc
+++ b/SVUI_Chat/SVUI_Chat.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Chat|r
 ## Notes: Chat Plugin for [|cff9911FFSVUI|r].
 ## SavedVariablesPerCharacter: SVUI_Private_ChatCache
diff --git a/SVUI_Inventory/SVUI_Inventory.toc b/SVUI_Inventory/SVUI_Inventory.toc
index 5d250bc..1b3bda9 100644
--- a/SVUI_Inventory/SVUI_Inventory.toc
+++ b/SVUI_Inventory/SVUI_Inventory.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Inventory|r
 ## Notes: Inventory Plugin for [|cff9911FFSVUI|r].
 ## SavedVariables: SVUI_LootCache
diff --git a/SVUI_Maps/SVUI_Maps.toc b/SVUI_Maps/SVUI_Maps.toc
index 7feb412..9f4f2c4 100644
--- a/SVUI_Maps/SVUI_Maps.toc
+++ b/SVUI_Maps/SVUI_Maps.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Maps|r
 ## Notes: Maps Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_NamePlates/SVUI_NamePlates.toc b/SVUI_NamePlates/SVUI_NamePlates.toc
index 47b2011..36c42ae 100644
--- a/SVUI_NamePlates/SVUI_NamePlates.toc
+++ b/SVUI_NamePlates/SVUI_NamePlates.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00NamePlates|r
 ## Notes: NamePlates Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_QuestTracker/SVUI_QuestTracker.toc b/SVUI_QuestTracker/SVUI_QuestTracker.toc
index bed078c..9e5c9da 100644
--- a/SVUI_QuestTracker/SVUI_QuestTracker.toc
+++ b/SVUI_QuestTracker/SVUI_QuestTracker.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00QuestTracker|r
 ## Notes: QuestTracker Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_Skins/SVUI_Skins.toc b/SVUI_Skins/SVUI_Skins.toc
index 4f977bd..db7dd70 100644
--- a/SVUI_Skins/SVUI_Skins.toc
+++ b/SVUI_Skins/SVUI_Skins.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch, Azilroka, Sortokk
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Skins|r
 ## Notes: SVUI [|cff9911FFSkins System and AddOn Frames|r].
 ## SavedVariables: SVUIUI_STYLE_GLOBAL
diff --git a/SVUI_Skins/components/blizzard/character.lua b/SVUI_Skins/components/blizzard/character.lua
index 9d4c9bf..5bc4c76 100644
--- a/SVUI_Skins/components/blizzard/character.lua
+++ b/SVUI_Skins/components/blizzard/character.lua
@@ -109,13 +109,14 @@ local function StyleCharacterSlots()
 			local slotID,_ = GetInventorySlotInfo(slotName)
 			local r, g, b = 0, 0, 0;
 			if(slotID) then
-				local itemID = GetInventoryItemID("player", slotID)
-				if(itemID) then
-					local rarity = select(3, GetItemInfo(itemID))
-					if(rarity and rarity > 1) then
-						r,g,b = GetItemQualityColor(rarity)
+				local itemLink = GetInventoryItemLink("player", slotID)
+				if(itemLink) then
+					local key, _, quality, _, _, _, _, _, equipSlot = GetItemInfo(itemLink);
+					if(quality and quality > 1) then
+						r,g,b = GetItemQualityColor(quality)
 					end
 				end
+				charSlot:SetBackdropColor(r,g,b,0.6)
 				charSlot:SetBackdropBorderColor(r,g,b,1)
 			end
 		end
diff --git a/SVUI_Skins/components/blizzard/lfd.lua b/SVUI_Skins/components/blizzard/lfd.lua
index a011a2f..827cc2b 100644
--- a/SVUI_Skins/components/blizzard/lfd.lua
+++ b/SVUI_Skins/components/blizzard/lfd.lua
@@ -31,7 +31,14 @@ local LFDFrameList = {
   "LFGInvitePopupRoleButtonTank",
   "LFGInvitePopupRoleButtonHealer",
   "LFGInvitePopupRoleButtonDPS",
+};

+local LFGStatusList = {
+  "LFGDungeonReadyStatusIndividualPlayer1",
+  "LFGDungeonReadyStatusIndividualPlayer2",
+  "LFGDungeonReadyStatusIndividualPlayer3",
+  "LFGDungeonReadyStatusIndividualPlayer4",
+  "LFGDungeonReadyStatusIndividualPlayer5"
 };

 local function StyleMoneyRewards(frameName)
@@ -68,6 +75,33 @@ local Incentive_OnHide = function(button)
   ActionButton_HideOverlayGlow(check)
 end

+local _hook_QueueStatusFrame_Update = function(self)
+  for i=1, #self.StatusEntries do
+    local node = self.StatusEntries[i];
+    if(node.RoleIcon1) then
+      node.RoleIcon1:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+    end
+    if(node.RoleIcon2) then
+      node.RoleIcon2:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+    end
+    if(node.RoleIcon3) then
+      node.RoleIcon3:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+    end
+    if(node.HealersFound) then
+      node.HealersFound.Cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      node.HealersFound.Texture:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+    end
+    if(node.TanksFound) then
+      node.TanksFound.Cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      node.TanksFound.Texture:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+    end
+    if(node.DamagersFound) then
+      node.DamagersFound.Cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      node.DamagersFound.Texture:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+    end
+  end
+end
+
 local LFDQueueRandom_OnUpdate = function()
   LFDQueueFrame:RemoveTextures()
   for u = 1, LFD_MAX_REWARDS do
@@ -178,38 +212,43 @@ local function LFDFrameStyle()
   --LFGDungeonReadyPopup:SetScript('OnShow', nil)
   --/script StaticPopupSpecial_Show(LFGDungeonReadyPopup);

-  LFDQueueFrameRoleButtonTankIncentiveIcon:SetAlpha(0)
-  LFDQueueFrameRoleButtonHealerIncentiveIcon:SetAlpha(0)
-  LFDQueueFrameRoleButtonDPSIncentiveIcon:SetAlpha(0)
-  LFDQueueFrameRoleButtonTankIncentiveIcon:HookScript("OnShow", Incentive_OnShow)
-  LFDQueueFrameRoleButtonHealerIncentiveIcon:HookScript("OnShow", Incentive_OnShow)
-  LFDQueueFrameRoleButtonDPSIncentiveIcon:HookScript("OnShow", Incentive_OnShow)
-  LFDQueueFrameRoleButtonTankIncentiveIcon:HookScript("OnHide", Incentive_OnHide)
-  LFDQueueFrameRoleButtonHealerIncentiveIcon:HookScript("OnHide", Incentive_OnHide)
-  LFDQueueFrameRoleButtonDPSIncentiveIcon:HookScript("OnHide", Incentive_OnHide)
-  LFDQueueFrameRoleButtonTank.shortageBorder:Die()
-  LFDQueueFrameRoleButtonDPS.shortageBorder:Die()
-  LFDQueueFrameRoleButtonHealer.shortageBorder:Die()
-  LFGDungeonReadyDialog.filigree:SetAlpha(0)
-  LFGDungeonReadyDialog.bottomArt:SetAlpha(0)
-  SV.API:Set("CloseButton", LFGDungeonReadyStatusCloseButton)
-
-  LFDQueueFrameRoleButtonTank:SetNormalTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
-  LFDQueueFrameRoleButtonHealer:SetNormalTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
-  LFDQueueFrameRoleButtonDPS:SetNormalTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
-
-  LFDQueueFrameRoleButtonTank.cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
-  LFDQueueFrameRoleButtonHealer.cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
-  LFDQueueFrameRoleButtonDPS.cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
-
   for _,name in pairs(LFDFrameList) do
     local frame = _G[name];
     if(frame) then
       frame:DisableDrawLayer("BACKGROUND")
       frame:DisableDrawLayer("OVERLAY")
+      if(frame.incentiveIcon) then
+        frame.incentiveIcon:SetAlpha(0);
+        frame.incentiveIcon:HookScript("OnShow", Incentive_OnShow);
+        frame.incentiveIcon:HookScript("OnHide", Incentive_OnHide);
+      end
+      if(frame.checkButton) then
+        frame.checkButton:SetStyle("CheckButton");
+      end
+      if(frame.shortageBorder) then
+        frame.shortageBorder:Die();
+      end
+      if(frame.cover) then
+        frame.cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+      frame:SetNormalTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
     end
   end

+  for _,name in pairs(LFGStatusList) do
+    local frame = _G[name];
+    if(frame) then
+      local tex = _G[name..'Texture'];
+      if(tex) then
+        tex:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+    end
+  end
+
+  LFGDungeonReadyDialog.filigree:SetAlpha(0)
+  LFGDungeonReadyDialog.bottomArt:SetAlpha(0)
+  SV.API:Set("CloseButton", LFGDungeonReadyStatusCloseButton)
+
   LFDQueueFrameRoleButtonLeader.leadIcon = LFDQueueFrameRoleButtonLeader:CreateTexture(nil, 'BACKGROUND')
   LFDQueueFrameRoleButtonLeader.leadIcon:SetTexture([[Interface\GroupFrame\UI-Group-LeaderIcon]])
   LFDQueueFrameRoleButtonLeader.leadIcon:SetPoint(LFDQueueFrameRoleButtonLeader:GetNormalTexture():GetPoint())
@@ -221,6 +260,35 @@ local function LFDFrameStyle()
   RaidFinderQueueFrameRoleButtonLeader.leadIcon:SetSize(50, 50)
   RaidFinderQueueFrameRoleButtonLeader.leadIcon:SetAlpha(0.4)

+  if(QueueStatusFrame and QueueStatusFrame.StatusEntries) then
+    for i=1, #QueueStatusFrame.StatusEntries do
+      local node = QueueStatusFrame.StatusEntries[i];
+      if(node.RoleIcon1) then
+        node.RoleIcon1:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+      if(node.RoleIcon2) then
+        node.RoleIcon2:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+      if(node.RoleIcon3) then
+        node.RoleIcon3:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+      if(node.HealersFound) then
+        node.HealersFound.Cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+        node.HealersFound.Texture:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+      if(node.TanksFound) then
+        node.TanksFound.Cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+        node.TanksFound.Texture:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+      if(node.DamagersFound) then
+        node.DamagersFound.Cover:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+        node.DamagersFound.Texture:SetTexture("Interface\\AddOns\\SVUI_Skins\\artwork\\UI-LFG-ICON-ROLES")
+      end
+    end
+  end
+
+  hooksecurefunc('QueueStatusFrame_Update', _hook_QueueStatusFrame_Update)
+
   hooksecurefunc('LFG_DisableRoleButton', function(self)
     local check = self.checkButton or self.CheckButton
     if(check) then
@@ -426,11 +494,30 @@ local function LFDFrameStyle()
   -- end

   LFGListFrame.CategorySelection:RemoveTextures()
+  LFGListFrame.CategorySelection.Inset:RemoveTextures()
   LFGListFrame.CategorySelection.StartGroupButton:RemoveTextures()
   LFGListFrame.CategorySelection.StartGroupButton:SetStyle("Button")
   LFGListFrame.CategorySelection.FindGroupButton:RemoveTextures()
   LFGListFrame.CategorySelection.FindGroupButton:SetStyle("Button")

+  LFGListFrame.NothingAvailable:RemoveTextures()
+  LFGListFrame.NothingAvailable.Inset:RemoveTextures()
+
+  LFGListFrame.SearchPanel:RemoveTextures()
+  LFGListFrame.SearchPanel.ResultsInset:RemoveTextures()
+
+  --LFGListFrame.SearchPanel.RefreshButton:RemoveTextures()
+  LFGListFrame.SearchPanel.RefreshButton:SetStyle("Button")
+
+  LFGListFrame.SearchPanel.FilterButton:RemoveTextures()
+  LFGListFrame.SearchPanel.FilterButton:SetStyle("Button")
+
+  LFGListFrame.SearchPanel.BackButton:RemoveTextures()
+  LFGListFrame.SearchPanel.BackButton:SetStyle("Button")
+  LFGListFrame.SearchPanel.SignUpButton:RemoveTextures()
+  LFGListFrame.SearchPanel.SignUpButton:SetStyle("Button")
+
+  SV.API:Set("!_EditBox", LFGListFrame.SearchPanel.SearchBox, false, false, -2, -1)
   SV.API:Set("ScrollBar", LFGListSearchPanelScrollFrame)
 end
 --[[
diff --git a/SVUI_Tooltip/SVUI_Tooltip.lua b/SVUI_Tooltip/SVUI_Tooltip.lua
index 2fac276..5b310a6 100644
--- a/SVUI_Tooltip/SVUI_Tooltip.lua
+++ b/SVUI_Tooltip/SVUI_Tooltip.lua
@@ -21,25 +21,6 @@ local find, format, match, sub, gsub = string.find, string.format, string.match,
 local floor,min = math.floor, math.min;
 --[[ TABLE METHODS ]]--
 local wipe, tconcat = table.wipe, table.concat;
---BLIZZARD API
-local InCombatLockdown      = _G.InCombatLockdown;
-local CreateFrame           = _G.CreateFrame;
-local ERR_NOT_IN_COMBAT     = _G.ERR_NOT_IN_COMBAT;
-local RAID_CLASS_COLORS     = _G.RAID_CLASS_COLORS;
-local FACTION_BAR_COLORS    = _G.FACTION_BAR_COLORS;
-local CUSTOM_CLASS_COLORS   = _G.CUSTOM_CLASS_COLORS;
-local GetTime               = _G.GetTime;
-local GameTooltip           = _G.GameTooltip;
-local GetItemInfo           = _G.GetItemInfo;
-local GetItemCount          = _G.GetItemCount;
-local GetItemQualityColor   = _G.GetItemQualityColor;
-local FACTION_HORDE   				= _G.FACTION_HORDE;
-local FACTION_ALLIANCE   			= _G.FACTION_ALLIANCE;
-local PET_TYPE_SUFFIX   			= _G.PET_TYPE_SUFFIX;
-local INTERACTIVE_SERVER_LABEL   	= _G.INTERACTIVE_SERVER_LABEL;
-local LE_REALM_RELATION_VIRTUAL   	= _G.LE_REALM_RELATION_VIRTUAL;
-local FOREIGN_SERVER_LABEL   		= _G.FOREIGN_SERVER_LABEL;
-local LE_REALM_RELATION_COALESCED   = _G.LE_REALM_RELATION_COALESCED;
 --[[
 ##########################################################
 GET ADDON DATA
@@ -563,13 +544,15 @@ local _hook_GameTooltip_OnTooltipSetItem = function(self)
 	tipbackground(self)
 	local key,itemLink = self:GetItem()
 	if(key and (not self.itemCleared)) then
-		local itemName, _, quality, _, _, _, _, _, equipSlot, icon = GetItemInfo(key)
-		AddIcon(self, icon)
-		if(quality) then
-			local r,g,b = GetItemQualityColor(quality)
-			self.SuperBorder:SetMaskBorderColor(r, g, b)
+		if(itemLink) then
+			local itemName, _, quality, _, _, _, _, _, equipSlot, icon = GetItemInfo(itemLink)
+			AddIcon(self, icon)
+			if(quality) then
+				local r,g,b = GetItemQualityColor(quality)
+				self.SuperBorder:SetMaskBorderColor(r, g, b)
+			end
 		end
-
+
 		if(ITEM_COUNTS and SV.SetLootTooltip) then
 			SV:SetLootTooltip(self, key)
 		end
diff --git a/SVUI_Tooltip/SVUI_Tooltip.toc b/SVUI_Tooltip/SVUI_Tooltip.toc
index 56eef6f..5c37364 100644
--- a/SVUI_Tooltip/SVUI_Tooltip.toc
+++ b/SVUI_Tooltip/SVUI_Tooltip.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00Tooltip|r
 ## Notes: Tooltip Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0
diff --git a/SVUI_UnitFrames/SVUI_UnitFrames.toc b/SVUI_UnitFrames/SVUI_UnitFrames.toc
index 89639c3..00902b8 100644
--- a/SVUI_UnitFrames/SVUI_UnitFrames.toc
+++ b/SVUI_UnitFrames/SVUI_UnitFrames.toc
@@ -1,6 +1,6 @@
 ## Interface: 60200
 ## Author: Munglunch
-## Version: 1.2.4
+## Version: 1.2.5
 ## Title: |cffFF9900SuperVillain UI: |r|cffFFEF00UnitFrames|r
 ## Notes: UnitFrames Plugin for [|cff9911FFSVUI|r].
 ## OptionalDeps: LibSharedMedia-3.0