summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2012-03-09 17:15:48 -0800
committerMerov Linden <merov@lindenlab.com>2012-03-09 17:15:48 -0800
commit4ffad9495cdf6f5d6577c4829628fc78bb32b817 (patch)
tree2be40eedce4cc0d1f271bfa83e200a859edc356f
parent5cf3f8e3c813d978f318fd59ad422c75b3e171cd (diff)
EXP-1915 : Disable copy/cut options for folders as long as all items in them are not present.
-rw-r--r--indra/newview/llinventorybridge.cpp51
1 files changed, 33 insertions, 18 deletions
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 49eb8db5be..96785eb312 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -143,6 +143,21 @@ bool isMarketplaceSendAction(const std::string& action)
return ("send_to_marketplace" == action);
}
+//Used by LLFolderBridge as callback for directory recursion.
+class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
+{
+public:
+ LLRightClickInventoryFetchDescendentsObserver(const uuid_vec_t& ids,
+ bool copy_items) :
+ LLInventoryFetchDescendentsObserver(ids),
+ mCopyItems(copy_items)
+ {}
+ ~LLRightClickInventoryFetchDescendentsObserver() {}
+ virtual void done();
+protected:
+ bool mCopyItems;
+};
+
// +=================================================+
// | LLInvFVBridge |
// +=================================================+
@@ -1722,9 +1737,15 @@ LLHandle<LLFolderBridge> LLFolderBridge::sSelf;
BOOL LLFolderBridge::isItemMovable() const
{
LLInventoryObject* obj = getInventoryObject();
- if(obj)
+ if (obj)
{
- return (!LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType()));
+ // If it's a protected type folder, we can't move it
+ if (LLFolderType::lookupIsProtectedType(((LLInventoryCategory*)obj)->getPreferredType()))
+ return FALSE;
+ // If the folder is not there yet, it's too early to decide if it's movable
+ if (!isUpToDate())
+ return FALSE;
+ return TRUE;
}
return FALSE;
}
@@ -1759,6 +1780,10 @@ BOOL LLFolderBridge::isItemRemovable() const
return FALSE;
}
+ // If the folder is not there yet, we shouldn't try to remove it yet
+ if (!isUpToDate())
+ return FALSE;
+
LLInventoryPanel* panel = mInventoryPanel.get();
LLFolderViewFolder* folderp = dynamic_cast<LLFolderViewFolder*>(panel ? panel->getRootFolder()->getItemByID(mUUID) : NULL);
if (folderp)
@@ -1790,7 +1815,11 @@ BOOL LLFolderBridge::isUpToDate() const
BOOL LLFolderBridge::isItemCopyable() const
{
// Folders are copyable if items in them are, recursively, copyable.
-
+
+ // If the folder is not there yet, it's not copyable
+ if (!isUpToDate())
+ return FALSE;
+
// Get the content of the folder
LLInventoryModel::cat_array_t* cat_array;
LLInventoryModel::item_array_t* item_array;
@@ -2492,21 +2521,6 @@ protected:
};
-//Used by LLFolderBridge as callback for directory recursion.
-class LLRightClickInventoryFetchDescendentsObserver : public LLInventoryFetchDescendentsObserver
-{
-public:
- LLRightClickInventoryFetchDescendentsObserver(const uuid_vec_t& ids,
- bool copy_items) :
- LLInventoryFetchDescendentsObserver(ids),
- mCopyItems(copy_items)
- {}
- ~LLRightClickInventoryFetchDescendentsObserver() {}
- virtual void done();
-protected:
- bool mCopyItems;
-};
-
void LLRightClickInventoryFetchDescendentsObserver::done()
{
// Avoid passing a NULL-ref as mCompleteFolders.front() down to
@@ -3358,6 +3372,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
inc_busy_count();
if (fetch->isFinished())
{
+ delete fetch;
buildContextMenuFolderOptions(flags);
}
else