@@ -265,6 +265,7 @@ void ProjectManager::_update_theme(bool p_skip_creation) {
265265 rename_btn->set_button_icon (get_editor_theme_icon (SNAME (" Rename" )));
266266 duplicate_btn->set_button_icon (get_editor_theme_icon (SNAME (" Duplicate" )));
267267 manage_tags_btn->set_button_icon (get_editor_theme_icon (" Script" ));
268+ show_in_fm_btn->set_button_icon (get_editor_theme_icon (" Load" ));
268269 erase_btn->set_button_icon (get_editor_theme_icon (SNAME (" Remove" )));
269270 erase_missing_btn->set_button_icon (get_editor_theme_icon (SNAME (" Clear" )));
270271 create_tag_btn->set_button_icon (get_editor_theme_icon (" Add" ));
@@ -280,6 +281,7 @@ void ProjectManager::_update_theme(bool p_skip_creation) {
280281 rename_btn->add_theme_constant_override (" h_separation" , get_theme_constant (SNAME (" sidebar_button_icon_separation" ), SNAME (" ProjectManager" )));
281282 duplicate_btn->add_theme_constant_override (" h_separation" , get_theme_constant (SNAME (" sidebar_button_icon_separation" ), SNAME (" ProjectManager" )));
282283 manage_tags_btn->add_theme_constant_override (" h_separation" , get_theme_constant (SNAME (" sidebar_button_icon_separation" ), SNAME (" ProjectManager" )));
284+ show_in_fm_btn->add_theme_constant_override (" h_separation" , get_theme_constant (SNAME (" sidebar_button_icon_separation" ), SNAME (" ProjectManager" )));
283285 erase_btn->add_theme_constant_override (" h_separation" , get_theme_constant (SNAME (" sidebar_button_icon_separation" ), SNAME (" ProjectManager" )));
284286 erase_missing_btn->add_theme_constant_override (" h_separation" , get_theme_constant (SNAME (" sidebar_button_icon_separation" ), SNAME (" ProjectManager" )));
285287
@@ -738,6 +740,17 @@ void ProjectManager::_duplicate_project_with_action(PostDuplicateAction p_post_a
738740 project_dialog->show_dialog (false );
739741}
740742
743+ void ProjectManager::_show_project_in_file_manager () {
744+ const Vector<ProjectList::Item> &selected_list = project_list->get_selected_projects ();
745+ if (selected_list.is_empty ()) {
746+ return ;
747+ }
748+
749+ for (const ProjectList::Item &E : selected_list) {
750+ OS::get_singleton ()->shell_show_in_file_manager (E.path , true );
751+ }
752+ }
753+
741754void ProjectManager::_erase_project () {
742755 const HashSet<String> &selected_list = project_list->get_selected_project_keys ();
743756
@@ -792,6 +805,7 @@ void ProjectManager::_update_project_buttons() {
792805 rename_btn->set_disabled (empty_selection || is_missing_project_selected);
793806 duplicate_btn->set_disabled (empty_selection || is_missing_project_selected);
794807 manage_tags_btn->set_disabled (empty_selection || is_missing_project_selected || selected_projects.size () > 1 );
808+ show_in_fm_btn->set_disabled (empty_selection || is_missing_project_selected);
795809 run_btn->set_disabled (empty_selection || is_missing_project_selected);
796810
797811 erase_missing_btn->set_disabled (!project_list->is_any_project_missing ());
@@ -1632,6 +1646,11 @@ ProjectManager::ProjectManager() {
16321646 manage_tags_btn->set_shortcut (ED_SHORTCUT (" project_manager/project_tags" , TTRC (" Manage Tags" ), KeyModifierMask::CMD_OR_CTRL | Key::T));
16331647 project_list_sidebar->add_child (manage_tags_btn);
16341648
1649+ show_in_fm_btn = memnew (Button);
1650+ show_in_fm_btn->set_text (TTRC (" Show in File Manager" ));
1651+ show_in_fm_btn->connect (SceneStringName (pressed), callable_mp (this , &ProjectManager::_show_project_in_file_manager));
1652+ project_list_sidebar->add_child (show_in_fm_btn);
1653+
16351654 erase_btn = memnew (Button);
16361655 erase_btn->set_text (TTRC (" Remove" ));
16371656 erase_btn->set_shortcut (ED_SHORTCUT (" project_manager/remove_project" , TTRC (" Remove Project" ), Key::KEY_DELETE));
0 commit comments