| 469 | self.settings.last_workspace = Some(root_label.clone()); |
| 470 | self.replace_workspace(workspace, &root_label); |
| 471 | } |
| 472 | Err(err) => { |
| 473 | self.status_message = Some(format!("open folder failed: {err}")); |
| 474 | } |
| 475 | } |
| 476 | } |
| 477 | |
| 478 | pub(super) fn open_workspace_preset(&mut self, preset: WorkspacePreset) { |
| 479 | if self.block_open_folder_for_dirty_documents() { |
| 480 | return; |
| 481 | } |
| 482 | #[cfg(not(target_arch = "wasm32"))] |
| 483 | if let Some(workspace) = open_materialized_workspace(preset) { |
| 484 | self.settings.last_workspace = Some(preset_dir(preset).to_owned()); |
| 485 | self.replace_workspace(workspace, preset.label()); |
| 486 | return; |
| 487 | } |
| 488 | match preset.memory_workspace() { |
| 489 | Ok(workspace) => self.replace_workspace(workspace, preset.label()), |
| 490 | Err(err) => { |
| 491 | self.status_message = Some(format!("open {} failed: {err}", preset.label())); |
| 492 | } |
| 493 | } |
| 494 | } |
| 495 | |
| 496 | fn replace_workspace(&mut self, workspace: IdeWorkspace, label: &str) { |
| 497 | self.workspace = workspace; |
| 498 | self.live = None; |
| 499 | self.launch_cache = None; |
| 500 | self.pending_jump = None; |
| 501 | self.stage_locate = None; |
| 502 | self.vm_result = None; |
| 503 | self.machine_texture = None; |
| 504 | self.machine_texture_fill_count = None; |
| 505 | self.stage_cache = None; |
| 506 | self.active_build_target = None; |
| 507 | self.manifest_cache = None; |
| 508 | self.quick_open = None; |
| 509 | self.find = find::FindState::default(); |
| 510 | self.explorer = explorer::ExplorerState::default(); |