Просмотр исходного кода

Fix selection of remote tree using the keyboard

Michael Alexsander 4 месяцев назад
Родитель
Сommit
53231879b3
2 измененных файлов с 23 добавлено и 0 удалено
  1. 22 0
      editor/debugger/editor_debugger_tree.cpp
  2. 1 0
      editor/debugger/editor_debugger_tree.h

+ 22 - 0
editor/debugger/editor_debugger_tree.cpp

@@ -66,6 +66,7 @@ void EditorDebuggerTree::_notification(int p_what) {
 		case NOTIFICATION_POSTINITIALIZE: {
 			set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED);
 
+			connect("cell_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_selected));
 			connect("multi_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_selection_changed));
 			connect("nothing_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_nothing_selected));
 			connect("item_collapsed", callable_mp(this, &EditorDebuggerTree::_scene_tree_folded));
@@ -85,6 +86,27 @@ void EditorDebuggerTree::_bind_methods() {
 	ADD_SIGNAL(MethodInfo("open"));
 }
 
+void EditorDebuggerTree::_scene_tree_selected() {
+	TreeItem *item = get_selected();
+	if (!item) {
+		return;
+	}
+
+	if (!inspected_object_ids.is_empty()) {
+		inspected_object_ids.clear();
+		deselect_all();
+		item->select(0);
+	}
+
+	uint64_t id = uint64_t(item->get_metadata(0));
+	inspected_object_ids.append(id);
+
+	if (!notify_selection_queued) {
+		callable_mp(this, &EditorDebuggerTree::_notify_selection_changed).call_deferred();
+		notify_selection_queued = true;
+	}
+}
+
 void EditorDebuggerTree::_scene_tree_selection_changed(TreeItem *p_item, int p_column, bool p_selected) {
 	if (updating_scene_tree || !p_item) {
 		return;

+ 1 - 0
editor/debugger/editor_debugger_tree.h

@@ -72,6 +72,7 @@ private:
 	String last_filter;
 
 	void _scene_tree_folded(Object *p_obj);
+	void _scene_tree_selected();
 	void _scene_tree_selection_changed(TreeItem *p_item, int p_column, bool p_selected);
 	void _scene_tree_nothing_selected();
 	void _notify_selection_changed();