From 81f727b6dd3b31ec5190902798cef0a074bbf92a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E9=9D=92=E5=B1=B1?= Date: Sun, 23 Nov 2025 21:42:48 +0800 Subject: [PATCH] Fix the returned controls of `EditorHelpBitTooltip::show_tooltip()` were not freed in `ScriptTextEditor` The returned control is an orphan node, which is to make the standard tooltip invisible. --- editor/doc/editor_help.cpp | 2 +- editor/doc/editor_help.h | 3 ++- editor/inspector/editor_inspector.cpp | 6 +++--- editor/scene/connections_dialog.cpp | 2 +- editor/scene/gui/theme_editor_plugin.cpp | 2 +- editor/script/script_text_editor.cpp | 6 ++++-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/editor/doc/editor_help.cpp b/editor/doc/editor_help.cpp index c3a6dbbbaa4..d36de6ebde6 100644 --- a/editor/doc/editor_help.cpp +++ b/editor/doc/editor_help.cpp @@ -4643,7 +4643,7 @@ void EditorHelpBitTooltip::_notification(int p_what) { } } -Control *EditorHelpBitTooltip::show_tooltip(Control *p_target, const String &p_symbol, const String &p_prologue, bool p_use_class_prefix) { +Control *EditorHelpBitTooltip::make_tooltip(Control *p_target, const String &p_symbol, const String &p_prologue, bool p_use_class_prefix) { ERR_FAIL_NULL_V(p_target, _make_invisible_control()); // Show the custom tooltip only if it is not already visible. diff --git a/editor/doc/editor_help.h b/editor/doc/editor_help.h index 9e1a5c7cb37..9ee4cf23be7 100644 --- a/editor/doc/editor_help.h +++ b/editor/doc/editor_help.h @@ -380,7 +380,8 @@ protected: void _notification(int p_what); public: - static Control *show_tooltip(Control *p_target, const String &p_symbol, const String &p_prologue = String(), bool p_use_class_prefix = false); + // The returned control is an orphan node, which is to make the standard tooltip invisible. + [[nodiscard]] static Control *make_tooltip(Control *p_target, const String &p_symbol, const String &p_prologue = String(), bool p_use_class_prefix = false); void popup_under_cursor(); diff --git a/editor/inspector/editor_inspector.cpp b/editor/inspector/editor_inspector.cpp index f3a423539b3..cd945ce4873 100644 --- a/editor/inspector/editor_inspector.cpp +++ b/editor/inspector/editor_inspector.cpp @@ -1397,7 +1397,7 @@ Control *EditorProperty::make_custom_tooltip(const String &p_text) const { } if (!symbol.is_empty() || !prologue.is_empty()) { - return EditorHelpBitTooltip::show_tooltip(const_cast(this), symbol, prologue); + return EditorHelpBitTooltip::make_tooltip(const_cast(this), symbol, prologue); } return nullptr; @@ -1780,7 +1780,7 @@ Control *EditorInspectorCategory::make_custom_tooltip(const String &p_text) cons return nullptr; } - return EditorHelpBitTooltip::show_tooltip(const_cast(this), p_text); + return EditorHelpBitTooltip::make_tooltip(const_cast(this), p_text); } void EditorInspectorCategory::set_as_favorite() { @@ -2290,7 +2290,7 @@ Control *EditorInspectorSection::make_custom_tooltip(const String &p_text) const } if (!symbol.is_empty() || !prologue.is_empty()) { - return EditorHelpBitTooltip::show_tooltip(const_cast(this), symbol, prologue); + return EditorHelpBitTooltip::make_tooltip(const_cast(this), symbol, prologue); } return nullptr; diff --git a/editor/scene/connections_dialog.cpp b/editor/scene/connections_dialog.cpp index aa84a2619d7..dc8bd0bcaed 100644 --- a/editor/scene/connections_dialog.cpp +++ b/editor/scene/connections_dialog.cpp @@ -953,7 +953,7 @@ Control *ConnectionsDockTree::make_custom_tooltip(const String &p_text) const { return nullptr; } - return EditorHelpBitTooltip::show_tooltip(const_cast(this), p_text); + return EditorHelpBitTooltip::make_tooltip(const_cast(this), p_text); } struct _ConnectionsDockMethodInfoSort { diff --git a/editor/scene/gui/theme_editor_plugin.cpp b/editor/scene/gui/theme_editor_plugin.cpp index 6363112ee86..84af02e31e7 100644 --- a/editor/scene/gui/theme_editor_plugin.cpp +++ b/editor/scene/gui/theme_editor_plugin.cpp @@ -2336,7 +2336,7 @@ ThemeTypeDialog::ThemeTypeDialog() { /////////////////////// Control *ThemeItemLabel::make_custom_tooltip(const String &p_text) const { - return EditorHelpBitTooltip::show_tooltip(const_cast(this), p_text); + return EditorHelpBitTooltip::make_tooltip(const_cast(this), p_text); } VBoxContainer *ThemeTypeEditor::_create_item_list(Theme::DataType p_data_type) { diff --git a/editor/script/script_text_editor.cpp b/editor/script/script_text_editor.cpp index 433a9e68698..e102feb5650 100644 --- a/editor/script/script_text_editor.cpp +++ b/editor/script/script_text_editor.cpp @@ -1422,7 +1422,8 @@ void ScriptTextEditor::_show_symbol_tooltip(const String &p_symbol, int p_row, i } if (p_symbol.begins_with("res://") || p_symbol.begins_with("uid://")) { - EditorHelpBitTooltip::show_tooltip(code_editor->get_text_editor(), "resource||" + p_symbol); + Control *tmp = EditorHelpBitTooltip::make_tooltip(code_editor->get_text_editor(), "resource||" + p_symbol); + memdelete(tmp); return; } @@ -1532,7 +1533,8 @@ void ScriptTextEditor::_show_symbol_tooltip(const String &p_symbol, int p_row, i } if (!doc_symbol.is_empty() || !debug_value.is_empty()) { - EditorHelpBitTooltip::show_tooltip(code_editor->get_text_editor(), doc_symbol, debug_value, true); + Control *tmp = EditorHelpBitTooltip::make_tooltip(code_editor->get_text_editor(), doc_symbol, debug_value, true); + memdelete(tmp); } }