summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rwxr-xr-xindra/llui/llradiogroup.cpp12
-rwxr-xr-xindra/newview/app_settings/settings.xml11
-rwxr-xr-xindra/newview/app_settings/settings_per_account.xml13
-rwxr-xr-xindra/newview/llappearancemgr.cpp2
-rwxr-xr-xindra/newview/llappviewer.cpp22
-rwxr-xr-xindra/newview/llfloaterland.cpp162
-rwxr-xr-xindra/newview/llfloaterregioninfo.cpp81
-rwxr-xr-xindra/newview/llfloaterregioninfo.h7
-rwxr-xr-xindra/newview/llfloatertopobjects.cpp11
-rwxr-xr-xindra/newview/llhudtext.cpp5
-rwxr-xr-xindra/newview/llinventorymodel.cpp5
-rwxr-xr-xindra/newview/llinventoryobserver.cpp6
-rwxr-xr-xindra/newview/llinventorypanel.cpp5
-rwxr-xr-xindra/newview/llmanipscale.cpp2
-rwxr-xr-xindra/newview/llnavigationbar.cpp36
-rwxr-xr-xindra/newview/llnavigationbar.h6
-rw-r--r--indra/newview/llpanelgroupexperiences.cpp4
-rwxr-xr-xindra/newview/llpersistentnotificationstorage.cpp25
-rwxr-xr-xindra/newview/lltexturecache.cpp1
-rwxr-xr-xindra/newview/lltoast.cpp4
-rwxr-xr-xindra/newview/llviewermessage.cpp21
-rw-r--r--indra/newview/llvieweroctree.cpp12
-rwxr-xr-xindra/newview/llvoavatar.cpp7
-rwxr-xr-xindra/newview/skins/default/xui/da/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_about_land.xml7
-rwxr-xr-xindra/newview/skins/default/xui/en/notifications.xml27
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_graphics1.xml1
-rwxr-xr-xindra/newview/skins/default/xui/en/role_actions.xml3
-rwxr-xr-xindra/newview/skins/default/xui/en/strings.xml2
-rwxr-xr-xindra/newview/skins/default/xui/es/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/fr/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/it/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ja/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pl/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/pt/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/strings.xml6
-rwxr-xr-xindra/newview/skins/default/xui/tr/notifications.xml2
-rwxr-xr-xindra/newview/skins/default/xui/zh/notifications.xml2
40 files changed, 397 insertions, 131 deletions
diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp
index b53bb16d97..8cf72928ff 100755
--- a/indra/llui/llradiogroup.cpp
+++ b/indra/llui/llradiogroup.cpp
@@ -179,6 +179,18 @@ BOOL LLRadioGroup::setSelectedIndex(S32 index, BOOL from_event)
return FALSE;
}
+ if (index < -1)
+ {
+ // less then minimum value
+ return FALSE;
+ }
+
+ if (index < 0 && mSelectedIndex >= 0 && !mAllowDeselect)
+ {
+ // -1 is "nothing selected"
+ return FALSE;
+ }
+
if (mSelectedIndex >= 0)
{
LLRadioCtrl* old_radio_item = mRadioButtons[mSelectedIndex];
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4a69133fde..0ac2dcc86c 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -8160,6 +8160,17 @@
<key>Value</key>
<integer>256</integer>
</map>
+ <key>RegionCheckTextureHeights</key>
+ <map>
+ <key>Comment</key>
+ <string>Don't allow user to set low heights greater than high</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>RememberPassword</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index c62b45ed81..fd6b1b5b3f 100755
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -98,7 +98,18 @@
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
- </map>
+ </map>
+ <key>NavigationBarRatio</key>
+ <map>
+ <key>Comment</key>
+ <string>The ratio between the width of Navigation layout panel and the width of whole Navigation layout stack</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.6</real>
+ </map>
<key>InstantMessageLogPath</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 3d9b1a72a8..cec019d46d 100755
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -2055,7 +2055,7 @@ void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append)
}
const LLUUID& base_id = append ? getBaseOutfitUUID() : category;
LLViewerInventoryCategory *base_cat = gInventory.getCategory(base_id);
- if (base_cat)
+ if (base_cat && (base_cat->getPreferredType() == LLFolderType::FT_OUTFIT))
{
LLSD base_contents;
base_contents["name"] = base_cat->getName();
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 2898d8ca31..e1d5153c16 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -5374,13 +5374,21 @@ void LLAppViewer::idleExperienceCache()
{
LLViewerRegion* region = gAgent.getRegion();
if (!region) return;
-
- std::string lookup_url=region->getCapability("GetExperienceInfo");
- if(!lookup_url.empty() && *lookup_url.rbegin() != '/')
- {
- lookup_url += '/';
- }
-
+
+ std::string lookup_url;
+ if (region->capabilitiesReceived())
+ {
+ lookup_url = region->getCapability("GetExperienceInfo");
+ if (!lookup_url.empty() && *lookup_url.rbegin() != '/')
+ {
+ lookup_url += '/';
+ }
+ }
+ else
+ {
+ LL_WARNS_ONCE() << "GetExperienceInfo capability is not yet recieved" << LL_ENDL;
+ }
+
LLExperienceCache::setLookupURL(lookup_url);
LLExperienceCache::idle();
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index f9fd5069af..7f952d4dd4 100755
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -39,6 +39,7 @@
#include "llagent.h"
#include "llagentaccess.h"
+#include "llappviewer.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
#include "llcombobox.h"
@@ -475,13 +476,36 @@ BOOL LLPanelLandGeneral::postBuild()
mBtnBuyLand = getChild<LLButton>("Buy Land...");
mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND);
+
+ mBtnBuyGroupLand = getChild<LLButton>("Buy For Group...");
+ mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND);
+
+
+ mBtnBuyPass = getChild<LLButton>("Buy Pass...");
+ mBtnBuyPass->setClickedCallback(onClickBuyPass, this);
+
+ mBtnReleaseLand = getChild<LLButton>("Abandon Land...");
+ mBtnReleaseLand->setClickedCallback(onClickRelease, NULL);
+
+ mBtnReclaimLand = getChild<LLButton>("Reclaim Land...");
+ mBtnReclaimLand->setClickedCallback(onClickReclaim, NULL);
+
+ mBtnStartAuction = getChild<LLButton>("Linden Sale...");
+ mBtnStartAuction->setClickedCallback(onClickStartAuction, this);
+
+ mBtnScriptLimits = getChild<LLButton>("Scripts...");
+
+ if(gDisconnected)
+ {
+ return TRUE;
+ }
+
// note: on region change this will not be re checked, should not matter on Agni as
// 99% of the time all regions will return the same caps. In case of an erroneous setting
// to enabled the floater will just throw an error when trying to get it's cap
std::string url = gAgent.getRegion()->getCapability("LandResources");
if (!url.empty())
{
- mBtnScriptLimits = getChild<LLButton>("Scripts...");
if(mBtnScriptLimits)
{
mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this);
@@ -489,28 +513,11 @@ BOOL LLPanelLandGeneral::postBuild()
}
else
{
- mBtnScriptLimits = getChild<LLButton>("Scripts...");
if(mBtnScriptLimits)
{
mBtnScriptLimits->setVisible(false);
}
}
-
- mBtnBuyGroupLand = getChild<LLButton>("Buy For Group...");
- mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND);
-
-
- mBtnBuyPass = getChild<LLButton>("Buy Pass...");
- mBtnBuyPass->setClickedCallback(onClickBuyPass, this);
-
- mBtnReleaseLand = getChild<LLButton>("Abandon Land...");
- mBtnReleaseLand->setClickedCallback(onClickRelease, NULL);
-
- mBtnReclaimLand = getChild<LLButton>("Reclaim Land...");
- mBtnReclaimLand->setClickedCallback(onClickReclaim, NULL);
-
- mBtnStartAuction = getChild<LLButton>("Linden Sale...");
- mBtnStartAuction->setClickedCallback(onClickStartAuction, this);
return TRUE;
}
@@ -524,9 +531,58 @@ LLPanelLandGeneral::~LLPanelLandGeneral()
// public
void LLPanelLandGeneral::refresh()
{
- mBtnStartAuction->setVisible(gAgent.isGodlike());
+ mEditName->setEnabled(FALSE);
+ mEditName->setText(LLStringUtil::null);
- LLParcel *parcel = mParcel->getParcel();
+ mEditDesc->setEnabled(FALSE);
+ mEditDesc->setText(getString("no_selection_text"));
+
+ mTextSalePending->setText(LLStringUtil::null);
+ mTextSalePending->setEnabled(FALSE);
+
+ mBtnDeedToGroup->setEnabled(FALSE);
+ mBtnSetGroup->setEnabled(FALSE);
+ mBtnStartAuction->setEnabled(FALSE);
+
+ mCheckDeedToGroup ->set(FALSE);
+ mCheckDeedToGroup ->setEnabled(FALSE);
+ mCheckContributeWithDeed->set(FALSE);
+ mCheckContributeWithDeed->setEnabled(FALSE);
+
+ mTextOwner->setText(LLStringUtil::null);
+ mContentRating->setText(LLStringUtil::null);
+ mLandType->setText(LLStringUtil::null);
+ mBtnProfile->setLabel(getString("profile_text"));
+ mBtnProfile->setEnabled(FALSE);
+
+ mTextClaimDate->setText(LLStringUtil::null);
+ mTextGroup->setText(LLStringUtil::null);
+ mTextPrice->setText(LLStringUtil::null);
+
+ mSaleInfoForSale1->setVisible(FALSE);
+ mSaleInfoForSale2->setVisible(FALSE);
+ mSaleInfoForSaleObjects->setVisible(FALSE);
+ mSaleInfoForSaleNoObjects->setVisible(FALSE);
+ mSaleInfoNotForSale->setVisible(FALSE);
+ mBtnSellLand->setVisible(FALSE);
+ mBtnStopSellLand->setVisible(FALSE);
+
+ mTextPriceLabel->setText(LLStringUtil::null);
+ mTextDwell->setText(LLStringUtil::null);
+
+ mBtnBuyLand->setEnabled(FALSE);
+ mBtnScriptLimits->setEnabled(FALSE);
+ mBtnBuyGroupLand->setEnabled(FALSE);
+ mBtnReleaseLand->setEnabled(FALSE);
+ mBtnReclaimLand->setEnabled(FALSE);
+ mBtnBuyPass->setEnabled(FALSE);
+
+ if(gDisconnected)
+ {
+ return;
+ }
+
+ mBtnStartAuction->setVisible(gAgent.isGodlike());
bool region_owner = false;
LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if(regionp && (regionp->getOwner() == gAgent.getID()))
@@ -540,56 +596,8 @@ void LLPanelLandGeneral::refresh()
mBtnReleaseLand->setVisible(TRUE);
mBtnReclaimLand->setVisible(FALSE);
}
- if (!parcel)
- {
- // nothing selected, disable panel
- mEditName->setEnabled(FALSE);
- mEditName->setText(LLStringUtil::null);
-
- mEditDesc->setEnabled(FALSE);
- mEditDesc->setText(getString("no_selection_text"));
-
- mTextSalePending->setText(LLStringUtil::null);
- mTextSalePending->setEnabled(FALSE);
-
- mBtnDeedToGroup->setEnabled(FALSE);
- mBtnSetGroup->setEnabled(FALSE);
- mBtnStartAuction->setEnabled(FALSE);
-
- mCheckDeedToGroup ->set(FALSE);
- mCheckDeedToGroup ->setEnabled(FALSE);
- mCheckContributeWithDeed->set(FALSE);
- mCheckContributeWithDeed->setEnabled(FALSE);
-
- mTextOwner->setText(LLStringUtil::null);
- mContentRating->setText(LLStringUtil::null);
- mLandType->setText(LLStringUtil::null);
- mBtnProfile->setLabel(getString("profile_text"));
- mBtnProfile->setEnabled(FALSE);
-
- mTextClaimDate->setText(LLStringUtil::null);
- mTextGroup->setText(LLStringUtil::null);
- mTextPrice->setText(LLStringUtil::null);
-
- mSaleInfoForSale1->setVisible(FALSE);
- mSaleInfoForSale2->setVisible(FALSE);
- mSaleInfoForSaleObjects->setVisible(FALSE);
- mSaleInfoForSaleNoObjects->setVisible(FALSE);
- mSaleInfoNotForSale->setVisible(FALSE);
- mBtnSellLand->setVisible(FALSE);
- mBtnStopSellLand->setVisible(FALSE);
-
- mTextPriceLabel->setText(LLStringUtil::null);
- mTextDwell->setText(LLStringUtil::null);
-
- mBtnBuyLand->setEnabled(FALSE);
- mBtnScriptLimits->setEnabled(FALSE);
- mBtnBuyGroupLand->setEnabled(FALSE);
- mBtnReleaseLand->setEnabled(FALSE);
- mBtnReclaimLand->setEnabled(FALSE);
- mBtnBuyPass->setEnabled(FALSE);
- }
- else
+ LLParcel *parcel = mParcel->getParcel();
+ if (parcel)
{
// something selected, hooray!
BOOL is_leased = (LLParcel::OS_LEASED == parcel->getOwnershipStatus());
@@ -1246,7 +1254,7 @@ void LLPanelLandObjects::refresh()
mOwnerList->deleteAllItems();
mOwnerList->setEnabled(FALSE);
- if (!parcel)
+ if (!parcel || gDisconnected)
{
mSWTotalObjects->setTextArg("[COUNT]", llformat("%d", 0));
mSWTotalObjects->setTextArg("[TOTAL]", llformat("%d", 0));
@@ -1974,7 +1982,7 @@ void LLPanelLandOptions::refresh()
refreshSearch();
LLParcel *parcel = mParcel->getParcel();
- if (!parcel)
+ if (!parcel || gDisconnected)
{
mCheckEditObjects ->set(FALSE);
mCheckEditObjects ->setEnabled(FALSE);
@@ -2154,7 +2162,7 @@ void LLPanelLandOptions::draw()
void LLPanelLandOptions::refreshSearch()
{
LLParcel *parcel = mParcel->getParcel();
- if (!parcel)
+ if (!parcel || gDisconnected)
{
mCheckShowDirectory->set(FALSE);
mCheckShowDirectory->setEnabled(FALSE);
@@ -2419,7 +2427,7 @@ void LLPanelLandAccess::refresh()
LLParcel *parcel = mParcel->getParcel();
// Display options
- if (parcel)
+ if (parcel && !gDisconnected)
{
BOOL use_access_list = parcel->getParcelFlag(PF_USE_ACCESS_LIST);
BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP);
@@ -2599,7 +2607,7 @@ void LLPanelLandAccess::refresh_ui()
getChildView("remove_banned")->setEnabled(FALSE);
LLParcel *parcel = mParcel->getParcel();
- if (parcel)
+ if (parcel && !gDisconnected)
{
BOOL can_manage_allowed = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_ALLOWED);
BOOL can_manage_banned = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_MANAGE_BANNED);
@@ -2945,7 +2953,7 @@ BOOL LLPanelLandCovenant::postBuild()
void LLPanelLandCovenant::refresh()
{
LLViewerRegion* region = LLViewerParcelMgr::getInstance()->getSelectionRegion();
- if(!region) return;
+ if(!region || gDisconnected) return;
LLTextBox* region_name = getChild<LLTextBox>("region_name_text");
if (region_name)
@@ -3170,7 +3178,7 @@ void LLPanelLandExperiences::refreshPanel(LLPanelExperienceListEditor* panel, U3
{
return;
}
- if (parcel == NULL)
+ if (!parcel || gDisconnected)
{
// disable the panel
panel->setEnabled(FALSE);
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 16566bea73..bbde0baa8f 100755
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -232,6 +232,11 @@ BOOL LLFloaterRegionInfo::postBuild()
panel->buildFromFile("panel_region_debug.xml");
mTab->addTabPanel(panel);
+ if(gDisconnected)
+ {
+ return TRUE;
+ }
+
if(!gAgent.getRegion()->getCapability("RegionExperiences").empty())
{
panel = new LLPanelRegionExperiences;
@@ -255,6 +260,11 @@ LLFloaterRegionInfo::~LLFloaterRegionInfo()
void LLFloaterRegionInfo::onOpen(const LLSD& key)
{
+ if(gDisconnected)
+ {
+ disableTabCtrls();
+ return;
+ }
refreshFromRegion(gAgent.getRegion());
requestRegionInfo();
requestMeshRezInfo();
@@ -478,7 +488,16 @@ LLPanelRegionExperiences* LLFloaterRegionInfo::getPanelExperiences()
return (LLPanelRegionExperiences*)tab->getChild<LLPanel>("Experiences");
}
+void LLFloaterRegionInfo::disableTabCtrls()
+{
+ LLTabContainer* tab = getChild<LLTabContainer>("region_panels");
+ tab->getChild<LLPanel>("General")->setCtrlsEnabled(FALSE);
+ tab->getChild<LLPanel>("Debug")->setCtrlsEnabled(FALSE);
+ tab->getChild<LLPanel>("Terrain")->setCtrlsEnabled(FALSE);
+ tab->getChild<LLPanel>("panel_env_info")->setCtrlsEnabled(FALSE);
+ tab->getChild<LLPanel>("Estate")->setCtrlsEnabled(FALSE);
+}
void LLFloaterRegionInfo::onTabSelected(const LLSD& param)
{
@@ -1184,6 +1203,22 @@ BOOL LLPanelRegionTerrainInfo::validateTextureSizes()
return TRUE;
}
+BOOL LLPanelRegionTerrainInfo::validateTextureHeights()
+{
+ for (S32 i = 0; i < CORNER_COUNT; ++i)
+ {
+ std::string low = llformat("height_start_spin_%d", i);
+ std::string high = llformat("height_range_spin_%d", i);
+
+ if (getChild<LLUICtrl>(low)->getValue().asReal() > getChild<LLUICtrl>(high)->getValue().asReal())
+ {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
/////////////////////////////////////////////////////////////////////////////
// LLPanelRegionTerrainInfo
/////////////////////////////////////////////////////////////////////////////
@@ -1216,6 +1251,9 @@ BOOL LLPanelRegionTerrainInfo::postBuild()
childSetAction("upload_raw_btn", onClickUploadRaw, this);
childSetAction("bake_terrain_btn", onClickBakeTerrain, this);
+ mAskedTextureHeights = false;
+ mConfirmedTextureHeights = false;
+
return LLPanelRegionInfo::postBuild();
}
@@ -1298,6 +1336,21 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
return FALSE;
}
+ // Check if terrain Elevation Ranges are correct
+ if (gSavedSettings.getBOOL("RegionCheckTextureHeights") && !validateTextureHeights())
+ {
+ if (!mAskedTextureHeights)
+ {
+ LLNotificationsUtil::add("ConfirmTextureHeights", LLSD(), LLSD(), boost::bind(&LLPanelRegionTerrainInfo::callbackTextureHeights, this, _1, _2));
+ mAskedTextureHeights = true;
+ return FALSE;
+ }
+ else if (!mConfirmedTextureHeights)
+ {
+ return FALSE;
+ }
+ }
+
LLTextureCtrl* texture_ctrl;
std::string id_str;
LLMessageSystem* msg = gMessageSystem;
@@ -1338,6 +1391,29 @@ BOOL LLPanelRegionTerrainInfo::sendUpdate()
return TRUE;
}
+bool LLPanelRegionTerrainInfo::callbackTextureHeights(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option == 0) // ok
+ {
+ mConfirmedTextureHeights = true;
+ }
+ else if (option == 1) // cancel
+ {
+ mConfirmedTextureHeights = false;
+ }
+ else if (option == 2) // don't ask
+ {
+ gSavedSettings.setBOOL("RegionCheckTextureHeights", FALSE);
+ mConfirmedTextureHeights = true;
+ }
+
+ onBtnSet();
+
+ mAskedTextureHeights = false;
+ return false;
+}
+
// static
void LLPanelRegionTerrainInfo::onClickDownloadRaw(void* data)
{
@@ -3072,6 +3148,11 @@ bool LLPanelEnvironmentInfo::refreshFromRegion(LLViewerRegion* region)
void LLPanelEnvironmentInfo::refresh()
{
+ if(gDisconnected)
+ {
+ return;
+ }
+
populateWaterPresetsList();
populateSkyPresetsList();
populateDayCyclesList();
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
index e7b49d8553..7bbd1b79ee 100755
--- a/indra/newview/llfloaterregioninfo.h
+++ b/indra/newview/llfloaterregioninfo.h
@@ -110,6 +110,7 @@ private:
protected:
void onTabSelected(const LLSD& param);
+ void disableTabCtrls();
void refreshFromRegion(LLViewerRegion* region);
// member data
@@ -237,6 +238,7 @@ public:
void setEnvControls(bool available); // Whether environment settings are available for this region
BOOL validateTextureSizes();
+ BOOL validateTextureHeights();
//static void onChangeAnything(LLUICtrl* ctrl, void* userData); // callback for any change, to enable commit button
@@ -246,6 +248,11 @@ public:
static void onClickUploadRaw(void*);
static void onClickBakeTerrain(void*);
bool callbackBakeTerrain(const LLSD& notification, const LLSD& response);
+ bool callbackTextureHeights(const LLSD& notification, const LLSD& response);
+
+private:
+ bool mConfirmedTextureHeights;
+ bool mAskedTextureHeights;
};
/////////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index f8681fe098..e20360066e 100755
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -183,10 +183,15 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
msg->getF32("DataExtended", "MonoScore", mono_score, block);
msg->getS32("DataExtended", "PublicURLs", public_urls, block);
- if (msg->getSize("DataExtended", "ParcelName") > 0)
+
+ std::string parcel_name;
+ F32 script_size = 0.f;
+ msg->getString("DataExtended", "ParcelName", parcel_name, block);
+ msg->getF32("DataExtended", "Size", script_size, block);
+ if (parcel_name.size() > 0 || script_size > 0)
{
- msg->getString("DataExtended", "ParcelName", parcel_buf, block);
- msg->getF32("DataExtended", "Size", script_memory, block);
+ parcel_buf = parcel_name;
+ script_memory = script_size;
}
}
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
index 3ab89b6e5f..c87e2fb658 100755
--- a/indra/newview/llhudtext.cpp
+++ b/indra/newview/llhudtext.cpp
@@ -385,13 +385,16 @@ void LLHUDText::updateVisibility()
}
mLastDistance = (mPositionAgent - LLViewerCamera::getInstance()->getOrigin()).magVec();
- F32 obj_dist = dist_vec(mSourceObject->getPosition(), LLViewerCamera::getInstance()->getOrigin());
+
+ F32 obj_dist = dist_vec(mSourceObject->getPositionEdit(), LLViewerCamera::getInstance()->getOrigin());
+
if (!mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange)) || (obj_dist > MAX_DRAW_DISTANCE))
{
mVisible = FALSE;
return;
}
+
LLVector3 x_pixel_vec;
LLVector3 y_pixel_vec;
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index e123a3e68a..1ae8fc418f 100755
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -3418,6 +3418,11 @@ void LLInventoryModel::removeCategory(const LLUUID& category_id)
void LLInventoryModel::removeObject(const LLUUID& object_id)
{
+ if(object_id.isNull())
+ {
+ return;
+ }
+
LLInventoryObject* obj = getObject(object_id);
if (dynamic_cast<LLViewerInventoryItem*>(obj))
{
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index d81401b59b..9480dfdc4d 100755
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -306,6 +306,12 @@ void LLInventoryFetchItemsObserver::startFetch()
continue;
}
+ if ((*it).isNull())
+ {
+ LL_WARNS("Inventory") << "Skip fetching for a NULL uuid" << LL_ENDL;
+ continue;
+ }
+
// It's incomplete, so put it on the incomplete container, and
// pack this on the message.
mIncomplete.push_back(*it);
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 5194cba891..4ffd3d727a 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -1332,6 +1332,11 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L
}
else
{
+ LLFloater* floater_inventory = LLFloaterReg::getInstance("inventory");
+ if (floater_inventory)
+ {
+ floater_inventory->setFocus(TRUE);
+ }
active_panel->setSelection(obj_id, TAKE_FOCUS_YES);
}
}
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index 85faa70552..3cbe742e3c 100755
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -2081,7 +2081,7 @@ BOOL LLManipScale::canAffectSelection()
{
LLViewerObject *root_object = (objectp == NULL) ? NULL : objectp->getRootEdit();
return objectp->permModify() && objectp->permMove() && !objectp->isPermanentEnforced() &&
- ((root_object == NULL) || !root_object->isPermanentEnforced()) &&
+ (root_object == NULL || (!root_object->isPermanentEnforced() && !root_object->isSeat())) &&
!objectp->isSeat();
}
} func;
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 8c4849d28d..84a2cd8be1 100755
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -44,6 +44,7 @@
#include "lllocationinputctrl.h"
#include "llpaneltopinfobar.h"
#include "llteleporthistory.h"
+#include "llresizebar.h"
#include "llsearchcombobox.h"
#include "llslurl.h"
#include "llurlregistry.h"
@@ -267,7 +268,10 @@ LLNavigationBar::LLNavigationBar()
mBtnForward(NULL),
mBtnHome(NULL),
mCmbLocation(NULL),
- mSaveToLocationHistory(false)
+ mSaveToLocationHistory(false),
+ mNavigationPanel(NULL),
+ mFavoritePanel(NULL),
+ mNavPanWidth(0)
{
buildFromFile( "panel_navigation_bar.xml");
@@ -286,7 +290,7 @@ BOOL LLNavigationBar::postBuild()
mBtnBack = getChild<LLPullButton>("back_btn");
mBtnForward = getChild<LLPullButton>("forward_btn");
mBtnHome = getChild<LLButton>("home_btn");
-
+
mCmbLocation= getChild<LLLocationInputCtrl>("location_combo");
mBtnBack->setEnabled(FALSE);
@@ -318,6 +322,11 @@ BOOL LLNavigationBar::postBuild()
LLHints::registerHintTarget("nav_bar", getHandle());
+ mNavigationPanel = getChild<LLLayoutPanel>("navigation_layout_panel");
+ mFavoritePanel = getChild<LLLayoutPanel>("favorites_layout_panel");
+ mNavigationPanel->getResizeBar()->setResizeListener(boost::bind(&LLNavigationBar::onNavbarResized, this));
+ mFavoritePanel->getResizeBar()->setResizeListener(boost::bind(&LLNavigationBar::onNavbarResized, this));
+
return TRUE;
}
@@ -356,7 +365,6 @@ BOOL LLNavigationBar::handleRightMouseDown(S32 x, S32 y, MASK mask)
show_navbar_context_menu(this,x,y);
handled = true;
}
-
return handled;
}
@@ -365,6 +373,18 @@ void LLNavigationBar::onBackButtonClicked()
LLTeleportHistory::getInstance()->goBack();
}
+void LLNavigationBar::onNavbarResized()
+{
+ S32 new_nav_pan_width = mNavigationPanel->getRect().getWidth();
+ if(mNavPanWidth != new_nav_pan_width)
+ {
+ S32 new_stack_width = new_nav_pan_width + mFavoritePanel->getRect().getWidth();
+ F32 ratio = (F32)new_nav_pan_width / (F32)new_stack_width;
+ gSavedPerAccountSettings.setF32("NavigationBarRatio", ratio);
+ mNavPanWidth = new_nav_pan_width;
+ }
+}
+
void LLNavigationBar::onBackOrForwardButtonHeldDown(LLUICtrl* ctrl, const LLSD& param)
{
if (param["count"].asInteger() == 0)
@@ -667,8 +687,18 @@ void LLNavigationBar::handleLoginComplete()
LLTeleportHistory::getInstance()->handleLoginComplete();
LLPanelTopInfoBar::instance().handleLoginComplete();
mCmbLocation->handleLoginComplete();
+ resizeLayoutPanel();
}
+void LLNavigationBar::resizeLayoutPanel()
+{
+ LLRect nav_bar_rect = mNavigationPanel->getRect();
+
+ S32 nav_panel_width = (nav_bar_rect.getWidth() + mFavoritePanel->getRect().getWidth()) * gSavedPerAccountSettings.getF32("NavigationBarRatio");
+
+ nav_bar_rect.setLeftTopAndSize(nav_bar_rect.mLeft, nav_bar_rect.mTop, nav_panel_width, nav_bar_rect.getHeight());
+ mNavigationPanel->handleReshape(nav_bar_rect,true);
+}
void LLNavigationBar::invokeSearch(std::string search_text)
{
LLFloaterReg::showInstance("search", LLSD().with("category", "all").with("query", LLSD(search_text)));
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 7878bab24e..29dbaedf7a 100755
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -29,6 +29,7 @@
#include "llpanel.h"
#include "llbutton.h"
+#include "lllayoutstack.h"
class LLLocationInputCtrl;
class LLMenuGL;
@@ -108,6 +109,7 @@ private:
void rebuildTeleportHistoryMenu();
void showTeleportHistoryMenu(LLUICtrl* btn_ctrl);
void invokeSearch(std::string search_text);
+ void resizeLayoutPanel();
// callbacks
void onTeleportHistoryMenuItemClicked(const LLSD& userdata);
void onTeleportHistoryChanged();
@@ -120,6 +122,7 @@ private:
void onLocationPrearrange(const LLSD& data);
void onTeleportFinished(const LLVector3d& global_agent_pos);
void onTeleportFailed();
+ void onNavbarResized();
void onRegionNameResponse(
std::string typed_location,
std::string region_name,
@@ -135,6 +138,7 @@ private:
}
}
+ S32 mNavPanWidth;
LLMenuGL* mTeleportHistoryMenu;
LLPullButton* mBtnBack;
LLPullButton* mBtnForward;
@@ -142,6 +146,8 @@ private:
LLLocationInputCtrl* mCmbLocation;
LLRect mDefaultNbRect;
LLRect mDefaultFpRect;
+ LLLayoutPanel* mNavigationPanel;
+ LLLayoutPanel* mFavoritePanel;
boost::signals2::connection mTeleportFailedConnection;
boost::signals2::connection mTeleportFinishConnection;
boost::signals2::connection mHistoryMenuConnection;
diff --git a/indra/newview/llpanelgroupexperiences.cpp b/indra/newview/llpanelgroupexperiences.cpp
index 2d7690895f..6bd1c11858 100644
--- a/indra/newview/llpanelgroupexperiences.cpp
+++ b/indra/newview/llpanelgroupexperiences.cpp
@@ -30,7 +30,7 @@
#include "lluictrlfactory.h"
#include "roles_constants.h"
-
+#include "llappviewer.h"
#include "llhttpclient.h"
#include "llagent.h"
#include "llviewerregion.h"
@@ -96,7 +96,7 @@ BOOL LLPanelGroupExperiences::postBuild()
void LLPanelGroupExperiences::activate()
{
- if (getGroupID() == LLUUID::null)
+ if ((getGroupID() == LLUUID::null) || gDisconnected)
{
return;
}
diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp
index 9e4f50b7a7..9c0222d0bc 100755
--- a/indra/newview/llpersistentnotificationstorage.cpp
+++ b/indra/newview/llpersistentnotificationstorage.cpp
@@ -123,11 +123,28 @@ void LLPersistentNotificationStorage::loadNotifications()
LLNotifications& instance = LLNotifications::instance();
S32 processed_notifications = 0;
+ std::vector<LLSD> notifications_array;
for (LLSD::reverse_array_iterator notification_it = data.rbeginArray();
notification_it != data.rendArray();
++notification_it)
{
LLSD notification_params = *notification_it;
+ notifications_array.push_back(notification_params);
+
+ ++processed_notifications;
+ if (processed_notifications >= gSavedSettings.getS32("MaxPersistentNotifications"))
+ {
+ LL_WARNS() << "Too many persistent notifications."
+ << " Processed " << gSavedSettings.getS32("MaxPersistentNotifications") << " of " << data.size() << " persistent notifications." << LL_ENDL;
+ break;
+ }
+ }
+
+ for (LLSD::reverse_array_iterator notification_it = notifications_array.rbegin();
+ notification_it != notifications_array.rend();
+ ++notification_it)
+ {
+ LLSD notification_params = *notification_it;
LLNotificationPtr notification(new LLNotification(notification_params));
LLNotificationResponderPtr responder(createResponder(notification_params["name"], notification_params["responder"]));
@@ -143,14 +160,8 @@ void LLPersistentNotificationStorage::loadNotifications()
// hide saved toasts so they don't confuse the user
notification_channel->hideToast(notification->getID());
}
- ++processed_notifications;
- if (processed_notifications >= gSavedSettings.getS32("MaxPersistentNotifications"))
- {
- LL_WARNS() << "Too many persistent notifications."
- << " Processed " << gSavedSettings.getS32("MaxPersistentNotifications") << " of " << data.size() << " persistent notifications." << LL_ENDL;
- break;
- }
}
+
LLNotifications::instance().getChannel("Persistent")->
connectChanged(boost::bind(&LLPersistentNotificationStorage::onPersistentChannelChanged, this, _1));
LL_INFOS("LLPersistentNotificationStorage") << "finished loading notifications" << LL_ENDL;
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index bcdf8360ed..37cc908e84 100755
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -1491,6 +1491,7 @@ void LLTextureCache::readHeaderCache()
new_entries.push_back(entry);
}
}
+ mFreeList.clear(); // recreating list, no longer valid.
llassert_always(new_entries.size() <= sCacheMaxEntries);
mHeaderEntriesInfo.mEntries = new_entries.size();
writeEntriesHeader();
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 63ede7f8ac..7020ac0c65 100755
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -380,10 +380,6 @@ void LLToast::setVisible(BOOL show)
{
mTimer->start();
}
- if (!getVisible())
- {
- LLModalDialog::setFrontmost(FALSE);
- }
}
else
{
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index f3d0369da6..05e00ea987 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2360,6 +2360,20 @@ static void god_message_name_cb(const LLAvatarName& av_name, LLChat chat, std::s
}
}
+const std::string NOT_ONLINE_MSG("User not online - message will be stored and delivered later.");
+const std::string NOT_ONLINE_INVENTORY("User not online - inventory has been saved.");
+void translate_if_needed(std::string& message)
+{
+ if (message == NOT_ONLINE_MSG)
+ {
+ message = LLTrans::getString("not_online_msg");
+ }
+ else if (message == NOT_ONLINE_INVENTORY)
+ {
+ message = LLTrans::getString("not_online_inventory");
+ }
+}
+
void process_improved_im(LLMessageSystem *msg, void **user_data)
{
LLUUID from_id;
@@ -2424,6 +2438,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
chat.mFromID = from_id;
chat.mFromName = name;
chat.mSourceType = (from_id.isNull() || (name == std::string(SYSTEM_FROM))) ? CHAT_SOURCE_SYSTEM : CHAT_SOURCE_AGENT;
+
+ if (chat.mSourceType == CHAT_SOURCE_SYSTEM)
+ { // Translate server message if required (MAINT-6109)
+ translate_if_needed(message);
+ }
LLViewerObject *source = gObjectList.findObject(session_id); //Session ID is probably the wrong thing.
if (source)
@@ -7442,7 +7461,7 @@ void callback_load_url_name(const LLUUID& id, const std::string& full_name, bool
args["URL"] = load_url_info["url"].asString();
args["MESSAGE"] = load_url_info["message"].asString();;
args["OBJECTNAME"] = load_url_info["object_name"].asString();
- args["NAME"] = owner_name;
+ args["NAME_SLURL"] = LLSLURL(is_group ? "group" : "agent", id, "about").getSLURLString();
LLNotificationsUtil::add("LoadWebPage", args, load_url_info);
}
diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp
index 03c3f0fc08..023f1b92ba 100644
--- a/indra/newview/llvieweroctree.cpp
+++ b/indra/newview/llvieweroctree.cpp
@@ -1201,6 +1201,12 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh
bounds[0].add(*shift);
}
+ F32 OCCLUSION_FUDGE_Z = SG_OCCLUSION_FUDGE; //<-- #Solution #2
+ if (LLDrawPool::POOL_WATER == mSpatialPartition->mDrawableType)
+ {
+ OCCLUSION_FUDGE_Z = 1.;
+ }
+
// Don't cull hole/edge water, unless we have the GL_ARB_depth_clamp extension
if (earlyFail(camera, bounds))
{
@@ -1260,7 +1266,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh
shader->uniform3fv(LLShaderMgr::BOX_CENTER, 1, bounds[0].getF32ptr());
shader->uniform3f(LLShaderMgr::BOX_SIZE, bounds[1][0]+SG_OCCLUSION_FUDGE,
bounds[1][1]+SG_OCCLUSION_FUDGE,
- bounds[1][2]+SG_OCCLUSION_FUDGE);
+ bounds[1][2]+OCCLUSION_FUDGE_Z);
if (!use_depth_clamp && mSpatialPartition->mDrawableType == LLDrawPool::POOL_VOIDWATER)
{
@@ -1270,7 +1276,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh
if (camera->getOrigin().isExactlyZero())
{ //origin is invalid, draw entire box
gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, 0);
- gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);
+ gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);
}
else
{
@@ -1283,7 +1289,7 @@ void LLOcclusionCullingGroup::doOcclusion(LLCamera* camera, const LLVector4a* sh
if (camera->getOrigin().isExactlyZero())
{ //origin is invalid, draw entire box
gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, 0);
- gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);
+ gPipeline.mCubeVB->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);
}
else
{
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 6f7b23ba01..2a872bb1bd 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -7964,6 +7964,13 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
// show the cloned params inside the wearables as well.
gAgentAvatarp->dumpWearableInfo(outfile);
}
+ LLSD args;
+ args["PATH"] = fullpath;
+ LLNotificationsUtil::add("AppearanceToXMLSaved", args);
+ }
+ else
+ {
+ LLNotificationsUtil::add("AppearanceToXMLFailed");
}
// File will close when handle goes out of scope
}
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
index aad3b9d062..3e0f0133dd 100755
--- a/indra/newview/skins/default/xui/da/notifications.xml
+++ b/indra/newview/skins/default/xui/da/notifications.xml
@@ -1432,7 +1432,7 @@ Hvis du ikke forlader regionen, vil du blive logget af.
[MESSAGE]
-Fra objekt: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, ejer: [NAME]?
+Fra objekt: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, ejer: [NAME_SLURL]?
<form name="form">
<button name="Gotopage" text="Gå til side"/>
<button name="Cancel" text="Afbryd"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index fa7db0a8a3..670d081faf 100755
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -2956,7 +2956,7 @@ Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
[MESSAGE]
-Von Objekt: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, Eigentümer: [NAME]
+Von Objekt: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, Eigentümer: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Zur Seite"/>
<button name="Cancel" text="Abbrechen"/>
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
index 384ae6bb1e..8391bacf51 100755
--- a/indra/newview/skins/default/xui/en/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/en/floater_about_land.xml
@@ -570,8 +570,7 @@
left="0"
top="0"
help_topic="land_covenant_tab"
- name="land_covenant_panel"
- word_wrap="true">
+ name="land_covenant_panel">
<panel.string
name="can_resell"
word_wrap="true">
@@ -1076,7 +1075,7 @@
name="Autoreturn"
top_pad="0"
width="412"
- wrap="true">
+ word_wrap="true">
Auto return other Residents&apos; objects (minutes, 0 for off):
</text>
<line_editor
@@ -1461,7 +1460,7 @@ Only large parcels can be listed in search.
top="150"
name="allow_label5"
width="205"
- wrap="true">
+ word_wrap="true">
Avatars on other parcels can see and chat with avatars on this parcel
</text>
<check_box
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 7a70fb1a2a..f1a6aca163 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3580,6 +3580,19 @@ Do you really want to bake the current terrain, make it the center for terrain r
<notification
icon="alertmodal.tga"
+ name="ConfirmTextureHeights"
+ type="alertmodal">
+You're about to use low values greater than high ones for Elevation Ranges. Proceed?
+ <tag>confirm</tag>
+ <usetemplate
+ name="yesnocancelbuttons"
+ yestext="Ok"
+ notext="Cancel"
+ canceltext="Don't ask"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="MaxAllowedAgentOnRegion"
type="alertmodal">
You can only have [MAX_AGENTS] Allowed Residents.
@@ -7520,8 +7533,8 @@ Load web page [URL] ?
[MESSAGE]
-From object: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, owner: [NAME]
- <tag>confirm</tag>
+From object: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, owner: [NAME_SLURL]
+ <tag>confirm</tag>
<form name="form">
<button
index="0"
@@ -8261,6 +8274,16 @@ Are you sure you want to close all IMs?
name="AttachmentSaved" type="notifytip">
Attachment has been saved.
</notification>
+
+ <notification icon="notify.tga" persist="true"
+ name="AppearanceToXMLSaved" type="notify">
+Appearance has been saved to XML to [PATH]
+ </notification>
+
+ <notification icon="notifytip.tga"
+ name="AppearanceToXMLFailed" type="notifytip">
+Failed to save appearance to XML.
+ </notification>
<notification
icon="alertmodal.tga"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 6c485c0595..e1b8662ece 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -619,6 +619,7 @@
height="16"
increment="0.125"
initial_value="160"
+ min_val="0.125"
label=" Trees:"
label_width="185"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/role_actions.xml b/indra/newview/skins/default/xui/en/role_actions.xml
index c2e7c706d6..4d20ecb9b6 100755
--- a/indra/newview/skins/default/xui/en/role_actions.xml
+++ b/indra/newview/skins/default/xui/en/role_actions.xml
@@ -105,9 +105,6 @@
<action description="Always allow &apos;Create Objects&apos;"
longdescription="Members in a Role with this Ability can create objects on a group-owned parcel, even if it&apos;s turned off in About Land &gt; Options tab."
name="land allow create" value="25" />
- <action description="Always allow &apos;Create Landmark&apos;"
- longdescription="Members in a Role with this Ability can landmark a group-owned parcel, even if it&apos;s turned off in About Land &gt; Options tab."
- name="land allow landmark" value="26" />
<action description="Allow &apos;Set Home to Here&apos; on group land"
longdescription="Members in a Role with this Ability can use World menu &gt; Landmarks &gt; Set Home to Here on a parcel deeded to this group."
name="land allow set home" value="28" />
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index f2eddbb38e..ff98d2f109 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3530,6 +3530,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="IM_unblock_only_groups_friends">To see this message, you must uncheck &apos;Only friends and groups can call or IM me&apos; in Preferences/Privacy.</string>
<string name="OnlineStatus">Online</string>
<string name="OfflineStatus">Offline</string>
+ <string name="not_online_msg">User not online - message will be stored and delivered later.</string>
+ <string name="not_online_inventory">User not online - inventory has been saved.</string>
<!-- voice calls -->
<string name="answered_call">Your call has been answered</string>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 1e367b33fc..2aac4458e3 100755
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -2950,7 +2950,7 @@ Si permaneces en esta región serás desconectado.
[MESSAGE]
-Del objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME]
+Del objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Cargar"/>
<button name="Cancel" text="Cancelar"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 29e6fe1979..55a67e1187 100755
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -2942,7 +2942,7 @@ Si vous restez dans cette région, vous serez déconnecté(e).
[MESSAGE]
-Venant de l&apos;objet : &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propriétaire : [NAME]
+Venant de l&apos;objet : &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propriétaire : [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Charger"/>
<button name="Cancel" text="Annuler"/>
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index 61131b09c3..6aeabcc505 100755
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -2947,7 +2947,7 @@ Se rimani qui verrai scollegato da Second Life.
[MESSAGE]
-Dall&apos;oggetto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, proprietario: [NAME]
+Dall&apos;oggetto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, proprietario: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Caricare"/>
<button name="Cancel" text="Annulla"/>
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
index 5f0ce7a73b..b3b4e06a68 100755
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -2990,7 +2990,7 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
[MESSAGE]
-送信元のオブジェクト:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;、所有者:[NAME]
+送信元のオブジェクト:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;、所有者:[NAME_SLURL]
<form name="form">
<button name="Gotopage" text="ページに移動"/>
<button name="Cancel" text="取り消し"/>
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index c4a65d92b4..25cc43a6e3 100755
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -2493,7 +2493,7 @@ Nastąpi wylogowanie jeżeli zostaniesz w tym regionie.
[MESSAGE]
-Od obiektu: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, właściciel właściciel: [NAME]?
+Od obiektu: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, właściciel właściciel: [NAME_SLURL]?
<form name="form">
<button name="Gotopage" text="Załaduj"/>
<button name="Cancel" text="Anuluj"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index a264495404..3a3603307e 100755
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -2931,7 +2931,7 @@ Se permanecer aqui, você será desconectado.
[MESSAGE]
-Do objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, de: [NAME]
+Do objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, de: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Carregar"/>
<button name="Cancel" text="Cancelar"/>
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
index 70b9a25590..7b024926e2 100755
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -2942,7 +2942,7 @@ http://secondlife.com/download.
[MESSAGE]
-Из объекта: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, владелец: [NAME]
+Из объекта: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, владелец: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Перейти на страницу"/>
<button name="Cancel" text="Отмена"/>
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index 0d64b2cae9..18ae202230 100755
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -4223,6 +4223,12 @@ support@secondlife.com.
<string name="OfflineStatus">
Оффлайн
</string>
+ <string name="not_online_msg">
+ Пользователь оффлайн - сообщение будет сохранено и доставлено позже.
+ </string>
+ <string name="not_online_inventory">
+ Пользователь оффлайн - инвентарь сохранен.
+ </string>
<string name="answered_call">
На ваш звонок ответили
</string>
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index df22251b3d..9875399b34 100755
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -2942,7 +2942,7 @@ Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak.
[MESSAGE]
-Kaynak nesne: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, sahibi: [NAME]
+Kaynak nesne: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, sahibi: [NAME_SLURL]
<form name="form">
<button name="Gotopage" text="Sayfaya git"/>
<button name="Cancel" text="İptal"/>
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
index 0a98101b60..371f5d9b39 100755
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -2932,7 +2932,7 @@ SHA1 指紋:[MD5_DIGEST]
[MESSAGE]
-來源物件:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;(所有人:[NAME])
+來源物件:&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;(所有人:[NAME_SLURL])
<form name="form">
<button name="Gotopage" text="前往頁面"/>
<button name="Cancel" text="取消"/>