diff options
Diffstat (limited to 'indra')
71 files changed, 729 insertions, 397 deletions
| diff --git a/indra/llinventory/llfoldertype.cpp b/indra/llinventory/llfoldertype.cpp index 8b568ea560..5f8aaae20b 100755 --- a/indra/llinventory/llfoldertype.cpp +++ b/indra/llinventory/llfoldertype.cpp @@ -92,7 +92,7 @@ LLFolderDictionary::LLFolderDictionary()  	addEntry(LLFolderType::FT_MESH, 				new FolderEntry("mesh",	TRUE)); -	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	FALSE)); +	addEntry(LLFolderType::FT_INBOX, 				new FolderEntry("inbox",	TRUE));  	addEntry(LLFolderType::FT_OUTBOX, 				new FolderEntry("outbox",	FALSE));  	addEntry(LLFolderType::FT_BASIC_ROOT,			new FolderEntry("basic_rt", TRUE)); diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index 02220c41d8..7b5240c651 100755 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -36,6 +36,8 @@  extern U32 gOctreeMaxCapacity; +extern float gOctreeMinSize; +  /*#define LL_OCTREE_PARANOIA_CHECK 0  #if LL_DARWIN  #define LL_OCTREE_MAX_CAPACITY 32 @@ -106,6 +108,7 @@ public:  	:	mParent((oct_node*)parent),   		mOctant(octant)   	{  +		llassert(size[0] >= gOctreeMinSize*0.5f);  		//always keep a NULL terminated list to avoid out of bounds exceptions in debug builds  		mData.push_back(NULL);  		mDataEnd = &mData[0]; @@ -213,7 +216,7 @@ public:  		F32 size = mSize[0];  		F32 p_size = size * 2.f; -		return (radius <= 0.001f && size <= 0.001f) || +		return (radius <= gOctreeMinSize && size <= gOctreeMinSize) ||  				(radius <= p_size && radius > size);  	} @@ -319,7 +322,7 @@ public:  		//is it here?  		if (isInside(data->getPositionGroup()))  		{ -			if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) || +			if (((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius()) ||  				(data->getBinRadius() > getSize()[0] &&	parent && parent->getElementCount() >= gOctreeMaxCapacity)))   			{ //it belongs here  				mData.push_back(NULL); @@ -356,8 +359,9 @@ public:  				LLVector4a val;  				val.setSub(center, getCenter());  				val.setAbs(val); -								 -				S32 lt = val.lessThan(LLVector4a::getEpsilon()).getGatheredBits() & 0x7; +				LLVector4a min_diff(gOctreeMinSize); + +				S32 lt = val.lessThan(min_diff).getGatheredBits() & 0x7;  				if( lt == 0x7 )  				{ @@ -389,6 +393,7 @@ public:  				}  #endif +				llassert(size[0] >= gOctreeMinSize*0.5f);  				//make the new kid  				child = new LLOctreeNode<T>(center, size, this);  				addChild(child); @@ -796,6 +801,8 @@ public:  				this->setSize(size2);  				this->updateMinMax(); +				llassert(size[0] >= gOctreeMinSize); +  				//copy our children to a new branch  				LLOctreeNode<T>* newnode = new LLOctreeNode<T>(center, size, this); diff --git a/indra/llui/llchatentry.cpp b/indra/llui/llchatentry.cpp index c04b70eb64..dac001afab 100755 --- a/indra/llui/llchatentry.cpp +++ b/indra/llui/llchatentry.cpp @@ -51,6 +51,7 @@ LLChatEntry::LLChatEntry(const Params& p)  	mCurrentHistoryLine = mLineHistory.begin();  	mAutoIndent = false; +	keepSelectionOnReturn(true);  }  LLChatEntry::~LLChatEntry() @@ -179,15 +180,6 @@ BOOL LLChatEntry::handleSpecialKey(const KEY key, const MASK mask)  {  	BOOL handled = FALSE; -    // In the case of a chat entry, pressing RETURN when something is selected -    // should NOT erase the selection (unlike a notecard, for example) -    if (key == KEY_RETURN) -    { -        endOfDoc(); -        startSelection(); -        endSelection(); -    } -  	LLTextEditor::handleSpecialKey(key, mask);  	switch(key) diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index bc2388dd28..cca26f335a 100755 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -1130,18 +1130,18 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )  		if((mSelectedItems.size() > 0) && mScrollContainer)  		{  			LLFolderViewItem* last_selected = getCurSelectedItem(); +			BOOL shift_select = mask & MASK_SHIFT; +			// don't shift select down to children of folders (they are implicitly selected through parent) +			LLFolderViewItem* next = last_selected->getNextOpenNode(!shift_select); -			if (!mKeyboardSelection) +			if (!mKeyboardSelection || (!shift_select && (!next || next == last_selected)))  			{  				setSelection(last_selected, FALSE, TRUE);  				mKeyboardSelection = TRUE;  			} -			LLFolderViewItem* next = NULL; -			if (mask & MASK_SHIFT) +			if (shift_select)  			{ -				// don't shift select down to children of folders (they are implicitly selected through parent) -				next = last_selected->getNextOpenNode(FALSE);  				if (next)  				{  					if (next->isSelected()) @@ -1158,7 +1158,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )  			}  			else  			{ -				next = last_selected->getNextOpenNode();  				if( next )  				{  					if (next == last_selected) @@ -1194,18 +1193,18 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )  		if((mSelectedItems.size() > 0) && mScrollContainer)  		{  			LLFolderViewItem* last_selected = mSelectedItems.back(); +			BOOL shift_select = mask & MASK_SHIFT; +			// don't shift select down to children of folders (they are implicitly selected through parent) +			LLFolderViewItem* prev = last_selected->getPreviousOpenNode(!shift_select); -			if (!mKeyboardSelection) +			if (!mKeyboardSelection || (!shift_select && prev == this))  			{  				setSelection(last_selected, FALSE, TRUE);  				mKeyboardSelection = TRUE;  			} -			LLFolderViewItem* prev = NULL; -			if (mask & MASK_SHIFT) +			if (shift_select)  			{ -				// don't shift select down to children of folders (they are implicitly selected through parent) -				prev = last_selected->getPreviousOpenNode(FALSE);  				if (prev)  				{  					if (prev->isSelected()) @@ -1222,7 +1221,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )  			}  			else  			{ -				prev = last_selected->getPreviousOpenNode();  				if( prev )  				{  					if (prev == this) diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 90e3606998..576e8f7600 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -260,7 +260,8 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :  	mContextMenu(NULL),  	mShowContextMenu(p.show_context_menu),  	mEnableTooltipPaste(p.enable_tooltip_paste), -	mPassDelete(FALSE) +	mPassDelete(FALSE), +	mKeepSelectionOnReturn(false)  {  	mSourceID.generate(); @@ -1653,7 +1654,7 @@ BOOL LLTextEditor::handleSpecialKey(const KEY key, const MASK mask)  	case KEY_RETURN:  		if (mask == MASK_NONE)  		{ -			if( hasSelection() ) +			if( hasSelection() && !mKeepSelectionOnReturn )  			{  				deleteSelection(FALSE);  			} diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index 2408613824..f6bdf917b4 100755 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -282,6 +282,7 @@ protected:  	bool				mParseOnTheFly;  	void				updateLinkSegments(); +	void				keepSelectionOnReturn(bool keep) { mKeepSelectionOnReturn = keep; }  	class LLViewBorder*	mBorder;  private: @@ -316,6 +317,7 @@ private:  	bool			mShowContextMenu;  	bool			mEnableTooltipPaste;  	bool			mPassDelete; +	bool			mKeepSelectionOnReturn;	// disabling of removing selected text after pressing of Enter  	LLUUID			mSourceID; diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp index ba5bc8fcfb..e7afef63f8 100755 --- a/indra/llwindow/lldxhardware.cpp +++ b/indra/llwindow/lldxhardware.cpp @@ -34,9 +34,12 @@  #include <dxdiag.h>  #undef INITGUID +#include <wbemidl.h> +  #include <boost/tokenizer.hpp>  #include "lldxhardware.h" +  #include "llerror.h"  #include "llstring.h" @@ -53,11 +56,160 @@ LLDXHardware gDXHardware;  #define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }  #define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } } -std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName) +typedef BOOL ( WINAPI* PfnCoSetProxyBlanket )( IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, +                                               OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, +                                               RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities ); + +HRESULT GetVideoMemoryViaWMI( WCHAR* strInputDeviceID, DWORD* pdwAdapterRam )  {      HRESULT hr; +    bool bGotMemory = false; +    HRESULT hrCoInitialize = S_OK; +    IWbemLocator* pIWbemLocator = nullptr; +    IWbemServices* pIWbemServices = nullptr; +    BSTR pNamespace = nullptr; + +    *pdwAdapterRam = 0; +    hrCoInitialize = CoInitialize( 0 ); + +    hr = CoCreateInstance( CLSID_WbemLocator, +                           nullptr, +                           CLSCTX_INPROC_SERVER, +                           IID_IWbemLocator, +                           ( LPVOID* )&pIWbemLocator ); +#ifdef PRINTF_DEBUGGING +    if( FAILED( hr ) ) wprintf( L"WMI: CoCreateInstance failed: 0x%0.8x\n", hr ); +#endif + +    if( SUCCEEDED( hr ) && pIWbemLocator ) +    { +        // Using the locator, connect to WMI in the given namespace. +        pNamespace = SysAllocString( L"\\\\.\\root\\cimv2" ); + +        hr = pIWbemLocator->ConnectServer( pNamespace, nullptr, nullptr, 0L, +                                           0L, nullptr, nullptr, &pIWbemServices ); +#ifdef PRINTF_DEBUGGING +        if( FAILED( hr ) ) wprintf( L"WMI: pIWbemLocator->ConnectServer failed: 0x%0.8x\n", hr ); +#endif +        if( SUCCEEDED( hr ) && pIWbemServices != 0 ) +        { +            HINSTANCE hinstOle32 = nullptr; + +            hinstOle32 = LoadLibraryW( L"ole32.dll" ); +            if( hinstOle32 ) +            { +                PfnCoSetProxyBlanket pfnCoSetProxyBlanket = nullptr; + +                pfnCoSetProxyBlanket = ( PfnCoSetProxyBlanket )GetProcAddress( hinstOle32, "CoSetProxyBlanket" ); +                if( pfnCoSetProxyBlanket != 0 ) +                { +                    // Switch security level to IMPERSONATE.  +                    pfnCoSetProxyBlanket( pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, nullptr, +                                          RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, nullptr, 0 ); +                } + +                FreeLibrary( hinstOle32 ); +            } + +            IEnumWbemClassObject* pEnumVideoControllers = nullptr; +            BSTR pClassName = nullptr; + +            pClassName = SysAllocString( L"Win32_VideoController" ); + +            hr = pIWbemServices->CreateInstanceEnum( pClassName, 0, +                                                     nullptr, &pEnumVideoControllers ); +#ifdef PRINTF_DEBUGGING +            if( FAILED( hr ) ) wprintf( L"WMI: pIWbemServices->CreateInstanceEnum failed: 0x%0.8x\n", hr ); +#endif + +            if( SUCCEEDED( hr ) && pEnumVideoControllers ) +            { +                IWbemClassObject* pVideoControllers[10] = {0}; +                DWORD uReturned = 0; +                BSTR pPropName = nullptr; + +                // Get the first one in the list +                pEnumVideoControllers->Reset(); +                hr = pEnumVideoControllers->Next( 5000,             // timeout in 5 seconds +                                                  10,                  // return the first 10 +                                                  pVideoControllers, +                                                  &uReturned ); +#ifdef PRINTF_DEBUGGING +                if( FAILED( hr ) ) wprintf( L"WMI: pEnumVideoControllers->Next failed: 0x%0.8x\n", hr ); +                if( uReturned == 0 ) wprintf( L"WMI: pEnumVideoControllers uReturned == 0\n" ); +#endif + +                VARIANT var; +                if( SUCCEEDED( hr ) ) +                { +                    bool bFound = false; +                    for( UINT iController = 0; iController < uReturned; iController++ ) +                    { +                        if ( !pVideoControllers[iController] ) +                            continue; + +                        pPropName = SysAllocString( L"PNPDeviceID" ); +                        hr = pVideoControllers[iController]->Get( pPropName, 0L, &var, nullptr, nullptr ); +#ifdef PRINTF_DEBUGGING +                        if( FAILED( hr ) ) +                            wprintf( L"WMI: pVideoControllers[iController]->Get PNPDeviceID failed: 0x%0.8x\n", hr ); +#endif +                        if( SUCCEEDED( hr ) ) +                        { +                            if( wcsstr( var.bstrVal, strInputDeviceID ) != 0 ) +                                bFound = true; +                        } +                        VariantClear( &var ); +                        if( pPropName ) SysFreeString( pPropName ); + +                        if( bFound ) +                        { +                            pPropName = SysAllocString( L"AdapterRAM" ); +                            hr = pVideoControllers[iController]->Get( pPropName, 0L, &var, nullptr, nullptr ); +#ifdef PRINTF_DEBUGGING +                            if( FAILED( hr ) ) +                                wprintf( L"WMI: pVideoControllers[iController]->Get AdapterRAM failed: 0x%0.8x\n", +                                         hr ); +#endif +                            if( SUCCEEDED( hr ) ) +                            { +                                bGotMemory = true; +                                *pdwAdapterRam = var.ulVal; +                            } +                            VariantClear( &var ); +                            if( pPropName ) SysFreeString( pPropName ); +                            break; +                        } +                        SAFE_RELEASE( pVideoControllers[iController] ); +                    } +                } +            } + +            if( pClassName ) +                SysFreeString( pClassName ); +            SAFE_RELEASE( pEnumVideoControllers ); +        } + +        if( pNamespace ) +            SysFreeString( pNamespace ); +        SAFE_RELEASE( pIWbemServices ); +    } + +    SAFE_RELEASE( pIWbemLocator ); + +    if( SUCCEEDED( hrCoInitialize ) ) +        CoUninitialize(); + +    if( bGotMemory ) +        return S_OK; +    else +        return E_FAIL; +} + +void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPropValue, int outputSize) +{ +	HRESULT hr;  	VARIANT var; -	WCHAR wszPropValue[256];  	VariantInit( &var );  	hr = containerp->GetProp(wszPropName, &var ); @@ -76,13 +228,19 @@ std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName)  				wcscpy( wszPropValue, (var.boolVal) ? L"true" : L"false" );	/* Flawfinder: ignore */  				break;  			case VT_BSTR: -				wcsncpy( wszPropValue, var.bstrVal, 255 );	/* Flawfinder: ignore */ -				wszPropValue[255] = 0; +				wcsncpy( wszPropValue, var.bstrVal, outputSize-1 );	/* Flawfinder: ignore */ +				wszPropValue[outputSize-1] = 0;  				break;  		}  	}  	// Clear the variant (this is needed to free BSTR memory)  	VariantClear( &var ); +} + +std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName) +{ +    WCHAR wszPropValue[256]; +	get_wstring(containerp, wszPropName, wszPropValue, 256);  	return utf16str_to_utf8str(wszPropValue);  } @@ -361,8 +519,18 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)              goto LCleanup;  		} -		// Get the English VRAM string +		DWORD vram = 0; + +		WCHAR deviceID[512]; + +		get_wstring(device_containerp, L"szDeviceID", deviceID, 512); +		 +		if (SUCCEEDED(GetVideoMemoryViaWMI(deviceID, &vram)))   		{ +			mVRAM = vram/(1024*1024); +		} +		else +		{ // Get the English VRAM string  		  std::string ram_str = get_string(device_containerp, L"szDisplayMemoryEnglish");  		  // We don't need the device any more diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 19961d5759..cd2be87fad 100755 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -86,6 +86,18 @@ void show_window_creation_error(const std::string& title)  	LL_WARNS("Window") << title << LL_ENDL;  } +HGLRC SafeCreateContext(HDC hdc) +{ +	__try  +	{ +		return wglCreateContext(hdc); +	} +	__except(EXCEPTION_EXECUTE_HANDLER) +	{  +		return NULL; +	} +} +  //static  BOOL LLWindowWin32::sIsClassRegistered = FALSE; @@ -1167,14 +1179,15 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO  		return FALSE;  	} -	if (!(mhRC = wglCreateContext(mhDC))) + +	if (!(mhRC = SafeCreateContext(mhDC)))  	{  		close();  		OSMessageBox(mCallbacks->translateString("MBGLContextErr"),  			mCallbacks->translateString("MBError"), OSMB_OK);  		return FALSE;  	} - +		  	if (!wglMakeCurrent(mhDC, mhRC))  	{  		close(); @@ -1832,6 +1845,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  	// This helps prevent avatar walking after maximizing the window by double-clicking the title bar.  	static bool sHandleLeftMouseUp = true; +	// Ignore the double click received right after activating app. +	// This is to avoid triggering double click teleport after returning focus (see MAINT-3786). +	static bool sHandleDoubleClick = true; +  	LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(h_wnd, GWL_USERDATA); @@ -1959,6 +1976,11 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  					}  				} +				if (!activating) +				{ +					sHandleDoubleClick = false; +				} +  				window_imp->mCallbacks->handleActivateApp(window_imp, activating);  				break; @@ -2183,6 +2205,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  				window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_NCLBUTTONDOWN");  				// A click in a non-client area, e.g. title bar or window border.  				sHandleLeftMouseUp = false; +				sHandleDoubleClick = true;  			}  			break; @@ -2227,6 +2250,13 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  		//case WM_RBUTTONDBLCLK:  			{  				window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_LBUTTONDBLCLK"); + +				if (!sHandleDoubleClick) +				{ +					sHandleDoubleClick = true; +					break; +				} +  				// Because we move the cursor position in the app, we need to query  				// to find out where the cursor at the time the event is handled.  				// If we don't do this, many clicks could get buffered up, and if the diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index f7e5aa84c2..214b521fe2 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.7.12 +3.7.13 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index e9ea657b52..49403d45c0 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8045,6 +8045,18 @@      <integer>128</integer>    </map> +  <key>OctreeMinimumNodeSize</key> +  <map> +    <key>Comment</key> +    <string>Minimum size of any octree node</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>F32</string> +    <key>Value</key> +    <real>0.01</real> +  </map> +    <key>OctreeStaticObjectSizeFactor</key>    <map>      <key>Comment</key> @@ -15439,6 +15451,17 @@      <key>Value</key>      <integer>7000</integer>    </map> +  <key>DisablePrecacheDelayAfterTeleporting</key> +  <map> +    <key>Comment</key> +    <string>Disables the artificial delay in the viewer that precaches some incoming assets</string> +    <key>Persist</key> +    <integer>0</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>    <key>VersionChannelName</key>      <map>        <key>Comment</key> diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index a2d68eb550..628a96e988 100755 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 36 +version 37  // The version number above should be implemented IF AND ONLY IF some  // change has been made that is sufficiently important to justify  // resetting the graphics preferences of all users to the recommended @@ -60,7 +60,7 @@ WindLightUseAtmosShaders		1	1  WLSkyDetail						1	128  Disregard128DefaultDrawDistance	1	1  Disregard96DefaultDrawDistance	1	1 -RenderTextureMemoryMultiple		1	0.5 +RenderTextureMemoryMultiple		1	1  RenderCompressTextures			1	1  RenderShaderLightingMaxLevel	1	3  RenderDeferred				1	1 @@ -522,7 +522,7 @@ list ATI_Mobility_Radeon_9600  Disregard96DefaultDrawDistance	1	0  list NVIDIA_GeForce_8600 -RenderTextureMemoryMultiple			1	0.375	 +RenderTextureMemoryMultiple			1	1	  RenderUseImpostors				0	0  UseOcclusion				0	0 diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 3d5f6c43ee..bd6025feea 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -827,12 +827,9 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal  //-----------------------------------------------------------------------------  void LLAgent::setRegion(LLViewerRegion *regionp)  { -	bool notifyRegionChange; -  	llassert(regionp);  	if (mRegionp != regionp)  	{ -		notifyRegionChange = true;  		std::string ip = regionp->getHost().getString();  		LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName() @@ -885,10 +882,7 @@ void LLAgent::setRegion(LLViewerRegion *regionp)  		// Pass new region along to metrics components that care about this level of detail.  		LLAppViewer::metricsUpdateRegion(regionp->getHandle());  	} -	else -	{ -		notifyRegionChange = false; -	} +  	mRegionp = regionp;  	// TODO - most of what follows probably should be moved into callbacks @@ -911,11 +905,8 @@ void LLAgent::setRegion(LLViewerRegion *regionp)  	LLFloaterMove::sUpdateFlyingStatus(); -	if (notifyRegionChange) -	{ -		LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL; -		mRegionChangedSignal(); -	} +	LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL; +	mRegionChangedSignal();  } @@ -1430,6 +1421,7 @@ void LLAgent::setDoNotDisturb(bool pIsDoNotDisturb)  	{  		LLDoNotDisturbNotificationStorage::getInstance()->updateNotifications();  	} +	gIMMgr->updateDNDMessageStatus();  }  //----------------------------------------------------------------------------- diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index d1dfbe3315..7b0496ea45 100755 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -913,6 +913,8 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction)  	F32 max_distance = llmin(mDrawDistance - DIST_FUDGE,   							 LLWorld::getInstance()->getRegionWidthInMeters() - DIST_FUDGE ); +    max_distance = llmin(max_distance, current_distance * 4.f); //Scaled max relative to current distance.  MAINT-3154 +  	if (new_distance > max_distance)  	{  		new_distance = max_distance; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 6797dab839..9451a30341 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1341,15 +1341,15 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear,  		LLNotificationsUtil::add("CannotWearTrash");  		return false;  	} -	else if (gInventory.isObjectDescendentOf(item_to_wear->getUUID(), LLAppearanceMgr::instance().getCOF())) // EXT-84911 +	else if (isLinkedInCOF(item_to_wear->getUUID())) // EXT-84911  	{  		return false;  	}  	switch (item_to_wear->getType())  	{ -	case LLAssetType::AT_CLOTHING: -	if (gAgentWearables.areWearablesLoaded()) +		case LLAssetType::AT_CLOTHING: +		if (gAgentWearables.areWearablesLoaded())  		{  			if (!cb && do_update)  			{ @@ -1367,7 +1367,8 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear,  			addCOFItemLink(item_to_wear, cb);  		}   		break; -	case LLAssetType::AT_BODYPART: + +		case LLAssetType::AT_BODYPART:  		// TODO: investigate wearables may not be loaded at this point EXT-8231  		// Remove the existing wearables of the same type. @@ -1379,10 +1380,12 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear,  		}  		addCOFItemLink(item_to_wear, cb);  		break; -	case LLAssetType::AT_OBJECT: + +		case LLAssetType::AT_OBJECT:  		rez_attachment(item_to_wear, NULL, replace);  		break; -	default: return false;; + +		default: return false;;  	}  	return true; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b69cd81078..24150daea4 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -100,6 +100,7 @@  #include "llspellcheck.h"  #include "llscenemonitor.h"  #include "llavatarrenderinfoaccountant.h" +#include "lllocalbitmaps.h"  // Linden library includes  #include "llavatarnamecache.h" @@ -1758,7 +1759,9 @@ bool LLAppViewer::cleanup()  #if 0 // this seems to get us stuck in an infinite loop...  	gTransferManager.cleanup();  #endif -	 + +	LLLocalBitmapMgr::cleanupClass(); +  	// Note: this is where gWorldMap used to be deleted.  	// Note: this is where gHUDManager used to be deleted. @@ -3190,7 +3193,8 @@ bool LLAppViewer::initWindow()  #ifdef LL_DARWIN      //Satisfy both MAINT-3135 (OSX 10.6 and earlier) MAINT-3288 (OSX 10.7 and later)     if (getOSInfo().mMajorVer == 10 && getOSInfo().mMinorVer < 7) -       gViewerWindow->getWindow()->setOldResize(true); +		if ( getOSInfo().mMinorVer == 6 && getOSInfo().mBuild < 8 ) +       		gViewerWindow->getWindow()->setOldResize(true);  #endif  	if (gSavedSettings.getBOOL("WindowMaximized")) diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h index df907567ab..380fdccfa3 100755 --- a/indra/newview/llcolorswatch.h +++ b/indra/newview/llcolorswatch.h @@ -56,6 +56,7 @@ public:  		Optional<LLUIImage*>			alpha_background_image;  		Optional<commit_callback_t> 	cancel_callback;  		Optional<commit_callback_t> 	select_callback; +		Optional<commit_callback_t>		preview_callback;  		Optional<LLUIColor>				border_color;  		Optional<S32>					label_width;  		Optional<S32>					label_height; @@ -84,6 +85,7 @@ public:  	void			setCanApplyImmediately(BOOL apply) { mCanApplyImmediately = apply; }  	void			setOnCancelCallback(commit_callback_t cb) { mOnCancelCallback = cb; }  	void			setOnSelectCallback(commit_callback_t cb) { mOnSelectCallback = cb; } +	void			setPreviewCallback(commit_callback_t cb) { mPreviewCallback = cb; }  	void			setFallbackImage(LLPointer<LLUIImage> image) { mFallbackImage = image; }  	void			showPicker(BOOL take_focus); @@ -109,6 +111,7 @@ protected:  	bool					mCanApplyImmediately;  	commit_callback_t		mOnCancelCallback,  							mOnSelectCallback; +	commit_callback_t mPreviewCallback;  	S32						mLabelWidth,  							mLabelHeight; diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 211a96b32d..67d1642639 100755 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -155,7 +155,7 @@ void LLStandardBumpmap::addstandard()  			LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id));	  		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLGLTexture::LOCAL) ;  		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL ); -		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0) ; +		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0, 30.f) ;  		LLStandardBumpmap::sStandardBumpmapCount++;  	} diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp index 3e032d0e4a..513c33e60d 100755 --- a/indra/newview/llfloateravatarpicker.cpp +++ b/indra/newview/llfloateravatarpicker.cpp @@ -796,7 +796,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()  {  	bool ret_val = visibleItemsSelected(); -	if ( ret_val && mOkButtonValidateSignal.num_slots() ) +	if ( ret_val )  	{  		std::string acvtive_panel_name;  		LLScrollListCtrl* list =  NULL; @@ -827,7 +827,7 @@ bool LLFloaterAvatarPicker::isSelectBtnEnabled()  			getSelectedAvatarData(list, avatar_ids, avatar_names);  			if (avatar_ids.size() >= 1)   			{ -				ret_val = mOkButtonValidateSignal(avatar_ids); +				ret_val = mOkButtonValidateSignal.num_slots()?mOkButtonValidateSignal(avatar_ids):true;  			}  			else  			{ diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp index 9425f5645e..0c59ba9a6d 100755 --- a/indra/newview/llfloatercolorpicker.cpp +++ b/indra/newview/llfloatercolorpicker.cpp @@ -342,6 +342,11 @@ void LLFloaterColorPicker::setCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn )  	curG = curGIn;  	curB = curBIn; +	if (mApplyImmediateCheck->get()) +	{ +		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); +	} +  	// update corresponding HSL values and  	LLColor3(curRIn, curGIn, curBIn).calcHSL(&curH, &curS, &curL); @@ -369,6 +374,11 @@ void LLFloaterColorPicker::setCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn )  	// update corresponding RGB values and  	hslToRgb ( curH, curS, curL, curR, curG, curB ); + +	if (mApplyImmediateCheck->get()) +	{ +		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); +	}  }  ////////////////////////////////////////////////////////////////////////////// @@ -458,10 +468,6 @@ void LLFloaterColorPicker::onImmediateCheck( LLUICtrl* ctrl, void* data)  void LLFloaterColorPicker::onColorSelect( const LLTextureEntry& te )  {  	setCurRgb(te.getColor().mV[VRED], te.getColor().mV[VGREEN], te.getColor().mV[VBLUE]); -	if (mApplyImmediateCheck->get()) -	{ -		LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE ); -	}  }  void LLFloaterColorPicker::onMouseCaptureLost() diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index afbd7ba5e2..bd5d2207b4 100755 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -1069,9 +1069,9 @@ void LLFloaterTools::setGridMode(S32 mode)  void LLFloaterTools::onClickGridOptions()  { -	LLFloaterReg::showInstance("build_options"); -	// RN: this makes grid options dependent on build tools window -	//floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE); +	LLFloater* floaterp = LLFloaterReg::showInstance("build_options"); +	// position floater next to build tools, not over +	floaterp->setRect(gFloaterView->findNeighboringPosition(this, floaterp));  }  // static diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index bbfd855bc8..7f599073d5 100755 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -74,8 +74,7 @@ LLFloaterWebContent::LLFloaterWebContent( const Params& params )  	mShowPageTitle(params.show_page_title),      mAllowNavigation(true),      mCurrentURL(""), -    mDisplayURL(""), -    mSecureURL(false) +    mDisplayURL("")  {  	mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));  	mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this )); @@ -331,9 +330,6 @@ void LLFloaterWebContent::draw()  	mBtnBack->setEnabled( mWebBrowser->canNavigateBack() && mAllowNavigation);  	mBtnForward->setEnabled( mWebBrowser->canNavigateForward() && mAllowNavigation); -    // Show/hide the lock icon -    mSecureLockIcon->setVisible(mSecureURL && !mAddressCombo->hasFocus()); -  	LLFloater::draw();  } @@ -378,8 +374,6 @@ void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent  		// we populate the status bar with URLs as they change so clear it now we're done  		const std::string end_str = "";  		mStatusBarText->setText( end_str ); -			mAddressCombo->setLeftTextPadding(22); -			mAddressCombo->setLeftTextPadding(2);  	}  	else if(event == MEDIA_EVENT_CLOSE_REQUEST)  	{ @@ -446,10 +440,10 @@ void LLFloaterWebContent::set_current_url(const std::string& url)  		static const std::string secure_prefix = std::string("https://");  		std::string prefix = mCurrentURL.substr(0, secure_prefix.length());  		LLStringUtil::toLower(prefix); -        mSecureURL = (prefix == secure_prefix); -         -        // Hack : we move the text a bit to make space for the lock icon in the secure URL case -		mDisplayURL = (mSecureURL ? "      " + mCurrentURL : mCurrentURL); +        bool secure_url = (prefix == secure_prefix); +		mSecureLockIcon->setVisible(secure_url); +		mAddressCombo->setLeftTextPadding(secure_url ? 22 : 2); +		mDisplayURL = mCurrentURL;          // Clean up browsing list (prevent dupes) and add/select the new URL to it          mAddressCombo->remove(mCurrentURL); diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index f5faa39e3d..4291fd9f2c 100755 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -113,7 +113,6 @@ protected:  	std::string		mUUID;  	bool			mShowPageTitle;      bool            mAllowNavigation; -    bool            mSecureURL;     // true when the current url is prefixed "https://"  };  #endif  // LL_LLFLOATERWEBCONTENT_H diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 1b0f370536..8d8239611c 100755 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -410,6 +410,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	mOtherParticipantIsAvatar(true),  	mStartCallOnInitialize(false),  	mStartedAsIMCall(voice), +	mIsDNDsend(false),  	mAvatarNameCacheConnection()  {  	// set P2P type by default @@ -3315,6 +3316,38 @@ bool LLIMMgr::isVoiceCall(const LLUUID& session_id)  	return im_session->mStartedAsIMCall;  } +void LLIMMgr::updateDNDMessageStatus() +{ +	if (LLIMModel::getInstance()->mId2SessionMap.empty()) return; + +	std::map<LLUUID, LLIMModel::LLIMSession*>::const_iterator it = LLIMModel::getInstance()->mId2SessionMap.begin(); +	for (; it != LLIMModel::getInstance()->mId2SessionMap.end(); ++it) +	{ +		LLIMModel::LLIMSession* session = (*it).second; + +		if (session->isP2P()) +		{ +			setDNDMessageSent(session->mSessionID,false); +		} +	} +} + +bool LLIMMgr::isDNDMessageSend(const LLUUID& session_id) +{ +	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id); +	if (!im_session) return false; + +	return im_session->mIsDNDsend; +} + +void LLIMMgr::setDNDMessageSent(const LLUUID& session_id, bool is_send) +{ +	LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id); +	if (!im_session) return; + +	im_session->mIsDNDsend = is_send; +} +  void LLIMMgr::addNotifiedNonFriendSessionID(const LLUUID& session_id)  {  	mNotifiedNonFriendSessions.insert(session_id); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 1426bada95..f92eff4845 100755 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -138,6 +138,8 @@ public:  		bool mHasOfflineMessage; +		bool mIsDNDsend; +  	private:  		void onAdHocNameCache(const LLAvatarName& av_name); @@ -441,6 +443,12 @@ public:  	bool isVoiceCall(const LLUUID& session_id); +	void updateDNDMessageStatus(); + +	bool isDNDMessageSend(const LLUUID& session_id); + +	void setDNDMessageSent(const LLUUID& session_id, bool is_send); +  	void addNotifiedNonFriendSessionID(const LLUUID& session_id);  	bool isNonFriendSessionNotified(const LLUUID& session_id); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 5df28ccb73..87335cd5e6 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -4593,6 +4593,10 @@ public:  	virtual void changed(U32 mask)  	{  		mBridgep->refreshFolderViewItem(); +		if (mask & LLFriendObserver::ONLINE) +		{ +			mBridgep->checkSearchBySuffixChanges(); +		}  	}  protected:  	LLCallingCardBridge* mBridgep; @@ -4627,6 +4631,44 @@ void LLCallingCardBridge::refreshFolderViewItem()  	}  } +void LLCallingCardBridge::checkSearchBySuffixChanges() +{ +	if (!mDisplayName.empty()) +	{ +		// changes in mDisplayName are processed by rename function and here it will be always same +		// suffixes are also of fixed length, and we are processing change of one at a time, +		// so it should be safe to use length (note: mSearchableName is capitalized) +		S32 old_length = mSearchableName.length(); +		S32 new_length = mDisplayName.length() + getLabelSuffix().length(); +		if (old_length == new_length) +		{ +			return; +		} +		mSearchableName.assign(mDisplayName); +		mSearchableName.append(getLabelSuffix()); +		LLStringUtil::toUpper(mSearchableName); +		if (new_length<old_length) +		{ +			LLInventoryFilter* filter = getInventoryFilter(); +			if (filter && mPassedFilter && mSearchableName.find(filter->getFilterSubString()) == std::string::npos) +			{ +				// string no longer contains substring  +				// we either have to update all parents manually or restart filter. +				// dirtyFilter will not work here due to obsolete descendants' generations  +				getInventoryFilter()->setModified(LLFolderViewFilter::FILTER_MORE_RESTRICTIVE); +			} +		} +		else +		{ +			if (getInventoryFilter()) +			{ +				// mSearchableName became longer, we gained additional suffix and need to repeat filter check. +				dirtyFilter(); +			} +		} +	} +} +  // virtual  void LLCallingCardBridge::performAction(LLInventoryModel* model, std::string action)  { diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 02134c7cc5..7dac830098 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -421,6 +421,7 @@ public:  							void* cargo_data,  							std::string& tooltip_msg);  	void refreshFolderViewItem(); +	void checkSearchBySuffixChanges();  protected:  	LLCallingCardObserver* mObserver;  }; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index e74e58015a..a4a85e2e8d 100755 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -547,6 +547,14 @@ void LLInventoryPanel::modelChanged(U32 mask)  							// Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.  							view_item->addToFolder(new_parent);  							addItemID(viewmodel_item->getUUID(), view_item); +							if (mInventory) +							{ +								const LLUUID trash_id = mInventory->findCategoryUUIDForType(LLFolderType::FT_TRASH); +								if (trash_id != model_item->getParentUUID() && (mask & LLInventoryObserver::INTERNAL) && new_parent->isOpen()) +								{ +									setSelection(item_id, FALSE); +								} +							}  						}  						else   						{ diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp index 8e4950f5c2..b91e37d596 100755 --- a/indra/newview/lllocalbitmaps.cpp +++ b/indra/newview/lllocalbitmaps.cpp @@ -190,7 +190,7 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)  				{  					// decode is successful, we can safely proceed.  					LLUUID old_id = LLUUID::null; -					if (!(optional_firstupdate == UT_FIRSTUSE) && !mWorldID.isNull()) +					if ((optional_firstupdate != UT_FIRSTUSE) && !mWorldID.isNull())  					{  						old_id = mWorldID;  					} @@ -206,15 +206,18 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)  					gTextureList.addImage(texture); -					if (!optional_firstupdate == UT_FIRSTUSE) +					if (optional_firstupdate != UT_FIRSTUSE)  					{  						// seek out everything old_id uses and replace it with mWorldID  						replaceIDs(old_id, mWorldID);  						// remove old_id from gimagelist  						LLViewerFetchedTexture* image = gTextureList.findImage(old_id); -						gTextureList.deleteImage(image); -						image->unref(); +						if (image != NULL) +						{ +							gTextureList.deleteImage(image); +							image->unref(); +						}  					}  					mUpdateRetries = LL_LOCAL_UPDATE_RETRIES; @@ -824,6 +827,12 @@ LLLocalBitmapMgr::~LLLocalBitmapMgr()  {  } +void LLLocalBitmapMgr::cleanupClass() +{ +	std::for_each(sBitmapList.begin(), sBitmapList.end(), DeletePointer()); +	sBitmapList.clear(); +} +  bool LLLocalBitmapMgr::addUnit()  {  	bool add_successful = false; diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h index 47c077dcab..a15ea10801 100755 --- a/indra/newview/lllocalbitmaps.h +++ b/indra/newview/lllocalbitmaps.h @@ -117,6 +117,7 @@ class LLLocalBitmapMgr  		~LLLocalBitmapMgr();  	public: +		static void			cleanupClass();  		static bool         addUnit();  		static void         delUnit(LLUUID tracking_id); diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 109d6b31b2..2810941d83 100755 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -66,9 +66,8 @@ const F32 SNAP_GUIDE_SCREEN_OFFSET = 0.05f;  const F32 SNAP_GUIDE_SCREEN_LENGTH = 0.7f;  const F32 SELECTED_MANIPULATOR_SCALE = 1.2f;  const F32 MANIPULATOR_SCALE_HALF_LIFE = 0.07f; -const S32 NUM_MANIPULATORS = 14; -const LLManip::EManipPart MANIPULATOR_IDS[NUM_MANIPULATORS] = +const LLManip::EManipPart MANIPULATOR_IDS[LLManipScale::NUM_MANIPULATORS] =   {  	LLManip::LL_CORNER_NNN,  	LLManip::LL_CORNER_NNP, @@ -143,18 +142,16 @@ inline void LLManipScale::conditionalHighlight( U32 part, const LLColor4* highli  	LLColor4 default_highlight( 1.f, 1.f, 1.f, 1.f );  	LLColor4 default_normal( 0.7f, 0.7f, 0.7f, 0.6f );  	LLColor4 invisible(0.f, 0.f, 0.f, 0.f); -	F32 manipulator_scale = 1.f;  	for (S32 i = 0; i < NUM_MANIPULATORS; i++)  	{  		if((U32)MANIPULATOR_IDS[i] == part)  		{ -			manipulator_scale = mManipulatorScales[i]; +			mScaledBoxHandleSize = mManipulatorScales[i] * mBoxHandleSize[i];  			break;  		}  	} -	mScaledBoxHandleSize = mBoxHandleSize * manipulator_scale;  	if (mManipPart != (S32)LL_NO_PART && mManipPart != (S32)part)  	{  		gGL.color4fv( invisible.mV ); @@ -181,7 +178,6 @@ void LLManipScale::handleSelect()  LLManipScale::LLManipScale( LLToolComposite* composite )  	:  	LLManip( std::string("Scale"), composite ), -	mBoxHandleSize( 1.f ),  	mScaledBoxHandleSize( 1.f ),  	mLastMouseX( -1 ),  	mLastMouseY( -1 ), @@ -196,17 +192,16 @@ LLManipScale::LLManipScale( LLToolComposite* composite )  	mSnapRegime(SNAP_REGIME_NONE),  	mScaleSnappedValue(0.f)  { -	mManipulatorScales = new F32[NUM_MANIPULATORS];  	for (S32 i = 0; i < NUM_MANIPULATORS; i++)  	{  		mManipulatorScales[i] = 1.f; +		mBoxHandleSize[i]     = 1.f;  	}  }  LLManipScale::~LLManipScale()  {  	for_each(mProjectedManipulators.begin(), mProjectedManipulators.end(), DeletePointer()); -	delete[] mManipulatorScales;  }  void LLManipScale::render() @@ -216,6 +211,7 @@ void LLManipScale::render()  	LLGLDepthTest gls_depth(GL_TRUE);  	LLGLEnable gl_blend(GL_BLEND);  	LLGLEnable gls_alpha_test(GL_ALPHA_TEST); +	LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();  	if( canAffectSelection() )  	{ @@ -237,42 +233,48 @@ void LLManipScale::render()  		if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)  		{ -			mBoxHandleSize = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); -			mBoxHandleSize /= gAgentCamera.mHUDCurZoom; +			for (S32 i = 0; i < NUM_MANIPULATORS; i++) +			{ +				mBoxHandleSize[i] = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); +				mBoxHandleSize[i] /= gAgentCamera.mHUDCurZoom; +			}  		}  		else  		{ -			F32 range_squared = dist_vec_squared(gAgentCamera.getCameraPositionAgent(), center_agent); -			F32 range_from_agent_squared = dist_vec_squared(gAgent.getPositionAgent(), center_agent); - -			// Don't draw manip if object too far away -			if (gSavedSettings.getBOOL("LimitSelectDistance")) +			for (S32 i = 0; i < NUM_MANIPULATORS; i++)  			{ -				F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance"); -				if (range_from_agent_squared > max_select_distance * max_select_distance) +				LLVector3 manipulator_pos = bbox.localToAgent(unitVectorToLocalBBoxExtent(partToUnitVector(MANIPULATOR_IDS[i]), bbox)); +				F32 range_squared = dist_vec_squared(gAgentCamera.getCameraPositionAgent(), manipulator_pos); +				F32 range_from_agent_squared = dist_vec_squared(gAgent.getPositionAgent(), manipulator_pos); + +				// Don't draw manip if object too far away +				if (gSavedSettings.getBOOL("LimitSelectDistance"))  				{ -					return; +					F32 max_select_distance = gSavedSettings.getF32("MaxSelectDistance"); +					if (range_from_agent_squared > max_select_distance * max_select_distance) +					{ +						return; +					}  				} -			} -			if (range_squared > 0.001f * 0.001f) -			{ -				// range != zero -				F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); -				F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView();  // radians -				mBoxHandleSize = (F32) sqrtf(range_squared) * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR; -			} -			else -			{ -				// range == zero -				mBoxHandleSize = BOX_HANDLE_BASE_FACTOR; +				if (range_squared > 0.001f * 0.001f) +				{ +					// range != zero +					F32 fraction_of_fov = BOX_HANDLE_BASE_SIZE / (F32) LLViewerCamera::getInstance()->getViewHeightInPixels(); +					F32 apparent_angle = fraction_of_fov * LLViewerCamera::getInstance()->getView();  // radians +					mBoxHandleSize[i] = (F32) sqrtf(range_squared) * tan(apparent_angle) * BOX_HANDLE_BASE_FACTOR; +				} +				else +				{ +					// range == zero +					mBoxHandleSize[i] = BOX_HANDLE_BASE_FACTOR; +				}  			}  		}  		////////////////////////////////////////////////////////////////////////  		// Draw bounding box -		LLBBox bbox = LLSelectMgr::getInstance()->getBBoxOfSelection();  		LLVector3 pos_agent = bbox.getPositionAgent();  		LLQuaternion rot = bbox.getRotation(); @@ -564,7 +566,7 @@ void LLManipScale::renderFaces( const LLBBox& bbox )  	//                +------------+         | (texture coordinates)  	//                |            |         |  	//                |     1      |        (*) --->s -	//                |    +X      | +	//                |    +X      |     	//                |            |  	// (+++)     (+-+)|            |(+--)     (++-)        (+++)  	//   +------------+------------+------------+------------+ @@ -679,32 +681,32 @@ void LLManipScale::renderFaces( const LLBBox& bbox )  			{  			  case 0:  				conditionalHighlight( LL_FACE_POSZ, &z_highlight_color, &z_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_POSZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );  				break;  			  case 1:  				conditionalHighlight( LL_FACE_POSX, &x_highlight_color, &x_normal_color ); -				renderAxisHandle( ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_POSX, ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 2:  				conditionalHighlight( LL_FACE_POSY, &y_highlight_color, &y_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_POSY, ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 3:  				conditionalHighlight( LL_FACE_NEGX, &x_highlight_color, &x_normal_color ); -				renderAxisHandle( ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_NEGX, ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 4:  				conditionalHighlight( LL_FACE_NEGY, &y_highlight_color, &y_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_NEGY, ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );  				break;  			  case 5:  				conditionalHighlight( LL_FACE_NEGZ, &z_highlight_color, &z_normal_color ); -				renderAxisHandle( ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) ); +				renderAxisHandle( LL_FACE_NEGZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );  				break;  			}  		} @@ -714,10 +716,10 @@ void LLManipScale::renderFaces( const LLBBox& bbox )  void LLManipScale::renderEdges( const LLBBox& bbox )  {  	LLVector3 extent = bbox.getExtentLocal(); -	F32 edge_width = mBoxHandleSize * .6f;  	for( U32 part = LL_EDGE_MIN; part <= LL_EDGE_MAX; part++ )  	{ +		F32 edge_width = mBoxHandleSize[part] * .6f;  		LLVector3 direction = edgeToUnitVector( part );  		LLVector3 center_to_edge = unitVectorToLocalBBoxExtent( direction, bbox ); @@ -778,14 +780,14 @@ void LLManipScale::renderBoxHandle( F32 x, F32 y, F32 z )  } -void LLManipScale::renderAxisHandle( const LLVector3& start, const LLVector3& end ) +void LLManipScale::renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end )  {  	if( getShowAxes() )  	{  		// Draws a single "jacks" style handle: a long, retangular box from start to end.  		LLVector3 offset_start = end - start;  		offset_start.normalize(); -		offset_start = start + mBoxHandleSize * offset_start; +		offset_start = start + mBoxHandleSize[part] * offset_start;  		LLVector3 delta = end - offset_start;  		LLVector3 pos = offset_start + 0.5f * delta; @@ -794,9 +796,9 @@ void LLManipScale::renderAxisHandle( const LLVector3& start, const LLVector3& en  		{  			gGL.translatef( pos.mV[VX], pos.mV[VY], pos.mV[VZ] );  			gGL.scalef( -				mBoxHandleSize + llabs(delta.mV[VX]), -				mBoxHandleSize + llabs(delta.mV[VY]), -				mBoxHandleSize + llabs(delta.mV[VZ])); +				mBoxHandleSize[part] + llabs(delta.mV[VX]), +				mBoxHandleSize[part] + llabs(delta.mV[VY]), +				mBoxHandleSize[part] + llabs(delta.mV[VZ]));  			gBox.render();  		}  		gGL.popMatrix(); @@ -1663,15 +1665,15 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  				arrow_dir = snap_line_start - snap_line_center;  				arrow_dir.normalize(); -				gGL.vertex3fv((snap_line_start + arrow_dir * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_start + arrow_span * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_start - arrow_span * mBoxHandleSize).mV); +				gGL.vertex3fv((snap_line_start + arrow_dir * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_start + arrow_span * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_start - arrow_span * mSnapRegimeOffset * 0.1f).mV);  				arrow_dir = snap_line_end - snap_line_center;  				arrow_dir.normalize(); -				gGL.vertex3fv((snap_line_end + arrow_dir * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_end + arrow_span * mBoxHandleSize).mV); -				gGL.vertex3fv((snap_line_end - arrow_span * mBoxHandleSize).mV); +				gGL.vertex3fv((snap_line_end + arrow_dir * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_end + arrow_span * mSnapRegimeOffset * 0.1f).mV); +				gGL.vertex3fv((snap_line_end - arrow_span * mSnapRegimeOffset * 0.1f).mV);  			}  			gGL.end();  		} @@ -1727,7 +1729,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  			{  				F32 alpha = (1.f - (1.f *  ((F32)llabs(i) / (F32)num_ticks_per_side2)));  				LLVector3 tick_pos = mScaleCenter + (mScaleDir * (grid_multiple2 + i) * smallest_subdivision2); - +				  				F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit2, mTickPixelSpacing2), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);  				if (fmodf((F32)(i + sub_div_offset_2), (sGridMaxSubdivisionLevel / cur_subdivisions)) != 0.f) @@ -1780,7 +1782,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  			if (fmodf((F32)(i + label_sub_div_offset_1), (sGridMaxSubdivisionLevel / llmin(sGridMaxSubdivisionLevel, getSubdivisionLevel(tick_pos, mScaleDir, mScaleSnapUnit1, tick_label_spacing)))) == 0.f)  			{  				LLVector3 text_origin = tick_pos + (mSnapGuideDir1 * mSnapRegimeOffset * (1.f + tick_scale)); - +				  				EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode();  				F32 tick_value;  				if (grid_mode == GRID_MODE_WORLD) diff --git a/indra/newview/llmanipscale.h b/indra/newview/llmanipscale.h index e1da7a1bb5..7cc3c99810 100755 --- a/indra/newview/llmanipscale.h +++ b/indra/newview/llmanipscale.h @@ -71,7 +71,7 @@ public:  		ManipulatorHandle(LLVector3 pos, EManipPart id, EScaleManipulatorType type):mPosition(pos), mManipID(id), mType(type){}  	}; - +	static const S32 NUM_MANIPULATORS = 14;  	LLManipScale( LLToolComposite* composite );  	~LLManipScale(); @@ -98,7 +98,7 @@ private:  	void			renderFaces( const LLBBox& local_bbox );  	void			renderEdges( const LLBBox& local_bbox );  	void			renderBoxHandle( F32 x, F32 y, F32 z ); -	void			renderAxisHandle( const LLVector3& start, const LLVector3& end ); +	void			renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end );  	void			renderGuidelinesPart( const LLBBox& local_bbox );  	void			renderSnapGuides( const LLBBox& local_bbox ); @@ -142,7 +142,6 @@ private:  	}; -	F32				mBoxHandleSize; //!< The size of the handles at the corners of the bounding box.  	F32				mScaledBoxHandleSize; //!< Handle size after scaling for selection feedback.  	LLVector3d		mDragStartPointGlobal;  	LLVector3d		mDragStartCenterGlobal; //!< The center of the bounding box of all selected objects at time of drag start. @@ -171,7 +170,8 @@ private:  	LLVector3		mScaleDir; //!< The direction of the scaling action.  In face-dragging this is aligned with one of the cardinal axis relative to the prim, but in corner-dragging this is along the diagonal.  	F32				mScaleSnappedValue; //!< The distance of the current position nearest the mouse location, measured along mScaleDir.  Is measured either from the center or from the far face/corner depending upon whether uniform scaling is true or false respectively.  	ESnapRegimes	mSnapRegime; //<! Which, if any, snap regime the cursor is currently residing in. -	F32*			mManipulatorScales; +	F32				mManipulatorScales[NUM_MANIPULATORS]; +	F32				mBoxHandleSize[NUM_MANIPULATORS];		// The size of the handles at the corners of the bounding box  };  #endif  // LL_MANIPSCALE_H diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index ff0d25d203..8a89131c43 100755 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -1246,7 +1246,7 @@ void LLManipTranslate::renderSnapGuides()  		// find distance to nearest smallest grid unit  		F32 offset_nearest_grid_unit = fmodf(dist_grid_axis, smallest_grid_unit_scale);  		// how many smallest grid units are we away from largest grid scale? -		S32 sub_div_offset = llround(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale); +		S32 sub_div_offset = llround(fmodf(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale);  		S32 num_ticks_per_side = llmax(1, llfloor(0.5f * guide_size_meters / smallest_grid_unit_scale));  		LLGLDepthTest gls_depth(GL_FALSE); diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 106f6c25f1..375c54479d 100755 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -421,27 +421,14 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  		msg->getUUID("QueryData", "OwnerID", owner_id, 0);  		msg->getUUID("TransactionData", "TransactionID", trans_id); +		S32 total_contribution = 0;  		if(owner_id.isNull())  		{  			// special block which has total contribution  			++first_block; -			 -			S32 total_contribution; +  			msg->getS32("QueryData", "ActualArea", total_contribution, 0);  			mPanel.getChild<LLUICtrl>("total_contributed_land_value")->setTextArg("[AREA]", llformat("%d", total_contribution)); - -			S32 committed; -			msg->getS32("QueryData", "BillableArea", committed, 0); -			mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed)); -			 -			S32 available = total_contribution - committed; -			mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available)); - -			if ( mGroupOverLimitTextp && mGroupOverLimitIconp ) -			{ -				mGroupOverLimitIconp->setVisible(available < 0); -				mGroupOverLimitTextp->setVisible(available < 0); -			}  		}  		if ( trans_id != mTransID ) return; @@ -460,7 +447,8 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  		std::string sim_name;  		std::string land_sku;  		std::string land_type; -		 +		S32 committed = 0; +  		for(S32 i = first_block; i < count; ++i)  		{  			msg->getUUID("QueryData", "OwnerID", owner_id, i); @@ -489,6 +477,9 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  			S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;  			std::string location = sim_name + llformat(" (%d, %d)", region_x, region_y);  			std::string area; +			committed+=billable_area; + +  			if(billable_area == actual_area)  			{  				area = llformat("%d", billable_area); @@ -525,6 +516,16 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  			mGroupParcelsp->addElement(row);  		} + +		mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed)); + +		S32 available = total_contribution - committed; +		mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available)); +		if ( mGroupOverLimitTextp && mGroupOverLimitIconp ) +		{ +			mGroupOverLimitIconp->setVisible(available < 0); +			mGroupOverLimitTextp->setVisible(available < 0); +		}  	}  } diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp index 9b21fbf6b7..acdb16f432 100755 --- a/indra/newview/llpanelland.cpp +++ b/indra/newview/llpanelland.cpp @@ -145,7 +145,7 @@ void LLPanelLandInfo::refresh()  						&& ((gAgent.getID() == auth_buyer_id)  							|| (auth_buyer_id.isNull()))); -		if (is_public) +		if (is_public && !LLViewerParcelMgr::getInstance()->getParcelSelection()->getMultipleOwners())  		{  			getChildView("button buy land")->setEnabled(TRUE);  		} diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 67cbc91332..75a3584a1e 100755 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -1263,6 +1263,7 @@ bool LLLandmarksPanel::handleDragAndDropToTrash(BOOL drop, EDragAndDropType carg  		break;  	} +	updateVerbs();  	return true;  } diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index e501486ecb..0817b677bc 100755 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -129,6 +129,7 @@ BOOL LLPanelPlaceProfile::postBuild()  	mEstateNameText = getChild<LLTextBox>("estate_name");  	mEstateRatingText = getChild<LLTextBox>("estate_rating"); +	mEstateRatingIcon = getChild<LLIconCtrl>("estate_rating_icon");  	mEstateOwnerText = getChild<LLTextBox>("estate_owner");  	mCovenantText = getChild<LLTextEditor>("covenant"); @@ -201,6 +202,7 @@ void LLPanelPlaceProfile::resetLocation()  	mEstateNameText->setValue(loading);  	mEstateRatingText->setValue(loading); +	mEstateRatingIcon->setValue(loading);  	mEstateOwnerText->setValue(loading);  	mCovenantText->setValue(loading); @@ -348,6 +350,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mParcelRatingIcon->setValue(icon_m);  		mRegionRatingIcon->setValue(icon_m); +		mEstateRatingIcon->setValue(icon_m);  		break;  	case SIM_ACCESS_ADULT: @@ -355,6 +358,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mParcelRatingIcon->setValue(icon_r);  		mRegionRatingIcon->setValue(icon_r); +		mEstateRatingIcon->setValue(icon_r);  		break;  	default: @@ -362,6 +366,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		mParcelRatingIcon->setValue(icon_pg);  		mRegionRatingIcon->setValue(icon_pg); +		mEstateRatingIcon->setValue(icon_pg);  	}  	std::string rating = LLViewerRegion::accessToString(sim_access); diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h index 01adfd4940..4547e14b2e 100755 --- a/indra/newview/llpanelplaceprofile.h +++ b/indra/newview/llpanelplaceprofile.h @@ -103,6 +103,7 @@ private:  	LLTextBox*			mEstateNameText;  	LLTextBox*			mEstateRatingText; +	LLIconCtrl*			mEstateRatingIcon;  	LLTextBox*			mEstateOwnerText;  	LLTextEditor*		mCovenantText; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 652d2be6f6..3de9dc2f80 100755 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -45,6 +45,7 @@  #include "llviewermenu.h"  #include "lllandmarkactions.h"  #include "llclipboard.h" +#include "lltrans.h"  // Maximum number of items that can be added to a list in one pass.  // Used to limit time spent for items list update per frame. @@ -55,7 +56,8 @@ static const std::string COLLAPSED_BY_USER = "collapsed_by_user";  class LLTeleportHistoryFlatItem : public LLPanel  {  public: -	LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, const std::string &hl); +	LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, +										 	 LLDate date, const std::string &hl);  	virtual ~LLTeleportHistoryFlatItem();  	virtual BOOL postBuild(); @@ -66,8 +68,11 @@ public:  	void setIndex(S32 index) { mIndex = index; }  	const std::string& getRegionName() { return mRegionName;}  	void setRegionName(const std::string& name); +	void setDate(LLDate date);  	void setHighlightedText(const std::string& text);  	void updateTitle(); +	void updateTimestamp(); +	std::string getTimestamp();  	/*virtual*/ void setValue(const LLSD& value); @@ -84,12 +89,14 @@ private:  	LLButton* mProfileBtn;  	LLTextBox* mTitle; +	LLTextBox* mTimeTextBox;  	LLTeleportHistoryPanel::ContextMenu *mContextMenu;  	S32 mIndex;  	std::string mRegionName;  	std::string mHighlight; +	LLDate 		mDate;  	LLRootHandle<LLTeleportHistoryFlatItem> mItemHandle;  }; @@ -121,11 +128,13 @@ private:  ////////////////////////////////////////////////////////////////////////////////  //////////////////////////////////////////////////////////////////////////////// -LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, const std::string &hl) +LLTeleportHistoryFlatItem::LLTeleportHistoryFlatItem(S32 index, LLTeleportHistoryPanel::ContextMenu *context_menu, const std::string ®ion_name, +																LLDate date, const std::string &hl)  :	LLPanel(),  	mIndex(index),  	mContextMenu(context_menu),  	mRegionName(region_name), +	mDate(date),  	mHighlight(hl)  {  	buildFromFile( "panel_teleport_history_item.xml"); @@ -140,11 +149,14 @@ BOOL LLTeleportHistoryFlatItem::postBuild()  {  	mTitle = getChild<LLTextBox>("region"); +	mTimeTextBox = getChild<LLTextBox>("timestamp"); +  	mProfileBtn = getChild<LLButton>("profile_btn");  	mProfileBtn->setClickedCallback(boost::bind(&LLTeleportHistoryFlatItem::onProfileBtnClick, this));  	updateTitle(); +	updateTimestamp();  	return true;  } @@ -179,6 +191,38 @@ void LLTeleportHistoryFlatItem::setRegionName(const std::string& name)  	mRegionName = name;  } +void LLTeleportHistoryFlatItem::setDate(LLDate date) +{ +	mDate = date; +} + +std::string LLTeleportHistoryFlatItem::getTimestamp() +{ +	const LLDate &date = mDate; +	std::string timestamp = ""; + +	LLDate now = LLDate::now(); +	S32 now_year, now_month, now_day, now_hour, now_min, now_sec; +	now.split(&now_year, &now_month, &now_day, &now_hour, &now_min, &now_sec); + +	const S32 seconds_in_day = 24 * 60 * 60; +	S32 seconds_today = now_hour * 60 * 60 + now_min * 60 + now_sec; +	S32 time_diff = (S32) now.secondsSinceEpoch() - (S32) date.secondsSinceEpoch(); + +	// Only show timestamp for today and yesterday +	if(time_diff < seconds_today + seconds_in_day) +	{ +		timestamp = "[" + LLTrans::getString("TimeHour12")+"]:[" +						+ LLTrans::getString("TimeMin")+"] ["+ LLTrans::getString("TimeAMPM")+"]"; +		LLSD substitution; +		substitution["datetime"] = (S32) date.secondsSinceEpoch(); +		LLStringUtil::format(timestamp, substitution); +	} + +	return timestamp; + +} +  void LLTeleportHistoryFlatItem::updateTitle()  {  	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255)); @@ -190,6 +234,17 @@ void LLTeleportHistoryFlatItem::updateTitle()  		mHighlight);  } +void LLTeleportHistoryFlatItem::updateTimestamp() +{ +	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255)); + +	LLTextUtil::textboxSetHighlightedVal( +		mTimeTextBox, +		LLStyle::Params().color(sFgColor), +		getTimestamp(), +		mHighlight); +} +  void LLTeleportHistoryFlatItem::onMouseEnter(S32 x, S32 y, MASK mask)  {  	getChildView("hovered_icon")->setVisible( true); @@ -248,9 +303,11 @@ LLTeleportHistoryFlatItemStorage::getFlatItemForPersistentItem (  		{  			item->setIndex(cur_item_index);  			item->setRegionName(persistent_item.mTitle); +			item->setDate(persistent_item.mDate);  			item->setHighlightedText(hl);  			item->setVisible(TRUE);  			item->updateTitle(); +			item->updateTimestamp();  		}  		else  		{ @@ -264,6 +321,7 @@ LLTeleportHistoryFlatItemStorage::getFlatItemForPersistentItem (  		item = new LLTeleportHistoryFlatItem(cur_item_index,  											 context_menu,  											 persistent_item.mTitle, +											 persistent_item.mDate,  											 hl);  		mItems.push_back(item->getItemHandle());  	} diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp index 6d032ad3d3..398f4e6e42 100755 --- a/indra/newview/llpreview.cpp +++ b/indra/newview/llpreview.cpp @@ -90,6 +90,7 @@ void LLPreview::setObjectID(const LLUUID& object_id)  	{  		loadAsset();  	} +	refreshFromItem();  }  void LLPreview::setItem( LLInventoryItem* item ) @@ -99,6 +100,7 @@ void LLPreview::setItem( LLInventoryItem* item )  	{  		loadAsset();  	} +	refreshFromItem();  }  const LLInventoryItem *LLPreview::getItem() const diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 9ff0ece7d9..9411b8265b 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -1851,7 +1851,7 @@ void LLLiveLSLEditor::loadAsset()  			mIsModifiable = item && gAgent.allowOperation(PERM_MODIFY,   										item->getPermissions(),  				   						GP_OBJECT_MANIPULATE); -			refreshFromItem(); +  			// This is commented out, because we don't completely  			// handle script exports yet.  			/* diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 2556714792..4970eec636 100755 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -257,12 +257,9 @@ void LLSidepanelInventory::updateInbox()  	//  	// Track inbox folder changes  	// - -	const bool do_not_create_folder = false; - -	const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, do_not_create_folder); +	const LLUUID inbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, true); -	// Set up observer to listen for creation of inbox if at least one of them doesn't exist +	// Set up observer to listen for creation of inbox if it doesn't exist  	if (inbox_id.isNull())  	{  		observeInboxCreation(); @@ -270,6 +267,11 @@ void LLSidepanelInventory::updateInbox()  	// Set up observer for inbox changes, if we have an inbox already  	else   	{ +        // Consolidate Received items +        // We shouldn't have to do that but with a client/server system relying on a "well known folder" convention, +        // things can get messy and conventions broken. This call puts everything back together in its right place. +        gInventory.consolidateForType(inbox_id, LLFolderType::FT_INBOX); +          		// Enable the display of the inbox if it exists  		enableInbox(true); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 7b894d8d98..0a8257f42b 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -62,6 +62,7 @@ static U32 sZombieGroups = 0;  U32 LLSpatialGroup::sNodeCount = 0;  U32 gOctreeMaxCapacity; +F32 gOctreeMinSize;  BOOL LLSpatialGroup::sNoDelete = FALSE; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 56fac3b092..0c282a19a5 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2833,6 +2833,7 @@ void LLStartUp::initNameCache()  	// capabilities for display name lookup  	LLAvatarNameCache::initClass(false,gSavedSettings.getBOOL("UsePeopleAPI"));  	LLAvatarNameCache::setUseDisplayNames(gSavedSettings.getBOOL("UseDisplayNames")); +	LLAvatarNameCache::setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames"));  }  void LLStartUp::cleanupNameCache() diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index d307a31843..eabf6f0497 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1584,13 +1584,22 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)  	const LLUUID& session_id = payload["session_id"];  	const LLUUID& agent_id = payload["agent_id"];  	LLViewerInventoryItem * inv_item =  gInventory.getItem(payload["item_id"]); -	if (NULL == inv_item) +	LLViewerInventoryCategory * inv_cat =  gInventory.getCategory(payload["item_id"]); +	if (NULL == inv_item && NULL == inv_cat)  	{ -		llassert(NULL != inv_item); +		llassert( FALSE );  		return;  	} - -	if (LLGiveInventory::doGiveInventoryItem(agent_id, inv_item, session_id)) +	bool successfully_shared; +	if (inv_item) +	{ +		successfully_shared = LLGiveInventory::doGiveInventoryItem(agent_id, inv_item, session_id); +	} +	else +	{ +		successfully_shared = LLGiveInventory::doGiveInventoryCategory(agent_id, inv_cat, session_id); +	} +	if (successfully_shared)  	{  		if ("avatarpicker" == payload["d&d_dest"].asString())  		{ @@ -1600,8 +1609,8 @@ static void give_inventory_cb(const LLSD& notification, const LLSD& response)  	}  } -static void show_item_sharing_confirmation(const std::string name, -					   LLViewerInventoryItem* inv_item, +static void show_object_sharing_confirmation(const std::string name, +					   LLInventoryObject* inv_item,  					   const LLSD& dest,  					   const LLUUID& dest_agent,  					   const LLUUID& session_id = LLUUID::null) @@ -1611,32 +1620,28 @@ static void show_item_sharing_confirmation(const std::string name,  		llassert(NULL != inv_item);  		return;  	} -	if(gInventory.getItem(inv_item->getUUID()) -		&& LLGiveInventory::isInventoryGiveAcceptable(inv_item)) -	{ -		LLSD substitutions; -		substitutions["RESIDENTS"] = name; -		substitutions["ITEMS"] = inv_item->getName(); -		LLSD payload; -		payload["agent_id"] = dest_agent; -		payload["item_id"] = inv_item->getUUID(); -		payload["session_id"] = session_id; -		payload["d&d_dest"] = dest.asString(); -		LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb); -	} +	LLSD substitutions; +	substitutions["RESIDENTS"] = name; +	substitutions["ITEMS"] = inv_item->getName(); +	LLSD payload; +	payload["agent_id"] = dest_agent; +	payload["item_id"] = inv_item->getUUID(); +	payload["session_id"] = session_id; +	payload["d&d_dest"] = dest.asString(); +	LLNotificationsUtil::add("ShareItemsConfirmation", substitutions, payload, &give_inventory_cb);  }  static void get_name_cb(const LLUUID& id,  						const std::string& full_name, -						LLViewerInventoryItem* inv_item, +						LLInventoryObject* inv_obj,  						const LLSD& dest,  						const LLUUID& dest_agent)  { -	show_item_sharing_confirmation(full_name, -								   inv_item, -								   dest, -								   id, -								   LLUUID::null); +	show_object_sharing_confirmation(full_name, +								     inv_obj, +								     dest, +						  		     id, +								     LLUUID::null);  }  // function used as drag-and-drop handler for simple agent give inventory requests @@ -1662,10 +1667,11 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_  	case DAD_GESTURE:  	case DAD_CALLINGCARD:  	case DAD_MESH: +	case DAD_CATEGORY:  	{ -		LLViewerInventoryItem* inv_item = (LLViewerInventoryItem*)cargo_data; -		if(gInventory.getItem(inv_item->getUUID()) -			&& LLGiveInventory::isInventoryGiveAcceptable(inv_item)) +		LLInventoryObject* inv_obj = (LLInventoryObject*)cargo_data; +		if(gInventory.getCategory(inv_obj->getUUID()) || (gInventory.getItem(inv_obj->getUUID()) +			&& LLGiveInventory::isInventoryGiveAcceptable(dynamic_cast<LLInventoryItem*>(inv_obj))))  		{  			// *TODO: get multiple object transfers working  			*accept = ACCEPT_YES_COPY_SINGLE; @@ -1682,40 +1688,18 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_  					// Otherwise set up a callback to show the dialog when the name arrives.  					if (gCacheName->getFullName(dest_agent, fullname))  					{ -						show_item_sharing_confirmation(fullname, inv_item, dest, dest_agent, LLUUID::null); +						show_object_sharing_confirmation(fullname, inv_obj, dest, dest_agent, LLUUID::null);  					}  					else  					{ -						gCacheName->get(dest_agent, false, boost::bind(&get_name_cb, _1, _2, inv_item, dest, dest_agent)); +						gCacheName->get(dest_agent, false, boost::bind(&get_name_cb, _1, _2, inv_obj, dest, dest_agent));  					}  					return true;  				}  				// If an IM session with destination agent is found item offer will be logged in this session. -				show_item_sharing_confirmation(session->mName, inv_item, dest, dest_agent, session_id); -			} -		} -		else -		{ -			// It's not in the user's inventory (it's probably -			// in an object's contents), so disallow dragging -			// it here.  You can't give something you don't -			// yet have. -			*accept = ACCEPT_NO; -		} -		break; -	} -	case DAD_CATEGORY: -	{ -		LLViewerInventoryCategory* inv_cat = (LLViewerInventoryCategory*)cargo_data; -		if( gInventory.getCategory( inv_cat->getUUID() ) ) -		{ -			// *TODO: get multiple object transfers working -			*accept = ACCEPT_YES_COPY_SINGLE; -			if(drop) -			{ -				LLGiveInventory::doGiveInventoryCategory(dest_agent, inv_cat, session_id); +				show_object_sharing_confirmation(session->mName, inv_obj, dest, dest_agent, session_id);  			}  		}  		else diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 558159775f..6881ec4563 100755 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1672,17 +1672,7 @@ BOOL LLToolPie::handleRightClickPick()  			{  				name = node->mName;  			} -			std::string mute_msg; -			if (LLMuteList::getInstance()->isMuted(object->getID(), name)) -			{ -				mute_msg = LLTrans::getString("UnmuteObject"); -			} -			else -			{ -				mute_msg = LLTrans::getString("MuteObject2"); -			} -			 -			gMenuHolder->getChild<LLUICtrl>("Object Mute")->setValue(mute_msg); +  			gMenuObject->show(x, y);  			showVisualContextMenuEffect(); diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 70d3fc9462..5020518454 100755 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -368,6 +368,7 @@ static bool handleRepartition(const LLSD&)  	if (gPipeline.isInit())  	{  		gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity"); +		gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");  		gObjectList.repartitionObjects();  	}  	return true; diff --git a/indra/newview/llviewerfoldertype.cpp b/indra/newview/llviewerfoldertype.cpp index 2c196ece51..0401de7e69 100644 --- a/indra/newview/llviewerfoldertype.cpp +++ b/indra/newview/llviewerfoldertype.cpp @@ -136,7 +136,7 @@ LLViewerFolderDictionary::LLViewerFolderDictionary()  	addEntry(LLFolderType::FT_MESH, 				new ViewerFolderEntry("Meshes",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true));  	bool boxes_invisible = !gSavedSettings.getBOOL("InventoryOutboxMakeVisible"); -	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Inbox",					"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible)); +	addEntry(LLFolderType::FT_INBOX, 				new ViewerFolderEntry("Received Items",			"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible));  	addEntry(LLFolderType::FT_OUTBOX, 				new ViewerFolderEntry("Merchant Outbox",		"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     boxes_invisible));  	addEntry(LLFolderType::FT_BASIC_ROOT, 			new ViewerFolderEntry("Basic Root",				"Inv_SysOpen",			"Inv_SysClosed",		FALSE,     true)); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b23e23f32e..8c9429c05d 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7815,7 +7815,7 @@ void handle_report_bug(const LLSD& param)  	replace["[ENVIRONMENT]"] = LLURI::escape(LLAppViewer::instance()->getViewerInfoString());  	LLSLURL location_url;  	LLAgentUI::buildSLURL(location_url); -	replace["[LOCATION]"] = location_url.getSLURLString(); +	replace["[LOCATION]"] = LLURI::escape(location_url.getSLURLString());  	LLUIString file_bug_url = gSavedSettings.getString("ReportBugURL");  	file_bug_url.setArgs(replace); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index be24c04dfc..9d5c3c4d4a 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2461,10 +2461,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  					&& from_id.notNull() //not a system message  					&& to_id.notNull()) //not global message  		{ -			// return a standard "do not disturb" message, but only do it to online IM -			// (i.e. not other auto responses and not store-and-forward IM) - -			send_do_not_disturb_message(msg, from_id, session_id);  			// now store incoming IM in chat history @@ -2485,6 +2481,15 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  				region_id,  				position,  				true); + +			if (!gIMMgr->isDNDMessageSend(session_id)) +			{ +				// return a standard "do not disturb" message, but only do it to online IM +				// (i.e. not other auto responses and not store-and-forward IM) +				send_do_not_disturb_message(msg, from_id, session_id); +				gIMMgr->setDNDMessageSent(session_id, true); +			} +  		}  		else if (from_id.isNull())  		{ diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 40d17ead76..673913c4f2 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -2571,40 +2571,69 @@ void LLViewerRegion::unpackRegionHandshake()  	{  		LLUUID tmp_id; +		bool changed = false; + +		// Get the 4 textures for land  		msg->getUUID("RegionInfo", "TerrainDetail0", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(0));		  		compp->setDetailTextureID(0, tmp_id); +  		msg->getUUID("RegionInfo", "TerrainDetail1", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(1));		  		compp->setDetailTextureID(1, tmp_id); +  		msg->getUUID("RegionInfo", "TerrainDetail2", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(2));		  		compp->setDetailTextureID(2, tmp_id); +  		msg->getUUID("RegionInfo", "TerrainDetail3", tmp_id); +		changed |= (tmp_id != compp->getDetailTextureID(3));		  		compp->setDetailTextureID(3, tmp_id); +		// Get the start altitude and range values for land textures  		F32 tmp_f32;  		msg->getF32("RegionInfo", "TerrainStartHeight00", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(0));  		compp->setStartHeight(0, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainStartHeight01", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(1));  		compp->setStartHeight(1, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainStartHeight10", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(2));  		compp->setStartHeight(2, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainStartHeight11", tmp_f32); +		changed |= (tmp_f32 != compp->getStartHeight(3));  		compp->setStartHeight(3, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange00", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(0));  		compp->setHeightRange(0, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange01", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(1));  		compp->setHeightRange(1, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange10", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(2));  		compp->setHeightRange(2, tmp_f32); +  		msg->getF32("RegionInfo", "TerrainHeightRange11", tmp_f32); +		changed |= (tmp_f32 != compp->getHeightRange(3));  		compp->setHeightRange(3, tmp_f32);  		// If this is an UPDATE (params already ready, we need to regenerate  		// all of our terrain stuff, by  		if (compp->getParamsReady())  		{ -			//this line creates frame stalls on region crossing and removing it appears to have no effect -			//getLand().dirtyAllPatches(); +			// Update if the land changed +			if (changed) +			{ +				getLand().dirtyAllPatches(); +			}  		}  		else  		{ diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index d052906bee..4d263c118b 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1075,7 +1075,7 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window,  LLCoordGL pos, MASK  	// *HACK: this should be rolled into the composite tool logic, not  	// hardcoded at the top level. -	if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance()) +	if (CAMERA_MODE_CUSTOMIZE_AVATAR != gAgentCamera.getCameraMode() && LLToolMgr::getInstance()->getCurrentTool() != LLToolPie::getInstance() && gAgent.isInitialized())  	{  		// If the current tool didn't process the click, we should show  		// the pie menu.  This can be done by passing the event to the pie diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 945d3711f0..a83e2e020e 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1287,9 +1287,9 @@ BOOL LLVOVolume::calcLOD()  	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_LOD_INFO) &&  		mDrawable->getFace(0))  	{ -		//setDebugText(llformat("%.2f:%.2f, %d", debug_distance, radius, cur_detail)); +		//setDebugText(llformat("%.2f:%.2f, %d", mDrawable->mDistanceWRTCamera, radius, cur_detail)); -		//setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex())); +		setDebugText(llformat("%d", mDrawable->getFace(0)->getTextureIndex()));  	}  	if (cur_detail != mLOD) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 7d7b32f305..3dfe1e5992 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -492,6 +492,7 @@ void LLPipeline::init()  	refreshCachedSettings();  	gOctreeMaxCapacity = gSavedSettings.getU32("OctreeMaxNodeCapacity"); +	gOctreeMinSize = gSavedSettings.getF32("OctreeMinimumNodeSize");  	sDynamicLOD = gSavedSettings.getBOOL("RenderDynamicLOD");  	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");  	sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips"); diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index ec733c1e8b..46698b3949 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -245,7 +245,7 @@ with the same filename but different name    <texture name="Icon_Dock_Foreground" file_name="windows/Icon_Dock_Foreground.png" preload="true" />    <texture name="Icon_Dock_Press" file_name="windows/Icon_Dock_Press.png" preload="true" /> -  <texture name="Icon_For_Sale" file_name="icons/Icon_For_sale.png" preload="false" /> +  <texture name="Icon_For_Sale" file_name="icons/Icon_For_Sale.png" preload="false" />    <texture name="Icon_Gear_Background" file_name="windows/Icon_Gear_Background.png" preload="false" />    <texture name="Icon_Gear_Foreground" file_name="windows/Icon_Gear_Foreground.png" preload="false" /> @@ -346,8 +346,8 @@ with the same filename but different name    <texture name="ModelImport_Status_Warning" file_name="lag_status_warning.tga" preload="false"/>    <texture name="ModelImport_Status_Error" file_name="red_x.png" preload="false"/> -  <texture name="MouseLook_View_Off" file_name="bottomtray/MouseLook_view_off.png" preload="false" /> -  <texture name="MouseLook_View_On" file_name="bottomtray/MouseLook_view_on.png" preload="false" /> +  <texture name="MouseLook_View_Off" file_name="bottomtray/Mouselook_View_Off.png" preload="false" /> +  <texture name="MouseLook_View_On" file_name="bottomtray/Mouselook_View_On.png" preload="false" />    <texture name="Move_Fly_Off" file_name="bottomtray/Move_Fly_Off.png" preload="false" />    <texture name="Move_Run_Off" file_name="bottomtray/Move_Run_Off.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml index 0df330b016..6d48180707 100755 --- a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Lokationer, billeder, web, søge historik)  	</text> -	<check_box label="Vis dig selv i søgeresultater" name="online_searchresults"/> +	<check_box label="Vis min profil info i søgeresultater" name="online_searchresults"/>  	<check_box label="Kun venner og grupper ved jeg er online" name="online_visibility"/>  	<check_box label="Kun venner og grupper kan sende besked til mig" name="voice_call_friends_only_check"/>  	<check_box label="Slå mikrofon fra når opkald slutter" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml index e21bed6bb5..afde50b981 100755 --- a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Standorte, Bilder, Web, Suchverlauf)  	</text> -	<check_box label="In Suchergebnissen anzeigen" name="online_searchresults"/> +	<check_box label="Zeigen Sie mein Profil Informationen in Suchergebnisse" name="online_searchresults"/>  	<check_box label="Nur Freunde und Gruppen wissen, dass ich online bin" name="online_visibility"/>  	<check_box label="Nur Freunde und Gruppen können mich anrufen oder mir eine IM schicken" name="voice_call_friends_only_check"/>  	<check_box label="Mikrofon ausschalten, wenn Anrufe beendet werden" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml index 9561f67941..c50c8c02fe 100755 --- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml +++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml @@ -203,47 +203,15 @@          <combo_box.item           label="Age > Age play"           name="Age__Age_play" -         value="31" /> +         value="31" />                 <combo_box.item -         label="Age > Adult Resident on Teen Second Life" -         name="Age__Adult_resident_on_Teen_Second_Life" -         value="32" /> -        <combo_box.item -         label="Age > Underage Resident outside of Teen Second Life" -         name="Age__Underage_resident_outside_of_Teen_Second_Life" -         value="33" /> -        <combo_box.item -         label="Assault > Combat sandbox / unsafe area" -         name="Assault__Combat_sandbox___unsafe_area" -         value="34" /> -        <combo_box.item -         label="Assault > Safe area" +         label="Assault > Shooting, pushing, or shoving another Resident in a Safe Area"           name="Assault__Safe_area" -         value="35" /> -        <combo_box.item -         label="Assault > Weapons testing sandbox" -         name="Assault__Weapons_testing_sandbox" -         value="36" /> -        <combo_box.item -         label="Commerce > Failure to deliver product or service" -         name="Commerce__Failure_to_deliver_product_or_service" -         value="38" /> +         value="35" />                  <combo_box.item           label="Disclosure > Real world information"           name="Disclosure__Real_world_information" -         value="39" /> -        <combo_box.item -         label="Disclosure > Remotely monitoring chat" -         name="Disclosure__Remotely_monitoring chat" -         value="40" /> -        <combo_box.item -         label="Disclosure > Second Life information/chat/IMs" -         name="Disclosure__Second_Life_information_chat_IMs" -         value="41" /> -        <combo_box.item -         label="Disturbing the peace > Unfair use of region resources" -         name="Disturbing_the_peace__Unfair_use_of_region_resources" -         value="42" /> +         value="39" />               <combo_box.item           label="Disturbing the peace > Excessive scripted objects"           name="Disturbing_the_peace__Excessive_scripted_objects" @@ -255,51 +223,15 @@          <combo_box.item           label="Disturbing the peace > Repetitive spam"           name="Disturbing_the_peace__Repetitive_spam" -         value="45" /> -        <combo_box.item -         label="Disturbing the peace > Unwanted advert spam" -         name="Disturbing_the_peace__Unwanted_advert_spam" -         value="46" /> -        <combo_box.item -         label="Fraud > L$" -         name="Fraud__L$" -         value="47" /> -        <combo_box.item -         label="Fraud > Land" -         name="Fraud__Land" -         value="48" /> -        <combo_box.item -         label="Fraud > Pyramid scheme or chain letter" -         name="Fraud__Pyramid_scheme_or_chain_letter" -         value="49" /> +         value="45" />                  <combo_box.item -         label="Fraud > US$" +         label="Fraud > L$ or USD $"           name="Fraud__US$" -         value="50" /> +         value="50" />                 <combo_box.item -         label="Harassment > Advert farms / visual spam" -         name="Harassment__Advert_farms___visual_spam" -         value="51" /> -        <combo_box.item -         label="Harassment > Defaming individuals or groups" -         name="Harassment__Defaming_individuals_or_groups" -         value="52" /> -        <combo_box.item -         label="Harassment > Impeding movement" -         name="Harassment__Impeding_movement" -         value="53" /> -        <combo_box.item -         label="Harassment > Sexual harassment" -         name="Harassment__Sexual_harassment" -         value="54" /> -        <combo_box.item -         label="Harassment > Solicting/inciting others to violate ToS" +         label="Harassment > Targeted behavior intended to disrupt"           name="Harassment__Solicting_inciting_others_to_violate_ToS" -         value="55" /> -        <combo_box.item -         label="Harassment > Verbal abuse" -         name="Harassment__Verbal_abuse" -         value="56" /> +         value="55" />                 <combo_box.item           label="Indecency > Broadly offensive content or conduct"           name="Indecency__Broadly_offensive_content_or_conduct" @@ -309,49 +241,21 @@           name="Indecency__Inappropriate_avatar_name"           value="59" />          <combo_box.item -         label="Indecency > Inappropriate content or conduct in a PG region" +         label="Indecency > Inappropriate content or conduct for Region Rating"           name="Indecency__Mature_content_in_PG_region" -         value="60" /> -        <combo_box.item -         label="Indecency > Inappropriate content or conduct in a Moderate region" -         name="Indecency__Inappropriate_content_in_Mature_region" -         value="69" /> -        <combo_box.item -         label="Intellectual property infringement > Content Removal" -         name="Intellectual_property_infringement_Content_Removal" -         value="66" /> -        <combo_box.item -         label="Intellectual property infringement > CopyBot or Permissions Exploit" -         name="Intellectual_property_infringement_CopyBot_or_Permissions_Exploit" -         value="37" /> +         value="60" />                 <combo_box.item           label="Intolerance"           name="Intolerance" -         value="61" /> -        <combo_box.item -         label="Land > Abuse of sandbox resources" -         name="Land__Abuse_of_sandbox_resources" -         value="62" /> +         value="61" />                  <combo_box.item -         label="Land > Encroachment > Objects/textures" +         label="Land > Encroachment > Objects or textures"           name="Land__Encroachment__Objects_textures" -         value="63" /> +         value="63" />                  <combo_box.item -         label="Land > Encroachment > Particles" -         name="Land__Encroachment__Particles" -         value="64" /> -        <combo_box.item -         label="Land > Encroachment > Trees/plants" -         name="Land__Encroachment__Trees_plants" -         value="65" /> -        <combo_box.item -         label="Wagering/gambling" +         label="Wagering or Gambling"           name="Wagering_gambling" -         value="67" /> -        <combo_box.item -         label="Other" -         name="Other" -         value="68" /> +         value="67" />             </combo_box>      <text       type="string" diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml index 8b9733df17..3c28233875 100755 --- a/indra/newview/skins/default/xui/en/floater_tools.xml +++ b/indra/newview/skins/default/xui/en/floater_tools.xml @@ -150,7 +150,7 @@  	     parameter="Land" />  	</button>      <text -     height="30" +     height="20"       word_wrap="true"       use_ellipses="true"       type="string" @@ -294,24 +294,14 @@      <check_box       control_name="ScaleUniform"       height="19" -     label="" +     label="Stretch Both Sides"       layout="topleft"       left="143"       name="checkbox uniform"       top="48" -     width="20" /> -    <text -     height="19" -     label="Stretch Both Sides" -     left_delta="20" -     name="checkbox uniform label" -     top_delta="2" -     width="120" -     layout="topleft" -     follows="top|left" -     wrap="true"> -     	Stretch Both Sides -    </text> +     label_text.wrap="true" +     label_text.width="100" +     width="134" />      <check_box       control_name="ScaleStretchTextures"       height="19" diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index 52ab7da515..5c98a98d3d 100755 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -130,17 +130,24 @@            function="Object.ReportAbuse" />        <menu_item_call.on_enable            function="Object.EnableReportAbuse" /> -    </menu_item_call> +    </menu_item_call>         <menu_item_call -        enabled="false" -        label="Block" -        name="Object Mute"> -      <menu_item_call.on_click +   		  label="Block"         +          name="Object Mute"> +        <menu_item_call.on_click            function="Object.Mute" /> -      <menu_item_call.on_enable +        <menu_item_call.on_visible            function="Object.EnableMute" />      </menu_item_call>      <menu_item_call +          label="Unblock"    +          name="Object Unmute"> +        <menu_item_call.on_click +          function="Object.Mute" /> +        <menu_item_call.on_visible +          function="Object.EnableUnmute" /> +    </menu_item_call> +    <menu_item_call          enabled="false"          label="Return"          name="Return..."> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index 308acf0c0c..30239d6d01 100755 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -220,7 +220,7 @@              <layout_stack               border_size="0"               clip="false" -             follows="left|top|right" +             follows="left|top"               height="50"               layout="topleft"               mouse_opaque="false" @@ -251,10 +251,10 @@                  </layout_panel>                  <layout_panel                   follows="left|right" -                 height="60" +                 height="50"                   layout="topleft"                   min_height="50" -                 min_width="60" +                 min_width="50"                   mouse_opaque="false"                   name="for_sale_panel"                   top="0" @@ -264,7 +264,7 @@                       height="50"                       image_name="ForSale_Badge"                       layout="topleft" -                     left="10" +                     left="0"                       name="icon_for_sale"                       top="0"                       width="50" /> @@ -762,11 +762,19 @@                           top_pad="5"                           value="Rating:"                           width="80" /> +                        <icon +                         follows="top|left" +                         height="16" +                         image_name="Parcel_PG_Dark" +                         layout="topleft" +                         left_pad="0" +                         name="estate_rating_icon" +                         width="18" />                          <text                           follows="left|top|right"                           height="15"                           layout="topleft" -                         left_pad="0" +                         left_pad="10"                           name="estate_rating"                           top_delta="0"                           width="187" /> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index 78743d26bb..d7ffb73dda 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -47,7 +47,7 @@    <check_box        height="16"        enabled="false" -      label="Show me in Search results" +      label="Show my profile info in Search results"        layout="topleft"        left="30"        name="online_searchresults" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml index c5b0be0616..26cac06648 100755 --- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml @@ -47,7 +47,20 @@       text_color="White"       top="4"       value="..." -     width="330" /> +     width="290" /> +    <text +     follows="right" +     height="20" +     layout="topleft" +     left_pad="5" +     right="-20" +     parse_urls="false" +     use_ellipses="true" +     name="timestamp" +     text_color="White" +     top="4" +     value="..." +     width="45" />      <button       follows="right"       height="20" diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml index c162130af6..fe312e3587 100755 --- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Localizaciones, imágenes, web, historial de búsqueda)  	</text> -	<check_box label="Mostrarme en los resultados de la búsqueda" name="online_searchresults"/> +	<check_box label="Mostrarme información de perfil en los resultados de la búsqueda" name="online_searchresults"/>  	<check_box label="Sólo saben si estoy conectado mis amigos y grupos" name="online_visibility"/>  	<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>  	<check_box label="Desconectar el micrófono cuando finalicen las llamadas" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml index cf1a374da6..a89676d119 100755 --- a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml @@ -7,13 +7,13 @@  	<text name="cache_size_label_l">  		(endroits, images, web, historique des recherches)  	</text> -	<check_box label="M'afficher dans les résultats de recherche" name="online_searchresults"/> +	<check_box label="Afficher mon profil d'infos dans les résultats de recherche" name="online_searchresults"/>  	<check_box label="Seuls mes amis et groupes voient quand je suis en ligne" name="online_visibility"/>  	<check_box label="Seuls mes amis et groupes peuvent m'appeler ou m'envoyer un IM" name="voice_call_friends_only_check"/>  	<check_box label="Fermer le micro à la fin d'un appel" name="auto_disengage_mic_check"/>  	<check_box label="Afficher mes repères favoris à la connexion (liste déroulante Lieu de départ)" name="favorites_on_login_check"/>  	<text name="Logs:"> -		Journaux de chat : +		Journaux de chat :  	</text>  	<check_box label="Sauvegarder les chats près de moi sur mon ordinateur" name="log_nearby_chat"/>  	<check_box label="Sauvegarder les IM sur mon ordinateur" name="log_instant_messages"/> diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml index 41e7a59139..241ed8f162 100755 --- a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Luoghi, immagini, web, cronologia ricerche)  	</text> -	<check_box label="Mostrami nei risultati della ricerca" name="online_searchresults"/> +	<check_box label="Mostra il mio profilo info nei risultati di ricerca" name="online_searchresults"/>  	<check_box label="Solo amici e gruppi mi vedono online" name="online_visibility"/>  	<check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/>  	<check_box label="Spegnere il microfono alla chiusura delle chiamate" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml index 420bbed572..3787f390e4 100755 --- a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(位置、画像、web、検索履歴)  	</text> -	<check_box label="検索結果に表示" name="online_searchresults"/> +	<check_box label="検索結果に自分のプロフィール情報を表示する" name="online_searchresults"/>  	<check_box label="私のオンライン状態を確認できるのは、フレンドとグループだけ" name="online_visibility"/>  	<check_box label="フレンドとグループ以外からはコールと IM を受信しない" name="voice_call_friends_only_check"/>  	<check_box label="コールが終了したら自動的にマイクのスイッチを切る" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml index 5af2fed142..30b64bc977 100755 --- a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Miejsca, obrazy, przeglądarka internetowa, wyszukiwarka historii)  	</text> -	<check_box label="Pokaż mój profil w wynikach wyszukiwarki" name="online_searchresults"/> +	<check_box label="Pokaż mój informacje profilu w wynikach wyszukiwania" name="online_searchresults"/>  	<check_box label="Mój status online jest dostępny tylko dla znajomych i grup do których należę" name="online_visibility"/>  	<check_box label="Możliwość wysyłania wiadomości prywatnej (IM) oraz rozmowy głosowej tylko dla 
znajomych i grup do których należę" name="voice_call_friends_only_check" top_pad="15"/>  	<check_box label="Wyłącz mikrofon po zakończeniu rozmowy głosowej" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml index d7fb585e35..8ca05c948a 100755 --- a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Locações, imagens, web, histórico de busca)  	</text> -	<check_box label="Mostrar nos resultados de busca" name="online_searchresults"/> +	<check_box label="Mostrar meu perfil info em resultados de busca" name="online_searchresults"/>  	<check_box label="Apenas amigos e grupos sabem que estou online" name="online_visibility"/>  	<check_box label="Apenas amigos e grupos podem me chamar ou enviar MI" name="voice_call_friends_only_check"/>  	<check_box label="Desligar o microfone quando terminar chamadas" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml index 20bb839eed..ed6bed439c 100755 --- a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Места, картинки, страницы, журнал поиска)  	</text> -	<check_box label="Показывать меня в результатах поиска" name="online_searchresults"/> +	<check_box label="Показывать информацию моего профиля в результатах поиска" name="online_searchresults"/>  	<check_box label="Только друзья и группы видят, когда я на связи" name="online_visibility"/>  	<check_box label="Только друзья и группы могут звонить мне и отправлять IM" name="voice_call_friends_only_check"/>  	<check_box label="Отключать микрофон по окончании разговора" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml index 9111594979..285670a6ac 100755 --- a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(Konumlar, görüntüler, web, arama geçmişi)  	</text> -	<check_box label="Arama sonuçlarında beni göster" name="online_searchresults"/> +	<check_box label="Arama sonuçlarında profil bilgilerini göster" name="online_searchresults"/>  	<check_box label="Çevrimiçi olduğumu sadece arkadaşlar ve gruplar bilsin" name="online_visibility"/>  	<check_box label="Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin" name="voice_call_friends_only_check"/>  	<check_box label="Aramaları sonlandırırken mikrofonu kapat" name="auto_disengage_mic_check"/> diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml index 07fdfd87e3..d768cacb94 100755 --- a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml @@ -7,7 +7,7 @@  	<text name="cache_size_label_l">  		(位置、圖像、網頁、搜尋的歷史紀錄)  	</text> -	<check_box label="將我顯示在搜尋的結果中" name="online_searchresults"/> +	<check_box label="顯示在搜索結果我的個人資料信息" name="online_searchresults"/>  	<check_box label="只有我的朋友和群組知道我上線" name="online_visibility"/>  	<check_box label="只有我的朋友和群組可以 IM 或與我通話。" name="voice_call_friends_only_check"/>  	<check_box label="當通話結束時關閉麥克風" name="auto_disengage_mic_check"/> | 
