Skip to content

Every dock node draws the focused-window accent overline on its selected tab: TabDimmedSelectedOverline == TabSelectedOverline (opaque Primary High) in all 38 themes #164

Open

Description

@matt-edmondson

What's wrong

ImGuiPaletteMapper maps both overline slots to the same opaque colour (ThemeProvider.ImGui/ImGuiPaletteMapper.cs:94 and :98):

{ ImGuiCol.TabSelectedOverline, new(SemanticMeaning.Primary, Priority.High)},
// Tabs in an unfocused window drop to neutral so the focused window's tabs stand out.
...
{ ImGuiCol.TabDimmedSelectedOverline, new(SemanticMeaning.Primary, Priority.High)},

Neither slot has an entry in alphaOverrides (:124-131), so both come out fully opaque. ImGui draws TabSelectedOverline on the selected tab of the focused window or dock node, and TabDimmedSelectedOverline on the selected tab of every unfocused one. With the two slots identical, every docked window's selected tab carries the same bright accent line. The overline's whole purpose is to show which window has focus, and that signal is lost.

That contradicts the comment directly above TabDimmed, which says unfocused tabs "drop to neutral so the focused window's tabs stand out". It also departs from stock ImGui. In Hexa.NET.ImGui 2.2.9, ImGui.StyleColorsDark() gives:

Slot Stock dark ThemeProvider (any theme)
TabSelectedOverline (0.26, 0.59, 0.98, 1.00) Primary High, α 1
TabDimmedSelectedOverline (0.50, 0.50, 0.50, 0.00), invisible Primary High, α 1, identical

Mapping all 38 built-in themes gives TabDimmedSelectedOverline == TabSelectedOverline in every one of them. Checked at 934581c.

Why it matters

In a docked layout with several nodes, such as an editor beside a properties panel and a log, every node's selected tab gets the accent overline. Users can't see which panel keyboard input will go to. Since #163 the tab fill still differs slightly, but the overline is the cue ImGui puts there for exactly this purpose.

Suggested fix

Match stock behaviour by hiding the dimmed overline: add { ImGuiCol.TabDimmedSelectedOverline, 0f } to alphaOverrides. Alternatively, map it to a neutral (for example Neutral, MediumHigh) to fit the comment's "drop to neutral" intent.

Acceptance criteria

Activity

  1. matt-edmondson commented on Nov 4, 2026

    @matt-edmondson
    ContributorAuthor

    Triage


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions