121eb4e - Hide Blizzard raid frames
authorAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Sat, 27 Jan 2018 12:04:14 +0000
committerAleksi Blinnikka <aleksi.blinnikka@gmail.com>
Sat, 27 Jan 2018 12:04:14 +0000
OmaRF/RaidFrame.lua

index 1f4bc87..12ac13f 100644 (file)
@@ -4,6 +4,7 @@ local unpack, pairs, rawget = unpack, pairs, rawget;
 local format = string.format;
 local UnitHealthMax, UnitPowerMax = UnitHealthMax, UnitPowerMax;
 local UnitInRange = UnitInRange;
+local InCombatLockdown = InCombatLockdown;
 local CreateFrame, RegisterStateDriver, RegisterUnitWatch = CreateFrame, RegisterStateDriver, RegisterUnitWatch;
 local STANDARD_TEXT_FONT = STANDARD_TEXT_FONT;
 local GameTooltip = nil;
@@ -337,12 +338,57 @@ local function loadCharSettings()
     positions = Settings.Character.Positions;
 end
 
+-- hiding Blizzard frames somewhat based on ShadowedUF
+local function hideBlizzardRaidButton()
+    if InCombatLockdown() then return end
+    local manager = CompactRaidFrameManager;
+    -- remove show and unlock buttons from manager
+    manager.displayFrame.hiddenModeToggle:Hide();
+    manager.displayFrame.lockedModeToggle:Hide();
+end
+
+local hidden = false;
+local function hideBlizzardRaid()
+    if hidden then return end
+    hidden = true;
+    local function hide()
+        if InCombatLockdown() then return end
+        CompactRaidFrameContainer:Hide();
+        local shown = CompactRaidFrameManager_GetSetting("IsShown");
+        if shown and shown ~= "0" then
+            CompactRaidFrameManager_SetSetting("IsShown", "0");
+        end
+    end
+
+    CompactRaidFrameContainer:UnregisterAllEvents();
+    -- there may still be frames created at startup getting events
+    for i=1,MAX_RAID_MEMBERS do
+        local frame = _G["CompactRaidFrame"..i];
+        if not frame then break end
+        frame:UnregisterAllEvents();
+    end
+    hooksecurefunc("CompactRaidFrameManager_UpdateShown", hide);
+    hide();
+    CompactRaidFrameContainer:HookScript("OnShow", hide);
+    hooksecurefunc("CompactRaidFrameManager_UpdateOptionsFlowContainer", hideBlizzardRaidButton);
+    hideBlizzardRaidButton();
+end
+
 CFrame:RegisterEvent("ADDON_LOADED");
 CFrame:RegisterEvent("PLAYER_LOGIN");
-CFrame:SetScript("OnEvent", function(self, event)
+CFrame:RegisterEvent("PLAYER_REGEN_ENABLED");
+CFrame:SetScript("OnEvent", function(self, event, addon)
     if event == "PLAYER_LOGIN" then
+        hideBlizzardRaid();
         initialize();
-    elseif event == "ADDON_LOADED" then
+    elseif event == "ADDON_LOADED" and addon == "Blizzard_CompactRaidFrames" then
+        -- never really happening unless load order changes
+        hideBlizzardRaid();
+    elseif event == "PLAYER_REGEN_ENABLED" then
+        -- if CompactRaidFrameManager_UpdateOptionsFlowContainer was called in combat
+        -- couldn't hide the button
+        hideBlizzardRaidButton();
+    elseif event == "ADDON_LOADED" and addon == "OmaRF" then
         OmaRFLoadChar();
         loadCharSettings();
         OmaRFEvents.LoadChar();