fix(closeout): address closure-review findings

- gate keybind pill-sync on IsChannelOrExistingLinkshell so an empty
  linkshell slot no longer desyncs the pill from the real send channel
- close manually-popped pop-out windows on logout via an IsOpen filter
  instead of the PopOut flag (which manual pops never set)
- read the router's tell-tab lookup through a lock-wrapped accessor so the
  framework thread cannot enumerate Config.Tabs mid worker-thread mutation
- add a "switch on every tell" toggle (default on) and make the auto-open
  mode pick the matching layout, so Sidebar vs Top-tab are distinct
- comment corrections (stale/contradictory text, TEST-MIRROR path depth)
This commit is contained in:
2026-06-16 09:04:18 +02:00
parent 49f5119b17
commit 6f71b09331
9 changed files with 78 additions and 29 deletions
@@ -54,6 +54,11 @@ internal sealed class ChannelsTab
if (ImGui.CollapsingHeader("Tell auto-open mode", ImGuiTreeNodeFlags.DefaultOpen))
{
DrawTellAutoOpenModeCombo();
DrawToggle(
"Switch to the tab on every tell",
() => Plugin.Config.TellAutoOpenSwitchAlways,
v => Plugin.Config.TellAutoOpenSwitchAlways = v
);
}
if (ImGui.CollapsingHeader("Sidebar"))
+2 -2
View File
@@ -161,8 +161,8 @@ internal sealed class MainWindow : Window
}
// Tab-cycle entry point for the ChatTabForward/Backward keybinds. Empty list is a
// no-op; a null active tab seeds tabs[0]; a single-tab cycle that lands on the
// already-active tab is a no-op (ActivateTab early-returns on the same reference).
// no-op; a null active tab seeds the index to 0; a single-tab cycle that lands on
// the already-active tab is a no-op (ActivateTab early-returns on the same reference).
// Routes through ActivateTab so the cycle strips stale tell state + re-derives the
// channel exactly like a sidebar/top-tab click. Pop-out focus-forward stays
// deferred (no focus contract) — main-window tabs only.