From 81f41a1fce2a5c663cd90fe5f7de2dba469faf2c Mon Sep 17 00:00:00 2001 From: Xurkon Date: Fri, 20 Mar 2026 23:41:40 -0500 Subject: [PATCH] fix: Shift-click now toggles tracking for all quests in quest log --- Modules/QuestLinks/Hooks.lua | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Modules/QuestLinks/Hooks.lua b/Modules/QuestLinks/Hooks.lua index 491e84c..425236f 100644 --- a/Modules/QuestLinks/Hooks.lua +++ b/Modules/QuestLinks/Hooks.lua @@ -16,10 +16,9 @@ function Hooks:HookQuestLogTitle() Questie:Debug(Questie.DEBUG_DEVELOP, "[Hooks] Hooking Quest Log Title") hooksecurefunc("QuestLogTitleButton_OnClick", function(self, button) - -- FIX: Added InCombatLockdown guard to prevent taining secure execution paths. + -- FIX: Added InCombatLockdown guard to prevent tainting secure execution paths. -- This hook can be called during combat if the player interacts with the quest log -- while in combat, which may cause taint that propagates to protected functions. - print("[DEBUG] QuestLogTitleButton_OnClick hook! button=" .. tostring(button) .. " isLeft=" .. tostring(button == "LeftButton") .. " shift=" .. tostring(IsShiftKeyDown())) if InCombatLockdown() then return end if (not self) or self.isHeader then return @@ -27,7 +26,6 @@ function Hooks:HookQuestLogTitle() local questLogLineIndex if Questie.IsWotlk or QuestieCompat.Is335 then - -- With Wotlk the offset is no longer required cause the API already hands the correct index questLogLineIndex = self:GetID() else questLogLineIndex = self:GetID() + FauxScrollFrame_GetOffset(QuestLogListScrollFrame) @@ -45,19 +43,16 @@ function Hooks:HookQuestLogTitle() -- but for chat links the original function usually just selects the quest anyway. end - -- For all other clicks (including tracking/untracking), use the original function - -- only call Questie's tracker if we actually want to fix this quest (normal quests already call AQW_insert) - -- Only handle tracking on shift-click for "Talk to" quests (no objectives) - print("[DEBUG] questLogLineIndex=", questLogLineIndex, "numLeaderBoards=", GetNumQuestLeaderBoards(questLogLineIndex), "shift=", IsShiftKeyDown(), "autoTrack=", Questie.db.profile.autoTrackQuests) - if Questie.db.profile.trackerEnabled and GetNumQuestLeaderBoards(questLogLineIndex) == 0 and IsShiftKeyDown() then + -- For shift-click tracking toggle, only handle if tracker is enabled + if Questie.db.profile.trackerEnabled and IsShiftKeyDown() then local _, _, _, isHeader, _, _, _, questId = GetQuestLogTitle(questLogLineIndex) - print("[DEBUG] After GetQuestLogTitle - isHeader=", isHeader, "questId=", questId, "Tracked=", Questie.db.char.TrackedQuests[questId], "AutoUntracked=", Questie.db.char.AutoUntrackedQuests[questId]) - if questId and questId > 0 then - if Questie.db.char.TrackedQuests[questId] or (Questie.db.profile.autoTrackQuests and (not Questie.db.char.AutoUntrackedQuests[questId])) then - -- Quest is currently tracked — hidden it + if questId and questId > 0 and not isHeader then + -- Toggle tracking: if tracked, untrack; if untracked, track + if Questie.db.char.TrackedQuests[questId] or (Questie.db.profile.autoTrackQuests and not Questie.db.char.AutoUntrackedQuests[questId]) then + -- Quest is currently tracked — untrack it pcall(QuestieTracker.UntrackQuestId, QuestieTracker, questId) else - -- Quest is currently hidden — show it + -- Quest is currently untracked — track it pcall(QuestieTracker.AQW_Insert, QuestieTracker, questLogLineIndex, QUEST_WATCH_NO_EXPIRE) end end