feat(auto-tell-tabs): implement greeted toggle with frame-race guard
This commit is contained in:
@@ -257,12 +257,12 @@ internal sealed class AutoTellTabsService : IDisposable
|
|||||||
|
|
||||||
internal void MarkGreeted(Tab tab)
|
internal void MarkGreeted(Tab tab)
|
||||||
{
|
{
|
||||||
// Stub — implemented in Task 12.
|
SetGreeted(tab, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void UnmarkGreeted(Tab tab)
|
internal void UnmarkGreeted(Tab tab)
|
||||||
{
|
{
|
||||||
// Stub — implemented in Task 12.
|
SetGreeted(tab, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal bool IsGreeted(Tab tab)
|
internal bool IsGreeted(Tab tab)
|
||||||
@@ -270,6 +270,27 @@ internal sealed class AutoTellTabsService : IDisposable
|
|||||||
return tab.IsGreeted;
|
return tab.IsGreeted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SetGreeted(Tab tab, bool greeted)
|
||||||
|
{
|
||||||
|
if (tab == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lock (_tempTabsLock)
|
||||||
|
{
|
||||||
|
// Frame-race guard (E5): the sidebar might still render a tab
|
||||||
|
// that has already been removed by LRU drop or logout cleanup.
|
||||||
|
// Silently skip the toggle so we don't mutate stale state.
|
||||||
|
if (!Plugin.Config.Tabs.Contains(tab))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
tab.IsGreeted = greeted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnLogout(int type, int code)
|
private void OnLogout(int type, int code)
|
||||||
{
|
{
|
||||||
lock (_tempTabsLock)
|
lock (_tempTabsLock)
|
||||||
|
|||||||
Reference in New Issue
Block a user