summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/CMakeLists.txt6
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rwxr-xr-xindra/newview/app_settings/settings.xml22
-rwxr-xr-xindra/newview/llaisapi.cpp12
-rwxr-xr-xindra/newview/llappearancemgr.cpp62
-rwxr-xr-xindra/newview/llappearancemgr.h7
-rwxr-xr-xindra/newview/llappviewer.cpp12
-rwxr-xr-xindra/newview/llmeshrepository.cpp2
-rwxr-xr-xindra/newview/llsidepanelappearance.cpp3
-rwxr-xr-xindra/newview/lltoolmorph.cpp4
-rwxr-xr-xindra/newview/llviewerinventory.cpp3
-rwxr-xr-xindra/newview/llviewerregion.cpp6
-rwxr-xr-xindra/newview/llviewerregion.h2
-rw-r--r--indra/newview/llviewerwearable.cpp6
-rw-r--r--indra/newview/llviewerwearable.h6
-rwxr-xr-xindra/newview/llvoavatar.cpp6
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_setup.xml3
-rwxr-xr-xindra/newview/viewer_manifest.py6
18 files changed, 118 insertions, 52 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index dc9370bd69..d35180afc9 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1251,8 +1251,12 @@ set(viewer_HEADER_FILES
source_group("CMake Rules" FILES ViewerInstall.cmake)
+# the viewer_version.txt file created here is for passing to viewer_manifest
+# the summary.json file is created for the benefit of the TeamCity builds, where
+# it is used to provide descriptive information to the build results page
add_custom_target(generate_viewer_version ALL
- COMMAND echo "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}" > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+ COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+ COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}"}' > ${CMAKE_BINARY_DIR}/summary.json
COMMENT Generating viewer_version.txt for manifest processing
)
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 444877d48f..65afb3b886 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.5.3
+3.5.4
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 13bc571259..bb12cd59bc 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1905,6 +1905,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>CoroutineStackSize</key>
+ <map>
+ <key>Comment</key>
+ <string>Size (in bytes) for each coroutine stack</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>S32</string>
+ <key>Value</key>
+ <integer>262144</integer>
+ </map>
<key>CreateToolCopyCenters</key>
<map>
<key>Comment</key>
@@ -12505,6 +12516,17 @@
<key>Value</key>
<string>update</string>
</map>
+ <key>UpdaterWillingToTest</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether or not the updater should offer test candidate upgrades.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <string>1</string>
+ </map>
<key>UploadBakedTexOld</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index e57bbbb0be..6d5f1951f9 100755
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -313,12 +313,7 @@ void AISUpdate::parseUpdate(const LLSD& update)
const LLSD& links = embedded["link"];
parseCreatedLinks(links);
}
- else
- {
- //LL_DEBUGS("Inventory") << "unhandled embedded field " << field << llendl;
- }
}
-
}
// Parse item update at the top level.
@@ -326,6 +321,12 @@ void AISUpdate::parseUpdate(const LLSD& update)
{
LLUUID item_id = update["item_id"].asUUID();
LLPointer<LLViewerInventoryItem> new_item(new LLViewerInventoryItem);
+ LLViewerInventoryItem *curr_item = gInventory.getItem(item_id);
+ if (curr_item)
+ {
+ // Default to current values where not provided.
+ new_item->copyViewerItem(curr_item);
+ }
BOOL rv = new_item->unpackMessage(update);
if (rv)
{
@@ -469,6 +470,7 @@ void AISUpdate::doUpdate()
// cases. Maybe break out the update/create cases, in which
// case this is update.
LL_DEBUGS("Inventory") << "updated item " << item_id << llendl;
+ //LL_DEBUGS("Inventory") << ll_pretty_print_sd(new_item->asLLSD()) << llendl;
gInventory.updateItem(new_item);
}
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index f5f6faf6b6..cb32bf9c40 100755
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -436,11 +436,14 @@ S32 LLCallAfterInventoryCopyMgr::sInstanceCount = 0;
LLUpdateAppearanceOnDestroy::LLUpdateAppearanceOnDestroy(bool update_base_outfit_ordering,
bool enforce_item_restrictions,
- bool enforce_ordering):
+ bool enforce_ordering,
+ nullary_func_t post_update_func
+ ):
mFireCount(0),
mUpdateBaseOrder(update_base_outfit_ordering),
mEnforceItemRestrictions(enforce_item_restrictions),
- mEnforceOrdering(enforce_ordering)
+ mEnforceOrdering(enforce_ordering),
+ mPostUpdateFunc(post_update_func)
{
selfStartPhase("update_appearance_on_destroy");
}
@@ -464,7 +467,10 @@ LLUpdateAppearanceOnDestroy::~LLUpdateAppearanceOnDestroy()
selfStopPhase("update_appearance_on_destroy");
- LLAppearanceMgr::instance().updateAppearanceFromCOF(mUpdateBaseOrder, mEnforceItemRestrictions, mEnforceOrdering);
+ LLAppearanceMgr::instance().updateAppearanceFromCOF(mUpdateBaseOrder,
+ mEnforceItemRestrictions,
+ mEnforceOrdering,
+ mPostUpdateFunc);
}
}
@@ -473,29 +479,34 @@ LLUpdateAppearanceAndEditWearableOnDestroy::LLUpdateAppearanceAndEditWearableOnD
{
}
-LLUpdateAppearanceAndEditWearableOnDestroy::~LLUpdateAppearanceAndEditWearableOnDestroy()
+void edit_wearable_and_customize_avatar(LLUUID item_id)
{
- if (!LLApp::isExiting())
+ // Start editing the item if previously requested.
+ gAgentWearables.editWearableIfRequested(item_id);
+
+ // TODO: camera mode may not be changed if a debug setting is tweaked
+ if( gAgentCamera.cameraCustomizeAvatar() )
{
- LLAppearanceMgr::instance().updateAppearanceFromCOF();
-
- // Start editing the item if previously requested.
- gAgentWearables.editWearableIfRequested(mItemID);
-
- // TODO: camera mode may not be changed if a debug setting is tweaked
- if( gAgentCamera.cameraCustomizeAvatar() )
+ // If we're in appearance editing mode, the current tab may need to be refreshed
+ LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(
+ LLFloaterSidePanelContainer::getPanel("appearance"));
+ if (panel)
{
- // If we're in appearance editing mode, the current tab may need to be refreshed
- LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(
- LLFloaterSidePanelContainer::getPanel("appearance"));
- if (panel)
- {
- panel->showDefaultSubpart();
- }
+ panel->showDefaultSubpart();
}
}
}
+LLUpdateAppearanceAndEditWearableOnDestroy::~LLUpdateAppearanceAndEditWearableOnDestroy()
+{
+ if (!LLApp::isExiting())
+ {
+ LLAppearanceMgr::instance().updateAppearanceFromCOF(
+ false,true,true,
+ boost::bind(edit_wearable_and_customize_avatar, mItemID));
+ }
+}
+
struct LLFoundData
{
@@ -1971,7 +1982,8 @@ void LLAppearanceMgr::enforceCOFItemRestrictions(LLPointer<LLInventoryCallback>
void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering,
bool enforce_item_restrictions,
- bool enforce_ordering)
+ bool enforce_ordering,
+ nullary_func_t post_update_func)
{
if (mIsInUpdateAppearanceFromCOF)
{
@@ -1989,7 +2001,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering,
// enforce_item_restrictions to false so we don't get
// caught in a perpetual loop.
LLPointer<LLInventoryCallback> cb(
- new LLUpdateAppearanceOnDestroy(update_base_outfit_ordering, false, enforce_ordering));
+ new LLUpdateAppearanceOnDestroy(update_base_outfit_ordering, false, enforce_ordering, post_update_func));
enforceCOFItemRestrictions(cb);
return;
}
@@ -2003,7 +2015,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering,
// to wait for the update callbacks, then (finally!) call
// updateAppearanceFromCOF() with no additional COF munging needed.
LLPointer<LLInventoryCallback> cb(
- new LLUpdateAppearanceOnDestroy(false, false, false));
+ new LLUpdateAppearanceOnDestroy(false, false, false, post_update_func));
updateClothingOrderingInfo(LLUUID::null, update_base_outfit_ordering, cb);
return;
}
@@ -2120,6 +2132,7 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool update_base_outfit_ordering,
{
doOnIdleRepeating(boost::bind(&LLWearableHoldingPattern::pollFetchCompletion,holder));
}
+ post_update_func();
}
void LLAppearanceMgr::getDescendentsOfAssetType(const LLUUID& category,
@@ -3434,7 +3447,12 @@ bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_b
swap_item->setDescription(item->getActualDescription());
item->setDescription(tmp);
+ // LL_DEBUGS("Inventory") << "swap, item "
+ // << ll_pretty_print_sd(item->asLLSD())
+ // << " swap_item "
+ // << ll_pretty_print_sd(swap_item->asLLSD()) << llendl;
+ // FIXME switch to use AISv3 where supported.
//items need to be updated on a dataserver
item->setComplete(TRUE);
item->updateServer(FALSE);
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index 9eb26767c4..a257f30ea5 100755
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -51,7 +51,8 @@ public:
void updateAppearanceFromCOF(bool update_base_outfit_ordering = false,
bool enforce_item_restrictions = true,
- bool enforce_ordering = true);
+ bool enforce_ordering = true,
+ nullary_func_t post_update_func = no_op);
bool needToSaveCOF();
void updateCOF(const LLUUID& category, bool append = false);
void wearInventoryCategory(LLInventoryCategory* category, bool copy, bool append);
@@ -272,7 +273,8 @@ class LLUpdateAppearanceOnDestroy: public LLInventoryCallback
public:
LLUpdateAppearanceOnDestroy(bool update_base_outfit_ordering = false,
bool enforce_item_restrictions = true,
- bool enforce_ordering = true);
+ bool enforce_ordering = true,
+ nullary_func_t post_update_func = no_op);
virtual ~LLUpdateAppearanceOnDestroy();
/* virtual */ void fire(const LLUUID& inv_item);
@@ -281,6 +283,7 @@ private:
bool mUpdateBaseOrder;
bool mEnforceItemRestrictions;
bool mEnforceOrdering;
+ nullary_func_t mPostUpdateFunc;
};
class LLUpdateAppearanceAndEditWearableOnDestroy: public LLInventoryCallback
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 45a990f65f..fdc2cdb78d 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -117,6 +117,7 @@
#include "llleap.h"
#include "stringize.h"
+#include "llcoros.h"
// Third party library includes
#include <boost/bind.hpp>
@@ -755,6 +756,7 @@ bool LLAppViewer::init()
//set the max heap size.
initMaxHeapSize() ;
+ LLCoros::instance().setStackSize(gSavedSettings.getS32("CoroutineStackSize"));
LLPrivateMemoryPoolManager::initClass((BOOL)gSavedSettings.getBOOL("MemoryPrivatePoolEnabled"), (U32)gSavedSettings.getU32("MemoryPrivatePoolSize")*1024*1024) ;
@@ -2810,6 +2812,16 @@ bool LLAppViewer::initConfiguration()
loadColorSettings();
+ // Let anyone else who cares know that we've populated our settings
+ // variables.
+ for (LLControlGroup::key_iter ki(LLControlGroup::beginKeys()), kend(LLControlGroup::endKeys());
+ ki != kend; ++ki)
+ {
+ // For each named instance of LLControlGroup, send an event saying
+ // we've initialized an LLControlGroup instance by that name.
+ LLEventPumps::instance().obtain("LLControlGroup").post(LLSDMap("init", *ki));
+ }
+
return true; // Config was successful.
}
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 524467a37e..95289f7167 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -1216,8 +1216,8 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
mLODReqQ.push(req);
LLMeshRepository::sLODProcessing++;
}
+ mPendingLOD.erase(iter);
}
- mPendingLOD.erase(iter);
}
return true;
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index d25d203feb..e082859767 100755
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -452,8 +452,7 @@ void LLSidepanelAppearance::editWearable(LLViewerWearable *wearable, LLView *dat
LLFloaterSidePanelContainer::showPanel("appearance", LLSD());
LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(data);
if (panel)
- {
- panel->showOutfitsInventoryPanel();
+ {
panel->showWearableEditPanel(wearable, disable_camera_switch);
}
}
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
index fa94b52362..71e0509d03 100755
--- a/indra/newview/lltoolmorph.cpp
+++ b/indra/newview/lltoolmorph.cpp
@@ -151,7 +151,7 @@ void LLVisualParamHint::preRender(BOOL clear_depth)
LLViewerWearable* wearable = (LLViewerWearable*)mWearablePtr;
if (wearable)
{
- wearable->setVolitile(TRUE);
+ wearable->setVolatile(TRUE);
}
mLastParamWeight = mVisualParam->getWeight();
mWearablePtr->setVisualParamWeight(mVisualParam->getID(), mVisualParamWeight, FALSE);
@@ -250,7 +250,7 @@ BOOL LLVisualParamHint::render()
LLViewerWearable* wearable = (LLViewerWearable*)mWearablePtr;
if (wearable)
{
- wearable->setVolitile(FALSE);
+ wearable->setVolatile(FALSE);
}
gAgentAvatarp->updateVisualParams();
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 55575764b9..26aecd39d1 100755
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -360,7 +360,8 @@ void LLViewerInventoryItem::updateServer(BOOL is_new) const
if(gAgent.getID() != mPermissions.getOwner())
{
// *FIX: deal with this better.
- llwarns << "LLViewerInventoryItem::updateServer() - for unowned item"
+ llwarns << "LLViewerInventoryItem::updateServer() - for unowned item "
+ << ll_pretty_print_sd(this->asLLSD())
<< llendl;
return;
}
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index b635087d66..dca1a5b542 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1616,7 +1616,11 @@ void LLViewerRegion::unpackRegionHandshake()
msg->addUUID("AgentID", gAgent.getID());
msg->addUUID("SessionID", gAgent.getSessionID());
msg->nextBlock("RegionInfo");
- msg->addU32("Flags", 0x0 );
+
+ U32 flags = 0;
+ flags |= REGION_HANDSHAKE_SUPPORTS_SELF_APPEARANCE;
+
+ msg->addU32("Flags", flags );
msg->sendReliable(host);
}
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index b5fe4677b7..5ac2a83aaf 100755
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -49,6 +49,8 @@
#define WATER 2
const U32 MAX_OBJECT_CACHE_ENTRIES = 50000;
+// Region handshake flags
+const U32 REGION_HANDSHAKE_SUPPORTS_SELF_APPEARANCE = 1U << 2;
class LLEventPoll;
class LLVLComposition;
diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp
index e8425dc76a..76f94935b8 100644
--- a/indra/newview/llviewerwearable.cpp
+++ b/indra/newview/llviewerwearable.cpp
@@ -72,14 +72,16 @@ private:
static std::string asset_id_to_filename(const LLUUID &asset_id);
LLViewerWearable::LLViewerWearable(const LLTransactionID& transaction_id) :
- LLWearable()
+ LLWearable(),
+ mVolatile(FALSE)
{
mTransactionID = transaction_id;
mAssetID = mTransactionID.makeAssetID(gAgent.getSecureSessionID());
}
LLViewerWearable::LLViewerWearable(const LLAssetID& asset_id) :
- LLWearable()
+ LLWearable(),
+ mVolatile(FALSE)
{
mAssetID = asset_id;
mTransactionID.setNull();
diff --git a/indra/newview/llviewerwearable.h b/indra/newview/llviewerwearable.h
index 047b2ce143..ef8c29323e 100644
--- a/indra/newview/llviewerwearable.h
+++ b/indra/newview/llviewerwearable.h
@@ -68,8 +68,8 @@ public:
void setParamsToDefaults();
void setTexturesToDefaults();
- void setVolitile(BOOL volitle) { mVolitle = volitle; } // TRUE when doing preview renders, some updates will be suppressed.
- BOOL getVolitile() { return mVolitle; }
+ void setVolatile(BOOL is_volatile) { mVolatile = is_volatile; } // TRUE when doing preview renders, some updates will be suppressed.
+ BOOL getVolatile() { return mVolatile; }
/*virtual*/ LLUUID getDefaultTextureImageID(LLAvatarAppearanceDefines::ETextureIndex index) const;
@@ -98,7 +98,7 @@ protected:
LLAssetID mAssetID;
LLTransactionID mTransactionID;
- BOOL mVolitle; // True when rendering preview images. Can suppress some updates.
+ BOOL mVolatile; // True when rendering preview images. Can suppress some updates.
LLUUID mItemID; // ID of the inventory item in the agent's inventory
};
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 46b909c4a1..8c20533b4c 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5223,7 +5223,7 @@ void LLVOAvatar::computeBodySize()
// Enforce a constraint to make sure we don't go below 1.1 meters (server-enforced limit)
// Camera positioning and other things start to break down when your avatar is "walking" while being fully underground
const LLViewerObject * last_object = NULL;
- if (isSelf() && getWearableData() && isFullyLoaded() && !LLApp::isQuitting())
+ if (isSelf() && getWearableData() && !LLApp::isQuitting())
{
// Do not force a hover parameter change while we have pending attachments, which may be mesh-based with
// joint offsets.
@@ -5246,7 +5246,7 @@ void LLVOAvatar::computeBodySize()
last_object = object;
llwarns << "attachment at point: " << (*points_iter).first << " object exists: " << object->getAttachmentItemID() << llendl;
loaded &=!object->isDrawableState(LLDrawable::REBUILD_ALL);
- if (!loaded && shape && !shape->getVolitile())
+ if (!loaded && shape && !shape->getVolatile())
{
llwarns << "caught unloaded attachment! skipping enforcement" << llendl;
}
@@ -5259,7 +5259,7 @@ void LLVOAvatar::computeBodySize()
{
LL_DEBUGS("Avatar") << "scanned at least one object!" << LL_ENDL;
}
- if (loaded && shape && !shape->getVolitile())
+ if (loaded && shape && !shape->getVolatile())
{
F32 hover_value = shape->getVisualParamWeight(AVATAR_HOVER);
if (hover_value < 0.0f && (mBodySize.mV[VZ] + hover_value < 1.1f))
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index 2fb6a9fd40..dd4533ae74 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -237,8 +237,7 @@
enabled="true"
follows="left|top"
height="14"
- initial_value="true"
- control_name="UpdateWillingToTest"
+ control_name="UpdaterWillingToTest"
label="Willing to update to release candidates"
left_delta="0"
mouse_opaque="true"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index bc473f6d62..2578c81224 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -154,10 +154,8 @@ class ViewerManifest(LLManifest):
# Files in the newview/ directory
self.path("gpu_table.txt")
-
- # The summary.json file gets left in the base checkout dir by
- # build.sh. It's only created for a build.sh build.
- if not self.path2basename(os.path.join(os.pardir, os.pardir), "summary.json"):
+ # The summary.json file gets left in the build directory by newview/CMakeLists.txt.
+ if not self.path2basename(os.pardir, "summary.json"):
print "No summary.json file"
def grid(self):