From adfc7f4d48004c5fc67ecaaebaaa84c1cdf5a880 Mon Sep 17 00:00:00 2001 From: callum_linden Date: Tue, 2 Feb 2016 16:18:30 -0800 Subject: [PATCH 01/15] Pick up LLCEFLib containing (hopeful) fix for BUG-11265 --- autobuild.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index ff436a7ef8..471bcbc426 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1536,11 +1536,11 @@ archive hash - fe4b09930b509d322b10bd27821bd876 + 044169801c6ab2f7856d45bc23eb7fae hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310159/arch/Darwin/installer/llceflib-1.5.3.310159-darwin-310159.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310624/arch/Darwin/installer/llceflib-1.5.3.310624-darwin-310624.tar.bz2 name darwin @@ -1550,18 +1550,18 @@ archive hash - 8fe98baea7ecb950d9611e9f6850cb1f + e004ecc1643d7f60c50f1f9a71554ea2 hash_algorithm md5 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310159/arch/CYGWIN/installer/llceflib-1.5.3.310159-windows-310159.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llceflib_3p-llceflib/rev/310624/arch/CYGWIN/installer/llceflib-1.5.3.310624-windows-310624.tar.bz2 name windows version - 1.5.3.310159 + 1.5.3.310624 llphysicsextensions_source From b8bb07533e4eb62368f673b6de1033bc8c46e6a9 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 7 Feb 2016 15:17:57 +0100 Subject: [PATCH 02/15] FIXED Crash in LLVOVolume::notifyAboutMissingAsset() --- indra/newview/llvovolume.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index b0eb60cc76..25008ccc4f 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2115,6 +2115,8 @@ bool LLVOVolume::notifyAboutMissingAsset(LLViewerTexture *texture) for(mmap_UUID_MAP_t::iterator range_it = range.first; range_it != range.second; ++range_it) { LLMaterialPtr cur_material = getTEMaterialParams(range_it->second.te); + if (cur_material.isNull()) + continue; switch(range_it->second.map) { From d405e8da7ba2d4b9e4704ed8d4a3dcf9a3a4dfe1 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 7 Feb 2016 15:18:18 +0100 Subject: [PATCH 03/15] FIXED Crash in LLVOVolume::lineSegmentIntersect() --- indra/newview/llvovolume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 25008ccc4f..476c0eef15 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -3904,7 +3904,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& if (mDrawable->isState(LLDrawable::RIGGED)) { - if ((pick_rigged) || ((getAvatar()->isSelf()) && (LLFloater::isVisible(gFloaterTools)))) + if ((pick_rigged) || (getAvatar() && (getAvatar()->isSelf()) && (LLFloater::isVisible(gFloaterTools)))) { updateRiggedVolume(true); volume = mRiggedVolume; From 26bd519536f5e450811fda4a876c054a336f406d Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sat, 13 Feb 2016 15:29:02 +0100 Subject: [PATCH 04/15] FIXED Crash in LLPreviewTexture destructor --- indra/newview/llpreviewtexture.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index c8cf0faa15..2a2c51be40 100755 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -89,8 +89,12 @@ LLPreviewTexture::~LLPreviewTexture() { getWindow()->decBusyCount(); } - mImage->setBoostLevel(mImageOldBoostLevel); - mImage = NULL; + + if (mImage.notNull()) + { + mImage->setBoostLevel(mImageOldBoostLevel); + mImage = NULL; + } } // virtual From 51786e9441159a1363d391588e9b1290d824725d Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 14 Feb 2016 17:52:23 +0100 Subject: [PATCH 05/15] BUG-11401 FIXED Viewer crashes at logout when using Ctrl-Q/Alt-F4 --- indra/newview/lltoolmgr.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index 3ecb4015ce..2f8e464b71 100755 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -400,6 +400,9 @@ void LLToolMgr::clearTransientTool() void LLToolMgr::onAppFocusLost() { + if (LLApp::isQuitting()) + return; + if (mSelectedTool) { mSelectedTool->handleDeselect(); From cedfff131213d71b3f61194034a8b8a890416bcc Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 14 Feb 2016 17:55:31 +0100 Subject: [PATCH 06/15] BUG-11402 FIXED Crash when opening a group floater when disconnected --- indra/newview/llpanelgroupexperiences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelgroupexperiences.cpp b/indra/newview/llpanelgroupexperiences.cpp index 76b68122fb..2d7690895f 100644 --- a/indra/newview/llpanelgroupexperiences.cpp +++ b/indra/newview/llpanelgroupexperiences.cpp @@ -102,7 +102,7 @@ void LLPanelGroupExperiences::activate() } // search for experiences owned by the current group - std::string url = gAgent.getRegion()->getCapability("GroupExperiences"); + std::string url = (gAgent.getRegion()) ? gAgent.getRegion()->getCapability("GroupExperiences") : LLStringUtil::null; if (!url.empty()) { url += "?" + getGroupID().asString(); From ade46cfee04b21cbe88ab64f148e0087ef0a74c6 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Sun, 14 Feb 2016 20:40:11 +0100 Subject: [PATCH 07/15] FIXED Crash in LLGroupMgr::notifyObservers() when closing a group invitation before the group properties arrive --- indra/newview/llnotificationlistitem.cpp | 3 +-- indra/newview/llnotificationlistitem.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/indra/newview/llnotificationlistitem.cpp b/indra/newview/llnotificationlistitem.cpp index 8cdc2d7c0b..cbcf9cac9c 100644 --- a/indra/newview/llnotificationlistitem.cpp +++ b/indra/newview/llnotificationlistitem.cpp @@ -381,7 +381,7 @@ LLGroupNoticeNotificationListItem::LLGroupNoticeNotificationListItem(const Param buildFromFile("panel_notification_list_item.xml"); } -LLGroupNoticeNotificationListItem::~LLGroupNoticeNotificationListItem() +LLGroupNotificationListItem::~LLGroupNotificationListItem() { LLGroupMgr::getInstance()->removeObserver(this); } @@ -539,7 +539,6 @@ void LLGroupNoticeNotificationListItem::close() mInventoryOffer->forceResponse(IOR_DECLINE); mInventoryOffer = NULL; } - LLGroupMgr::getInstance()->removeObserver(this); } void LLGroupNoticeNotificationListItem::onClickAttachment() diff --git a/indra/newview/llnotificationlistitem.h b/indra/newview/llnotificationlistitem.h index 9a4ce2be4b..3dd52986b0 100644 --- a/indra/newview/llnotificationlistitem.h +++ b/indra/newview/llnotificationlistitem.h @@ -136,6 +136,7 @@ class LLGroupNotificationListItem : public LLNotificationListItem, public LLGroupMgrObserver { public: + virtual ~LLGroupNotificationListItem(); virtual BOOL postBuild(); void setGroupId(const LLUUID& value); @@ -192,7 +193,6 @@ class LLGroupNoticeNotificationListItem : public LLGroupNotificationListItem { public: - ~LLGroupNoticeNotificationListItem(); static std::set getTypes(); virtual BOOL postBuild(); From 9cc913b36d25be142cd7029972526848c198c3a4 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 15 Feb 2016 11:07:56 +0200 Subject: [PATCH 08/15] MAINT-867 Inventory dialog stays in transparent mode after object was taken to inventory --- indra/newview/llinventorypanel.cpp | 5 +++++ 1 file changed, 5 insertions(+) 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); } } From fb487d9270e1fc433ae23319df4cabf989319c37 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 15 Feb 2016 11:20:06 +0200 Subject: [PATCH 09/15] MAINT-6135 Set non-zero minimum value for slider to prevent vanishing trees on lowest setting. --- .../newview/skins/default/xui/en/panel_preferences_graphics1.xml | 1 + 1 file changed, 1 insertion(+) 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" From 72685fe1cb6faffa648cc46259699097033a31e3 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Wed, 17 Feb 2016 02:40:58 +0200 Subject: [PATCH 10/15] MAINT-6132 Fixed error on uploading models with texture --- indra/llprimitive/lldaeloader.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp index 9a1f8d09e8..9ce17ef276 100644 --- a/indra/llprimitive/lldaeloader.cpp +++ b/indra/llprimitive/lldaeloader.cpp @@ -851,9 +851,7 @@ bool LLDAELoader::OpenFile(const std::string& filename) { //no suitable slm exists, load from the .dae file DAE dae; - - std::string fileURI = "from memory"; // set to a null device - domCOLLADA* dom = dae.openFromMemory(fileURI, preprocessDAE(filename).c_str()); + domCOLLADA* dom = dae.openFromMemory(filename, preprocessDAE(filename).c_str()); if (!dom) { @@ -881,7 +879,7 @@ bool LLDAELoader::OpenFile(const std::string& filename) daeInt count = db->getElementCount(NULL, COLLADA_TYPE_MESH); - daeDocument* doc = dae.getDoc(fileURI); + daeDocument* doc = dae.getDoc(filename); if (!doc) { LL_WARNS() << "can't find internal doc" << LL_ENDL; From 8920beabc4b01dfdbd8eb3bbe33deefe03896f7d Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Wed, 17 Feb 2016 03:01:04 +0200 Subject: [PATCH 11/15] MAINT-5678 Improvement: ImporterPreprocessDAE debug setting to disable DAE preprocessing when needed --- indra/llprimitive/lldaeloader.cpp | 17 ++++++++++++++--- indra/llprimitive/lldaeloader.h | 4 +++- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llfloatermodelpreview.cpp | 3 ++- 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/indra/llprimitive/lldaeloader.cpp b/indra/llprimitive/lldaeloader.cpp index 9ce17ef276..720986a411 100644 --- a/indra/llprimitive/lldaeloader.cpp +++ b/indra/llprimitive/lldaeloader.cpp @@ -816,7 +816,8 @@ LLDAELoader::LLDAELoader( void* opaque_userdata, JointTransformMap& jointMap, JointSet& jointsFromNodes, - U32 modelLimit) + U32 modelLimit, + bool preprocess) : LLModelLoader( filename, lod, @@ -827,7 +828,8 @@ LLDAELoader::LLDAELoader( opaque_userdata, jointMap, jointsFromNodes), -mGeneratedModelLimit(modelLimit) +mGeneratedModelLimit(modelLimit), +mPreprocessDAE(preprocess) { } @@ -851,7 +853,16 @@ bool LLDAELoader::OpenFile(const std::string& filename) { //no suitable slm exists, load from the .dae file DAE dae; - domCOLLADA* dom = dae.openFromMemory(filename, preprocessDAE(filename).c_str()); + domCOLLADA* dom; + if (mPreprocessDAE) + { + dom = dae.openFromMemory(filename, preprocessDAE(filename).c_str()); + } + else + { + LL_INFOS() << "Skipping dae preprocessing" << LL_ENDL; + dom = dae.open(filename); + } if (!dom) { diff --git a/indra/llprimitive/lldaeloader.h b/indra/llprimitive/lldaeloader.h index 19a85a5339..27db5326d5 100644 --- a/indra/llprimitive/lldaeloader.h +++ b/indra/llprimitive/lldaeloader.h @@ -56,7 +56,8 @@ public: void* opaque_userdata, JointTransformMap& jointMap, JointSet& jointsFromNodes, - U32 modelLimit); + U32 modelLimit, + bool preprocess); virtual ~LLDAELoader() ; virtual bool OpenFile(const std::string& filename); @@ -104,6 +105,7 @@ protected: private: U32 mGeneratedModelLimit; // Attempt to limit amount of generated submodels + bool mPreprocessDAE; }; #endif // LL_LLDAELLOADER_H diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1fdfdb51a8..4a69133fde 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -34,6 +34,17 @@ U32 Value 768 + + ImporterPreprocessDAE + + Comment + Enable preprocessing for DAE files to fix some ColladaDOM related problems (like support for space characters within names and ids). + Persist + 1 + Type + Boolean + Value + 1 IMShowTime diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 29bbf7d01e..2255e10678 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1766,7 +1766,8 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable this, mJointTransformMap, mJointsFromNode, - gSavedSettings.getU32("ImporterModelLimit")); + gSavedSettings.getU32("ImporterModelLimit"), + gSavedSettings.getBOOL("ImporterPreprocessDAE")); if (force_disable_slm) { From 200f7dedf258ec7cbbe2266fce6a189386df7249 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Wed, 17 Feb 2016 11:56:21 +0200 Subject: [PATCH 12/15] MAINT-6142 Assorted viewer crashes when viewer is in a disconnected state & certain floaters are opened. --- indra/newview/llfloaterland.cpp | 174 +++++++++++----------- indra/newview/llfloaterregioninfo.cpp | 24 +++ indra/newview/llfloaterregioninfo.h | 1 + indra/newview/llpanelgroupexperiences.cpp | 4 +- 4 files changed, 118 insertions(+), 85 deletions(-) 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,31 +476,11 @@ BOOL LLPanelLandGeneral::postBuild() mBtnBuyLand = getChild("Buy Land..."); mBtnBuyLand->setClickedCallback(onClickBuyLand, (void*)&BUY_PERSONAL_LAND); - // 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("Scripts..."); - if(mBtnScriptLimits) - { - mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this); - } - } - else - { - mBtnScriptLimits = getChild("Scripts..."); - if(mBtnScriptLimits) - { - mBtnScriptLimits->setVisible(false); - } - } - + mBtnBuyGroupLand = getChild("Buy For Group..."); mBtnBuyGroupLand->setClickedCallback(onClickBuyLand, (void*)&BUY_GROUP_LAND); - - + + mBtnBuyPass = getChild("Buy Pass..."); mBtnBuyPass->setClickedCallback(onClickBuyPass, this); @@ -508,10 +489,36 @@ BOOL LLPanelLandGeneral::postBuild() mBtnReclaimLand = getChild("Reclaim Land..."); mBtnReclaimLand->setClickedCallback(onClickReclaim, NULL); - + mBtnStartAuction = getChild("Linden Sale..."); mBtnStartAuction->setClickedCallback(onClickStartAuction, this); + mBtnScriptLimits = getChild("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()) + { + if(mBtnScriptLimits) + { + mBtnScriptLimits->setClickedCallback(onClickScriptLimits, this); + } + } + else + { + if(mBtnScriptLimits) + { + mBtnScriptLimits->setVisible(false); + } + } + 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("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 df5b226d98..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("Experiences"); } +void LLFloaterRegionInfo::disableTabCtrls() +{ + LLTabContainer* tab = getChild("region_panels"); + tab->getChild("General")->setCtrlsEnabled(FALSE); + tab->getChild("Debug")->setCtrlsEnabled(FALSE); + tab->getChild("Terrain")->setCtrlsEnabled(FALSE); + tab->getChild("panel_env_info")->setCtrlsEnabled(FALSE); + tab->getChild("Estate")->setCtrlsEnabled(FALSE); +} void LLFloaterRegionInfo::onTabSelected(const LLSD& param) { @@ -3129,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 4cd50c0882..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 diff --git a/indra/newview/llpanelgroupexperiences.cpp b/indra/newview/llpanelgroupexperiences.cpp index 76b68122fb..bba2447ba7 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; } From 145aa1d0740e74aa98f7809dd1f2668b0546a131 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Thu, 18 Feb 2016 11:36:05 +0200 Subject: [PATCH 13/15] MAINT-6119 Viewer needs a few NULL uuid checks --- indra/newview/llinventorymodel.cpp | 5 +++++ indra/newview/llinventoryobserver.cpp | 6 ++++++ 2 files changed, 11 insertions(+) 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(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); From 3e56ba7d6c88f1a3681071f1f0d0ea386717f6e1 Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Fri, 19 Feb 2016 00:22:06 +0200 Subject: [PATCH 14/15] Updated contributors.txt --- doc/contributions.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/contributions.txt b/doc/contributions.txt index c4eb2901f6..049af6c691 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -367,6 +367,8 @@ Dimitrio Lewis Dirk Draconis Neurocam STORM-1259 +Drake Arconis + MAINT-6107 Drew Dri VWR-19683 Drew Dwi @@ -769,6 +771,9 @@ Kitty Barnett VWR-24217 STORM-1804 MAINT-5416 + MAINT-6041 + MAINT-6142 + MAINT-6144 Kolor Fall Komiko Okamoto Korvel Noh From d8f7a40dea011b3a68fdf8120c8bc7035e93019a Mon Sep 17 00:00:00 2001 From: AndreyL ProductEngine Date: Fri, 19 Feb 2016 04:05:09 +0200 Subject: [PATCH 15/15] Added newly created tickets for Kitty's fixes to contributors.txt --- doc/contributions.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/contributions.txt b/doc/contributions.txt index 049af6c691..e1a221b12a 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -774,6 +774,9 @@ Kitty Barnett MAINT-6041 MAINT-6142 MAINT-6144 + MAINT-6152 + MAINT-6153 + MAINT-6154 Kolor Fall Komiko Okamoto Korvel Noh