Fix Issue 702: Copy Paste Parameters glitch
Also improves the related code. It seems the main problem was calling updateVolume before setting sculpt params because this call relies on the isSculpted()
This commit is contained in:
@@ -2490,6 +2490,18 @@ void LLPanelObject::onCopyRot(void* user_data)
|
||||
gViewerWindow->mWindow->copyTextToClipboard(utf8str_to_wstring(stringVec));
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
bool texturePermsCheck(const LLUUID& id)
|
||||
{
|
||||
return (id.notNull() && !gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID())
|
||||
&& id != LLUUID(gSavedSettings.getString("UIImgWhiteUUID"))
|
||||
&& id != LLUUID(gSavedSettings.getString("UIImgInvisibleUUID"))
|
||||
&& id != LLUUID(std::string("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903")) // alpha
|
||||
&& LLPanelObject::findItemID(id).isNull());
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelObject::onCopyParams(void* user_data)
|
||||
{
|
||||
LLPanelObject* self = (LLPanelObject*) user_data;
|
||||
@@ -2500,36 +2512,19 @@ void LLPanelObject::onCopyParams(void* user_data)
|
||||
|
||||
LLViewerObject* objp = self->mObject;
|
||||
|
||||
mClipboardFlexiParams = (LLFlexibleObjectData*)objp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE);
|
||||
mClipboardLightParams = (LLLightParams*)objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT);
|
||||
mClipboardSculptParams = (LLSculptParams*)objp->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
|
||||
mClipboardFlexiParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_FLEXIBLE) ? static_cast<LLFlexibleObjectData*>(objp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE)) : NULL;
|
||||
mClipboardLightParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT) ? static_cast<LLLightParams*>(objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT)) : NULL;
|
||||
mClipboardSculptParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_SCULPT) ? static_cast<LLSculptParams*>(objp->getParameterEntry(LLNetworkData::PARAMS_SCULPT)) : NULL;
|
||||
if (mClipboardSculptParams)
|
||||
{
|
||||
LLUUID id = mClipboardSculptParams->getSculptTexture();
|
||||
|
||||
// Texture perms check
|
||||
if (!(id.isNull() || gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID())
|
||||
|| id == LLUUID(gSavedSettings.getString("UIImgWhiteUUID"))
|
||||
|| id == LLUUID(gSavedSettings.getString("UIImgInvisibleUUID"))
|
||||
|| id == LLUUID(std::string("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"))) // alpha
|
||||
&& findItemID(id).isNull())
|
||||
{
|
||||
mClipboardSculptParams->setSculptTexture(LLUUID(SCULPT_DEFAULT_TEXTURE));
|
||||
}
|
||||
const LLUUID id = mClipboardSculptParams->getSculptTexture();
|
||||
if (id != LLUUID(SCULPT_DEFAULT_TEXTURE) && !texturePermsCheck(id))
|
||||
mClipboardSculptParams = NULL;
|
||||
}
|
||||
mClipboardLightImageParams = (LLLightImageParams*)objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE);
|
||||
if (mClipboardLightImageParams)
|
||||
mClipboardLightImageParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE) ? static_cast<LLLightImageParams*>(objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE)) : NULL;
|
||||
if (mClipboardLightImageParams && texturePermsCheck(mClipboardLightImageParams->getLightTexture()))
|
||||
{
|
||||
LLUUID id = mClipboardLightImageParams->getLightTexture();
|
||||
|
||||
// Texture perms check
|
||||
if (!(id.isNull() || gInventory.isObjectDescendentOf(id, gInventory.getLibraryRootFolderID())
|
||||
|| id == LLUUID(gSavedSettings.getString("UIImgWhiteUUID"))
|
||||
|| id == LLUUID(gSavedSettings.getString("UIImgInvisibleUUID"))
|
||||
|| id == LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"))) // alpha
|
||||
{
|
||||
mClipboardLightImageParams->setLightTexture(findItemID(id));
|
||||
}
|
||||
mClipboardLightImageParams = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2542,16 +2537,27 @@ void LLPanelObject::onPasteParams(void* user_data)
|
||||
|
||||
LLViewerObject* objp = self->mObject;
|
||||
|
||||
objp->updateVolume(mClipboardVolumeParams);
|
||||
|
||||
if (mClipboardFlexiParams)
|
||||
objp->setParameterEntry(LLNetworkData::PARAMS_FLEXIBLE, *mClipboardFlexiParams, true);
|
||||
else
|
||||
objp->setParameterEntryInUse(LLNetworkData::PARAMS_FLEXIBLE, false, true);
|
||||
|
||||
if (mClipboardLightParams)
|
||||
objp->setParameterEntry(LLNetworkData::PARAMS_LIGHT, *mClipboardLightParams, true);
|
||||
else
|
||||
objp->setParameterEntryInUse(LLNetworkData::PARAMS_LIGHT, false, true);
|
||||
|
||||
if (mClipboardSculptParams)
|
||||
objp->setParameterEntry(LLNetworkData::PARAMS_SCULPT, *mClipboardSculptParams, true);
|
||||
else
|
||||
objp->setParameterEntryInUse(LLNetworkData::PARAMS_SCULPT, false, true);
|
||||
|
||||
if (mClipboardLightImageParams)
|
||||
objp->setParameterEntry(LLNetworkData::PARAMS_LIGHT_IMAGE, *mClipboardLightImageParams, true);
|
||||
else
|
||||
objp->setParameterEntryInUse(LLNetworkData::PARAMS_LIGHT_IMAGE, false, true);
|
||||
|
||||
objp->updateVolume(mClipboardVolumeParams);
|
||||
}
|
||||
|
||||
void LLPanelObject::onLinkObj(void* user_data)
|
||||
|
||||
Reference in New Issue
Block a user