summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/qatest.yaml6
-rw-r--r--indra/llrender/llrendertarget.cpp16
-rw-r--r--indra/llui/lltextbase.cpp1
-rw-r--r--indra/llui/llurlaction.cpp10
-rw-r--r--indra/llui/llurlaction.h4
-rw-r--r--indra/newview/CMakeLists.txt4
-rwxr-xr-xindra/newview/app_settings/message.xml (renamed from etc/message.xml)0
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/gltf/asset.cpp4
-rw-r--r--indra/newview/llagentcamera.cpp10
-rw-r--r--indra/newview/llappviewer.cpp153
-rw-r--r--indra/newview/llappviewer.h1
-rw-r--r--indra/newview/llchathistory.cpp18
-rw-r--r--indra/newview/llchatitemscontainerctrl.cpp19
-rw-r--r--indra/newview/lldrawpoolwater.cpp2
-rw-r--r--indra/newview/llfloaterpreference.cpp2
-rw-r--r--indra/newview/llslurl.cpp6
-rw-r--r--indra/newview/llstartup.cpp2
-rw-r--r--indra/newview/llviewermenu.cpp8
-rw-r--r--indra/newview/llviewermenu.h2
-rw-r--r--indra/newview/llviewertexture.cpp2
-rw-r--r--indra/newview/llvoavatar.cpp8
-rw-r--r--indra/newview/llvoicewebrtc.cpp4
-rw-r--r--indra/newview/skins/default/xui/en/menu_object_icon.xml11
-rw-r--r--indra/newview/skins/default/xui/en/menu_url_objectim.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_people.xml21
-rwxr-xr-xindra/newview/viewer_manifest.py1
27 files changed, 154 insertions, 170 deletions
diff --git a/.github/workflows/qatest.yaml b/.github/workflows/qatest.yaml
index 4e10900441..457e915726 100644
--- a/.github/workflows/qatest.yaml
+++ b/.github/workflows/qatest.yaml
@@ -43,7 +43,11 @@ jobs:
artifact: Windows-installer
install-path: 'C:\viewer-automation-main'
- os: windows
- runner: qa-dan-asus
+ runner: qa-windows-asus-dan
+ artifact: Windows-installer
+ install-path: 'C:\viewer-automation-main'
+ - os: windows
+ runner: qa-windows-z600-dan
artifact: Windows-installer
install-path: 'C:\viewer-automation-main'
- os: mac
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
index 38bc5ff331..0b0d69812f 100644
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -492,22 +492,6 @@ U32 LLRenderTarget::getNumTextures() const
void LLRenderTarget::bindTexture(U32 index, S32 channel, LLTexUnit::eTextureFilterOptions filter_options)
{
gGL.getTexUnit(channel)->bindManual(mUsage, getTexture(index), filter_options == LLTexUnit::TFO_TRILINEAR || filter_options == LLTexUnit::TFO_ANISOTROPIC);
-
- bool isSRGB = false;
- llassert(mInternalFormat.size() > index);
- switch (mInternalFormat[index])
- {
- case GL_SRGB:
- case GL_SRGB8:
- case GL_SRGB_ALPHA:
- case GL_SRGB8_ALPHA8:
- isSRGB = true;
- break;
-
- default:
- break;
- }
-
gGL.getTexUnit(channel)->setTextureFilteringOption(filter_options);
}
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 7007049e1c..d5755ae4b6 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -2227,6 +2227,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
registrar.add("Url.RemoveFriend", boost::bind(&LLUrlAction::removeFriend, url));
registrar.add("Url.ReportAbuse", boost::bind(&LLUrlAction::reportAbuse, url));
registrar.add("Url.SendIM", boost::bind(&LLUrlAction::sendIM, url));
+ registrar.add("Url.ZoomInObject", boost::bind(&LLUrlAction::zoomInObject, url));
registrar.add("Url.ShowOnMap", boost::bind(&LLUrlAction::showLocationOnMap, url));
registrar.add("Url.ShowParcelOnMap", boost::bind(&LLUrlAction::showParcelOnMap, url));
registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url));
diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp
index fdae22cfa1..8b320b59cc 100644
--- a/indra/llui/llurlaction.cpp
+++ b/indra/llui/llurlaction.cpp
@@ -117,6 +117,16 @@ void LLUrlAction::teleportToLocation(std::string url)
}
}
+void LLUrlAction::zoomInObject(std::string url)
+{
+ LLUrlMatch match;
+ std::string object_id = getObjectId(url);
+ if (LLUUID::validate(object_id) && LLUrlRegistry::instance().findUrl(url, match))
+ {
+ executeSLURL("secondlife:///app/object/" + object_id + "/zoomin/" + match.getLocation());
+ }
+}
+
void LLUrlAction::showLocationOnMap(std::string url)
{
LLUrlMatch match;
diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h
index 8b7ab0e7c5..56d459bb26 100644
--- a/indra/llui/llurlaction.h
+++ b/indra/llui/llurlaction.h
@@ -60,6 +60,10 @@ public:
/// if the Url specifies an SL location, teleport there
static void teleportToLocation(std::string url);
+ /// If the Url specifies an object id, attempt to zoom in.
+ /// If not possible to zoom in, show on map
+ static void zoomInObject(std::string url);
+
/// if the Url specifies an SL location, show it on a map
static void showLocationOnMap(std::string url);
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5274986ff0..1315baf740 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1668,7 +1668,7 @@ set(viewer_APPSETTINGS_FILES
app_settings/toolbars.xml
app_settings/trees.xml
app_settings/viewerart.xml
- ${CMAKE_SOURCE_DIR}/../etc/message.xml
+ app_settings/message.xml
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
packages-info.txt
featuretable.txt
@@ -1762,7 +1762,7 @@ if (WINDOWS)
set(COPY_INPUT_DEPENDENCIES
# The following commented dependencies are determined at variably at build time. Can't do this here.
- ${CMAKE_SOURCE_DIR}/../etc/message.xml
+ app_settings/message.xml
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
${SHARED_LIB_STAGING_DIR}/openjp2.dll
${SHARED_LIB_STAGING_DIR}/llwebrtc.dll
diff --git a/etc/message.xml b/indra/newview/app_settings/message.xml
index dee3fd72dd..dee3fd72dd 100755
--- a/etc/message.xml
+++ b/indra/newview/app_settings/message.xml
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f4158188ad..d64f82d303 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1159,7 +1159,7 @@
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
- <integer>0</integer>
+ <integer>1</integer>
</map>
<key>ShowDiscordActivityDetails</key>
<map>
diff --git a/indra/newview/gltf/asset.cpp b/indra/newview/gltf/asset.cpp
index e24aea4a28..28f30ae1c9 100644
--- a/indra/newview/gltf/asset.cpp
+++ b/indra/newview/gltf/asset.cpp
@@ -589,7 +589,9 @@ bool Asset::prep()
for (U32 variant = 0; variant < LLGLSLShader::NUM_GLTF_VARIANTS; ++variant)
{
+#ifdef SHOW_ASSERT
U32 attribute_mask = 0;
+#endif
// for each mesh
for (auto& mesh : mMeshes)
{
@@ -607,7 +609,9 @@ bool Asset::prep()
// all primitives of a given variant and material should all have the same attribute mask
llassert(attribute_mask == 0 || primitive.mAttributeMask == attribute_mask);
+#ifdef SHOW_ASSERT
attribute_mask |= primitive.mAttributeMask;
+#endif
}
}
}
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 339656089c..b2c66b1bac 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -1752,7 +1752,6 @@ F32 LLAgentCamera::calcCameraFOVZoomFactor()
LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(bool *hit_limit)
{
// Compute base camera position and look-at points.
- F32 camera_land_height;
LLVector3d frame_center_global = !isAgentAvatarValid() ?
gAgent.getPositionGlobal() :
gAgent.getPosGlobalFromAgent(getAvatarRootPosition());
@@ -1989,10 +1988,11 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(bool *hit_limit)
}
}
- // Don't let camera go underground
- F32 camera_min_off_ground = getCameraMinOffGround();
- camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
- F32 minZ = llmax(F_ALMOST_ZERO, camera_land_height + camera_min_off_ground);
+ // Don't let camera go underground if constrained
+ // If not constrained, permit going 1000m below 0, use case: retrieving objects
+ F32 camera_min_off_ground = getCameraMinOffGround(); // checks isDisableCameraConstraints
+ F32 camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
+ F32 minZ = camera_land_height + camera_min_off_ground;
if (camera_position_global.mdV[VZ] < minZ)
{
camera_position_global.mdV[VZ] = minZ;
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 66dadf7545..3eb0479341 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -5929,100 +5929,21 @@ void LLAppViewer::initDiscordSocial()
gDiscordPartyMaxSize = 0;
gDiscordTimestampsStart = time(nullptr);
gDiscordClient = std::make_shared<discordpp::Client>();
- gDiscordClient->SetStatusChangedCallback([](discordpp::Client::Status status, discordpp::Client::Error, int32_t) {
- if (status == discordpp::Client::Status::Ready)
- {
- updateDiscordActivity();
- }
- });
- if (gSavedSettings.getBOOL("EnableDiscord"))
- {
- auto credential = gSecAPIHandler->loadCredential("Discord");
- if (credential.notNull())
- {
- gDiscordClient->UpdateToken(discordpp::AuthorizationTokenType::Bearer, credential->getAuthenticator()["token"].asString(), [](discordpp::ClientResult result) {
- if (result.Successful())
- gDiscordClient->Connect();
- else
- LL_WARNS("Discord") << result.Error() << LL_ENDL;
- });
- }
- else
- {
- LL_WARNS("Discord") << "Integration was enabled, but no credentials. Disabling integration." << LL_ENDL;
- gSavedSettings.setBOOL("EnableDiscord", false);
- }
- }
+ gDiscordClient->SetApplicationId(1394782217405862001);
+ updateDiscordActivity();
}
-void LLAppViewer::toggleDiscordIntegration(const LLSD& value)
+void LLAppViewer::updateDiscordActivity()
{
- static const uint64_t APPLICATION_ID = 1394782217405862001;
- if (value.asBoolean())
- {
- discordpp::AuthorizationArgs args{};
- args.SetClientId(APPLICATION_ID);
- args.SetScopes(discordpp::Client::GetDefaultPresenceScopes());
- auto codeVerifier = gDiscordClient->CreateAuthorizationCodeVerifier();
- args.SetCodeChallenge(codeVerifier.Challenge());
- gDiscordClient->Authorize(args, [codeVerifier](auto result, auto code, auto redirectUri) {
- if (result.Successful())
- {
- gDiscordClient->GetToken(APPLICATION_ID, code, codeVerifier.Verifier(), redirectUri, [](discordpp::ClientResult result, std::string accessToken, std::string, discordpp::AuthorizationTokenType, int32_t, std::string) {
- if (result.Successful())
- {
- gDiscordClient->UpdateToken(discordpp::AuthorizationTokenType::Bearer, accessToken, [accessToken](discordpp::ClientResult result) {
- if (result.Successful())
- {
- LLSD authenticator = LLSD::emptyMap();
- authenticator["token"] = accessToken;
- gSecAPIHandler->saveCredential(gSecAPIHandler->createCredential("Discord", LLSD::emptyMap(), authenticator), true);
- gDiscordClient->Connect();
- }
- else
- {
- LL_WARNS("Discord") << result.Error() << LL_ENDL;
- }
- });
- }
- else
- {
- LL_WARNS("Discord") << result.Error() << LL_ENDL;
- }
- });
- }
- else
- {
- LL_WARNS("Discord") << result.Error() << LL_ENDL;
- gSavedSettings.setBOOL("EnableDiscord", false);
- }
- });
- }
- else
+ LL_PROFILE_ZONE_SCOPED;
+
+ static LLCachedControl<bool> integration_enabled(gSavedSettings, "EnableDiscord", true);
+ if (!integration_enabled)
{
- gDiscordClient->Disconnect();
- auto credential = gSecAPIHandler->loadCredential("Discord");
- if (credential.notNull())
- {
- gDiscordClient->RevokeToken(APPLICATION_ID, credential->getAuthenticator()["token"].asString(), [](discordpp::ClientResult result) {
- if (result.Successful())
- LL_INFOS("Discord") << "Access token successfully revoked." << LL_ENDL;
- else
- LL_WARNS("Discord") << "No access token to revoke." << LL_ENDL;
- });
- auto cred = new LLCredential("Discord");
- gSecAPIHandler->deleteCredential(cred);
- }
- else
- {
- LL_WARNS("Discord") << "Credentials are already nonexistent." << LL_ENDL;
- }
+ gDiscordClient->ClearRichPresence();
+ return;
}
-}
-void LLAppViewer::updateDiscordActivity()
-{
- LL_PROFILE_ZONE_SCOPED;
discordpp::Activity activity;
activity.SetType(discordpp::ActivityTypes::Playing);
discordpp::ActivityTimestamps timestamps;
@@ -6050,37 +5971,39 @@ void LLAppViewer::updateDiscordActivity()
activity.SetDetails(gDiscordActivityDetails);
}
+ auto agent_pos_region = gAgent.getPositionAgent();
+ S32 pos_x = S32(agent_pos_region.mV[VX] + 0.5f);
+ S32 pos_y = S32(agent_pos_region.mV[VY] + 0.5f);
+ S32 pos_z = S32(agent_pos_region.mV[VZ] + 0.5f);
+ F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared();
+ const F32 FLY_CUTOFF = 6.f;
+ const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF;
+ const F32 WALK_CUTOFF = 1.5f;
+ const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF;
+ if (velocity_mag_sq > FLY_CUTOFF_SQ)
+ {
+ pos_x -= pos_x % 4;
+ pos_y -= pos_y % 4;
+ }
+ else if (velocity_mag_sq > WALK_CUTOFF_SQ)
+ {
+ pos_x -= pos_x % 2;
+ pos_y -= pos_y % 2;
+ }
+
+ std::string location = "Hidden Region";
static LLCachedControl<bool> show_state(gSavedSettings, "ShowDiscordActivityState", false);
if (show_state)
{
- auto agent_pos_region = gAgent.getPositionAgent();
- S32 pos_x = S32(agent_pos_region.mV[VX] + 0.5f);
- S32 pos_y = S32(agent_pos_region.mV[VY] + 0.5f);
- S32 pos_z = S32(agent_pos_region.mV[VZ] + 0.5f);
- F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared();
- const F32 FLY_CUTOFF = 6.f;
- const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF;
- const F32 WALK_CUTOFF = 1.5f;
- const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF;
- if (velocity_mag_sq > FLY_CUTOFF_SQ)
- {
- pos_x -= pos_x % 4;
- pos_y -= pos_y % 4;
- }
- else if (velocity_mag_sq > WALK_CUTOFF_SQ)
- {
- pos_x -= pos_x % 2;
- pos_y -= pos_y % 2;
- }
- auto location = llformat("%s (%d, %d, %d)", gAgent.getRegion()->getName().c_str(), pos_x, pos_y, pos_z);
- activity.SetState(location);
-
- discordpp::ActivityParty party;
- party.SetId(location);
- party.SetCurrentSize(gDiscordPartyCurrentSize);
- party.SetMaxSize(gDiscordPartyMaxSize);
- activity.SetParty(party);
+ location = llformat("%s (%d, %d, %d)", gAgent.getRegion()->getName().c_str(), pos_x, pos_y, pos_z);
}
+ activity.SetState(location);
+
+ discordpp::ActivityParty party;
+ party.SetId(location);
+ party.SetCurrentSize(gDiscordPartyCurrentSize);
+ party.SetMaxSize(gDiscordPartyMaxSize);
+ activity.SetParty(party);
gDiscordClient->UpdateRichPresence(activity, [](discordpp::ClientResult) {});
}
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 14e96afe94..132d7bfe25 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -253,7 +253,6 @@ public:
#ifdef LL_DISCORD
static void initDiscordSocial();
- static void toggleDiscordIntegration(const LLSD& value);
static void updateDiscordActivity();
static void updateDiscordPartyCurrentSize(int32_t size);
static void updateDiscordPartyMaxSize(int32_t size);
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index a966253c2c..1988e2072b 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -189,7 +189,14 @@ public:
std::string url = "secondlife://" + mObjectData["slurl"].asString();
LLUrlAction::teleportToLocation(url);
}
-
+ else if (level == "obj_zoom_in")
+ {
+ LLUUID obj_id = mObjectData["object_id"];
+ if (obj_id.notNull())
+ {
+ handle_zoom_to_object(obj_id);
+ }
+ }
}
bool onObjectIconContextMenuItemVisible(const LLSD& userdata)
@@ -203,6 +210,15 @@ public:
{
return !LLMuteList::getInstance()->isMuted(getAvatarId(), mFrom, LLMute::flagTextChat);
}
+ else if (level == "obj_zoom_in")
+ {
+ LLUUID obj_id = mObjectData["object_id"];
+ if (obj_id.notNull())
+ {
+ return nullptr != gObjectList.findObject(mAvatarID);
+ }
+ return false;
+ }
return false;
}
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 550dfeb802..5ac4ce0d52 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -37,6 +37,8 @@
#include "lllocalcliprect.h"
#include "lltrans.h"
#include "llfloaterimnearbychat.h"
+#include "llfloaterworldmap.h"
+#include "llviewermenu.h"
#include "llviewercontrol.h"
#include "llagentdata.h"
@@ -75,6 +77,23 @@ public:
return true;
}
+ if (verb == "zoomin")
+ {
+ if (!handle_zoom_to_object(object_id) && params.size() > 2)
+ {
+ // zoom faled, show location
+ // secondlife:///app/object/object_id/zoomin/{LOCATION}/{COORDS} SLapp
+ const std::string region_name = LLURI::unescape(params[0].asString());
+ S32 x = (params.size() > 1) ? params[1].asInteger() : 128;
+ S32 y = (params.size() > 2) ? params[2].asInteger() : 128;
+ S32 z = (params.size() > 3) ? params[3].asInteger() : 0;
+
+ LLFloaterWorldMap::getInstance()->trackURL(region_name, x, y, z);
+ LLFloaterReg::showInstance("world_map", "center");
+ }
+ return true;
+ }
+
return false;
}
};
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
index 7d58511d41..cdf3244389 100644
--- a/indra/newview/lldrawpoolwater.cpp
+++ b/indra/newview/lldrawpoolwater.cpp
@@ -143,7 +143,6 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass)
gGL.setColorMask(true, true);
LLColor3 light_diffuse(0, 0, 0);
- F32 light_exp = 0.0f;
LLEnvironment& environment = LLEnvironment::instance();
LLSettingsWater::ptr_t pwater = environment.getCurrentWater();
@@ -170,7 +169,6 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass)
// Apply magic numbers translating light direction into intensities
light_dir.normalize();
F32 ground_proj_sq = light_dir.mV[0] * light_dir.mV[0] + light_dir.mV[1] * light_dir.mV[1];
- light_exp = llmax(32.f, 256.f * powf(ground_proj_sq, 16.0f));
if (0.f < light_diffuse.normalize()) // Normalizing a color? Puzzling...
{
light_diffuse *= (1.5f + (6.f * ground_proj_sq));
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 9fb9c6346e..b74736a39d 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -367,7 +367,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
mCommitCallbackRegistrar.add("Pref.DeleteTranscripts", boost::bind(&LLFloaterPreference::onDeleteTranscripts, this));
mCommitCallbackRegistrar.add("UpdateFilter", boost::bind(&LLFloaterPreference::onUpdateFilterTerm, this, false)); // <FS:ND/> Hook up for filtering
#ifdef LL_DISCORD
- gSavedSettings.getControl("EnableDiscord")->getCommitSignal()->connect(boost::bind(&LLAppViewer::toggleDiscordIntegration, _2));
+ gSavedSettings.getControl("EnableDiscord")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
gSavedSettings.getControl("ShowDiscordActivityDetails")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
gSavedSettings.getControl("ShowDiscordActivityState")->getCommitSignal()->connect(boost::bind(&LLAppViewer::updateDiscordActivity));
#endif
diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp
index 9e567e3262..6238a1145c 100644
--- a/indra/newview/llslurl.cpp
+++ b/indra/newview/llslurl.cpp
@@ -71,10 +71,10 @@ LLSLURL::LLSLURL(const std::string& slurl)
{
LLURI slurl_uri;
// parse the slurl as a uri
- if (slurl.find(':') == std::string::npos)
+ if (slurl.find("://") == std::string::npos)
{
- // There may be no scheme ('secondlife:' etc.) passed in. In that case
- // we want to normalize the slurl by putting the appropriate scheme
+ // There may be no scheme ('secondlife://', 'https://' etc.) passed in. In that
+ // case we want to normalize the slurl by putting the appropriate scheme
// in front of the slurl. So, we grab the appropriate slurl base
// from the grid manager which may be http://slurl.com/secondlife/ for maingrid, or
// https://<hostname>/region/ for Standalone grid (the word region, not the region name)
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 2409b71f00..ba7437798a 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -342,13 +342,11 @@ void pump_idle_startup_network(void)
{
// while there are message to process:
// process one then call display_startup()
- S32 num_messages = 0;
{
LockMessageChecker lmc(gMessageSystem);
while (lmc.checkAllMessages(gFrameCount, gServicePump))
{
display_startup();
- ++num_messages;
}
lmc.processAcks();
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index d66da27bc7..7a8a57c03d 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -6517,7 +6517,7 @@ void handle_look_at_selection(const LLSD& param)
}
}
-void handle_zoom_to_object(const LLUUID& object_id)
+bool handle_zoom_to_object(const LLUUID& object_id)
{
const F32 PADDING_FACTOR = 2.f;
@@ -6535,12 +6535,14 @@ void handle_zoom_to_object(const LLUUID& object_id)
obj_to_cam.normVec();
- LLVector3d object_center_global = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent());
+ LLVector3d object_center_global = gAgent.getPosGlobalFromAgent(bbox.getCenterAgent());
- gAgentCamera.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance),
+ gAgentCamera.setCameraPosAndFocusGlobal(object_center_global + LLVector3d(obj_to_cam * distance),
object_center_global,
object_id );
+ return true;
}
+ return false;
}
class LLAvatarInviteToGroup : public view_listener_t
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index 68c3dbc126..522c7e8109 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -73,7 +73,7 @@ void handle_buy();
void handle_take(bool take_separate = false);
void handle_take_copy();
void handle_look_at_selection(const LLSD& param);
-void handle_zoom_to_object(const LLUUID& object_id);
+bool handle_zoom_to_object(const LLUUID& object_id);
void handle_object_return();
void handle_object_delete();
void handle_object_edit();
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 5ba0a86e68..52939dbbae 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -524,7 +524,6 @@ void LLViewerTexture::updateClass()
bool is_low = is_sys_low || over_pct > 0.f;
static bool was_low = false;
- static bool was_sys_low = false;
if (is_low && !was_low)
{
@@ -542,7 +541,6 @@ void LLViewerTexture::updateClass()
}
was_low = is_low;
- was_sys_low = is_sys_low;
if (is_low)
{
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 903d6a035f..c6a7a59034 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -4765,14 +4765,6 @@ bool LLVOAvatar::updateCharacter(LLAgent &agent)
}
bool visible = isVisible();
- bool is_control_avatar = isControlAvatar(); // capture state to simplify tracing
- bool is_attachment = false;
-
- if (is_control_avatar)
- {
- LLControlAvatar *cav = dynamic_cast<LLControlAvatar*>(this);
- is_attachment = cav && cav->mRootVolp && cav->mRootVolp->isAttachment(); // For attached animated objects
- }
// For fading out the names above heads, only let the timer
// run if we're visible.
diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp
index eae71ca454..9667bd028f 100644
--- a/indra/newview/llvoicewebrtc.cpp
+++ b/indra/newview/llvoicewebrtc.cpp
@@ -2308,7 +2308,6 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro(connectionPtr_t connection)
return;
}
- bool iceCompleted = false;
LLSD body;
if (!connection->mIceCandidates.empty() || connection->mIceCompleted)
{
@@ -2347,7 +2346,6 @@ void LLVoiceWebRTCConnection::processIceUpdatesCoro(connectionPtr_t connection)
LLSD body_candidate;
body_candidate["completed"] = true;
body["candidate"] = body_candidate;
- iceCompleted = connection->mIceCompleted;
connection->mIceCompleted = false;
}
@@ -2980,7 +2978,6 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
return;
}
boost::json::object voice_data = voice_data_parsed.as_object();
- bool new_participant = false;
boost::json::object mute;
boost::json::object user_gain;
for (auto &participant_elem : voice_data)
@@ -3033,7 +3030,6 @@ void LLVoiceWebRTCConnection::OnDataReceivedImpl(const std::string &data, bool b
}
}
- new_participant |= joined;
if (!participant && joined && (primary || !isSpatial()))
{
participant = LLWebRTCVoiceClient::getInstance()->addParticipantByID(mChannelID, agent_id, mRegionID);
diff --git a/indra/newview/skins/default/xui/en/menu_object_icon.xml b/indra/newview/skins/default/xui/en/menu_object_icon.xml
index f3e520700b..d43ce26e56 100644
--- a/indra/newview/skins/default/xui/en/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/en/menu_object_icon.xml
@@ -41,6 +41,17 @@
<menu_item_separator
layout="topleft" />
<menu_item_call
+ label="Zoom in"
+ layout="topleft"
+ name="zoom_in">
+ <menu_item_call.on_click
+ function="ObjectIcon.Action"
+ parameter="obj_zoom_in" />
+ <menu_item_call.on_enable
+ function="ObjectIcon.Visible"
+ parameter="obj_zoom_in" />
+ </menu_item_call>
+ <menu_item_call
label="Show on Map"
layout="topleft"
name="show_on_map">
diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
index 1874c01f8d..fb6081e1fb 100644
--- a/indra/newview/skins/default/xui/en/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
@@ -26,6 +26,13 @@
<menu_item_separator
layout="topleft" />
<menu_item_call
+ label="Zoom in"
+ layout="topleft"
+ name="zoom_in">
+ <menu_item_call.on_click
+ function="Url.ZoomInObject" />
+ </menu_item_call>
+ <menu_item_call
label="Show on Map"
layout="topleft"
name="show_on_map">
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index c31e6c94ea..1be34550fa 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -177,6 +177,25 @@ Learn about [https://community.secondlife.com/knowledgebase/joining-and-particip
function="People.DelFriend" />
</dnd_button>
</panel>
+ <slider
+ control_name="NearMeRange"
+ decimal_digits="0"
+ increment="1"
+ follows="left|top"
+ left="5"
+ min_val="0"
+ max_val="4096"
+ label="Range:"
+ name="near_me_range"
+ tool_tip="Nearby people range"
+ width="230"/>
+ <text
+ type="string"
+ follows="left|top"
+ left_delta="225"
+ name="near_me_range_text2">
+ m
+ </text>
<layout_stack
clip="false"
follows="all"
@@ -216,7 +235,7 @@ Learn about [https://community.secondlife.com/knowledgebase/joining-and-particip
<avatar_list
allow_select="true"
follows="all"
- height="211"
+ height="197"
ignore_online_status="true"
layout="topleft"
left="3"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 04c3fea93a..cf5e748513 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -63,7 +63,6 @@ class ViewerManifest(LLManifest):
def construct(self):
super(ViewerManifest, self).construct()
self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")
- self.path(src="../../etc/message.xml", dst="app_settings/message.xml")
if self.is_packaging_viewer():
with self.prefix(src_dst="app_settings"):