Skip to content

Commit 1713a8d

Browse files
committed
Merge pull request godotengine#108533 from YeldhamDev/get_owned
Fix unwanted resource duplication in the theme editor
2 parents 6bc7fcb + e924d2b commit 1713a8d

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

editor/inspector/editor_resource_picker.cpp

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -441,23 +441,32 @@ void EditorResourcePicker::_edit_menu_cbk(int p_which) {
441441
EditorSettings::get_singleton()->set_resource_clipboard(edited_resource);
442442
} break;
443443

444-
case OBJ_MENU_PASTE:
445-
case OBJ_MENU_PASTE_AS_UNIQUE: {
444+
case OBJ_MENU_PASTE: {
446445
edited_resource = EditorSettings::get_singleton()->get_resource_clipboard();
447-
if (p_which == OBJ_MENU_PASTE_AS_UNIQUE ||
448-
(EditorNode::get_singleton()->get_edited_scene() && edited_resource->is_built_in() && edited_resource->get_path().get_slice("::", 0) != EditorNode::get_singleton()->get_edited_scene()->get_scene_file_path())) {
449-
// Automatically make resource unique if it belongs to another scene,
450-
// or if requested by the user with the Paste as Unique option.
451-
if (p_which == OBJ_MENU_PASTE_AS_UNIQUE) {
452-
// Use the recursive version when using Paste as Unique.
453-
// This will show up a dialog to select which resources to make unique.
454-
_edit_menu_cbk(OBJ_MENU_MAKE_UNIQUE_RECURSIVE);
455-
} else {
456-
_edit_menu_cbk(OBJ_MENU_MAKE_UNIQUE);
446+
bool make_unique = true;
447+
448+
// Automatically make resource unique if it belongs to another scene or resource.
449+
if (!EditorNode::get_singleton()->get_edited_scene() || !edited_resource->is_built_in() || edited_resource->get_path().get_slice("::", 0) == EditorNode::get_singleton()->get_edited_scene()->get_scene_file_path()) {
450+
make_unique = false;
451+
} else if (resource_owner) {
452+
Resource *res = Object::cast_to<Resource>(resource_owner);
453+
if (res && edited_resource->get_path().get_slice("::", 0) == res->get_path().get_slice("::", 0)) {
454+
make_unique = false;
457455
}
458-
return;
459456
}
460-
_resource_changed();
457+
458+
if (make_unique) {
459+
_edit_menu_cbk(OBJ_MENU_MAKE_UNIQUE);
460+
} else {
461+
_resource_changed();
462+
}
463+
} break;
464+
465+
case OBJ_MENU_PASTE_AS_UNIQUE: {
466+
edited_resource = EditorSettings::get_singleton()->get_resource_clipboard();
467+
// Use the recursive version when using Paste as Unique.
468+
// This will show up a dialog to select which resources to make unique.
469+
_edit_menu_cbk(OBJ_MENU_MAKE_UNIQUE_RECURSIVE);
461470
} break;
462471

463472
case OBJ_MENU_SHOW_IN_FILE_SYSTEM: {

editor/scene/gui/theme_editor_plugin.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2672,6 +2672,7 @@ void ThemeTypeEditor::_update_type_items() {
26722672
EditorResourcePicker *item_editor = memnew(EditorResourcePicker);
26732673
item_editor->set_h_size_flags(SIZE_EXPAND_FILL);
26742674
item_editor->set_base_type("Font");
2675+
item_editor->set_resource_owner(*edited_theme);
26752676
item_control->add_child(item_editor);
26762677

26772678
if (E.value) {
@@ -2743,6 +2744,7 @@ void ThemeTypeEditor::_update_type_items() {
27432744
EditorResourcePicker *item_editor = memnew(EditorResourcePicker);
27442745
item_editor->set_h_size_flags(SIZE_EXPAND_FILL);
27452746
item_editor->set_base_type("Texture2D");
2747+
item_editor->set_resource_owner(*edited_theme);
27462748
item_control->add_child(item_editor);
27472749

27482750
if (E.value) {
@@ -2781,6 +2783,7 @@ void ThemeTypeEditor::_update_type_items() {
27812783
item_editor->set_h_size_flags(SIZE_EXPAND_FILL);
27822784
item_editor->set_stretch_ratio(1.5);
27832785
item_editor->set_base_type("StyleBox");
2786+
item_editor->set_resource_owner(*edited_theme);
27842787

27852788
Button *pin_leader_button = memnew(Button);
27862789
pin_leader_button->set_flat(true);
@@ -2816,6 +2819,7 @@ void ThemeTypeEditor::_update_type_items() {
28162819
item_editor->set_h_size_flags(SIZE_EXPAND_FILL);
28172820
item_editor->set_stretch_ratio(1.5);
28182821
item_editor->set_base_type("StyleBox");
2822+
item_editor->set_resource_owner(*edited_theme);
28192823

28202824
if (E.value) {
28212825
if (edited_theme->has_stylebox(E.key, edited_type)) {

0 commit comments

Comments
 (0)