65 lines
2.0 KiB
Lua
65 lines
2.0 KiB
Lua
-- Guda Quest Item Bar movement safety
|
|
-- Prevents structural Quest Bar refreshes while the frame is being dragged.
|
|
-- Lua 5.0 compatible.
|
|
|
|
local addon = Guda
|
|
if not addon or not addon.Modules or not addon.Modules.QuestItemBar then return end
|
|
|
|
local QuestItemBar = addon.Modules.QuestItemBar
|
|
if not QuestItemBar.Update then return end
|
|
|
|
local OriginalUpdate = QuestItemBar.Update
|
|
|
|
local function FlushDeferredUpdate(barFrame)
|
|
if not barFrame or barFrame.isMoving then return end
|
|
if not barFrame._gudaQuestBarDeferredUpdate then return end
|
|
|
|
barFrame._gudaQuestBarDeferredUpdate = nil
|
|
QuestItemBar:Update()
|
|
end
|
|
|
|
local function WrapMouseUp(frame, barFrame)
|
|
if not frame or frame._gudaQuestBarMoveSafetyWrapped then return end
|
|
|
|
local originalMouseUp = frame:GetScript("OnMouseUp")
|
|
frame._gudaQuestBarMoveSafetyWrapped = true
|
|
|
|
frame:SetScript("OnMouseUp", function()
|
|
if originalMouseUp then
|
|
originalMouseUp()
|
|
end
|
|
|
|
FlushDeferredUpdate(barFrame or Guda_QuestItemBar)
|
|
end)
|
|
end
|
|
|
|
local function EnsureMoveSafetyHooks()
|
|
local barFrame = Guda_QuestItemBar
|
|
if not barFrame then return end
|
|
|
|
-- The bar itself can be dragged from its empty area.
|
|
WrapMouseUp(barFrame, barFrame)
|
|
|
|
-- The two visible quest item buttons also start/stop movement on behalf
|
|
-- of their parent frame. Wrap them after they are created by Update().
|
|
WrapMouseUp(getglobal("Guda_QuestItemBarButton1"), barFrame)
|
|
WrapMouseUp(getglobal("Guda_QuestItemBarButton2"), barFrame)
|
|
end
|
|
|
|
function QuestItemBar:Update()
|
|
local barFrame = Guda_QuestItemBar
|
|
|
|
-- BAG_UPDATE and other events can arrive while StartMoving() is active.
|
|
-- Rebuilding/hiding/resizing the frame in that state is unsafe on 1.12.
|
|
-- Coalesce any number of refresh requests into one update after mouse-up.
|
|
if barFrame and barFrame.isMoving then
|
|
barFrame._gudaQuestBarDeferredUpdate = true
|
|
return
|
|
end
|
|
|
|
OriginalUpdate(self)
|
|
EnsureMoveSafetyHooks()
|
|
end
|
|
|
|
addon:Debug("QuestItemBar movement safety enabled")
|