Quantcast

- Clock change to allow both Server and Local to be displayed.

urnati [07-11-21 - 02:47]
- Clock change to allow both Server and Local to be displayed.
- Fix for #1306 where bottom bar disappears when using bottom bars and enter & leave vehicle and et battles
- Fix for zone ability (extra button) going over main menu bar
- Fix to actually hide Titan top bars if in class hall
Filename
Titan/TitanConfig.lua
Titan/TitanMovable.lua
Titan/TitanPanel.lua
Titan/TitanUtils.lua
TitanClock/TitanClock.lua
diff --git a/Titan/TitanConfig.lua b/Titan/TitanConfig.lua
index e7ef19d..d55b4aa 100644
--- a/Titan/TitanConfig.lua
+++ b/Titan/TitanConfig.lua
@@ -710,7 +710,7 @@ local optionsBars = {
 			get = function() return (TitanPanelGetVar("Bar_Show")) end,
 			set = function()
 					TitanPanelToggleVar("Bar_Show")
-					TitanPanelBarButton_DisplayBarsWanted()
+					TitanPanelBarButton_DisplayBarsWanted("Bar_Show "..tostring(TitanPanelGetVar("Bar_Show")))
 					end,
 		},
 		optiontophide = {
@@ -747,7 +747,7 @@ local optionsBars = {
 			get = function() return TitanPanelGetVar("Bar2_Show") end,
 			set = function()
 					TitanPanelToggleVar("Bar2_Show")
-					TitanPanelBarButton_DisplayBarsWanted()
+					TitanPanelBarButton_DisplayBarsWanted("Bar2_Show "..tostring(TitanPanelGetVar("Bar2_Show")))
 					end,
 		},
 		optionbottomhide = {
@@ -828,7 +828,7 @@ local optionsAuxBars = {
 			get = function() return (TitanPanelGetVar("AuxBar_Show")) end,
 			set = function()
 					TitanPanelToggleVar("AuxBar_Show")
-					TitanPanelBarButton_DisplayBarsWanted()
+					TitanPanelBarButton_DisplayBarsWanted("AuxBar_Show "..tostring(TitanPanelGetVar("AuxBar_Show")))
 					end,
 		},
 		optiontophide = {
@@ -861,7 +861,7 @@ local optionsAuxBars = {
 			get = function() return TitanPanelGetVar("AuxBar2_Show") end,
 			set = function()
 					TitanPanelToggleVar("AuxBar2_Show")
-					TitanPanelBarButton_DisplayBarsWanted()
+					TitanPanelBarButton_DisplayBarsWanted("AuxBar2_Show "..tostring(TitanPanelGetVar("AuxBar2_Show")))
 					end,
 		},
 		optionbottomhide = {
diff --git a/Titan/TitanMovable.lua b/Titan/TitanMovable.lua
index 984ff71..3bf5f36 100755
--- a/Titan/TitanMovable.lua
+++ b/Titan/TitanMovable.lua
@@ -8,6 +8,45 @@ Addons that replace all or parts of the Blizzard UI use this.

 The user can turn turn on / off the adjusting of all top frames or all bottom frames.
 :DESC
+
+NOTE: The Override Bar has changed over time. Titan has had to evolve with it, making several attempts to
+create a reasonable fix to minimize the impact to the player.
+Titan Panel hooks 3 areas:
+- OverrideActionBar show
+- OverrideActionBar hide
+- ActionBarController_UpdateAll
+This covers various quests and other situations that replace the main menu bar temporarily.
+
+When the player uses bottom bar(s), the bars are hidden while the override is active then
+put back when the bar is removed.
+
+While on some quests where the player is in a vehicle, they could be knocked out of said vehicle.
+If Titan shows the bottom bar, the main menu could be unusable. Titan will wait for the player to be out of
+combat while in a vehicle.
+On some quests (for example, some turtle quests in BfA) it takes seconds for the player to fall out of combat
+at the end of the quest. This will cause Titan bars to be delayed before appearing.
+:NOTE
+
+NOTE: Some quests replace the menu bar with an Override Bar which causes Titan Panel
+to hide the bottom bar(s).
+When the menu bar is active again Titan needs to show the bottom bar(s).
+A check is made when :
+- Override is hidden (hook)
+- Vehicle exit (event)
+- Combat over (event)
+All three are needed to show bottom bar(s) because the order is not guaranteed. Some quests do not use Override bar.
+:NOTE
+
+NOTE: When the player is in their class hall, Titan will hide the top bars to not conflict with the Class Command Bar.
+:NOTE
+
+NOTE: Vehicle enter and leave have become complicated because a vehicle could be a flight path or a quest.
+On vehicle enter Titan closes any Titan menus and states the menu bar as 'user controlled' but does not close bottom bars(s).
+Stating 'user controlled' is for quests using a vehicle but does not impact flights.
+Closing bottom bars will be done on Override show / ActionBarController_UpdateAll invocation
+Closing the bottom bars on flights would be inconsistent and remove player functionality.
+:NOTE
+
 --]]
 -- Globals

@@ -17,6 +56,7 @@ local InCombatLockdown = _G.InCombatLockdown;
 local hooks_done = false;

 local move_count = 0
+
 --[[ Titan
 Declare the Ace routines
  local AceTimer = LibStub("AceTimer-3.0")
@@ -119,10 +159,15 @@ NOTE:
 --]]
 function TitanMovable_MenuBar_Disable()
 	if DoAdjust(TITAN_PANEL_PLACE_BOTTOM, false) then
---TitanPrint("TitanMovable_MenuBar_Disable - DoAdjust", "warning")
 		MainMenuBar:SetMovable(true);
 		MainMenuBar:SetUserPlaced(false);
 	end
+
+	if TITAN_PANEL_VARS.debug.movable then
+		TitanDebug ("_MenuBar_Disable :"
+			.." likely UNIT_ENTERED_VEHICLE"
+			)
+	end
 end

 --[[ Titan
@@ -157,26 +202,13 @@ DESC: Get the Y axis offset Titan needs (1 or 2 bars) at the given position - to
 VAR: framePosition - TITAN_PANEL_PLACE_TOP or TITAN_PANEL_PLACE_BOTTOM
 OUT: Y axis offset, in pixels
 NOTE:
-- The preferred method to determine the Y offset needed by using TitanUtils_GetBarAnchors().
+- The preferred method to determine the Y offset needed to use TitanUtils_GetBarAnchors()
+which provides anchors (frames) for an addon to use.
 :NOTE
 --]]
 function TitanMovable_GetPanelYOffset(framePosition) -- used by other addons
--- TitanPanelTopAnchor, TitanPanelBottomAnchor
-
-
 	-- Both top & bottom are figured out but only the
 	-- requested position is returned
---[[
-	local barnum_top = TitanPanelTopAnchor:GetBottom()
-	local barnum_bot = TitanPanelBottomAnchor:GetTop()
-
-	if framePosition == TITAN_PANEL_PLACE_TOP then
-		return -barnum_top
-	elseif framePosition == TITAN_PANEL_PLACE_BOTTOM then
-		return barnum_bot - 1;
-		-- no idea why -1 is needed... seems anchoring to bottom is off a pixel
-	end
---]]
 	local barnum_top = 0
 	local barnum_bot = 0
 	-- If user has the top adjust set then determine the
@@ -351,7 +383,9 @@ NAME: MoveFrame
 DESC: Adjust the given frame. Expected are frames where :GetPoint works
 VAR: frame_ptr - Text string of the frame name
 VAR: start_y - Any offset due to the specific frame
-OUT: top_bottom - Frame is at top or bottom, expecting Titan constant for top or bottom
+VAR: top_bottom - Frame is at top or bottom, expecting Titan constant for top or bottom
+VAR: force - Force the adjust; passed through
+OUT: None
 --]]
 local function MoveFrame(frame_ptr, start_y, top_bottom, force)
 	local frame = _G[frame_ptr]
