promotional bannermobile promotional banner

XephUI

My personal collection of interface tweaks
Back to Files

1.2

File nameXephUI-1.2.zip
Uploader
XepherisXepheris
Uploaded
Aug 30, 2026
Downloads
5
Size
73.9 KB
Flavors
Retail
File ID
8768608
Type
R
Release
Supported game versions
  • 12.1.0

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.
  • 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