v0.5.16
What's new
BetterBags
v0.5.16 (2026-10-16)
Full Changelog Previous Releases
- Bank opacity slider, pinned built-in categories kept (#1107), Forever keyring (#1121) (#1133)
Bank Opacity slider: each bag window now gets its own bag's opacity
(frame.Owner.kind) in ApplyTheme, UpdateOpacity and window registration;
before, every window got the Backpack's value and the Bank slider did
nothing. Other windows keep the Backpack's.
#1107 (and #1119): DB:Migrate runs on every load and ended with
PruneOrphanedSectionSort, which dropped every pin whose name was not a
custom or persisted-ephemeral category: every built-in category ("Armor",
"Junk", "Other"). It was added in v0.5.5 to heal leftovers of an old delete
bug; at load a built-in name cannot be told from a leftover, so it is
removed. Leftovers stay covered (deletes scrub every side table, older
profiles were already pruned once, and "Remove Category" remains). The #183
rename now also moves pinned order.
#1121: the WoW: Forever keyring (bag -1) is read with the backpack when
addon.isForever and C_ActionBar.ShouldShowKeyring(), the check Blizzard's
own Forever bags make. As on Classic Era it has no bag slot button and its
empty slots are not free space; Show Bags numbers it after the last bag
("#7" on Forever, "#6" on Era as before).
Also records #204 (closed, working as intended) and #291 (closed, no longer
reproduces) in docs/validbugs.md, and updates the rules
(category-lifecycle.md §3/§5, camelot-forever.md §7), patterns and package
READMEs.
Tests written first and seen failing; all 8 guards mutation-tested against
the full suite; 1761 specs pass on Lua 5.1; luacheck clean; CI test and
luacheck pass. Tested in game by the maintainer. - Bag windows are a drop target (#408), locale item-row font (#175), no "Quest - Quest" (#183), retail TOC 12.1.5 (#1132)
Fixes three still-valid bugs from the triage of the 20 oldest open bug
reports, bumps the retail TOC for patch 12.1.5, and updates the docs.
#408: an item dropped anywhere on a bag or bank window, or the window
left-clicked while holding one, goes into a free slot of that window's bags
(before, only a Free Space slot accepted a drop). New util/cursorplacement.lua
picks the slot: a bag made for the item first (profession bag of its family,
the reagent bag for crafting reagents, the Classic keyring for keys), else the
first ordinary bag, backpack first; free slots are read live from the client;
the bank fills the bank type it shows, active tab first; an item picked up
from the same window returns to its slot; a refundable item is left on the
cursor when the bank shows the Warbank; full bags show ERR_INV_FULL /
ERR_BANK_FULL. bagProto:WatchMouse wires OnReceiveDrag and left-click
OnMouseUp, and the window never moves while an item is held. Section titles
add the item to their category with Shift and pass the drop to the window
without it. Taint: the only move is C_Container.PickupContainerItem, which is
not protected; the drop writes nothing Blizzard's code reads, never forwards
to a slot button's OnClick (which could reach the protected
UseContainerItem), and shows no Blizzard StaticPopup
(.claude/rules/bag-drop-zone.md). Not yet verified in game.
#175: the category pane's item rows hard-coded Fonts\FRIZQT__.TTF (roman
glyphs only); they now use STANDARD_TEXT_FONT, the client's locale font.
#183: GetCategory no longer repeats a subtype equal to its type ("Quest", not
"Quest - Quest"); DB:RenameRepeatedTypeCategories moves hidden state and group
assignments saved under the old names.
Retail TOC: Interface 120105 for patch 12.1.5 (live October 13, 2026).
Docs: docs/validbugs.md (the triage; #175, #183, #408 fixed; the cause of open
#1107), README "Dropping Items Into Your Bags" and category naming, package
READMEs (util, frames, data, core), rules bag-drop-zone.md and
category-lifecycle.md §5, font and taint patterns.
Tests written first and seen failing; every new guard mutation-tested (13 for
the drop target, 3 for the migration). 1752 specs pass on Lua 5.1; luacheck
clean; CI test and luacheck pass.
This mod has no additional files