@@ -362,12 +396,6 @@ local function MoveFrame(frame_ptr, start_y, top_bottom, force)
 	then
 		-- skip this frame
 	else
---[[
-TitanDebug ("MoveFrame :"
-	.." "..tostring(frame_ptr)
-	.." y:"..tostring(start_y)
-	)
---]]
 		if DoAdjust(top_bottom, force) and frame:IsShown() then
 			local scale = TitanPanelGetVar("Scale")
 			local y = 0
@@ -377,49 +405,14 @@ TitanDebug ("MoveFrame :"
 			-- check for nil which will cause an error
 			if point and relativeTo and relativePoint and xOfs then -- do not care about yOfs
 				-- should be safe...
---				frame:ClearAllPoints();
---				frame:SetPoint(point, relativeTo:GetName(), relativePoint, xOfs, y)
---[[
---				if tostring(relativeTo:GetName()) == "UIParent" then
-				if tostring(frame:GetName()) == "ExtraAbilityContainer" then
---				else
-				TitanDebug ("MoveFrame :"
-					.." "..tostring(frame:GetName())
-					.." point:"..tostring(point)
-					.." relativeTo:"..tostring(relativeTo:GetName())
-					.." relativePoint:"..tostring(relativePoint)
-					.." xOfs:"..tostring(xOfs)
-					.." y:"..tostring(y)
-					.." adj:"..tostring(DoAdjust(top_bottom, force))
-					.." tb:"..tostring(top_bottom)
-					.." f:"..tostring(force)
-					)
-				end
---]]
 				SetPosition(frame, point, relativeTo:GetName(), relativePoint, xOfs, y)
 			else
 				-- do not proceed
---[[
-				TitanDebug ("MoveFrame nil :"
-					.." "..tostring(frame:GetName())
-					.."point:"..tostring(point)
-					.."relativeTo:"..tostring(relativeTo:GetName())
-					.."relativePoint:"..tostring(relativePoint)
-					.."xOfs:"..tostring(xOfs)
-					)
---]]
 			end
 		else
 			--[[
 			Some frames such as the ticket frame may not be visible or even created
 			--]]
---[[
-				TitanDebug ("MoveFrame no adj :"
-					.." "..tostring(frame:GetName())
-					.." adj: "..tostring(DoAdjust(top_bottom, force))
-					.." shown: "..tostring(frame:IsShown())
-					)
---]]
 		end
 	end
 end
@@ -431,7 +424,9 @@ This is modeled after MoveFrame to keep it similar.
 Titan sets the IsUserPlaced for the MainMenuBar frame so Titan needs to adjust.
 VAR: frame_ptr - Text string of the frame name
 VAR: start_y - Any offset due to the specific frame
-OUT: top_bottom - Frame is at top or bottom, expecting Titan constant for top or bottom
+VAR: top_bottom - Frame is at top or bottom, expecting Titan constant for top or bottom
+VAR: force - Force the adjust; passed through
+OUT: None
 --]]
 local function MoveMenuFrame(frame_ptr, start_y, top_bottom, force)
 	local frame = _G[frame_ptr]
