From 64c78050799b7aff6dc61615492938914e182fe3 Mon Sep 17 00:00:00 2001 From: urnati Date: Sat, 24 Nov 2018 16:15:53 -0500 Subject: [PATCH] Fix for main menu bar not working when exitting a vehicle while staying in combat. --- Titan/TitanMovable.lua | 73 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/Titan/TitanMovable.lua b/Titan/TitanMovable.lua index 5768519..7311183 100755 --- a/Titan/TitanMovable.lua +++ b/Titan/TitanMovable.lua @@ -181,6 +181,46 @@ local function DoAdjust(place, force) end --[[ local +NAME: SetPosition +DESC: Adjust a given frame with the passed in values. +VAR: frame - Text string of the frame name +VAR: ... - list of frame position info +NOTE: +Swiped from Vrul on wowinterface forum + +Setting the MainMenuBar was needed because in 8.0.0 Blizzard changed something in the +way they controlled the frame. With Titan panel and bottom bars the MainMenuBar +would 'bounce'. Figuring out what the root cause was a bust. +This fix of setting user placed came from a Titan user. + +The table UIPARENT_MANAGED_FRAME_POSITIONS does not hold all Blizzard frames. +It is cleared for each frame in case the frame is in or might be in the table in the future. +:NOTE +--]] +local function SetPosition(frame, ...) + if type(frame) == 'string' then + UIPARENT_MANAGED_FRAME_POSITIONS[frame] = nil + frame = _G[frame] + end + if type(frame) == 'table' and type(frame.IsObjectType) == 'function' and frame:IsObjectType('Frame') then + local name = frame:GetName() + if name then + UIPARENT_MANAGED_FRAME_POSITIONS[name] = nil + end + frame:SetMovable(true) -- allow frame to move + frame:SetUserPlaced(true) -- tell Blizzard to back off + frame:SetDontSavePosition(true) + frame:SetAttribute('ignoreFramePositionManager', true) + frame.ignoreFramePositionManager = true + if ... then + frame:ClearAllPoints() + frame:SetPoint(...) + end + frame:SetMovable(false) -- lock frame from moving + end +end + +--[[ local NAME: MoveFrame DESC: Adjust the given frame. Expected are frames where :GetPoint works VAR: frame_ptr - Text string of the frame name @@ -233,7 +273,6 @@ local function MoveMenuFrame(frame_ptr, start_y, top_bottom, force) elseif ( StatusTrackingBarManager:GetNumberVisibleBars() == 1 ) then yOffset = yOffset + 14; end - frame:ClearAllPoints(); -- This is a hack because GetPoint on MainMenuBar often returns all nil -- If the scale is is around .85 or higher the bag menu overlaps the main menu local fscale = tonumber(GetCVar("uiScale")) @@ -244,7 +283,9 @@ local function MoveMenuFrame(frame_ptr, start_y, top_bottom, force) -- Slide the menu bar left depending on scaling to allow bag menu room xOfs = xadj * 6 * -1 end - frame:SetPoint("BOTTOM", "UIParent", "BOTTOM", xOfs, yOffset); +-- frame:ClearAllPoints(); +-- frame:SetPoint("BOTTOM", "UIParent", "BOTTOM", xOfs, yOffset); + SetPosition(frame, "BOTTOM", "UIParent", "BOTTOM", xOfs, yOffset) adj = true else -- Unknown frame... @@ -458,13 +499,13 @@ function TitanMovable_AddonAdjust(frame, bool) end end ---[[ Titan +--[[ local NAME: TitanMovableFrame_MoveFrames DESC: Loop through MData calling each frame's 'move' function for each Titan controlled frame. Then update the chat and open bag frames. OUT: None --]] -function TitanMovableFrame_MoveFrames(force) +local function TitanMovableFrame_MoveFrames(force) local move_count = 0 if not InCombatLockdown() then for i = 1,#MData,1 do @@ -518,7 +559,13 @@ function TitanPanel_AdjustFrames(force) -- force is passed to cover cases where Titan should always adjust -- such as when the user has just deselected both top or bottom bars local f = force or false -- do not require the parameter - +if InCombatLockdown() then +TitanDebug("_AdjustFrames" +.." "..tostring(ActionBarBusy()) +.." MMB:"..tostring(MainMenuBar:IsShown()) +.." OAB:"..tostring(OverrideActionBar:IsShown()) +, "warning") +end -- Adjust frame positions top and bottom based on user choices TitanMovableFrame_MoveFrames(f) end @@ -581,16 +628,6 @@ function TitanMovable_SecureFrames() TitanPanelAce:SecureHook("UpdateContainerFrameAnchors", Titan_ContainerFrames_Relocate) -- ContainerFrame.lua TitanPanelAce:SecureHook(WorldMapFrame.BorderFrame.MaximizeMinimizeFrame.MinimizeButton, "Show", TitanPanel_AdjustFrames) -- WorldMapFrame.lua - --[[ - Setting the MainMenuBar was needed because in 8.0.0 Blizzard changed something in the - way they controlled the frame. With Titan panel and bottom bars the MainMenuBar - would 'bounce'. Figuring out what the root cause was a bust. - This fix came from a Titan user. - --]] - MainMenuBar:SetMovable(true); - MainMenuBar:SetUserPlaced(true); - MainMenuBar:SetMovable(false); - TitanPanelAce:SecureHook("OrderHall_CheckCommandBar", TitanPanel_AdjustFrames) end @@ -604,3 +641,9 @@ function TitanMovable_SecureFrames() TitanPanelAce:SecureHook(VideoOptionsFrame, "Hide", Titan_AdjustUIScale) -- VideoOptionsFrame.xml end end +function TitanMovable_Unhook_SecureFrames() +--[[ +This is a debug attempt to fix an issue when a player is dumped from a vehicle while still in combat. +--]] + TitanPanelAce:UnhookAll() +end -- 1.7.9.5