diff --git a/autobuild.xml b/autobuild.xml
index 5d3f1a881..880176e81 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -1933,38 +1933,6 @@
version
7.11.1.297294
- modernjson
-
nvapi
copyright
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index 8202868a1..cfd982f96 100644
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -50,7 +50,6 @@ set(cmake_SOURCE_FILES
GooglePerfTools.cmake
Hunspell.cmake
JPEG.cmake
- Json.cmake
LLAddBuildTest.cmake
LLAppearance.cmake
LLAudio.cmake
diff --git a/indra/deps/CMakeLists.txt b/indra/deps/CMakeLists.txt
index fb2ed3050..0219eb238 100644
--- a/indra/deps/CMakeLists.txt
+++ b/indra/deps/CMakeLists.txt
@@ -15,10 +15,15 @@ FetchContent_Declare(
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG 6.1.2
)
+FetchContent_Declare(
+ nlohmann_json
+ GIT_REPOSITORY https://github.com/nlohmann/json.git
+ GIT_TAG v3.7.3
+ )
FetchContent_Declare(
absl
GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git
- GIT_TAG 29235139149790f5afc430c11cec8f1eb1677607
+ GIT_TAG 0033c9ea91a52ade7c6b725aa2ef3cbe15463421
)
# This is a hack because absl has dumb cmake
@@ -44,5 +49,14 @@ if(WINDOWS)
FetchContent_MakeAvailable(fmt)
endif()
+# Typically you don't care so much for a third party library's tests to be
+# run from your own project's code.
+set(JSON_BuildTests OFF CACHE INTERNAL "")
+
+# If you only include this third party in PRIVATE source files, you do not
+# need to install it when your main project gets installed.
+set(JSON_Install OFF CACHE INTERNAL "")
+FetchContent_MakeAvailable(nlohmann_json)
+
unset(CMAKE_FOLDER)
unset(CMAKE_POSITION_INDEPENDENT_CODE)
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 9baf87d9d..1d9df704e 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -12,7 +12,6 @@ include(Linking)
include(Boost)
include(OpenSSL)
include(LLSharedLibs)
-include(Json)
include(Copy3rdPartyLibs)
include(ZLIB)
include(URIPARSER)
@@ -300,6 +299,7 @@ target_link_libraries(
${Boost_SYSTEM_LIBRARY}
${CORESERVICES_LIBRARY}
${URIPARSER_LIBRARY}
+ nlohmann_json::nlohmann_json
${RT_LIBRARY}
)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 0d25be520..77e370f81 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -18,7 +18,6 @@ include(FMODSTUDIO)
include(GeneratePrecompiledHeader)
include(GLOD)
include(Hunspell)
-include(Json)
include(LLAddBuildTest)
include(LLAppearance)
include(LLAudio)
@@ -63,7 +62,6 @@ include_directories(
${STATEMACHINE_INCLUDE_DIRS}
${DBUSGLIB_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIRS}
- ${JSON_INCLUDE_DIR}
${GLOD_INCLUDE_DIR}
${LLAUDIO_INCLUDE_DIRS}
${LLCHARACTER_INCLUDE_DIRS}
@@ -1710,6 +1708,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${LLAPPEARANCE_LIBRARIES}
absl::flat_hash_map
absl::node_hash_map
+ nlohmann_json::nlohmann_json
${FMT_LIBRARY}
)
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index c4abc4ac7..01dd84dc1 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -58,6 +58,7 @@ LLFloaterInspect::LLFloaterInspect(const LLSD&)
mDirty(FALSE)
{
mCommitCallbackRegistrar.add("Inspect.OwnerProfile", boost::bind(&LLFloaterInspect::onClickOwnerProfile, this));
+ mCommitCallbackRegistrar.add("Inspect.LastOwnerProfile", boost::bind(&LLFloaterInspect::onClickLastOwnerProfile, this));
mCommitCallbackRegistrar.add("Inspect.CreatorProfile", boost::bind(&LLFloaterInspect::onClickCreatorProfile, this));
mCommitCallbackRegistrar.add("Inspect.SelectObject", boost::bind(&LLFloaterInspect::onSelectObject, this));
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_inspect.xml");
@@ -166,6 +167,36 @@ void LLFloaterInspect::onClickOwnerProfile()
}
}
+void LLFloaterInspect::onClickLastOwnerProfile()
+{
+ if(mObjectList->getAllSelected().size() == 0) return;
+ LLScrollListItem* first_selected =mObjectList->getFirstSelected();
+
+ if (first_selected)
+ {
+ LLUUID selected_id = first_selected->getUUID();
+ struct f : public LLSelectedNodeFunctor
+ {
+ LLUUID obj_id;
+ f(const LLUUID& id) : obj_id(id) {}
+ virtual bool apply(LLSelectNode* node)
+ {
+ return (obj_id == node->getObject()->getID());
+ }
+ } func(selected_id);
+ LLSelectNode* node = mObjectSelection->getFirstNode(&func);
+ if(node)
+ {
+ const LLUUID& last_owner_id = node->mPermissions->getLastOwner();
+// [RLVa:KB] - Checked: 2010-08-25 (RLVa-1.2.2a) | Modified: RLVa-1.0.0e
+ if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES) || gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMETAGS))
+ if (last_owner_id == node->mPermissions->getOwner()) return;
+// [/RLVa:KB]
+ LLAvatarActions::showProfile(last_owner_id);
+ }
+ }
+}
+
void LLFloaterInspect::onSelectObject()
{
if(LLFloaterInspect::getSelectedUUID() != LLUUID::null)
diff --git a/indra/newview/llfloaterinspect.h b/indra/newview/llfloaterinspect.h
index 643639692..3769cedf7 100644
--- a/indra/newview/llfloaterinspect.h
+++ b/indra/newview/llfloaterinspect.h
@@ -60,6 +60,7 @@ public:
virtual void onFocusReceived();
void onClickCreatorProfile();
void onClickOwnerProfile();
+ void onClickLastOwnerProfile();
void onSelectObject();
LLScrollListCtrl* mObjectList;
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
index a707df03e..32730a561 100644
--- a/indra/newview/llfloaternamedesc.cpp
+++ b/indra/newview/llfloaternamedesc.cpp
@@ -148,7 +148,7 @@ S32 LLFloaterNameDesc::getExpectedUploadCost() const
LLAssetType::EType asset_type = exten == "wav" ? LLAssetType::AT_SOUND
: (exten == "anim" || exten == "bvh") ? LLAssetType::AT_ANIMATION
: exten != "lsl" ? LLAssetType::AT_TEXTURE
- : asset_type = LLAssetType::AT_NONE;
+ : LLAssetType::AT_NONE;
S32 upload_cost = -1;
if (asset_type != LLAssetType::AT_NONE)
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index 3373295a2..9f15a389d 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -53,6 +53,7 @@
#include "llglheaders.h"
#include "lldrawpoolterrain.h"
#include "lldrawable.h"
+#include "hippogridmanager.h"
extern LLPipeline gPipeline;
extern bool gShiftFrame;
@@ -371,6 +372,14 @@ void LLSurface::connectNeighbor(LLSurface* neighborp, U32 direction)
// - Non-power-of-2 regions should work here, but the rest of the viewer code will probably choke on them.
surface_patch_ref patchp, neighbor_patchp;
+ if (mNeighbors[direction] == neighborp)
+ {
+ return;
+ }
+ if (mNeighbors[direction])
+ {
+ mNeighbors[direction]->disconnectNeighbor(this, gDirOpposite[direction]);
+ }
mNeighbors[direction] = neighborp;
const S32 max_idx = mPatchesPerEdge - 1;
@@ -480,33 +489,71 @@ void LLSurface::connectNeighbor(LLSurface* neighborp, U32 direction)
}
}
-void LLSurface::disconnectNeighbor(LLSurface *surfacep)
+void LLSurface::disconnectNeighbor(LLSurface* surfacep, U32 direction)
{
- S32 i;
- for (i = 0; i < 8; i++)
+ if (surfacep && surfacep == mNeighbors[direction])
{
- if (surfacep == mNeighbors[i])
+ // Iterate through surface patches, removing any connectivity to removed surface.
+ // Extra branches for debugging.
+ if (!gHippoGridManager->getCurrentGrid()->isSecondLife())
{
- mNeighbors[i] = NULL;
+ for (auto& patchp : mPatchList)
+ {
+ patchp->disconnectNeighbor(surfacep);
+ }
+ }
+ if (gHippoGridManager->getCurrentGrid()->isSecondLife())
+ {
+ for (auto& patchp : mPatchList)
+ {
+ patchp->disconnectNeighbor(surfacep);
+ }
}
- }
-
- // Iterate through surface patches, removing any connectivity to removed surface.
- for (auto& patchp : mPatchList)
- {
- patchp->disconnectNeighbor(surfacep);
}
}
void LLSurface::disconnectAllNeighbors()
{
+ // Pulled out of loop to debug.
+ if (mNeighbors[EAST])
+ {
+ mNeighbors[EAST]->disconnectNeighbor(this, gDirOpposite[EAST]);
+ }
+ if (mNeighbors[NORTH])
+ {
+ mNeighbors[NORTH]->disconnectNeighbor(this, gDirOpposite[NORTH]);
+ }
+ if (mNeighbors[WEST])
+ {
+ mNeighbors[WEST]->disconnectNeighbor(this, gDirOpposite[WEST]);
+ }
+ if (mNeighbors[SOUTH])
+ {
+ mNeighbors[SOUTH]->disconnectNeighbor(this, gDirOpposite[SOUTH]);
+ }
+ if (mNeighbors[NORTHEAST])
+ {
+ mNeighbors[NORTHEAST]->disconnectNeighbor(this, gDirOpposite[NORTHEAST]);
+ }
+ if (mNeighbors[NORTHWEST])
+ {
+ mNeighbors[NORTHWEST]->disconnectNeighbor(this, gDirOpposite[NORTHWEST]);
+ }
+ if (mNeighbors[SOUTHWEST])
+ {
+ mNeighbors[SOUTHWEST]->disconnectNeighbor(this, gDirOpposite[SOUTHWEST]);
+ }
+ if (mNeighbors[SOUTHEAST])
+ {
+ mNeighbors[SOUTHEAST]->disconnectNeighbor(this, gDirOpposite[SOUTHEAST]);
+ }
S32 i;
for (i = 0; i < 8; i++)
{
if (mNeighbors[i])
{
- mNeighbors[i]->disconnectNeighbor(this);
+ //mNeighbors[i]->disconnectNeighbor(this);
mNeighbors[i] = NULL;
}
}
diff --git a/indra/newview/llsurface.h b/indra/newview/llsurface.h
index 16d96c467..4ffdc3ba4 100644
--- a/indra/newview/llsurface.h
+++ b/indra/newview/llsurface.h
@@ -85,7 +85,7 @@ public:
void setOriginGlobal(const LLVector3d &origin_global);
void connectNeighbor(LLSurface *neighborp, U32 direction);
- void disconnectNeighbor(LLSurface *neighborp);
+ void disconnectNeighbor(LLSurface *neighborp, U32 direction);
void disconnectAllNeighbors();
// Aurora Sim
diff --git a/indra/newview/skins/default/xui/en-us/floater_inspect.xml b/indra/newview/skins/default/xui/en-us/floater_inspect.xml
index e10b2fe06..2e5adeb24 100644
--- a/indra/newview/skins/default/xui/en-us/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/en-us/floater_inspect.xml
@@ -1,6 +1,6 @@
+ tool_tip="See profile of the highlighted object's owner" width="152" >
+