@@ -461,9 +456,10 @@ NOTE:
 - This is required because Blizz adjusts the chat frame relative to other frames so some of the Blizz code is copied.
 - If in combat or if the user has moved the chat frame then no action is taken.
 - The frame is adjusted in the Y axis only.
+- See See FCF_UpdateDockPosition if this is no longer working - This routine may need to change.
 :NOTE
 --]]
-local function Titan_FCF_UpdateDockPosition()
+local function Titan_FCF_UpdateDockPosition() -- See FCF_UpdateDockPosition
 	if not Titan__InitializedPEW
 	or not TitanPanelGetVar("LogAdjust")
 	or TitanPanelGetVar("AuxScreenAdjust") then
@@ -478,24 +474,6 @@ local function Titan_FCF_UpdateDockPosition()
 			panelYOffset = panelYOffset + (24 * scale) -- after 3.3.5 an additional adjust was needed. why? idk
 		end

---[[ Blizz code
-		if _G["DEFAULT_CHAT_FRAME"]:IsUserPlaced() then
-			if _G["SIMPLE_CHAT"] ~= "1" then return end
-		end
-
-		local chatOffset = 85 + panelYOffset;
-		if GetNumShapeshiftForms() > 0 or HasPetUI() or PetHasActionBar() then
-			if MultiBarBottomLeft:IsVisible() then
-				chatOffset = chatOffset + 55;
-			else
-				chatOffset = chatOffset + 15;
-			end
-		elseif MultiBarBottomLeft:IsVisible() then
-			chatOffset = chatOffset + 15;
-		end
-		_G["DEFAULT_CHAT_FRAME"]:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", 32, chatOffset);
-		FCF_DockUpdate();
---]]
 		if ( DEFAULT_CHAT_FRAME:IsUserPlaced() ) then
 			return;
 		end
@@ -558,17 +536,6 @@ local function Titan_ContainerFrames_Relocate()
 	end
 end

-local function has_pet_bar()
-	local hasPetBar = false
-	if ( ( PetActionBarFrame and PetActionBarFrame:IsShown() ) or ( StanceBarFrame and StanceBarFrame:IsShown() ) or
-		 ( MultiCastActionBarFrame and MultiCastActionBarFrame:IsShown() ) or ( PossessBarFrame and PossessBarFrame:IsShown() ) or
-		 ( MainMenuBarVehicleLeaveButton and MainMenuBarVehicleLeaveButton:IsShown() ) ) then
---		tinsert(yOffsetFrames, "pet");
-		hasPetBar = true;
-	end
-	return hasPetBar
-end
-
 local function calc_bars() -- extra action button
 	local res = 0
 	local out = ""
@@ -612,19 +579,7 @@ local function calc_bars() -- extra action button
 	end

 	res = main + left + pet + stance + cast + poss + vehicle
---[[
-TitanDebug ("calc_bars :"
-	.." "..tostring(out:GetName())
-	.." y: "..tostring(res)
-	.." m: "..tostring(main)
-	.." l: "..tostring(left)
-	.." p: "..tostring(pet)
-	.." s: "..tostring(stance)
-	.." c: "..tostring(cast)
-	.." p: "..tostring(poss)
-	.." v: "..tostring(vehicle)
-	)
---]]
+
 	return res
 end
 XXZZ_calc_bars = calc_bars
