summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-07-11 01:24:22 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-07-11 01:24:22 +0300
commitba4b596894e8eb9b9eb51169b9b3f88c21173c29 (patch)
tree141530eb1b8be7d65b8e0b63c43a66a9f4ba02a0 /indra
parentbce11a1fa03b95782378ecb431850f77f762a348 (diff)
SL-19141 Fixed applying a no-copy texture to two objects failing silently
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llpanelface.cpp22
-rw-r--r--indra/newview/llselectmgr.cpp24
-rw-r--r--indra/newview/llselectmgr.h4
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml20
4 files changed, 56 insertions, 14 deletions
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 7d6015f557..702a8a82e2 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -520,7 +520,11 @@ void LLPanelFace::sendTexture()
{
id = mTextureCtrl->getImageAssetID();
}
- LLSelectMgr::getInstance()->selectionSetImage(id);
+ if (!LLSelectMgr::getInstance()->selectionSetImage(id))
+ {
+ // need to refresh value in texture ctrl
+ refresh();
+ }
}
}
@@ -3032,7 +3036,11 @@ void LLPanelFace::onCommitPbr(const LLSD& data)
{
id = pbr_ctrl->getImageAssetID();
}
- LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id);
+ if (!LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id))
+ {
+ // If failed to set material, refresh pbr_ctrl's value
+ refresh();
+ }
}
}
@@ -3056,8 +3064,14 @@ void LLPanelFace::onSelectPbr(const LLSD& data)
{
id = pbr_ctrl->getImageAssetID();
}
- LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id);
- LLSelectedTEMaterial::setMaterialID(this, id);
+ if (LLSelectMgr::getInstance()->selectionSetGLTFMaterial(id))
+ {
+ LLSelectedTEMaterial::setMaterialID(this, id);
+ }
+ else
+ {
+ refresh();
+ }
}
}
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index dca341e5a2..3b20ed1e00 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -1821,7 +1821,7 @@ void LLObjectSelection::applyNoCopyPbrMaterialToTEs(LLViewerInventoryItem* item)
// selectionSetImage()
//-----------------------------------------------------------------------------
// *TODO: re-arch texture applying out of lltooldraganddrop
-void LLSelectMgr::selectionSetImage(const LLUUID& imageid)
+bool LLSelectMgr::selectionSetImage(const LLUUID& imageid)
{
// First for (no copy) textures and multiple object selection
LLViewerInventoryItem* item = gInventory.getItem(imageid);
@@ -1829,9 +1829,11 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)
&& !item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID())
&& (mSelectedObjects->getNumNodes() > 1) )
{
- LL_WARNS() << "Attempted to apply no-copy texture to multiple objects"
- << LL_ENDL;
- return;
+ LL_DEBUGS() << "Attempted to apply no-copy texture " << imageid
+ << " to multiple objects" << LL_ENDL;
+
+ LLNotificationsUtil::add("FailedToApplyTextureNoCopyToMultiple");
+ return false;
}
struct f : public LLSelectedTEFunctor
@@ -1896,12 +1898,14 @@ void LLSelectMgr::selectionSetImage(const LLUUID& imageid)
}
} sendfunc(item);
getSelection()->applyToObjects(&sendfunc);
+
+ return true;
}
//-----------------------------------------------------------------------------
// selectionSetGLTFMaterial()
//-----------------------------------------------------------------------------
-void LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)
+bool LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)
{
// First for (no copy) textures and multiple object selection
LLViewerInventoryItem* item = gInventory.getItem(mat_id);
@@ -1909,9 +1913,11 @@ void LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)
&& !item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID())
&& (mSelectedObjects->getNumNodes() > 1))
{
- LL_WARNS() << "Attempted to apply no-copy material to multiple objects"
- << LL_ENDL;
- return;
+ LL_DEBUGS() << "Attempted to apply no-copy material " << mat_id
+ << "to multiple objects" << LL_ENDL;
+
+ LLNotificationsUtil::add("FailedToApplyGLTFNoCopyToMultiple");
+ return false;
}
struct f : public LLSelectedTEFunctor
@@ -1983,6 +1989,8 @@ void LLSelectMgr::selectionSetGLTFMaterial(const LLUUID& mat_id)
getSelection()->applyToObjects(&sendfunc);
LLGLTFMaterialList::flushUpdates();
+
+ return true;
}
//-----------------------------------------------------------------------------
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index ca9a32f0db..327134a487 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -634,8 +634,8 @@ public:
void selectionSetDensity(F32 density);
void selectionSetRestitution(F32 restitution);
void selectionSetMaterial(U8 material);
- void selectionSetImage(const LLUUID& imageid); // could be item or asset id
- void selectionSetGLTFMaterial(const LLUUID& mat_id); // could be item or asset id
+ bool selectionSetImage(const LLUUID& imageid); // could be item or asset id
+ bool selectionSetGLTFMaterial(const LLUUID& mat_id); // could be item or asset id
void selectionSetColor(const LLColor4 &color);
void selectionSetColorOnly(const LLColor4 &color); // Set only the RGB channels
void selectionSetAlphaOnly(const F32 alpha); // Set only the alpha channel
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index f77b235408..c4abd27a01 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -9213,6 +9213,26 @@ Paste failed. [REASON]
<notification
icon="alertmodal.tga"
+ name="FailedToApplyTextureNoCopyToMultiple"
+ type="alertmodal">
+Failed to apply texture. You can not apply a no-copy texture to multiple objects.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
+ name="FailedToApplyGLTFNoCopyToMultiple"
+ type="alertmodal">
+Failed to apply GLTF material. You can not apply a no-copy material to multiple objects.
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="FacePasteTexturePermissions"
type="alertmodal">
You applied a texture with limited permissions, object will inherit permissions from texture.