summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2014-03-31 20:24:41 -0700
committerMerov Linden <merov@lindenlab.com>2014-03-31 20:24:41 -0700
commit69fb50322eb0de9071ed22d4e62cef11ae811c4d (patch)
tree15fbd3a17609561154102d5c775c3ccb39219536
parentec290cd059d80519ff6891149306586819ac008d (diff)
DD-18 : WIP : Making stock folders update work better
-rwxr-xr-xindra/newview/llinventoryfunctions.cpp31
-rwxr-xr-xindra/newview/llinventorymodel.cpp10
2 files changed, 32 insertions, 9 deletions
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 5e4fb557d5..17bcd333f8 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -723,21 +723,28 @@ void move_item_to_marketplacelistings(LLInventoryItem* inv_item, LLUUID dest_fol
{
dest_folder = create_folder_for_item(inv_item, dest_folder);
}
- LLViewerInventoryCategory* category = gInventory.getCategory(dest_folder);
+ LLViewerInventoryCategory* dest_cat = gInventory.getCategory(dest_folder);
// When moving a no copy item into a first level listing folder, we create a stock folder for it
- if (!(viewer_inv_item->getPermissions().getMaskEveryone() & PERM_COPY) && (category->getParentUUID() == marketplace_listings_uuid))
+ if (!(viewer_inv_item->getPermissions().getMaskEveryone() & PERM_COPY) && (dest_cat->getParentUUID() == marketplace_listings_uuid))
{
dest_folder = create_folder_for_item(inv_item, dest_folder);
}
+ // Get the parent folder of the moved item : we may have to update it
+ LLUUID src_folder = viewer_inv_item->getParentUUID();
+ LLViewerInventoryCategory* src_cat = gInventory.getCategory(src_folder);
+
// Reparent the item
gInventory.changeItemParent(viewer_inv_item, dest_folder, false);
- gInventory.updateCategory(category);
+
+ // Update the modified folders
+ gInventory.updateCategory(src_cat);
+ gInventory.updateCategory(dest_cat);
gInventory.notifyObservers();
// Validate the destination : note that this will run the validation code only on one listing folder at most...
- validate_marketplacelistings(category);
+ validate_marketplacelistings(dest_cat);
}
else
{
@@ -752,15 +759,25 @@ void move_folder_to_marketplacelistings(LLInventoryCategory* inv_cat, const LLUU
// Check that we have adequate permission on all items being moved. Proceed if we do.
if (has_correct_permissions_for_sale(inv_cat))
{
-
+ // Get the destination folder
+ // *TODO : check that this folder is not full of no-copy items under its root...
+ LLViewerInventoryCategory* dest_cat = gInventory.getCategory(dest_folder);
+
+ // Get the parent folder of the moved item : we may have to update it
+ LLUUID src_folder = inv_cat->getParentUUID();
+ LLViewerInventoryCategory* src_cat = gInventory.getCategory(src_folder);
+
// Reparent the folder
LLViewerInventoryCategory * viewer_inv_cat = (LLViewerInventoryCategory *) inv_cat;
gInventory.changeCategoryParent(viewer_inv_cat, dest_folder, false);
- gInventory.updateCategory(viewer_inv_cat);
+
+ // Update the modified folders
+ gInventory.updateCategory(src_cat);
+ gInventory.updateCategory(dest_cat);
gInventory.notifyObservers();
// Check the destination folder recursively for no copy items and promote the including folders if any
- validate_marketplacelistings(inv_cat);
+ validate_marketplacelistings(dest_cat);
}
}
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 37e11123c6..96a2db5afb 100755
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1027,7 +1027,7 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat)
LLViewerInventoryCategory* old_cat = getCategory(cat->getUUID());
if(old_cat)
{
- // We already have an old category, modify it's values
+ // We already have an old category, modify its values
U32 mask = LLInventoryObserver::NONE;
LLUUID old_parent_id = old_cat->getParentUUID();
LLUUID new_parent_id = cat->getParentUUID();
@@ -1052,7 +1052,13 @@ void LLInventoryModel::updateCategory(const LLViewerInventoryCategory* cat)
{
mask |= LLInventoryObserver::LABEL;
}
- old_cat->copyViewerCategory(cat);
+ // Under marketplace, category labels are quite complex and need extra upate
+ const LLUUID marketplace_id = findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
+ if (marketplace_id.notNull() && isObjectDescendentOf(cat->getUUID(), marketplace_id))
+ {
+ mask |= LLInventoryObserver::LABEL;
+ }
+ old_cat->copyViewerCategory(cat);
addChangedMask(mask, cat->getUUID());
}
else