(ctx: &mut ScriptContext<'_, API>)
| 1058 | .unwrap_or(false); |
| 1059 | if changed { |
| 1060 | refresh_all(ctx); |
| 1061 | } |
| 1062 | } |
| 1063 | |
| 1064 | pub fn nav_file_scope_parent<API: ScriptAPI + ?Sized>(ctx: &mut ScriptContext<'_, API>) { |
| 1065 | let changed = with_state_mut!(ctx.run, EditorState, ctx.id, |state| { |
| 1066 | if state.sidebar_mode != "files" { |
| 1067 | return false; |
| 1068 | } |
| 1069 | let active = if state.active_asset_path.is_empty() { |
| 1070 | state.file_scope.clone() |
| 1071 | } else { |
| 1072 | state.active_asset_path.clone() |
| 1073 | }; |
| 1074 | let parent = parent_res_folder(&active); |
| 1075 | if active.ends_with('/') { |
| 1076 | state.file_expanded_paths.retain(|path| path != &active); |
| 1077 | } |
| 1078 | state.file_scope = parent.clone(); |
| 1079 | state.active_asset_path = if parent.is_empty() { |
| 1080 | filtered_file_paths(state) |
| 1081 | .first() |
| 1082 | .cloned() |
| 1083 | .unwrap_or_default() |
| 1084 | } else { |
| 1085 | parent.clone() |
| 1086 | }; |
| 1087 | state.activity_mode = "scene".to_string(); |
| 1088 | state.log = if parent.is_empty() { |
| 1089 | "folder\nres://".to_string() |
| 1090 | } else { |
| 1091 | format!("folder\n{}", editor_files::rel_label(&parent)) |
| 1092 | }; |
| 1093 | true |
| 1094 | }) |
| 1095 | .unwrap_or(false); |
| 1096 | if changed { |
| 1097 | refresh_all(ctx); |
| 1098 | } |
no test coverage detected