Phase A: tab architecture integrated into MainWindow - tab strip UI, per-tab WebView2 lifecycle, new-window->tab w/ deferral, audio indicator/mute, session save/restore, shortcuts; E2E on real window (56 tests GREEN)

This commit is contained in:
Yun Chan 2026-08-15 14:48:17 +09:00
parent be01a116ca
commit b6b7fc341b
7 changed files with 389 additions and 106 deletions

View file

@ -14,7 +14,6 @@ public sealed class TabItem : INotifyPropertyChanged
/// <summary>CoreWebView2 (초기화 전 null)</summary>
public Microsoft.Web.WebView2.Core.CoreWebView2? Core => View?.CoreWebView2;
private string _title = "새 탭";
public string Title { get => _title; set => Set(ref _title, value); }
@ -45,6 +44,11 @@ public sealed class TabItem : INotifyPropertyChanged
/// <summary>닫힌 시점의 인덱스(닫힌 탭 복원용). 열려 있는 동안은 무의미.</summary>
internal int ClosedIndex { get; set; } = -1;
// ---- 탭별 일시 상태(앱 레이어 전용) ----
internal string? PendingHistoryUrl; // SourceChanged → 타이틀 확정 사이의 기록 대기 URL
internal string? PendingSocialUrl; // 소셜 카드 제목 갱신 대기 URL
internal FindSession? FindSession; // 탭별 페이지 내 검색 세션 (cv 바인딩)
public event PropertyChangedEventHandler? PropertyChanged;
private void Set<T>(ref T field, T value, [CallerMemberName] string? name = null)