0.0.9
What's new
Quality of Life
0.0.9 (2026-10-17)
Full Changelog Previous Releases
- Merge pull request #36 from ollidiemaus/remove-bag-sort-button
Remove the combined bag sort button now that Forever shows its own - Remove the combined bag sort button now that Forever shows its own
Forever's client update of 2026-10-17 shows Blizzard's sort button right
of the combined bag's search box, so QoL's button left of it was a second
identical one. The option, its strings, stubs and spec go; a saved
showCombinedBagSort stays in QoLDB, kept and never read, so an older QoL
still finds it. The feature can come back from PRs #1 and #25 if Forever
hides the button again.
Closes #35 - Hide the minimap zone text's frame when it moves, or at its default spot on request
Since Forever 1.60.1 the frame is the zone text button's own StateTexture and
AddTexture, not MinimapCluster.BorderTop, so moved zone text took it along.
Closes #34 - Explain the /rl write to hash_SlashCmdList in the development notes
Checked against Forever's chat code: what fills and reads the table, and
what a miss does.
Part of #33. - Give saved data a version and keep settings QoL doesn't understand
QoLDB.version (now 1) and migrations run one version at a time at load; a
file from a newer QoL is left alone, and a failing migration stops without
raising the version. A saved option whose type doesn't match its default
now stays in the file: Get returns the default, Set replaces it.
Part of #33. - Reuse each key's deferred request, and schedule functions defined once
ns.Later and ns.LaterOutsideWindows keep one request per key, reset by each
new request, and the per-frame batch swaps between two tables. A key asked
for again while the batch runs, before its turn, now waits for the next frame
with the newer function instead of running the stale one first. Every
feature's schedule helper passes a function defined once at file scope.
Closes #32 - Check Edit Mode frames past the screen edge without per-frame garbage
Insets go around as four numbers instead of tables, a frame anchored
again reuses its own copy of its anchors, and the watcher's schedule
hands ns.Later one function defined at file scope. ns.Later's own
request table is #32's.
Refs #31 - Hear the druid's mana only while the mana bar shows, set less per tick
The druid mana bar hears UNIT_DISPLAYPOWER, UNIT_MAXPOWER and the three
vehicle events through a "player" listener made at Init. UNIT_POWER_FREQUENT
goes on that listener in Apply when the bar shows and off when it hides, so
with the option off, as a non-druid or in caster and travel form no mana
event reaches QoL, and other units' never do. The vehicle events now reach
QoL only for the player across the addon.
A tick sets only the bar's value, passed as it is (it can be secret), and
the texts that changed: with Status Text off and the bar not hovered it sets
none. The range is set in Apply, which UNIT_MAXPOWER wakes. The Status Text
CVars are read when the bar is made and on CVAR_UPDATE for them, also while
the bar hides; the game's Status Text dropdown sets both with SetCVar.
The test client counts a status bar's range sets, a font string's text sets
and the CVar reads.
Closes #30. Part of #27. - Hear class health bar unit events for their units only
The class-colored health bars hear UNIT_TARGET, UNIT_CLASSIFICATION_CHANGED
and UNIT_TARGETABLE_CHANGED through a "target", "focus" listener and the
three vehicle events through a "player" listener, both made at Init. The
game filters the units now, so the per-handler unit filter is gone and
other raid members' target changes and nameplate units no longer wake QoL.
The spec that fired UNIT_TARGET for raid7 becomes a listen query: the
target events reach QoL for the target and the focus, never for party,
raid or nameplate units. The vehicle events still reach QoL for every unit
through the druid mana bar until #30 moves it, so the query doesn't cover
them; the vehicle spec still covers the player listener.
Part of #27 and #29. - Hear pet changes for the player only, through unit listeners
ns.Events:NewUnitListener(unit1[, unit2]) registers events with
RegisterUnitEvent on a frame of its own, so the game drops other units'
events before QoL wakes. A listener's On skips an event the client
doesn't know and returns false, like ns.Events:On, and Off unregisters
one, for events that only matter while something shows. It passes only
the units it has: the API's units aren't nilable.
The action bars hear UNIT_PET through a "player" listener, so other
players' pet changes no longer wake QoL. The stubs get RegisterUnitEvent
and UnregisterEvent, Fire delivers a unit event only to frames
registered for that unit, and Stubs.Listens(event, unit) says whether
any frame would get it. The development notes' rules say unit events go
through a listener from now on.
Part of #27, closes #28. - Tell agent skills where issues and domain docs live
docs/agents/ says issues are GitHub Issues via gh and the domain docs are one GLOSSARY.md at the root with ADRs in docs/adr/. .pkgmeta keeps GLOSSARY.md out of the release, like the rest of the docs.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include
This mod has no related projects

