summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <remi@verschelde.fr>2023-02-24 22:00:15 +0100
committerGitHub <noreply@github.com>2023-02-24 22:00:15 +0100
commitdaedc158c70491ea3e5f3fea888c0799e61c0a80 (patch)
tree08043d7571e91c940c0e6cda2414c281fd3c7b0b
parent6296b46008fb8d8e5cb9b60af05fa1ea26b8f600 (diff)
parentcebfc02d6f1deee4e0a8eafd444e9657a2a86807 (diff)
Merge pull request #73885 from bruvzg/popup_fix
Revert "Reordering emitted signals in PopupMenu" and fix editor selection issue in the safer way.
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp6
-rw-r--r--editor/plugins/canvas_item_editor_plugin.h1
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp7
-rw-r--r--editor/plugins/node_3d_editor_plugin.h1
-rw-r--r--scene/gui/popup_menu.cpp6
5 files changed, 14 insertions, 7 deletions
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 0f9ce89f02..75a444c877 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -896,15 +896,16 @@ void CanvasItemEditor::_snap_changed() {
}
void CanvasItemEditor::_selection_result_pressed(int p_result) {
- if (selection_results.size() <= p_result) {
+ if (selection_results_menu.size() <= p_result) {
return;
}
- CanvasItem *item = selection_results[p_result].item;
+ CanvasItem *item = selection_results_menu[p_result].item;
if (item) {
_select_click_on_item(item, Point2(), selection_menu_additive_selection);
}
+ selection_results_menu.clear();
}
void CanvasItemEditor::_selection_menu_hide() {
@@ -2247,6 +2248,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
selection_menu->set_item_tooltip(i, String(item->get_name()) + "\nType: " + item->get_class() + "\nPath: " + node_path);
}
+ selection_results_menu = selection_results;
selection_menu_additive_selection = b->is_shift_pressed();
selection_menu->set_position(viewport->get_screen_transform().xform(b->get_position()));
selection_menu->reset_size();
diff --git a/editor/plugins/canvas_item_editor_plugin.h b/editor/plugins/canvas_item_editor_plugin.h
index ebe87a56f7..c5b9bf9e0b 100644
--- a/editor/plugins/canvas_item_editor_plugin.h
+++ b/editor/plugins/canvas_item_editor_plugin.h
@@ -256,6 +256,7 @@ private:
}
};
Vector<_SelectResult> selection_results;
+ Vector<_SelectResult> selection_results_menu;
struct _HoverResult {
Point2 position;
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index 96f5aeedf0..6580340af4 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -1543,6 +1543,7 @@ void Node3DEditorViewport::_list_select(Ref<InputEventMouseButton> b) {
selection_menu->set_item_tooltip(i, String(spat->get_name()) + "\nType: " + spat->get_class() + "\nPath: " + node_path);
}
+ selection_results_menu = selection_results;
selection_menu->set_position(get_screen_position() + b->get_position());
selection_menu->reset_size();
selection_menu->popup();
@@ -3609,15 +3610,17 @@ void Node3DEditorViewport::_toggle_cinema_preview(bool p_activate) {
}
void Node3DEditorViewport::_selection_result_pressed(int p_result) {
- if (selection_results.size() <= p_result) {
+ if (selection_results_menu.size() <= p_result) {
return;
}
- clicked = selection_results[p_result].item->get_instance_id();
+ clicked = selection_results_menu[p_result].item->get_instance_id();
if (clicked.is_valid()) {
_select_clicked(spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT);
}
+
+ selection_results_menu.clear();
}
void Node3DEditorViewport::_selection_menu_hide() {
diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h
index a1fd9757d0..e5267e5fad 100644
--- a/editor/plugins/node_3d_editor_plugin.h
+++ b/editor/plugins/node_3d_editor_plugin.h
@@ -290,6 +290,7 @@ private:
ObjectID clicked;
ObjectID material_target;
Vector<_RayResult> selection_results;
+ Vector<_RayResult> selection_results_menu;
bool clicked_wants_append = false;
bool selection_in_progress = false;
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index cf73729c0a..1a6adca121 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -1715,12 +1715,12 @@ void PopupMenu::activate_item(int p_item) {
need_hide = false;
}
- emit_signal(SNAME("id_pressed"), id);
- emit_signal(SNAME("index_pressed"), p_item);
-
if (need_hide) {
hide();
}
+
+ emit_signal(SNAME("id_pressed"), id);
+ emit_signal(SNAME("index_pressed"), p_item);
}
void PopupMenu::remove_item(int p_idx) {