fix(windows): restauration panel-only des fenêtres détachées suivant le projet en focus (#47)
Partie backend. Les fenêtres/panneaux détachés étaient restaurés avec un project_id figé au moment du détachement, si bien qu'ils restaient collés à un projet mort ou incohérent après redémarrage. Ils sont désormais restaurés en mode panel-only, sans project_id figé, et suivent le projet en focus de la fenêtre principale via un event focused-project exposé par la couche fenêtre. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -232,12 +232,14 @@ async fn snapshot_open_windows_persists_the_supplied_snapshot() {
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn restore_open_windows_deduplicates_and_filters_missing_projects() {
|
||||
async fn restore_open_windows_keeps_panel_views_without_reopening_projects() {
|
||||
let existing = ProjectId::from_uuid(Uuid::from_u128(42));
|
||||
let missing = ProjectId::from_uuid(Uuid::from_u128(43));
|
||||
let valid_label = "view-tickets-0000000000000000000000000000002a";
|
||||
let mut incomplete = persisted_view("view-tickets-0000000000000000000000000000002c", existing);
|
||||
incomplete.url = None;
|
||||
let mut url_missing = persisted_view("view-tickets-0000000000000000000000000000002c", existing);
|
||||
url_missing.url = None;
|
||||
let mut no_panel = persisted_view("view-tickets-0000000000000000000000000000002d", existing);
|
||||
no_panel.panel = None;
|
||||
|
||||
let store = FakeWindowStateStore(Arc::new(Mutex::new(WindowStateSnapshot::new(vec![
|
||||
persisted_main(),
|
||||
@ -245,9 +247,10 @@ async fn restore_open_windows_deduplicates_and_filters_missing_projects() {
|
||||
persisted_view(valid_label, existing),
|
||||
persisted_view(valid_label, existing),
|
||||
persisted_view("view-tickets-0000000000000000000000000000002b", missing),
|
||||
incomplete,
|
||||
url_missing,
|
||||
no_panel,
|
||||
]))));
|
||||
let projects = FakeProjectRegistry::new(vec![existing]);
|
||||
let projects = FakeProjectRegistry::new(vec![]);
|
||||
let uc = RestoreOpenWindows::new(Arc::new(store), Arc::new(projects));
|
||||
|
||||
let out = uc.execute().await.unwrap();
|
||||
@ -257,6 +260,11 @@ async fn restore_open_windows_deduplicates_and_filters_missing_projects() {
|
||||
.iter()
|
||||
.map(|w| w.label.as_str())
|
||||
.collect::<Vec<_>>(),
|
||||
vec!["main", valid_label]
|
||||
vec![
|
||||
"main",
|
||||
valid_label,
|
||||
"view-tickets-0000000000000000000000000000002b",
|
||||
"view-tickets-0000000000000000000000000000002c"
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user