diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 774932a198..a4c57a7c32 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -673,6 +673,22 @@ void LLInvFVBridge::checkInventoryLinkReplace(menuentry_vec_t& items, menuentry_ } // +// Move to default folder +void LLInvFVBridge::checkMoveToDefaultFolder(menuentry_vec_t& items, menuentry_vec_t& disables_items) +{ + const LLInventoryObject* obj = getInventoryObject(); + + if (isAgentInventory() && !isOutboxFolder() && obj && + obj->getActualType() != LLAssetType::AT_CATEGORY && + obj->getActualType() != LLAssetType::AT_LINK_FOLDER && + obj->getActualType() != LLAssetType::AT_LINK + ) + { + items.push_back(std::string("Move to Default Folder")); + } +} +// + // Helper for commonly-used entries void LLInvFVBridge::getClipboardEntries(bool show_asset_id, menuentry_vec_t &items, @@ -860,6 +876,9 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -4892,6 +4911,9 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -4965,6 +4987,9 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -5037,6 +5062,9 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -5364,6 +5392,9 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -5616,6 +5647,9 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -5674,6 +5708,9 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -6142,6 +6179,9 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -6396,6 +6436,9 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } @@ -6623,6 +6666,9 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Inventory Links Replace checkInventoryLinkReplace(items, disabled_items); + // Move to default folder + checkMoveToDefaultFolder(items, disabled_items); + hide_context_entries(menu, items, disabled_items); } diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 3b12ffac8b..3d83904156 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -175,6 +175,9 @@ protected: // Inventory Links Replace void checkInventoryLinkReplace(menuentry_vec_t& items, menuentry_vec_t& disables_items); + // Move to default folder + void checkMoveToDefaultFolder(menuentry_vec_t& items, menuentry_vec_t& disables_items); + virtual BOOL isItemPermissive() const; static void changeItemParent(LLInventoryModel* model, LLViewerInventoryItem* item, diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 17cdba5852..658d7cefac 100755 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -1207,6 +1207,53 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root return; } // + // Move to default folder + if ("move_to_default_folder" == action) + { + std::set selected_items = root->getSelectionList(); + std::set::iterator set_iter; + LLUUID outbox_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX); + LLUUID cof_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + + for (set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter) + { + LLFolderViewItem* folder_item = *set_iter; + if (!folder_item) + { + continue; + } + + LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem(); + if (!bridge) + { + continue; + } + + LLInventoryObject* obj = bridge->getInventoryObject(); + if (!obj) + { + continue; + } + + if (obj->getActualType() == LLAssetType::AT_CATEGORY) + { + continue; + } + + if (gInventory.isObjectDescendentOf(obj->getUUID(), outbox_folder_id) || + gInventory.isObjectDescendentOf(obj->getUUID(), cof_folder_id)) + { + continue; + } + + LLUUID target_cat_id = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(obj->getActualType())); + if (target_cat_id.notNull() + { + move_inventory_item(gAgentID, gAgentSessionID, obj->getUUID(), target_cat_id, obj->getName(), LLPointer(NULL)); + } + } + } + // static const std::string change_folder_string = "change_folder_type_"; if (action.length() > change_folder_string.length() && diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml index fdeb9ed648..0e3d842e97 100755 --- a/indra/newview/skins/default/xui/de/menu_inventory.xml +++ b/indra/newview/skins/default/xui/de/menu_inventory.xml @@ -68,6 +68,7 @@ + diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 9b5520e5c3..9ee6a27eb4 100755 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -527,6 +527,14 @@ function="Inventory.DoToSelected" parameter="delete" /> + + +