diff --git a/src/Classes/GemSelectControl.lua b/src/Classes/GemSelectControl.lua index f3b9e11b6d..871bda8cd9 100644 --- a/src/Classes/GemSelectControl.lua +++ b/src/Classes/GemSelectControl.lua @@ -339,18 +339,22 @@ function GemSelectClass:SortGemList(gemList) end) end -function GemSelectClass:UpdateGem(setText, addUndo) +function GemSelectClass:UpdateGem(setText, addUndo, focusLost) local gemId = self.list[m_max(self.selIndex, 1)] + -- don't process unless the buffer equals an actual gem, whether typed, clicked, or navigated with arrows + -- we don't nil the gemId here if it doesn't match because the imbuedGemSelect and slotGemSelect have different paths + local bufMatchesGem = (self.gems[gemId] and self.buf:lower() == self.gems[gemId].name:lower()) + if self.buf:match("%S") and self.gems[gemId] then self.gemId = gemId else self.gemId = nil end - self.gemName = self.gemId and self.gems[self.gemId].name or "" + self.gemName = bufMatchesGem and (self.gemId and self.gems[self.gemId].name) or "" if setText then self:SetText(self.gemName) end - self.gemChangeFunc(self.gemId and self.gemId:gsub("%w+:", ""), addUndo and self.gemName ~= self.initialBuf) + self.gemChangeFunc(self.gemId and self.gemId:gsub("%w+:", ""), addUndo and self.gemName ~= self.initialBuf, focusLost, bufMatchesGem) end function GemSelectClass:ScrollSelIntoView() @@ -781,7 +785,7 @@ function GemSelectClass:OnFocusLost() if self.noMatches then self:SetText("") end - self:UpdateGem(true,true) + self:UpdateGem(true,true, true) end end @@ -831,14 +835,17 @@ function GemSelectClass:OnKeyDown(key, doubleClick) self:SetText("") end self.selIndex = m_max(self.selIndex, 1) - self:UpdateGem(true, true) + if self.gems[self.list[self.selIndex]] then + self:SetText(self.gems[self.list[self.selIndex]].name) + end + self:UpdateGem(true, true, true) return elseif key == "ESCAPE" then self.dropped = false self:BuildList("") self.buf = self.initialBuf self.selIndex = self.initialIndex - self:UpdateGem(false,true) + self:UpdateGem(false,true, true) return elseif self.controls.scrollBar:IsScrollUpKey(key) then self.controls.scrollBar:Scroll(-1) diff --git a/src/Classes/SkillsTab.lua b/src/Classes/SkillsTab.lua index c3cc16115d..e06d1153bd 100644 --- a/src/Classes/SkillsTab.lua +++ b/src/Classes/SkillsTab.lua @@ -612,8 +612,7 @@ function SkillsTabClass:CreateGemSlot(index) local slot = { } self.gemSlots[index] = slot - -- Delete gem - slot.delete = new("ButtonControl", nil, {0, 0, 20, 20}, "x", function() + local function deleteGem() t_remove(self.displayGroup.gemList, index) for index2 = index, #self.displayGroup.gemList do -- Update the other gem slot controls @@ -628,6 +627,10 @@ function SkillsTabClass:CreateGemSlot(index) end self:AddUndoState() self.build.buildFlag = true + end + -- Delete gem + slot.delete = new("ButtonControl", nil, {0, 0, 20, 20}, "x", function() + return deleteGem() end) if index == 1 then slot.delete:SetAnchor("TOPLEFT", self.anchorGemSlots, "TOPLEFT", 0, 0) @@ -647,7 +650,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."Delete"] = slot.delete -- Gem name specification - slot.nameSpec = new("GemSelectControl", { "LEFT", slot.delete, "RIGHT" }, { 2, 0, 300, 20 }, self, index, function(gemId, addUndo) + slot.nameSpec = new("GemSelectControl", { "LEFT", slot.delete, "RIGHT" }, { 2, 0, 300, 20 }, self, index, function(gemId, addUndo, focusLost, bufMatchesGem) if not self.displayGroup then return end @@ -673,10 +676,15 @@ function SkillsTabClass:CreateGemSlot(index) slot.enableGlobal1.state = true slot.enableGlobal2.state = true slot.count:SetText(gemInstance.count) + elseif focusLost and not bufMatchesGem then + return deleteGem() elseif gemId == gemInstance.gemId then if addUndo then self:AddUndoState() end + if bufMatchesGem then + self.build.buildFlag = true + end return end gemInstance.gemId = gemId @@ -691,7 +699,9 @@ function SkillsTabClass:CreateGemSlot(index) if addUndo then self:AddUndoState() end - self.build.buildFlag = true + if bufMatchesGem then + self.build.buildFlag = true + end end, true) slot.nameSpec:AddToTabGroup(self.controls.groupLabel) self.controls["gemSlot"..index.."Name"] = slot.nameSpec