diff --git a/indra/newview/llmaterialeditor.cpp b/indra/newview/llmaterialeditor.cpp
index 00105c1e8f..397a302069 100644
--- a/indra/newview/llmaterialeditor.cpp
+++ b/indra/newview/llmaterialeditor.cpp
@@ -883,6 +883,11 @@ static U32 write_texture(const LLUUID& id, tinygltf::Model& model)
void LLMaterialEditor::onClickSave()
{
+ if (!capabilitiesAvalaible())
+ {
+ LLNotificationsUtil::add("MissingMaterialCaps");
+ return;
+ }
if (!can_afford_transaction(mExpectedUploadCost))
{
LLSD args;
@@ -2809,3 +2814,17 @@ void LLMaterialEditor::loadDefaults()
setFromGltfModel(model_in, 0, true);
}
+bool LLMaterialEditor::capabilitiesAvalaible()
+{
+ const LLViewerRegion* region = gAgent.getRegion();
+ if (!region)
+ {
+ LL_WARNS("MaterialEditor") << "Not connected to a region, cannot save material." << LL_ENDL;
+ return false;
+ }
+ std::string agent_url = region->getCapability("UpdateMaterialAgentInventory");
+ std::string task_url = region->getCapability("UpdateMaterialTaskInventory");
+
+ return (!agent_url.empty() && !task_url.empty());
+}
+
diff --git a/indra/newview/llmaterialeditor.h b/indra/newview/llmaterialeditor.h
index 1fb10dbcf1..8f0c16881b 100644
--- a/indra/newview/llmaterialeditor.h
+++ b/indra/newview/llmaterialeditor.h
@@ -228,6 +228,8 @@ public:
U32 getUnsavedChangesFlags() { return mUnsavedChanges; }
+ bool capabilitiesAvalaible();
+
private:
static bool updateInventoryItem(const std::string &buffer, const LLUUID &item_id, const LLUUID &task_id);
static void createInventoryItem(const std::string &buffer, const std::string &name, const std::string &desc);
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 07ad2838b0..1dc979fda6 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6856,6 +6856,14 @@ Please try again.
fail
+
+ fail
+ Not connected to a materials capable region.
+
+