summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermenu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewermenu.cpp')
-rw-r--r--indra/newview/llviewermenu.cpp34
1 files changed, 31 insertions, 3 deletions
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index dc509479c4..eaaa923b59 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -5136,6 +5136,31 @@ static void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)
derez_objects(dest, dest_id, first_region, error, NULL);
}
+bool save_object_back_to_contents(LLViewerObject* object, const LLUUID& source_task_id)
+{
+ if (!object || source_task_id.isNull())
+ {
+ return false;
+ }
+
+ LLViewerRegion* first_region = object->getRegion();
+ if (!first_region)
+ {
+ return false;
+ }
+
+ std::vector<LLViewerObjectPtr> objects;
+ objects.push_back(object);
+
+ std::string error;
+ derez_objects(DRD_SAVE_INTO_TASK_INVENTORY, source_task_id, first_region, error, &objects);
+ if (!error.empty())
+ {
+ return false;
+ }
+ return true;
+}
+
static void derez_objects_separate(EDeRezDestination dest, const LLUUID &dest_id)
{
std::vector<LLViewerObjectPtr> derez_object_list;
@@ -5710,10 +5735,13 @@ class LLToolsSaveToObjectInventory : public view_listener_t
bool handleEvent(const LLSD& userdata)
{
LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();
- if(node && (node->mValid) && (!node->mFromTaskID.isNull()))
+ if (node && node->mValid && !node->mFromTaskID.isNull())
{
- // *TODO: check to see if the fromtaskid object exists.
- derez_objects(DRD_SAVE_INTO_TASK_INVENTORY, node->mFromTaskID);
+ LLViewerObject* object = node->getObject();
+ if (object)
+ {
+ save_object_back_to_contents(object, node->mFromTaskID);
+ }
}
return true;
}