diff options
54 files changed, 334 insertions, 136 deletions
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index b159092592..1f578eec5f 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -119,14 +119,14 @@ if (LINUX)    endif (${GXX_VERSION} STREQUAL ${CXX_VERSION})    # Let's actually get a numerical version of gxx's version -  STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION ${CXX_VERSION}) +  STRING(REGEX REPLACE ".* ([0-9])\\.([0-9])\\.([0-9]).*" "\\1\\2\\3" CXX_VERSION_NUMBER ${CXX_VERSION}) -  # gcc 4.3 and above don't like the LL boost and also  +  # gcc 4.3 and above don't like the LL boost and also    # cause warnings due to our use of deprecated headers -  if(${CXX_VERSION} GREATER 429) +  if(${CXX_VERSION_NUMBER} GREATER 429)      add_definitions(-Wno-parentheses)      set(CMAKE_CXX_FLAGS "-Wno-deprecated ${CMAKE_CXX_FLAGS}") -  endif (${CXX_VERSION} GREATER 429) +  endif (${CXX_VERSION_NUMBER} GREATER 429)    # End of hacks. diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt index 9e9e1aaeae..bfa2c34c12 100644 --- a/indra/llaudio/CMakeLists.txt +++ b/indra/llaudio/CMakeLists.txt @@ -31,7 +31,6 @@ set(llaudio_SOURCE_FILES      llaudioengine.cpp      lllistener.cpp      llaudiodecodemgr.cpp -    llvorbisdecode.cpp      llvorbisencode.cpp      ) @@ -41,7 +40,6 @@ set(llaudio_HEADER_FILES      llaudioengine.h      lllistener.h      llaudiodecodemgr.h -    llvorbisdecode.h      llvorbisencode.h      llwindgen.h      ) @@ -60,11 +58,11 @@ if (FMOD)           )      if (LINUX) -      if (${CXX_VERSION} MATCHES "4.[23]") +      if (${CXX_VERSION_NUMBER} GREATER 419)          set_source_files_properties(llaudioengine_fmod.cpp                                      llstreamingaudio_fmod.cpp                                      COMPILE_FLAGS -Wno-write-strings) -      endif (${CXX_VERSION} MATCHES "4.[23]") +      endif (${CXX_VERSION_NUMBER} GREATER 419)      endif (LINUX)  endif (FMOD) diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index ae959eaa81..6bbaad9cef 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -33,7 +33,6 @@  #include "llaudiodecodemgr.h" -#include "llvorbisdecode.h"  #include "llaudioengine.h"  #include "lllfsthread.h"  #include "llvfile.h" diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index c3d8a5aa23..70d770ef7e 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -2,6 +2,7 @@   * @file llpluginclassmedia.cpp   * @brief LLPluginClassMedia handles a plugin which knows about the "media" message class.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index dcc4a3bd6a..6b64688718 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -2,6 +2,7 @@   * @file llpluginclassmedia.h   * @brief LLPluginClassMedia handles interaction with a plugin which knows about the "media" message class.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINCLASSMEDIA_H diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h index c798af29ca..6d369cd51a 100644 --- a/indra/llplugin/llpluginclassmediaowner.h +++ b/indra/llplugin/llpluginclassmediaowner.h @@ -2,6 +2,7 @@   * @file llpluginclassmediaowner.h   * @brief LLPluginClassMedia handles interaction with a plugin which knows about the "media" message class.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINCLASSMEDIAOWNER_H diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp index 58fb792d0d..16ba492669 100644 --- a/indra/llplugin/llplugininstance.cpp +++ b/indra/llplugin/llplugininstance.cpp @@ -2,6 +2,7 @@   * @file llplugininstance.cpp   * @brief LLPluginInstance handles loading the dynamic library of a plugin and setting up its entry points for message passing.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/llplugin/llplugininstance.h b/indra/llplugin/llplugininstance.h index ba569df10c..02936f65fb 100644 --- a/indra/llplugin/llplugininstance.h +++ b/indra/llplugin/llplugininstance.h @@ -2,6 +2,7 @@   * @file llplugininstance.h   * @brief LLPluginInstance handles loading the dynamic library of a plugin and setting up its entry points for message passing.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGININSTANCE_H diff --git a/indra/llplugin/llpluginmessage.cpp b/indra/llplugin/llpluginmessage.cpp index 32601b47db..34e02c356e 100644 --- a/indra/llplugin/llpluginmessage.cpp +++ b/indra/llplugin/llpluginmessage.cpp @@ -2,6 +2,7 @@   * @file llpluginmessage.cpp   * @brief LLPluginMessage encapsulates the serialization/deserialization of messages passed to and from plugins.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/llplugin/llpluginmessage.h b/indra/llplugin/llpluginmessage.h index 5e93d8b7a1..99f8d1194f 100644 --- a/indra/llplugin/llpluginmessage.h +++ b/indra/llplugin/llpluginmessage.h @@ -2,6 +2,7 @@   * @file llpluginmessage.h   * @brief LLPluginMessage encapsulates the serialization/deserialization of messages passed to and from plugins.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINMESSAGE_H diff --git a/indra/llplugin/llpluginmessageclasses.h b/indra/llplugin/llpluginmessageclasses.h index 927fcf2eb2..01fddb92c5 100644 --- a/indra/llplugin/llpluginmessageclasses.h +++ b/indra/llplugin/llpluginmessageclasses.h @@ -2,6 +2,7 @@   * @file llpluginmessageclasses.h   * @brief This file defines the versions of existing message classes for LLPluginMessage.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINMESSAGECLASSES_H diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp index 31ea138912..cc193fca42 100644 --- a/indra/llplugin/llpluginmessagepipe.cpp +++ b/indra/llplugin/llpluginmessagepipe.cpp @@ -2,6 +2,7 @@   * @file llpluginmessagepipe.cpp   * @brief Classes that implement connections from the plugin system to pipes/pumps.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/llplugin/llpluginmessagepipe.h b/indra/llplugin/llpluginmessagepipe.h index 4eb6575bd4..1ddb38de68 100644 --- a/indra/llplugin/llpluginmessagepipe.h +++ b/indra/llplugin/llpluginmessagepipe.h @@ -2,6 +2,7 @@   * @file llpluginmessagepipe.h   * @brief Classes that implement connections from the plugin system to pipes/pumps.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINMESSAGEPIPE_H diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp index fc95136d9e..55cf11c620 100644 --- a/indra/llplugin/llpluginprocesschild.cpp +++ b/indra/llplugin/llpluginprocesschild.cpp @@ -2,6 +2,7 @@   * @file llpluginprocesschild.cpp   * @brief LLPluginProcessChild handles the child side of the external-process plugin API.    * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/llplugin/llpluginprocesschild.h b/indra/llplugin/llpluginprocesschild.h index 75860bdf0a..f5c57c3d49 100644 --- a/indra/llplugin/llpluginprocesschild.h +++ b/indra/llplugin/llpluginprocesschild.h @@ -2,6 +2,7 @@   * @file llpluginprocesschild.h   * @brief LLPluginProcessChild handles the child side of the external-process plugin API.    * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINPROCESSCHILD_H diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index b7ce800c3a..332ce288d7 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -2,6 +2,7 @@   * @file llpluginprocessparent.cpp   * @brief LLPluginProcessParent handles the parent side of the external-process plugin API.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h index 1289e86c13..25669f5d78 100644 --- a/indra/llplugin/llpluginprocessparent.h +++ b/indra/llplugin/llpluginprocessparent.h @@ -2,6 +2,7 @@   * @file llpluginprocessparent.h   * @brief LLPluginProcessParent handles the parent side of the external-process plugin API.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINPROCESSPARENT_H diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp index ce8b8e3e09..3c69a69d28 100644 --- a/indra/llplugin/llpluginsharedmemory.cpp +++ b/indra/llplugin/llpluginsharedmemory.cpp @@ -2,6 +2,7 @@   * @file llpluginsharedmemory.cpp   * @brief LLPluginSharedMemory manages a shared memory segment for use by the LLPlugin API.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/llplugin/llpluginsharedmemory.h b/indra/llplugin/llpluginsharedmemory.h index a4613b9a54..4014620c52 100644 --- a/indra/llplugin/llpluginsharedmemory.h +++ b/indra/llplugin/llpluginsharedmemory.h @@ -2,6 +2,7 @@   * @file llpluginsharedmemory.h   * @brief LLPluginSharedMemory manages a shared memory segment for use by the LLPlugin API.   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef LL_LLPLUGINSHAREDMEMORY_H diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp index 005e427572..23dc532ba5 100644 --- a/indra/llplugin/slplugin/slplugin.cpp +++ b/indra/llplugin/slplugin/slplugin.cpp @@ -1,11 +1,13 @@ -/**  +/**   * @file slplugin.cpp   * @brief Loader shell for plugins, intended to be launched by the plugin host application, which directly loads a plugin dynamic library.   * + * @cond + *   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. - *  + *   * Second Life Viewer Source Code   * The source code in this file ("Source Code") is provided by Linden Lab   * to you under the terms of the GNU General Public License, version 2.0 @@ -13,20 +15,22 @@   * ("Other License"), formally executed by you and Linden Lab.  Terms of   * the GPL can be found in doc/GPL-license.txt in this distribution, or   * online at http://secondlife.com/developers/opensource/gplv2 - *  + *   * There are special exceptions to the terms and conditions of the GPL as   * it is applied to this Source Code. View the full text of the exception   * in the file doc/FLOSS-exception.txt in this software distribution, or   * online at http://secondlife.com/developers/opensource/flossexception - *  + *   * By copying, modifying or distributing this software, you acknowledge   * that you have read and understood your obligations described above,   * and agree to abide by those obligations. - *  + *   * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * + * @endcond   */ @@ -48,15 +52,15 @@  /*  	On Mac OS, since we call WaitNextEvent, this process will show up in the dock unless we set the LSBackgroundOnly flag in the Info.plist. -	 +  	Normally non-bundled binaries don't have an info.plist file, but it's possible to embed one in the binary by adding this to the linker flags: -	 +  	-sectcreate __TEXT __info_plist /path/to/slplugin_info.plist -	 +  	which means adding this to the gcc flags: -	 +  	-Wl,-sectcreate,__TEXT,__info_plist,/path/to/slplugin_info.plist -	 +  */  #if LL_DARWIN || LL_LINUX @@ -67,7 +71,7 @@ static void crash_handler(int sig)  	// TODO: add our own crash reporting  	_exit(1);  } -#endif	 +#endif  #if LL_WINDOWS  #include <windows.h> @@ -80,7 +84,48 @@ LONG WINAPI myWin32ExceptionHandler( struct _EXCEPTION_POINTERS* exception_infop  	//std::cerr << "intercepted an unhandled exception and will exit immediately." << std::endl;  	// TODO: replace exception handler before we exit? -	return EXCEPTION_EXECUTE_HANDLER;	 +	return EXCEPTION_EXECUTE_HANDLER; +} + +// Taken from : http://blog.kalmbachnet.de/?postid=75 +// The MSVC 2005 CRT forces the call of the default-debugger (normally Dr.Watson) +// even with the other exception handling code. This (terrifying) piece of code +// patches things so that doesn't happen. +LPTOP_LEVEL_EXCEPTION_FILTER WINAPI MyDummySetUnhandledExceptionFilter( +	LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter ) +{ +	return NULL; +} + +BOOL PreventSetUnhandledExceptionFilter() +{ +// WARNING: This won't work on 64-bit Windows systems so we turn it off it. +//          It should work for any flavor of 32-bit Windows we care about. +//          If it's off, sometimes you will see an OS message when a plugin crashes +#ifndef _WIN64 +	HMODULE hKernel32 = LoadLibraryA( "kernel32.dll" ); +	if ( NULL == hKernel32 ) +		return FALSE; + +	void *pOrgEntry = GetProcAddress( hKernel32, "SetUnhandledExceptionFilter" ); +	if( NULL == pOrgEntry ) +		return FALSE; + +	unsigned char newJump[ 100 ]; +	DWORD dwOrgEntryAddr = (DWORD)pOrgEntry; +	dwOrgEntryAddr += 5; // add 5 for 5 op-codes for jmp far +	void *pNewFunc = &MyDummySetUnhandledExceptionFilter; +	DWORD dwNewEntryAddr = (DWORD) pNewFunc; +	DWORD dwRelativeAddr = dwNewEntryAddr - dwOrgEntryAddr; + +	newJump[ 0 ] = 0xE9;  // JMP absolute +	memcpy( &newJump[ 1 ], &dwRelativeAddr, sizeof( pNewFunc ) ); +	SIZE_T bytesWritten; +	BOOL bRet = WriteProcessMemory( GetCurrentProcess(), pOrgEntry, newJump, sizeof( pNewFunc ) + 1, &bytesWritten ); +	return bRet; +#else +	return FALSE; +#endif  }  //////////////////////////////////////////////////////////////////////////////// @@ -91,6 +136,7 @@ void initExceptionHandler()  	// save old exception handler in case we need to restore it at the end  	prev_filter = SetUnhandledExceptionFilter( myWin32ExceptionHandler ); +	PreventSetUnhandledExceptionFilter();  }  bool checkExceptionHandler() @@ -99,6 +145,8 @@ bool checkExceptionHandler()  	LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;  	prev_filter = SetUnhandledExceptionFilter(myWin32ExceptionHandler); +	PreventSetUnhandledExceptionFilter(); +  	if (prev_filter != myWin32ExceptionHandler)  	{  		LL_WARNS("AppInit") << "Our exception handler (" << (void *)myWin32ExceptionHandler << ") replaced with " << prev_filter << "!" << LL_ENDL; @@ -122,7 +170,7 @@ bool checkExceptionHandler()  }  #endif -// If this application on Windows platform is a console application, a console is always  +// If this application on Windows platform is a console application, a console is always  // created which is bad. Making it a Windows "application" via CMake settings but not  // adding any code to explicitly create windows does the right thing.  #if LL_WINDOWS @@ -133,7 +181,7 @@ int main(int argc, char **argv)  {  	ll_init_apr(); -	// Set up llerror logging  +	// Set up llerror logging  	{  		LLError::initForApplication(".");  		LLError::setDefaultLevel(LLError::LEVEL_INFO); @@ -146,14 +194,14 @@ int main(int argc, char **argv)  	{  		LL_ERRS("slplugin") << "usage: " << "SLPlugin" << " launcher_port" << LL_ENDL;  	}; -	 +  	U32 port = 0;  	if(!LLStringUtil::convertToU32(lpCmdLine, port))  	{  		LL_ERRS("slplugin") << "port number must be numeric" << LL_ENDL;  	}; -	// Insert our exception handler into the system so this plugin doesn't  +	// Insert our exception handler into the system so this plugin doesn't  	// display a crash message if something bad happens. The host app will  	// see the missing heartbeat and log appropriately.  	initExceptionHandler(); @@ -162,7 +210,7 @@ int main(int argc, char **argv)  	{  		LL_ERRS("slplugin") << "usage: " << argv[0] << " launcher_port" << LL_ENDL;  	} -	 +  	U32 port = 0;  	if(!LLStringUtil::convertToU32(argv[1], port))  	{ @@ -183,17 +231,17 @@ int main(int argc, char **argv)  	LLPluginProcessChild *plugin = new LLPluginProcessChild();  	plugin->init(port); -	 +  	LLTimer timer;  	timer.start();  #if LL_WINDOWS  	checkExceptionHandler();  #endif -		 +  	while(!plugin->isDone())  	{ -		timer.reset();	 +		timer.reset();  		plugin->idle();  #if LL_DARWIN  		{ @@ -204,7 +252,7 @@ int main(int argc, char **argv)  #endif  		F64 elapsed = timer.getElapsedTimeF64();  		F64 remaining = plugin->getSleepTime() - elapsed; -		 +  		if(remaining <= 0.0f)  		{  			// We've already used our full allotment. @@ -217,26 +265,26 @@ int main(int argc, char **argv)  		{  //			LL_INFOS("slplugin") << "elapsed = " << elapsed * 1000.0f << " ms, remaining = " << remaining * 1000.0f << " ms, sleeping for " << remaining * 1000.0f << " ms" << LL_ENDL; -//			timer.reset();	 -			 +//			timer.reset(); +  			// This also services the network as needed.  			plugin->sleep(remaining); -			 +  //			LL_INFOS("slplugin") << "slept for "<< timer.getElapsedTimeF64() * 1000.0f << " ms" <<  LL_ENDL;  		}  #if LL_WINDOWS  	// More agressive checking of interfering exception handlers. -	// Doesn't appear to be required so far - even for plugins  -	// that do crash with a single call to the intercept  +	// Doesn't appear to be required so far - even for plugins +	// that do crash with a single call to the intercept  	// exception handler such as QuickTime.  	//checkExceptionHandler();  #endif  	}  	delete plugin; -	 -	ll_cleanup_apr();	 + +	ll_cleanup_apr();  	return 0;  } diff --git a/indra/llui/llprogressbar.cpp b/indra/llui/llprogressbar.cpp index c8b6e814e1..62ca569e6c 100644 --- a/indra/llui/llprogressbar.cpp +++ b/indra/llui/llprogressbar.cpp @@ -72,12 +72,13 @@ LLProgressBar::~LLProgressBar()  void LLProgressBar::draw()  {  	static LLTimer timer; - -	LLUIImagePtr bar_fg_imagep = LLUI::getUIImage("progressbar_fill.tga"); +	F32 alpha = getDrawContext().mAlpha; -	mImageBar->draw(getLocalRect(), mColorBackground.get()); +	LLColor4 image_bar_color = mColorBackground.get(); +	image_bar_color.setAlpha(alpha); +	mImageBar->draw(getLocalRect(), image_bar_color); -	F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32())); +	alpha *= 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));  	LLColor4 bar_color = mColorBar.get();  	bar_color.mV[VALPHA] *= alpha; // modulate alpha  	LLRect progress_rect = getLocalRect(); diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 959313a5b6..d7228c78bd 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -228,7 +228,7 @@ LLToolTip::LLToolTip(const LLToolTip::Params& p)  	{  		LLButton::Params p_button;  		p_button.name(std::string("play_media")); -		p_button.label(""); // provid label but set to empty so name does not overwrite it -angela +		p_button.label(""); // provide label but set to empty so name does not overwrite it -angela  		TOOLTIP_PLAYBUTTON_SIZE = 16;  		LLRect button_rect;  		button_rect.setOriginAndSize((mPadding +TOOLTIP_ICON_SIZE+ mPadding ), mPadding, TOOLTIP_ICON_SIZE, TOOLTIP_ICON_SIZE); diff --git a/indra/media_plugins/base/media_plugin_base.cpp b/indra/media_plugins/base/media_plugin_base.cpp index 6acac07423..8c8fa24a65 100644 --- a/indra/media_plugins/base/media_plugin_base.cpp +++ b/indra/media_plugins/base/media_plugin_base.cpp @@ -2,6 +2,7 @@   * @file media_plugin_base.cpp   * @brief Media plugin base class for LLMedia API plugin system   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/media_plugins/base/media_plugin_base.h b/indra/media_plugins/base/media_plugin_base.h index f1e96335f9..4dd157a07c 100644 --- a/indra/media_plugins/base/media_plugin_base.h +++ b/indra/media_plugins/base/media_plugin_base.h @@ -2,6 +2,7 @@   * @file media_plugin_base.h   * @brief Media plugin base class for LLMedia API plugin system   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp index 99e0199a29..f5b077fea0 100644 --- a/indra/media_plugins/example/media_plugin_example.cpp +++ b/indra/media_plugins/example/media_plugin_example.cpp @@ -2,6 +2,7 @@   * @file media_plugin_example.cpp   * @brief Example plugin for LLMedia API plugin system   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2009, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h index ef41736c18..48accd3e66 100644 --- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h +++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h @@ -3,6 +3,7 @@   * @author Tofu Linden   * @brief implementation that supports media playback via GStreamer.   * + * @cond   * $LicenseInfo:firstyear=2007&license=viewergpl$   *    * Copyright (c) 2007-2009, Linden Research, Inc. @@ -29,6 +30,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  // header guard diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp index cc52232496..52cea46d46 100644 --- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp +++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp @@ -2,6 +2,7 @@   * @file llmediaimplgstreamer_syms.cpp   * @brief dynamic GStreamer symbol-grabbing code   * + * @cond   * $LicenseInfo:firstyear=2007&license=viewergpl$   *    * Copyright (c) 2007-2009, Linden Research, Inc. @@ -28,6 +29,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #if LL_GSTREAMER010_ENABLED diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h index ee7473d6d1..88f100af6e 100644 --- a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h +++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h @@ -2,6 +2,7 @@   * @file llmediaimplgstreamer_syms.h   * @brief dynamic GStreamer symbol-grabbing code   * + * @cond   * $LicenseInfo:firstyear=2007&license=viewergpl$   *    * Copyright (c) 2007-2009, Linden Research, Inc. @@ -28,6 +29,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h index e31d4a3282..2244ccc146 100644 --- a/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h +++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h @@ -2,6 +2,7 @@   * @file llmediaimplgstreamertriviallogging.h   * @brief minimal logging utilities.   * + * @cond   * $LicenseInfo:firstyear=2009&license=viewergpl$   *    * Copyright (c) 2009, Linden Research, Inc. @@ -28,6 +29,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef __LLMEDIAIMPLGSTREAMERTRIVIALLOGGING_H__ diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp index d8ccfaa702..5bb0ef5a99 100644 --- a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp +++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp @@ -2,6 +2,7 @@   * @file llmediaimplgstreamervidplug.h   * @brief Video-consuming static GStreamer plugin for gst-to-LLMediaImpl   * + * @cond   * $LicenseInfo:firstyear=2007&license=viewergpl$   *    * Copyright (c) 2007-2009, Linden Research, Inc. @@ -28,6 +29,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #if LL_GSTREAMER010_ENABLED diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h index f6d55b8758..208523e8d0 100644 --- a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h +++ b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h @@ -2,6 +2,7 @@   * @file llmediaimplgstreamervidplug.h   * @brief Video-consuming static GStreamer plugin for gst-to-LLMediaImpl   * + * @cond   * $LicenseInfo:firstyear=2007&license=viewergpl$   *    * Copyright (c) 2007-2009, Linden Research, Inc. @@ -28,6 +29,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #ifndef __GST_SLVIDEO_H__ diff --git a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp index a4c43988ba..d21ff26f83 100644 --- a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp +++ b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp @@ -2,6 +2,7 @@   * @file media_plugin_gstreamer010.cpp   * @brief GStreamer-0.10 plugin for LLMedia API plugin system   * + * @cond   * $LicenseInfo:firstyear=2007&license=viewergpl$   *   * Copyright (c) 2007, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp index 236f79978d..dbc44c8334 100644 --- a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp +++ b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp @@ -2,6 +2,7 @@   * @file media_plugin_quicktime.cpp   * @brief QuickTime plugin for LLMedia API plugin system   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "linden_common.h" diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 09348782a4..30c7483229 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -2,6 +2,7 @@   * @file media_plugin_webkit.cpp   * @brief Webkit plugin for LLMedia API plugin system   * + * @cond   * $LicenseInfo:firstyear=2008&license=viewergpl$   *   * Copyright (c) 2008, Linden Research, Inc. @@ -27,6 +28,7 @@   * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,   * COMPLETENESS OR PERFORMANCE.   * $/LicenseInfo$ + * @endcond   */  #include "llqtwebkit.h" diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 65b172b184..91f43137c5 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -186,7 +186,7 @@ set(viewer_SOURCE_FILES      llfloatermediasettings.cpp      llfloatermemleak.cpp      llfloaternamedesc.cpp -        llfloaternearbymedia.cpp +    llfloaternearbymedia.cpp      llfloaternotificationsconsole.cpp      llfloateropenobject.cpp      llfloaterparcel.cpp @@ -213,6 +213,7 @@ set(viewer_SOURCE_FILES      llfloaterurldisplay.cpp      llfloaterurlentry.cpp      llfloatervoicedevicesettings.cpp +    llfloatervolumepulldown.cpp      llfloaterwater.cpp      llfloaterwhitelistentry.cpp      llfloaterwindlight.cpp diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 80b0a430e0..58c0c19761 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -269,10 +269,10 @@ LLSD LLFloaterAbout::getInfo()  	info["J2C_VERSION"] = LLImageJ2C::getEngineInfo();  	bool want_fullname = true;  	info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD(); -	info["VIVOX_VERSION"] = gVoiceClient ? gVoiceClient->getAPIVersion() : "Unknown"; +	info["VIVOX_VERSION"] = gVoiceClient ? gVoiceClient->getAPIVersion() : LLTrans::getString("NotConnected");  	// TODO: Implement media plugin version query -	info["QT_WEBKIT_VERSION"] = "4.5.2"; +	info["QT_WEBKIT_VERSION"] = "4.5.2 (version number hard-coded)";  	if (gPacketsIn > 0)  	{ diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index 44e68d7745..f7ce826a39 100644 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -41,6 +41,7 @@  #include "lluictrlfactory.h"  #include "llbutton.h"  #include "llselectmgr.h" +#include "llsdutil.h"  LLFloaterMediaSettings* LLFloaterMediaSettings::sInstance = NULL; @@ -145,15 +146,15 @@ LLFloaterMediaSettings* LLFloaterMediaSettings::getInstance()  //static   void LLFloaterMediaSettings::apply()  { -    LLSD settings; +	LLSD settings;  	sInstance->mPanelMediaSettingsGeneral->preApply(); -    sInstance->mPanelMediaSettingsGeneral->getValues( settings ); +	sInstance->mPanelMediaSettingsGeneral->getValues( settings );  	sInstance->mPanelMediaSettingsSecurity->preApply();  	sInstance->mPanelMediaSettingsSecurity->getValues( settings );  	sInstance->mPanelMediaSettingsPermissions->preApply(); -    sInstance->mPanelMediaSettingsPermissions->getValues( settings ); +	sInstance->mPanelMediaSettingsPermissions->getValues( settings );  	LLSelectMgr::getInstance()->selectionSetMedia( LLTextureEntry::MF_HAS_MEDIA ); -    LLSelectMgr::getInstance()->selectionSetMediaData(settings); +	LLSelectMgr::getInstance()->selectionSetMediaData(settings);  	sInstance->mPanelMediaSettingsGeneral->postApply();  	sInstance->mPanelMediaSettingsSecurity->postApply();  	sInstance->mPanelMediaSettingsPermissions->postApply(); @@ -183,7 +184,12 @@ void LLFloaterMediaSettings::initValues( const LLSD& media_settings, bool editab  	sInstance->mPanelMediaSettingsPermissions->  		initValues( sInstance->mPanelMediaSettingsPermissions, media_settings, editable ); - +	 +	// Squirrel away initial values  +	sInstance->mInitialValues.clear(); +	sInstance->mPanelMediaSettingsGeneral->getValues( sInstance->mInitialValues ); +	sInstance->mPanelMediaSettingsSecurity->getValues( sInstance->mInitialValues ); +	sInstance->mPanelMediaSettingsPermissions->getValues( sInstance->mInitialValues );  }  //////////////////////////////////////////////////////////////////////////////// @@ -206,7 +212,7 @@ void LLFloaterMediaSettings::clearValues( bool editable)  {  	// clean up all panels before updating  	sInstance->mPanelMediaSettingsGeneral	 ->clearValues(sInstance->mPanelMediaSettingsGeneral,  editable); -	sInstance->mPanelMediaSettingsSecurity	 ->clearValues(sInstance->mPanelMediaSettingsSecurity,  editable); +	sInstance->mPanelMediaSettingsSecurity	 ->clearValues(sInstance->mPanelMediaSettingsSecurity,	editable);  	sInstance->mPanelMediaSettingsPermissions->clearValues(sInstance->mPanelMediaSettingsPermissions,  editable);	  } @@ -235,7 +241,7 @@ void LLFloaterMediaSettings::onBtnApply( void* userdata )  // static  void LLFloaterMediaSettings::onBtnCancel( void* userdata )  { - 	sInstance->closeFloater();  +	sInstance->closeFloater();   }  //////////////////////////////////////////////////////////////////////////////// @@ -250,7 +256,6 @@ void LLFloaterMediaSettings::onTabChanged(void* user_data, bool from_click)  //  void LLFloaterMediaSettings::enableOkApplyBtns( bool enable )  { -	setCtrlsEnabled( enable );  	childSetEnabled( "OK", enable );  	childSetEnabled( "Apply", enable );  } @@ -265,7 +270,6 @@ const std::string LLFloaterMediaSettings::getHomeUrl()  		return std::string( "" );  } -  ////////////////////////////////////////////////////////////////////////////////  //  bool LLFloaterMediaSettings::passesWhiteList( const std::string& test_url ) @@ -279,3 +283,36 @@ bool LLFloaterMediaSettings::passesWhiteList( const std::string& test_url )  		// this is all we can do  		return false;  } + +//////////////////////////////////////////////////////////////////////////////// +// virtual  +void LLFloaterMediaSettings::draw() +{ +	// *NOTE: The code below is very inefficient.  Better to do this +	// only when data change. +	// Every frame, check to see what the values are.  If they are not +	// the same as the default media data, enable the OK/Apply buttons +	LLSD settings; +	sInstance->mPanelMediaSettingsGeneral->getValues( settings ); +	sInstance->mPanelMediaSettingsSecurity->getValues( settings ); +	sInstance->mPanelMediaSettingsPermissions->getValues( settings ); + +	bool values_changed = false; +	 +	LLSD::map_const_iterator iter = settings.beginMap(); +	LLSD::map_const_iterator end = settings.endMap(); +	for ( ; iter != end; ++iter ) +	{ +		const std::string ¤t_key = iter->first; +		const LLSD ¤t_value = iter->second; +		if ( ! llsd_equals(current_value, mInitialValues[current_key])) +		{ +			values_changed = true; +			break; +		} +	} +	 +	enableOkApplyBtns(values_changed); +	 +	LLFloater::draw(); +} diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h index 17a47cb0f5..e2af1705bf 100644 --- a/indra/newview/llfloatermediasettings.h +++ b/indra/newview/llfloatermediasettings.h @@ -54,11 +54,13 @@ public:  	static void apply();  	static void initValues( const LLSD& media_settings , bool editable);  	static void clearValues( bool editable); -	void enableOkApplyBtns( bool enable ); -	LLPanelMediaSettingsSecurity* getPanelSecurity(){return mPanelMediaSettingsSecurity;}; -	const std::string getHomeUrl(); + +	LLPanelMediaSettingsSecurity* getPanelSecurity(){return mPanelMediaSettingsSecurity;};	 +	const std::string getHomeUrl();	  	bool passesWhiteList( const std::string& test_url ); +	virtual void	draw(); +  	bool mIdenticalHasMediaInfo;  	bool mMultipleMedia;  	bool mMultipleValidMedia; @@ -83,6 +85,10 @@ protected:  	static LLFloaterMediaSettings* sInstance;  private: + +	void enableOkApplyBtns( bool enable ); +	 +	LLSD mInitialValues;  	bool mWaitingToClose;  }; diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp index e2df2ffdf7..c8ff36b4f4 100644 --- a/indra/newview/llfloatersearch.cpp +++ b/indra/newview/llfloatersearch.cpp @@ -37,6 +37,7 @@  #include "lllogininstance.h"  #include "lluri.h"  #include "llagent.h" +#include "llui.h"  LLFloaterSearch::LLFloaterSearch(const LLSD& key) :  	LLFloater(key), @@ -139,6 +140,9 @@ void LLFloaterSearch::search(const LLSD &key)  	}  	url += "&r=" + maturity; +	// add the current localization information +	url += "&lang=" + LLUI::getLanguage(); +  	// and load the URL in the web view  	mBrowser->navigateTo(url);  } diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index 5bb266a01d..b1e7dd3d50 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -392,19 +392,19 @@ void LLPanelMediaSettingsGeneral::preApply()  //  void LLPanelMediaSettingsGeneral::getValues( LLSD &fill_me_in )  { -	fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = mAutoLoop->getValue(); -	fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = mAutoPlay->getValue(); -	fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = mAutoScale->getValue(); -	fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = mAutoZoom->getValue(); -	fill_me_in[LLMediaEntry::CONTROLS_KEY] = mControls->getCurrentIndex(); +	fill_me_in[LLMediaEntry::AUTO_LOOP_KEY] = (LLSD::Boolean)mAutoLoop->getValue(); +	fill_me_in[LLMediaEntry::AUTO_PLAY_KEY] = (LLSD::Boolean)mAutoPlay->getValue(); +	fill_me_in[LLMediaEntry::AUTO_SCALE_KEY] = (LLSD::Boolean)mAutoScale->getValue(); +	fill_me_in[LLMediaEntry::AUTO_ZOOM_KEY] = (LLSD::Boolean)mAutoZoom->getValue(); +	fill_me_in[LLMediaEntry::CONTROLS_KEY] = (LLSD::Integer)mControls->getCurrentIndex();  	//Don't fill in current URL: this is only supposed to get changed via navigate  	// fill_me_in[LLMediaEntry::CURRENT_URL_KEY] = mCurrentURL->getValue(); -	fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = mHeightPixels->getValue(); +	fill_me_in[LLMediaEntry::HEIGHT_PIXELS_KEY] = (LLSD::Integer)mHeightPixels->getValue();  	// Don't fill in the home URL if it is the special "Multiple Media" string!  	if (LLTrans::getString("Multiple Media") != mHomeURL->getValue()) -		fill_me_in[LLMediaEntry::HOME_URL_KEY] = mHomeURL->getValue(); -	fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = mFirstClick->getValue(); -	fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = mWidthPixels->getValue(); +		fill_me_in[LLMediaEntry::HOME_URL_KEY] = (LLSD::String)mHomeURL->getValue(); +	fill_me_in[LLMediaEntry::FIRST_CLICK_INTERACT_KEY] = (LLSD::Boolean)mFirstClick->getValue(); +	fill_me_in[LLMediaEntry::WIDTH_PIXELS_KEY] = (LLSD::Integer)mWidthPixels->getValue();  }  //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp index 94e137b0f4..7ec53ed57a 100644 --- a/indra/newview/llpanelmediasettingssecurity.cpp +++ b/indra/newview/llpanelmediasettingssecurity.cpp @@ -213,7 +213,7 @@ void LLPanelMediaSettingsSecurity::preApply()  //  void LLPanelMediaSettingsSecurity::getValues( LLSD &fill_me_in )  { -    fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = mEnableWhiteList->getValue(); +    fill_me_in[LLMediaEntry::WHITELIST_ENABLE_KEY] = (LLSD::Boolean)mEnableWhiteList->getValue();      // iterate over white list and extract items      std::vector< LLScrollListItem* > white_list_items = mWhiteListList->getAllData(); diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 71c1b0cbb9..e86123d565 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -66,10 +66,6 @@  glh::matrix4f glh_get_current_modelview();  glh::matrix4f glh_get_current_projection(); -const F32 ZOOM_NEAR_PADDING		= 1.0f; -const F32 ZOOM_MEDIUM_PADDING	= 1.15f; -const F32 ZOOM_FAR_PADDING		= 1.5f; -  // Warning: make sure these two match!  const LLPanelPrimMediaControls::EZoomLevel LLPanelPrimMediaControls::kZoomLevels[] = { ZOOM_NONE, ZOOM_MEDIUM };  const int LLPanelPrimMediaControls::kNumZoomLevels = 2; @@ -86,7 +82,13 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :  	mUpdateSlider(true),  	mClearFaceOnFade(false),  	mCurrentRate(0.0), -	mMovieDuration(0.0) +	mMovieDuration(0.0), +	mTargetObjectID(LLUUID::null), +	mTargetObjectFace(0), +	mTargetImplID(LLUUID::null), +	mTargetObjectNormal(LLVector3::zero), +	mZoomObjectID(LLUUID::null), +	mZoomObjectFace(0)  {  	mCommitCallbackRegistrar.add("MediaCtrl.Close",		boost::bind(&LLPanelPrimMediaControls::onClickClose, this));  	mCommitCallbackRegistrar.add("MediaCtrl.Back",		boost::bind(&LLPanelPrimMediaControls::onClickBack, this)); @@ -152,6 +154,11 @@ BOOL LLPanelPrimMediaControls::postBuild()  	mRightBookend			= getChild<LLUICtrl>("right_bookend");  	mBackgroundImage		= LLUI::getUIImage(getString("control_background_image_name"));  	LLStringUtil::convertToF32(getString("skip_step"), mSkipStep); +	LLStringUtil::convertToS32(getString("min_width"), mMinWidth); +	LLStringUtil::convertToS32(getString("min_height"), mMinHeight); +	LLStringUtil::convertToF32(getString("zoom_near_padding"), mZoomNearPadding); +	LLStringUtil::convertToF32(getString("zoom_medium_padding"), mZoomMediumPadding); +	LLStringUtil::convertToF32(getString("zoom_far_padding"), mZoomFarPadding);  	// These are currently removed...but getChild creates a "dummy" widget.  	// This class handles them missing. @@ -257,9 +264,6 @@ LLPluginClassMedia* LLPanelPrimMediaControls::getTargetMediaPlugin()  void LLPanelPrimMediaControls::updateShape()  { -	const S32 MIN_HUD_WIDTH=400; -	const S32 MIN_HUD_HEIGHT=120; -  	LLViewerMediaImpl* media_impl = getTargetMediaImpl();  	LLViewerObject* objectp = getTargetObject(); @@ -279,7 +283,7 @@ void LLPanelPrimMediaControls::updateShape()  	bool can_navigate = parcel->getMediaAllowNavigate();  	bool enabled = false; -	bool is_zoomed = (mCurrentZoom != ZOOM_NONE); +	bool is_zoomed = (mCurrentZoom != ZOOM_NONE) && (mTargetObjectID == mZoomObjectID) && (mTargetObjectFace == mZoomObjectFace);  	// There is no such thing as "has_focus" being different from normal controls set  	// anymore (as of user feedback from bri 10/09).  So we cheat here and force 'has_focus'  	// to 'true' (or, actually, we use a setting) @@ -309,7 +313,7 @@ void LLPanelPrimMediaControls::updateShape()  		mStopCtrl->setVisible(false);  		mHomeCtrl->setVisible(has_focus);  		mZoomCtrl->setVisible(!is_zoomed); -		mUnzoomCtrl->setVisible(has_focus && is_zoomed); +		mUnzoomCtrl->setVisible(is_zoomed);  		mOpenCtrl->setVisible(true);  		mMediaAddressCtrl->setVisible(has_focus && !mini_controls);  		mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); @@ -332,13 +336,12 @@ void LLPanelPrimMediaControls::updateShape()  		if(media_plugin && media_plugin->pluginSupportsMediaTime())  		{ -			mReloadCtrl->setEnabled(FALSE); -			mReloadCtrl->setVisible(FALSE); +			mReloadCtrl->setEnabled(false); +			mReloadCtrl->setVisible(false);  			mMediaStopCtrl->setVisible(has_focus); -			mHomeCtrl->setVisible(FALSE); -			// No nav controls -			mBackCtrl->setVisible(FALSE); -			mFwdCtrl->setEnabled(FALSE); +			mHomeCtrl->setVisible(has_focus); +			mBackCtrl->setVisible(false); +			mFwdCtrl->setVisible(false);  			mMediaAddressCtrl->setVisible(false);  			mMediaAddressCtrl->setEnabled(false);  			mMediaPlaySliderPanel->setVisible(has_focus && !mini_controls); @@ -416,7 +419,6 @@ void LLPanelPrimMediaControls::updateShape()  					mPlayCtrl->setVisible(FALSE);  					mPauseCtrl->setEnabled(TRUE);  					mPauseCtrl->setVisible(has_focus); -					mMediaStopCtrl->setEnabled(TRUE);  					break;  				case LLPluginClassMediaOwner::MEDIA_PAUSED: @@ -425,7 +427,6 @@ void LLPanelPrimMediaControls::updateShape()  					mPauseCtrl->setVisible(FALSE);  					mPlayCtrl->setEnabled(TRUE);  					mPlayCtrl->setVisible(has_focus); -					mMediaStopCtrl->setEnabled(FALSE);  					break;  			}  		} @@ -508,12 +509,10 @@ void LLPanelPrimMediaControls::updateShape()  			{	  				mMediaProgressPanel->setVisible(true);  				mMediaProgressBar->setPercent(media_plugin->getProgressPercent()); -				gFocusMgr.setTopCtrl(mMediaProgressPanel);  			} -			else if (mMediaProgressPanel->getVisible()) +			else  			{  				mMediaProgressPanel->setVisible(false); -				gFocusMgr.setTopCtrl(NULL);  			}  		} @@ -599,12 +598,12 @@ void LLPanelPrimMediaControls::updateShape()  		}          LLCoordGL screen_min; -		screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthRaw() * (min.mV[VX] + 1.f) * 0.5f); -		screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightRaw() * (min.mV[VY] + 1.f) * 0.5f); +		screen_min.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (min.mV[VX] + 1.f) * 0.5f); +		screen_min.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (min.mV[VY] + 1.f) * 0.5f);  		LLCoordGL screen_max; -		screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidthRaw() * (max.mV[VX] + 1.f) * 0.5f); -		screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeightRaw() * (max.mV[VY] + 1.f) * 0.5f); +		screen_max.mX = llround((F32)gViewerWindow->getWorldViewWidthScaled() * (max.mV[VX] + 1.f) * 0.5f); +		screen_max.mY = llround((F32)gViewerWindow->getWorldViewHeightScaled() * (max.mV[VY] + 1.f) * 0.5f);  		// grow panel so that screenspace bounding box fits inside "media_region" element of HUD  		LLRect media_controls_rect; @@ -613,14 +612,15 @@ void LLPanelPrimMediaControls::updateShape()  		media_controls_rect.mBottom -= mMediaRegion->getRect().mBottom;  		media_controls_rect.mTop += getRect().getHeight() - mMediaRegion->getRect().mTop;  		media_controls_rect.mRight += getRect().getWidth() - mMediaRegion->getRect().mRight; - -		LLRect old_hud_rect = media_controls_rect; +		  		// keep all parts of HUD on-screen  		media_controls_rect.intersectWith(getParent()->getLocalRect()); +		if (mCurrentZoom != ZOOM_NONE) +			media_controls_rect.mBottom -= mMediaControlsStack->getRect().getHeight() + mMediaProgressPanel->getRect().getHeight();  		// clamp to minimum size, keeping centered  		media_controls_rect.setCenterAndSize(media_controls_rect.getCenterX(), media_controls_rect.getCenterY(), -			llmax(MIN_HUD_WIDTH, media_controls_rect.getWidth()), llmax(MIN_HUD_HEIGHT, media_controls_rect.getHeight())); +			llmax(mMinWidth, media_controls_rect.getWidth()), llmax(mMinHeight, media_controls_rect.getHeight()));  		setShape(media_controls_rect, true); @@ -968,17 +968,17 @@ void LLPanelPrimMediaControls::updateZoom()  		}  	case ZOOM_FAR:  		{ -			zoom_padding = ZOOM_FAR_PADDING; +			zoom_padding = mZoomFarPadding;  			break;  		}  	case ZOOM_MEDIUM:  		{ -			zoom_padding = ZOOM_MEDIUM_PADDING; +			zoom_padding = mZoomMediumPadding;  			break;  		}  	case ZOOM_NEAR:  		{ -			zoom_padding = ZOOM_NEAR_PADDING; +			zoom_padding = mZoomNearPadding;  			break;  		}  	default: @@ -988,9 +988,16 @@ void LLPanelPrimMediaControls::updateZoom()  		}  	} -	if (zoom_padding > 0.0f)		 +	if (zoom_padding > 0.0f) +	{  		LLViewerMediaFocus::setCameraZoom(getTargetObject(), mTargetObjectNormal, zoom_padding); +	} +	 +	// Remember the object ID/face we zoomed into, so we can update the zoom icon appropriately +	mZoomObjectID = mTargetObjectID; +	mZoomObjectFace = mTargetObjectFace;  } +  void LLPanelPrimMediaControls::onScrollUp(void* user_data)  {  	LLPanelPrimMediaControls* this_panel = static_cast<LLPanelPrimMediaControls*> (user_data); diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h index accfb72a04..fe8f100abe 100644 --- a/indra/newview/llpanelprimmediacontrols.h +++ b/indra/newview/llpanelprimmediacontrols.h @@ -160,6 +160,11 @@ private:  	LLUICtrl *mRightBookend;  	LLUIImage* mBackgroundImage;  	F32 mSkipStep; +	S32 mMinWidth; +	S32 mMinHeight; +	F32 mZoomNearPadding; +	F32 mZoomMediumPadding; +	F32 mZoomFarPadding;  	LLUICtrl *mMediaPanelScroll;  	LLButton *mScrollUpCtrl; @@ -190,6 +195,9 @@ private:  	S32 mTargetObjectFace;  	LLUUID mTargetImplID;  	LLVector3 mTargetObjectNormal; +	 +	LLUUID mZoomObjectID; +	S32 mZoomObjectFace;  };  #endif // LL_PANELPRIMMEDIACONTROLS_H diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index dc22a243eb..4915720036 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -42,6 +42,7 @@  #include "llfloaterbuycurrency.h"  #include "llfloaterchat.h"  #include "llfloaterlagmeter.h" +#include "llfloatervolumepulldown.h"  #include "llfloaterregioninfo.h"  #include "llfloaterscriptdebug.h"  #include "llhudicon.h" @@ -159,6 +160,7 @@ LLStatusBar::LLStatusBar(const LLRect& rect)  	mBtnVolume = getChild<LLButton>( "volume_btn" );  	mBtnVolume->setClickedCallback( onClickVolume, this ); +	mBtnVolume->setMouseEnterCallback(boost::bind(&LLStatusBar::onMouseEnterVolume, this));  	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&LLStatusBar::onVolumeChanged, this, _2)); @@ -203,7 +205,6 @@ LLStatusBar::LLStatusBar(const LLRect& rect)  	addChild(mSGPacketLoss);  	childSetActionTextbox("stat_btn", onClickStatGraph); -  }  LLStatusBar::~LLStatusBar() @@ -244,7 +245,6 @@ BOOL LLStatusBar::handleRightMouseDown(S32 x, S32 y, MASK mask)  BOOL LLStatusBar::postBuild()  { -  	gMenuBarView->setRightMouseDownCallback(boost::bind(&show_navbar_context_menu, _1, _2, _3));  	return TRUE; @@ -506,6 +506,13 @@ static void onClickScriptDebug(void*)  	LLFloaterScriptDebug::show(LLUUID::null);  } +//static +void LLStatusBar::onMouseEnterVolume(LLUICtrl* ctrl) +{ +	// show the master volume pull-down +	LLFloaterReg::showInstance("volume_pulldown"); +} +  static void onClickVolume(void* data)  {  	// toggle the master mute setting diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index bdaacce981..f77cc1acb8 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -47,6 +47,7 @@ class LLUICtrl;  class LLUUID;  class LLFrameTimer;  class LLStatGraph; +class LLPanelVolumePulldown;  class LLStatusBar  :	public LLPanel @@ -92,8 +93,8 @@ private:  	void onVolumeChanged(const LLSD& newvalue); +	static void onMouseEnterVolume(LLUICtrl* ctrl);  	static void onClickStatGraph(void* data); -	  private:  	LLTextBox	*mTextHealth; diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 227f6c4971..1a8edb1f6a 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -106,6 +106,7 @@  #include "llfloateruipreview.h"  #include "llfloaterurldisplay.h"  #include "llfloatervoicedevicesettings.h" +#include "llfloatervolumepulldown.h"  #include "llfloaterwater.h"  #include "llfloaterwhitelistentry.h"  #include "llfloaterwindlight.h" @@ -248,6 +249,7 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("upload_image", "floater_image_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImagePreview>, "upload");  	LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload"); +	LLFloaterReg::add("volume_pulldown", "floater_volume_pulldown.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVolumePulldown>);  	LLFloaterReg::add("voice_call", "floater_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCall>);  	LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>); diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index fd74c9c2fc..f639c841e7 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -138,15 +138,6 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac  	}  	else  	{ -		if(mFocusedImplID.notNull()) -		{ -			if(mMediaControls.get()) -			{ -				// Don't reset camera zoom by default, just tell the controls they're no longer controlling zoom. -				mMediaControls.get()->resetZoomLevel(false); -			} -		} -  		if(hasFocus())  		{  			gFocusMgr.setKeyboardFocus(NULL); diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index d677634be6..7e1e7c940f 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -63,6 +63,7 @@  #include "llparcel.h"  #include "llviewerparcelmgr.h"  #include "llfirstuse.h" +#include "lltrans.h"  #include "llviewerwindow.h"  #include "llviewercamera.h"  #include "llvoavatarself.h" @@ -1161,11 +1162,12 @@ LLVoiceClient::LLVoiceClient() :  	mVoiceEnabled(false),  	mWriteInProgress(false), -	mLipSyncEnabled(false), -	mAPIVersion("Unknown") +	mLipSyncEnabled(false)  {	  	gVoiceClient = this; +	mAPIVersion = LLTrans::getString("NotConnected"); +  #if LL_DARWIN || LL_LINUX || LL_SOLARIS  		// HACK: THIS DOES NOT BELONG HERE  		// When the vivox daemon dies, the next write attempt on our socket generates a SIGPIPE, which kills us. diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index 4b91dc6294..c52b0c83d0 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -6,6 +6,7 @@     layout="topleft"      left="0"     width="380" +   help_topic="panel_landmarks"     border="true"     background_visible="true"     bg_alpha_color="DkGray2" diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml index e00f654750..89f1fe35ca 100644 --- a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml +++ b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml @@ -221,12 +221,23 @@     width="50" />    <text bottom_delta="0" follows="top|left" height="15" left_delta="60" name="X_label"> -    X +	X    </text> -  <spinner bottom_delta="0" -	     decimal_digits="0" enabled="true" follows="left|top" height="16" -	     increment="1" initial_val="256" label="" label_width="0" -	     left_delta="20" max_val="2048" min_val="0" mouse_opaque="true" -	     name="height_pixels" width="50" /> +  <spinner  +	  bottom_delta="0" +	  decimal_digits="0" +	  enabled="true" +	  follows="left|top"  +	  height="16" +	  increment="1" +	  initial_val="256"  +	  label="" +	  label_width="0" +	  left_delta="20"  +	  max_val="2048"  +	  min_val="0" +	  mouse_opaque="true" +	  name="height_pixels" +	  width="50" />  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml index af4c01185a..8b86067b03 100644 --- a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml +++ b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml @@ -9,6 +9,11 @@  	width="800">    <string name="control_background_image_name">Inspector_Background</string>    <string name="skip_step">0.2</string> +  <string name="min_width">400</string> +  <string name="min_height">120</string> +  <string name="zoom_near_padding">1.0</string> +  <string name="zoom_medium_padding">1.25</string> +  <string name="zoom_far_padding">1.5</string>    <panel  	  name="media_region"  	  bottom="125" @@ -20,7 +25,7 @@  	  name="media_controls"  	  follows="left|right"  	  animate="false" -	  height="32" +	  height="26"  	  layout="topleft"  	  left="0"  	  orientation="horizontal" @@ -235,18 +240,17 @@  		width="190"  		min_width="90">  	  <!-- -		  RE-ENABLE THIS WHEN WE HAVE A HISTORY DROP-DOWN AGAIN - -<combo_box -name="media_address_url" -allow_text_entry="true" -height="22" -layout="topleft" -max_chars="1024" -tool_tip = "Media URL" -<combo_box.commit_callback -function="MediaCtrl.CommitURL" /> -</combo_box> +	  RE-ENABLE THIS WHEN WE HAVE A HISTORY DROP-DOWN AGAIN +	  <combo_box +		  name="media_address_url" +		  allow_text_entry="true" +		  height="22" +		  layout="topleft" +		  max_chars="1024" +		  tool_tip = "Media URL"> +		<combo_box.commit_callback +			function="MediaCtrl.CommitURL" /> +	  </combo_box>  	  -->  	  <line_editor   		  name="media_address_url" @@ -304,17 +308,17 @@ function="MediaCtrl.CommitURL" />  		user_resize="false"  		follows="left|right|top|bottom"  		layout="topleft" +		height="16"		  		min_width="100"  		width="200">  	  <slider_bar  		  name="media_play_slider"  		  follows="left|right|top" -		  height="22" +		  height="16"  		  increment="0.05"  		  initial_value="0.5"  		  layout="topleft"  		  tool_tip="Movie play progress" -		  top="8"  		  min_width="100"  		  width="200">  		<slider_bar.commit_callback @@ -619,7 +623,7 @@ function="MediaCtrl.CommitURL" />    </layout_stack>    <layout_stack  	  follows="left|right|bottom" -	  height="32" +	  height="20"  	  layout="topleft"  	  animate="false"  	  left="0" @@ -632,7 +636,7 @@ function="MediaCtrl.CommitURL" />  		user_resize="false" />  	<panel  		name="media_progress_indicator" -		height="22" +		height="20"  		layout="topleft"  		left="0"  		top="0" @@ -644,6 +648,7 @@ function="MediaCtrl.CommitURL" />  		  name="media_progress_bar"  		  color_bar="1 1 1 0.96"  		  follows="left|right|top" +		  top="5"  		  height="8"  		  layout="topleft"  		  left="0" diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 65bc48265d..9c66653e3c 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -81,6 +81,17 @@       name="volume_btn"       tool_tip="Global Volume Control"       width="16" /> +    <panel +     class="panel_volume_pulldown" +     follows="all" +     height="533" +     layout="topleft" +     left="0" +     name="volume_pulldown" +     top="5" +     visible="false" +     width="313" /> +      <text       enabled="true"       follows="right|bottom" diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml index 01204ba779..32fc9fce01 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -1,5 +1,6 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <panel name="Teleport History" bottom="0" height="326" left="0" width="380" +     help_topic="panel_teleport_history"       border="true" follows="left|top|right|bottom">           <accordion       follows="left|top|right|bottom" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 4b727e36ab..e47ec1ebda 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -267,6 +267,7 @@  	<string name="ChangePermissions">Change its permissions</string>  	<string name="TrackYourCamera">Track your camera</string>  	<string name="ControlYourCamera">Control your camera</string> +	<string name="NotConnected">Not Connected</string>  	<!-- Sim Access labels -->  	<string name="SIM_ACCESS_PG">PG</string>  | 
