summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llpanelface.cpp7
-rw-r--r--indra/newview/lltexturectrl.cpp13
-rw-r--r--indra/newview/lltexturectrl.h2
3 files changed, 17 insertions, 5 deletions
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 2ac5022695..f50f587f8f 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -2873,7 +2873,12 @@ void LLPanelFace::onCopyTexture()
// as result it is Hightly unreliable, leaves little control to user, borderline hack
// but there are little options to preserve permissions - multiple inventory
// items might reference same asset and inventory search is expensive.
- item_id = get_copy_free_item_by_asset_id(id);
+ bool no_transfer = false;
+ if (objectp->getInventoryItemByAsset(id))
+ {
+ no_transfer = !objectp->getInventoryItemByAsset(id)->getIsFullPerm();
+ }
+ item_id = get_copy_free_item_by_asset_id(id, no_transfer);
// record value to avoid repeating inventory search when possible
asset_item_map[id] = item_id;
}
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index cc912758e2..51ee5b6157 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -95,7 +95,7 @@ bool get_is_predefined_texture(LLUUID asset_id)
return false;
}
-LLUUID get_copy_free_item_by_asset_id(LLUUID asset_id)
+LLUUID get_copy_free_item_by_asset_id(LLUUID asset_id, bool no_trans_perm)
{
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
@@ -105,6 +105,8 @@ LLUUID get_copy_free_item_by_asset_id(LLUUID asset_id)
items,
LLInventoryModel::INCLUDE_TRASH,
asset_id_matches);
+
+ LLUUID res;
if (items.size())
{
for (S32 i = 0; i < items.size(); i++)
@@ -117,12 +119,17 @@ LLUUID get_copy_free_item_by_asset_id(LLUUID asset_id)
gAgent.getID(),
gAgent.getGroupID()))
{
- return itemp->getUUID();
+ bool allow_trans = item_permissions.allowOperationBy(PERM_TRANSFER, gAgent.getID(), gAgent.getGroupID());
+ if (allow_trans != no_trans_perm)
+ {
+ return itemp->getUUID();
+ }
+ res = itemp->getUUID();
}
}
}
}
- return LLUUID::null;
+ return res;
}
bool get_can_copy_texture(LLUUID asset_id)
diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h
index 4250cf86b8..3769f43737 100644
--- a/indra/newview/lltexturectrl.h
+++ b/indra/newview/lltexturectrl.h
@@ -60,7 +60,7 @@ bool get_is_predefined_texture(LLUUID asset_id);
// for textures in inventory by asset ids
// This search can be performance unfriendly and doesn't warranty
// that the texture is original source of asset
-LLUUID get_copy_free_item_by_asset_id(LLUUID image_id);
+LLUUID get_copy_free_item_by_asset_id(LLUUID image_id, bool no_trans_perm = false);
bool get_can_copy_texture(LLUUID image_id);
//////////////////////////////////////////////////////////////////////////////////////////