diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llagent.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llagentcamera.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llfloaterevent.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llimprocessing.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llinventorybridge.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/lllogininstance.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llrecentpeople.h | 2 | ||||
| -rw-r--r-- | indra/newview/llsecapi.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerkeyboard.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llviewertexturelist.cpp | 7 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 106 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 4 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvoicevivox.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/fonts.xml | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 2 | 
20 files changed, 144 insertions, 37 deletions
| diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index c8d2524e0e..f6d6f7c897 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2036,6 +2036,14 @@ U8 LLAgent::getRenderState()  //-----------------------------------------------------------------------------  void LLAgent::endAnimationUpdateUI()  { +	if (LLApp::isExiting() +		|| !gViewerWindow +		|| !gMenuBarView +		|| !gToolBarView +		|| !gStatusBar) +	{ +		return; +	}  	if (gAgentCamera.getCameraMode() == gAgentCamera.getLastCameraMode())  	{  		// We're already done endAnimationUpdateUI for this transition. diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 8edb1a5f0b..85b7d7b06f 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -282,6 +282,11 @@ LLAgentCamera::~LLAgentCamera()  //-----------------------------------------------------------------------------  void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera)  { +	if (gDisconnected) +	{ +		return; +	} +  	if (gAgent.getAutoPilot())  	{  		gAgent.stopAutoPilot(TRUE); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index cbb47d71f7..ff921dcfdb 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -62,7 +62,9 @@  #include "llallocator.h"  #include "llcalc.h"  #include "llconversationlog.h" +#if LL_WINDOWS  #include "lldxhardware.h" +#endif  #include "lltexturestats.h"  #include "lltrace.h"  #include "lltracethreadrecorder.h" @@ -1134,7 +1136,7 @@ bool LLAppViewer::init()  	try {  		initializeSecHandler();  	} -	catch (LLProtectedDataException ex) +	catch (LLProtectedDataException&)  	{  	  LLNotificationsUtil::add("CorruptedProtectedDataStore");  	} @@ -1348,7 +1350,7 @@ bool LLAppViewer::frame()  		{  			LOG_UNHANDLED_EXCEPTION("");  		} -		catch (std::bad_alloc) +		catch (std::bad_alloc&)  		{  			LLMemory::logMemoryInfo(TRUE);  			LLFloaterMemLeak* mem_leak_instance = LLFloaterReg::findTypedInstance<LLFloaterMemLeak>("mem_leaking"); @@ -1717,6 +1719,11 @@ bool LLAppViewer::cleanup()  	disconnectViewer();  	LL_INFOS() << "Viewer disconnected" << LL_ENDL; +	 +	if (gKeyboard) +	{ +		gKeyboard->resetKeys(); +	}  	display_cleanup(); @@ -3995,7 +4002,10 @@ static LLNotificationFunctorRegistration finish_quit_reg("ConfirmQuit", finish_q  void LLAppViewer::userQuit()  { -	if (gDisconnected || gViewerWindow->getProgressView()->getVisible()) +	if (gDisconnected +		|| !gViewerWindow +		|| !gViewerWindow->getProgressView() +		|| gViewerWindow->getProgressView()->getVisible())  	{  		requestQuit();  	} diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp index 3e303e0932..a6640cc073 100644 --- a/indra/newview/llfloaterevent.cpp +++ b/indra/newview/llfloaterevent.cpp @@ -110,7 +110,7 @@ void LLFloaterEvent::setEventID(const U32 event_id)          // get the search URL and expand all of the substitutions                                                                 // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)                                                      		std::ostringstream url; -		url <<  gSavedSettings.getString("EventURL") << event_id << "/" << std::endl; +		url <<  gSavedSettings.getString("EventURL") << event_id << std::endl;  		// and load the URL in the web view                                                                                       mBrowser->navigateTo(url.str()); diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index c3375a3779..6da7bbe263 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -1579,7 +1579,7 @@ void LLIMProcessing::requestOfflineMessagesCoro(std::string url)      std::vector<U8> data;      S32 binary_bucket_size = 0; -    LLHost sender = gAgent.getRegion()->getHost(); +    LLHost sender = gAgent.getRegionHost();      LLSD::array_iterator i = messages.beginArray();      LLSD::array_iterator iEnd = messages.endArray(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 4b051f3e44..657c65c68d 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1809,7 +1809,7 @@ void LLItemBridge::restoreToWorld()  		msg->nextBlockFast(_PREHASH_InventoryData);  		itemp->packMessage(msg); -		msg->sendReliable(gAgent.getRegion()->getHost()); +		msg->sendReliable(gAgent.getRegionHost());  		//remove local inventory copy, sim will deal with permissions and removing the item  		//from the actual inventory if its a no-copy etc diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 8a69acb8dc..873531ef22 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -62,7 +62,7 @@  #include <boost/scoped_ptr.hpp>  #include <sstream> -const S32 LOGIN_MAX_RETRIES = 3; +const S32 LOGIN_MAX_RETRIES = 0; // Viewer should not autmatically retry login  const F32 LOGIN_SRV_TIMEOUT_MIN = 10;  const F32 LOGIN_SRV_TIMEOUT_MAX = 120;  const F32 LOGIN_DNS_TIMEOUT_FACTOR = 0.9; // make DNS wait shorter then retry time diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 1d76dd7928..1fce158eb4 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1888,7 +1888,7 @@ EMeshProcessingResult LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_p  		std::string mesh_string((char*)data, data_size);  		stream.str(mesh_string);  	} -	catch (std::bad_alloc) +	catch (std::bad_alloc&)  	{  		// out of memory, we won't be able to process this mesh  		return MESH_OUT_OF_MEMORY; diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h index 1b4295ddad..18b669ff4f 100644 --- a/indra/newview/llrecentpeople.h +++ b/indra/newview/llrecentpeople.h @@ -53,7 +53,7 @@ class LLRecentPeople: public LLSingleton<LLRecentPeople>, public LLOldEvents::LL  	LLSINGLETON_EMPTY_CTOR(LLRecentPeople);  	LOG_CLASS(LLRecentPeople);  public: -	typedef std::map <LLUUID, F32> id_to_time_map_t; +	typedef std::map <LLUUID, F64> id_to_time_map_t;  	typedef boost::signals2::signal<void ()> signal_t;  	/** diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp index 72d7cf1e45..10e510b842 100644 --- a/indra/newview/llsecapi.cpp +++ b/indra/newview/llsecapi.cpp @@ -64,7 +64,7 @@ void initializeSecHandler()  		{  			handler->init();  		} -		catch (LLProtectedDataException e) +		catch (LLProtectedDataException& e)  		{  			exception_msg = e.what();  		} diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index e930eb20d3..a14041717f 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -986,6 +986,11 @@ EKeyboardMode LLViewerKeyboard::getMode()  // Called from scanKeyboard.  void LLViewerKeyboard::scanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level)  { +	if (LLApp::isExiting()) +	{ +		return; +	} +  	S32 mode = getMode();  	// Consider keyboard scanning as NOT mouse event. JC  	MASK mask = gKeyboard->currentMask(FALSE); diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 06524847d1..561319ca5d 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1385,8 +1385,6 @@ S32Megabytes LLViewerTextureList::getMaxVideoRamSetting(bool get_recommended, fl  		{  			max_texmem = (S32Megabytes)128;  		} - -		LL_WARNS() << "VRAM amount not detected, defaulting to " << max_texmem << " MB" << LL_ENDL;  	}  	S32Megabytes system_ram = gSysMemory.getPhysicalMemoryKB(); // In MB @@ -1428,6 +1426,11 @@ void LLViewerTextureList::updateMaxResidentTexMem(S32Megabytes mem)  		return; //listener will re-enter this function  	} +	if (gGLManager.mVRAM == 0) +	{ +		LL_WARNS() << "VRAM amount not detected, defaulting to " << mem << " MB" << LL_ENDL; +	} +  	// TODO: set available resident texture mem based on use by other subsystems  	// currently max(12MB, VRAM/4) assumed... diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index ae1eec81e0..f64dfcf0d4 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2008,6 +2008,11 @@ void LLViewerWindow::initBase()  	LLPanel* panel_holder = main_view->getChild<LLPanel>("toolbar_view_holder");  	// Load the toolbar view from file   	gToolBarView = LLUICtrlFactory::getInstance()->createFromFile<LLToolBarView>("panel_toolbar_view.xml", panel_holder, LLDefaultChildRegistry::instance()); +	if (!gToolBarView) +	{ +		LL_ERRS() << "Failed to initialize viewer: Viewer couldn't process file panel_toolbar_view.xml, " +				<< "if this problem happens again, please validate your installation." << LL_ENDL; +	}  	gToolBarView->setShape(panel_holder->getLocalRect());  	// Hide the toolbars for the moment: we'll make them visible after logging in world (see LLViewerWindow::initWorldUI())  	gToolBarView->setVisible(FALSE); @@ -2893,7 +2898,8 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)  	// If "Pressing letter keys starts local chat" option is selected, we are not in mouselook,   	// no view has keyboard focus, this is a printable character key (and no modifier key is   	// pressed except shift), then give focus to nearby chat (STORM-560) -	if ( gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() &&  +	if ( LLStartUp::getStartupState() >= STATE_STARTED &&  +		gSavedSettings.getS32("LetterKeysFocusChatBar") && !gAgentCamera.cameraMouselook() &&   		!keyboard_focus && key < 0x80 && (mask == MASK_NONE || mask == MASK_SHIFT) )  	{  		// Initialize nearby chat if it's missing diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 7579eb1a90..eb461d3140 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -198,6 +198,8 @@ const F32 NAMETAG_VERT_OFFSET_WEIGHT = 0.17f;  const U32 LLVOAvatar::VISUAL_COMPLEXITY_UNKNOWN = 0;  const F64 HUD_OVERSIZED_TEXTURE_DATA_SIZE = 1024 * 1024; +const F32 MAX_TEXTURE_WAIT_TIME_SEC = 60; +  enum ERenderName  {  	RENDER_NAME_NEVER, @@ -664,6 +666,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,  	mFullyLoadedInitialized(FALSE),  	mVisualComplexity(VISUAL_COMPLEXITY_UNKNOWN),  	mLoadedCallbacksPaused(FALSE), +	mLoadedCallbackTextures(0),  	mRenderUnloadedAvatar(LLCachedControl<bool>(gSavedSettings, "RenderUnloadedAvatar", false)),  	mLastRezzedStatus(-1),  	mIsEditingAppearance(FALSE), @@ -884,8 +887,9 @@ BOOL LLVOAvatar::hasGray() const  S32 LLVOAvatar::getRezzedStatus() const  {  	if (getIsCloud()) return 0; -	if (isFullyTextured() && allBakedTexturesCompletelyDownloaded()) return 3; -	if (isFullyTextured()) return 2; +	bool textured = isFullyTextured(); +	if (textured && allBakedTexturesCompletelyDownloaded()) return 3; +	if (textured) return 2;  	llassert(hasGray());  	return 1; // gray  } @@ -4807,6 +4811,15 @@ U32 LLVOAvatar::renderSkinned()  		BOOL first_pass = TRUE;  		if (!LLDrawPoolAvatar::sSkipOpaque)  		{ +			if (isUIAvatar() && mIsDummy) +			{ +				LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR); +				if (hair_mesh) +				{ +					num_indices += hair_mesh->render(mAdjustedPixelArea, first_pass, mIsDummy); +				} +				first_pass = FALSE; +			}  			if (!isSelf() || gAgent.needsRenderHead() || LLPipeline::sShadowRender)  			{  				if (isTextureVisible(TEX_HEAD_BAKED) || isUIAvatar()) @@ -4814,7 +4827,7 @@ U32 LLVOAvatar::renderSkinned()  					LLViewerJoint* head_mesh = getViewerJoint(MESH_ID_HEAD);  					if (head_mesh)  					{ -						num_indices += head_mesh->render(mAdjustedPixelArea, TRUE, mIsDummy); +						num_indices += head_mesh->render(mAdjustedPixelArea, first_pass, mIsDummy);  					}  					first_pass = FALSE;  				} @@ -5321,12 +5334,28 @@ void LLVOAvatar::checkTextureLoading()  	}  	if(mLoadedCallbacksPaused == pause)  	{ +        if (!pause && mFirstFullyVisible && mLoadedCallbackTextures < mCallbackTextureList.size()) +        { +            // We still need to update 'loaded' textures count to decide on 'cloud' visibility +            // Alternatively this can be done on TextureLoaded callbacks, but is harder to properly track +            mLoadedCallbackTextures = 0; +            for (LLLoadedCallbackEntry::source_callback_list_t::iterator iter = mCallbackTextureList.begin(); +                iter != mCallbackTextureList.end(); ++iter) +            { +                LLViewerFetchedTexture* tex = gTextureList.findImage(*iter); +                if (tex && (tex->getDiscardLevel() >= 0 || tex->isMissingAsset())) +                { +                    mLoadedCallbackTextures++; +                } +            } +        }  		return ;   	}  	if(mCallbackTextureList.empty()) //when is self or no callbacks. Note: this list for self is always empty.  	{  		mLoadedCallbacksPaused = pause ; +		mLoadedCallbackTextures = 0;  		return ; //nothing to check.  	} @@ -5334,7 +5363,9 @@ void LLVOAvatar::checkTextureLoading()  	{  		return ; //have not been invisible for enough time.  	} -	 + +	mLoadedCallbackTextures = pause ? mCallbackTextureList.size() : 0; +  	for(LLLoadedCallbackEntry::source_callback_list_t::iterator iter = mCallbackTextureList.begin();  		iter != mCallbackTextureList.end(); ++iter)  	{ @@ -5355,9 +5386,15 @@ void LLVOAvatar::checkTextureLoading()  				tex->unpauseLoadedCallbacks(&mCallbackTextureList) ;  				tex->addTextureStats(START_AREA); //jump start the fetching again + +				// technically shouldn't need to account for missing, but callback might not have happened yet +				if (tex->getDiscardLevel() >= 0 || tex->isMissingAsset()) +				{ +					mLoadedCallbackTextures++; // consider it loaded (we have at least some data) +				}  			} -		}		 -	}			 +		} +	}  	if(!pause)  	{ @@ -7591,14 +7628,13 @@ bool LLVOAvatar::getIsCloud() const  			);  } -void LLVOAvatar::updateRezzedStatusTimers() +void LLVOAvatar::updateRezzedStatusTimers(S32 rez_status)  {  	// State machine for rezzed status. Statuses are -1 on startup, 0  	// = cloud, 1 = gray, 2 = downloading, 3 = full.  	// Purpose is to collect time data for each it takes avatar to reach  	// various loading landmarks: gray, textured (partial), textured fully. -	S32 rez_status = getRezzedStatus();  	if (rez_status != mLastRezzedStatus)  	{  		LL_DEBUGS("Avatar") << avString() << "rez state change: " << mLastRezzedStatus << " -> " << rez_status << LL_ENDL; @@ -7768,8 +7804,21 @@ void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapse  // returns true if the value has changed.  BOOL LLVOAvatar::updateIsFullyLoaded()  { -	const bool loading = getIsCloud(); -	updateRezzedStatusTimers(); +	S32 rez_status = getRezzedStatus(); +	bool loading = getIsCloud(); +	if (mFirstFullyVisible && !mIsControlAvatar) +	{ +        loading = ((rez_status < 2) +                   // Wait at least 60s for unfinished textures to finish on first load, +                   // don't wait forever, it might fail. Even if it will eventually load by +                   // itself and update mLoadedCallbackTextures (or fail and clean the list), +                   // avatars are more time-sensitive than textures and can't wait that long. +                   || (mLoadedCallbackTextures < mCallbackTextureList.size() && mLastTexCallbackAddedTime.getElapsedTimeF32() < MAX_TEXTURE_WAIT_TIME_SEC) +                   || !mPendingAttachment.empty() +                   || (rez_status < 3 && !isFullyBaked()) +                  ); +	} +	updateRezzedStatusTimers(rez_status);  	updateRuthTimer(loading);  	return processFullyLoadedChange(loading);  } @@ -7805,13 +7854,22 @@ void LLVOAvatar::updateRuthTimer(bool loading)  BOOL LLVOAvatar::processFullyLoadedChange(bool loading)  { -	// we wait a little bit before giving the all clear, -	// to let textures settle down -	const F32 PAUSE = 1.f; +	// We wait a little bit before giving the 'all clear', to let things to +	// settle down (models to snap into place, textures to get first packets) +	const F32 LOADED_DELAY = 1.f; +	const F32 FIRST_USE_DELAY = 3.f; +  	if (loading)  		mFullyLoadedTimer.reset(); -	 -	mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > PAUSE); + +	if (mFirstFullyVisible) +	{ +		mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > FIRST_USE_DELAY); +	} +	else +	{ +		mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > LOADED_DELAY); +	}  	if (!mPreviousFullyLoaded && !loading && mFullyLoaded)  	{ @@ -8101,6 +8159,7 @@ void LLVOAvatar::updateMeshTextures()  		LLViewerTexLayerSet* layerset = getTexLayerSet(i);  		if (use_lkg_baked_layer[i] && !isUsingLocalAppearance() )  		{ +			// use last known good layer (no new one)  			LLViewerFetchedTexture* baked_img = LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[i].mLastTextureID);  			mBakedTextureDatas[i].mIsUsed = TRUE; @@ -8119,6 +8178,7 @@ void LLVOAvatar::updateMeshTextures()  		}  		else if (!isUsingLocalAppearance() && is_layer_baked[i])  		{ +			// use new layer  			LLViewerFetchedTexture* baked_img =  				LLViewerTextureManager::staticCastToFetchedTexture(  					getImage( mBakedTextureDatas[i].mTextureIndex, 0 ), TRUE) ; @@ -8138,10 +8198,15 @@ void LLVOAvatar::updateMeshTextures()  					 ((i == BAKED_HEAD) || (i == BAKED_UPPER) || (i == BAKED_LOWER)) )  				{			  					baked_img->setLoadedCallback(onBakedTextureMasksLoaded, MORPH_MASK_REQUESTED_DISCARD, TRUE, TRUE, new LLTextureMaskData( mID ),  -						src_callback_list, paused);	 +						src_callback_list, paused);  				}  				baked_img->setLoadedCallback(onBakedTextureLoaded, SWITCH_TO_BAKED_DISCARD, FALSE, FALSE, new LLUUID( mID ),   					src_callback_list, paused ); +				if (baked_img->getDiscardLevel() < 0 && !paused) +				{ +					// mLoadedCallbackTextures will be updated by checkTextureLoading() below +					mLastTexCallbackAddedTime.reset(); +				}  				// this could add paused texture callbacks  				mLoadedCallbacksPaused |= paused;  @@ -8535,13 +8600,16 @@ void LLVOAvatar::onFirstTEMessageReceived()  				LL_DEBUGS("Avatar") << avString() << "layer_baked, setting onInitialBakedTextureLoaded as callback" << LL_ENDL;  				image->setLoadedCallback( onInitialBakedTextureLoaded, MAX_DISCARD_LEVEL, FALSE, FALSE, new LLUUID( mID ),   					src_callback_list, paused ); - +				if (image->getDiscardLevel() < 0 && !paused) +				{ +					mLastTexCallbackAddedTime.reset(); +				}                                 // this could add paused texture callbacks                                 mLoadedCallbacksPaused |= paused;   			}  		} -		mMeshTexturesDirty = TRUE; +        mMeshTexturesDirty = TRUE;  		gPipeline.markGLRebuild(this);  	}  } @@ -9188,8 +9256,6 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture  // static  void LLVOAvatar::onInitialBakedTextureLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata )  { - -	  	LLUUID *avatar_idp = (LLUUID *)userdata;  	LLVOAvatar *selfp = (LLVOAvatar *)gObjectList.findObject(*avatar_idp); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 00dccc5d12..ca6ac5c902 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -348,7 +348,7 @@ public:  	BOOL			isFullyTextured() const;  	BOOL			hasGray() const;   	S32				getRezzedStatus() const; // 0 = cloud, 1 = gray, 2 = textured, 3 = textured and fully downloaded. -	void			updateRezzedStatusTimers(); +	void			updateRezzedStatusTimers(S32 status);  	S32				mLastRezzedStatus; @@ -629,6 +629,8 @@ protected:  	LLLoadedCallbackEntry::source_callback_list_t mCallbackTextureList ;   	BOOL mLoadedCallbacksPaused; +	S32 mLoadedCallbackTextures; // count of 'loaded' baked textures, filled from mCallbackTextureList +	LLFrameTimer mLastTexCallbackAddedTime;  	std::set<LLUUID>	mTextureIDs;  	//--------------------------------------------------------------------  	// Local Textures diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 63ace4fe52..16b27fd144 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1250,7 +1250,7 @@ BOOL LLVOAvatarSelf::detachAttachmentIntoInventory(const LLUUID &item_id)  		gMessageSystem->nextBlockFast(_PREHASH_ObjectData);  		gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID());  		gMessageSystem->addUUIDFast(_PREHASH_ItemID, item_id); -		gMessageSystem->sendReliable(gAgent.getRegion()->getHost()); +		gMessageSystem->sendReliable(gAgent.getRegionHost());  		// This object might have been selected, so let the selection manager know it's gone now  		LLViewerObject *found_obj = gObjectList.findObject(item_id); diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 739f7bd47c..530adb8975 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -5158,6 +5158,7 @@ void LLVivoxVoiceClient::setVoiceEnabled(bool enabled)  		{  			// Turning voice off looses your current channel -- this makes sure the UI isn't out of sync when you re-enable it.  			LLVoiceChannel::getCurrentVoiceChannel()->deactivate(); +			gAgent.setVoiceConnected(false);  			status = LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED;  		} diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml index 2d5263b78f..76df0abdfd 100644 --- a/indra/newview/skins/default/xui/en/fonts.xml +++ b/indra/newview/skins/default/xui/en/fonts.xml @@ -21,6 +21,7 @@        <file>AppleGothic.dfont</file>        <file>AppleGothic.ttf</file>        <file>AppleSDGothicNeo-Regular.otf</file> +      <file>AppleSDGothicNeo.ttc</file>        <file>华文细黑.ttf</file>        <file>PingFang.ttc</file>        <file>STIXGeneral.otf</file> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index e228c5bdba..873b95926b 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -461,7 +461,7 @@               name="Events">              <menu_item_call.on_click               function="Advanced.ShowURL" -             parameter="http://events.secondlife.com"/> +             parameter="https://secondlife.com/my/community/events"/>          </menu_item_call>          <menu_item_check          label="Search..." diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 61a23851ed..089498dfb9 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -1513,7 +1513,7 @@ Go to the [SECOND_LIFE] events web page?      <tag>confirm</tag>      <url option="0" name="url"> -			http://secondlife.com/events/ +			https://secondlife.com/my/community/events      </url>      <usetemplate       name="okcancelbuttons" | 
