Skip to content

Commit cf8376b

Browse files
committed
Add a context menu to quick open dialog
1 parent a7a2a12 commit cf8376b

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

editor/gui/editor_quick_open_dialog.cpp

+31-3
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@
3030

3131
#include "editor_quick_open_dialog.h"
3232

33+
#include "core/config/project_settings.h"
3334
#include "core/string/fuzzy_search.h"
3435
#include "editor/editor_file_system.h"
3536
#include "editor/editor_node.h"
3637
#include "editor/editor_resource_preview.h"
3738
#include "editor/editor_settings.h"
3839
#include "editor/editor_string_names.h"
40+
#include "editor/filesystem_dock.h"
3941
#include "editor/themes/editor_scale.h"
4042
#include "scene/gui/center_container.h"
4143
#include "scene/gui/check_button.h"
@@ -226,6 +228,13 @@ QuickOpenResultContainer::QuickOpenResultContainer() {
226228
grid->add_theme_constant_override("h_separation", 4);
227229
grid->hide();
228230
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);
229238
}
230239
}
231240

@@ -272,6 +281,18 @@ QuickOpenResultContainer::QuickOpenResultContainer() {
272281
}
273282
}
274283

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+
275296
void QuickOpenResultContainer::_ensure_result_vector_capacity() {
276297
int target_size = EDITOR_GET("filesystem/quick_open_dialog/max_results");
277298
int initial_size = result_items.size();
@@ -572,9 +593,16 @@ void QuickOpenResultContainer::_select_item(int p_index) {
572593
void QuickOpenResultContainer::_item_input(const Ref<InputEvent> &p_ev, int p_index) {
573594
Ref<InputEventMouseButton> mb = p_ev;
574595

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+
}
578606
}
579607
}
580608

editor/gui/editor_quick_open_dialog.h

+8
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class LineEdit;
4242
class HFlowContainer;
4343
class MarginContainer;
4444
class PanelContainer;
45+
class PopupMenu;
4546
class ScrollContainer;
4647
class StringName;
4748
class Texture2D;
@@ -81,6 +82,11 @@ class HighlightedLabel : public Label {
8182
class QuickOpenResultContainer : public VBoxContainer {
8283
GDCLASS(QuickOpenResultContainer, VBoxContainer)
8384

85+
enum {
86+
FILE_SHOW_IN_FILESYSTEM,
87+
FILE_SHOW_IN_FILE_MANAGER
88+
};
89+
8490
public:
8591
void init(const Vector<StringName> &p_base_types);
8692
void handle_search_box_input(const Ref<InputEvent> &p_ie);
@@ -124,6 +130,7 @@ class QuickOpenResultContainer : public VBoxContainer {
124130
ScrollContainer *scroll_container = nullptr;
125131
VBoxContainer *list = nullptr;
126132
HFlowContainer *grid = nullptr;
133+
PopupMenu *file_context_menu = nullptr;
127134

128135
PanelContainer *panel_container = nullptr;
129136
CenterContainer *no_results_container = nullptr;
@@ -160,6 +167,7 @@ class QuickOpenResultContainer : public VBoxContainer {
160167
void _toggle_display_mode();
161168
void _toggle_include_addons(bool p_pressed);
162169
void _toggle_fuzzy_search(bool p_pressed);
170+
void _menu_option(int p_option);
163171

164172
static void _bind_methods();
165173
};

0 commit comments

Comments
 (0)