diff options
32 files changed, 189 insertions, 94 deletions
| @@ -541,3 +541,4 @@ ad0e15543836d64d6399d28b32852510435e344a 5.1.0-release  ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release  23ea0fe36fadf009a60c080392ce80e4bf8af8d9 5.1.8-release  52422540bfe54b71155aa455360bee6e3ef1fd96 5.1.9-release +821edfcd14919c0e95c590866171c61fb57e8623 6.0.0-release diff --git a/autobuild.xml b/autobuild.xml index 3107d77548..513728623b 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -2526,9 +2526,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>bb8bed08fd5973a040c509ef8b545ec8</string> +              <string>2c17cfd900c88914e06947fe0f1fdae4</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/490/1046/ogg_vorbis-1.2.2-1.3.2.500397-darwin64-500397.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25395/199641/ogg_vorbis-1.3.3-1.3.6.520171-darwin64-520171.tar.bz2</string>              </map>              <key>name</key>              <string>darwin64</string> @@ -2562,9 +2562,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>f7edf86dcf2d9be7bee98c91256fa569</string> +              <string>1818627d4d1f05b49709717e240bdcf4</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/512/1108/ogg_vorbis-1.2.2-1.3.2.500397-windows-500397.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25396/199634/ogg_vorbis-1.3.3-1.3.6.520171-windows-520171.tar.bz2</string>              </map>              <key>name</key>              <string>windows</string> @@ -2574,16 +2574,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>              <key>archive</key>              <map>                <key>hash</key> -              <string>497ec6ac26c2e136ee65acbed86cb2ef</string> +              <string>d124788c798684c890c1803fca541a10</string>                <key>url</key> -              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/511/1105/ogg_vorbis-1.2.2-1.3.2.500397-windows64-500397.tar.bz2</string> +              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25397/199631/ogg_vorbis-1.3.3-1.3.6.520171-windows64-520171.tar.bz2</string>              </map>              <key>name</key>              <string>windows64</string>            </map>          </map>          <key>version</key> -        <string>1.2.2-1.3.2.500397</string> +        <string>1.3.3-1.3.6.520171</string>        </map>        <key>open-libndofdev</key>        <map> diff --git a/doc/contributions.txt b/doc/contributions.txt index 90bbb1c2c6..a09b6aff43 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -342,6 +342,8 @@ Celierra Darling  Chantal Harvey  Charles Courtois  Charlie Sazaland +Chaser Zaks +    BUG-225599  Cherry Cheevers  ChickyBabes Zuzu  Christopher  Organiser @@ -366,6 +368,7 @@ Cinder Roxley      STORM-2037      STORM-2053      STORM-2113 +    STORM-2116      STORM-2127      STORM-2144  Clara Young diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 49ed8b495d..40eb7d9bac 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1028,7 +1028,7 @@ namespace          }      } -	void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message, bool show_location = true, bool show_time = true, bool show_tags = true, bool show_level = true, bool show_function = true) +	void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message)  	{  		LLError::ELevel level = site.mLevel;  		LLError::SettingsConfigPtr s = LLError::Settings::getInstance()->getSettingsConfig(); @@ -1052,7 +1052,7 @@ namespace  			}              message_stream << " "; -			if (show_level && r->wantsLevel()) +			if (r->wantsLevel())              {  				message_stream << site.mLevelString;              } @@ -1070,7 +1070,7 @@ namespace              }              message_stream << " "; -			if (show_function && r->wantsFunctionName()) +			if (r->wantsFunctionName())  			{  				message_stream << site.mFunctionString;  			} diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp index d175204e6d..01fe82e45d 100644 --- a/indra/llui/lltextbox.cpp +++ b/indra/llui/lltextbox.cpp @@ -43,7 +43,8 @@ template class LLTextBox* LLView::getChild<class LLTextBox>(  LLTextBox::LLTextBox(const LLTextBox::Params& p)  :	LLTextBase(p), -	mClickedCallback(NULL) +	mClickedCallback(NULL), +	mShowCursorHand(true)  {}  LLTextBox::~LLTextBox() @@ -103,7 +104,7 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask)  BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask)  {  	BOOL handled = LLTextBase::handleHover(x, y, mask); -	if (!handled && mClickedCallback) +	if (!handled && mClickedCallback && mShowCursorHand)  	{  		// Clickable text boxes change the cursor to a hand  		LLUI::getWindow()->setCursor(UI_CURSOR_HAND); diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h index 071e18c638..061d2dd23d 100644 --- a/indra/llui/lltextbox.h +++ b/indra/llui/lltextbox.h @@ -68,11 +68,14 @@ public:  	/*virtual*/ LLSD	getValue() const;  	/*virtual*/ BOOL	setTextArg( const std::string& key, const LLStringExplicit& text ); +	void			setShowCursorHand(bool show_cursor) { mShowCursorHand = show_cursor; } +  protected:  	void            onUrlLabelUpdated(const std::string &url, const std::string &label);  	LLUIString			mText;  	callback_t			mClickedCallback; +	bool				mShowCursorHand;  };  // Build time optimization, generate once in .cpp file diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 09b254e90c..5fe6072304 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.0.0 +6.0.1 diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 7aff9fb586..d63ee1b367 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -530,13 +530,6 @@ void LLFloaterPreference::onDoNotDisturbResponseChanged()  LLFloaterPreference::~LLFloaterPreference()  { -	// clean up user data -	LLComboBox* ctrl_window_size = getChild<LLComboBox>("windowsize combo"); -	for (S32 i = 0; i < ctrl_window_size->getItemCount(); i++) -	{ -		ctrl_window_size->setCurrentByIndex(i); -	} -  	LLConversationLog::instance().removeObserver(this);  } @@ -2323,12 +2316,21 @@ BOOL LLPanelPreference::postBuild()  	{  		getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2));  	} +	if (hasChild("allow_multiple_viewer_check", TRUE)) +	{ +		getChild<LLCheckBoxCtrl>("allow_multiple_viewer_check")->setCommitCallback(boost::bind(&showMultipleViewersWarning, _1, _2)); +	}  	if (hasChild("favorites_on_login_check", TRUE))  	{  		getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&handleFavoritesOnLoginChanged, _1, _2));  		bool show_favorites_at_login = LLPanelLogin::getShowFavorites();  		getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setValue(show_favorites_at_login);  	} +	if (hasChild("mute_chb_label", TRUE)) +	{ +		getChild<LLTextBox>("mute_chb_label")->setShowCursorHand(false); +		getChild<LLTextBox>("mute_chb_label")->setClickedCallback(boost::bind(&toggleMuteWhenMinimized)); +	}  	//////////////////////PanelAdvanced ///////////////////  	if (hasChild("modifier_combo", TRUE)) @@ -2418,6 +2420,14 @@ void LLPanelPreference::saveSettings()  	}	  } +void LLPanelPreference::showMultipleViewersWarning(LLUICtrl* checkbox, const LLSD& value) +{ +    if (checkbox && checkbox->getValue()) +    { +        LLNotificationsUtil::add("AllowMultipleViewers"); +    } +} +  void LLPanelPreference::showFriendsOnlyWarning(LLUICtrl* checkbox, const LLSD& value)  {  	if (checkbox && checkbox->getValue()) @@ -2438,6 +2448,12 @@ void LLPanelPreference::handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const  	}  } +void LLPanelPreference::toggleMuteWhenMinimized() +{ +	std::string mute("MuteWhenMinimized"); +	gSavedSettings.setBOOL(mute, !gSavedSettings.getBOOL(mute)); +} +  void LLPanelPreference::cancel()  {  	for (control_values_map_t::iterator iter =  mSavedValues.begin(); diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 8339a18296..4e51137df5 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -241,9 +241,12 @@ protected:  private:  	//for "Only friends and groups can call or IM me"  	static void showFriendsOnlyWarning(LLUICtrl*, const LLSD&); +    //for  "Allow Multiple Viewers" +    static void showMultipleViewersWarning(LLUICtrl*, const LLSD&);  	//for "Show my Favorite Landmarks at Login"  	static void handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const LLSD& value); +	static void toggleMuteWhenMinimized();  	typedef std::map<std::string, LLColor4> string_color_map_t;  	string_color_map_t mSavedColors; diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index 468537e659..1ea3a07536 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -138,7 +138,10 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:  	{  		if(objectp->isHUDAttachment())  		{ -			((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI)); +			if (isAgentAvatarValid()) +			{ +				((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI)); +			}  		}  		else  		{ diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 3c3b004d2c..1e9c9ce5e0 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -300,8 +300,8 @@ BOOL LLFloaterWorldMap::postBuild()  	landmark_combo->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) );  	mListLandmarkCombo = dynamic_cast<LLCtrlListInterface *>(landmark_combo); -	mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f); -	getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale); +	mCurZoomVal = log(LLWorldMapView::sMapScale/256.f)/log(2.f); +	getChild<LLUICtrl>("zoom slider")->setValue(mCurZoomVal);  	setDefaultBtn(NULL); diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp index b93dfaf061..d40a7234e2 100644 --- a/indra/newview/llfolderviewmodelinventory.cpp +++ b/indra/newview/llfolderviewmodelinventory.cpp @@ -181,24 +181,26 @@ bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* ite  	S32 filter_generation = filter.getCurrentGeneration();  	bool continue_filtering = true; -	if (item->getLastFilterGeneration() < filter_generation) +	if (item)  	{ -		// Recursive application of the filter for child items (CHUI-849) -		continue_filtering = item->filter( filter ); -	} +		if (item->getLastFilterGeneration() < filter_generation) +		{ +			// Recursive application of the filter for child items (CHUI-849) +			continue_filtering = item->filter(filter); +		} -	// Update latest generation to pass filter in parent and propagate up to root -	if (item->passedFilter()) -	{ -		LLFolderViewModelItemInventory* view_model = this; -		 -		while(view_model && view_model->mMostFilteredDescendantGeneration < filter_generation) +		// Update latest generation to pass filter in parent and propagate up to root +		if (item->passedFilter())  		{ -			view_model->mMostFilteredDescendantGeneration = filter_generation; -			view_model = static_cast<LLFolderViewModelItemInventory*>(view_model->mParent); +			LLFolderViewModelItemInventory* view_model = this; + +			while (view_model && view_model->mMostFilteredDescendantGeneration < filter_generation) +			{ +				view_model->mMostFilteredDescendantGeneration = filter_generation; +				view_model = static_cast<LLFolderViewModelItemInventory*>(view_model->mParent); +			}  		}  	} -  	return continue_filtering;  } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e4b6c3b554..1987e15850 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2474,12 +2474,14 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  		const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);  		const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);  		const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); +		const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false);  		const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);  		const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);  		const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);  		const BOOL move_is_into_current_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_CURRENT_OUTFIT);  		const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id); +		const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id);  		//--------------------------------------------------------------------------------  		// Determine if folder can be moved. @@ -2529,6 +2531,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,  		{  			is_movable = FALSE;  		} +		if (is_movable && move_is_into_lost_and_found) +		{ +			is_movable = FALSE; +		}  		if (is_movable && (mUUID == model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE)))  		{  			is_movable = FALSE; @@ -3642,12 +3648,14 @@ void LLFolderBridge::perform_pasteFromClipboard()          const LLUUID &marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);  		const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);  		const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); +		const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false);  		const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);  		const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);  		const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);          const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id);  		const BOOL move_is_into_favorites = (mUUID == favorites_id); +		const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id);  		std::vector<LLUUID> objects;  		LLClipboard::instance().pasteFromClipboard(objects); @@ -3714,6 +3722,13 @@ void LLFolderBridge::perform_pasteFromClipboard()  			LLInventoryObject *obj = model->getObject(item_id);  			if (obj)  			{ +				if (move_is_into_lost_and_found) +				{ +					if (LLAssetType::AT_CATEGORY == obj->getType()) +					{ +						return; +					} +				}  				if (move_is_into_current_outfit || move_is_into_outfit)  				{  					if (item && can_move_to_outfit(item, move_is_into_current_outfit)) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 2b9607f7a2..a520e0171e 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -2368,7 +2368,11 @@ void LLInventoryModel::buildParentChildMap()  		}  		// FIXME note that updateServer() fails with protected  		// types, so this will not work as intended in that case. -		cat->updateServer(TRUE); +		// UpdateServer uses AIS, AIS cat move is not implemented yet +		// cat->updateServer(TRUE); + +		// MoveInventoryFolder message, intentionally per item +		cat->updateParentOnServer(FALSE);  		catsp = getUnlockedCatArray(cat->getParentUUID());  		if(catsp)  		{ diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 1481992f43..3992b506e9 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1128,12 +1128,16 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it  	mCompletionObserver->reset();  	for (std::deque<LLFolderViewItem*>::const_iterator it = items.begin(); it != items.end(); ++it)  	{ -		LLUUID id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID(); -		LLViewerInventoryItem* inv_item = mInventory->getItem(id); - -		if (inv_item && !inv_item->isFinished()) +		LLFolderViewModelItemInventory* view_model = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem()); +		if (view_model)  		{ -			mCompletionObserver->watchItem(id); +			LLUUID id = view_model->getUUID(); +			LLViewerInventoryItem* inv_item = mInventory->getItem(id); + +			if (inv_item && !inv_item->isFinished()) +			{ +				mCompletionObserver->watchItem(id); +			}  		}  	} @@ -1159,6 +1163,11 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it  			LLFolderViewModelItemInventory* fve_listener = static_cast<LLFolderViewModelItemInventory*>(folder_item->getViewModelItem());  			if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY))  			{ +				if (fve_listener->getInventoryObject() && fve_listener->getInventoryObject()->getIsLinkType()) +				{ +					return; +				} +  				if(prev_folder_item)  				{  					LLFolderBridge* prev_bridge = (LLFolderBridge*)prev_folder_item->getViewModelItem(); diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 13ee7bb003..8d7865c8ba 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -718,11 +718,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)  		bool		identical_color	= false;  		if(mColorSwatch) -			{ +		{  			LLSelectedTE::getColor(color, identical_color); +			LLColor4 prev_color = mColorSwatch->get();  			mColorSwatch->setOriginal(color); -			mColorSwatch->set(color, TRUE); +			mColorSwatch->set(color, force_set_values || (prev_color != color) || !editable);  			mColorSwatch->setValid(editable);  			mColorSwatch->setEnabled( editable ); @@ -1318,8 +1319,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)  				//  				if (!material->getSpecularID().isNull())  				{ -					getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(material->getSpecularLightColor()); -					getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE); +					LLColorSwatchCtrl*	shiny_swatch = getChild<LLColorSwatchCtrl>("shinycolorswatch"); +					LLColor4 new_color = material->getSpecularLightColor(); +					LLColor4 old_color = shiny_swatch->get(); + +					shiny_swatch->setOriginal(new_color); +					shiny_swatch->set(new_color, force_set_values || old_color != new_color || !editable);  				}  				// Bumpy (normal) diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp index 776ae2ece9..518c6c0ee4 100644 --- a/indra/newview/lltoastscripttextbox.cpp +++ b/indra/newview/lltoastscripttextbox.cpp @@ -28,6 +28,7 @@  #include "lltoastscripttextbox.h" +#include "lldbstrings.h"  #include "lllslconstants.h"  #include "llnotifications.h"  #include "llstyle.h" @@ -35,13 +36,16 @@  #include "llviewertexteditor.h"  const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT= 14; +// *TODO: magic numbers - copied from lltoastnotifypanel.cpp(50) which was copied from llnotify.cpp(250) +const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE;  LLToastScriptTextbox::LLToastScriptTextbox(const LLNotificationPtr& notification)  :	LLToastPanel(notification)  {  	buildFromFile( "panel_notify_textbox.xml"); -	mInfoText = getChild<LLTextBox>("text_editor_box"); +	mInfoText = getChild<LLTextEditor>("text_editor_box"); +	mInfoText->setMaxTextLength(MAX_LENGTH);  	mInfoText->setValue(notification->getMessage());  	getChild<LLButton>("ignore_btn")->setClickedCallback(boost::bind(&LLToastScriptTextbox::onClickIgnore, this)); diff --git a/indra/newview/lltoastscripttextbox.h b/indra/newview/lltoastscripttextbox.h index 7aee02dd00..a539124ef1 100644 --- a/indra/newview/lltoastscripttextbox.h +++ b/indra/newview/lltoastscripttextbox.h @@ -48,7 +48,7 @@ public:  private: -	LLTextBox* mInfoText; +	LLTextEditor* mInfoText;  	void onClickSubmit();  	void onClickIgnore(); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index dcd09f66c7..1e46a1cf9e 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -139,6 +139,7 @@ std::map<std::string, U32> LLViewerObject::sObjectDataMap;  const F32 PHYSICS_TIMESTEP = 1.f / 45.f;  const U32 MAX_INV_FILE_READ_FAILS = 25; +const S32 MAX_OBJECT_BINARY_DATA_SIZE = 60 + 16;  static LLTrace::BlockTimerStatHandle FTM_CREATE_OBJECT("Create Object"); @@ -1182,7 +1183,9 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  	// Use getPosition, not getPositionRegion, since this is what we're comparing directly against.  	LLVector3 test_pos_parent = getPosition(); -	U8  data[60+16]; // This needs to match the largest size below. +	// This needs to match the largest size below. See switch(length) +	U8  data[MAX_OBJECT_BINARY_DATA_SIZE];  +  #ifdef LL_BIG_ENDIAN  	U16 valswizzle[4];  #endif @@ -1249,7 +1252,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  				mesgsys->getU8Fast(  _PREHASH_ObjectData, _PREHASH_ClickAction, click_action, block_num);   				mesgsys->getVector3Fast(_PREHASH_ObjectData, _PREHASH_Scale, new_scale, block_num );  				length = mesgsys->getSizeFast(_PREHASH_ObjectData, block_num, _PREHASH_ObjectData); -				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num); +				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num, MAX_OBJECT_BINARY_DATA_SIZE);  				mTotalCRC = crc; @@ -1557,7 +1560,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  				LL_INFOS() << "TI:" << getID() << LL_ENDL;  #endif  				length = mesgsys->getSizeFast(_PREHASH_ObjectData, block_num, _PREHASH_ObjectData); -				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num); +				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num, MAX_OBJECT_BINARY_DATA_SIZE);  				count = 0;  				LLVector4 collision_plane; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index fc06455c68..2aff71367e 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -479,8 +479,8 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,  			compressed_dp.reset();  			uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); -            LL_DEBUGS("ObjectUpdate") << "got binary data from message to compressed_dpbuffer" << LL_ENDL; -			mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i); +			LL_DEBUGS("ObjectUpdate") << "got binary data from message to compressed_dpbuffer" << LL_ENDL; +			mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i, 2048);  			compressed_dp.assignBuffer(compressed_dpbuffer, uncompressed_length);  			if (update_type != OUT_TERSE_IMPROVED) // OUT_FULL_COMPRESSED only? diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 2e366835d9..41da58f94f 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -111,9 +111,9 @@ const F32 desired_discard_bias_max = (F32)MAX_DISCARD_LEVEL; // max number of le  const F64 log_2 = log(2.0);  #if ADDRESS_SIZE == 32 -const U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; +const U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2;  #else -const U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; +const U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT;  #endif  //---------------------------------------------------------------------------------------------- @@ -1586,10 +1586,6 @@ void LLViewerFetchedTexture::processTextureStats()  		else  		{  			U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 -			if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED) -			{ -				desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE; -			}  			if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight)  			{  				if (mFullWidth > desired_size || mFullHeight > desired_size) @@ -3171,6 +3167,7 @@ void LLViewerLODTexture::processTextureStats()  		if (mKnownDrawWidth && mKnownDrawHeight)  		{  			S32 draw_texels = mKnownDrawWidth * mKnownDrawHeight; +			draw_texels = llclamp(draw_texels, MIN_IMAGE_AREA, MAX_IMAGE_AREA);  			// Use log_4 because we're in square-pixel space, so an image  			// with twice the width and twice the height will have mTexelsPerImage @@ -3211,7 +3208,7 @@ void LLViewerLODTexture::processTextureStats()  		U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048  		if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED)  		{ -			desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE; +			desired_size = DESIRED_NORMAL_TEXTURE_SIZE;  		}  		if (mFullWidth > desired_size || mFullHeight > desired_size)  			min_discard = 1.f; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index e1dca4ae43..5c107cc10b 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -839,7 +839,7 @@ void LLVoiceClient::addObserver(LLVoiceClientStatusObserver* observer)  void LLVoiceClient::removeObserver(LLVoiceClientStatusObserver* observer)  { -	if (mVoiceModule) mVoiceModule->removeObserver(observer); +	if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);  }  void LLVoiceClient::addObserver(LLFriendObserver* observer) @@ -849,7 +849,7 @@ void LLVoiceClient::addObserver(LLFriendObserver* observer)  void LLVoiceClient::removeObserver(LLFriendObserver* observer)  { -	if (mVoiceModule) mVoiceModule->removeObserver(observer); +	if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);  }  void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer) @@ -859,7 +859,7 @@ void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer)  void LLVoiceClient::removeObserver(LLVoiceClientParticipantObserver* observer)  { -	if (mVoiceModule) mVoiceModule->removeObserver(observer); +	if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer);  }  std::string LLVoiceClient::sipURIFromID(const LLUUID &id) diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 337f01f3e5..758e9cecd7 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -121,6 +121,8 @@ public:  	virtual const LLVoiceVersionInfo& getVersion()=0; +	virtual bool singletoneInstanceExists()=0; +	  	/////////////////////  	/// @name Tuning  	//@{ diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index b039afa734..ee333bcee2 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -4726,6 +4726,11 @@ void LLVivoxVoiceClient::declineInvite(std::string &sessionHandle)  	}  } +bool LLVivoxVoiceClient::singletoneInstanceExists() +{ +	return LLVivoxVoiceClient::instanceExists(); +} +  void LLVivoxVoiceClient::leaveNonSpatialChannel()  {      LL_DEBUGS("Voice") << "Request to leave spacial channel." << LL_ENDL; diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index 50862cea1e..210c726452 100644 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -73,6 +73,8 @@ public:  	// Returns true if vivox has successfully logged in and is not in error state	  	virtual bool isVoiceWorking() const; +	 +	virtual bool singletoneInstanceExists();  	/////////////////////  	/// @name Tuning diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 192307dc8b..24726e61e8 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -488,7 +488,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,  			{  				U8							tdpbuffer[1024];  				LLDataPackerBinaryBuffer	tdp(tdpbuffer, 1024); -				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num); +				mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num, 1024);  				S32 result = unpackTEMessage(tdp);  				if (result & teDirtyBits)  				{ diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e7f50f6b59..40d6d325ba 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8678,7 +8678,8 @@ void LLPipeline::renderDeferredLighting()  					}  					const LLViewerObject *vobj = drawablep->getVObj(); -					if(vobj && vobj->getAvatar() && vobj->getAvatar()->isInMuteList()) +					if(vobj && vobj->getAvatar() +						&& (vobj->getAvatar()->isTooComplex() || vobj->getAvatar()->isInMuteList()))  					{  						continue;  					} diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index 8976d2a78f..a8db0aca4e 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -86,7 +86,7 @@       layout="topleft"       left="484"       name="Continue" -     top_delta="35" +     top_delta="55"       width="100" />      <button       height="20" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 7dc3d6b08f..cc57e1375a 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -616,6 +616,16 @@ Save all changes to clothing/body parts?    <notification     icon="alertmodal.tga" +   name="AllowMultipleViewers" +   type="alertmodal"> +    Running multiple Second Life viewers is not supported. It can lead to texture cache collisions, corruption and degraded visuals and performance. +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="GrantModifyRights"     type="alertmodal">  Granting modify rights to another Resident allows them to change, delete or take ANY objects you may have in-world. Be VERY careful when handing out this permission. diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml index a679ca7f8c..6dc1bf9e9e 100644 --- a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml @@ -11,33 +11,39 @@    <string       name="message_max_lines_count"       value="14" /> +  <!-- THIS PANEL CONTROLS TOAST HEIGHT? -->    <panel -     bevel_style="none" -     follows="all" -     height="120" -     label="info_panel" -     layout="topleft" -     left="0" -     name="info_panel" -     top="0" -     width="305"> -    <text -     follows="all" -     font="SansSerif" -     height="110"  -     layout="topleft" -     left="10" -     mouse_opaque="false" -     name="text_editor_box" -     read_only="true" -     text_color="white" -     text_readonly_color="white" -     top="0" -     width="285" -     wrap="true" -     parse_highlights="true" -     parse_urls="true"/> -  </panel>  +      bevel_style="none" +      follows="all" +      height="120" +      label="info_panel" +      layout="topleft" +      left="0" +      name="info_panel" +      top="0" +      width="305"> +    <text_editor +      bg_readonly_color="Transparent" +      border_visible="false" +      embedded_items="false" +      enabled="true" +      follows="all" +      font="SansSerif" +      height="120"  +      layout="topleft" +      left="10" +      mouse_opaque="false" +      name="text_editor_box" +      read_only="true" +      text_color="White" +      text_readonly_color="White" +      top="0" +      visible="true" +      width="285" +      wrap="true" +      parse_highlights="true" +      parse_urls="true"/> +  </panel>    <panel       bevel_style="none"       follows="left|right|bottom" diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml index 2845a29e1d..513400954b 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml @@ -59,7 +59,7 @@  	</text>  	<button label="Comprar já!" name="buy_btn"/>  	<button label="Fechar" name="cancel_btn"/> -	<text name="info_cannot_buy"> +	<text name="info_cannot_buy" font="SansSerifBig">  		Transação incompleta  	</text>  	<button label="Prosseguir para a web" name="error_web"/> diff --git a/indra/newview/skins/default/xui/ru/floater_tos.xml b/indra/newview/skins/default/xui/ru/floater_tos.xml index 7196a04de1..3f2b5747d5 100644 --- a/indra/newview/skins/default/xui/ru/floater_tos.xml +++ b/indra/newview/skins/default/xui/ru/floater_tos.xml @@ -16,6 +16,6 @@  	<text name="agree_list">  		Я прочитал и согласен с Условиями и положениями по конфиденциальности Пользовательского соглашения, включая требования по разрешению разногласий Second Life.  	</text> -	<button label="Продолжить" label_selected="Продолжить" name="Continue" top_delta="45"/> +	<button label="Продолжить" label_selected="Продолжить" name="Continue"/>  	<button label="Отмена" label_selected="Отмена" name="Cancel"/>  </floater> | 
