From 05b5540fe70067180be6bb664752742b31a49eb7 Mon Sep 17 00:00:00 2001
From: Andrey Kleshchev <andreykproductengine@lindenlab.com>
Date: Tue, 1 Aug 2023 23:53:57 +0300
Subject: [PATCH] SL-20107 Detaching items from COF in gallery view didn't
 update COF

---
 indra/newview/llaisapi.cpp           | 30 +++++++++++++++++++---------
 indra/newview/llinventorygallery.cpp |  3 +++
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index f3799361db0..f26549cc3d0 100644
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -1321,6 +1321,7 @@ void AISUpdate::parseCategory(const LLSD& category_map, S32 depth)
 
     if (curr_cat
         && curr_cat->getVersion() > LLViewerInventoryCategory::VERSION_UNKNOWN
+        && curr_cat->getDescendentCount() != LLViewerInventoryCategory::DESCENDENT_COUNT_UNKNOWN
         && version > LLViewerInventoryCategory::VERSION_UNKNOWN
         && version < curr_cat->getVersion())
     {
@@ -1429,15 +1430,26 @@ void AISUpdate::parseCategory(const LLSD& category_map, S32 depth)
 
 void AISUpdate::parseDescendentCount(const LLUUID& category_id, const LLSD& embedded)
 {
-	// We can only determine true descendent count if this contains all descendent types.
-	if (embedded.has("categories") &&
-		embedded.has("links") &&
-		embedded.has("items"))
-	{
-		mCatDescendentsKnown[category_id]  = embedded["categories"].size();
-		mCatDescendentsKnown[category_id] += embedded["links"].size();
-		mCatDescendentsKnown[category_id] += embedded["items"].size();
-	}
+    if (mType == AISAPI::FETCHCOF)
+    {
+        // contains only links
+        if (embedded.has("links"))
+        {
+            mCatDescendentsKnown[category_id] = embedded["links"].size();
+        }
+    }
+    else
+    {
+        // We can only determine true descendent count if this contains all descendent types.
+        if (embedded.has("categories") &&
+            embedded.has("links") &&
+            embedded.has("items"))
+        {
+            mCatDescendentsKnown[category_id] = embedded["categories"].size();
+            mCatDescendentsKnown[category_id] += embedded["links"].size();
+            mCatDescendentsKnown[category_id] += embedded["items"].size();
+        }
+    }
 }
 
 void AISUpdate::parseEmbedded(const LLSD& embedded, S32 depth)
diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp
index 87dba5f100a..0801b71e34b 100644
--- a/indra/newview/llinventorygallery.cpp
+++ b/indra/newview/llinventorygallery.cpp
@@ -2376,6 +2376,9 @@ void LLInventoryGalleryItem::setSelected(bool value)
 
 BOOL LLInventoryGalleryItem::handleMouseDown(S32 x, S32 y, MASK mask)
 {
+    // call changeItemSelection directly, before setFocus
+    // to avoid autoscroll from LLInventoryGallery::onFocusReceived()
+    mGallery->changeItemSelection(mUUID, false);
     setFocus(TRUE);
     mGallery->claimEditHandler();
 
-- 
GitLab