diff options
| author | cosmic-linden <111533034+cosmic-linden@users.noreply.github.com> | 2023-09-06 15:13:11 -0700 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-06 15:13:11 -0700 | 
| commit | 52d973e95567efcb145ed0de1f4b6f0e19663776 (patch) | |
| tree | 621cb33a371e60f626b150c3ecc4b06152ce8321 | |
| parent | 88a4d1f5d30bd354d9e9813c2fb3bc3f140256f4 (diff) | |
| parent | c0bcc3740ea4c6662f9707d49ab5c7132bb2a0a8 (diff) | |
Merge pull request #361 from secondlife/SL-20167
SL-20167: Grey out the clipboard when copying the material is not allowed
| -rw-r--r-- | indra/newview/llmaterialeditor.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llmaterialeditor.h | 1 | ||||
| -rw-r--r-- | indra/newview/llpanelface.cpp | 9 | 
3 files changed, 33 insertions, 3 deletions
| diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp index daf6fdb20d..a0c3fd9a28 100644 --- a/indra/newview/llmaterialeditor.cpp +++ b/indra/newview/llmaterialeditor.cpp @@ -1953,6 +1953,32 @@ bool LLMaterialEditor::canSaveObjectsMaterial()      return can_use_objects_material(func, std::vector({PERM_COPY, PERM_MODIFY}), permissions, item_out);  } +bool LLMaterialEditor::canClipboardObjectsMaterial() +{ +    if (LLSelectMgr::getInstance()->getSelection()->getObjectCount() != 1) +    { +        return false; +    } + +    struct LLSelectedTEGetNullMat : public LLSelectedTEFunctor +    { +        bool apply(LLViewerObject* objectp, S32 te_index) +        { +            return objectp->getRenderMaterialID(te_index).isNull(); +        } +    } null_func; + +    if (LLSelectMgr::getInstance()->getSelection()->applyToTEs(&null_func)) +    { +        return true; +    } + +    LLSelectedTEGetMatData func(true); +    LLPermissions permissions; +    LLViewerInventoryItem* item_out; +    return can_use_objects_material(func, std::vector({PERM_COPY, PERM_MODIFY, PERM_TRANSFER}), permissions, item_out); +} +  void LLMaterialEditor::saveObjectsMaterialAs()  {      LLSelectedTEGetMatData func(true); diff --git a/indra/newview/llmaterialeditor.h b/indra/newview/llmaterialeditor.h index 6b2f49e2fc..b29db706f8 100644 --- a/indra/newview/llmaterialeditor.h +++ b/indra/newview/llmaterialeditor.h @@ -115,6 +115,7 @@ class LLMaterialEditor : public LLPreview, public LLVOInventoryListener      static bool canModifyObjectsMaterial();      static bool canSaveObjectsMaterial(); +    static bool canClipboardObjectsMaterial();      static void saveObjectsMaterialAs();      static void onCopyObjectsMaterialAsMsgCallback(const LLSD& notification, const LLSD& response, const LLPermissions& permissions, const LLUUID& object_id, const LLUUID& item_id);      static void onSaveObjectsMaterialAsMsgCallback(const LLSD& notification, const LLSD& response, const LLPermissions& permissions); diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index b502fa3546..df464bc7e5 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -1975,7 +1975,8 @@ void LLPanelFace::updateCopyTexButton()      LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject();      mMenuClipboardTexture->setEnabled(objectp && objectp->getPCode() == LL_PCODE_VOLUME && objectp->permModify()                                                       && !objectp->isPermanentEnforced() && !objectp->isInventoryPending()  -                                                    && (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1)); +                                                    && (LLSelectMgr::getInstance()->getSelection()->getObjectCount() == 1) +                                                    && LLMaterialEditor::canClipboardObjectsMaterial());      std::string tooltip = (objectp && objectp->isInventoryPending()) ? LLTrans::getString("LoadingContents") : getString("paste_options");      mMenuClipboardTexture->setToolTip(tooltip);  } @@ -4147,7 +4148,8 @@ void LLPanelFace::onCopyTexture()          || objectp->getPCode() != LL_PCODE_VOLUME          || !objectp->permModify()          || objectp->isPermanentEnforced() -        || selected_count > 1) +        || selected_count > 1 +        || !LLMaterialEditor::canClipboardObjectsMaterial())      {          return;      } @@ -4342,7 +4344,8 @@ void LLPanelFace::onPasteTexture()          || objectp->getPCode() != LL_PCODE_VOLUME          || !objectp->permModify()          || objectp->isPermanentEnforced() -        || selected_count > 1) +        || selected_count > 1 +        || !LLMaterialEditor::canClipboardObjectsMaterial())      {          // not supposed to happen          LL_WARNS() << "Failed to paste texture due to missing or wrong selection" << LL_ENDL; | 
