GP-04: reset Tab.PopOut on load via shared helper (clears stale pinned flags)
This commit is contained in:
@@ -241,6 +241,13 @@ public sealed class Plugin : IAsyncDalamudPlugin
|
|||||||
// TempTabs survive reload — Jin's tester feedback (v1.4.7).
|
// TempTabs survive reload — Jin's tester feedback (v1.4.7).
|
||||||
Config.Tabs.RemoveAll(TabLifecycleHelpers.ShouldStripOnLoad);
|
Config.Tabs.RemoveAll(TabLifecycleHelpers.ShouldStripOnLoad);
|
||||||
|
|
||||||
|
// GP-04: clear stale Tab.PopOut flags now — the pool binds further down
|
||||||
|
// (ChannelPopoutPool resolve below), so at this point no tab can own a
|
||||||
|
// slot. A persisted PopOut=true (notably on surviving pinned TempTabs)
|
||||||
|
// would otherwise be a flag with no window. Runs after the strip, before
|
||||||
|
// any pool TryOpen.
|
||||||
|
TabLifecycleHelpers.ResetPopOutOnLoad(Config.Tabs);
|
||||||
|
|
||||||
LanguageChanged(Interface.UiLanguage);
|
LanguageChanged(Interface.UiLanguage);
|
||||||
|
|
||||||
// v1.5.3 migration: Settings.Apply auto-activates the matching
|
// v1.5.3 migration: Settings.Apply auto-activates the matching
|
||||||
|
|||||||
@@ -17,6 +17,19 @@ internal static class TabLifecycleHelpers
|
|||||||
|
|
||||||
public static bool ShouldStripOnSave(Tab t) => IsInUnpinnedPool(t);
|
public static bool ShouldStripOnSave(Tab t) => IsInUnpinnedPool(t);
|
||||||
|
|
||||||
|
// GP-04: clear every Tab.PopOut at load time. The pool binds later, so at
|
||||||
|
// load NO tab can own a slot — a persisted PopOut=true is always a stale flag
|
||||||
|
// with no window. Unconditional (pinned included) because pinned TempTabs
|
||||||
|
// survive the load and are the main stale-flag source; a !IsPinned filter
|
||||||
|
// would leave exactly those leaking. Lockstep with the two in-memory resets
|
||||||
|
// (AutoTellTabsService pool-full + Configuration.UpdateFrom backToOriginal).
|
||||||
|
// TEST-MIRROR: ../../../Hellion Build test/_Helpers/PopOutResetOnLoadTests.cs
|
||||||
|
internal static void ResetPopOutOnLoad(IEnumerable<Tab> tabs)
|
||||||
|
{
|
||||||
|
foreach (var tab in tabs)
|
||||||
|
tab.PopOut = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Stale-tell strip + channel derive, run at every tab activation. When a
|
// Stale-tell strip + channel derive, run at every tab activation. When a
|
||||||
// DIFFERENT tab becomes the input surface, drop any runtime tell state the
|
// DIFFERENT tab becomes the input surface, drop any runtime tell state the
|
||||||
// game-side detour left on it (the CurrentChannel tell target plus the
|
// game-side detour left on it (the CurrentChannel tell target plus the
|
||||||
|
|||||||
Reference in New Issue
Block a user