@@ -709,9 +664,9 @@ local MData = {
 			-- Only spend cycles if the frame is shown.
 			if ExtraActionBarFrame
 			and ExtraActionBarFrame:IsShown() then
-				-- Need to calc Y because Y depends on what else is shown
-				-- The extra action button is calculated from the center of the screen so this needs more effort than the other buttons
-				--[=[ UIParent
+				--[=[
+				Need to calc Y because Y depends on what else is shown
+				The extra action button is calculated from the center of the screen so this needs more effort than the other buttons
 				Look at UIParent.lua for logic (UIParent_ManageFramePosition)
 				--]=]
 				local actionBarOffset = 45;
@@ -723,48 +678,13 @@ local MData = {
 				local rel_start = UIParent:GetHeight() / 2 -- CENTER of UIParent
 				local yOfs = 0
 				local yOfs1 = 0
---[[
-				if MainMenuBar and MainMenuBar:IsShown() then
-					yOfs2 = MainMenuBar:GetTop() -- menuBarTop
-				end
-				if (MultiBarBottomLeft and MultiBarBottomLeft:IsShown())
-				or (MultiBarBottomRight and MultiBarBottomRight:IsShown())
-				then
-					yOfs2 = MultiBarBottomRight:GetTop() -- actionBarOffset
-				end
-				if (has_pet_bar())
-				and (MultiBarBottomRight and MultiBarBottomRight:IsShown())
-				then
-					yOfs2 = petBattleTop
-				end
-				--(yOfs + start_y) * -1
---]]
 				yOfs = (rel_start * -1) -- bottom of screen
 					+ calc_bars() -- offset of WoW bars shown
 					+ start_y -- center of extra action button
---[[
-TitanDebug ("move y :"
-	.." "..tostring(ExtraActionBarFrame:GetName())
-	.." y: "..tostring(yOfs)
-	.." b/2: "..tostring(start_y)
-	.." b+: "..tostring(calc_bars())
-	.." rs: "..tostring(rel_start)
-	)
---]]
-				--MoveFrame("ExtraActionBarFrame", yOfs, TITAN_PANEL_PLACE_BOTTOM, force)
 				MoveFrame("ExtraAbilityContainer", yOfs, TITAN_PANEL_PLACE_BOTTOM, force)
 			end
 			end,
 		addonAdj = false, },
---[[
-	[8] = {frameName = "OverrideActionBar",
-		move = function (force) MoveFrame("OverrideActionBar", 0, TITAN_PANEL_PLACE_BOTTOM, force) end,
-		addonAdj = false, },
-	[12] = {frameName = "OrderHallCommandBar",
-		move = function (force)
-			MoveFrame("OrderHallCommandBar", 0, TITAN_PANEL_PLACE_TOP, force) end,
-		addonAdj = false, },
---]]
 }

 --[[ Titan
@@ -813,8 +733,8 @@ local function TitanMovableFrame_MoveFrames(force)
 	local str = "" -- debug
 	local force = force or false
 	--[[
-	Setting the MainMenuBar as user placed is needed because in 8.0.0 Blizzard changed something in the
-	way they controlled the frame. With Titan panel and bottom bars enabled the MainMenuBar
+	Setting the MainMenuBar as user placed is needed because in 8.0.0 because Blizzard changed something in the
+	way they controlled the frame. With Titan Panel and bottom bars enabled the MainMenuBar
 	would 'bounce'. Figuring out the true root cause was a bust.
 	This idea of user placed came from a Titan user who is an addon developer.
 	However setting user placed causes the main menu bar to not act as we desire due to the way Blizzard coded the bar.
@@ -870,17 +790,19 @@ NAME: TitanPanel_AdjustFrames
 DESC: Adjust the frames for the Titan visible bars.
 This is a shell for the actual Movable routine used by other Titan routines and secure hooks
 VAR:  force - Force an adjust such as when the user changes bars shown
+VAR:  reason - Debug to determine where and why an adjust is requested
 OUT:  None
 NOTE:
 :NOTE
 --]]
 function TitanPanel_AdjustFrames(force, reason)
---[[
-TitanDebug ("_AdjustFrames :"
-	.." "..tostring(force)
-	.." reason: '"..tostring(reason).."'"
-	)
---]]
+	if TITAN_PANEL_VARS.debug.movable then
+		TitanDebug ("_AdjustFrames :"
+			.." f: "..tostring(force)
+			.." r: '"..tostring(reason).."'"
+			)
+	end
+
 	local f = false -- do not require the parameter
 	if force == true then -- but force it to be boolean
 		f = true
@@ -917,12 +839,12 @@ function Titan_AdjustScale()
 		end

 		TitanPanel_AdjustFrames(false, "_AdjustScale ")
---		TitanPanelBarButton_DisplayBarsWanted()
 		TitanPanel_RefreshPanelButtons();
 	end
 end

---[[ =============
+--[[ Titan
+=============
 NAME: Titan_Hook_*
 DESC: Set of routines to front the adjust the frames routine.
 VAR:  None
@@ -936,8 +858,70 @@ This group of Titan_Hook_* is :
 These may be called from any Titan Panel code
 :NOTE
 --]]
-function Titan_Hook_Frames()
-	TitanPanel_AdjustFrames(false, "Hook UIParent_ManageFramePositions ")
+
+function Titan_Hook_Frames() -- UIParent_ManageFramePositions hook
+	--[[
+	This is the routine that will be called the most. It is the general purpose routine for WoW frames.
+	As Blizzard has changed (or in some cases added) ways to handle the various bars it has across expansions,
+	this routine has had to become more complex.
+	Especially to handle the main menu bar processing along with override bar which also handles 'in vehicle' bars.
+	The processing is needed to sometimes handle hiding or delaying Titan bars to not interfere with the normal WoW
+	bars - top or bottom.
+
+	This can hide top or bottom bars to avoid conflicts visually or functionally with WoW bars.
+	When a normal adjust is requested, this calls TitanPanelBarButton_DisplayBarsWanted rather than
+	TitanPanel_AdjustFrames because bars to show bars that may have been hidden in a prior invocation. It is
+	a touch 'heavy' but will force bars back if hidden for any reason.
+	--]]
+--	TitanPanel_AdjustFrames(false, "Hook UIParent_ManageFramePositions ")
+	local reason = "Hook UIParent_* - "
+	--[[
+	Code from ActionBarController.lua ActionBarController_UpdateAll modified for Titan
+	This hook relies on _UpdateAll calling UIParent_ManageFramePositions near the end of its processing
+	--]]
+	-- If we have a skinned vehicle bar or skinned override bar, display the OverrideActionBar
+	if ((HasVehicleActionBar() and UnitVehicleSkin("player") and UnitVehicleSkin("player") ~= "")
+	or (HasOverrideActionBar() and GetOverrideBarSkin() and GetOverrideBarSkin() ~= 0)) then
+		reason = reason.."skinned override bar"
+		-- Override bar in place; hide Titan bottom bar(s)
+		TitanPanelBarButton_HideBottomBars()
+	-- If we have a non-skinned override bar of some sort, use the MainMenuBarArtFrame
+	elseif ( HasBonusActionBar() or HasOverrideActionBar() or HasVehicleActionBar() or HasTempShapeshiftActionBar() or C_PetBattles.IsInBattle() ) then
+		reason = reason.."non-skinned override bar"
+		-- Override bar in place; hide Titan bottom bar(s)
+		TitanPanelBarButton_HideBottomBars()
+	elseif ( OrderHallCommandBar and OrderHallCommandBar:IsShown() ) then
+		reason = reason.."Order Hall bar"
+		-- Override bar in place; hide Titan bottom bar(s)
+		TitanPanelBarButton_HideAllBars()
+	else
+		if InCombatLockdown() or UnitVehicleSkin("player") then
+			reason = reason.."waiting..."
+			--[[
+			wait until out of combat just in case...
+			Putting back a bar (especially bottom bar) in combat could cause the
+			main menu bar to not work as expected.
+			--]]
+		else
+			reason = reason.."Adjust"
+			-- Overkill but bottom bars could have been hidden
+			TitanPanelBarButton_DisplayBarsWanted("Hook _Frames*")
+		end
+	end
+
+	if TITAN_PANEL_VARS.debug.movable then
+		TitanDebug (tostring(reason)
+		.." c: "..tostring(InCombatLockdown())
+		.." b1: "..tostring(TitanPanelGetVar("AuxBar_Show"))
+		.." b2: "..tostring(TitanPanelGetVar("AuxBar2_Show"))
+		.." vb+: "..tostring((HasVehicleActionBar() and UnitVehicleSkin("player") and UnitVehicleSkin("player") ~= "") and true or false)
+		.." ob+: "..tostring((HasOverrideActionBar() and GetOverrideBarSkin() and GetOverrideBarSkin() ~= 0) and true or false)
+		.." bb: "..tostring(HasBonusActionBar())
+		.." ob: "..tostring(HasOverrideActionBar())
+		.." sb: "..tostring(HasTempShapeshiftActionBar())
+		.." pb: "..tostring(C_PetBattles.IsInBattle())
+		)
+	end
 end

 function Titan_Hook_Ticket_Show()
@@ -952,45 +936,10 @@ function Titan_Hook_Target()
 	TitanPanel_AdjustFrames(false, "Hook TargetFrame_Update ")
 end

---[[
-function Titan_Hook_Override_Show()
-	TitanPanel_AdjustFrames(false, "Hook OverrideActionBar Show")
-end
---]]
-
-function Titan_Hook_Override()
-	-- We need a post hook here...
-	local bar_state = ActionBarController_GetCurrentActionBarState()
-	if bar_state == LE_ACTIONBAR_STATE_MAIN then
-		-- normal state, show / restore the user requested bars
-		if InCombatLockdown() or UnitInVehicle("player") then
-			-- wait until out of combat just in case...
-			-- Putting back a bar (especially bottom bar) could cause the
-			-- main menu bar to not work as expected.
-		else
-			TitanPanelBarButton_DisplayBarsWanted()
-		end
-	elseif bar_state == LE_ACTIONBAR_STATE_OVERRIDE then
-		-- override bar in place, look at bottom bars
-		if TitanPanelGetVar("AuxBar_Show") then
-			TitanPanelBarButton_Hide(TITAN_PANEL_DISPLAY_PREFIX.."AuxBar")
-		end
-		if TitanPanelGetVar("AuxBar2_Show") then
-			TitanPanelBarButton_Hide(TITAN_PANEL_DISPLAY_PREFIX.."AuxBar2")
-		end
-	else
-		-- no other known states
-	end
-end
-
 function Titan_Hook_Map()
 	TitanPanel_AdjustFrames(false, "Hook WorldMapFrame.BorderFrame.MaximizeMinimizeFrame.MinimizeButton ")
 end

-function Titan_Hook_OrderHall()
-	TitanPanel_AdjustFrames(false, "Hook OrderHall_CheckCommandBar ")
-end
-
 function Titan_Hook_PEW()
 	TitanPanel_AdjustFrames(false, "Hook PEW Config timer")
 end
@@ -999,11 +948,11 @@ function Titan_Hook_SpecSwitch()
 	TitanPanel_AdjustFrames(false, "Hook SpecSwitch Config timer ")
 end

-function Titan_Hook_MoveAdj()
+function Titan_Hook_MoveAdj() -- in config but not used
 	TitanPanel_AdjustFrames(false, "Hook MoveAdj Config timer ")
 end

-function Titan_Hook_Vehicle()
+function Titan_Hook_Vehicle() -- in config but not used
 	TitanPanel_AdjustFrames(false, "Hook Vehicle Config timer ")
 end

@@ -1032,32 +981,20 @@ function TitanMovable_SecureFrames()
 		TitanPanelAce:SecureHook(TicketStatusFrame, "Show", Titan_Hook_Ticket_Show) -- HelpFrame.xml
 		TitanPanelAce:SecureHook(TicketStatusFrame, "Hide", Titan_Hook_Ticket_Hide) -- HelpFrame.xml
 		TitanPanelAce:SecureHook("TargetFrame_Update", Titan_Hook_Target) -- TargetFrame.lua
---		TitanPanelAce:SecureHook(OverrideActionBar, "Show", Titan_Hook_Override_Show) -- HelpFrame.xml
---		TitanPanelAce:SecureHook(OverrideActionBar, "Hide", Titan_Hook_Override_Hide) -- HelpFrame.xml
 		TitanPanelAce:SecureHook("UpdateContainerFrameAnchors", Titan_ContainerFrames_Relocate) -- ContainerFrame.lua
 		TitanPanelAce:SecureHook(WorldMapFrame.BorderFrame.MaximizeMinimizeFrame.MinimizeButton, "Show", Titan_Hook_Map) -- WorldMapFrame.lua

-		TitanPanelAce:SecureHook("OrderHall_CheckCommandBar", Titan_Hook_OrderHall)
+--		TitanPanelAce:SecureHook("OrderHall_CheckCommandBar", Titan_Hook_OrderHall)
 	end

-		-- Updated fix for change to Override Bar which allows a player to be knocked off a 'vehicle' while in
-		-- combat. This can cause Titan bottom bar to cover the main menu bar.
-		--[[ From ActionBarController.lua
-				Slight kludge to build the frame name here, they are used in TitanVariables to define each bar
-		--]]
-
-	if TitanPanelAce:IsHooked("ActionBarController_UpdateAll", Titan_Hook_Override) then
-		--  nothing to do
-	else
-		TitanPanelAce:SecureHook("ActionBarController_UpdateAll", Titan_Hook_Override)
-	end
-
 	if not TitanPanelAce:IsHooked("VideoOptionsFrameOkay_OnClick", Titan_AdjustUIScale) then
-		-- Properly Adjust UI Scale if set
-		-- Note: These are the least intrusive hooks we could think of, to properly adjust the Titan Bar(s)
-		-- without having to resort to a SetCvar secure hook. Any addon using SetCvar should make sure to use the 3rd
-		-- argument in the API call and trigger the CVAR_UPDATE event with an appropriate argument so that other addons
-		-- can detect this behavior and fire their own functions (where applicable).
+		--[[
+		Properly Adjust UI Scale if set
+		Note: These are the least intrusive hooks we could think of, to properly adjust the Titan Bar(s)
+		without having to resort to a SetCvar secure hook. Any addon using SetCvar should make sure to use the 3rd
+		argument in the API call and trigger the CVAR_UPDATE event with an appropriate argument so that other addons
+		can detect this behavior and fire their own functions (where applicable).
+		--]]
 		TitanPanelAce:SecureHook("VideoOptionsFrameOkay_OnClick", Titan_AdjustUIScale) -- VideoOptionsFrame.lua
 		TitanPanelAce:SecureHook(VideoOptionsFrame, "Hide", Titan_AdjustUIScale) -- VideoOptionsFrame.xml
 	end
@@ -1067,9 +1004,18 @@ function TitanMovable_SecureFrames()

 	hooks_done = true
 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
+	TitanDebug ("MoveFrame :"
+		.." "..tostring(frame:GetName())
+		.." point:"..tostring(point)
+		.." relativeTo:"..tostring(relativeTo:GetName())
+		.." relativePoint:"..tostring(relativePoint)
+		.." xOfs:"..tostring(xOfs)
+		.." y:"..tostring(y)
+		.." adj:"..tostring(DoAdjust(top_bottom, force))
+		.." tb:"..tostring(top_bottom)
+		.." f:"..tostring(force)
+		)
+	end
+--]]
\ No newline at end of file
diff --git a/Titan/TitanPanel.lua b/Titan/TitanPanel.lua
index 387b63f..08f467a 100644
--- a/Titan/TitanPanel.lua
+++ b/Titan/TitanPanel.lua
@@ -525,8 +525,20 @@ function TitanPanelBarButton:PLAYER_REGEN_DISABLED()
 end

 function TitanPanelBarButton:PLAYER_REGEN_ENABLED()
-	-- Outside combat check to see if frames need correction
-	TitanPanel_AdjustFrames(true, "Regen enabled")
+	--[[
+	- Outside combat check to see if frames need correction
+	- Note: Quests can replace the main menu bar which hides Titan bottom bar(s)...
+	On completion / exit these may enable regen AFTER exiting the vehicle.
+	--]]
+TitanDebug ("PLAYER_REGEN_ENABLED"
+.." c: "..tostring(InCombatLockdown())
+.." v: "..tostring(UnitInVehicle("player"))
+)
+	if InCombatLockdown() or UnitInVehicle("player") then
+		-- Wait for both to clear
+	else
+		TitanPanelBarButton_DisplayBarsWanted("PLAYER_REGEN_ENABLED")
+	end
 end
 --[
 function TitanPanelBarButton:ACTIVE_TALENT_GROUP_CHANGED()
@@ -539,10 +551,27 @@ function TitanPanelBarButton:UNIT_ENTERED_VEHICLE(self, ...)

 	-- Needed because 8.0 made changes to the menu bar processing (see TitanMovable)
 	TitanMovable_MenuBar_Disable()
+	--[[
+	NOTE: Hiding the Titan bottom bars is not desired here. We cannot (I do not know how :))
+	distinguish between a player on a quest or on flight path.
+	--]]
 end
 function TitanPanelBarButton:UNIT_EXITED_VEHICLE(self, ...)
-	-- A combat check will be done inside the adjust
-	TitanPanel_AdjustFrames(true, "Exit vehicle")
+	--[[
+	- Note: Some quests replace the menu bar which cause Titan Panel to hide
+	bottom bar(s). So we need to be certain to make them appear again.
+	- A combat check will be done inside the adjust which may
+	FAIL because a regen enabled may come after this event.
+	--]]
+TitanDebug ("UNIT_EXITED_VEHICLE"
+.." c: "..tostring(InCombatLockdown())
+.." v: "..tostring(UnitInVehicle("player"))
+)
+	if InCombatLockdown() or UnitInVehicle("player") then
+		-- Wait for both to clear
+	else
+		TitanPanelBarButton_DisplayBarsWanted("UNIT_EXITED_VEHICLE")
+	end
 end
 --]]
 --
@@ -553,7 +582,7 @@ function TitanPanelBarButton:PET_BATTLE_OPENING_START()
 end
 function TitanPanelBarButton:PET_BATTLE_CLOSE()
 	-- A combat check will be done inside the adjust
-	TitanPanelBarButton_DisplayBarsWanted()
+	TitanPanelBarButton_DisplayBarsWanted("PET_BATTLE_CLOSE")
 end
 --
 --
@@ -1229,7 +1258,7 @@ DESC: Show all the Titan bars the user has selected.
 VAR:  None
 OUT:  None
 --]]
