summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llagent.cpp9
-rw-r--r--indra/newview/llagentlanguage.cpp65
-rw-r--r--indra/newview/llagentlanguage.h45
-rw-r--r--indra/newview/llagentpilot.cpp13
-rw-r--r--indra/newview/llappviewer.cpp3
-rw-r--r--indra/newview/llassetuploadresponders.cpp1
-rw-r--r--indra/newview/llcurrencyuimanager.cpp1
-rw-r--r--indra/newview/lleventnotifier.cpp3
-rw-r--r--indra/newview/llfloatergroupinvite.cpp5
-rw-r--r--indra/newview/llfollowcam.cpp1
-rw-r--r--indra/newview/llfollowcam.h2
-rw-r--r--indra/newview/llhudeffectlookat.cpp7
-rw-r--r--indra/newview/llinventorybridge.cpp6
-rw-r--r--indra/newview/llpanelgroup.cpp2
-rw-r--r--indra/newview/llpanelgrouproles.cpp9
-rw-r--r--indra/newview/llpanelpermissions.cpp161
-rw-r--r--indra/newview/llpolymesh.cpp6
-rw-r--r--indra/newview/llselectmgr.cpp52
-rw-r--r--indra/newview/llselectmgr.h12
-rw-r--r--indra/newview/llsprite.cpp32
-rw-r--r--indra/newview/llsprite.h1
-rw-r--r--indra/newview/llstartup.cpp11
-rw-r--r--indra/newview/llstatusbar.cpp103
-rw-r--r--indra/newview/llstatusbar.h4
-rw-r--r--indra/newview/llsurface.cpp2
-rw-r--r--indra/newview/llsurface.h3
-rw-r--r--indra/newview/llsurfacepatch.cpp45
-rw-r--r--indra/newview/llsurfacepatch.h14
-rw-r--r--indra/newview/lltoolgrab.cpp7
-rw-r--r--indra/newview/lltracker.cpp3
-rw-r--r--indra/newview/llviewerkeyboard.cpp3
-rw-r--r--indra/newview/llviewerkeyboard.h3
-rw-r--r--indra/newview/llviewerobjectlist.cpp1
-rw-r--r--indra/newview/llviewerparcelmgr.cpp6
-rw-r--r--indra/newview/llviewerregion.cpp1
-rw-r--r--indra/newview/llvoiceclient.cpp16
-rw-r--r--indra/newview/llworld.cpp11
-rw-r--r--indra/newview/llworld.h9
-rw-r--r--indra/newview/llworldmap.cpp1
40 files changed, 479 insertions, 211 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f1e4b39d7d..f53ec84fd1 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3808,6 +3808,17 @@
<key>Value</key>
<string>default</string>
</map>
+ <key>LanguageIsPublic</key>
+ <map>
+ <key>Comment</key>
+ <string>Let other residents see our language information</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>LastFeatureVersion</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 7ce985542f..a46db09e3e 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -4770,6 +4770,9 @@ void LLAgent::buildFullnameAndTitle(std::string& name) const
BOOL LLAgent::isInGroup(const LLUUID& group_id) const
{
+ if (isGodlike())
+ return true;
+
S32 count = mGroups.count();
for(S32 i = 0; i < count; ++i)
{
@@ -4784,6 +4787,9 @@ BOOL LLAgent::isInGroup(const LLUUID& group_id) const
// This implementation should mirror LLAgentInfo::hasPowerInGroup
BOOL LLAgent::hasPowerInGroup(const LLUUID& group_id, U64 power) const
{
+ if (isGodlike())
+ return true;
+
// GP_NO_POWERS can also mean no power is enough to grant an ability.
if (GP_NO_POWERS == power) return FALSE;
@@ -4805,6 +4811,9 @@ BOOL LLAgent::hasPowerInActiveGroup(U64 power) const
U64 LLAgent::getPowerInGroup(const LLUUID& group_id) const
{
+ if (isGodlike())
+ return GP_ALL_POWERS;
+
S32 count = mGroups.count();
for(S32 i = 0; i < count; ++i)
{
diff --git a/indra/newview/llagentlanguage.cpp b/indra/newview/llagentlanguage.cpp
new file mode 100644
index 0000000000..7401f95f29
--- /dev/null
+++ b/indra/newview/llagentlanguage.cpp
@@ -0,0 +1,65 @@
+/**
+ * @file llagentlanguage.cpp
+ * @brief Transmit language information to server
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llagentlanguage.h"
+#include "llagent.h"
+#include "llviewercontrol.h"
+#include "llviewerregion.h"
+
+LLAgentLanguage::LLAgentLanguage()
+{
+ gSavedSettings.getControl("Language")->getSignal()->connect(boost::bind(&update));
+ gSavedSettings.getControl("SystemLanguage")->getSignal()->connect(boost::bind(&update));
+ gSavedSettings.getControl("LanguageIsPublic")->getSignal()->connect(boost::bind(&update));
+}
+
+
+// send language settings to the sim
+// static
+bool LLAgentLanguage::update()
+{
+ LLSD body;
+ std::string url = gAgent.getRegion()->getCapability("UpdateAgentLanguage");
+ if (!url.empty())
+ {
+ std::string language = gSavedSettings.getString("Language");
+ if (language == "default")
+ language = gSavedSettings.getString("SystemLanguage");
+
+ body["language"] = language;
+ body["language_is_public"] = gSavedSettings.getBOOL("LanguageIsPublic");
+
+ LLHTTPClient::post(url, body, new LLHTTPClient::Responder);
+ }
+ return true;
+}
+
diff --git a/indra/newview/llagentlanguage.h b/indra/newview/llagentlanguage.h
new file mode 100644
index 0000000000..8d708b27fc
--- /dev/null
+++ b/indra/newview/llagentlanguage.h
@@ -0,0 +1,45 @@
+/**
+ * @file llagentlanguage.h
+ * @brief Transmit language information to server
+ *
+ * $LicenseInfo:firstyear=2006&license=viewergpl$
+ *
+ * Copyright (c) 2006-2007, Linden Research, Inc.
+ *
+ * Second Life Viewer Source Code
+ * The source code in this file ("Source Code") is provided by Linden Lab
+ * to you under the terms of the GNU General Public License, version 2.0
+ * ("GPL"), unless you have obtained a separate licensing agreement
+ * ("Other License"), formally executed by you and Linden Lab. Terms of
+ * the GPL can be found in doc/GPL-license.txt in this distribution, or
+ * online at http://secondlife.com/developers/opensource/gplv2
+ *
+ * There are special exceptions to the terms and conditions of the GPL as
+ * it is applied to this Source Code. View the full text of the exception
+ * in the file doc/FLOSS-exception.txt in this software distribution, or
+ * online at http://secondlife.com/developers/opensource/flossexception
+ *
+ * By copying, modifying or distributing this software, you acknowledge
+ * that you have read and understood your obligations described above,
+ * and agree to abide by those obligations.
+ *
+ * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+ * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+ * COMPLETENESS OR PERFORMANCE.
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLAGENTLANGUAGE_H
+#define LL_LLAGENTLANGUAGE_H
+
+#include "llmemory.h"
+#include "llevent.h"
+
+class LLAgentLanguage: public LLSingleton<LLAgentLanguage>, public LLSimpleListener
+{
+ public:
+ LLAgentLanguage();
+ static bool update();
+};
+
+#endif // LL_LLAGENTLANGUAGE_H
diff --git a/indra/newview/llagentpilot.cpp b/indra/newview/llagentpilot.cpp
index f0bd452109..136afb78aa 100644
--- a/indra/newview/llagentpilot.cpp
+++ b/indra/newview/llagentpilot.cpp
@@ -45,12 +45,15 @@ LLAgentPilot gAgentPilot;
BOOL LLAgentPilot::sLoop = TRUE;
-LLAgentPilot::LLAgentPilot()
+LLAgentPilot::LLAgentPilot() :
+ mNumRuns(-1),
+ mQuitAfterRuns(FALSE),
+ mRecording(FALSE),
+ mLastRecordTime(0.f),
+ mStarted(FALSE),
+ mPlaying(FALSE),
+ mCurrentAction(0)
{
- mRecording = FALSE;
- mPlaying = FALSE;
- mStarted = FALSE;
- mNumRuns = -1;
}
LLAgentPilot::~LLAgentPilot()
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 45fbb5e65f..10fe4a9a79 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1966,11 +1966,12 @@ bool LLAppViewer::initConfiguration()
cmd += "linux-crash-logger.bin";
#else // LL_SOLARIS
cmd += "bin/solaris-crash-logger";
-#endif
+#endif // LL_LINUX
char* const cmdargv[] =
{(char*)cmd.c_str(),
(char*)"-previous",
NULL};
+ fflush(NULL); // flush all buffers before the child inherits them
pid_t pid = fork();
if (pid == 0)
{ // child
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
index b43c9db40a..3d2ae03d63 100644
--- a/indra/newview/llassetuploadresponders.cpp
+++ b/indra/newview/llassetuploadresponders.cpp
@@ -76,6 +76,7 @@ LLAssetUploadResponder::LLAssetUploadResponder(const LLSD &post_data,
const std::string& file_name)
: LLHTTPClient::Responder(),
mPostData(post_data),
+ mAssetType(LLAssetType::AT_NONE),
mFileName(file_name)
{
}
diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
index 6aee25deca..bbcb7e64d4 100644
--- a/indra/newview/llcurrencyuimanager.cpp
+++ b/indra/newview/llcurrencyuimanager.cpp
@@ -122,6 +122,7 @@ LLCurrencyUIManager::Impl::Impl(LLPanel& dialog)
mError(false),
mUserCurrencyBuy(1000), mUserEnteredCurrencyBuy(false),
mSiteCurrencyEstimated(false),
+ mSiteCurrencyEstimatedCost(0),
mBought(false),
mTransactionType(TransactionNone), mTransaction(0),
mCurrencyChanged(false)
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
index 8e2069207f..d7fe6777e2 100644
--- a/indra/newview/lleventnotifier.cpp
+++ b/indra/newview/lleventnotifier.cpp
@@ -203,7 +203,8 @@ void LLEventNotifier::notifyCallback(S32 option, void *user_data)
LLEventNotification::LLEventNotification() :
mEventID(0),
- mEventName("")
+ mEventName(""),
+ mEventDate(0)
{
}
diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp
index a82e6e914e..b875bd5baa 100644
--- a/indra/newview/llfloatergroupinvite.cpp
+++ b/indra/newview/llfloatergroupinvite.cpp
@@ -57,9 +57,10 @@ public:
//
std::map<LLUUID, LLFloaterGroupInvite*> LLFloaterGroupInvite::impl::sInstances;
-LLFloaterGroupInvite::impl::impl(const LLUUID& group_id)
+LLFloaterGroupInvite::impl::impl(const LLUUID& group_id) :
+ mGroupID(group_id),
+ mInvitePanelp(NULL)
{
- mGroupID = group_id;
}
LLFloaterGroupInvite::impl::~impl()
diff --git a/indra/newview/llfollowcam.cpp b/indra/newview/llfollowcam.cpp
index a370554ef6..bc91f4a579 100644
--- a/indra/newview/llfollowcam.cpp
+++ b/indra/newview/llfollowcam.cpp
@@ -264,6 +264,7 @@ LLFollowCam::LLFollowCam() : LLFollowCamParams()
mSubjectRotation = LLQuaternion::DEFAULT;
mZoomedToMinimumDistance = false;
+ mPitchCos = mPitchSin = 0.f;
mPitchSineAndCosineNeedToBeUpdated = true;
mSimulatedDistance = mDistance;
diff --git a/indra/newview/llfollowcam.h b/indra/newview/llfollowcam.h
index ab8ffb1fa4..1c5eb79697 100644
--- a/indra/newview/llfollowcam.h
+++ b/indra/newview/llfollowcam.h
@@ -169,8 +169,6 @@ public:
// protected members of FollowCam
//------------------------------------------
protected:
- F32 mPositionLagTimeScale; // derived from mPositionLag
- F32 mFocusLagTimeScale; // derived from mFocusLag
F32 mPitchCos; // derived from mPitch
F32 mPitchSin; // derived from mPitch
LLGlobalVec mSimulatedPositionGlobal; // where the camera is (global coordinates), simulated
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index 046eac73fe..5f4daf6f40 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -73,8 +73,11 @@ const F32 MAX_TIMEOUT = F32_MAX / 2.f;
class LLAttention
{
public:
- LLAttention(){}
- LLAttention(F32 timeout, F32 priority, char *name, LLColor3 color) :
+ LLAttention()
+ : mTimeout(0.f),
+ mPriority(0.f)
+ {}
+ LLAttention(F32 timeout, F32 priority, LLString name, LLColor3 color) :
mTimeout(timeout), mPriority(priority), mName(name), mColor(color)
{
}
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 5ae7c2a4e7..729165a2a4 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -1369,7 +1369,9 @@ bool LLFindWearables::operator()(LLInventoryCategory* cat,
class LLRightClickInventoryFetchObserver : public LLInventoryFetchObserver
{
public:
- LLRightClickInventoryFetchObserver() {};
+ LLRightClickInventoryFetchObserver() :
+ mCopyItems(false)
+ { };
LLRightClickInventoryFetchObserver(const LLUUID& cat_id, bool copy_items) :
mCatID(cat_id),
mCopyItems(copy_items)
@@ -2237,7 +2239,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
if(accept && drop)
{
if (inv_item->getType() == LLAssetType::AT_GESTURE
- && gGestureManager.isGestureActive(inv_item->getUUID()))
+ && gGestureManager.isGestureActive(inv_item->getUUID()) && move_is_into_trash)
{
gGestureManager.deactivateGesture(inv_item->getUUID());
}
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index fb86366cc6..42df0c2ac8 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -193,7 +193,7 @@ void LLPanelGroup::updateTabVisibility()
LLPanelGroupTab* panelp =
(LLPanelGroupTab*) mTabContainer->getPanelByIndex(i);
- BOOL visible = panelp->isVisibleByAgent(&gAgent);
+ BOOL visible = panelp->isVisibleByAgent(&gAgent) || gAgent.isGodlike();
mTabContainer->enableTabButton(i, visible);
if ( !visible && mCurrentTab == panelp )
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index c04b1b72cd..5f11c4ac80 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -61,6 +61,9 @@ bool agentCanRemoveFromRole(const LLUUID& group_id,
bool agentCanAddToRole(const LLUUID& group_id,
const LLUUID& role_id)
{
+ if (gAgent.isGodlike())
+ return true;
+
LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(group_id);
if (!gdatap)
{
@@ -177,9 +180,6 @@ BOOL LLPanelGroupRoles::postBuild()
BOOL LLPanelGroupRoles::isVisibleByAgent(LLAgent* agentp)
{
- if (agentp->isGodlike())
- return TRUE;
-
/* This power was removed to make group roles simpler
return agentp->hasPowerInGroup(mGroupID,
GP_ROLE_CREATE |
@@ -1131,6 +1131,9 @@ void LLPanelGroupMembersSubTab::handleMemberSelect()
}
mAssignedRolesList->setEnabled(TRUE);
+ if (gAgent.isGodlike())
+ can_eject_members = TRUE;
+
if (!can_eject_members && !member_is_owner)
{
// Maybe we can eject them because we are an owner...
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index 7f9dae8a64..830d1c008b 100644
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -98,8 +98,8 @@ BOOL LLPanelPermissions::postBuild()
this->childSetCommitCallback("checkbox for sale",LLPanelPermissions::onCommitSaleInfo,this);
- this->childSetCommitCallback("EdCost",LLPanelPermissions::onCommitSaleInfo,this);
- this->childSetPrevalidate("EdCost",LLLineEditor::prevalidateNonNegativeS32);
+ this->childSetCommitCallback("Edit Cost",LLPanelPermissions::onCommitSaleInfo,this);
+ this->childSetPrevalidate("Edit Cost",LLLineEditor::prevalidateNonNegativeS32);
this->childSetCommitCallback("sale type",LLPanelPermissions::onCommitSaleType,this);
@@ -229,9 +229,10 @@ void LLPanelPermissions::refresh()
RadioSaleType->setEnabled(FALSE);
}
- childSetEnabled("Price: L$",false);
- childSetText("EdCost",LLString::null);
- childSetEnabled("EdCost",false);
+ childSetEnabled("Cost",false);
+ childSetText("Cost",LLString(childGetText("Cost Default")));
+ childSetText("Edit Cost",LLString::null);
+ childSetEnabled("Edit Cost",false);
childSetEnabled("label click action",false);
LLComboBox* ComboClickAction = getChild<LLComboBox>("clickaction");
@@ -405,56 +406,92 @@ void LLPanelPermissions::refresh()
childSetText("prim info",object_info_string);
childSetEnabled("prim info",true);
- S32 price;
- BOOL is_for_sale = LLSelectMgr::getInstance()->selectIsForSale(price);
- if (!is_for_sale)
- {
- price = DEFAULT_PRICE;
- }
-
- BOOL self_owned = (gAgent.getID() == mOwnerID);
- BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ;
- BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned());
- BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer();
- BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy();
+ S32 total_sale_price = 0;
+ S32 individual_sale_price = 0;
+ BOOL is_for_sale_mixed = FALSE;
+ BOOL is_sale_price_mixed = FALSE;
+ U32 num_for_sale = FALSE;
+ LLSelectMgr::getInstance()->selectGetAggregateSaleInfo(num_for_sale,
+ is_for_sale_mixed,
+ is_sale_price_mixed,
+ total_sale_price,
+ individual_sale_price);
+
+ const BOOL self_owned = (gAgent.getID() == mOwnerID);
+ const BOOL group_owned = LLSelectMgr::getInstance()->selectIsGroupOwned() ;
+ const BOOL public_owned = (mOwnerID.isNull() && !LLSelectMgr::getInstance()->selectIsGroupOwned());
+ const BOOL can_transfer = LLSelectMgr::getInstance()->selectGetRootsTransfer();
+ const BOOL can_copy = LLSelectMgr::getInstance()->selectGetRootsCopy();
if(!owners_identical)
{
- childSetEnabled("Price: L$",false);
- childSetText("EdCost",LLString::null);
- childSetEnabled("EdCost",false);
+ childSetEnabled("Cost",false);
+ childSetText("Edit Cost",LLString::null);
+ childSetEnabled("Edit Cost",false);
}
+ // You own these objects.
else if(self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))
{
- LLLineEditor* EditPrice = getChild<LLLineEditor>("EdCost");
- if(keyboard_focus_view != EditPrice)
+ // If there are multiple items for sale then set text to PRICE PER UNIT.
+ if (num_for_sale > 1)
{
- childSetText("EdCost",llformat("%d",price));
+ childSetText("Cost",childGetText("Cost Per Unit"));
}
- if(is_for_sale && is_one_object && can_transfer)
+ else
{
- childSetEnabled("Price: L$",true);
- childSetEnabled("EdCost",true);
+ childSetText("Cost",childGetText("Cost Default"));
}
- else
+
+ LLLineEditor *editPrice = getChild<LLLineEditor>("Edit Cost");
+ if(keyboard_focus_view != editPrice)
{
- childSetEnabled("Price: L$",false);
- childSetEnabled("EdCost",false);
+ // If the sale price is mixed then set the cost to MIXED, otherwise
+ // set to the actual cost.
+ if (num_for_sale > 0 && is_for_sale_mixed)
+ {
+ childSetText("Edit Cost",childGetText("Sale Mixed"));
+ }
+ else if (num_for_sale > 0 && is_sale_price_mixed)
+ {
+ childSetText("Edit Cost",childGetText("Cost Mixed"));
+ }
+ else
+ {
+ childSetText("Edit Cost",llformat("%d",individual_sale_price));
+ }
}
+ // The edit fields are only enabled if you can sell this object
+ // and the sale price is not mixed.
+ bool enable_edit = (num_for_sale && can_transfer) ? !is_for_sale_mixed : false;
+ childSetEnabled("Cost",enable_edit);
+ childSetEnabled("Edit Cost",enable_edit);
}
+ // Someone, not you, owns these objects.
else if(!public_owned)
{
- // ...someone, not you, owns it
- childSetEnabled("Price: L$",false);
- childSetText("EdCost",llformat("%d",price));
- childSetEnabled("EdCost",false);
+ childSetEnabled("Cost",false);
+ childSetEnabled("Edit Cost",false);
+
+ // Don't show a price if none of the items are for sale.
+ if (num_for_sale)
+ childSetText("Edit Cost",llformat("%d",total_sale_price));
+ else
+ childSetText("Edit Cost",LLString::null);
+
+ // If multiple items are for sale, set text to TOTAL PRICE.
+ if (num_for_sale > 1)
+ childSetText("Cost",childGetText("Cost Total"));
+ else
+ childSetText("Cost",childGetText("Cost Default"));
}
+ // This is a public object.
else
{
- // ...public object
- childSetEnabled("Price: L$",false);
- childSetText("EdCost",LLString::null);
- childSetEnabled("EdCost",false);
+ childSetEnabled("Cost",false);
+ childSetText("Cost",childGetText("Cost Default"));
+
+ childSetText("Edit Cost",LLString::null);
+ childSetEnabled("Edit Cost",false);
}
// Enable and disable the permissions checkboxes
@@ -590,8 +627,11 @@ void LLPanelPermissions::refresh()
if (has_change_sale_ability && (owner_mask_on & PERM_TRANSFER))
{
- childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && is_for_sale));
- childSetEnabled("sale type",is_for_sale && can_transfer);
+ childSetEnabled("checkbox for sale", can_transfer || (!can_transfer && num_for_sale));
+ // Set the checkbox to tentative if the prices of each object selected
+ // are not the same.
+ childSetTentative("checkbox for sale", is_for_sale_mixed);
+ childSetEnabled("sale type",num_for_sale && can_transfer && !is_sale_price_mixed);
childSetEnabled("Next owner can:", TRUE);
childSetEnabled("checkbox next owner can modify",base_mask_on & PERM_MODIFY);
@@ -733,21 +773,23 @@ void LLPanelPermissions::refresh()
if (valid_sale_info)
{
RadioSaleType->setSelectedIndex((S32)sale_type - 1);
+ RadioSaleType->setTentative(FALSE); // unfortunately this doesn't do anything at the moment.
}
else
{
// default option is sell copy, determined to be safest
RadioSaleType->setSelectedIndex((S32)LLSaleInfo::FS_COPY - 1);
+ RadioSaleType->setTentative(TRUE); // unfortunately this doesn't do anything at the moment.
}
}
- childSetValue("checkbox for sale", is_for_sale);
+ childSetValue("checkbox for sale", num_for_sale != 0);
// HACK: There are some old objects in world that are set for sale,
// but are no-transfer. We need to let users turn for-sale off, but only
// if for-sale is set.
bool cannot_actually_sell = !can_transfer || (!can_copy && sale_type == LLSaleInfo::FS_COPY);
- if (is_for_sale && has_change_sale_ability && cannot_actually_sell)
+ if (num_for_sale && has_change_sale_ability && cannot_actually_sell)
{
childSetEnabled("checkbox for sale", true);
}
@@ -971,9 +1013,10 @@ void LLPanelPermissions::setAllSaleInfo()
llinfos << "LLPanelPermissions::setAllSaleInfo()" << llendl;
LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_NOT;
- LLCheckBoxCtrl* mCheckPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale");
-
- if(mCheckPurchase && mCheckPurchase->get())
+ LLCheckBoxCtrl *checkPurchase = getChild<LLCheckBoxCtrl>("checkbox for sale");
+
+ // Set the sale type if the object(s) are for sale.
+ if(checkPurchase && checkPurchase->get())
{
LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("sale type");
if(RadioSaleType)
@@ -995,23 +1038,37 @@ void LLPanelPermissions::setAllSaleInfo()
}
}
}
- LLLineEditor* mEditPrice = getChild<LLLineEditor>("EdCost");
S32 price = -1;
- if(mEditPrice)
+
+ LLLineEditor *editPrice = getChild<LLLineEditor>("Edit Cost");
+ if (editPrice)
{
- price = atoi(mEditPrice->getText().c_str());
+ // Don't extract the price if it's labeled as MIXED or is empty.
+ const char *editPriceString = editPrice->getText().c_str();
+ if (0 != strcmp(editPriceString,childGetText("Cost Mixed").c_str()) &&
+ 0 != strcmp(editPriceString,""))
+ {
+ price = atoi(editPriceString);
+ }
+ else
+ {
+ price = DEFAULT_PRICE;
+ }
}
- // Invalid data - turn off the sale
+ // If somehow an invalid price, turn the sale off.
if (price < 0)
- {
sale_type = LLSaleInfo::FS_NOT;
- price = 0;
- }
+ // Force the sale price of not-for-sale items to DEFAULT_PRICE.
+ if (sale_type == LLSaleInfo::FS_NOT)
+ {
+ price = DEFAULT_PRICE;
+ }
+ // Pack up the sale info and send the update.
LLSaleInfo sale_info(sale_type, price);
LLSelectMgr::getInstance()->selectionSetObjectSaleInfo(sale_info);
-
+
// If turned off for-sale, make sure click-action buy is turned
// off as well
if (sale_type == LLSaleInfo::FS_NOT)
diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp
index 85d5def673..947557e0b3 100644
--- a/indra/newview/llpolymesh.cpp
+++ b/indra/newview/llpolymesh.cpp
@@ -687,6 +687,12 @@ LLPolyMesh::LLPolyMesh(LLPolyMeshSharedData *shared_data, LLPolyMesh *reference_
mAvatarp = NULL;
mVertexData = NULL;
+ mCurVertexCount = 0;
+ mFaceIndexCount = 0;
+ mFaceIndexOffset = 0;
+ mFaceVertexCount = 0;
+ mFaceVertexOffset = 0;
+
if (shared_data->isLOD() && reference_mesh)
{
mCoords = reference_mesh->mCoords;
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 5eacb25ded..96c9ec113b 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -2827,27 +2827,53 @@ void LLSelectMgr::selectForceDelete()
SEND_ONLY_ROOTS);
}
-
-// returns TRUE if anything is for sale. calculates the total price
-// and stores that value in price.
-BOOL LLSelectMgr::selectIsForSale(S32& price)
+void LLSelectMgr::selectGetAggregateSaleInfo(U32 &num_for_sale,
+ BOOL &is_for_sale_mixed,
+ BOOL &is_sale_price_mixed,
+ S32 &total_sale_price,
+ S32 &individual_sale_price)
{
- BOOL any_for_sale = FALSE;
- price = 0;
+ num_for_sale = 0;
+ is_for_sale_mixed = FALSE;
+ is_sale_price_mixed = FALSE;
+ total_sale_price = 0;
+ individual_sale_price = 0;
+
+ // Empty set.
+ if (getSelection()->root_begin() == getSelection()->root_end())
+ return;
+
+ LLSelectNode *node = *(getSelection()->root_begin());
+ const BOOL first_node_for_sale = node->mSaleInfo.isForSale();
+ const S32 first_node_sale_price = node->mSaleInfo.getSalePrice();
+
for (LLObjectSelection::root_iterator iter = getSelection()->root_begin();
iter != getSelection()->root_end(); iter++)
{
LLSelectNode* node = *iter;
- if (node->mSaleInfo.isForSale())
+ const BOOL node_for_sale = node->mSaleInfo.isForSale();
+ const S32 node_sale_price = node->mSaleInfo.getSalePrice();
+
+ // Set mixed if the fields don't match the first node's fields.
+ if (node_for_sale != first_node_for_sale)
+ is_for_sale_mixed = TRUE;
+ if (node_sale_price != first_node_sale_price)
+ is_sale_price_mixed = TRUE;
+
+ if (node_for_sale)
{
- price += node->mSaleInfo.getSalePrice();
- any_for_sale = TRUE;
+ total_sale_price += node_sale_price;
+ num_for_sale ++;
}
}
-
- return any_for_sale;
-
+
+ individual_sale_price = first_node_sale_price;
+ if (is_for_sale_mixed)
+ {
+ is_sale_price_mixed = TRUE;
+ individual_sale_price = 0;
+ }
}
// returns TRUE if all nodes are valid. method also stores an
@@ -3503,8 +3529,6 @@ void LLSelectMgr::selectionSetObjectCategory(const LLCategory& category)
void LLSelectMgr::selectionSetObjectSaleInfo(const LLSaleInfo& sale_info)
{
- // Only one sale info at a time for now
- if(mSelectedObjects->getRootObjectCount() != 1) return;
sendListToRegions("ObjectSaleInfo",
packAgentAndSessionID,
packObjectSaleInfo,
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index 4a8f99db1f..6ae688bae6 100644
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -558,10 +558,14 @@ public:
// returns TRUE if all the nodes are valid. Accumulates
// permissions in the parameter.
BOOL selectGetPermissions(LLPermissions& perm);
-
- // returns TRUE if anything is for sale. calculates the total
- // price and stores that value in price.
- BOOL selectIsForSale(S32& price);
+
+ // Get a bunch of useful sale information for the object(s) selected.
+ // "_mixed" is true if not all objects have the same setting.
+ void selectGetAggregateSaleInfo(U32 &num_for_sale,
+ BOOL &is_for_sale_mixed,
+ BOOL &is_sale_price_mixed,
+ S32 &total_sale_price,
+ S32 &individual_sale_price);
// returns TRUE if all nodes are valid.
BOOL selectGetCategory(LLCategory& category);
diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp
index f74173425c..1348f85201 100644
--- a/indra/newview/llsprite.cpp
+++ b/indra/newview/llsprite.cpp
@@ -59,30 +59,18 @@ LLVector3 LLSprite::sNormal(0.0f,0.0f,0.0f);
//////////////////////////////////////////////////////////////////////
// A simple initialization
-LLSprite::LLSprite(const LLUUID &image_uuid)
+LLSprite::LLSprite(const LLUUID &image_uuid) :
+ mImageID(image_uuid),
+ mImagep(NULL),
+ mPitch(0.f),
+ mYaw(0.f),
+ mPosition(0.0f, 0.0f, 0.0f),
+ mFollow(TRUE),
+ mUseCameraUp(TRUE),
+ mColor(0.5f, 0.5f, 0.5f, 1.0f),
+ mTexMode(GL_REPLACE)
{
- mImageID = image_uuid;
- mImagep = NULL;
-
setSize(1.0f, 1.0f);
- setPosition(LLVector3(0.0f, 0.0f, 0.0f));
- mTexMode = GL_REPLACE;
- mColor.setVec(0.5f, 0.5f, 0.5f, 1.0f);
- mFollow = TRUE;
- mUseCameraUp = TRUE;
-}
-
-LLSprite::LLSprite(const LLUUID &image_uuid, const F32 width, const F32 height, const BOOL b_usemipmap)
-{
- mImageID = image_uuid;
- mImagep = NULL;
-
- setSize(width,height);
- setPosition(LLVector3(0.0f, 0.0f, 0.0f));
- mTexMode = GL_REPLACE;
- mColor.setVec(0.5f, 0.5f, 0.5f, 1.0f);
- mFollow = TRUE;
- mUseCameraUp = TRUE;
}
//////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llsprite.h b/indra/newview/llsprite.h
index 04d30b8e7c..322150e85b 100644
--- a/indra/newview/llsprite.h
+++ b/indra/newview/llsprite.h
@@ -49,7 +49,6 @@ class LLSprite
{
public:
LLSprite(const LLUUID &image_uuid);
- LLSprite(const LLUUID &image_uuid, const F32 width, const F32 height, const BOOL b_usemipmap = TRUE);
~LLSprite();
void render(LLViewerCamera * camerap);
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 7d9bab59df..4844f2d81e 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -174,6 +174,11 @@
#include "llpostprocess.h"
#include "llwlparammanager.h"
#include "llwaterparammanager.h"
+#include "llagentlanguage.h"
+
+#if LL_LIBXUL_ENABLED
+#include "llmozlib.h"
+#endif // LL_LIBXUL_ENABLED
#if LL_WINDOWS
#include "llwindebug.h"
@@ -469,7 +474,7 @@ BOOL idle_startup()
}
else
{
- LLAppViewer::instance()->earlyExit("Unable to initialize communications.");
+ LLAppViewer::instance()->earlyExit("Message Template " + message_template_path + " not found.");
}
if(gMessageSystem && gMessageSystem->isOK())
@@ -2147,6 +2152,10 @@ BOOL idle_startup()
// JC - 7/20/2002
gViewerWindow->sendShapeToSim();
+ // Inform simulator of our language preference
+ LLAgentLanguage::update();
+
+
// Ignore stipend information for now. Money history is on the web site.
// if needed, show the L$ history window
//if (stipend_since_login && !gNoRender)
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index 94f8b8ae67..6697b06659 100644
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -1,33 +1,33 @@
/**
- * @file llstatusbar.cpp
- * @brief LLStatusBar class implementation
- *
- * $LicenseInfo:firstyear=2002&license=viewergpl$
- *
- * Copyright (c) 2002-2007, Linden Research, Inc.
- *
- * Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
- * $/LicenseInfo$
- */
+* @file llstatusbar.cpp
+* @brief LLStatusBar class implementation
+*
+* $LicenseInfo:firstyear=2002&license=viewergpl$
+*
+* Copyright (c) 2002-2007, Linden Research, Inc.
+*
+* Second Life Viewer Source Code
+* The source code in this file ("Source Code") is provided by Linden Lab
+* to you under the terms of the GNU General Public License, version 2.0
+* ("GPL"), unless you have obtained a separate licensing agreement
+* ("Other License"), formally executed by you and Linden Lab. Terms of
+* the GPL can be found in doc/GPL-license.txt in this distribution, or
+* online at http://secondlife.com/developers/opensource/gplv2
+*
+* There are special exceptions to the terms and conditions of the GPL as
+* it is applied to this Source Code. View the full text of the exception
+* in the file doc/FLOSS-exception.txt in this software distribution, or
+* online at http://secondlife.com/developers/opensource/flossexception
+*
+* By copying, modifying or distributing this software, you acknowledge
+* that you have read and understood your obligations described above,
+* and agree to abide by those obligations.
+*
+* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
+* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
+* COMPLETENESS OR PERFORMANCE.
+* $/LicenseInfo$
+*/
#include "llviewerprecompiledheaders.h"
@@ -121,10 +121,10 @@ const U32 LLStatusBar::MAX_DATE_STRING_LENGTH = 2000;
LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
: LLPanel(name, LLRect(), FALSE), // not mouse opaque
- mBalance(0),
- mHealth(100),
- mSquareMetersCredit(0),
- mSquareMetersCommitted(0)
+mBalance(0),
+mHealth(100),
+mSquareMetersCredit(0),
+mSquareMetersCommitted(0)
{
// status bar can possible overlay menus?
setMouseOpaque(FALSE);
@@ -150,7 +150,7 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
mTextHealth = getChild<LLTextBox>("HealthText" );
mTextTime = getChild<LLTextBox>("TimeText" );
-
+
childSetAction("scriptout", onClickScriptDebug, this);
childSetAction("health", onClickHealth, this);
childSetAction("no_fly", onClickFly, this);
@@ -233,8 +233,8 @@ void LLStatusBar::draw()
if (isBackgroundVisible())
{
gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,
- LLUI::sColorsGroup->getColor("ColorDropShadow"),
- LLUI::sConfigGroup->getS32("DropShadowFloater") );
+ LLUI::sColorsGroup->getColor("ColorDropShadow"),
+ LLUI::sConfigGroup->getS32("DropShadowFloater") );
}
LLPanel::draw();
}
@@ -252,7 +252,7 @@ void LLStatusBar::refresh()
mSGBandwidth->setThreshold(2, bwtotal);
// *TODO: Localize / translate time
-
+
// Get current UTC time, adjusted for the user's clock
// being off.
U32 utc_time;
@@ -284,23 +284,23 @@ void LLStatusBar::refresh()
if (hour == 0) hour = 12;
std::ostringstream t;
t << std::setfill(' ') << std::setw(2) << hour << ":"
- << std::setfill('0') << std::setw(2) << min
- << " " << am_pm << " " << tz;
+ << std::setfill('0') << std::setw(2) << min
+ << " " << am_pm << " " << tz;
mTextTime->setText(t.str());
// Year starts at 1900, set the tooltip to have the date
std::ostringstream date;
date << sDays[internal_time->tm_wday] << ", "
- << std::setfill('0') << std::setw(2) << internal_time->tm_mday << " "
- << sMonths[internal_time->tm_mon] << " "
- << internal_time->tm_year + 1900;
+ << std::setfill('0') << std::setw(2) << internal_time->tm_mday << " "
+ << sMonths[internal_time->tm_mon] << " "
+ << internal_time->tm_year + 1900;
mTextTime->setToolTip(date.str());
LLRect r;
const S32 MENU_RIGHT = gMenuBarView->getRightmostMenuEdge();
S32 x = MENU_RIGHT + MENU_PARCEL_SPACING;
S32 y = 0;
-
+
bool search_visible = gSavedSettings.getBOOL("ShowSearchBar");
// reshape menu bar to its content's width
@@ -394,8 +394,8 @@ void LLStatusBar::refresh()
BOOL no_scripts = FALSE;
if((region
&& ((region->getRegionFlags() & REGION_FLAGS_SKIP_SCRIPTS)
- || (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)))
- || (parcel && !parcel->getAllowOtherScripts()))
+ || (region->getRegionFlags() & REGION_FLAGS_ESTATE_SKIP_SCRIPTS)))
+ || (parcel && !parcel->getAllowOtherScripts()))
{
no_scripts = TRUE;
}
@@ -487,15 +487,15 @@ void LLStatusBar::refresh()
mRegionDetails.mTime = mTextTime->getText();
mRegionDetails.mBalance = mBalance;
- mRegionDetails.mAccesString = region->getSimAccessString();
+ mRegionDetails.mAccessString = region->getSimAccessString();
mRegionDetails.mPing = region->getNetDetailsForLCD();
- if (parcel && !parcel->getName().empty())
+ if (parcel)
{
location_name = region->getName()
+ llformat(" %d, %d, %d (%s) - %s",
- pos_x, pos_y, pos_z,
- region->getSimAccessString(),
- parcel->getName().c_str());
+ pos_x, pos_y, pos_z,
+ region->getSimAccessString(),
+ parcel->getName().c_str());
// keep these around for the LCD to use
mRegionDetails.mRegionName = region->getName();
@@ -503,6 +503,7 @@ void LLStatusBar::refresh()
mRegionDetails.mX = pos_x;
mRegionDetails.mY = pos_y;
mRegionDetails.mZ = pos_z;
+
mRegionDetails.mArea = parcel->getArea();
mRegionDetails.mForSale = parcel->getForSale();
mRegionDetails.mTraffic = LLViewerParcelMgr::getInstance()->getDwelling();
@@ -557,7 +558,7 @@ void LLStatusBar::refresh()
// keep these around for the LCD to use
mRegionDetails.mRegionName = "Unknown";
mRegionDetails.mParcelName = "Unknown";
- mRegionDetails.mAccesString = "Unknown";
+ mRegionDetails.mAccessString = "Unknown";
mRegionDetails.mX = 0;
mRegionDetails.mY = 0;
mRegionDetails.mZ = 0;
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
index 91bc787485..99bac2471f 100644
--- a/indra/newview/llstatusbar.h
+++ b/indra/newview/llstatusbar.h
@@ -54,7 +54,7 @@ public:
LLRegionDetails() :
mRegionName("Unknown"),
mParcelName("Unknown"),
- mAccesString("Unknown"),
+ mAccessString("Unknown"),
mX(0),
mY(0),
mZ(0),
@@ -68,7 +68,7 @@ public:
}
std::string mRegionName;
std::string mParcelName;
- std::string mAccesString;
+ std::string mAccessString;
S32 mX;
S32 mY;
S32 mZ;
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index 6618e3d631..fa85d89388 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -73,7 +73,9 @@ LLSurface::LLSurface(U32 type, LLViewerRegion *regionp) :
mGridsPerEdge(0),
mOOGridsPerEdge(0.f),
mPatchesPerEdge(0),
+ mNumberOfPatches(0),
mType(type),
+ mDetailTextureScale(0.f),
mOriginGlobal(0.0, 0.0, 0.0),
mSTexturep(NULL),
mWaterTexturep(NULL),
diff --git a/indra/newview/llsurface.h b/indra/newview/llsurface.h
index c806d804f1..4e57d7017d 100644
--- a/indra/newview/llsurface.h
+++ b/indra/newview/llsurface.h
@@ -217,9 +217,6 @@ protected:
F32 mMetersPerGrid; // Converts (i,j) indecies to distance
F32 mMetersPerEdge; // = mMetersPerGrid * (mGridsPerEdge-1)
- F32 mSurfaceTexScale; // Scale factors for automatic tex coord generation
- F32 mDetailTexScale;
-
LLPatchVertexArray mPVArray;
BOOL mHasZData; // We've received any patch data for this surface.
diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp
index 7a475f21ba..2877fc66e3 100644
--- a/indra/newview/llsurfacepatch.cpp
+++ b/indra/newview/llsurfacepatch.cpp
@@ -52,28 +52,29 @@ extern U64 gFrameTime;
extern LLPipeline gPipeline;
LLSurfacePatch::LLSurfacePatch() :
- mDataZ(NULL),
- mVObjp(NULL),
- mLastUpdateTime(0),
- mSurfacep(NULL)
-{
- // This flag is used to communicate between adjacent surfaces and is set
- // to non-zero values by higher classes.
- mConnectedEdge = NO_EDGE;
- mCenterRegion = LLVector3(0.f, 0.f, 0.f);
- mOriginRegion = LLVector3(0.f, 0.f, 0.f);
- mHasReceivedData = FALSE;
- mMinZ = 0.0f;
- mMaxZ = 0.0f;
- mMeanZ = 0.0f;
- mMinComposition = 0.f;
- mMeanComposition = 0.f;
- mMaxComposition = 0.f;
- mRadius = 0.f;
- mDirty = FALSE;
- mDirtyZStats = TRUE;
- mHeightsGenerated = FALSE;
-
+ mHasReceivedData(FALSE),
+ mSTexUpdate(FALSE),
+ mDirty(FALSE),
+ mDirtyZStats(TRUE),
+ mHeightsGenerated(FALSE),
+ mDataOffset(0),
+ mDataZ(NULL),
+ mVObjp(NULL),
+ mOriginRegion(0.f, 0.f, 0.f),
+ mCenterRegion(0.f, 0.f, 0.f),
+ mMinZ(0.f),
+ mMaxZ(0.f),
+ mMeanZ(0.f),
+ mRadius(0.f),
+ mMinComposition(0.f),
+ mMaxComposition(0.f),
+ mMeanComposition(0.f),
+ // This flag is used to communicate between adjacent surfaces and is
+ // set to non-zero values by higher classes.
+ mConnectedEdge(NO_EDGE),
+ mLastUpdateTime(0),
+ mSurfacep(NULL)
+{
S32 i;
for (i = 0; i < 8; i++)
{
diff --git a/indra/newview/llsurfacepatch.h b/indra/newview/llsurfacepatch.h
index 0f91e7715e..c1f9fda860 100644
--- a/indra/newview/llsurfacepatch.h
+++ b/indra/newview/llsurfacepatch.h
@@ -44,9 +44,17 @@ class LLAgent;
// A patch shouldn't know about its visibility since that really depends on the
// camera that is looking (or not looking) at it. So, anything about a patch
-// that is specific to a camera should be in the struct below.
-struct LLPatchVisibilityInfo
+// that is specific to a camera should be in the class below.
+class LLPatchVisibilityInfo
{
+public:
+ LLPatchVisibilityInfo() :
+ mbIsVisible(FALSE),
+ mDistance(0.f),
+ mRenderLevel(0),
+ mRenderStride(0) { };
+ ~LLPatchVisibilityInfo() { };
+
BOOL mbIsVisible;
F32 mDistance; // Distance from camera
S32 mRenderLevel;
@@ -153,7 +161,7 @@ protected:
// Pointer to the LLVOSurfacePatch object which is used in the new renderer.
LLPointer<LLVOSurfacePatch> mVObjp;
- // All of the camera-dependent stuff should be in its own structure...
+ // All of the camera-dependent stuff should be in its own class...
LLPatchVisibilityInfo mVisInfo;
// pointers to beginnings of patch data fields
diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp
index 94501507ab..5073be3173 100644
--- a/indra/newview/lltoolgrab.cpp
+++ b/indra/newview/lltoolgrab.cpp
@@ -81,9 +81,16 @@ LLToolGrab::LLToolGrab( LLToolComposite* composite )
mHitLand(FALSE),
mHitObjectID(),
mGrabObject( NULL ),
+ mLastMouseX(0),
+ mLastMouseY(0),
mMouseDownX( -1 ),
mMouseDownY( -1 ),
+ mMouseMask(0),
+ mAccumDeltaX(0),
+ mAccumDeltaY(0),
mHasMoved( FALSE ),
+ mOutsideSlop(FALSE),
+ mDeselectedThisClick(FALSE),
mSpinGrabbing( FALSE ),
mSpinRotation(),
mHideBuildHighlight(FALSE)
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
index 40ae4e49a6..e7559d866b 100644
--- a/indra/newview/lltracker.cpp
+++ b/indra/newview/lltracker.cpp
@@ -90,7 +90,8 @@ LLTracker::LLTracker()
mHasLandmarkPosition(FALSE),
mLandmarkHasBeenVisited(FALSE),
mTrackedLocationName( "" ),
- mIsTrackingLocation(FALSE)
+ mIsTrackingLocation(FALSE),
+ mHasReachedLocation(FALSE)
{ }
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index e21c14637b..aecb1daedc 100644
--- a/indra/newview/llviewerkeyboard.cpp
+++ b/indra/newview/llviewerkeyboard.cpp
@@ -564,7 +564,8 @@ void bind_keyboard_functions()
gViewerKeyboard.bindNamedFunction("start_gesture", start_gesture);
}
-LLViewerKeyboard::LLViewerKeyboard()
+LLViewerKeyboard::LLViewerKeyboard() :
+ mNamedFunctionCount(0)
{
for (S32 i = 0; i < MODE_COUNT; i++)
{
diff --git a/indra/newview/llviewerkeyboard.h b/indra/newview/llviewerkeyboard.h
index fd024d0902..df31e17c70 100644
--- a/indra/newview/llviewerkeyboard.h
+++ b/indra/newview/llviewerkeyboard.h
@@ -40,6 +40,9 @@ const S32 MAX_KEY_BINDINGS = 128; // was 60
class LLNamedFunction
{
public:
+ LLNamedFunction() : mName(NULL), mFunction(NULL) { };
+ ~LLNamedFunction() { };
+
const char *mName;
LLKeyFunc mFunction;
};
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 499476e065..c8717b2306 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -1504,6 +1504,7 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
////////////////////////////////////////////////////////////////////////////
LLViewerObjectList::OrphanInfo::OrphanInfo()
+ : mParentInfo(0)
{
}
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 61aa51a6d8..f14d206b7f 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -112,16 +112,20 @@ struct LLGodForceOwnerData
//
LLViewerParcelMgr::LLViewerParcelMgr()
: mSelected(FALSE),
+ mRequestResult(0),
mWestSouth(),
mEastNorth(),
mSelectedDwell(0.f),
mAgentParcelSequenceID(-1),
+ mHoverRequestResult(0),
mHoverWestSouth(),
mHoverEastNorth(),
mRenderCollision(FALSE),
mRenderSelection(TRUE),
mCollisionBanned(0),
- mCollisionTimer()
+ mCollisionTimer(),
+ mMediaParcelId(0),
+ mMediaRegionId(0)
{
mCurrentParcel = new LLParcel();
mCurrentParcelSelection = new LLParcelSelection(mCurrentParcel);
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 4b7c849171..fad061f2d2 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1394,6 +1394,7 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
capabilityNames.append("SendUserReportWithScreenshot");
capabilityNames.append("ServerReleaseNotes");
capabilityNames.append("StartGroupProposal");
+ capabilityNames.append("UpdateAgentLanguage");
capabilityNames.append("UpdateGestureAgentInventory");
capabilityNames.append("UpdateNotecardAgentInventory");
capabilityNames.append("UpdateScriptAgentInventory");
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index bba9fe1ccf..e61a6bddf8 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -218,6 +218,19 @@ void LLVivoxProtocolParser::reset()
ignoringTags = false;
accumulateText = false;
textBuffer.clear();
+
+ energy = 0.f;
+ ignoreDepth = 0;
+ isChannel = false;
+ isEvent = false;
+ isLocallyMuted = false;
+ isModeratorMuted = false;
+ isSpeaking = false;
+ participantType = 0;
+ returnCode = 0;
+ state = 0;
+ statusCode = 0;
+ volume = 0;
}
//virtual
@@ -1329,6 +1342,7 @@ void LLVoiceClient::stateMachine()
fakeargv[i] = NULL;
+ fflush(NULL); // flush all buffers before the child inherits them
pid_t id = vfork();
if(id == 0)
{
@@ -3018,7 +3032,7 @@ void LLVoiceClient::muteListChanged()
/////////////////////////////
// Managing list of participants
LLVoiceClient::participantState::participantState(const std::string &uri) :
- mURI(uri), mPTT(false), mIsSpeaking(false), mIsModeratorMuted(false), mPower(0.0), mServiceType(serviceTypeUnknown),
+ mURI(uri), mPTT(false), mIsSpeaking(false), mIsModeratorMuted(false), mLastSpokeTimestamp(0.f), mPower(0.f), mVolume(0), mServiceType(serviceTypeUnknown),
mOnMuteList(false), mUserVolume(100), mVolumeDirty(false), mAvatarIDValid(false)
{
}
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index e45b929b6f..07f4cbe0f0 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -84,13 +84,12 @@ const F32 LLWorld::mWidthInMeters = mWidth * mScale;
// allocate the stack
LLWorld::LLWorld()
+: mLandFarClip(DEFAULT_FAR_PLANE),
+ mLastPacketsIn(0),
+ mLastPacketsOut(0),
+ mLastPacketsLost(0),
+ mSpaceTimeUSec(0)
{
- mSpaceTimeUSec = 0;
- mLastPacketsIn = 0;
- mLastPacketsOut = 0;
- mLastPacketsLost = 0;
- mLandFarClip = DEFAULT_FAR_PLANE;
-
if (gNoRender)
{
return;
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
index 9dd90480b6..d65c91a6a6 100644
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -170,22 +170,17 @@ private:
S32 mLastPacketsOut;
S32 mLastPacketsLost;
+ U64 mSpaceTimeUSec;
+
////////////////////////////
//
// Data for "Fake" objects
//
- // Used to define the "Square" which we need to fill in
- U32 mMinRegionX;
- U32 mMaxRegionX;
- U32 mMinRegionY;
- U32 mMaxRegionY;
-
std::list<LLVOWater*> mHoleWaterObjects;
LLPointer<LLVOWater> mEdgeWaterObjects[8];
LLPointer<LLViewerImage> mDefaultWaterTexturep;
- U64 mSpaceTimeUSec;
};
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index 1bd08c0430..62d12603a0 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -67,6 +67,7 @@ LLSimInfo::LLSimInfo()
: mHandle(0),
mName(),
mAgentsUpdateTime(0),
+ mShowAgentLocations(FALSE),
mAccess(0x0),
mRegionFlags(0x0),
mWaterHeight(0.f),