(&mut self)
| 353 | } |
| 354 | }; |
| 355 | let root_label = native_fs.root().display().to_string(); |
| 356 | match IdeWorkspace::new(Box::new(native_fs)) { |
| 357 | Ok(workspace) => { |
| 358 | // Remember this folder so "reopen last workspace" can restore it. |
| 359 | self.settings.last_workspace = Some(root_label.clone()); |
| 360 | self.replace_workspace(workspace, &root_label); |
| 361 | } |
| 362 | Err(err) => { |
| 363 | self.status_message = Some(format!("open folder failed: {err}")); |
| 364 | } |
| 365 | } |
| 366 | } |
| 367 | |
| 368 | pub(super) fn open_workspace_preset(&mut self, preset: WorkspacePreset) { |
| 369 | if self.block_open_folder_for_dirty_documents() { |
| 370 | return; |
| 371 | } |
| 372 | #[cfg(not(target_arch = "wasm32"))] |
| 373 | if let Some(workspace) = open_materialized_workspace(preset) { |
| 374 | self.settings.last_workspace = Some(preset_dir(preset).to_owned()); |
| 375 | self.replace_workspace(workspace, preset.label()); |
| 376 | return; |
| 377 | } |
| 378 | match preset.memory_workspace() { |
| 379 | Ok(workspace) => self.replace_workspace(workspace, preset.label()), |
| 380 | Err(err) => { |
| 381 | self.status_message = Some(format!("open {} failed: {err}", preset.label())); |
| 382 | } |
| 383 | } |
| 384 | } |
| 385 | |
| 386 | fn replace_workspace(&mut self, workspace: IdeWorkspace, label: &str) { |
| 387 | self.workspace = workspace; |
| 388 | self.live = None; |
| 389 | self.launch_cache = None; |
| 390 | self.pending_jump = None; |
| 391 | self.stage_locate = None; |
| 392 | self.vm_result = None; |
| 393 | self.machine_texture = None; |
| 394 | self.machine_texture_fill_count = None; |
| 395 | self.stage_cache = None; |
| 396 | self.active_build_target = None; |
| 397 | self.manifest_cache = None; |
| 398 | self.quick_open = None; |
| 399 | self.find = find::FindState::default(); |
| 400 | self.explorer = explorer::ExplorerState::default(); |
| 401 | self.search = search::SearchState::default(); |
no test coverage detected