diff --git a/CHANGELOG.md b/CHANGELOG.md index d2102b1d3e1..40fbe6c23bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [4.1.1] - TBD +## [4.1.1] - 2023-07-17 See the [release announcement](https://godotengine.org/article/maintenance-release-godot-4-1-1) for details. @@ -81,6 +81,7 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea #### Animation - Fix infinite loop state check in `AnimationStateMachine` ([GH-79141](https://github.com/godotengine/godot/pull/79141)). +- Fix `tween_property` on `Basis` to properly update its value ([GH-79426](https://github.com/godotengine/godot/pull/79426)). #### Buildsystem @@ -103,6 +104,8 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea - Fix dropping files from `res://` to `res://` ([GH-78914](https://github.com/godotengine/godot/pull/78914)). - Do not change a node unique name to the same name ([GH-78925](https://github.com/godotengine/godot/pull/78925)). - Collapse bottom panel if there is no active tab ([GH-79078](https://github.com/godotengine/godot/pull/79078)). +- Fix `ui_cancel` action not closing `FindReplaceBar` ([GH-79079](https://github.com/godotengine/godot/pull/79079)). +- Emit `history_changed` on merged UndoRedo actions ([GH-79484](https://github.com/godotengine/godot/pull/79484)). #### Export @@ -319,6 +322,7 @@ See the [release announcement](https://godotengine.org/article/godot-4-1-is-here #### Core +- The strings returned by `ResourceLoader::get_dependencies()` now include paths in addition to UIDs ([GH-73131](https://github.com/godotengine/godot/pull/73131)). - Optimize Node children management ([GH-75627](https://github.com/godotengine/godot/pull/75627)). - Deprecate `NOTIFICATION_MOVED_IN_PARENT` for `NOTIFICATION_CHILD_ORDER_CHANGED` ([GH-75701](https://github.com/godotengine/godot/pull/75701)). - Optimize `Node::add_child` validation ([GH-75760](https://github.com/godotengine/godot/pull/75760)). diff --git a/doc/classes/ResourceLoader.xml b/doc/classes/ResourceLoader.xml index cf52f5017c1..398e8b61ee3 100644 --- a/doc/classes/ResourceLoader.xml +++ b/doc/classes/ResourceLoader.xml @@ -35,6 +35,12 @@ Returns the dependencies for the resource at the given [param path]. + [b]Note:[/b] The dependencies are returned with slices separated by [code]::[/code]. You can use [method String.get_slice] to get their components. + [codeblock] + for dep in ResourceLoader.get_dependencies(path): + print(dep.get_slice("::", 0)) # Prints UID. + print(dep.get_slice("::", 2)) # Prints path. + [/codeblock] diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp index 70fd7380198..c1a4b052c18 100644 --- a/editor/code_editor.cpp +++ b/editor/code_editor.cpp @@ -126,7 +126,7 @@ void FindReplaceBar::unhandled_input(const Ref &p_event) { if (k.is_valid() && k->is_action_pressed(SNAME("ui_cancel"), false, true)) { Control *focus_owner = get_viewport()->gui_get_focus_owner(); - if (text_editor->has_focus() || (focus_owner && vbc_lineedit->is_ancestor_of(focus_owner))) { + if (text_editor->has_focus() || (focus_owner && is_ancestor_of(focus_owner))) { _hide_bar(); accept_event(); } diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index f3c35e80fc6..358356adf56 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -1411,7 +1411,7 @@ void EditorNode::_dialog_display_load_error(String p_file, Error p_error) { show_accept(vformat(TTR("Scene file '%s' appears to be invalid/corrupt."), p_file.get_file()), TTR("OK")); } break; case ERR_FILE_NOT_FOUND: { - show_accept(vformat(TTR("Missing file '%s' or one its dependencies."), p_file.get_file()), TTR("OK")); + show_accept(vformat(TTR("Missing file '%s' or one of its dependencies."), p_file.get_file()), TTR("OK")); } break; default: { show_accept(vformat(TTR("Error while loading file '%s'."), p_file.get_file()), TTR("OK")); diff --git a/editor/editor_undo_redo_manager.cpp b/editor/editor_undo_redo_manager.cpp index fd2d51be32c..abfbd5e7c0d 100644 --- a/editor/editor_undo_redo_manager.cpp +++ b/editor/editor_undo_redo_manager.cpp @@ -264,6 +264,7 @@ void EditorUndoRedoManager::commit_action(bool p_execute) { pending_action.action_name == prev_action.action_name && pending_action.action_name == pre_prev_action.action_name) { pending_action = Action(); is_committing = false; + emit_signal(SNAME("history_changed")); return; } } break; @@ -272,6 +273,7 @@ void EditorUndoRedoManager::commit_action(bool p_execute) { if (pending_action.merge_mode == prev_action.merge_mode && pending_action.action_name == prev_action.action_name) { pending_action = Action(); is_committing = false; + emit_signal(SNAME("history_changed")); return; } } break; diff --git a/editor/gui/scene_tree_editor.cpp b/editor/gui/scene_tree_editor.cpp index 41f81a3f600..fbe167814d9 100644 --- a/editor/gui/scene_tree_editor.cpp +++ b/editor/gui/scene_tree_editor.cpp @@ -1208,8 +1208,11 @@ Variant SceneTreeEditor::get_drag_data_fw(const Point2 &p_point, Control *p_from if (i < list_max) { HBoxContainer *hb = memnew(HBoxContainer); TextureRect *tf = memnew(TextureRect); + int icon_size = get_theme_constant(SNAME("class_icon_size"), SNAME("Editor")); + tf->set_custom_minimum_size(Size2(icon_size, icon_size)); + tf->set_stretch_mode(TextureRect::STRETCH_KEEP_ASPECT_CENTERED); + tf->set_expand_mode(TextureRect::EXPAND_IGNORE_SIZE); tf->set_texture(icons[i]); - tf->set_stretch_mode(TextureRect::STRETCH_KEEP_CENTERED); hb->add_child(tf); Label *label = memnew(Label(selected_nodes[i]->get_name())); hb->add_child(label); diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp index 1ab6e714a80..7c0db810be7 100644 --- a/scene/resources/animation.cpp +++ b/scene/resources/animation.cpp @@ -5508,6 +5508,9 @@ Variant Animation::add_variant(const Variant &a, const Variant &b) { const ::AABB ab = b.operator ::AABB(); return ::AABB(aa.position + ab.position, aa.size + ab.size); } + case Variant::BASIS: { + return (a.operator Basis()) * (b.operator Basis()); + } case Variant::QUATERNION: { return (a.operator Quaternion()) * (b.operator Quaternion()); } @@ -5555,6 +5558,9 @@ Variant Animation::subtract_variant(const Variant &a, const Variant &b) { const ::AABB ab = b.operator ::AABB(); return ::AABB(aa.position - ab.position, aa.size - ab.size); } + case Variant::BASIS: { + return (b.operator Basis()).inverse() * (a.operator Basis()); + } case Variant::QUATERNION: { return (b.operator Quaternion()).inverse() * (a.operator Quaternion()); } diff --git a/version.py b/version.py index 12b2c875c5b..2d648a49a25 100644 --- a/version.py +++ b/version.py @@ -3,7 +3,7 @@ name = "Godot Engine" major = 4 minor = 1 patch = 1 -status = "rc" +status = "stable" module_config = "" year = 2023 website = "https://godotengine.org"