From b41aa1e0b2460f917d4d6cf4ddb2d641312455b5 Mon Sep 17 00:00:00 2001 From: Alexei Arabadji Date: Tue, 1 Jun 2010 14:13:56 +0300 Subject: =?UTF-8?q?EXT-6710=20FIXED=20Added=20inventory=20items=20sharing?= =?UTF-8?q?=20confirmation=20and=20modified=20alert=20about=20non-copy=20o?= =?UTF-8?q?bjects=20sharing.=20Current=20behavior:=20*=20user=20will=20be?= =?UTF-8?q?=20prompted=20about=20sharing=20items=20regardless=20is=20it=20?= =?UTF-8?q?one=20or=20more=20items;=20*=20user=20will=20be=20prompted=20ab?= =?UTF-8?q?out=20trying=20to=20share=20one=20ore=20more=20non-copy=20items?= =?UTF-8?q?;=20*=20in=20case=20user=20tries=20to=20share=20non-copy=20item?= =?UTF-8?q?s=20among=20with=20copy=20items=20=E2=80=94=20copy=20=20tems=20?= =?UTF-8?q?will=20be=20shared=20and=20user=20will=20be=20prompted=20about?= =?UTF-8?q?=20sharing=20non-copy=20items?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit reviewed by Mike Antipov at https://codereview.productengine.com/secondlife/r/475/ --HG-- branch : product-engine --- indra/newview/lltooldraganddrop.cpp | 50 ++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) (limited to 'indra/newview/lltooldraganddrop.cpp') diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 8a8bdd2dba..bc77ac5fd1 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -48,7 +48,7 @@ #include "llgiveinventory.h" #include "llhudmanager.h" #include "llhudeffecttrail.h" -//#include "llimview.h" +#include "llimview.h" #include "llinventorybridge.h" #include "llinventorydefines.h" #include "llinventoryfunctions.h" @@ -1422,12 +1422,42 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL } +static void give_inventory_cb(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + // if Cancel pressed + if (option == 1) + { + return; + } + + LLSD payload = notification["payload"]; + const LLUUID& session_id = payload["session_id"]; + const LLUUID& agent_id = payload["agent_id"]; + LLViewerInventoryItem * inv_item = gInventory.getItem(payload["item_id"]); + if (NULL == inv_item) + { + llassert(NULL != inv_item); + return; + } + + if (LLGiveInventory::doGiveInventoryItem(agent_id, inv_item, session_id)) + { + if ("avatarpicker" == payload["d&d_dest"].asString()) + { + LLFloaterReg::hideInstance("avatar_picker"); + } + LLNotificationsUtil::add("ItemsShared"); + } +} + // function used as drag-and-drop handler for simple agent give inventory requests //static bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_id, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, - EAcceptance* accept) + EAcceptance* accept, + const LLSD& dest) { // check the type switch(cargo_type) @@ -1452,7 +1482,21 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_ *accept = ACCEPT_YES_COPY_SINGLE; if (drop) { - LLGiveInventory::doGiveInventoryItem(dest_agent, inv_item, session_id); + LLIMModel::LLIMSession * session = LLIMModel::instance().findIMSession(session_id); + if (NULL == session) + { + llassert(NULL != session); + return false; + } + LLSD substitutions; + substitutions["RESIDENTS"] = session->mName; + substitutions["ITEMS"] = inv_item->getName(); + LLSD payload; + payload["agent_id"] = dest_agent; + payload["item_id"] = inv_item->getUUID(); + payload["session_id"] = session_id; + payload["d&d_dest"] = dest.asString(); + LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb); } } else -- cgit v1.2.3