diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 821ebd4a0..90714d99f 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -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(objp->getParameterEntry(LLNetworkData::PARAMS_FLEXIBLE)) : NULL; + mClipboardLightParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_LIGHT) ? static_cast(objp->getParameterEntry(LLNetworkData::PARAMS_LIGHT)) : NULL; + mClipboardSculptParams = objp->getParameterEntryInUse(LLNetworkData::PARAMS_SCULPT) ? static_cast(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(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)