From bb718155bddfbe7007029a0c9e69a4a98615f14d Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Tue, 3 Jan 2023 18:06:45 -0500 Subject: DRTVWR-575: Replace some LLSDArray() usage with llsd::array(). It seems newer compilers have a different interpretation of exactly when to engage LLSDArray's copy constructor. In particular, this assignment: some_LLSD_map[key] = LLSDArray(...)(...)...; used to convert the LLSDArray object directly to LLSD; now it first calls the custom copy constructor, which embeds the intended array within an outer array before assigning it into the containing map. The newer llsd::array() function avoids that problem because what it returns is already an LLSD object. Taking inventory of LLSDArray assignments of that form turned up a number of workarounds like LLSD(LLSDArray(...)). Replacing those with llsd::array() is both simpler and more readable. Tip of the hat to Chorazinallen for surfacing this issue! --- indra/llinventory/llsettingssky.cpp | 119 +++++++++++++++++----------------- indra/llinventory/llsettingswater.cpp | 36 +++++----- indra/newview/llappviewer.cpp | 15 +++-- indra/newview/llsettingsvo.cpp | 32 ++++----- 4 files changed, 98 insertions(+), 104 deletions(-) diff --git a/indra/llinventory/llsettingssky.cpp b/indra/llinventory/llsettingssky.cpp index 83a92f08d0..a129f0a6f0 100644 --- a/indra/llinventory/llsettingssky.cpp +++ b/indra/llinventory/llsettingssky.cpp @@ -152,24 +152,24 @@ LLSettingsSky::validation_list_t legacyHazeValidationList() { legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_AMBIENT, false, LLSD::TypeArray, boost::bind(&LLSettingsBase::Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")), - LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*"))))); + llsd::array(0.0f, 0.0f, 0.0f, "*"), + llsd::array(3.0f, 3.0f, 3.0f, "*")))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_BLUE_DENSITY, false, LLSD::TypeArray, boost::bind(&LLSettingsBase::Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")), - LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*"))))); + llsd::array(0.0f, 0.0f, 0.0f, "*"), + llsd::array(3.0f, 3.0f, 3.0f, "*")))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_BLUE_HORIZON, false, LLSD::TypeArray, boost::bind(&LLSettingsBase::Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")), - LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*"))))); + llsd::array(0.0f, 0.0f, 0.0f, "*"), + llsd::array(3.0f, 3.0f, 3.0f, "*")))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_HAZE_DENSITY, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(5.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 5.0f)))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_HAZE_HORIZON, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(5.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 5.0f)))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_MULTIPLIER, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0001f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0001f, 2.0f)))); legacyHazeValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DISTANCE_MULTIPLIER, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0001f)(1000.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0001f, 1000.0f)))); } return legacyHazeValidation; } @@ -180,19 +180,19 @@ LLSettingsSky::validation_list_t rayleighValidationList() if (rayleighValidation.empty()) { rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(32768.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 32768.0f)))); rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f)))); rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-1.0f)(1.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(-1.0f, 1.0f)))); rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f)))); rayleighValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); } return rayleighValidation; } @@ -203,19 +203,19 @@ LLSettingsSky::validation_list_t absorptionValidationList() if (absorptionValidation.empty()) { absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(32768.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 32768.0f)))); absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f)))); absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-1.0f)(1.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(-1.0f, 1.0f)))); absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f)))); absorptionValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); } return absorptionValidation; } @@ -226,22 +226,22 @@ LLSettingsSky::validation_list_t mieValidationList() if (mieValidation.empty()) { mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_WIDTH, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(32768.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 32768.0f)))); mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f)))); mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_EXP_SCALE_FACTOR, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-1.0f)(1.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(-1.0f, 1.0f)))); mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_LINEAR_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(2.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 2.0f)))); mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_DENSITY_PROFILE_CONSTANT_TERM, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); mieValidation.push_back(LLSettingsBase::Validator(LLSettingsSky::SETTING_MIE_ANISOTROPY_FACTOR, false, LLSD::TypeReal, - boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&LLSettingsBase::Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); } return mieValidation; } @@ -546,89 +546,86 @@ LLSettingsSky::validation_list_t LLSettingsSky::validationList() static validation_list_t validation; if (validation.empty()) - { // Note the use of LLSD(LLSDArray()()()...) This is due to an issue with the - // copy constructor for LLSDArray. Directly binding the LLSDArray as - // a parameter without first wrapping it in a pure LLSD object will result - // in deeply nested arrays like this [[[[[[[[[[v1,v2,v3]]]]]]]]]] + { validation.push_back(Validator(SETTING_BLOOM_TEXTUREID, true, LLSD::TypeUUID)); validation.push_back(Validator(SETTING_RAINBOW_TEXTUREID, false, LLSD::TypeUUID)); validation.push_back(Validator(SETTING_HALO_TEXTUREID, false, LLSD::TypeUUID)); validation.push_back(Validator(SETTING_CLOUD_COLOR, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")), - LLSD(LLSDArray(1.0f)(1.0f)(1.0f)("*"))))); + llsd::array(0.0f, 0.0f, 0.0f, "*"), + llsd::array(1.0f, 1.0f, 1.0f, "*")))); validation.push_back(Validator(SETTING_CLOUD_POS_DENSITY1, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")), - LLSD(LLSDArray(1.0f)(1.0f)(3.0f)("*"))))); + llsd::array(0.0f, 0.0f, 0.0f, "*"), + llsd::array(1.0f, 1.0f, 3.0f, "*")))); validation.push_back(Validator(SETTING_CLOUD_POS_DENSITY2, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")), - LLSD(LLSDArray(1.0f)(1.0f)(1.0f)("*"))))); + llsd::array(0.0f, 0.0f, 0.0f, "*"), + llsd::array(1.0f, 1.0f, 1.0f, "*")))); validation.push_back(Validator(SETTING_CLOUD_SCALE, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.001f)(3.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.001f, 3.0f)))); validation.push_back(Validator(SETTING_CLOUD_SCROLL_RATE, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(-50.0f)(-50.0f)), - LLSD(LLSDArray(50.0f)(50.0f))))); + llsd::array(-50.0f, -50.0f), + llsd::array(50.0f, 50.0f)))); validation.push_back(Validator(SETTING_CLOUD_SHADOW, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_CLOUD_TEXTUREID, false, LLSD::TypeUUID)); validation.push_back(Validator(SETTING_CLOUD_VARIANCE, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_DOME_OFFSET, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_DOME_RADIUS, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(2000.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 2000.0f)))); validation.push_back(Validator(SETTING_GAMMA, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(20.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 20.0f)))); validation.push_back(Validator(SETTING_GLOW, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.2f)("*")(-10.0f)("*")), - LLSD(LLSDArray(40.0f)("*")(10.0f)("*"))))); + llsd::array(0.2f, "*", -10.0f, "*"), + llsd::array(40.0f, "*", 10.0f, "*")))); validation.push_back(Validator(SETTING_MAX_Y, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(10000.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 10000.0f)))); validation.push_back(Validator(SETTING_MOON_ROTATION, true, LLSD::TypeArray, &Validator::verifyQuaternionNormal)); validation.push_back(Validator(SETTING_MOON_SCALE, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.25f)(20.0f))), LLSD::Real(1.0))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.25f, 20.0f)), LLSD::Real(1.0))); validation.push_back(Validator(SETTING_MOON_TEXTUREID, false, LLSD::TypeUUID)); validation.push_back(Validator(SETTING_MOON_BRIGHTNESS, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_STAR_BRIGHTNESS, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(500.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 500.0f)))); validation.push_back(Validator(SETTING_SUNLIGHT_COLOR, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)("*")), - LLSD(LLSDArray(3.0f)(3.0f)(3.0f)("*"))))); + llsd::array(0.0f, 0.0f, 0.0f, "*"), + llsd::array(3.0f, 3.0f, 3.0f, "*")))); validation.push_back(Validator(SETTING_SUN_ROTATION, true, LLSD::TypeArray, &Validator::verifyQuaternionNormal)); validation.push_back(Validator(SETTING_SUN_SCALE, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.25f)(20.0f))), LLSD::Real(1.0))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.25f, 20.0f)), LLSD::Real(1.0))); validation.push_back(Validator(SETTING_SUN_TEXTUREID, false, LLSD::TypeUUID)); validation.push_back(Validator(SETTING_PLANET_RADIUS, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(32768.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 32768.0f)))); validation.push_back(Validator(SETTING_SKY_BOTTOM_RADIUS, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(32768.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 32768.0f)))); validation.push_back(Validator(SETTING_SKY_TOP_RADIUS, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(1000.0f)(32768.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(1000.0f, 32768.0f)))); validation.push_back(Validator(SETTING_SUN_ARC_RADIANS, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(0.1f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 0.1f)))); validation.push_back(Validator(SETTING_SKY_MOISTURE_LEVEL, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_SKY_DROPLET_RADIUS, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(5.0f)(1000.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(5.0f, 1000.0f)))); validation.push_back(Validator(SETTING_SKY_ICE_LEVEL, false, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_RAYLEIGH_CONFIG, true, LLSD::TypeArray, &validateRayleighLayers)); validation.push_back(Validator(SETTING_ABSORPTION_CONFIG, true, LLSD::TypeArray, &validateAbsorptionLayers)); @@ -719,7 +716,7 @@ LLSD LLSettingsSky::defaults(const LLSettingsBase::TrackPosition& position) dfltsetting[SETTING_CLOUD_POS_DENSITY1] = LLColor4(1.0000, 0.5260, 1.0000, 0.0).getValue(); dfltsetting[SETTING_CLOUD_POS_DENSITY2] = LLColor4(1.0000, 0.5260, 1.0000, 0.0).getValue(); dfltsetting[SETTING_CLOUD_SCALE] = LLSD::Real(0.4199); - dfltsetting[SETTING_CLOUD_SCROLL_RATE] = LLSDArray(0.0f)(0.0f); + dfltsetting[SETTING_CLOUD_SCROLL_RATE] = llsd::array(0.0f, 0.0f); dfltsetting[SETTING_CLOUD_SHADOW] = LLSD::Real(0.2699); dfltsetting[SETTING_CLOUD_VARIANCE] = LLSD::Real(0.0); diff --git a/indra/llinventory/llsettingswater.cpp b/indra/llinventory/llsettingswater.cpp index 90f99e8198..f19beb5be5 100644 --- a/indra/llinventory/llsettingswater.cpp +++ b/indra/llinventory/llsettingswater.cpp @@ -222,42 +222,38 @@ LLSettingsWater::validation_list_t LLSettingsWater::validationList() static validation_list_t validation; if (validation.empty()) - { // Note the use of LLSD(LLSDArray()()()...) This is due to an issue with the - // copy constructor for LLSDArray. Directly binding the LLSDArray as - // a parameter without first wrapping it in a pure LLSD object will result - // in deeply nested arrays like this [[[[[[[[[[v1,v2,v3]]]]]]]]]] - + { validation.push_back(Validator(SETTING_BLUR_MULTIPLIER, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-0.5f)(0.5f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(-0.5f, 0.5f)))); validation.push_back(Validator(SETTING_FOG_COLOR, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)(1.0f)), - LLSD(LLSDArray(1.0f)(1.0f)(1.0f)(1.0f))))); + llsd::array(0.0f, 0.0f, 0.0f, 1.0f), + llsd::array(1.0f, 1.0f, 1.0f, 1.0f)))); validation.push_back(Validator(SETTING_FOG_DENSITY, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(-10.0f)(10.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(-10.0f, 10.0f)))); validation.push_back(Validator(SETTING_FOG_MOD, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(20.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 20.0f)))); validation.push_back(Validator(SETTING_FRESNEL_OFFSET, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_FRESNEL_SCALE, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(1.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 1.0f)))); validation.push_back(Validator(SETTING_NORMAL_MAP, true, LLSD::TypeUUID)); validation.push_back(Validator(SETTING_NORMAL_SCALE, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(0.0f)(0.0f)(0.0f)), - LLSD(LLSDArray(10.0f)(10.0f)(10.0f))))); + llsd::array(0.0f, 0.0f, 0.0f), + llsd::array(10.0f, 10.0f, 10.0f)))); validation.push_back(Validator(SETTING_SCALE_ABOVE, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(3.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 3.0f)))); validation.push_back(Validator(SETTING_SCALE_BELOW, true, LLSD::TypeReal, - boost::bind(&Validator::verifyFloatRange, _1, _2, LLSD(LLSDArray(0.0f)(3.0f))))); + boost::bind(&Validator::verifyFloatRange, _1, _2, llsd::array(0.0f, 3.0f)))); validation.push_back(Validator(SETTING_WAVE1_DIR, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(-20.0f)(-20.0f)), - LLSD(LLSDArray(20.0f)(20.0f))))); + llsd::array(-20.0f, -20.0f), + llsd::array(20.0f, 20.0f)))); validation.push_back(Validator(SETTING_WAVE2_DIR, true, LLSD::TypeArray, boost::bind(&Validator::verifyVectorMinMax, _1, _2, - LLSD(LLSDArray(-20.0f)(-20.0f)), - LLSD(LLSDArray(20.0f)(20.0f))))); + llsd::array(-20.0f, -20.0f), + llsd::array(20.0f, 20.0f)))); } return validation; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 4f3e0b08e4..b31447a72b 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -3195,15 +3195,16 @@ LLSD LLAppViewer::getViewerInfo() const // LLFloaterAbout. LLSD info; auto& versionInfo(LLVersionInfo::instance()); - info["VIEWER_VERSION"] = LLSDArray(versionInfo.getMajor())(versionInfo.getMinor())(versionInfo.getPatch())(versionInfo.getBuild()); + info["VIEWER_VERSION"] = llsd::array(versionInfo.getMajor(), versionInfo.getMinor(), + versionInfo.getPatch(), versionInfo.getBuild()); info["VIEWER_VERSION_STR"] = versionInfo.getVersion(); info["CHANNEL"] = versionInfo.getChannel(); - info["ADDRESS_SIZE"] = ADDRESS_SIZE; - std::string build_config = versionInfo.getBuildConfig(); - if (build_config != "Release") - { - info["BUILD_CONFIG"] = build_config; - } + info["ADDRESS_SIZE"] = ADDRESS_SIZE; + std::string build_config = versionInfo.getBuildConfig(); + if (build_config != "Release") + { + info["BUILD_CONFIG"] = build_config; + } // return a URL to the release notes for this viewer, such as: // https://releasenotes.secondlife.com/viewer/2.1.0.123456.html diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 7c762170a7..1930faa1a0 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -568,11 +568,11 @@ void LLSettingsVOSky::convertAtmosphericsToLegacy(LLSD& legacy, LLSD& settings) legacy[SETTING_BLUE_DENSITY] = ensure_array_4(legacyhaze[SETTING_BLUE_DENSITY], 1.0); legacy[SETTING_BLUE_HORIZON] = ensure_array_4(legacyhaze[SETTING_BLUE_HORIZON], 1.0); - legacy[SETTING_DENSITY_MULTIPLIER] = LLSDArray(legacyhaze[SETTING_DENSITY_MULTIPLIER].asReal())(0.0f)(0.0f)(1.0f); - legacy[SETTING_DISTANCE_MULTIPLIER] = LLSDArray(legacyhaze[SETTING_DISTANCE_MULTIPLIER].asReal())(0.0f)(0.0f)(1.0f); + legacy[SETTING_DENSITY_MULTIPLIER] = llsd::array(legacyhaze[SETTING_DENSITY_MULTIPLIER].asReal(), 0.0f, 0.0f, 1.0f); + legacy[SETTING_DISTANCE_MULTIPLIER] = llsd::array(legacyhaze[SETTING_DISTANCE_MULTIPLIER].asReal(), 0.0f, 0.0f, 1.0f); - legacy[SETTING_HAZE_DENSITY] = LLSDArray(legacyhaze[SETTING_HAZE_DENSITY])(0.0f)(0.0f)(1.0f); - legacy[SETTING_HAZE_HORIZON] = LLSDArray(legacyhaze[SETTING_HAZE_HORIZON])(0.0f)(0.0f)(1.0f); + legacy[SETTING_HAZE_DENSITY] = llsd::array(legacyhaze[SETTING_HAZE_DENSITY], 0.0f, 0.0f, 1.0f); + legacy[SETTING_HAZE_HORIZON] = llsd::array(legacyhaze[SETTING_HAZE_HORIZON], 0.0f, 0.0f, 1.0f); } } @@ -586,15 +586,15 @@ LLSD LLSettingsVOSky::convertToLegacy(const LLSettingsSky::ptr_t &psky, bool isA legacy[SETTING_CLOUD_COLOR] = ensure_array_4(settings[SETTING_CLOUD_COLOR], 1.0); legacy[SETTING_CLOUD_POS_DENSITY1] = ensure_array_4(settings[SETTING_CLOUD_POS_DENSITY1], 1.0); legacy[SETTING_CLOUD_POS_DENSITY2] = ensure_array_4(settings[SETTING_CLOUD_POS_DENSITY2], 1.0); - legacy[SETTING_CLOUD_SCALE] = LLSDArray(settings[SETTING_CLOUD_SCALE])(LLSD::Real(0.0))(LLSD::Real(0.0))(LLSD::Real(1.0)); + legacy[SETTING_CLOUD_SCALE] = llsd::array(settings[SETTING_CLOUD_SCALE], LLSD::Real(0.0), LLSD::Real(0.0), LLSD::Real(1.0)); legacy[SETTING_CLOUD_SCROLL_RATE] = settings[SETTING_CLOUD_SCROLL_RATE]; - legacy[SETTING_LEGACY_ENABLE_CLOUD_SCROLL] = LLSDArray(LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][0].asReal()))) - (LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][1].asReal()))); - legacy[SETTING_CLOUD_SHADOW] = LLSDArray(settings[SETTING_CLOUD_SHADOW].asReal())(0.0f)(0.0f)(1.0f); - legacy[SETTING_GAMMA] = LLSDArray(settings[SETTING_GAMMA])(0.0f)(0.0f)(1.0f); + legacy[SETTING_LEGACY_ENABLE_CLOUD_SCROLL] = llsd::array(LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][0].asReal())), + LLSD::Boolean(!is_approx_zero(settings[SETTING_CLOUD_SCROLL_RATE][1].asReal()))); + legacy[SETTING_CLOUD_SHADOW] = llsd::array(settings[SETTING_CLOUD_SHADOW].asReal(), 0.0f, 0.0f, 1.0f); + legacy[SETTING_GAMMA] = llsd::array(settings[SETTING_GAMMA], 0.0f, 0.0f, 1.0f); legacy[SETTING_GLOW] = ensure_array_4(settings[SETTING_GLOW], 1.0); legacy[SETTING_LIGHT_NORMAL] = ensure_array_4(psky->getLightDirection().getValue(), 0.0f); - legacy[SETTING_MAX_Y] = LLSDArray(settings[SETTING_MAX_Y])(0.0f)(0.0f)(1.0f); + legacy[SETTING_MAX_Y] = llsd::array(settings[SETTING_MAX_Y], 0.0f, 0.0f, 1.0f); legacy[SETTING_STAR_BRIGHTNESS] = settings[SETTING_STAR_BRIGHTNESS].asReal() / 250.0f; // convert from 0-500 -> 0-2 ala pre-FS-compat changes legacy[SETTING_SUNLIGHT_COLOR] = ensure_array_4(settings[SETTING_SUNLIGHT_COLOR], 1.0f); @@ -1062,7 +1062,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n newsettings[SETTING_NAME] = name; - LLSD watertrack = LLSDArray( + LLSD watertrack = llsd::array( LLSDMap(SETTING_KEYKFRAME, LLSD::Real(0.0f)) (SETTING_KEYNAME, "water:Default")); @@ -1077,7 +1077,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyPreset(const std::string &n skytrack.append(entry); } - newsettings[SETTING_TRACKS] = LLSDArray(watertrack)(skytrack); + newsettings[SETTING_TRACKS] = llsd::array(watertrack, skytrack); LLSD frames(LLSD::emptyMap()); @@ -1165,7 +1165,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyMessage(const LLUUID ®io watersettings[SETTING_NAME] = watername; frames[watername] = watersettings; - LLSD watertrack = LLSDArray( + LLSD watertrack = llsd::array( LLSDMap(SETTING_KEYKFRAME, LLSD::Real(0.0f)) (SETTING_KEYNAME, watername)); @@ -1179,7 +1179,7 @@ LLSettingsDay::ptr_t LLSettingsVODay::buildFromLegacyMessage(const LLUUID ®io LLSD newsettings = LLSDMap ( SETTING_NAME, "Region (legacy)" ) - ( SETTING_TRACKS, LLSDArray(watertrack)(skytrack)) + ( SETTING_TRACKS, llsd::array(watertrack, skytrack)) ( SETTING_FRAMES, frames ) ( SETTING_TYPE, "daycycle" ); @@ -1360,7 +1360,7 @@ LLSD LLSettingsVODay::convertToLegacy(const LLSettingsVODay::ptr_t &pday) skys[name.str()] = std::static_pointer_cast((*it).second); F32 frame = ((tracksky.size() == 1) && (it == tracksky.begin())) ? -1.0f : (*it).first; - llsdcycle.append( LLSDArray(LLSD::Real(frame))(name.str()) ); + llsdcycle.append( llsd::array(LLSD::Real(frame), name.str()) ); } LLSD llsdskylist(LLSD::emptyMap()); @@ -1373,7 +1373,7 @@ LLSD LLSettingsVODay::convertToLegacy(const LLSettingsVODay::ptr_t &pday) llsdskylist[(*its).first] = llsdsky; } - return LLSDArray(LLSD::emptyMap())(llsdcycle)(llsdskylist)(llsdwater); + return llsd::array(LLSD::emptyMap(), llsdcycle, llsdskylist, llsdwater); } LLSettingsSkyPtr_t LLSettingsVODay::getDefaultSky() const -- cgit v1.2.3 From aa112ef17f4fdfeecc05e5305af93a6d4b9fce70 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 4 Jan 2023 12:04:56 -0500 Subject: DRTVWR-575: Fix bug in macOS micro_sleep(). The compiler was deducing an unsigned type for the difference (U64 desired microseconds - half KERNEL_SLEEP_INTERVAL_US). When the desired sleep was less than that constant, the difference went hugely positive, resulting in a very long snooze. Amusingly, forcing that U64 result into an S32 num_sleep_intervals worked only *because* of integer truncation: the high-order bits were discarded, resulting in a negative result as intended. Ensuring that both integer operands are signed at the outset, though, produces a more formally correct result. --- indra/llcommon/lltimer.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp index 74ec62d347..58bedacf43 100644 --- a/indra/llcommon/lltimer.cpp +++ b/indra/llcommon/lltimer.cpp @@ -121,9 +121,14 @@ U32 micro_sleep(U64 us, U32 max_yields) U64 start = get_clock_count(); // This is kernel dependent. Currently, our kernel generates software clock // interrupts at 250 Hz (every 4,000 microseconds). - const U64 KERNEL_SLEEP_INTERVAL_US = 4000; - - auto num_sleep_intervals = (us - (KERNEL_SLEEP_INTERVAL_US >> 1)) / KERNEL_SLEEP_INTERVAL_US; + const S64 KERNEL_SLEEP_INTERVAL_US = 4000; + + // Use signed arithmetic to discover whether a sleep is even necessary. If + // either 'us' or KERNEL_SLEEP_INTERVAL_US is unsigned, the compiler + // promotes the difference to unsigned. If 'us' is less than half + // KERNEL_SLEEP_INTERVAL_US, the unsigned difference will be hugely + // positive, resulting in a crazy long wait. + auto num_sleep_intervals = (S64(us) - (KERNEL_SLEEP_INTERVAL_US >> 1)) / KERNEL_SLEEP_INTERVAL_US; if (num_sleep_intervals > 0) { U64 sleep_time = (num_sleep_intervals * KERNEL_SLEEP_INTERVAL_US) - (KERNEL_SLEEP_INTERVAL_US >> 1); -- cgit v1.2.3 From 4093d5b1ebe6b0eb50473d5161042ac3a1b7f6b2 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 4 Jan 2023 15:13:02 -0500 Subject: DRTVWR-575: Use llsdutil.h functions for LLFloaterLandHoldings LLSD LLFloaterLandHoldings::postBuild() was constructing an LLSD structure by assigning each map entry and array element one at a time. Chorazinallen identified a crash bug possibly caused by destroying that LLSD structure. Diagnostically try building it using nested llsd::map() and llsd::array() calls instead to see if that improves matters. --- indra/newview/llfloaterlandholdings.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index 8633fe4e5e..a3222d622f 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -39,6 +39,7 @@ #include "llfloaterworldmap.h" #include "llproductinforequest.h" #include "llscrolllistctrl.h" +#include "llsdutil.h" #include "llstatusbar.h" #include "lltextbox.h" #include "llscrolllistctrl.h" @@ -79,24 +80,25 @@ BOOL LLFloaterLandHoldings::postBuild() for(S32 i = 0; i < count; ++i) { LLUUID id(gAgent.mGroups.at(i).mID); - - LLSD element; - element["id"] = id; - element["columns"][0]["column"] = "group"; - element["columns"][0]["value"] = gAgent.mGroups.at(i).mName; - element["columns"][0]["font"] = "SANSSERIF"; - LLUIString areastr = getString("area_string"); areastr.setArg("[AREA]", llformat("%d", gAgent.mGroups.at(i).mContribution)); - element["columns"][1]["column"] = "area"; - element["columns"][1]["value"] = areastr; - element["columns"][1]["font"] = "SANSSERIF"; - grant_list->addElement(element); + grant_list->addElement( + llsd::map( + "id", id, + "columns", llsd::array( + llsd::map( + "column", "group", + "value", gAgent.mGroups.at(i).mName, + "font", "SANSSERIF"), + llsd::map( + "column", "area", + "value", areastr, + "font", "SANSSERIF")))); } - + center(); - + return TRUE; } @@ -108,8 +110,8 @@ LLFloaterLandHoldings::~LLFloaterLandHoldings() void LLFloaterLandHoldings::onOpen(const LLSD& key) { - LLScrollListCtrl *list = getChild("parcel list"); - list->clearRows(); + LLScrollListCtrl *list = getChild("parcel list"); + list->clearRows(); // query_id null is known to be us const LLUUID& query_id = LLUUID::null; -- cgit v1.2.3 From 99c040ea9976e90caec9dedd942badc1c43822e7 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 4 Jan 2023 17:18:31 -0500 Subject: DRTVWR-575: Fix possible bad indexing in LLSD::operator[](size_t). One could argue that passing a negative index to an LLSD array should do something other than shrug and reference element [0], but as that's legacy behavior, it seems all too likely that the viewer sometimes relies on it. This specific problem arises if the index passed to operator[]() is negative -- either with the previous Integer parameter or with size_t (which of course reinterprets the negative index as hugely positive). The non-const ImplArray::ref() overload checks parameter 'i' and, if it appears negative, sets internal 'index' to 0. But in the next stanza, if (index >= existing size()), it calls resize() to scale the internal array up to one more than the requested index. The trouble is that it passed resize(i + 1), not the adjusted resize(index + 1). With a requested index of exactly -1, that would pass resize(0), which would result in the ensuing array[0] reference being invalid. With a requested index less than -1, that would pass resize(hugely positive) -- since, whether operator[]() accepts signed LLSD::Integer or size_t, resize() accepts std::vector::size_type. Given that the footprint of an LLSD array element is at least a pointer, the number of bytes required for resize(hugely positive) is likely to exceed available heap storage. Passing the adjusted resize(index + 1) should defend against that case. --- indra/llcommon/llsd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp index a645e624f8..590915e9d2 100644 --- a/indra/llcommon/llsd.cpp +++ b/indra/llcommon/llsd.cpp @@ -622,7 +622,7 @@ namespace if (index >= mData.size()) { - mData.resize(i + 1); + mData.resize(index + 1); } return mData[index]; -- cgit v1.2.3 From f3cd329b585ef55a66f2a824f010d1a54d67d8d2 Mon Sep 17 00:00:00 2001 From: akleshchev <117672381+akleshchev@users.noreply.github.com> Date: Tue, 10 Jan 2023 19:38:44 +0200 Subject: SL-18911 My Land Holdings floater crashes viewer on the Xcode/+Monterey branches (#47) Revert part of "DRTVWR-575: Address review comments on Xcode 14.1 type tweaks." Crash was reproduced when assigning areastr to llsd, but likely present in other cases of assigning ui strings to llsd (instead of going for lluistring's result directly copy constructor was engaged and either copy or original crashed due to invalid pointers, copy shouldn't have been created). --- indra/llcommon/llsd.h | 26 ++++++++++---------------- indra/llui/llnotifications.cpp | 2 +- indra/newview/llviewermessage.cpp | 2 +- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h index c1406cf73f..92a1fc58a5 100644 --- a/indra/llcommon/llsd.h +++ b/indra/llcommon/llsd.h @@ -30,7 +30,6 @@ #include #include #include -#include #include "stdtypes.h" @@ -216,21 +215,15 @@ public: void assign(const Date&); void assign(const URI&); void assign(const Binary&); - - // support assignment from size_t et al. - template ::value && - ! std::is_same::value, - bool>::type = true> - void assign(VALUE v) { assign(Integer(narrow(v))); } - // support assignment from F32 et al. - template ::value, - bool>::type = true> - void assign(VALUE v) { assign(Real(narrow(v))); } - - template - LLSD& operator=(VALUE v) { assign(v); return *this; } + + LLSD& operator=(Boolean v) { assign(v); return *this; } + LLSD& operator=(Integer v) { assign(v); return *this; } + LLSD& operator=(Real v) { assign(v); return *this; } + LLSD& operator=(const String& v) { assign(v); return *this; } + LLSD& operator=(const UUID& v) { assign(v); return *this; } + LLSD& operator=(const Date& v) { assign(v); return *this; } + LLSD& operator=(const URI& v) { assign(v); return *this; } + LLSD& operator=(const Binary& v) { assign(v); return *this; } //@} /** @@ -292,6 +285,7 @@ public: //@{ LLSD(const char*); void assign(const char*); + LLSD& operator=(const char* v) { assign(v); return *this; } //@} /** @name Map Values */ diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 7c381161c9..d736aa6634 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -337,7 +337,7 @@ void LLNotificationForm::addElement(const std::string& type, const std::string& element["name"] = name; element["text"] = name; element["value"] = value; - element["index"] = mFormData.size(); + element["index"] = LLSD::Integer(mFormData.size()); element["enabled"] = enabled; mFormData.append(element); } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d97ed61e11..5266db5b38 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6284,7 +6284,7 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response) // More than OFFER_RECIPIENT_LIMIT targets will overload the message // producing an llerror. LLSD args; - args["OFFERS"] = notification["payload"]["ids"].size(); + args["OFFERS"] = LLSD::Integer(notification["payload"]["ids"].size()); args["LIMIT"] = static_cast(OFFER_RECIPIENT_LIMIT); LLNotificationsUtil::add("TooManyTeleportOffers", args); return false; -- cgit v1.2.3 From de77dc3ed353dce209d068a8bab9a7048e2cb0a7 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 16 Jan 2023 19:52:20 +0200 Subject: MacOS Build fix --- indra/llcommon/llstring.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 7ba5c8c241..1fd6cac14a 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -1668,13 +1668,13 @@ std::basic_string LLStringUtilBase::quote(const string_type& str, // For whatever reason, we must quote this string. string_type result; result.push_back('"'); - for (typename const S8 c : str) + for (typename string_type::const_iterator ci(str.begin()), cend(str.end()); ci != cend; ++ci) { - if (c == '"') + if (*ci == '"') { result.append(escape); } - result.push_back(c); + result.push_back(*ci); } result.push_back('"'); return result; -- cgit v1.2.3 From a1931d8cc4820eb4e20f1346fc7c3e0139c5863b Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 16 Jan 2023 04:42:33 +0200 Subject: SL-18735 Using "Find original" in main inventory tab breaks inventory view Fixes folders being invidible (missing arrange) Fixes sroll to target not working reliably --- indra/llcommon/llallocator_heap_profile.cpp | 1 - indra/llui/llfolderview.cpp | 30 ++++++++++++++++++++-------- indra/llui/llfolderviewitem.h | 1 - indra/newview/lleventpoll.cpp | 5 +++-- indra/newview/llfolderviewmodelinventory.cpp | 6 +++++- indra/newview/llstartup.cpp | 2 ++ 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/indra/llcommon/llallocator_heap_profile.cpp b/indra/llcommon/llallocator_heap_profile.cpp index 6dd399e1e3..c6d9542b42 100644 --- a/indra/llcommon/llallocator_heap_profile.cpp +++ b/indra/llcommon/llallocator_heap_profile.cpp @@ -130,7 +130,6 @@ void LLAllocatorHeapProfile::parse(std::string const & prof_text) void LLAllocatorHeapProfile::dump(std::ostream & out) const { - lines_t::const_iterator i; for (const LLAllocatorHeapProfile::line& line : mLines) { out << line.mLiveCount << ": " << line.mLiveSize << '[' << line.mTotalCount << ": " << line.mTotalSize << "] @"; diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index ea2ca68e47..5391222b67 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -1646,7 +1646,8 @@ void LLFolderView::update() // Clear the modified setting on the filter only if the filter finished after running the filter process // Note: if the filter count has timed out, that means the filter halted before completing the entire set of items - if (filter_object.isModified() && (!filter_object.isTimedOut())) + bool filter_modified = filter_object.isModified(); + if (filter_modified && (!filter_object.isTimedOut())) { filter_object.clearModified(); } @@ -1680,7 +1681,7 @@ void LLFolderView::update() BOOL filter_finished = mViewModel->contentsReady() && (getViewModelItem()->passedFilter() || ( getViewModelItem()->getLastFilterGeneration() >= filter_object.getFirstSuccessGeneration() - && !filter_object.isModified())); + && !filter_modified)); if (filter_finished || gFocusMgr.childHasKeyboardFocus(mParentPanel.get()) || gFocusMgr.childHasMouseCapture(mParentPanel.get())) @@ -1768,13 +1769,26 @@ void LLFolderView::update() if (mSelectedItems.size() && mNeedsScroll) { - scrollToShowItem(mSelectedItems.back(), constraint_rect); + LLFolderViewItem* scroll_to_item = mSelectedItems.back(); + scrollToShowItem(scroll_to_item, constraint_rect); // continue scrolling until animated layout change is done - if (filter_finished - && (!needsArrange() || !is_visible)) - { - mNeedsScroll = FALSE; - } + bool selected_filter_finished = true; + if (scroll_to_item && scroll_to_item->getViewModelItem()) + { + selected_filter_finished = scroll_to_item->getViewModelItem()->getLastFilterGeneration() >= filter_object.getFirstSuccessGeneration(); + } + if (filter_finished && selected_filter_finished) + { + bool needs_arrange = needsArrange(); + if (mParentFolder) + { + needs_arrange |= (bool)mParentFolder->needsArrange(); + } + if (!needs_arrange || !is_visible) + { + mNeedsScroll = FALSE; + } + } } if (mSignalSelectCallback) diff --git a/indra/llui/llfolderviewitem.h b/indra/llui/llfolderviewitem.h index ee20d048fd..a5157266c5 100644 --- a/indra/llui/llfolderviewitem.h +++ b/indra/llui/llfolderviewitem.h @@ -335,7 +335,6 @@ protected: F32 mAutoOpenCountdown; S32 mLastArrangeGeneration; S32 mLastCalculatedWidth; - bool mNeedsSort; bool mIsFolderComplete; // indicates that some children were not loaded/added yet bool mAreChildrenInited; // indicates that no children were initialized diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp index 6f3f6e9166..26782e53f0 100644 --- a/indra/newview/lleventpoll.cpp +++ b/indra/newview/lleventpoll.cpp @@ -247,8 +247,9 @@ namespace Details errorCount = 0; if (!result.isMap() || - !result.get("events") || - !result.get("id")) + !result.has("events") || + !result["events"].isArray() || + !result.has("id")) { LL_WARNS("LLEventPollImpl") << " <" << counter << "> received event poll with no events or id key: " << result << LL_ENDL; continue; diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp index b6d856e31b..241aa96bc8 100644 --- a/indra/newview/llfolderviewmodelinventory.cpp +++ b/indra/newview/llfolderviewmodelinventory.cpp @@ -182,11 +182,15 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_gen bool generation_skip = mMarkedDirtyGeneration >= 0 && mPrevPassedAllFilters && mMarkedDirtyGeneration < mRootViewModel.getFilter().getFirstSuccessGeneration(); + S32 last_generation = mLastFilterGeneration; LLFolderViewModelItemCommon::setPassedFilter(passed, filter_generation, string_offset, string_size); bool before = mPrevPassedAllFilters; mPrevPassedAllFilters = passedFilter(filter_generation); - if (before != mPrevPassedAllFilters || generation_skip) + if (before != mPrevPassedAllFilters // Change of state + || generation_skip // Was marked dirty + // Potential change from being in-progress and invisible to visible) + || (mPrevPassedAllFilters && last_generation < mRootViewModel.getFilter().getFirstRequiredGeneration())) { // Need to rearrange the folder if the filtered state of the item changed, // previously passed item skipped filter generation changes while being dirty diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 1dd5c5cbe5..10293a90c8 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -324,6 +324,8 @@ void set_flags_and_update_appearance() { LLAppearanceMgr::instance().setAttachmentInvLinkEnable(true); LLAppearanceMgr::instance().updateAppearanceFromCOF(true, true, no_op); + + LLInventoryModelBackgroundFetch::instance().start(); } // Returns false to skip other idle processing. Should only return -- cgit v1.2.3 From a94f907a17aa754a3c75dbf5491b57fdde466367 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 20 Jan 2023 23:43:48 +0200 Subject: SL-18989 Saved notifications some times stops displaying information --- indra/newview/lltoast.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index bf56a10d4d..223aaad811 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -220,7 +220,11 @@ void LLToast::hide() /*virtual*/ void LLToast::setFocus(BOOL b) { - if (b && !hasFocus() && mPanel) + if (b + && !hasFocus() + && mPanel + && mWrapperPanel + && !mWrapperPanel->getChildList()->empty()) { LLModalDialog::setFocus(TRUE); // mostly for buttons @@ -416,15 +420,18 @@ void LLToast::setVisible(BOOL show) //hide "hide" button in case toast was hidden without mouse_leave if(mHideBtn) mHideBtn->setVisible(show); - } - LLFloater::setVisible(show); - if(mPanel) - { - if(!mPanel->isDead()) - { - mPanel->setVisible(show); - } - } + } + LLFloater::setVisible(show); + if (mPanel + && !mPanel->isDead() + && mWrapperPanel + && !mWrapperPanel->getChildList()->empty() + // LLInspectToast can take over, but LLToast still appears to act like a data storage + && mPanel->getParent() == mWrapperPanel + ) + { + mPanel->setVisible(show); + } } void LLToast::updateHoveredState() -- cgit v1.2.3 From 1109fca197325b0e081c8c2b9ed7c9e455035e83 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 24 Jan 2023 14:14:37 +0200 Subject: SL-19025 Fix for object's context menu Inspect and copy doesn't work for face or child selection. Disable them in such cases. --- indra/newview/llviewermenu.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index c796ed30f7..37227518f5 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2876,6 +2876,13 @@ void handle_object_open() LLFloaterReg::showInstance("openobject"); } +bool enable_object_inspect() +{ + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); + LLViewerObject* selected_objectp = selection->getFirstRootObject(); + return selected_objectp != NULL; +} + bool enable_object_open() { // Look for contents in root object, which is all the LLFloaterOpenObject @@ -7943,7 +7950,7 @@ bool enable_object_take_copy() bool all_valid = false; if (LLSelectMgr::getInstance()) { - if (!LLSelectMgr::getInstance()->getSelection()->isEmpty()) + if (LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() > 0) { all_valid = true; #ifndef HACKED_GODLIKE_VIEWER @@ -9650,6 +9657,7 @@ void initialize_menus() commit.add("Object.Open", boost::bind(&handle_object_open)); commit.add("Object.Take", boost::bind(&handle_take)); commit.add("Object.ShowInspector", boost::bind(&handle_object_show_inspector)); + enable.add("Object.EnableInspect", boost::bind(&enable_object_inspect)); enable.add("Object.EnableOpen", boost::bind(&enable_object_open)); enable.add("Object.EnableTouch", boost::bind(&enable_object_touch, _1)); enable.add("Object.EnableDelete", boost::bind(&enable_object_delete)); -- cgit v1.2.3 From 11b9b6f5f826c26673b79360c79daae7061c9569 Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Tue, 24 Jan 2023 09:19:00 +0200 Subject: INTL-477 Translation update for Maint S --- .../skins/default/xui/de/floater_about_land.xml | 483 +- .../default/xui/de/floater_avatar_textures.xml | 34 +- .../skins/default/xui/de/floater_camera.xml | 55 +- .../default/xui/de/floater_camera_presets.xml | 2 + .../skins/default/xui/de/floater_forget_user.xml | 2 + .../skins/default/xui/de/floater_linkreplace.xml | 2 + .../skins/default/xui/de/floater_people.xml | 3 +- .../xui/de/floater_preferences_view_advanced.xml | 2 + .../skins/default/xui/de/floater_preview_trash.xml | 7 + .../default/xui/de/floater_save_camera_preset.xml | 7 + .../default/xui/de/menu_gallery_outfit_tab.xml | 23 + indra/newview/skins/default/xui/de/menu_viewer.xml | 12 +- .../newview/skins/default/xui/de/notifications.xml | 3125 +++----- .../xui/de/panel_group_creation_sidetray.xml | 30 + .../skins/default/xui/de/panel_group_roles.xml | 107 +- indra/newview/skins/default/xui/de/panel_login.xml | 20 +- .../xui/de/panel_notification_list_item.xml | 39 + .../skins/default/xui/de/panel_outfit_gallery.xml | 7 + .../default/xui/de/panel_outfit_gallery_item.xml | 7 + .../default/xui/de/panel_preferences_sound.xml | 23 +- .../default/xui/de/panel_prim_media_controls.xml | 11 +- .../skins/default/xui/de/panel_progress.xml | 10 + .../default/xui/de/panel_region_environment.xml | 100 +- indra/newview/skins/default/xui/de/strings.xml | 7784 +++++-------------- .../skins/default/xui/de/teleport_strings.xml | 123 +- .../skins/default/xui/de/widgets/density_ctrl.xml | 2 + .../xui/es/floater_animation_anim_preview.xml | 2 + .../xui/es/floater_animation_bvh_preview.xml | 45 + .../default/xui/es/floater_avatar_textures.xml | 30 +- .../skins/default/xui/es/floater_camera.xml | 55 +- .../default/xui/es/floater_camera_presets.xml | 2 + .../skins/default/xui/es/floater_forget_user.xml | 2 + .../skins/default/xui/es/floater_god_tools.xml | 63 +- .../skins/default/xui/es/floater_linkreplace.xml | 2 + .../skins/default/xui/es/floater_media_browser.xml | 14 +- .../skins/default/xui/es/floater_notification.xml | 2 + .../skins/default/xui/es/floater_people.xml | 3 +- .../xui/es/floater_preferences_view_advanced.xml | 2 + .../skins/default/xui/es/floater_preview_trash.xml | 7 + .../default/xui/es/floater_save_camera_preset.xml | 7 + .../newview/skins/default/xui/es/floater_stats.xml | 13 +- .../newview/skins/default/xui/es/floater_tools.xml | 307 +- .../default/xui/es/menu_gallery_outfit_tab.xml | 23 + indra/newview/skins/default/xui/es/menu_login.xml | 7 +- indra/newview/skins/default/xui/es/menu_viewer.xml | 80 +- .../newview/skins/default/xui/es/notifications.xml | 3239 +++----- .../skins/default/xui/es/panel_avatar_tag.xml | 7 + .../skins/default/xui/es/panel_chat_header.xml | 2 + .../xui/es/panel_group_creation_sidetray.xml | 30 + .../skins/default/xui/es/panel_group_roles.xml | 97 +- .../skins/default/xui/es/panel_instant_message.xml | 2 + .../skins/default/xui/es/panel_landmark_info.xml | 19 +- indra/newview/skins/default/xui/es/panel_login.xml | 20 +- .../xui/es/panel_notification_list_item.xml | 38 + .../default/xui/es/panel_notifications_channel.xml | 10 + .../skins/default/xui/es/panel_outfit_gallery.xml | 7 + .../default/xui/es/panel_outfit_gallery_item.xml | 7 + .../default/xui/es/panel_preferences_sound.xml | 25 +- .../default/xui/es/panel_prim_media_controls.xml | 19 +- .../skins/default/xui/es/panel_progress.xml | 10 + .../default/xui/es/panel_region_environment.xml | 100 +- .../skins/default/xui/es/sidepanel_appearance.xml | 7 +- indra/newview/skins/default/xui/es/strings.xml | 7654 +++++-------------- .../skins/default/xui/es/teleport_strings.xml | 119 +- .../skins/default/xui/es/widgets/density_ctrl.xml | 2 + .../default/xui/fr/floater_avatar_textures.xml | 30 +- .../skins/default/xui/fr/floater_camera.xml | 55 +- .../default/xui/fr/floater_camera_presets.xml | 2 + .../skins/default/xui/fr/floater_forget_user.xml | 2 + .../skins/default/xui/fr/floater_linkreplace.xml | 2 + .../skins/default/xui/fr/floater_people.xml | 3 +- .../xui/fr/floater_preferences_view_advanced.xml | 2 + .../skins/default/xui/fr/floater_preview_trash.xml | 7 + .../default/xui/fr/floater_save_camera_preset.xml | 7 + .../default/xui/fr/menu_gallery_outfit_tab.xml | 23 + indra/newview/skins/default/xui/fr/menu_viewer.xml | 75 +- .../newview/skins/default/xui/fr/notifications.xml | 3620 +++------ .../xui/fr/panel_group_creation_sidetray.xml | 30 + .../skins/default/xui/fr/panel_group_roles.xml | 115 +- indra/newview/skins/default/xui/fr/panel_login.xml | 22 +- .../xui/fr/panel_notification_list_item.xml | 39 + .../skins/default/xui/fr/panel_outfit_gallery.xml | 7 + .../default/xui/fr/panel_outfit_gallery_item.xml | 7 + .../default/xui/fr/panel_preferences_sound.xml | 31 +- .../default/xui/fr/panel_prim_media_controls.xml | 15 +- .../skins/default/xui/fr/panel_progress.xml | 10 + .../default/xui/fr/panel_region_environment.xml | 114 +- indra/newview/skins/default/xui/fr/strings.xml | 7816 +++++--------------- .../skins/default/xui/fr/teleport_strings.xml | 121 +- .../skins/default/xui/fr/widgets/density_ctrl.xml | 2 + .../default/xui/it/floater_avatar_textures.xml | 34 +- .../skins/default/xui/it/floater_camera.xml | 57 +- .../default/xui/it/floater_camera_presets.xml | 2 + .../skins/default/xui/it/floater_forget_user.xml | 2 + .../skins/default/xui/it/floater_god_tools.xml | 57 +- .../skins/default/xui/it/floater_linkreplace.xml | 2 + .../skins/default/xui/it/floater_media_browser.xml | 14 +- .../skins/default/xui/it/floater_notification.xml | 2 + .../xui/it/floater_notifications_console.xml | 2 + .../skins/default/xui/it/floater_people.xml | 3 +- .../xui/it/floater_preferences_view_advanced.xml | 2 + .../skins/default/xui/it/floater_preview_trash.xml | 9 + .../default/xui/it/floater_save_camera_preset.xml | 7 + .../newview/skins/default/xui/it/floater_stats.xml | 15 +- .../default/xui/it/menu_gallery_outfit_tab.xml | 23 + indra/newview/skins/default/xui/it/menu_login.xml | 3 +- indra/newview/skins/default/xui/it/menu_viewer.xml | 95 +- .../newview/skins/default/xui/it/notifications.xml | 3473 +++------ .../skins/default/xui/it/panel_avatar_tag.xml | 7 + .../skins/default/xui/it/panel_chat_header.xml | 2 + .../xui/it/panel_group_creation_sidetray.xml | 30 + .../skins/default/xui/it/panel_group_roles.xml | 103 +- .../skins/default/xui/it/panel_instant_message.xml | 6 + .../skins/default/xui/it/panel_landmark_info.xml | 21 +- indra/newview/skins/default/xui/it/panel_login.xml | 20 +- .../xui/it/panel_notification_list_item.xml | 44 + .../default/xui/it/panel_notifications_channel.xml | 10 + .../skins/default/xui/it/panel_outfit_gallery.xml | 11 + .../default/xui/it/panel_outfit_gallery_item.xml | 7 + .../skins/default/xui/it/panel_place_profile.xml | 41 +- .../default/xui/it/panel_preferences_sound.xml | 29 +- .../default/xui/it/panel_prim_media_controls.xml | 21 +- .../skins/default/xui/it/panel_progress.xml | 10 + .../default/xui/it/panel_region_environment.xml | 100 +- .../skins/default/xui/it/sidepanel_appearance.xml | 7 +- indra/newview/skins/default/xui/it/strings.xml | 7688 +++++-------------- .../skins/default/xui/it/teleport_strings.xml | 117 +- .../skins/default/xui/it/widgets/density_ctrl.xml | 2 + .../default/xui/ja/floater_avatar_textures.xml | 34 +- .../skins/default/xui/ja/floater_camera.xml | 55 +- .../default/xui/ja/floater_camera_presets.xml | 2 + .../skins/default/xui/ja/floater_forget_user.xml | 2 + .../skins/default/xui/ja/floater_linkreplace.xml | 2 + .../skins/default/xui/ja/floater_people.xml | 3 +- .../xui/ja/floater_preferences_view_advanced.xml | 2 + .../skins/default/xui/ja/floater_preview_trash.xml | 7 + .../default/xui/ja/floater_save_camera_preset.xml | 7 + .../default/xui/ja/menu_gallery_outfit_tab.xml | 23 + indra/newview/skins/default/xui/ja/menu_viewer.xml | 7 +- .../newview/skins/default/xui/ja/notifications.xml | 3164 +++----- .../xui/ja/panel_group_creation_sidetray.xml | 30 + .../skins/default/xui/ja/panel_group_roles.xml | 105 +- indra/newview/skins/default/xui/ja/panel_login.xml | 20 +- .../xui/ja/panel_notification_list_item.xml | 39 + .../skins/default/xui/ja/panel_outfit_gallery.xml | 7 + .../default/xui/ja/panel_outfit_gallery_item.xml | 7 + .../default/xui/ja/panel_preferences_sound.xml | 23 +- .../default/xui/ja/panel_prim_media_controls.xml | 11 +- .../skins/default/xui/ja/panel_progress.xml | 10 + .../default/xui/ja/panel_region_environment.xml | 100 +- indra/newview/skins/default/xui/ja/strings.xml | 7784 +++++-------------- .../skins/default/xui/ja/teleport_strings.xml | 125 +- .../skins/default/xui/ja/widgets/density_ctrl.xml | 2 + .../default/xui/pt/floater_avatar_textures.xml | 34 +- .../skins/default/xui/pt/floater_camera.xml | 55 +- .../default/xui/pt/floater_camera_presets.xml | 2 + .../skins/default/xui/pt/floater_forget_user.xml | 2 + .../skins/default/xui/pt/floater_god_tools.xml | 63 +- .../skins/default/xui/pt/floater_linkreplace.xml | 2 + .../skins/default/xui/pt/floater_media_browser.xml | 14 +- .../skins/default/xui/pt/floater_notification.xml | 2 + .../skins/default/xui/pt/floater_people.xml | 3 +- .../xui/pt/floater_preferences_view_advanced.xml | 2 + .../skins/default/xui/pt/floater_preview_trash.xml | 7 + .../default/xui/pt/floater_save_camera_preset.xml | 7 + .../newview/skins/default/xui/pt/floater_stats.xml | 13 +- .../default/xui/pt/menu_gallery_outfit_tab.xml | 23 + indra/newview/skins/default/xui/pt/menu_login.xml | 3 +- indra/newview/skins/default/xui/pt/menu_viewer.xml | 81 +- .../newview/skins/default/xui/pt/notifications.xml | 3208 +++----- .../skins/default/xui/pt/panel_avatar_tag.xml | 7 + .../skins/default/xui/pt/panel_chat_header.xml | 2 + .../xui/pt/panel_group_creation_sidetray.xml | 31 + .../skins/default/xui/pt/panel_group_roles.xml | 95 +- .../skins/default/xui/pt/panel_instant_message.xml | 2 + .../skins/default/xui/pt/panel_landmark_info.xml | 21 +- indra/newview/skins/default/xui/pt/panel_login.xml | 20 +- .../xui/pt/panel_notification_list_item.xml | 39 + .../default/xui/pt/panel_notifications_channel.xml | 10 + .../skins/default/xui/pt/panel_outfit_gallery.xml | 7 + .../default/xui/pt/panel_outfit_gallery_item.xml | 7 + .../default/xui/pt/panel_preferences_sound.xml | 23 +- .../default/xui/pt/panel_prim_media_controls.xml | 19 +- .../skins/default/xui/pt/panel_progress.xml | 10 + .../default/xui/pt/panel_region_environment.xml | 100 +- .../newview/skins/default/xui/pt/role_actions.xml | 41 +- .../skins/default/xui/pt/sidepanel_appearance.xml | 7 +- indra/newview/skins/default/xui/pt/strings.xml | 7618 +++++-------------- .../skins/default/xui/pt/teleport_strings.xml | 117 +- .../skins/default/xui/pt/widgets/density_ctrl.xml | 2 + 190 files changed, 20252 insertions(+), 51353 deletions(-) create mode 100644 indra/newview/skins/default/xui/de/floater_camera_presets.xml create mode 100644 indra/newview/skins/default/xui/de/floater_forget_user.xml create mode 100644 indra/newview/skins/default/xui/de/floater_linkreplace.xml create mode 100644 indra/newview/skins/default/xui/de/floater_preferences_view_advanced.xml create mode 100644 indra/newview/skins/default/xui/de/floater_preview_trash.xml create mode 100644 indra/newview/skins/default/xui/de/floater_save_camera_preset.xml create mode 100644 indra/newview/skins/default/xui/de/menu_gallery_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/de/panel_group_creation_sidetray.xml create mode 100644 indra/newview/skins/default/xui/de/panel_notification_list_item.xml create mode 100644 indra/newview/skins/default/xui/de/panel_outfit_gallery.xml create mode 100644 indra/newview/skins/default/xui/de/panel_outfit_gallery_item.xml create mode 100644 indra/newview/skins/default/xui/de/panel_progress.xml create mode 100644 indra/newview/skins/default/xui/de/widgets/density_ctrl.xml create mode 100644 indra/newview/skins/default/xui/es/floater_animation_anim_preview.xml create mode 100644 indra/newview/skins/default/xui/es/floater_animation_bvh_preview.xml create mode 100644 indra/newview/skins/default/xui/es/floater_camera_presets.xml create mode 100644 indra/newview/skins/default/xui/es/floater_forget_user.xml create mode 100644 indra/newview/skins/default/xui/es/floater_linkreplace.xml create mode 100644 indra/newview/skins/default/xui/es/floater_notification.xml create mode 100644 indra/newview/skins/default/xui/es/floater_preferences_view_advanced.xml create mode 100644 indra/newview/skins/default/xui/es/floater_preview_trash.xml create mode 100644 indra/newview/skins/default/xui/es/floater_save_camera_preset.xml create mode 100644 indra/newview/skins/default/xui/es/menu_gallery_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/es/panel_avatar_tag.xml create mode 100644 indra/newview/skins/default/xui/es/panel_chat_header.xml create mode 100644 indra/newview/skins/default/xui/es/panel_group_creation_sidetray.xml create mode 100644 indra/newview/skins/default/xui/es/panel_instant_message.xml create mode 100644 indra/newview/skins/default/xui/es/panel_notification_list_item.xml create mode 100644 indra/newview/skins/default/xui/es/panel_notifications_channel.xml create mode 100644 indra/newview/skins/default/xui/es/panel_outfit_gallery.xml create mode 100644 indra/newview/skins/default/xui/es/panel_outfit_gallery_item.xml create mode 100644 indra/newview/skins/default/xui/es/panel_progress.xml create mode 100644 indra/newview/skins/default/xui/es/widgets/density_ctrl.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_camera_presets.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_forget_user.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_linkreplace.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_preferences_view_advanced.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_preview_trash.xml create mode 100644 indra/newview/skins/default/xui/fr/floater_save_camera_preset.xml create mode 100644 indra/newview/skins/default/xui/fr/menu_gallery_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_group_creation_sidetray.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_notification_list_item.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_outfit_gallery.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_outfit_gallery_item.xml create mode 100644 indra/newview/skins/default/xui/fr/panel_progress.xml create mode 100644 indra/newview/skins/default/xui/fr/widgets/density_ctrl.xml create mode 100644 indra/newview/skins/default/xui/it/floater_camera_presets.xml create mode 100644 indra/newview/skins/default/xui/it/floater_forget_user.xml create mode 100644 indra/newview/skins/default/xui/it/floater_linkreplace.xml create mode 100644 indra/newview/skins/default/xui/it/floater_notification.xml create mode 100644 indra/newview/skins/default/xui/it/floater_notifications_console.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preferences_view_advanced.xml create mode 100644 indra/newview/skins/default/xui/it/floater_preview_trash.xml create mode 100644 indra/newview/skins/default/xui/it/floater_save_camera_preset.xml create mode 100644 indra/newview/skins/default/xui/it/menu_gallery_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/it/panel_avatar_tag.xml create mode 100644 indra/newview/skins/default/xui/it/panel_chat_header.xml create mode 100644 indra/newview/skins/default/xui/it/panel_group_creation_sidetray.xml create mode 100644 indra/newview/skins/default/xui/it/panel_instant_message.xml create mode 100644 indra/newview/skins/default/xui/it/panel_notification_list_item.xml create mode 100644 indra/newview/skins/default/xui/it/panel_notifications_channel.xml create mode 100644 indra/newview/skins/default/xui/it/panel_outfit_gallery.xml create mode 100644 indra/newview/skins/default/xui/it/panel_outfit_gallery_item.xml create mode 100644 indra/newview/skins/default/xui/it/panel_progress.xml create mode 100644 indra/newview/skins/default/xui/it/widgets/density_ctrl.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_camera_presets.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_forget_user.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_linkreplace.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_preferences_view_advanced.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_preview_trash.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_save_camera_preset.xml create mode 100644 indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_group_creation_sidetray.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_notification_list_item.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_outfit_gallery.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_outfit_gallery_item.xml create mode 100644 indra/newview/skins/default/xui/ja/panel_progress.xml create mode 100644 indra/newview/skins/default/xui/ja/widgets/density_ctrl.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_camera_presets.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_forget_user.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_linkreplace.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_notification.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_preferences_view_advanced.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_preview_trash.xml create mode 100644 indra/newview/skins/default/xui/pt/floater_save_camera_preset.xml create mode 100644 indra/newview/skins/default/xui/pt/menu_gallery_outfit_tab.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_avatar_tag.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_chat_header.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_group_creation_sidetray.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_instant_message.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_notification_list_item.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_notifications_channel.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_outfit_gallery.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_outfit_gallery_item.xml create mode 100644 indra/newview/skins/default/xui/pt/panel_progress.xml create mode 100644 indra/newview/skins/default/xui/pt/widgets/density_ctrl.xml diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml index 8f55b3297f..bb9ab26ef5 100644 --- a/indra/newview/skins/default/xui/de/floater_about_land.xml +++ b/indra/newview/skins/default/xui/de/floater_about_land.xml @@ -1,146 +1,58 @@ - + - - "Parcel_PG_Dark" - - - "Parcel_M_Dark" - - - "Parcel_R_Dark" - - - [HOURS] Stunden - - - Std. - - - [MINUTES] Min. - - - Min. - - - [SECONDS] Sek. - - - Restzeit - - - Immer - + "Parcel_PG_Dark" + "Parcel_M_Dark" + "Parcel_R_Dark" + [HOURS] Stunden + Std. + [MINUTES] Min. + Min. + [SECONDS] Sek. + Restzeit + Immer - - Nur neue Benutzer - - - Jeder - - - Gebiet: - - - [AREA] m². - - - Auktions-ID: [ID] - - - Bestätigen Sie den Kauf, um dieses Land zu bearbeiten. - - - (In Gruppenbesitz) - - - Profil - - - Info - - - (öffentlich) - - - (keiner) - - - (Wird verkauft) - - - Keine Parzelle ausgewählt. - - - [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] - - - Name: - - - Beschreibung: - - - Typ: - - - Mainland / Homestead - - - Einstufung: - - - Adult - - - Eigentümer: - - - Gruppe: - + Nur neue Benutzer + Jeder + Gebiet: + [AREA] m². + Auktions-ID: [ID] + Bestätigen Sie den Kauf, um dieses Land zu bearbeiten. + (In Gruppenbesitz) + Profil + Info + (öffentlich) + (keiner) + (Wird verkauft) + Keine Parzelle ausgewählt. + [wkday,datetime,local] [mth,datetime,local] [day,datetime,local] [hour,datetime,local]:[min,datetime,local]:[second,datetime,local] [year,datetime,local] + Name: + Beschreibung: + Typ: + Mainland / Homestead + Einstufung: + Adult + Eigentümer: + Gruppe: