|
30 | 30 |
|
31 | 31 | #include "editor_quick_open_dialog.h"
|
32 | 32 |
|
| 33 | +#include "core/config/project_settings.h" |
33 | 34 | #include "core/string/fuzzy_search.h"
|
34 | 35 | #include "editor/editor_file_system.h"
|
35 | 36 | #include "editor/editor_node.h"
|
36 | 37 | #include "editor/editor_resource_preview.h"
|
37 | 38 | #include "editor/editor_settings.h"
|
38 | 39 | #include "editor/editor_string_names.h"
|
| 40 | +#include "editor/filesystem_dock.h" |
39 | 41 | #include "editor/themes/editor_scale.h"
|
40 | 42 | #include "scene/gui/center_container.h"
|
41 | 43 | #include "scene/gui/check_button.h"
|
@@ -226,6 +228,13 @@ QuickOpenResultContainer::QuickOpenResultContainer() {
|
226 | 228 | grid->add_theme_constant_override("h_separation", 4);
|
227 | 229 | grid->hide();
|
228 | 230 | scroll_container->add_child(grid);
|
| 231 | + |
| 232 | + file_context_menu = memnew(PopupMenu); |
| 233 | + file_context_menu->add_item(TTR("Show in FileSystem"), FILE_SHOW_IN_FILESYSTEM); |
| 234 | + file_context_menu->add_item(TTR("Show in File Manager"), FILE_SHOW_IN_FILE_MANAGER); |
| 235 | + file_context_menu->connect(SceneStringName(id_pressed), callable_mp(this, &QuickOpenResultContainer::_menu_option)); |
| 236 | + file_context_menu->hide(); |
| 237 | + scroll_container->add_child(file_context_menu); |
229 | 238 | }
|
230 | 239 | }
|
231 | 240 |
|
@@ -272,6 +281,18 @@ QuickOpenResultContainer::QuickOpenResultContainer() {
|
272 | 281 | }
|
273 | 282 | }
|
274 | 283 |
|
| 284 | +void QuickOpenResultContainer::_menu_option(int p_option) { |
| 285 | + switch (p_option) { |
| 286 | + case FILE_SHOW_IN_FILESYSTEM: { |
| 287 | + FileSystemDock::get_singleton()->navigate_to_path(get_selected()); |
| 288 | + } break; |
| 289 | + case FILE_SHOW_IN_FILE_MANAGER: { |
| 290 | + String dir = ProjectSettings::get_singleton()->globalize_path(get_selected()); |
| 291 | + OS::get_singleton()->shell_show_in_file_manager(dir, true); |
| 292 | + } break; |
| 293 | + } |
| 294 | +} |
| 295 | + |
275 | 296 | void QuickOpenResultContainer::_ensure_result_vector_capacity() {
|
276 | 297 | int target_size = EDITOR_GET("filesystem/quick_open_dialog/max_results");
|
277 | 298 | int initial_size = result_items.size();
|
@@ -572,9 +593,16 @@ void QuickOpenResultContainer::_select_item(int p_index) {
|
572 | 593 | void QuickOpenResultContainer::_item_input(const Ref<InputEvent> &p_ev, int p_index) {
|
573 | 594 | Ref<InputEventMouseButton> mb = p_ev;
|
574 | 595 |
|
575 |
| - if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) { |
576 |
| - _select_item(p_index); |
577 |
| - emit_signal(SNAME("result_clicked")); |
| 596 | + if (mb.is_valid() && mb->is_pressed()) { |
| 597 | + if (mb->get_button_index() == MouseButton::LEFT) { |
| 598 | + _select_item(p_index); |
| 599 | + emit_signal(SNAME("result_clicked")); |
| 600 | + } else if (mb->get_button_index() == MouseButton::RIGHT) { |
| 601 | + _select_item(p_index); |
| 602 | + file_context_menu->set_position(result_items[p_index]->get_screen_position() + mb->get_position()); |
| 603 | + file_context_menu->reset_size(); |
| 604 | + file_context_menu->popup(); |
| 605 | + } |
578 | 606 | }
|
579 | 607 | }
|
580 | 608 |
|
|
0 commit comments