1.2
What's new
XephUI
1.2 (2026-08-30)
Full Changelog Previous Releases
- Merge pull request #2 from ljosberinn/feature/addon-management
Feature/addon management - more cleanup
- drop irrelevant files
- finalize addon management
- fix auto greet reporting on /reload
- Sync the implementation plan with the shipped code
- Fix the character argument, dropdown summary refresh, and defaults handling
CRITICAL 1: ApplyProfile passed UnitName("player") to C_AddOns.EnableAddOn/
DisableAddOn. Blizzard's own AddonList.lua feeds those calls UnitGUID("player")
(addonCharacter); UnitName is only a display label in the character-picker menu.
The bug made ApplyProfile silently no-op while still recording success. Renamed
the local to characterGuid and switched to UnitGUID. Corrected the plan's Data
Model bullet describing the addon API character identifier.
IMPORTANT 2: the addons/characters multi-select summary went stale after any
checkbox toggle because OverrideText permanently disables the framework's own
selection-text updates (disableSelectionText). Switched to the idiomatic
initializer.getSelectionTextFunc, which SettingsDropdownControlMixin wires into
Dropdown:SetSelectionText and which the menu framework re-invokes on every
toggle, not just on menu open/close.
IMPORTANT 3: the settings category's Defaults button called SetValueToDefault
on the content-types proxy setting, whose 0 default meant the setter wiped the
edited profile's ContentTypes via table.wipe. Changed the default to a function
returning the profile's current mask, so ApplyValue's currentValue == value
check skips the setter entirely. The other three proxy settings in this
category don't need the same fix: two have no-op setters, and the profile
selector's default only deselects the editing profile (no data loss).
IMPORTANT 4: the profile name dialog accepted an empty name because
SetupStartDelay unconditionally enables button 1, and StaticPopup_OnHide had
already cleared the edit box, so OnShow's SetText("") fired no OnTextChanged
to correct it. Added an explicit StaticPopup_StandardNonEmptyTextHandler call
in OnShow. Both the create and rename callbacks now report a rejected name
(empty or duplicate) instead of returning silently.
MINOR 5: the profile dropdown's "no profile" option was only added when the
profile list was empty, so editingProfileId's unpersisted 0 fallback (on login
and after a delete) had no matching option and fell back to "Custom". The
option is now always present. Mirrored into the plan.
MINOR 6: corrected the plan's claim that prompt dismissal "cannot re-fire
until the player enters different content" -- lastContentType is file-local
and unpersisted, so the guard is per-session and resets on /reload. No code
change; no persisted dismissal state is being added.
MINOR 9: the New Profile button's tooltip text produced a tooltip with a
blank first line (Settings.InitTooltip always adds the button's empty name as
a highlight line first). Dropped the tooltip text to match Rename/Delete,
which already pass nil. Mirrored into the plan.
MINOR 10: added AddonManagementPlan.md and IN_GAME_VERIFICATION.md to
.pkgmeta's ignore list so they don't ship in the release zip.
MINOR 11: IN_GAME_VERIFICATION.md named the retired third-party addon and
pointed at a report file that only exists under the gitignored .superpowers/
directory. Reworded the first and removed the dangling reference. The
addonsuite grep sweep is now clean.
MINOR 12: documented that FOLLOWER_DUNGEON_DIFFICULTY_ID (205) and
DELVE_DIFFICULTY_ID (208) have no DifficultyUtil.ID constant in wow-ui-source.
MINOR 14: replaced the hardcoded "None" summary label with the existing
localised NONE global, consistent with the file's existing reuse of ACCEPT/
CANCEL.
MINOR 15: documented in README.md that a profile-disabled addon whose
dependency falls outside the profile's set comes back DEP_DISABLED with no
feedback in the panel. - Document the addon management module and add an in-game verification checklist
- Remove the superseded profile swap reminder module
- Defer character roster recording until player login
UnitFullName("player")'s realm is nil on the player's home realm, and
GetNormalizedRealmName() is also nil at ADDON_LOADED, which is when
RecordCharacter -> GetCharacterKey runs since Init.lua drives the
login queue from EventUtil.ContinueOnAddOnLoaded. Both nil sources
made the "Name-Realm" concat throw on login.
Deferred the call with EventUtil.ContinueOnPlayerLogin, which fires
immediately if login already happened or exactly once on PLAYER_LOGIN
otherwise. BuildSettings, the EventRegistry registrations, and the
slash command stay where they were; their setting getters don't need
the character key until the panel is actually opened.
GetCharacterKey itself is untouched: no nil-coalescing fallback, so a
too-early call still errors loudly instead of silently persisting a
truncated key. - Pass the required addSearchTags argument to settings buttons
CreateSettingsButtonInitializer asserts addSearchTags ~= nil; all
three profile buttons omitted it, aborting BuildSettings on load.
Sweep of the rest of the file's Blizzard API calls against
wow-ui-source turned up two more real defects in the same "signature
verified from the declaration line, not the body" class:- XEPHUI_ADDON_PROFILE_NAME used text = "%s" where every Blizzard
dialog that supplies its text dynamically via OnShow (no
text_arg1/text_arg2) uses text = "". With "%s" the dialog's Init
runs SetFormattedText("%s", nil, nil) before OnShow gets to
override it. - The Delete Profile confirmation concatenated profile.Name directly
into GENERIC_CONFIRMATION's text field, which OnShow re-runs
through SetFormattedText as a format string. Any profile name
containing "%" would break formatting. Moved the name into
text_arg1 instead, matching Blizzard's own QuestSession.lua usage.
AddonManagementPlan.md carried the same source and is corrected
identically so the plan and the branch stay in sync.
- XEPHUI_ADDON_PROFILE_NAME used text = "%s" where every Blizzard
- Prompt for an addon profile swap when the content type changes
- Add the addon profile settings panel
- Add a multi-select dropdown control for the settings panel
- Apply addon profiles and add the /xephui slash command
- Add addon profile store and character roster
- Add the addon management implementation plan
This mod has no additional files

