diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2021-11-16 15:10:35 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2021-11-16 15:10:35 +0300 |
commit | 12a986c9b586ae555ea3f9b6b4456b29d587d2aa (patch) | |
tree | 81f49d38ca73385361ed0edb21725e05d9a29f3a /source/blender/editors/space_file | |
parent | 7da714f387d6708f844fd9ab7fa552283a173877 (diff) | |
parent | c7a1e115b5071ae55db4aa66085d19c183ea325d (diff) |
Merge remote-tracking branch 'origin/blender-v3.0-release'
Diffstat (limited to 'source/blender/editors/space_file')
-rw-r--r-- | source/blender/editors/space_file/asset_catalog_tree_view.cc | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/source/blender/editors/space_file/asset_catalog_tree_view.cc b/source/blender/editors/space_file/asset_catalog_tree_view.cc index b3b81c5e07f..41559278910 100644 --- a/source/blender/editors/space_file/asset_catalog_tree_view.cc +++ b/source/blender/editors/space_file/asset_catalog_tree_view.cc @@ -122,6 +122,7 @@ class AssetCatalogDropController : public ui::AbstractTreeViewItemDropController bool on_drop(const wmDrag &drag) override; ::AssetLibrary &get_asset_library() const; + AssetCatalog *get_drag_catalog(const wmDrag &drag) const; static bool has_droppable_asset(const wmDrag &drag, const char **r_disabled_hint); static bool drop_assets_into_catalog(const AssetCatalogTreeView &tree_view, @@ -343,7 +344,14 @@ AssetCatalogDropController::AssetCatalogDropController(AssetCatalogTreeView &tre bool AssetCatalogDropController::can_drop(const wmDrag &drag, const char **r_disabled_hint) const { if (drag.type == WM_DRAG_ASSET_CATALOG) { - /* Always supported. */ + const AssetCatalog *drag_catalog = get_drag_catalog(drag); + /* Note: Technically it's not an issue to allow this (the catalog will just receive a new + * path and the catalog system will generate missing parents from the path). But it does + * appear broken to users, so disabling entirely. */ + if (catalog_item_.catalog_path().is_contained_in(drag_catalog->path)) { + *r_disabled_hint = "Catalog cannot be dropped into itself"; + return false; + } return true; } if (drag.type == WM_DRAG_ASSET_LIST) { @@ -363,11 +371,7 @@ std::string AssetCatalogDropController::drop_tooltip(const wmDrag &drag) const std::string AssetCatalogDropController::drop_tooltip_asset_catalog(const wmDrag &drag) const { BLI_assert(drag.type == WM_DRAG_ASSET_CATALOG); - - const ::AssetLibrary *asset_library = tree_view<AssetCatalogTreeView>().asset_library_; - bke::AssetCatalogService *catalog_service = BKE_asset_library_get_catalog_service(asset_library); - wmDragAssetCatalog *catalog_drag = WM_drag_get_asset_catalog_data(&drag); - AssetCatalog *src_catalog = catalog_service->find_catalog(catalog_drag->drag_catalog_id); + const AssetCatalog *src_catalog = get_drag_catalog(drag); return std::string(TIP_("Move Catalog")) + " '" + src_catalog->path.name() + "' " + TIP_("into") + " '" + catalog_item_.get_name() + "'"; @@ -439,6 +443,18 @@ bool AssetCatalogDropController::drop_assets_into_catalog(const AssetCatalogTree return true; } +AssetCatalog *AssetCatalogDropController::get_drag_catalog(const wmDrag &drag) const +{ + if (drag.type != WM_DRAG_ASSET_CATALOG) { + return nullptr; + } + const bke::AssetCatalogService *catalog_service = BKE_asset_library_get_catalog_service( + &get_asset_library()); + const wmDragAssetCatalog *catalog_drag = WM_drag_get_asset_catalog_data(&drag); + + return catalog_service->find_catalog(catalog_drag->drag_catalog_id); +} + bool AssetCatalogDropController::has_droppable_asset(const wmDrag &drag, const char **r_disabled_hint) { |