diff --git a/Userland/DevTools/HackStudio/HackStudioWidget.cpp b/Userland/DevTools/HackStudio/HackStudioWidget.cpp index 21d44af2f2..d8462c679c 100644 --- a/Userland/DevTools/HackStudio/HackStudioWidget.cpp +++ b/Userland/DevTools/HackStudio/HackStudioWidget.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -311,12 +312,14 @@ void HackStudioWidget::set_edit_mode(EditMode mode) NonnullRefPtr HackStudioWidget::create_project_tree_view_context_menu() { m_open_selected_action = create_open_selected_action(); + m_show_in_file_manager_action = create_show_in_file_manager_action(); m_new_file_action = create_new_file_action(); m_new_directory_action = create_new_directory_action(); m_delete_action = create_delete_action(); auto project_tree_view_context_menu = GUI::Menu::construct("Project Files"); project_tree_view_context_menu->add_action(*m_open_selected_action); - // TODO: Rename, cut, copy, duplicate with new name, show containing folder ... + project_tree_view_context_menu->add_action(*m_show_in_file_manager_action); + // TODO: Rename, cut, copy, duplicate with new name... project_tree_view_context_menu->add_separator(); project_tree_view_context_menu->add_action(*m_new_file_action); project_tree_view_context_menu->add_action(*m_new_directory_action); @@ -403,6 +406,19 @@ NonnullRefPtr HackStudioWidget::create_open_selected_action() return open_selected_action; } +NonnullRefPtr HackStudioWidget::create_show_in_file_manager_action() +{ + auto show_in_file_manager_action = GUI::Action::create("Show in File Manager", [this](const GUI::Action&) { + auto files = selected_file_paths(); + for (auto& file : files) + Desktop::Launcher::open(URL::create_with_file_protocol(m_project->root_path(), file)); + }); + show_in_file_manager_action->set_enabled(true); + show_in_file_manager_action->set_icon(GUI::Icon::default_icon("app-file-manager").bitmap_for_size(16)); + + return show_in_file_manager_action; +} + NonnullRefPtr HackStudioWidget::create_delete_action() { auto delete_action = GUI::CommonActions::make_delete_action([this](const GUI::Action&) { diff --git a/Userland/DevTools/HackStudio/HackStudioWidget.h b/Userland/DevTools/HackStudio/HackStudioWidget.h index 1dd385f54f..37f11fa227 100644 --- a/Userland/DevTools/HackStudio/HackStudioWidget.h +++ b/Userland/DevTools/HackStudio/HackStudioWidget.h @@ -81,6 +81,7 @@ private: NonnullRefPtr create_remove_current_editor_action(); NonnullRefPtr create_open_action(); NonnullRefPtr create_save_action(); + NonnullRefPtr create_show_in_file_manager_action(); NonnullRefPtr create_add_editor_action(); NonnullRefPtr create_add_terminal_action(); NonnullRefPtr create_remove_current_terminal_action(); @@ -150,6 +151,7 @@ private: RefPtr m_new_file_action; RefPtr m_new_directory_action; RefPtr m_open_selected_action; + RefPtr m_show_in_file_manager_action; RefPtr m_delete_action; RefPtr m_new_project_action; RefPtr m_switch_to_next_editor;