-function TitanPanelBarButton_DisplayBarsWanted()
+function TitanPanelBarButton_DisplayBarsWanted(reason)
 	-- Check all bars to see if the user has requested they be shown
 	for idx,v in pairs (TitanBarData) do
 		-- Show / hide plus kick auto hide, if needed
@@ -1240,7 +1269,7 @@ function TitanPanelBarButton_DisplayBarsWanted()
 	TitanAnchors()

 	-- Adjust other frames because the bars shown / hidden may have changed
-	TitanPanel_AdjustFrames(true, "_DisplayBarsWanted")
+	TitanPanel_AdjustFrames(true, reason)
 end

 --[[ Titan
@@ -1278,6 +1307,25 @@ TitanDebug("_HideAllBars: "
 end

 --[[ Titan
+NAME: TitanPanelBarButton_HideBottomBars
+DESC: This routine will hide the bottom Titan bars (and hiders) regardless of what the user has selected.
+VAR:  None
+OUT:  None
+NOTE:
+- For example when the override bar is being used
+- We only need to hide the bars (and hiders) - not adjust frames
+:NOTE
+--]]
+function TitanPanelBarButton_HideBottomBars()
+	if TitanPanelGetVar("AuxBar_Show") then
+		TitanPanelBarButton_Hide(TITAN_PANEL_DISPLAY_PREFIX.."AuxBar")
+	end
+	if TitanPanelGetVar("AuxBar2_Show") then
+		TitanPanelBarButton_Hide(TITAN_PANEL_DISPLAY_PREFIX.."AuxBar2")
+	end
+end
+
+--[[ Titan
 NAME: TitanPanelBarButton_Show
 DESC: Show / hide the given Titan bar based on the user selection.
 VAR: frame - expected to be a Titan bar name (string)
@@ -1423,7 +1471,7 @@ function TitanPanel_InitPanelButtons()
 			}
 	end
 --
-	TitanPanelBarButton_DisplayBarsWanted();
+	TitanPanelBarButton_DisplayBarsWanted("TitanPanel_InitPanelButtons");

 	-- Position all the buttons
 	for i = 1, table.maxn(TitanPanelSettings.Buttons) do
diff --git a/Titan/TitanUtils.lua b/Titan/TitanUtils.lua
index 24b9633..4f9b37b 100644
--- a/Titan/TitanUtils.lua
+++ b/Titan/TitanUtils.lua
@@ -12,6 +12,12 @@ TITAN_NOT_REGISTERED = _G["RED_FONT_COLOR_CODE"].."Not_Registered_Yet".._G["FONT
 TITAN_REGISTERED = _G["GREEN_FONT_COLOR_CODE"].."Registered".._G["FONT_COLOR_CODE_CLOSE"]
 TITAN_REGISTER_FAILED = _G["RED_FONT_COLOR_CODE"].."Failed_to_Register".._G["FONT_COLOR_CODE_CLOSE"]

+-- For debug across Titan Panel
+TITAN_PANEL_VARS = {}
+TITAN_PANEL_VARS.debug = {}
+TITAN_PANEL_VARS.debug.movable = false
+TITAN_PANEL_VARS.debug.events = false
+
 local _G = getfenv(0);
 local L = LibStub("AceLocale-3.0"):GetLocale(TITAN_ID, true)
 local media = LibStub("LibSharedMedia-3.0")
diff --git a/TitanClock/TitanClock.lua b/TitanClock/TitanClock.lua
index db669f0..3026482 100644
--- a/TitanClock/TitanClock.lua
+++ b/TitanClock/TitanClock.lua
@@ -119,6 +119,8 @@ end
 function TitanPanelClockButton_GetButtonText()
 	local clocktime = "";
 	local labeltext = "";
+	local clocktime2 = nil;
+	local labeltext2 = nil;
 	local _ = nil
 	if TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "Server" then
 		_,clocktime = TitanPanelClockButton_GetTime("Server", 0)
@@ -129,8 +131,29 @@ function TitanPanelClockButton_GetButtonText()
 	elseif TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "Local" then
 		_,clocktime = TitanPanelClockButton_GetTime ("Local", 0)
 		labeltext = TitanGetVar(TITAN_CLOCK_ID, "ShowLabelText") and TitanPanelClockButton_GetColored("(L) ") or ""
+	elseif TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "ServerLocal" then
+		local _, s = TitanPanelClockButton_GetTime ("Server", 0)
+		local _, l = TitanPanelClockButton_GetTime ("Local", 0)
+		sl = TitanGetVar(TITAN_CLOCK_ID, "ShowLabelText") and TitanPanelClockButton_GetColored("(S) ") or ""
+		ll = TitanGetVar(TITAN_CLOCK_ID, "ShowLabelText") and TitanPanelClockButton_GetColored("(L) ") or ""
+		clocktime = s
+		labeltext = sl
+		clocktime2 = l
+		labeltext2 = ll
+	elseif TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "ServerAdjustedLocal" then
+		local _, s = TitanPanelClockButton_GetTime ("Server", TitanGetVar(TITAN_CLOCK_ID, "OffsetHour"))
+		local _, l = TitanPanelClockButton_GetTime ("Local", 0)
+		sl = TitanGetVar(TITAN_CLOCK_ID, "ShowLabelText") and TitanPanelClockButton_GetColored("(A) ") or ""
+		ll = TitanGetVar(TITAN_CLOCK_ID, "ShowLabelText") and TitanPanelClockButton_GetColored("(L) ") or ""
+		clocktime = s
+		labeltext = sl
+		clocktime2 = l
+		labeltext2 = ll
+	elseif TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "Local" then
+		_,clocktime = TitanPanelClockButton_GetTime ("Local", 0)
+		labeltext = TitanGetVar(TITAN_CLOCK_ID, "ShowLabelText") and TitanPanelClockButton_GetColored("(L) ") or ""
 	end
-	return labeltext, clocktime
+	return labeltext, clocktime, labeltext2, clocktime2
 end


@@ -464,6 +487,18 @@ function TitanPanelRightClickMenu_PrepareClockMenu()
 	info.checked = function() return TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "ServerAdjusted" end
 	DDM:UIDropDownMenu_AddButton(info);

+	info = {};
+	info.text = L["TITAN_CLOCK_MENU_SERVER_TIME"].." & "..L["TITAN_CLOCK_MENU_LOCAL_TIME"]
+	info.func = function() TitanSetVar(TITAN_CLOCK_ID, "TimeMode", "ServerLocal") TitanPanelButton_UpdateButton(TITAN_CLOCK_ID) end
+	info.checked = function() return TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "ServerLocal" end
+	DDM:UIDropDownMenu_AddButton(info);
+
+	info = {};
+	info.text = L["TITAN_CLOCK_MENU_SERVER_ADJUSTED_TIME"].." & "..L["TITAN_CLOCK_MENU_LOCAL_TIME"]
+	info.func = function() TitanSetVar(TITAN_CLOCK_ID, "TimeMode", "ServerAdjustedLocal") TitanPanelButton_UpdateButton(TITAN_CLOCK_ID) end
+	info.checked = function() return TitanGetVar(TITAN_CLOCK_ID, "TimeMode") == "ServerAdjustedLocal" end
+	DDM:UIDropDownMenu_AddButton(info);
+
 	TitanPanelRightClickMenu_AddSpacer();

 	info = {};