summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2015-06-06 17:49:19 -0700
committerMerov Linden <merov@lindenlab.com>2015-06-06 17:49:19 -0700
commite8dce624e4633b3861567aa68d23a5a40b52c94d (patch)
tree699d3869eca1c6cd31a48c4c13438c76cbe8fd98 /indra/newview
parent65833cc0c76965848ff71c33261b246482b55c2b (diff)
DD-333 : Prevent dropping no copy items if it'll create folders above the folder limit
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/llinventoryfunctions.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 6f6777bd8f..d402590e51 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -1270,6 +1270,8 @@ bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInve
// If the dest folder is a stock folder, we do assume that the incoming items are also stock items (they should anyway)
int existing_stock_count = (move_in_stock ? bundle_size : 0);
+ int existing_folder_count = 0;
+
// Get the version folder: that's where the counts start from
const LLViewerInventoryCategory * version_folder = ((root_folder && (root_folder != dest_folder)) ? gInventory.getFirstDescendantOf(root_folder->getUUID(), dest_folder->getUUID()) : NULL);
@@ -1288,6 +1290,14 @@ bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInve
existing_item_count += count_copyable_items(existing_items) + count_stock_folders(existing_categories);
existing_stock_count += count_stock_items(existing_items);
+ existing_folder_count += existing_categories.size();
+
+ // If the incoming item is a nocopy (stock) item, we need to consider that it will create a stock folder
+ if (!inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID()) && !move_in_stock)
+ {
+ // Note : we do not assume that all incoming items are nocopy of different kinds...
+ existing_folder_count += 1;
+ }
}
if (existing_item_count > gSavedSettings.getU32("InventoryOutboxMaxItemCount"))
@@ -1306,6 +1316,14 @@ bool can_move_item_to_marketplace(const LLInventoryCategory* root_folder, LLInve
tooltip_msg = LLTrans::getString("TooltipOutboxTooManyStockItems", args);
accept = false;
}
+ else if (existing_folder_count > gSavedSettings.getU32("InventoryOutboxMaxFolderCount"))
+ {
+ LLStringUtil::format_map_t args;
+ U32 amount = gSavedSettings.getU32("InventoryOutboxMaxFolderCount");
+ args["[AMOUNT]"] = llformat("%d",amount);
+ tooltip_msg = LLTrans::getString("TooltipOutboxTooManyFolders", args);
+ accept = false;
+ }
}
return accept;