diff options
Diffstat (limited to 'indra/newview')
184 files changed, 1485 insertions, 2277 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a77215536f..2e2dc0beca 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -4,17 +4,19 @@ project(viewer)  include(00-Common)  include(Boost) +include(BuildPackagesInfo)  include(BuildVersion) +include(CMakeCopyIfDifferent)  include(DBusGlib)  include(DirectX) -include(OpenSSL)  include(DragDrop)  include(EXPAT)  include(FMODEX) -include(OPENAL) -include(OpenGL) +include(GLOD) +include(GooglePerfTools)  include(Hunspell)  include(JsonCpp) +include(LLAppearance)  include(LLAudio)  include(LLCharacter)  include(LLCommon) @@ -22,6 +24,8 @@ include(LLCoreHttp)  include(LLImage)  include(LLImageJ2COJ)  include(LLInventory) +include(LLKDU) +include(LLLogin)  include(LLMath)  include(LLMessage)  include(LLPhysicsExtensions) @@ -36,18 +40,16 @@ include(LScript)  include(Linking)  include(NDOF)  include(NVAPI) -include(GooglePerfTools) +include(OPENAL) +include(OpenGL) +include(OpenSSL) +include(PNG) +include(Prebuilt)  include(TemplateCheck)  include(UI)  include(UnixInstall) -include(LLKDU)  include(ViewerMiscLibs) -include(LLLogin)  include(VisualLeakDetector) -include(GLOD) -include(CMakeCopyIfDifferent) -include(LLAppearance) -include(PNG)  include(ZLIB)  include(URIPARSER) @@ -60,6 +62,9 @@ if(FMODEX)    include_directories(${FMODEX_INCLUDE_DIR})  endif(FMODEX) +# install SLPlugin host executable and its dynamic-library plugins +use_prebuilt_binary(slplugins) +  include_directories(      ${DBUSGLIB_INCLUDE_DIRS}      ${JSONCPP_INCLUDE_DIR} @@ -1302,7 +1307,7 @@ set(viewer_HEADER_FILES  source_group("CMake Rules" FILES ViewerInstall.cmake) -# the viewer_version.txt file created here is for passing to viewer_manifest +# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild  # the summary.json file is created for the benefit of the TeamCity builds, where  #   it is used to provide descriptive information to the build results page  add_custom_target(generate_viewer_version ALL @@ -1373,6 +1378,9 @@ if (LINUX)      set(viewer_LIBRARIES          Xinerama          ) +    if (OPENAL) +      LIST(APPEND viewer_LIBRARIES ${OPENAL_LIBRARIES}) +    endif (OPENAL)  endif (LINUX)  if (WINDOWS) @@ -1587,6 +1595,7 @@ set(viewer_APPSETTINGS_FILES      app_settings/viewerart.xml      ${CMAKE_SOURCE_DIR}/../etc/message.xml      ${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg +    packages-info.txt      )  source_group("App Settings" FILES ${viewer_APPSETTINGS_FILES}) @@ -1667,6 +1676,9 @@ if (WINDOWS)          LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO /LARGEADDRESSAWARE"          LINK_FLAGS_RELEASE "/FORCE:MULTIPLE /MAP\"secondlife-bin.MAP\" /OPT:REF /LARGEADDRESSAWARE"          ) + +    add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version) +      if(USE_PRECOMPILED_HEADERS)          set_target_properties(              ${VIEWER_BINARY_NAME} @@ -1802,7 +1814,6 @@ if (WINDOWS)          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat        DEPENDS          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -        generate_viewer_version          stage_third_party_libs          ${COPY_INPUT_DEPENDENCIES}        COMMENT "Performing viewer_manifest copy" @@ -1816,10 +1827,10 @@ if (WINDOWS)        add_dependencies(${VIEWER_BINARY_NAME} copy_win_scripts)      endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts) -    add_dependencies(${VIEWER_BINARY_NAME} -      SLPlugin -      windows-crash-logger -      ) +##  add_dependencies(${VIEWER_BINARY_NAME} +##    SLPlugin +##    windows-crash-logger +##    )      # sets the 'working directory' for debugging from visual studio.      if (NOT UNATTENDED) @@ -1874,10 +1885,9 @@ if (WINDOWS)              ${COPY_INPUT_DEPENDENCIES}          ) -      add_custom_target(package ALL DEPENDS +      add_custom_target(llpackage ALL DEPENDS          ${CMAKE_CFG_INTDIR}/touched.bat          windows-setup-build-all -        generate_viewer_version          )          # temporarily disable packaging of event_host until hg subrepos get          # sorted out on the parabuild cluster... @@ -1987,12 +1997,14 @@ if (LINUX)    set(COPY_INPUT_DEPENDENCIES      ${VIEWER_BINARY_NAME}      linux-crash-logger -    SLPlugin -    media_plugin_webkit -    media_plugin_gstreamer010 +##  SLPlugin +##  media_plugin_webkit +##  media_plugin_gstreamer010      llcommon      ) +  add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version) +    add_custom_command(        OUTPUT ${product}.tar.bz2        COMMAND ${PYTHON_EXECUTABLE} @@ -2011,7 +2023,6 @@ if (LINUX)          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched        DEPENDS          ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -        generate_viewer_version          ${COPY_INPUT_DEPENDENCIES}        ) @@ -2036,7 +2047,6 @@ if (LINUX)        --source=${CMAKE_CURRENT_SOURCE_DIR}      DEPENDS        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -      generate_viewer_version        ${COPY_INPUT_DEPENDENCIES}      COMMENT "Performing viewer_manifest copy"      ) @@ -2044,10 +2054,10 @@ if (LINUX)    add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched)    if (PACKAGE) -    add_custom_target(package ALL DEPENDS ${product}.tar.bz2) +    add_custom_target(llpackage ALL DEPENDS ${product}.tar.bz2)      # Make sure we don't run two instances of viewer_manifest.py at the same time. -    add_dependencies(package copy_l_viewer_manifest) -    check_message_template(package) +    add_dependencies(llpackage copy_l_viewer_manifest) +    check_message_template(llpackage)    endif (PACKAGE)  endif (LINUX) @@ -2078,6 +2088,8 @@ if (DARWIN)       "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app/Contents/Info.plist"      ) +  add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version) +    add_custom_command(      TARGET ${VIEWER_BINARY_NAME} POST_BUILD      COMMAND ${PYTHON_EXECUTABLE} @@ -2097,10 +2109,10 @@ if (DARWIN)      DEPENDS        ${VIEWER_BINARY_NAME}        ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -      generate_viewer_version      ) -  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-crash-logger) +##add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-crash-logger) +  add_dependencies(${VIEWER_BINARY_NAME} mac-crash-logger)    if (ENABLE_SIGNING)        set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}") @@ -2109,11 +2121,11 @@ if (DARWIN)    endif (ENABLE_SIGNING)    if (PACKAGE) -      add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) -      add_dependencies(package generate_viewer_version) +      add_custom_target(llpackage ALL DEPENDS ${VIEWER_BINARY_NAME}) +      add_dependencies(llpackage generate_viewer_version)        add_custom_command( -        TARGET package POST_BUILD +        TARGET llpackage POST_BUILD          COMMAND ${PYTHON_EXECUTABLE}          ARGS            ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py @@ -2132,7 +2144,6 @@ if (DARWIN)            ${SIGNING_SETTING}          DEPENDS            ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py -          generate_viewer_version        )    endif (PACKAGE)  endif (DARWIN) @@ -2155,19 +2166,21 @@ if (PACKAGE)    if (DARWIN)      list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")      # *TODO: Generate these search dirs in the cmake files related to each binary. -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}")      list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_crash_logger/${CMAKE_CFG_INTDIR}") -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}") -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/quicktime/${CMAKE_CFG_INTDIR}") -    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/webkit/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/quicktime/${CMAKE_CFG_INTDIR}") +##  list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/webkit/${CMAKE_CFG_INTDIR}")      set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-darwin.tar.bz2") -    set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-crash-logger") +##  set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-crash-logger") +    set(VIEWER_EXE_GLOBS "'Second Life' mac-crash-logger")      set(VIEWER_LIB_GLOB "*.dylib")    endif (DARWIN)    if (LINUX)      list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/packaged")      set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-linux.tar.bz2") -    set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin SLPlugin") +##  set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin SLPlugin") +    set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin")      set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}*")      set(VIEWER_COPY_MANIFEST copy_l_viewer_manifest)    endif (LINUX) @@ -2195,7 +2208,7 @@ if (PACKAGE)    add_custom_target(generate_breakpad_symbols DEPENDS "${VIEWER_SYMBOL_FILE}")    add_dependencies(generate_breakpad_symbols "${VIEWER_BINARY_NAME}" "${VIEWER_COPY_MANIFEST}") -  add_dependencies(package generate_breakpad_symbols) +  add_dependencies(llpackage generate_breakpad_symbols)    endif(RELEASE_CRASH_REPORTING OR NON_RELEASE_CRASH_REPORTING)  endif (PACKAGE) @@ -2373,11 +2386,6 @@ include(LLAddBuildTest)  SET(viewer_TEST_SOURCE_FILES    llagentaccess.cpp    llwlparammanager.cpp -  # Not *actually* a unit test, it's an integration test. -  # Because it won't work in the new unit test iface, i've commented out -  # and notified Nat. Delete this when it's replaced! -  # + poppy & brad 2009-06-05 -  # llcapabilitylistener.cpp    )  set_source_files_properties(    ${viewer_TEST_SOURCE_FILES} diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 7c35ff8c4b..1523336b0d 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.7.28 +3.7.29 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index f926720c51..a042166e44 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5074,7 +5074,7 @@        <key>Type</key>        <string>LLSD</string>        <key>Value</key> -      <array /> +      <array/>      </map>      <key>LSLFindCaseInsensitivity</key>          <map> @@ -14747,17 +14747,6 @@        <key>Value</key>        <integer>1</integer>      </map> -    <key>UseHTTPInventory</key> -    <map> -      <key>Comment</key> -      <string>Allow use of http inventory transfers instead of UDP</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map>      <key>ClickToWalk</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index d119504017..c62b45ed81 100755 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -97,7 +97,7 @@          <key>Type</key>              <string>Boolean</string>          <key>Value</key> -            <integer>true</integer> +            <integer>1</integer>      </map>         <key>InstantMessageLogPath</key>          <map> diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py index 4181e4ebb3..d351c406bc 100755 --- a/indra/newview/generate_breakpad_symbols.py +++ b/indra/newview/generate_breakpad_symbols.py @@ -31,7 +31,6 @@ $/LicenseInfo$  import collections  import fnmatch  import itertools -import operator  import os  import re  import sys @@ -149,7 +148,7 @@ def main(configuration, search_dirs, viewer_exes, libs_suffix, dump_syms_tool, v                     == os.path.splitext(os.path.basename(m))[0].lower()          # there must be at least one .sym file in tarfile_members that matches          # each required module (ignoring file extensions) -        if not reduce(operator.or_, itertools.imap(match_module_basename, tarfile_members)): +        if not any(itertools.imap(match_module_basename, tarfile_members)):              print >> sys.stderr, "failed to find required %s in generated %s" \                      % (required_module, viewer_symbol_file)              os.remove(viewer_symbol_file) diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 65581a6781..8c8b4971cf 100755 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -1,6 +1,6 @@  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;; secondlife setup.nsi
 -;; Copyright 2004-2011, Linden Research, Inc.
 +;; Second Life setup.nsi
 +;; Copyright 2004-2015, Linden Research, Inc.
  ;;
  ;; This library is free software; you can redistribute it and/or
  ;; modify it under the terms of the GNU Lesser General Public
 @@ -18,26 +18,27 @@  ;;
  ;; Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  ;;
 -;; NSIS Unicode 2.38.1 or higher required
 +;; NSIS Unicode 2.46.5 or higher required
  ;; http://www.scratchpaper.com/
  ;;
 -;; Author: James Cook, Don Kjer, Callum Prentice
 +;; Author: James Cook, TankMaster Finesmith, Don Kjer, Callum Prentice
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;; Compiler flags
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -SetOverwrite on				; overwrite files
 -SetCompress auto			; compress iff saves space
 -SetCompressor /solid lzma	; compress whole installer as one block
 -SetDatablockOptimize off	; only saves us 0.1%, not worth it
 -XPStyle on                  ; add an XP manifest to the installer
 -RequestExecutionLevel admin	; on Vista we must be admin because we write to Program Files
 +SetOverwrite on				# Overwrite files
 +SetCompress auto			# Compress if saves space
 +SetCompressor /solid lzma	# Compress whole installer as one block
 +SetDatablockOptimize off	# Only saves us 0.1%, not worth it
 +XPStyle on                  # Add an XP manifest to the installer
 +RequestExecutionLevel admin	# For when we write to Program Files
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Project flags
 +;; Project flags
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +# This placeholder is replaced by viewer_manifest.py
  %%VERSION%%
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 @@ -72,140 +73,317 @@ LangString LanguageCode ${LANG_RUSSIAN}  "ru"  LangString LanguageCode ${LANG_TURKISH}  "tr"
  LangString LanguageCode ${LANG_TRADCHINESE}  "zh"
 -;; this placeholder is replaced by viewer_manifest.py
 +# This placeholder is replaced by viewer_manifest.py
  %%INST_VARS%%
  Name ${INSTNAME}
 -SubCaption 0 $(LicenseSubTitleSetup)	; override "license agreement" text
 +SubCaption 0 $(LicenseSubTitleSetup)	# Override "license agreement" text
 -BrandingText " "						; bottom of window text
 +BrandingText " "						# Bottom of window text
  Icon          %%SOURCE%%\installers\windows\install_icon.ico
  UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon.ico
 -WindowIcon on							; show our icon in left corner
 -BGGradient off							; no big background window
 -CRCCheck on								; make sure CRC is OK
 -InstProgressFlags smooth colored		; new colored smooth look
 -ShowInstDetails nevershow				; no details, no "show" button
 -SetOverwrite on							; stomp files by default
 -AutoCloseWindow true					; after all files install, close window
 +WindowIcon on							# Show our icon in left corner
 +BGGradient off							# No big background window
 +CRCCheck on								# Make sure CRC is OK
 +InstProgressFlags smooth colored		# New colored smooth look
 +SetOverwrite on							# Overwrite files by default
 +AutoCloseWindow true					# After all files install, close window
  InstallDir "$PROGRAMFILES\${INSTNAME}"
  InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
 +UninstallText $(UninstallTextMsg)
  DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
  Page directory dirPre
  Page instfiles
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Variables
 +;; Variables
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Var INSTPROG
  Var INSTEXE
  Var INSTSHORTCUT
 -Var COMMANDLINE         ; command line passed to this installer, set in .onInit
 -Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer
 -Var SKIP_DIALOGS        ; set from command line in  .onInit. autoinstall 
 -                        ; GUI and the defaults.
 -Var SKIP_AUTORUN		; skip automatic launch of viewer after install
 -Var DO_UNINSTALL_V2     ; If non-null, path to a previous Viewer 2 installation that will be uninstalled.
 -
 -;;; Function definitions should go before file includes, because calls to
 -;;; DLLs like LangDLL trigger an implicit file include, so if that call is at
 -;;; the end of this script NSIS has to decompress the whole installer before 
 -;;; it can call the DLL function. JC
 -
 -!include "FileFunc.nsh"     ; For GetParameters, GetOptions
 +Var COMMANDLINE         # Command line passed to this installer, set in .onInit
 +Var SHORTCUT_LANG_PARAM # "--set InstallLanguage de", Passes language to viewer
 +Var SKIP_DIALOGS        # Set from command line in  .onInit. autoinstall GUI and the defaults.
 +Var SKIP_AUTORUN		# Skip automatic launch of the viewer after install
 +Var DO_UNINSTALL_V2     # If non-null, path to a previous Viewer 2 installation that will be uninstalled.
 +
 +# Function definitions should go before file includes, because calls to
 +# DLLs like LangDLL trigger an implicit file include, so if that call is at
 +# the end of this script NSIS has to decompress the whole installer before 
 +# it can call the DLL function. JC
 +
 +!include "FileFunc.nsh"     # For GetParameters, GetOptions
  !insertmacro GetParameters
  !insertmacro GetOptions
 -!include WinVer.nsh			; For OS and SP detection
 -!include x64.nsh			; For 64bit OS detection
 +!include WinVer.nsh			# For OS and SP detection
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; After install completes, launch app
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function .onInstSuccess
 -Call CheckWindowsServPack				; Warn if not on the latest SP before asking to launch.
 -    Push $R0	# Option value, unused
 -	StrCmp $SKIP_AUTORUN "true" +2;
 -	# Assumes SetOutPath $INSTDIR
 -	Exec '"$INSTDIR\$INSTEXE" $SHORTCUT_LANG_PARAM'
 -	Pop $R0
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Pre-directory page callback
 +;; Pre-directory page callback
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function dirPre
      StrCmp $SKIP_DIALOGS "true" 0 +2
  	Abort
 +
  FunctionEnd    
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Make sure this computer meets the minimum system requirements.
 -; Currently: Windows 32bit XP SP3, 64bit XP SP2 and Server 2003 SP2
 +;; Prep Installer Section
 +;;
 +;; Note: to add new languages, add a language file include to the list 
 +;; at the top of this file, add an entry to the menu and then add an 
 +;; entry to the language ID selector below
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckWindowsVersion
 -  ${If} ${AtMostWin2000}
 -    MessageBox MB_OK $(CheckWindowsVersionMB)
 +Function .onInit
 +Call CheckCPUFlags							# Make sure we have SSE2 support
 +Call CheckWindowsVersion					# Don't install On unsupported systems
 +    Push $0
 +    ${GetParameters} $COMMANDLINE			# Get our command line
 +
 +    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0   
 +    IfErrors +2 0	# If error jump past setting SKIP_DIALOGS
 +        StrCpy $SKIP_DIALOGS "true"
 +
 +	${GetOptions} $COMMANDLINE "/SKIP_AUTORUN" $0
 +	IfErrors +2 0 ; If error jump past setting SKIP_AUTORUN
 +		StrCpy $SKIP_AUTORUN "true"
 +
 +    ${GetOptions} $COMMANDLINE "/LANGID=" $0	# /LANGID=1033 implies US English
 +
 +# If no language (error), then proceed
 +    IfErrors lbl_configure_default_lang
 +# No error means we got a language, so use it
 +    StrCpy $LANGUAGE $0
 +    Goto lbl_return
 +
 +lbl_configure_default_lang:
 +# If we currently have a version of SL installed, default to the language of that install
 +# Otherwise don't change $LANGUAGE and it will default to the OS UI language.
 +    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 +    IfErrors +2 0	# If error skip the copy instruction 
 +	StrCpy $LANGUAGE $0
 +
 +# For silent installs, no language prompt, use default
 +    IfSilent lbl_return
 +    StrCmp $SKIP_DIALOGS "true" lbl_return
 +  
 +lbl_build_menu:
 +	Push ""
 +# Use separate file so labels can be UTF-16 but we can still merge changes into this ASCII file. JC
 +    !include "%%SOURCE%%\installers\windows\language_menu.nsi"
 +    
 +	Push A	# A means auto count languages for the auto count to work the first empty push (Push "") must remain
 +	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
 +	Pop $0
 +	StrCmp $0 "cancel" 0 +2
 +		Abort
 +    StrCpy $LANGUAGE $0
 +
 +# Save language in registry		
 +	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
 +lbl_return:
 +    Pop $0
 +    Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Prep Uninstaller Section
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.onInit
 +# Read language from registry and set for uninstaller. Key will be removed on successful uninstall
 +	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 +    IfErrors lbl_end
 +	StrCpy $LANGUAGE $0
 +lbl_end:
 +    Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Checks for CPU valid (must have SSE2 support)
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckCPUFlags
 +    Push $1
 +    System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
 +    IntCmp $1 1 OK_SSE2
 +    MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE2
      Quit
 -  ${EndIf}
 -  ${If} ${IsWinXP}
 -  ${AndIfNot} ${RunningX64}
 -  ${AndIfNot} ${IsServicePack} 3
 +  OK_SSE2:
 +    Pop $1
 +    Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Make sure this computer meets the minimum system requirements.
 +;; Currently: Windows Vista SP2
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function CheckWindowsVersion
 +  ${If} ${AtMostWin2003}
      MessageBox MB_OK $(CheckWindowsVersionMB)
      Quit
    ${EndIf}
 -  ${If} ${IsWinXP}
 -  ${AndIf} ${RunningX64}
 +  ${If} ${IsWinVista}
    ${AndIfNot} ${IsServicePack} 2
      MessageBox MB_OK $(CheckWindowsVersionMB)
      Quit
    ${EndIf}
 -  ${If} ${IsWin2003}
 +  ${If} ${IsWin2008}
    ${AndIfNot} ${IsServicePack} 2
      MessageBox MB_OK $(CheckWindowsVersionMB)
      Quit
    ${EndIf}
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;Recommend Upgrading Service Pack
 +;; Install Section
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckWindowsServPack
 -  ${If} ${IsWinVista}
 -  ${AndIfNot} ${IsServicePack} 2
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 +Section ""
 -  ${If} ${IsWin2008}
 -  ${AndIfNot} ${IsServicePack} 2
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 +SetShellVarContext all			# Install for all users (if you change this, change it in the uninstall as well)
 -  ${If} ${IsWin7}
 -  ${AndIfNot} ${IsServicePack} 1
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 +# Start with some default values.
 +StrCpy $INSTPROG "${INSTNAME}"
 +StrCpy $INSTEXE "${INSTEXE}"
 +StrCpy $INSTSHORTCUT "${SHORTCUT}"
 -  ${If} ${IsWin2008R2}
 -  ${AndIfNot} ${IsServicePack} 1
 -    MessageBox MB_OK $(CheckWindowsServPackMB)
 -    DetailPrint $(UseLatestServPackDP)
 -    Return
 -  ${EndIf}
 -FunctionEnd
 +Call CheckIfAdministrator		# Make sure the user can install/uninstall
 +Call CheckIfAlreadyCurrent		# Make sure this version is not already installed
 +Call CloseSecondLife			# Make sure Second Life not currently running
 +Call CheckNetworkConnection		# Ping secondlife.com
 +Call CheckWillUninstallV2		# Check if Second Life is already installed
 +
 +StrCmp $DO_UNINSTALL_V2 "" PRESERVE_DONE
 +PRESERVE_DONE:
 +
 +Call RemoveProgFilesOnInst		# Remove existing files to prevent certain errors when running the new version of the viewer
 +
 +# This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
 +%%INSTALL_FILES%%
 +
 +# Pass the installer's language to the client to use as a default
 +StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
 +
 +# Shortcuts in start menu
 +CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT"
 +SetOutPath "$INSTDIR"
 +CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
 +				"$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 +
 +
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
 +				"InternetShortcut" "URL" \
 +				"http://join.secondlife.com/"
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
 +				"InternetShortcut" "URL" \
 +				"http://www.secondlife.com/account/"
 +WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
 +				"InternetShortcut" "URL" \
 +                "http://wiki.secondlife.com/wiki/LSL_Portal"
 +CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
 +				'"$INSTDIR\uninst.exe"' ''
 +
 +# Other shortcuts
 +SetOutPath "$INSTDIR"
 +CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
 +        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 +CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
 +        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 +CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
 +				'"$INSTDIR\uninst.exe"' ''
 +
 +# Write registry
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
 +WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "Publisher" "Linden Research, Inc."
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLInfoAbout" "http://secondlife.com/whatis/"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLUpdateInfo" "http://secondlife.com/support/downloads/"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "HelpLink" "https://support.secondlife.com/contact-support/"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG"
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
 +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayVersion" "${VERSION_LONG}"
 +WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "EstimatedSize" "0x0001D500"		# ~117 MB
 +# BUG-2707 Disable SEHOP for installed viewer.
 +WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\$INSTEXE" "DisableExceptionChainValidation" 1
 +
 +# Write URL registry info
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
 +WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 +
 +# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks.
 +WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
 +WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 +
 +# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks.
 +WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 +
 +# Write out uninstaller
 +WriteUninstaller "$INSTDIR\uninst.exe"
 +
 +# Uninstall existing "Second Life Viewer 2" install if needed.
 +StrCmp $DO_UNINSTALL_V2 "" REMOVE_SLV2_DONE
 +  ExecWait '"$PROGRAMFILES\SecondLifeViewer2\uninst.exe" /S _?=$PROGRAMFILES\SecondLifeViewer2'
 +  Delete "$PROGRAMFILES\SecondLifeViewer2\uninst.exe"	# With _? option above, uninst.exe will be left behind.
 +  RMDir "$PROGRAMFILES\SecondLifeViewer2"	# Will remove only if empty.
 +
 +REMOVE_SLV2_DONE:
 +
 +SectionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Uninstall Section
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Section Uninstall
 +
 +# Start with some default values.
 +StrCpy $INSTPROG "${INSTNAME}"
 +StrCpy $INSTEXE "${INSTEXE}"
 +StrCpy $INSTSHORTCUT "${SHORTCUT}"
 +
 +# Make sure the user can install/uninstall
 +Call un.CheckIfAdministrator
 +
 +# Uninstall for all users (if you change this, change it in the install as well)
 +SetShellVarContext all			
 +
 +# Make sure we're not running
 +Call un.CloseSecondLife
 +
 +# Clean up registry keys and subkeys (these should all be !defines somewhere)
 +DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
 +DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
 +# BUG-2707 Remove entry that disabled SEHOP
 +DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\$INSTEXE"
 +
 +# Clean up shortcuts
 +Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
 +RMDir  "$SMPROGRAMS\$INSTSHORTCUT"
 +
 +Delete "$DESKTOP\$INSTSHORTCUT.lnk"
 +Delete "$INSTDIR\$INSTSHORTCUT.lnk"
 +Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
 +
 +# Remove the main installation directory
 +Call un.ProgramFiles
 +
 +# Clean up cache and log files, but leave them in-place for non AGNI installs.
 +Call un.UserSettingsFiles
 +
 +SectionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Make sure the user can install/uninstall
 +;; Make sure the user can install
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CheckIfAdministrator
      DetailPrint $(CheckAdministratorInstDP)
 @@ -216,10 +394,11 @@ Function CheckIfAdministrator          Quit
  lbl_is_admin:
      Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;
 +;; Make sure the user can uninstall
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function un.CheckIfAdministrator
      DetailPrint $(CheckAdministratorUnInstDP)
 @@ -230,11 +409,12 @@ Function un.CheckIfAdministrator          Quit
  lbl_is_admin:
      Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Checks to see if the current version has already been installed (according to the registry).
 -; If it has, allow user to bail out of install process.
 +;; Checks to see if the current version has already been installed (according to the registry).
 +;; If it has, allow user to bail out of install process.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CheckIfAlreadyCurrent
      Push $0
 @@ -246,26 +426,34 @@ Function CheckIfAlreadyCurrent  continue_install:
      Pop $0
      Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Checks for CPU valid (must have SSE2 support)
 +;; Function CheckWillUninstallV2               
 +;;
 +;; If called through auto-update, need to uninstall any existing V2 installation.
 +;; Don't want to end up with SecondLifeViewer2 and SecondLifeViewer installations
 +;;  existing side by side with no indication on which to use.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckCPUFlags
 -    Push $1
 -    System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1'
 -    IntCmp $1 1 OK_SSE2
 -    MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE2
 -    Quit
 +Function CheckWillUninstallV2
 +
 +  StrCpy $DO_UNINSTALL_V2 ""
 +
 +  StrCmp $SKIP_DIALOGS "true" 0 CHECKV2_DONE
 +  StrCmp $INSTDIR "$PROGRAMFILES\SecondLifeViewer2" CHECKV2_DONE	# Don't uninstall our own install dir.
 +  IfFileExists "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" CHECKV2_FOUND CHECKV2_DONE
 +
 +CHECKV2_FOUND:
 +  StrCpy $DO_UNINSTALL_V2 "true"
 +
 +CHECKV2_DONE:
 -  OK_SSE2:
 -    Pop $1
 -    Return
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Close the program, if running. Modifies no variables.
 -; Allows user to bail out of install process.
 +;; Close the program, if running. Modifies no variables.
 +;; Allows user to bail out of install process.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CloseSecondLife
    Push $0
 @@ -291,334 +479,134 @@ Function CloseSecondLife    DONE:
      Pop $0
      Return
 +
 +FunctionEnd
 +
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +;; Close the program, if running. Modifies no variables.
 +;; Allows user to bail out of uninstall process.
 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 +Function un.CloseSecondLife
 +  Push $0
 +  FindWindow $0 "Second Life" ""
 +  IntCmp $0 0 DONE
 +  MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
 +
 +  CANCEL_UNINSTALL:
 +    Quit
 +
 +  CLOSE:
 +    DetailPrint $(CloseSecondLifeUnInstDP)
 +    SendMessage $0 16 0 0
 +
 +  LOOP:
 +	  FindWindow $0 "Second Life" ""
 +	  IntCmp $0 0 DONE
 +	  Sleep 500
 +	  Goto LOOP
 +
 +  DONE:
 +    Pop $0
 +    Return
 +
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Test our connection to secondlife.com
 -; Also allows us to count attempted installs by examining web logs.
 -; *TODO: Return current SL version info and have installer check
 -; if it is up to date.
 +;; Test our connection to secondlife.com
 +;; Also allows us to count attempted installs by examining web logs.
 +;; *TODO: Return current SL version info and have installer check
 +;; if it is up to date.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function CheckNetworkConnection
      Push $0
      Push $1
      Push $2	# Option value for GetOptions
      DetailPrint $(CheckNetworkConnectionDP)
 -    ; Look for a tag value from the stub installer, used for statistics
 -    ; to correlate installs.  Default to "" if not found on command line.
 +# Look for a tag value from the stub installer, used for statistics to correlate installs.
 +# Default to "" if not found on command line.
      StrCpy $2 ""
      ${GetOptions} $COMMANDLINE "/STUBTAG=" $2
      GetTempFileName $0
 -    !define HTTP_TIMEOUT 5000 ; milliseconds
 -    ; Don't show secondary progress bar, this will be quick.
 +    !define HTTP_TIMEOUT 5000		# Milliseconds
 +# Don't show secondary progress bar, this will be quick.
      NSISdl::download_quiet \
          /TIMEOUT=${HTTP_TIMEOUT} \
          "http://install.secondlife.com/check/?stubtag=$2&version=${VERSION_LONG}" \
          $0
 -    Pop $1 ; Return value, either "success", "cancel" or an error message
 +    Pop $1		# Return value, either "success", "cancel" or an error message
      ; MessageBox MB_OK "Download result: $1"
      ; Result ignored for now
  	; StrCmp $1 "success" +2
  	;	DetailPrint "Connection failed: $1"
 -    Delete $0 ; temporary file
 +    Delete $0	# Temporary file
      Pop $2
      Pop $1
      Pop $0
      Return
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Function CheckOldExeName
 -; Viewer versions < 3.6.12 used the name 'SecondLife.exe'
 -; If that name is found in the install folder, delete it to invalidate any
 -; old shortcuts to it that may be in non-standard locations, so that the user
 -; does not end up running the old version (potentially getting caught in an 
 -; infinite update loop). See MAINT-3575
 -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -
 -Function CheckOldExeName
 -  IfFileExists "$INSTDIR\SecondLife.exe" CHECKOLDEXE_FOUND CHECKOLDEXE_DONE
 -
 -CHECKOLDEXE_FOUND:
 -  Delete "$INSTDIR\SecondLife.exe"
 -CHECKOLDEXE_DONE:
 -FunctionEnd
 -
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Function CheckWillUninstallV2               
 -;
 -; If we are being called through auto-update, we need to uninstall any
 -; existing V2 installation. Otherwise, we wind up with
 -; SecondLifeViewer2 and SecondLifeViewer installations existing side
 -; by side no indication which to use.
 -; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function CheckWillUninstallV2
 -
 -  StrCpy $DO_UNINSTALL_V2 ""
 -
 -  StrCmp $SKIP_DIALOGS "true" 0 CHECKV2_DONE
 -  StrCmp $INSTDIR "$PROGRAMFILES\SecondLifeViewer2" CHECKV2_DONE ; don't uninstall our own install dir.
 -  IfFileExists "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" CHECKV2_FOUND CHECKV2_DONE
 -
 -CHECKV2_FOUND:
 -  StrCpy $DO_UNINSTALL_V2 "true"
 -
 -CHECKV2_DONE:
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Save user files to temp location
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function PreserveUserFiles
 -
 -Push $0
 -Push $1
 -Push $2
 -
 -    RMDir /r "$TEMP\SecondLifeSettingsBackup"
 -    CreateDirectory "$TEMP\SecondLifeSettingsBackup"
 -    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -
 -  LOOP:
 -    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 -
 -    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -    ExpandEnvStrings $2 $2
 -
 -    CreateDirectory "$TEMP\SecondLifeSettingsBackup\$0"
 -    CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\$0"
 -
 -  CONTINUE:
 -    IntOp $0 $0 + 1
 -    Goto LOOP
 -  DONE:
 -
 -Pop $2
 -Pop $1
 -Pop $0
 -
 -; Copy files in Documents and Settings\All Users\SecondLife
 -Push $0
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -    StrCmp $0 "" +2
 -    CreateDirectory "$TEMP\SecondLifeSettingsBackup\AllUsers\"
 -    CopyFiles /SILENT "$2\Application Data\SecondLife\*" "$TEMP\SecondLifeSettingsBackup\AllUsers\"
 -Pop $0
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Restore user files from temp location
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RestoreUserFiles
 -
 -Push $0
 -Push $1
 -Push $2
 -
 -    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -
 -  LOOP:
 -    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 -
 -    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -    ExpandEnvStrings $2 $2
 -
 -    CreateDirectory "$2\Application Data\SecondLife\"
 -    CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\$0\*" "$2\Application Data\SecondLife\" 
 -
 -  CONTINUE:
 -    IntOp $0 $0 + 1
 -    Goto LOOP
 -  DONE:
 -
 -Pop $2
 -Pop $1
 -Pop $0
 -
 -; Copy files in Documents and Settings\All Users\SecondLife
 -Push $0
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -    StrCmp $0 "" +2
 -    CreateDirectory "$2\Application Data\SecondLife\"
 -    CopyFiles /SILENT "$TEMP\SecondLifeSettingsBackup\AllUsers\*" "$2\Application Data\SecondLife\" 
 -Pop $0
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Remove temp dirs
 +;; Delete files on install if previous install exists to prevent undesired behavior
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveTempUserFiles
 -
 -Push $0
 -Push $1
 -Push $2
 +Function RemoveProgFilesOnInst
 -    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -
 -  LOOP:
 -    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 -
 -    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -    ExpandEnvStrings $2 $2
 -
 -    RMDir /r "$TEMP\SecondLifeSettingsBackup\$0\*"
 -
 -  CONTINUE:
 -    IntOp $0 $0 + 1
 -    Goto LOOP
 -  DONE:
 -
 -Pop $2
 -Pop $1
 -Pop $0
 -
 -; Copy files in Documents and Settings\All Users\SecondLife
 -Push $0
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -    StrCmp $0 "" +2
 -    RMDir /r "$TEMP\SecondLifeSettingsBackup\AllUsers\*"
 -Pop $0
 -
 -FunctionEnd
 -
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Clobber user files - TEST ONLY
 -; This is here for testing, generally not desirable to call it.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;Function ClobberUserFilesTESTONLY
 -
 -;Push $0
 -;Push $1
 -;Push $2
 -;
 -;    StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 -;
 -;  LOOP:
 -;    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -;    StrCmp $1 "" DONE               ; no more users
 -;
 -;    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -;    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 -;
 -;    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 -;    ExpandEnvStrings $2 $2
 -;
 -;    RMDir /r "$2\Application Data\SecondLife\"
 -;
 -;  CONTINUE:
 -;    IntOp $0 $0 + 1
 -;    Goto LOOP
 -;  DONE:
 -;
 -;Pop $2
 -;Pop $1
 -;Pop $0
 -;
 -;; Copy files in Documents and Settings\All Users\SecondLife
 -;Push $0
 -;    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 -;    StrCmp $0 "" +2
 -;    RMDir /r "$2\Application Data\SecondLife\"
 -;Pop $0
 -;
 -;FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Delete the installed shader files
 -;;; Since shaders are in active development, we'll likely need to shuffle them
 -;;; around a bit from build to build.  This ensures that shaders that we move
 -;;; or rename in the dev tree don't get left behind in the install.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveOldShaders
 -
 -;; Remove old shader files first so fallbacks will work. see DEV-5663
 -RMDir /r "$INSTDIR\app_settings\shaders\*"
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Delete the installed XUI files
 -;;; We've changed the directory hierarchy for skins, putting all XUI and texture
 -;;; files under a specific skin directory, i.e. skins/default/xui/en-us as opposed
 -;;; to skins/xui/en-us.  Need to clean up the old path when upgrading
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveOldXUI
 +# Remove old SecondLife.exe to invalidate any old shortcuts to it that may be in non-standard locations. See MAINT-3575
 +Delete "$INSTDIR\SecondLife.exe"
 -;; remove old XUI and texture files
 -RmDir /r "$INSTDIR\skins\html"
 -RmDir /r "$INSTDIR\skins\xui"
 -RmDir /r "$INSTDIR\skins\textures"
 -Delete "$INSTDIR\skins\*.txt"
 +# Remove old shader files first so fallbacks will work. See DEV-5663
 +RMDir /r "$INSTDIR\app_settings\shaders"
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Remove any releasenotes files.
 -;;; We are no longer including release notes with the viewer. This will delete
 -;;; any that were left behind by an older installer. Delete will not fail if
 -;;; the files do not exist
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function RemoveOldReleaseNotes
 +# Remove skins folder to clean up files removed during development
 +RMDir /r "$INSTDIR\skins"
 -;; remove releasenotes.txt file from application directory, and the shortcut
 -;; from the start menu.
 +# We are no longer including release notes with the viewer, so remove them.
  Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk"
  Delete "$INSTDIR\releasenotes.txt"
  FunctionEnd
 -
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Delete files in Documents and Settings\<user>\SecondLife
 -; Delete files in Documents and Settings\All Users\SecondLife
 +;; Delete files in \Users\<User>\AppData\
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function un.DocumentsAndSettingsFolder
 +Function un.UserSettingsFiles
 +
 +StrCmp $DO_UNINSTALL_V2 "true" Keep			# Don't remove user's settings files on auto upgrade
 -; Delete files in Documents and Settings\<user>\SecondLife
 +# Ask if user wants to keep data files or not
 +MessageBox MB_YESNO|MB_ICONQUESTION $(RemoveDataFilesMB) IDYES Remove IDNO Keep
 +
 +Remove:
  Push $0
  Push $1
  Push $2
 -  DetailPrint "Deleting files in Documents and Settings folder"
 +  DetailPrint "Deleting Second Life data files"
 -  StrCpy $0 0 ; Index number used to iterate via EnumRegKey
 +  StrCpy $0 0	# Index number used to iterate via EnumRegKey
    LOOP:
      EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 -    StrCmp $1 "" DONE               ; no more users
 +    StrCmp $1 "" DONE               # No more users
      ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath" 
 -    StrCmp $2 "" CONTINUE 0         ; "ProfileImagePath" value is missing
 +    StrCmp $2 "" CONTINUE 0         # "ProfileImagePath" value is missing
 -    ; Required since ProfileImagePath is of type REG_EXPAND_SZ
 +# Required since ProfileImagePath is of type REG_EXPAND_SZ
      ExpandEnvStrings $2 $2
 -        ; Remove all cache and settings files but leave any other .txt files to preserve the chat logs
 -;    RMDir /r "$2\Application Data\SecondLife\logs"
 -    RMDir /r "$2\Application Data\SecondLife\browser_profile"
 -    RMDir /r "$2\Application Data\SecondLife\user_settings"
 -    Delete  "$2\Application Data\SecondLife\*.xml"
 -    Delete  "$2\Application Data\SecondLife\*.bmp"
 -    Delete  "$2\Application Data\SecondLife\search_history.txt"
 -    Delete  "$2\Application Data\SecondLife\plugin_cookies.txt"
 -    Delete  "$2\Application Data\SecondLife\typed_locations.txt"
 +# Delete files in \Users\<User>\AppData\Roaming\SecondLife
 +# Remove all settings files but leave any other .txt files to preserve the chat logs
 +;    RMDir /r "$2\AppData\Roaming\SecondLife\logs"
 +    RMDir /r "$2\AppData\Roaming\SecondLife\browser_profile"
 +    RMDir /r "$2\AppData\Roaming\SecondLife\user_settings"
 +    Delete  "$2\AppData\Roaming\SecondLife\*.xml"
 +    Delete  "$2\AppData\Roaming\SecondLife\*.bmp"
 +    Delete  "$2\AppData\Roaming\SecondLife\search_history.txt"
 +    Delete  "$2\AppData\Roaming\SecondLife\plugin_cookies.txt"
 +    Delete  "$2\AppData\Roaming\SecondLife\typed_locations.txt"
 +# Delete files in \Users\<User>\AppData\Local\SecondLife
 +    RmDir /r  "$2\AppData\Local\SecondLife"							#Delete the cache folder
    CONTINUE:
      IntOp $0 $0 + 1
 @@ -629,82 +617,30 @@ Pop $2  Pop $1
  Pop $0
 -; Delete files in Documents and Settings\All Users\SecondLife
 +# Delete files in ProgramData\Secondlife
  Push $0
    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
    StrCmp $0 "" +2
    RMDir /r "$0\SecondLife"
  Pop $0
 -; Delete files in C:\Windows\Application Data\SecondLife
 -; If the user is running on a pre-NT system, Application Data lives here instead of
 -; in Documents and Settings.
 -RMDir /r "$WINDIR\Application Data\SecondLife"
 -
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Close the program, if running. Modifies no variables.
 -; Allows user to bail out of uninstall process.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function un.CloseSecondLife
 -  Push $0
 -  FindWindow $0 "Second Life" ""
 -  IntCmp $0 0 DONE
 -  MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
 -
 -  CANCEL_UNINSTALL:
 -    Quit
 -
 -  CLOSE:
 -    DetailPrint $(CloseSecondLifeUnInstDP)
 -    SendMessage $0 16 0 0
 -
 -  LOOP:
 -	  FindWindow $0 "Second Life" ""
 -	  IntCmp $0 0 DONE
 -	  Sleep 500
 -	  Goto LOOP
 -
 -  DONE:
 -    Pop $0
 -    Return
 -FunctionEnd
 -
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;
 -;   Delete the stored password for the current Windows user
 -;   DEV-10821 -- Unauthorised user can gain access to an SL account after a real user has uninstalled
 -;
 -Function un.RemovePassword
 -
 -DetailPrint "Removing Second Life password"
 -
 -SetShellVarContext current
 -Delete "$APPDATA\SecondLife\user_settings\password.dat"
 -SetShellVarContext all
 +Keep:
  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Delete the installed files
 -;;; This deletes the uninstall executable, but it works 
 -;;; because it is copied to temp directory before running
 -;;;
 -;;; Note:  You must list all files here, because we only
 -;;; want to delete our files, not things users left in the
 -;;; application directories.
 +;; Delete the installed files
 +;; This deletes the uninstall executable, but it works because it is copied to temp directory before running
 +;;
 +;; Note:  You must list all files here, because we only want to delete our files,
 +;; not things users left in the program directory.
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  Function un.ProgramFiles
 -;; Remove mozilla file first so recursive directory deletion doesn't get hung up
 -Delete "$INSTDIR\app_settings\mozilla\components"
 -
 -;; This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
 +# This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py
  %%DELETE_FILES%%
 -;; Optional/obsolete files.  Delete won't fail if they don't exist.
 +# Optional/obsolete files.  Delete won't fail if they don't exist.
  Delete "$INSTDIR\dronesettings.ini"
  Delete "$INSTDIR\message_template.msg"
  Delete "$INSTDIR\newview.pdb"
 @@ -717,19 +653,12 @@ Delete "$INSTDIR\motions\*.lla"  Delete "$INSTDIR\trial\*.html"
  Delete "$INSTDIR\newview.exe"
  Delete "$INSTDIR\SecondLife.exe"
 -;; MAINT-3099 workaround - prevent these log files, if present, from causing a user alert
 +
 +# MAINT-3099 workaround - prevent these log files, if present, from causing a user alert
  Delete "$INSTDIR\VivoxVoiceService-*.log"
 -;; Remove entire help directory
 -Delete "$INSTDIR\help\Advanced\*"
 -RMDir  "$INSTDIR\help\Advanced"
 -Delete "$INSTDIR\help\basics\*"
 -RMDir  "$INSTDIR\help\basics"
 -Delete "$INSTDIR\help\Concepts\*"
 -RMDir  "$INSTDIR\help\Concepts"
 -Delete "$INSTDIR\help\welcome\*"
 -RMDir  "$INSTDIR\help\welcome"
 -Delete "$INSTDIR\help\*"
 -RMDir  "$INSTDIR\help"
 +
 +# Remove entire help directory
 +RMDir /r  "$INSTDIR\help"
  Delete "$INSTDIR\uninst.exe"
  RMDir "$INSTDIR"
 @@ -737,7 +666,7 @@ RMDir "$INSTDIR"  IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
  FOLDERFOUND:
 -  ; Silent uninstall always removes all files (/SD IDYES)
 +# Silent uninstall always removes all files (/SD IDYES)
    MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
    RMDir /r "$INSTDIR"
 @@ -746,240 +675,78 @@ NOFOLDER:  FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Uninstall settings
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -UninstallText $(UninstallTextMsg)
 -ShowUninstDetails show
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Uninstall section
 +;; After install completes, launch app
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Section Uninstall
 -
 -; Start with some default values.
 -StrCpy $INSTPROG "${INSTNAME}"
 -StrCpy $INSTEXE "${INSTEXE}"
 -StrCpy $INSTSHORTCUT "${SHORTCUT}"
 -Call un.CheckIfAdministrator		; Make sure the user can install/uninstall
 -
 -; uninstall for all users (if you change this, change it in the install as well)
 -SetShellVarContext all			
 -
 -; Make sure we're not running
 -Call un.CloseSecondLife
 -
 -; Clean up registry keys and subkeys (these should all be !defines somewhere)
 -DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
 -DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
 -
 -; Clean up shortcuts
 -Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
 -RMDir  "$SMPROGRAMS\$INSTSHORTCUT"
 -
 -Delete "$DESKTOP\$INSTSHORTCUT.lnk"
 -Delete "$INSTDIR\$INSTSHORTCUT.lnk"
 -Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk"
 -
 -; Clean up cache and log files.
 -; Leave them in-place for non AGNI installs.
 -
 -!ifdef UNINSTALL_SETTINGS
 -Call un.DocumentsAndSettingsFolder
 -!endif
 -
 -; remove stored password on uninstall
 -Call un.RemovePassword
 -
 -Call un.ProgramFiles
 +Function .onInstSuccess
 +Call CheckWindowsServPack		# Warn if not on the latest SP before asking to launch.
 +	Push $R0					# Option value, unused
 +	StrCmp $SKIP_AUTORUN "true" +2;
 +# Assumes SetOutPath $INSTDIR
 +	Exec '"$WINDIR\explorer.exe" "$INSTDIR\$INSTEXE"'
 +	Pop $R0
 -SectionEnd 				; end of uninstall section
 +FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;  Note: to add new languages, add a language file include to the list 
 -;;  at the top of this file, add an entry to the menu and then add an 
 -;;  entry to the language ID selector below
 +;; Recommend Upgrading to Service Pack 1 for Windows 7, if not present
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function .onInit
 -Call CheckWindowsVersion		; Don't install On unsupported systems
 -    Push $0
 -    ${GetParameters} $COMMANDLINE              ; get our command line
 -
 -    ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0   
 -    IfErrors +2 0 ; If error jump past setting SKIP_DIALOGS
 -        StrCpy $SKIP_DIALOGS "true"
 -
 -	${GetOptions} $COMMANDLINE "/SKIP_AUTORUN" $0
 -    IfErrors +2 0 ; If error jump past setting SKIP_AUTORUN
 -		StrCpy $SKIP_AUTORUN "true"
 -
 -    ${GetOptions} $COMMANDLINE "/LANGID=" $0   ; /LANGID=1033 implies US English
 -
 -    ; If no language (error), then proceed
 -    IfErrors lbl_configure_default_lang
 -    ; No error means we got a language, so use it
 -    StrCpy $LANGUAGE $0
 -    Goto lbl_return
 -
 -lbl_configure_default_lang:
 -    ; If we currently have a version of SL installed, default to the language of that install
 -    ; Otherwise don't change $LANGUAGE and it will default to the OS UI language.
 -    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 -    IfErrors +2 0 ; If error skip the copy instruction 
 -	StrCpy $LANGUAGE $0
 -
 -    ; For silent installs, no language prompt, use default
 -    IfSilent lbl_return
 -    StrCmp $SKIP_DIALOGS "true" lbl_return
 -  
 -lbl_build_menu:
 -	Push ""
 -    # Use separate file so labels can be UTF-16 but we can still merge changes
 -    # into this ASCII file. JC
 -    !include "%%SOURCE%%\installers\windows\language_menu.nsi"
 -    
 -	Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
 -	LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage)
 -	Pop $0
 -	StrCmp $0 "cancel" 0 +2
 -		Abort
 -    StrCpy $LANGUAGE $0
 -
 -	; save language in registry		
 -	WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
 -lbl_return:
 -    Pop $0
 +Function CheckWindowsServPack
 +  ${If} ${IsWin7}
 +  ${AndIfNot} ${IsServicePack} 1
 +    MessageBox MB_OK $(CheckWindowsServPackMB)
 +    DetailPrint $(UseLatestServPackDP)
      Return
 -FunctionEnd
 +  ${EndIf}
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Function un.onInit
 -	; read language from registry and set for uninstaller
 -    ; Key will be removed on successful uninstall
 -	ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
 -    IfErrors lbl_end
 -	StrCpy $LANGUAGE $0
 -lbl_end:
 +  ${If} ${IsWin2008R2}
 +  ${AndIfNot} ${IsServicePack} 1
 +    MessageBox MB_OK $(CheckWindowsServPackMB)
 +    DetailPrint $(UseLatestServPackDP)
      Return
 -FunctionEnd
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; MAIN SECTION
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -Section ""						; (default section)
 -
 -SetShellVarContext all			; install for all users (if you change this, change it in the uninstall as well)
 -
 -; Start with some default values.
 -StrCpy $INSTPROG "${INSTNAME}"
 -StrCpy $INSTEXE "${INSTEXE}"
 -StrCpy $INSTSHORTCUT "${SHORTCUT}"
 -
 -Call CheckCPUFlags				; Make sure we have SSE2 support
 -Call CheckIfAdministrator		; Make sure the user can install/uninstall
 -Call CheckIfAlreadyCurrent		; Make sure that we haven't already installed this version
 -Call CloseSecondLife			; Make sure we're not running
 -Call CheckNetworkConnection		; ping secondlife.com
 -Call CheckWillUninstallV2		; See if a V2 install exists and will be removed.
 -Call CheckOldExeName                    ; Clean up a previous version of the exe
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -StrCmp $DO_UNINSTALL_V2 "" PRESERVE_DONE
 -  Call PreserveUserFiles
 -PRESERVE_DONE:
 -
 -;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
 -;Call RemoveCacheFiles			; Installing over removes potentially corrupted
 -								; VFS and cache files.
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Need to clean out shader files from previous installs to fix DEV-5663
 -Call RemoveOldShaders
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Need to clean out old XUI files that predate skinning
 -Call RemoveOldXUI
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Clear out old releasenotes.txt files. These are now on the public wiki.
 -Call RemoveOldReleaseNotes
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;;; Files
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
 -%%INSTALL_FILES%%
 -
 -# Pass the installer's language to the client to use as a default
 -StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)"
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Shortcuts in start menu
 -CreateDirectory	"$SMPROGRAMS\$INSTSHORTCUT"
 -SetOutPath "$INSTDIR"
 -CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \
 -				"$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 -
 -
 -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \
 -				"InternetShortcut" "URL" \
 -				"http://join.secondlife.com/"
 -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \
 -				"InternetShortcut" "URL" \
 -				"http://www.secondlife.com/account/"
 -WriteINIStr		"$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \
 -				"InternetShortcut" "URL" \
 -                "http://wiki.secondlife.com/wiki/LSL_Portal"
 -CreateShortCut	"$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
 -				'"$INSTDIR\uninst.exe"' ''
 -
 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Other shortcuts
 -SetOutPath "$INSTDIR"
 -CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \
 -        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 -CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \
 -        "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM"
 -CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \
 -				'"$INSTDIR\uninst.exe"' ''
 +  ${EndIf}
 +FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Write registry
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT"
 -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE"
 -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
 -WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe"'
 -
 +;; Clobber user files - TEST ONLY
 +;; This is here for testing, DO NOT USE UNLESS YOU KNOW WHAT YOU ARE TESTING FOR!
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 -; Write URL registry info
 -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
 -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
 -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 -;; URL param must be last item passed to viewer, it ignores subsequent params
 -;; to avoid parameter injection attacks.
 -WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life"
 -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" ""
 -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"'
 -;; URL param must be last item passed to viewer, it ignores subsequent params
 -;; to avoid parameter injection attacks.
 -WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"'
 -
 -; write out uninstaller
 -WriteUninstaller "$INSTDIR\uninst.exe"
 -
 -; Uninstall existing "Second Life Viewer 2" install if needed.
 -StrCmp $DO_UNINSTALL_V2 "" REMOVE_SLV2_DONE
 -  ExecWait '"$PROGRAMFILES\SecondLifeViewer2\uninst.exe" /S _?=$PROGRAMFILES\SecondLifeViewer2'
 -  Delete "$PROGRAMFILES\SecondLifeViewer2\uninst.exe" ; with _? option above, uninst.exe will be left behind.
 -  RMDir "$PROGRAMFILES\SecondLifeViewer2" ; will remove only if empty.
 -
 -  Call RestoreUserFiles
 -  Call RemoveTempUserFiles
 -REMOVE_SLV2_DONE:
 +;Function ClobberUserFilesTESTONLY
 -; end of default section
 -SectionEnd
 +;Push $0
 +;Push $1
 +;Push $2
 +;
 +;    StrCpy $0 0	# Index number used to iterate via EnumRegKey
 +;
 +;  LOOP:
 +;    EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
 +;    StrCmp $1 "" DONE               # no more users
 +;
 +;    ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
 +;    StrCmp $2 "" CONTINUE 0         # "ProfileImagePath" value is missing
 +;
 +;# Required since ProfileImagePath is of type REG_EXPAND_SZ
 +;    ExpandEnvStrings $2 $2
 +;
 +;    RMDir /r "$2\Application Data\SecondLife\"
 +;
 +;  CONTINUE:
 +;    IntOp $0 $0 + 1
 +;    Goto LOOP
 +;  DONE:
 +;
 +;Pop $2
 +;Pop $1
 +;Pop $0
 +;
 +;# Copy files in Documents and Settings\All Users\SecondLife
 +;Push $0
 +;    ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
 +;    StrCmp $0 "" +2
 +;    RMDir /r "$2\Application Data\SecondLife\"
 +;Pop $0
 +;
 +;FunctionEnd
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsiBinary files differ index 2352649b4b..83e1a3ea94 100755 --- a/indra/newview/installers/windows/lang_da.nsi +++ b/indra/newview/installers/windows/lang_da.nsi diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsiBinary files differ index 397262afe1..866accae99 100755 --- a/indra/newview/installers/windows/lang_de.nsi +++ b/indra/newview/installers/windows/lang_de.nsi diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsiBinary files differ index df0d55d9e0..343c312ddc 100755 --- a/indra/newview/installers/windows/lang_en-us.nsi +++ b/indra/newview/installers/windows/lang_en-us.nsi diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsiBinary files differ index 32967a0dfa..f4f0786332 100755 --- a/indra/newview/installers/windows/lang_es.nsi +++ b/indra/newview/installers/windows/lang_es.nsi diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsiBinary files differ index 7c75e25360..1b5dbfc975 100755 --- a/indra/newview/installers/windows/lang_fr.nsi +++ b/indra/newview/installers/windows/lang_fr.nsi diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsiBinary files differ index ce66b61f9f..a456e6e417 100755 --- a/indra/newview/installers/windows/lang_it.nsi +++ b/indra/newview/installers/windows/lang_it.nsi diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsiBinary files differ index e68830123a..5b1c5f4ce9 100755 --- a/indra/newview/installers/windows/lang_ja.nsi +++ b/indra/newview/installers/windows/lang_ja.nsi diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsiBinary files differ index 7883819190..a172f0cdeb 100755 --- a/indra/newview/installers/windows/lang_pl.nsi +++ b/indra/newview/installers/windows/lang_pl.nsi diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsiBinary files differ index eb3fb2386c..9ef252d232 100755 --- a/indra/newview/installers/windows/lang_pt-br.nsi +++ b/indra/newview/installers/windows/lang_pt-br.nsi diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsiBinary files differ index 3b0042fbf5..d7c728d3e2 100755 --- a/indra/newview/installers/windows/lang_ru.nsi +++ b/indra/newview/installers/windows/lang_ru.nsi diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsiBinary files differ index b9be1eab08..97c602f4fc 100755 --- a/indra/newview/installers/windows/lang_tr.nsi +++ b/indra/newview/installers/windows/lang_tr.nsi diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsiBinary files differ index 3c6f6fd289..39c005a683 100755 --- a/indra/newview/installers/windows/lang_zh.nsi +++ b/indra/newview/installers/windows/lang_zh.nsi diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 99fa12fc32..359171c5bd 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -410,10 +410,8 @@ LLAgent::LLAgent() :  	mCurrentFidget(0),  	mFirstLogin(FALSE),  	mOutfitChosen(FALSE), -	 -	mVoiceConnected(false), -	mAppearanceSerialNum(0), +	mVoiceConnected(false),  	mMouselookModeInSignal(NULL),  	mMouselookModeOutSignal(NULL) @@ -2262,8 +2260,6 @@ void LLAgent::heardChat(const LLUUID& id)  	mChatTimer.reset();  } -const F32 SIT_POINT_EXTENTS = 0.2f; -  LLSD ll_sdmap_from_vector3(const LLVector3& vec)  {      LLSD ret; diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 33088283da..4830cb754b 100755 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -791,8 +791,7 @@ public:  private:  	BOOL			mShowAvatar; 		// Should we render the avatar? -	U32				mAppearanceSerialNum; -	 +  	//--------------------------------------------------------------------  	// Rendering state bitmap helpers  	//-------------------------------------------------------------------- diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index b0b2cfd435..7f0330ee99 100755 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -886,7 +886,6 @@ void LLAgentCamera::cameraZoomIn(const F32 fraction)  	} -	LLVector3d	camera_offset(mCameraFocusOffsetTarget);  	LLVector3d	camera_offset_unit(mCameraFocusOffsetTarget);  	F32 min_zoom = LAND_MIN_ZOOM;  	F32 current_distance = (F32)camera_offset_unit.normalize(); @@ -958,7 +957,6 @@ void LLAgentCamera::cameraOrbitIn(const F32 meters)  	}  	else  	{ -		LLVector3d	camera_offset(mCameraFocusOffsetTarget);  		LLVector3d	camera_offset_unit(mCameraFocusOffsetTarget);  		F32 current_distance = (F32)camera_offset_unit.normalize();  		F32 new_distance = current_distance - meters; diff --git a/indra/newview/llagentpilot.cpp b/indra/newview/llagentpilot.cpp index 44589f0d57..cfc445f998 100755 --- a/indra/newview/llagentpilot.cpp +++ b/indra/newview/llagentpilot.cpp @@ -84,7 +84,7 @@ void LLAgentPilot::loadTxt(const std::string& filename)  		return;  	} -	llifstream file(filename); +	llifstream file(filename.c_str());  	if (!file)  	{ @@ -125,7 +125,7 @@ void LLAgentPilot::loadXML(const std::string& filename)  		return;  	} -	llifstream file(filename); +	llifstream file(filename.c_str());  	if (!file)  	{ @@ -168,7 +168,7 @@ void LLAgentPilot::save()  void LLAgentPilot::saveTxt(const std::string& filename)  {  	llofstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (!file)  	{ @@ -191,7 +191,7 @@ void LLAgentPilot::saveTxt(const std::string& filename)  void LLAgentPilot::saveXML(const std::string& filename)  {  	llofstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (!file)  	{ diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d7ef5fcba7..a64d5b50b3 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3790,7 +3790,7 @@ bool LLAppearanceMgr::moveWearable(LLViewerInventoryItem* item, bool closer_to_b  	//to cause appearance of the agent to be updated  	bool result = false; -	if (result = gAgentWearables.moveWearable(item, closer_to_body)) +	if ((result = gAgentWearables.moveWearable(item, closer_to_body)))  	{  		gAgentAvatarp->wearableUpdated(item->getWearableType());  	} diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 54c5d1b9f4..6dc71bc94e 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -747,6 +747,15 @@ public:  	}  }; +namespace { +// With Xcode 6, _exit() is too magical to use with boost::bind(), so provide +// this little helper function. +void fast_exit(int rc) +{ +	_exit(rc); +} +} +  bool LLAppViewer::init()  {	  	setupErrorHandling(mSecondInstance); @@ -803,10 +812,10 @@ bool LLAppViewer::init()  	S32 rc(gSavedSettings.getS32("QAModeTermCode"));  	if (rc >= 0)  	{ -		// QAModeTermCode set, terminate with that rc on LL_ERRS. Use _exit() -		// rather than exit() because normal cleanup depends too much on -		// successful startup! -		LLError::setFatalFunction(boost::bind(_exit, rc)); +		// QAModeTermCode set, terminate with that rc on LL_ERRS. Use +		// fast_exit() rather than exit() because normal cleanup depends too +		// much on successful startup! +		LLError::setFatalFunction(boost::bind(fast_exit, rc));  	}      mAlloc.setProfilingEnabled(gSavedSettings.getBOOL("MemProfiling")); @@ -1681,19 +1690,12 @@ bool LLAppViewer::cleanup()  	//dump scene loading monitor results  	LLSceneMonitor::instance().dumpToFile(gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "scene_monitor_results.csv")); -	if (LLFastTimerView::sAnalyzePerformance) -	{ -		LL_INFOS() << "Analyzing performance" << LL_ENDL; -		std::string baseline_name = LLTrace::BlockTimer::sLogName + "_baseline.slp"; -		std::string current_name  = LLTrace::BlockTimer::sLogName + ".slp";  -		std::string report_name   = LLTrace::BlockTimer::sLogName + "_report.csv"; - -		LLFastTimerView::doAnalysis( -			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name), -			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, current_name), -			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, report_name));		 -	} -	LLMetricPerformanceTesterBasic::cleanClass(); +	// There used to be an 'if (LLFastTimerView::sAnalyzePerformance)' block +	// here, completely redundant with the one that occurs later in this same +	// function. Presumably the duplication was due to an automated merge gone +	// bad. Not knowing which instance to prefer, we chose to retain the later +	// one because it happens just after mFastTimerLogThread is deleted. This +	// comment is in case we guessed wrong, so we can move it here instead.  	// remove any old breakpad minidump files from the log directory  	if (! isError()) @@ -2038,7 +2040,7 @@ bool LLAppViewer::cleanup()      sImageDecodeThread = NULL;  	delete mFastTimerLogThread;  	mFastTimerLogThread = NULL; -	 +  	if (LLFastTimerView::sAnalyzePerformance)  	{  		LL_INFOS() << "Analyzing performance" << LL_ENDL; @@ -3273,7 +3275,7 @@ void LLAppViewer::writeDebugInfo(bool isStatic)          : getDynamicDebugFile() );  	LL_INFOS() << "Opening debug file " << *debug_filename << LL_ENDL; -	llofstream out_file(*debug_filename); +	llofstream out_file(debug_filename->c_str());      isStatic ?  LLSDSerialize::toPrettyXML(gDebugInfo, out_file)               :  LLSDSerialize::toPrettyXML(gDebugInfo["Dynamic"], out_file); @@ -3762,7 +3764,7 @@ void LLAppViewer::handleViewerCrash()  	{  		std::string filename;  		filename = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "stats.log"); -		llofstream file(filename, llofstream::binary); +		llofstream file(filename.c_str(), std::ios_base::binary);  		if(file.good())  		{  			LL_INFOS() << "Handle viewer crash generating stats log." << LL_ENDL; @@ -4650,17 +4652,22 @@ void LLAppViewer::loadNameCache()  	std::string filename =  		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml");  	LL_INFOS("AvNameCache") << filename << LL_ENDL; -	llifstream name_cache_stream(filename); +	llifstream name_cache_stream(filename.c_str());  	if(name_cache_stream.is_open())  	{ -		LLAvatarNameCache::importFile(name_cache_stream); +		if ( ! LLAvatarNameCache::importFile(name_cache_stream)) +        { +            LL_WARNS("AppInit") << "removing invalid '" << filename << "'" << LL_ENDL; +            name_cache_stream.close(); +            LLFile::remove(filename); +        }  	}  	if (!gCacheName) return;  	std::string name_cache;  	name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache"); -	llifstream cache_file(name_cache); +	llifstream cache_file(name_cache.c_str());  	if(cache_file.is_open())  	{  		if(gCacheName->importFile(cache_file)) return; @@ -4668,24 +4675,26 @@ void LLAppViewer::loadNameCache()  }  void LLAppViewer::saveNameCache() -	{ +{  	// display names cache  	std::string filename =  		gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "avatar_name_cache.xml"); -	llofstream name_cache_stream(filename); +	llofstream name_cache_stream(filename.c_str());  	if(name_cache_stream.is_open())  	{  		LLAvatarNameCache::exportFile(name_cache_stream); -} - -	if (!gCacheName) return; - -	std::string name_cache; -	name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache"); -	llofstream cache_file(name_cache); -	if(cache_file.is_open()) -	{ -		gCacheName->exportFile(cache_file); +    } +     +    // real names cache +	if (gCacheName) +    { +        std::string name_cache; +        name_cache = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "name.cache"); +        llofstream cache_file(name_cache.c_str()); +        if(cache_file.is_open()) +        { +            gCacheName->exportFile(cache_file); +        }  	}  } diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index c792eb8813..56154a2de3 100755 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -63,16 +63,7 @@ namespace  	int gArgC;  	char** gArgV;  	LLAppViewerMacOSX* gViewerAppPtr; -#ifdef LL_CARBON_CRASH_HANDLER -	OSErr AEQuitHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn) -	{ -		OSErr result = noErr; -		 -		LLAppViewer::instance()->userQuit(); -		 -		return(result); -	} -#endif +      void (*gOldTerminateHandler)() = NULL;  } diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp index 02e88a8b89..d2b1dcbf35 100755 --- a/indra/newview/llassetuploadresponders.cpp +++ b/indra/newview/llassetuploadresponders.cpp @@ -63,9 +63,6 @@  #include "llsdutil.h"  #include "llvfs.h" -// When uploading multiple files, don't display any of them when uploading more than this number. -static const S32 FILE_COUNT_DISPLAY_THRESHOLD = 5; -  void dialog_refresh_all();  void on_new_single_inventory_upload_complete( diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index 746b541f9d..281e591b48 100755 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -76,7 +76,7 @@ void LLAvatarIconIDCache::load	()  	// build filename for each user  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename); -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  		return; @@ -114,7 +114,7 @@ void LLAvatarIconIDCache::save	()  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, mFilename);  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file (resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open avatar icons cache file\"" << mFilename << "\" for writing" << LL_ENDL; diff --git a/indra/newview/llblocklist.cpp b/indra/newview/llblocklist.cpp index 1c68fabf8b..272a68bdf7 100755 --- a/indra/newview/llblocklist.cpp +++ b/indra/newview/llblocklist.cpp @@ -40,7 +40,6 @@ static const LLBlockListNameTypeComparator	NAME_TYPE_COMPARATOR;  LLBlockList::LLBlockList(const Params& p)  :	LLFlatListViewEx(p), - 	mSelectedItem(NULL),   	mDirty(true),  	mShouldAddAll(true),  	mActionType(NONE), diff --git a/indra/newview/llblocklist.h b/indra/newview/llblocklist.h index bac79f869e..0f7fa41c32 100755 --- a/indra/newview/llblocklist.h +++ b/indra/newview/llblocklist.h @@ -83,7 +83,6 @@ private:  	LLHandle<LLToggleableMenu>	mContextMenu; -	LLBlockedListItem*			mSelectedItem;  	std::string 				mNameFilter;  	bool 						mDirty;  	bool						mShouldAddAll; diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp index 28e367fbe1..d8b04f7004 100755 --- a/indra/newview/llchicletbar.cpp +++ b/indra/newview/llchicletbar.cpp @@ -35,16 +35,6 @@  namespace  {  	const std::string& PANEL_CHICLET_NAME	= "chiclet_list_panel"; - -	S32 get_curr_width(LLUICtrl* ctrl) -	{ -		S32 cur_width = 0; -		if ( ctrl && ctrl->getVisible() ) -		{ -			cur_width = ctrl->getRect().getWidth(); -		} -		return cur_width; -	}  }  LLChicletBar::LLChicletBar(const LLSD&) diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp index 06164e9597..1819fc74ee 100755 --- a/indra/newview/llcommandlineparser.cpp +++ b/indra/newview/llcommandlineparser.cpp @@ -622,7 +622,7 @@ void LLControlGroupCLP::configure(const std::string& config_filename, LLControlG      LLSD clpConfigLLSD;      llifstream input_stream; -    input_stream.open(config_filename, std::ios::in | std::ios::binary); +    input_stream.open(config_filename.c_str(), std::ios::in | std::ios::binary);      if(input_stream.is_open())      { diff --git a/indra/newview/llcommunicationchannel.cpp b/indra/newview/llcommunicationchannel.cpp index 0821510645..cf98b56b4c 100755 --- a/indra/newview/llcommunicationchannel.cpp +++ b/indra/newview/llcommunicationchannel.cpp @@ -103,11 +103,11 @@ void LLCommunicationChannel::onDelete(LLNotificationPtr p)  void LLCommunicationChannel::onFilterFail(LLNotificationPtr pNotificationPtr)  {  	std::string notificationType = pNotificationPtr->getType(); -	if ((notificationType == "groupnotify") +	if (((notificationType == "groupnotify")  		|| (notificationType == "offer") -		|| (notificationType == "notifytoast") +		|| (notificationType == "notifytoast"))          && !pNotificationPtr->isCancelled())  	{ -		mHistory.insert(std::make_pair<LLDate, LLNotificationPtr>(pNotificationPtr->getDate(), pNotificationPtr)); +		mHistory.insert(history_list_t::value_type(pNotificationPtr->getDate(), pNotificationPtr));  	}  } diff --git a/indra/newview/llconversationmodel.h b/indra/newview/llconversationmodel.h index 56e1a26709..deff94ea16 100644 --- a/indra/newview/llconversationmodel.h +++ b/indra/newview/llconversationmodel.h @@ -213,7 +213,6 @@ private:  	void onAvatarNameCache(const LLAvatarName& av_name);	// callback used by fetchAvatarName  	void updateName(const LLAvatarName& av_name); -	bool mIsMuted;		         // default is false  	bool mIsModerator;	         // default is false  	bool mDisplayModeratorLabel; // default is false  	std::string mDisplayName; diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index 73930c2115..f956023358 100755 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -54,7 +54,6 @@  const F32 MIN_INTERPOLATE_DISTANCE_SQUARED = 0.001f * 0.001f;  const F32 MAX_INTERPOLATE_DISTANCE_SQUARED = 10.f * 10.f;  const F32 OBJECT_DAMPING_TIME_CONSTANT = 0.06f; -const F32 MIN_SHADOW_CASTER_RADIUS = 2.0f;  static LLTrace::BlockTimerStatHandle FTM_CULL_REBOUND("Cull Rebound"); @@ -874,7 +873,7 @@ void LLDrawable::updateDistance(LLCamera& camera, bool force_update)  		}  		pos -= camera.getOrigin();	 -		mDistanceWRTCamera = llround(pos.magVec(), 0.01f); +		mDistanceWRTCamera = ll_round(pos.magVec(), 0.01f);  		mVObjp->updateLOD();  	}  } diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index ab96201a63..e1d3d1a905 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -71,8 +71,6 @@ extern BOOL gUseGLPick;  F32 CLOTHING_GRAVITY_EFFECT = 0.7f;  F32 CLOTHING_ACCEL_FORCE_FACTOR = 0.2f; -const S32 NUM_TEST_AVATARS = 30; -const S32 MIN_PIXEL_AREA_2_PASS_SKINNING = 500000000;  // Format for gAGPVertices  // vertex format for bumpmapping: diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index 67d1642639..33f7bc305c 100755 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -1329,7 +1329,7 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  					for( i = minimum; i <= maximum; i++ )  					{  						F32 minus_one_to_one = F32(maximum - i) * twice_one_over_range - 1.f; -						bias_and_scale_lut[i] = llclampb(llround(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128)); +						bias_and_scale_lut[i] = llclampb(ll_round(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128));  					}  				}  				else @@ -1337,7 +1337,7 @@ void LLBumpImageList::onSourceLoaded( BOOL success, LLViewerTexture *src_vi, LLI  					for( i = minimum; i <= maximum; i++ )  					{  						F32 minus_one_to_one = F32(i - minimum) * twice_one_over_range - 1.f; -						bias_and_scale_lut[i] = llclampb(llround(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128)); +						bias_and_scale_lut[i] = llclampb(ll_round(127 * minus_one_to_one * ARTIFICIAL_SCALE + 128));  					}  				} diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 76c37439ab..4a059fdc67 100755 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -219,7 +219,7 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask)  	if (hasMouseCapture())  	{  		F32 lerp = llclamp(1.f - (F32) (x - mGraphRect.mLeft) / (F32) mGraphRect.getWidth(), 0.f, 1.f); -		mScrollIndex = llround( lerp * (F32)(mRecording.getNumRecordedPeriods() - MAX_VISIBLE_HISTORY)); +		mScrollIndex = ll_round( lerp * (F32)(mRecording.getNumRecordedPeriods() - MAX_VISIBLE_HISTORY));  		mScrollIndex = llclamp(	mScrollIndex, 0, (S32)mRecording.getNumRecordedPeriods());  		return TRUE;  	} @@ -361,7 +361,6 @@ BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks)  static BlockTimerStatHandle FTM_RENDER_TIMER("Timers");  static const S32 MARGIN = 10; -static const S32 LEGEND_WIDTH = 220;  static std::vector<LLColor4> sTimerColors; @@ -1136,7 +1135,7 @@ void LLFastTimerView::drawLineGraph()  		max_time = llmax(F32Microseconds(1.f), F32Microseconds(cur_max));  	} -	max_calls = llround(lerp((F32)max_calls, (F32) cur_max_calls, LLSmoothInterpolation::getInterpolant(0.1f))); +	max_calls = ll_round(lerp((F32)max_calls, (F32) cur_max_calls, LLSmoothInterpolation::getInterpolant(0.1f)));  	if (llabs((S32)(max_calls - cur_max_calls)) <= 1)  	{  		max_calls = cur_max_calls; @@ -1472,7 +1471,7 @@ void LLFastTimerView::drawBars()  		LLRect frame_bar_rect;  		frame_bar_rect.setLeftTopAndSize(mBarRect.mLeft,   										bars_top,  -										llround((mAverageTimerRow.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth()),  +										ll_round((mAverageTimerRow.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth()),   										bar_height);  		mAverageTimerRow.mTop = frame_bar_rect.mTop;  		mAverageTimerRow.mBottom = frame_bar_rect.mBottom; @@ -1486,7 +1485,7 @@ void LLFastTimerView::drawBars()  			row.mTop = frame_bar_rect.mTop;  			row.mBottom = frame_bar_rect.mBottom;  			frame_bar_rect.mRight = frame_bar_rect.mLeft  -									+ llround((row.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth()); +									+ ll_round((row.mBars[0].mTotalTime / mTotalTimeDisplay) * mBarRect.getWidth());   			drawBar(frame_bar_rect, row, image_width, image_height);  			frame_bar_rect.translate(0, -(bar_height + vpad)); @@ -1617,8 +1616,8 @@ S32 LLFastTimerView::drawBar(LLRect bar_rect, TimerBarRow& row, S32 image_width,  	}  	LLRect children_rect; -	children_rect.mLeft  = llround(timer_bar.mChildrenStart / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft; -	children_rect.mRight = llround(timer_bar.mChildrenEnd   / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft; +	children_rect.mLeft  = ll_round(timer_bar.mChildrenStart / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft; +	children_rect.mRight = ll_round(timer_bar.mChildrenEnd   / mTotalTimeDisplay * (F32)mBarRect.getWidth()) + mBarRect.mLeft;  	if (bar_rect.getHeight() > MIN_BAR_HEIGHT)  	{ diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 6c5b5be720..fc9e85caf8 100755 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -480,7 +480,7 @@ BOOL LLFavoritesBarCtrl::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  				const LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);  				if (item->getParentUUID() == favorites_id)  				{ -					LL_WARNS() << "Attemt to copy a favorite item into the same folder." << LL_ENDL; +					LL_WARNS("FavoritesBar") << "Attemt to copy a favorite item into the same folder." << LL_ENDL;  					break;  				} @@ -632,7 +632,7 @@ void LLFavoritesBarCtrl::handleNewFavoriteDragAndDrop(LLInventoryItem *item, con  	//		landmarks to an empty favorites bar.  	updateButtons(); -	LL_INFOS() << "Copied inventory item #" << item->getUUID() << " to favorites." << LL_ENDL; +	LL_INFOS("FavoritesBar") << "Copied inventory item #" << item->getUUID() << " to favorites." << LL_ENDL;  }  //virtual @@ -871,7 +871,7 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem  	fav_btn = LLUICtrlFactory::create<LLFavoriteLandmarkButton>(fav_btn_params);  	if (NULL == fav_btn)  	{ -		LL_WARNS() << "Unable to create LLFavoriteLandmarkButton widget: " << item->getName() << LL_ENDL; +		LL_WARNS("FavoritesBar") << "Unable to create LLFavoriteLandmarkButton widget: " << item->getName() << LL_ENDL;  		return NULL;  	} @@ -1160,7 +1160,7 @@ bool LLFavoritesBarCtrl::enableSelected(const LLSD& userdata)  void LLFavoritesBarCtrl::doToSelected(const LLSD& userdata)  {  	std::string action = userdata.asString(); -	LL_INFOS() << "Action = " << action << " Item = " << mSelectedItemID.asString() << LL_ENDL; +	LL_INFOS("FavoritesBar") << "Action = " << action << " Item = " << mSelectedItemID.asString() << LL_ENDL;  	LLViewerInventoryItem* item = gInventory.getItem(mSelectedItemID);  	if (!item) @@ -1444,11 +1444,25 @@ void LLFavoritesOrderStorage::getSLURL(const LLUUID& asset_id)  		boost::bind(&LLFavoritesOrderStorage::onLandmarkLoaded, this, asset_id, _1));  	if (lm)  	{ +        LL_DEBUGS("FavoritesBar") << "landmark for " << asset_id << " already loaded" << LL_ENDL;  		onLandmarkLoaded(asset_id, lm);  	}  }  // static +std::string LLFavoritesOrderStorage::getStoredFavoritesFilename() +{ +	std::string user_dir = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, ""); + +    return (user_dir.empty() ? "" +            : gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, +                                             "stored_favorites_" +                                          + LLGridManager::getInstance()->getGrid() +                                          + ".xml") +            ); +} + +// static  void LLFavoritesOrderStorage::destroyClass()  {  	LLFavoritesOrderStorage::instance().cleanup(); @@ -1456,10 +1470,14 @@ void LLFavoritesOrderStorage::destroyClass()  	std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");  	llifstream file; -	file.open(old_filename); +	file.open(old_filename.c_str());  	if (file.is_open())  	{ -		std::string new_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); +        file.close(); +		std::string new_filename = getStoredFavoritesFilename(); +        LL_INFOS("FavoritesBar") << "moving favorites from old name '" << old_filename +                                 << "' to new name '" << new_filename << "'" +                                 << LL_ENDL;  		LLFile::copy(old_filename,new_filename);  		LLFile::remove(old_filename);  	} @@ -1474,18 +1492,35 @@ void LLFavoritesOrderStorage::destroyClass()  	}  } +std::string LLFavoritesOrderStorage::getSavedOrderFileName() +{ +	// If we quit from the login screen we will not have an SL account +	// name.  Don't try to save, otherwise we'll dump a file in +	// C:\Program Files\SecondLife\ or similar. JC +	std::string user_dir = gDirUtilp->getLindenUserDir(); +    return (user_dir.empty() ? "" : gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME)); +} +  void LLFavoritesOrderStorage::load()  {  	// load per-resident sorting information -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); +	std::string filename = getSavedOrderFileName();  	LLSD settings_llsd;  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (file.is_open())  	{  		LLSDSerialize::fromXML(settings_llsd, file); +        LL_INFOS("FavoritesBar") << "loaded favorites order from '" << filename << "' " +                                 << (settings_llsd.isMap() ? "" : "un") << "successfully" +                                 << LL_ENDL; +        file.close();  	} +    else +    { +        LL_WARNS("FavoritesBar") << "unable to open favorites order file at '" << filename << "'" << LL_ENDL; +    }  	for (LLSD::map_const_iterator iter = settings_llsd.beginMap();  		iter != settings_llsd.endMap(); ++iter) @@ -1499,92 +1534,120 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()  	// Do not change the file if we are not logged in yet.  	if (!LLLoginInstance::getInstance()->authSuccess())  	{ -		LL_WARNS() << "Cannot save favorites: not logged in" << LL_ENDL; +		LL_WARNS("FavoritesBar") << "Cannot save favorites: not logged in" << LL_ENDL;  		return;  	} -	std::string user_dir = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, ""); -	if (user_dir.empty()) -	{ -		LL_WARNS() << "Cannot save favorites: empty user dir name" << LL_ENDL; -		return; -	} - -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); -	llifstream in_file; -	in_file.open(filename); -	LLSD fav_llsd; -	if (in_file.is_open()) -	{ -		LLSDSerialize::fromXML(fav_llsd, in_file); -	} - -	const LLUUID fav_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); -	LLInventoryModel::cat_array_t cats; -	LLInventoryModel::item_array_t items; -	gInventory.collectDescendents(fav_id, cats, items, LLInventoryModel::EXCLUDE_TRASH); - -	LLSD user_llsd; -	for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); it++) -	{ -		LLSD value; -		value["name"] = (*it)->getName(); -		value["asset_id"] = (*it)->getAssetUUID(); - -		slurls_map_t::iterator slurl_iter = mSLURLs.find(value["asset_id"]); -		if (slurl_iter != mSLURLs.end()) -		{ -			LL_DEBUGS() << "Saving favorite: idx=" << LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID()) << ", SLURL=" <<  slurl_iter->second << ", value=" << value << LL_ENDL; -			value["slurl"] = slurl_iter->second; -			user_llsd[LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID())] = value; -		} -		else -		{ -			LL_WARNS() << "Not saving favorite " << value["name"] << ": no matching SLURL" << LL_ENDL; -		} -	} - -	LLAvatarName av_name; -	LLAvatarNameCache::get( gAgentID, &av_name ); -	// Note : use the "John Doe" and not the "john.doe" version of the name  -	// as we'll compare it with the stored credentials in the login panel. -	LL_DEBUGS() << "Saved favorites for " << av_name.getUserName() << LL_ENDL; -	fav_llsd[av_name.getUserName()] = user_llsd; - -	llofstream file; -	file.open(filename); -	LLSDSerialize::toPrettyXML(fav_llsd, file); +	std::string filename = getStoredFavoritesFilename(); +    if (!filename.empty()) +    { +        llifstream in_file; +        in_file.open(filename.c_str()); +        LLSD fav_llsd; +        if (in_file.is_open()) +        { +            LLSDSerialize::fromXML(fav_llsd, in_file); +            LL_INFOS("FavoritesBar") << "loaded favorites from '" << filename << "' " +                                     << (fav_llsd.isMap() ? "" : "un") << "successfully" +                                     << LL_ENDL; +            in_file.close(); +        } +        else +        { +            LL_WARNS("FavoritesBar") << "unable to open favorites from '" << filename << "'" << LL_ENDL; +        } + +        const LLUUID fav_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); +        LLInventoryModel::cat_array_t cats; +        LLInventoryModel::item_array_t items; +        gInventory.collectDescendents(fav_id, cats, items, LLInventoryModel::EXCLUDE_TRASH); + +        LLSD user_llsd; +        for (LLInventoryModel::item_array_t::iterator it = items.begin(); it != items.end(); it++) +        { +            LLSD value; +            value["name"] = (*it)->getName(); +            value["asset_id"] = (*it)->getAssetUUID(); + +            slurls_map_t::iterator slurl_iter = mSLURLs.find(value["asset_id"]); +            if (slurl_iter != mSLURLs.end()) +            { +                LL_DEBUGS("FavoritesBar") << "Saving favorite: idx=" << LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID()) << ", SLURL=" <<  slurl_iter->second << ", value=" << value << LL_ENDL; +                value["slurl"] = slurl_iter->second; +                user_llsd[LLFavoritesOrderStorage::instance().getSortIndex((*it)->getUUID())] = value; +            } +            else +            { +                LL_WARNS("FavoritesBar") << "Not saving favorite " << value["name"] << ": no matching SLURL" << LL_ENDL; +            } +        } + +        LLAvatarName av_name; +        LLAvatarNameCache::get( gAgentID, &av_name ); +        // Note : use the "John Doe" and not the "john.doe" version of the name  +        // as we'll compare it with the stored credentials in the login panel. +        fav_llsd[av_name.getUserName()] = user_llsd; + +        llofstream file; +        file.open(filename.c_str()); +        if ( file.is_open() ) +        { +            LLSDSerialize::toPrettyXML(fav_llsd, file); +            LL_INFOS("FavoritesBar") << "saved favorites for '" << av_name.getUserName() +                                     << "' to '" << filename << "' " +                                     << LL_ENDL; +            file.close(); +        } +        else +        { +            LL_WARNS("FavoritesBar") << "unable to open favorites storage for '" << av_name.getUserName() +                                     << "' at '" << filename << "' " +                                     << LL_ENDL; +        } +    }  }  void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()  { -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml"); -	LLSD fav_llsd; -	llifstream file; -	file.open(filename); -	if (!file.is_open()) return; -	LLSDSerialize::fromXML(fav_llsd, file); - -	LLAvatarName av_name; -	LLAvatarNameCache::get( gAgentID, &av_name ); -	// Note : use the "John Doe" and not the "john.doe" version of the name. -	// See saveFavoritesSLURLs() here above for the reason why. -	LL_DEBUGS() << "Removed favorites for " << av_name.getUserName() << LL_ENDL; -	if (fav_llsd.has(av_name.getUserName())) -	{ -		fav_llsd.erase(av_name.getUserName()); -	} - -	llofstream out_file; -	out_file.open(filename); -	LLSDSerialize::toPrettyXML(fav_llsd, out_file); - +	std::string filename = getStoredFavoritesFilename(); +    if (!filename.empty()) +    { +        LLSD fav_llsd; +        llifstream file; +        file.open(filename.c_str()); +        if (file.is_open()) +        { +            LLSDSerialize::fromXML(fav_llsd, file); +            file.close(); +         +            LLAvatarName av_name; +            LLAvatarNameCache::get( gAgentID, &av_name ); +            // Note : use the "John Doe" and not the "john.doe" version of the name. +            // See saveFavoritesSLURLs() here above for the reason why. +            if (fav_llsd.has(av_name.getUserName())) +            { +                LL_INFOS("FavoritesBar") << "Removed favorites for " << av_name.getUserName() << LL_ENDL; +                fav_llsd.erase(av_name.getUserName()); +            } +         +            llofstream out_file; +            out_file.open(filename.c_str()); +            if ( out_file.is_open() ) +            { +                LLSDSerialize::toPrettyXML(fav_llsd, out_file); +                LL_INFOS("FavoritesBar") << "saved favorites to '" << filename << "' " +                                         << LL_ENDL; +                out_file.close(); +            } +        } +    }  }  void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark)  { -	if (!landmark) return; - +	if (landmark) +    { +        LL_DEBUGS("FavoritesBar") << "landmark for " << asset_id << " loaded" << LL_ENDL;  	LLVector3d pos_global;  	if (!landmark->getGlobalPos(pos_global))  	{ @@ -1595,42 +1658,54 @@ void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmar  	if (!pos_global.isExactlyZero())  	{ +        LL_DEBUGS("FavoritesBar") << "requesting slurl for landmark " << asset_id << LL_ENDL;  		LLLandmarkActions::getSLURLfromPosGlobal(pos_global,  			boost::bind(&LLFavoritesOrderStorage::storeFavoriteSLURL, this, asset_id, _1));  	} +    }  }  void LLFavoritesOrderStorage::storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl)  { -	LL_DEBUGS() << "Saving landmark SLURL: " << slurl << LL_ENDL; +	LL_DEBUGS("FavoritesBar") << "Saving landmark SLURL '" << slurl << "' for " << asset_id << LL_ENDL;  	mSLURLs[asset_id] = slurl;  }  void LLFavoritesOrderStorage::save()  { -	// nothing to save if clean -	if (!mIsDirty) return; - -	// If we quit from the login screen we will not have an SL account -	// name.  Don't try to save, otherwise we'll dump a file in -	// C:\Program Files\SecondLife\ or similar. JC -	std::string user_dir = gDirUtilp->getLindenUserDir(); -	if (!user_dir.empty()) -	{ -		std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); -		LLSD settings_llsd; - -		for(sort_index_map_t::const_iterator iter = mSortIndexes.begin(); iter != mSortIndexes.end(); ++iter) -		{ -			settings_llsd[iter->first.asString()] = iter->second; -		} - -		llofstream file; -		file.open(filename); -		LLSDSerialize::toPrettyXML(settings_llsd, file); -	} +	if (mIsDirty) +    { +        // something changed, so save it +        std::string filename = LLFavoritesOrderStorage::getInstance()->getSavedOrderFileName(); +        if (!filename.empty()) +        { +            LLSD settings_llsd; + +            for(sort_index_map_t::const_iterator iter = mSortIndexes.begin(); iter != mSortIndexes.end(); ++iter) +            { +                settings_llsd[iter->first.asString()] = iter->second; +            } + +            llofstream file; +            file.open(filename.c_str()); +            if ( file.is_open() ) +            { +                LLSDSerialize::toPrettyXML(settings_llsd, file); +                LL_INFOS("FavoritesBar") << "saved favorites order to '" << filename << "' " << LL_ENDL; +            } +            else +            { +                LL_WARNS("FavoritesBar") << "failed to open favorites order file '" << filename << "' " << LL_ENDL; +            } +        } +        else +        { +            LL_DEBUGS("FavoritesBar") << "no user directory available to store favorites order file" << LL_ENDL; +        } +    }  } +  void LLFavoritesOrderStorage::cleanup()  {  	// nothing to clean diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h index 5ca1d3e8ed..a370724947 100755 --- a/indra/newview/llfavoritesbar.h +++ b/indra/newview/llfavoritesbar.h @@ -162,19 +162,7 @@ private:  	boost::signals2::connection mEndDragConnection;  }; -/* -class AddFavoriteLandmarkCallback : public LLInventoryCallback -{ -public: -	AddFavoriteLandmarkCallback() : mTargetLandmarkId(LLUUID::null) {} -	void setTargetLandmarkId(const LLUUID& target_uuid) { mTargetLandmarkId = target_uuid; } - -private: -	void fire(const LLUUID& inv_item); -	LLUUID mTargetLandmarkId; -}; -*/  /**   * Class to store sorting order of favorites landmarks in a local file. EXT-3985.   * It replaced previously implemented solution to store sort index in landmark's name as a "<N>@" prefix. @@ -222,14 +210,16 @@ private:  	friend class LLSingleton<LLFavoritesOrderStorage>;  	LLFavoritesOrderStorage() : mIsDirty(false) { load(); }  	~LLFavoritesOrderStorage() { save(); } - +      	/**  	 * Removes sort indexes for items which are not in Favorites bar for now.  	 */  	void cleanup();  	const static std::string SORTING_DATA_FILE_NAME; - +    std::string getSavedOrderFileName(); +    static std::string getStoredFavoritesFilename(); +      	void load();  	void save(); diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index d89599cb45..ea39f812fd 100755 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -76,6 +76,8 @@ const char FEATURE_TABLE_FILENAME[] = "featuretable%s.txt";  const char FEATURE_TABLE_VER_FILENAME[] = "featuretable%s.%s.txt";  #endif +#if 0                               // consuming code in #if 0 below +#endif  LLFeatureInfo::LLFeatureInfo(const std::string& name, const BOOL available, const F32 level)  	: mValid(TRUE), mName(name), mAvailable(available), mRecommendedLevel(level)  { @@ -329,7 +331,7 @@ bool LLFeatureManager::parseFeatureTable(std::string filename)  	U32		version;  	cleanupFeatureTables(); // in case an earlier attempt left partial results -	file.open(filename); 	 /*Flawfinder: ignore*/ +	file.open(filename.c_str()); 	 /*Flawfinder: ignore*/  	if (!file)  	{ diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h index 0e0cec3943..b6e67375cd 100755 --- a/indra/newview/llfilepicker.h +++ b/indra/newview/llfilepicker.h @@ -164,11 +164,9 @@ private:  #if LL_DARWIN      S32 mPickOptions;  	std::vector<std::string> mFileVector; -	UInt32 mFileIndex;  	bool doNavChooseDialog(ELoadFilter filter);  	bool doNavSaveDialog(ESaveFilter filter, const std::string& filename); -	//static Boolean navOpenFilterProc(AEDesc *theItem, void *info, void *callBackUD, NavFilterModes filterMode);      std::vector<std::string>* navOpenFilterProc(ELoadFilter filter);  #endif diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index b64034b945..b6e61f83b1 100755 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -308,7 +308,7 @@ void LLVolumeImplFlexible::updateRenderRes()  	mRenderRes = (S32) (12.f*app_angle);  #else //legacy behavior  	//number of segments only cares about z axis -	F32 app_angle = llround((F32) atan2( mVO->getScale().mV[2]*2.f, drawablep->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f); +	F32 app_angle = ll_round((F32) atan2( mVO->getScale().mV[2]*2.f, drawablep->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f);   	// Rendering sections increases with visible angle on the screen  	mRenderRes = (S32)(FLEXIBLE_OBJECT_MAX_SECTIONS*4*app_angle*DEG_TO_RAD/LLViewerCamera::getInstance()->getView()); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 66149a4367..b342d8fdf3 100755 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -123,18 +123,17 @@ BOOL LLFloaterAbout::postBuild()  	LLViewerTextEditor *support_widget =   		getChild<LLViewerTextEditor>("support_editor", true); -	LLViewerTextEditor *linden_names_widget =  -		getChild<LLViewerTextEditor>("linden_names", true); -  	LLViewerTextEditor *contrib_names_widget =   		getChild<LLViewerTextEditor>("contrib_names", true); -	LLViewerTextEditor *trans_names_widget =  -		getChild<LLViewerTextEditor>("trans_names", true); +	LLViewerTextEditor *licenses_widget =  +		getChild<LLViewerTextEditor>("licenses_editor", true);  	getChild<LLUICtrl>("copy_btn")->setCommitCallback(  		boost::bind(&LLFloaterAbout::onClickCopyToClipboard, this)); +	static const LLUIColor about_color = LLUIColorTable::instance().getColor("TextFgReadOnlyColor"); +  	if (gAgent.getRegion())  	{  		// start fetching server release notes URL @@ -153,29 +152,11 @@ BOOL LLFloaterAbout::postBuild()  	support_widget->setEnabled(FALSE);  	support_widget->startOfDoc(); -	// Get the names of Lindens, added by viewer_manifest.py at build time -	std::string lindens_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"lindens.txt"); -	llifstream linden_file; -	std::string lindens; -	linden_file.open(lindens_path);		/* Flawfinder: ignore */ -	if (linden_file.is_open()) -	{ -		std::getline(linden_file, lindens); // all names are on a single line -		linden_file.close(); -		linden_names_widget->setText(lindens); -	} -	else -	{ -		LL_INFOS("AboutInit") << "Could not read lindens file at " << lindens_path << LL_ENDL; -	} -	linden_names_widget->setEnabled(FALSE); -	linden_names_widget->startOfDoc(); -  	// Get the names of contributors, extracted from .../doc/contributions.txt by viewer_manifest.py at build time  	std::string contributors_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"contributors.txt");  	llifstream contrib_file;  	std::string contributors; -	contrib_file.open(contributors_path);		/* Flawfinder: ignore */ +	contrib_file.open(contributors_path.c_str());		/* Flawfinder: ignore */  	if (contrib_file.is_open())  	{  		std::getline(contrib_file, contributors); // all names are on a single line @@ -189,23 +170,28 @@ BOOL LLFloaterAbout::postBuild()  	contrib_names_widget->setEnabled(FALSE);  	contrib_names_widget->startOfDoc(); -	// Get the names of translators, extracted from .../doc/tranlations.txt by viewer_manifest.py at build time -	std::string translators_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"translators.txt"); -	llifstream trans_file; -	std::string translators; -	trans_file.open(translators_path);		/* Flawfinder: ignore */ -	if (trans_file.is_open()) +    // Get the Versions and Copyrights, created at build time +	std::string licenses_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"packages-info.txt"); +	llifstream licenses_file; +	licenses_file.open(licenses_path.c_str());		/* Flawfinder: ignore */ +	if (licenses_file.is_open())  	{ -		std::getline(trans_file, translators); // all names are on a single line -		trans_file.close(); +		std::string license_line; +		licenses_widget->clear(); +		while ( std::getline(licenses_file, license_line) ) +		{ +			licenses_widget->appendText(license_line+"\n", FALSE, +										LLStyle::Params() .color(about_color)); +		} +		licenses_file.close();  	}  	else  	{ -		LL_WARNS("AboutInit") << "Could not read translators file at " << translators_path << LL_ENDL; +		// this case will use the (out of date) hard coded value from the XUI +		LL_INFOS("AboutInit") << "Could not read licenses file at " << licenses_path << LL_ENDL;  	} -	trans_names_widget->setText(translators); -	trans_names_widget->setEnabled(FALSE); -	trans_names_widget->startOfDoc(); +	licenses_widget->setEnabled(FALSE); +	licenses_widget->startOfDoc();  	return TRUE;  } diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 060c091737..0a0e5ffc06 100755 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -65,9 +65,6 @@  // NOTE: This is duplicated in lldatamoney.cpp ...  const F32 GROUP_LAND_BONUS_FACTOR = 1.1f; -const F64 CURRENCY_ESTIMATE_FREQUENCY = 0.5; -	// how long of a pause in typing a currency buy amount before an -	// estimate is fetched from the server  class LLFloaterBuyLandUI  :	public LLFloater @@ -392,9 +389,9 @@ void LLFloaterBuyLandUI::updateParcelInfo()  	}  	mParcelBillableArea = -		llround(mRegion->getBillableFactor() * mParcelActualArea); +		ll_round(mRegion->getBillableFactor() * mParcelActualArea); - 	mParcelSupportedObjects = llround( + 	mParcelSupportedObjects = ll_round(  		parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus());    	// Can't have more than region max tasks, regardless of parcel    	// object bonus factor.  diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index ef08db3d33..20d650fa37 100755 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -48,9 +48,7 @@ static LLDefaultChildRegistry::Register<LLPanelCameraItem> r("panel_camera_item"  const F32 NUDGE_TIME = 0.25f;		// in seconds  const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed -// Constants -const F32 CAMERA_BUTTON_DELAY = 0.0f; - +// constants  #define ORBIT "cam_rotate_stick"  #define PAN "cam_track_stick"  #define ZOOM "zoom" diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp index 6888e076aa..3a2047cfef 100644 --- a/indra/newview/llfloaterfacebook.cpp +++ b/indra/newview/llfloaterfacebook.cpp @@ -59,7 +59,6 @@ static LLPanelInjector<LLFacebookPhotoPanel> t_panel_photo("llfacebookphotopanel  static LLPanelInjector<LLFacebookCheckinPanel> t_panel_checkin("llfacebookcheckinpanel");  static LLPanelInjector<LLFacebookFriendsPanel> t_panel_friends("llfacebookfriendspanel"); -const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/";  const std::string DEFAULT_CHECKIN_ICON_URL = "http://map.secondlife.com.s3.amazonaws.com/map_placeholder.png";  const std::string DEFAULT_CHECKIN_QUERY_PARAMETERS = "?sourceid=slshare_checkin&utm_source=facebook&utm_medium=checkin&utm_campaign=slshare"; diff --git a/indra/newview/llfloaterflickr.cpp b/indra/newview/llfloaterflickr.cpp index 600606d838..cd132b843d 100644 --- a/indra/newview/llfloaterflickr.cpp +++ b/indra/newview/llfloaterflickr.cpp @@ -55,7 +55,6 @@  static LLPanelInjector<LLFlickrPhotoPanel> t_panel_photo("llflickrphotopanel");  static LLPanelInjector<LLFlickrAccountPanel> t_panel_account("llflickraccountpanel"); -const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const std::string DEFAULT_PHOTO_QUERY_PARAMETERS = "?sourceid=slshare_photo&utm_source=flickr&utm_medium=photo&utm_campaign=slshare";  const std::string DEFAULT_TAG_TEXT = "secondlife ";  const std::string FLICKR_MACHINE_TAGS_NAMESPACE = "secondlife"; diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp index 6966ca5639..37774fbc5c 100755 --- a/indra/newview/llfloatergodtools.cpp +++ b/indra/newview/llfloatergodtools.cpp @@ -401,14 +401,9 @@ void LLFloaterGodTools::sendGodUpdateRegionInfo()  // Floats because spinners only support floats. JC  const F32 BILLABLE_FACTOR_DEFAULT = 1; -const F32 BILLABLE_FACTOR_MIN = 0.0f; -const F32 BILLABLE_FACTOR_MAX = 4.f;  // floats because spinners only understand floats. JC  const F32 PRICE_PER_METER_DEFAULT = 1.f; -const F32 PRICE_PER_METER_MIN = 0.f; -const F32 PRICE_PER_METER_MAX = 100.f; -  LLPanelRegionTools::LLPanelRegionTools()  : 	LLPanel() @@ -833,9 +828,6 @@ void LLPanelRegionTools::onSelectRegion()  //      ^                                ^        ^  //      LEFT                             R2       RIGHT -const F32 HOURS_TO_RADIANS = (2.f*F_PI)/24.f; - -  LLPanelGridTools::LLPanelGridTools() :  	LLPanel()  { diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index 9def253ba5..fc7fcf3ab9 100755 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -396,7 +396,7 @@ bool LLFloaterIMSession::canAddSelectedToChat(const uuid_vec_t& uuids)  {  	if (!mSession  		|| mDialog == IM_SESSION_GROUP_START -		|| mDialog == IM_SESSION_INVITE && gAgent.isInGroup(mSessionID)) +		|| (mDialog == IM_SESSION_INVITE && gAgent.isInGroup(mSessionID)))  	{  		return false;  	} @@ -779,7 +779,7 @@ bool LLFloaterIMSession::toggle(const LLUUID& session_id)  			floater->setVisible(false);  			return false;  		} -		else if(floater && (!floater->isDocked() || floater->getVisible() && !floater->hasFocus())) +		else if(floater && ((!floater->isDocked() || floater->getVisible()) && !floater->hasFocus()))  		{  			floater->setVisible(TRUE);  			floater->setFocus(TRUE); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 3cef7958c2..5ebd25d228 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1224,7 +1224,7 @@ void LLPanelLandObjects::refresh()  	{  		S32 sw_max = parcel->getSimWideMaxPrimCapacity();  		S32 sw_total = parcel->getSimWidePrimCount(); -		S32 max = llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()); +		S32 max = ll_round(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus());  		S32 total = parcel->getPrimCount();  		S32 owned = parcel->getOwnerPrimCount();  		S32 group = parcel->getGroupPrimCount(); @@ -2051,9 +2051,9 @@ void LLPanelLandOptions::refresh()  		else  		{  			mLocationText->setTextArg("[LANDING]",llformat("%d, %d, %d (%d\xC2\xB0)", -														   llround(pos.mV[VX]), -														   llround(pos.mV[VY]), -		   												   llround(pos.mV[VZ]), +														   ll_round(pos.mV[VX]), +														   ll_round(pos.mV[VY]), +		   												   ll_round(pos.mV[VZ]),  														   user_look_at_angle));  		} diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index cf03087afb..f34760a6bf 100755 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -208,8 +208,8 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**)  			self->mActualArea += actual_area;  			self->mBillableArea += billable_area; -			S32 region_x = llround(global_x) % REGION_WIDTH_UNITS; -			S32 region_y = llround(global_y) % REGION_WIDTH_UNITS; +			S32 region_x = ll_round(global_x) % REGION_WIDTH_UNITS; +			S32 region_y = ll_round(global_y) % REGION_WIDTH_UNITS;  			std::string location;  			location = llformat("%s (%d, %d)", sim_name.c_str(), region_x, region_y); diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp index 473e2938be..333ff863e5 100755 --- a/indra/newview/llfloatermap.cpp +++ b/indra/newview/llfloatermap.cpp @@ -52,10 +52,7 @@  // The minor cardinal direction labels are hidden if their height is more  // than this proportion of the map.  const F32 MAP_MINOR_DIR_THRESHOLD = 0.07f; -const S32 MAP_PADDING_LEFT = 0; -const S32 MAP_PADDING_TOP = 2; -const S32 MAP_PADDING_RIGHT = 2; -const S32 MAP_PADDING_BOTTOM = 0; +  //  // Member functions  // @@ -156,8 +153,8 @@ void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation )  	radius -= 8.f;  	text_box->setOrigin(  -		llround(map_half_width - text_half_width + radius * cos( rotation )), -		llround(map_half_height - text_half_height + radius * sin( rotation )) ); +		ll_round(map_half_width - text_half_width + radius * cos( rotation )), +		ll_round(map_half_height - text_half_height + radius * sin( rotation )) );  }  void LLFloaterMap::updateMinorDirections() diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp index 4f2a6ec1b7..4fd5c0587a 100755 --- a/indra/newview/llfloatermediasettings.cpp +++ b/indra/newview/llfloatermediasettings.cpp @@ -47,7 +47,6 @@ LLFloaterMediaSettings::LLFloaterMediaSettings(const LLSD& key)  	mPanelMediaSettingsGeneral(NULL),  	mPanelMediaSettingsSecurity(NULL),  	mPanelMediaSettingsPermissions(NULL), -	mWaitingToClose( false ),  	mIdenticalHasMediaInfo( true ),  	mMultipleMedia(false),  	mMultipleValidMedia(false) diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h index 1d25530986..f93512eb3a 100755 --- a/indra/newview/llfloatermediasettings.h +++ b/indra/newview/llfloatermediasettings.h @@ -83,7 +83,6 @@ private:  	bool haveValuesChanged() const;  	LLSD mInitialValues; -	bool mWaitingToClose;  };  #endif  // LL_LLFLOATERMEDIASETTINGS_H diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp index ee7f413a59..0cca715fe2 100755 --- a/indra/newview/llfloaternamedesc.cpp +++ b/indra/newview/llfloaternamedesc.cpp @@ -52,14 +52,9 @@  #include "llinventorytype.h"  const S32 PREVIEW_LINE_HEIGHT = 19; -const S32 PREVIEW_CLOSE_BOX_SIZE = 16;  const S32 PREVIEW_BORDER_WIDTH = 2;  const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH; -const S32 PREVIEW_VPAD = 2;  const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE; -const S32 PREVIEW_HEADER_SIZE = 3 * PREVIEW_LINE_HEIGHT + PREVIEW_VPAD; -const S32 PREF_BUTTON_WIDTH = 64; -const S32 PREF_BUTTON_HEIGHT = 16;  //-----------------------------------------------------------------------------  // LLFloaterNameDesc() diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp index 69c9d94dfa..87f927ff65 100755 --- a/indra/newview/llfloaterpathfindingcharacters.cpp +++ b/indra/newview/llfloaterpathfindingcharacters.cpp @@ -224,7 +224,7 @@ LLSD LLFloaterPathfindingCharacters::buildCharacterScrollListItemData(const LLPa  	columns[2]["column"] = "owner";  	columns[2]["value"] = getOwnerName(pCharacterPtr); -	S32 cpuTime = llround(pCharacterPtr->getCPUTime()); +	S32 cpuTime = ll_round(pCharacterPtr->getCPUTime());  	std::string cpuTimeString = llformat("%d", cpuTime);  	LLStringUtil::format_map_t string_args;  	string_args["[CPU_TIME]"] = cpuTimeString; diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index d72ee073e1..f6ff83eaf4 100755 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -406,7 +406,7 @@ void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjec  	if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName())  	{ -		mMissingNameObjectsScrollListItems.insert(std::make_pair<std::string, LLScrollListItem *>(pObjectPtr->getUUID().asString(), scrollListItem)); +		mMissingNameObjectsScrollListItems.insert(scroll_list_item_map::value_type(pObjectPtr->getUUID().asString(), scrollListItem));  		pObjectPtr->registerOwnerNameListener(boost::bind(&LLFloaterPathfindingObjects::handleObjectNameResponse, this, _1));  	}  } diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp index a4d13ce1d5..31245db344 100755 --- a/indra/newview/llfloaterpay.cpp +++ b/indra/newview/llfloaterpay.cpp @@ -119,7 +119,6 @@ protected:  }; -const S32 MAX_AMOUNT_LENGTH = 10;  const S32 FASTPAY_BUTTON_WIDTH = 80;  const S32 PAY_AMOUNT_NOTIFICATION = 200; @@ -368,7 +367,8 @@ void LLFloaterPay::payViaObject(money_callback callback, LLSafeHandle<LLObjectSe  	LLSelectNode* node = selection->getFirstRootNode();  	if (!node)   	{ -		//FIXME: notify user object no longer exists +		// object no longer exists +		LLNotificationsUtil::add("PayObjectFailed");  		floater->closeFloater();  		return;  	} @@ -492,12 +492,22 @@ void LLFloaterPay::onGive(void* data)  		}  		if (amount > PAY_AMOUNT_NOTIFICATION && gStatusBar && gStatusBar->getBalance() > amount)  		{ -			LLUUID payee_id; -			BOOL is_group; +			LLUUID payee_id = LLUUID::null; +			BOOL is_group = false;  			if (floater->mObjectSelection.notNull())  			{  				LLSelectNode* node = floater->mObjectSelection->getFirstRootNode(); -				node->mPermissions->getOwnership(payee_id, is_group); +				if (node) +				{ +					node->mPermissions->getOwnership(payee_id, is_group); +				} +				else +				{ +					// object no longer exists +					LLNotificationsUtil::add("PayObjectFailed"); +					floater->closeFloater(); +					return; +				}  			}  			else  			{ @@ -563,6 +573,10 @@ void LLFloaterPay::give(S32 amount)  					msg->sendReliable( region->getHost() );  				}  			} +			else +			{ +				LLNotificationsUtil::add("PayObjectFailed"); +			}  		}  		else  		{ diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index 849aa7cd14..042cf47070 100755 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -195,7 +195,7 @@ private:  		// even if it is the same as a previous one.  		sPreviousReason = "";  		LLFloaterPermsDefault::setCapSent(true); -		LL_INFOS("FloaterPermsResponder") << "Sent default permissions to simulator" << LL_ENDL; +		LL_INFOS("ObjectPermissionsFloater") << "Default permissions successfully sent to simulator" << LL_ENDL;  	}  }; @@ -223,8 +223,20 @@ void LLFloaterPermsDefault::updateCap()  		report["default_object_perm_masks"]["NextOwner"] =  			(LLSD::Integer)LLFloaterPerms::getNextOwnerPerms(sCategoryNames[CAT_OBJECTS]); +        { +            LL_DEBUGS("ObjectPermissionsFloater") << "Sending default permissions to '" +                                                  << object_url << "'\n"; +            std::ostringstream sent_perms_log; +            LLSDSerialize::toPrettyXML(report, sent_perms_log); +            LL_CONT << sent_perms_log.str() << LL_ENDL; +        } +      		LLHTTPClient::post(object_url, report, new LLFloaterPermsResponder());  	} +    else +    { +        LL_DEBUGS("ObjectPermissionsFloater") << "AgentPreferences cap not available." << LL_ENDL; +    }  }  void LLFloaterPermsDefault::setCapSent(bool cap_sent) diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 0c669506fa..ee4396758e 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -111,13 +111,9 @@  #include "lllogininstance.h"        // to check if logged in yet  #include "llsdserialize.h" -const F32 MAX_USER_FAR_CLIP = 512.f; -const F32 MIN_USER_FAR_CLIP = 64.f;  const F32 BANDWIDTH_UPDATER_TIMEOUT = 0.5f;  char const* const VISIBILITY_DEFAULT = "default";  char const* const VISIBILITY_HIDDEN = "hidden"; -char const* const VISIBILITY_VISIBLE = "visible"; -char const* const VISIBILITY_INVISIBLE = "invisible";  //control value for middle mouse as talk2push button  const static std::string MIDDLE_MOUSE_CV = "MiddleMouse"; @@ -301,8 +297,8 @@ void fractionFromDecimal(F32 decimal_val, S32& numerator, S32& denominator)  	{  		if (fmodf((decimal_val * test_denominator) + 0.01f, 1.f) < 0.02f)  		{ -			numerator = llround(decimal_val * test_denominator); -			denominator = llround(test_denominator); +			numerator = ll_round(decimal_val * test_denominator); +			denominator = ll_round(test_denominator);  			break;  		}  	} diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index a3b9713e3e..ae330211db 100755 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -82,8 +82,6 @@  #include "lltrans.h" -const U32 INCLUDE_SCREENSHOT  = 0x01 << 0; -  //-----------------------------------------------------------------------------  // Globals  //----------------------------------------------------------------------------- diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h index a5cb1b6184..5ba0185d32 100755 --- a/indra/newview/llfloaterscriptlimits.h +++ b/indra/newview/llfloaterscriptlimits.h @@ -170,21 +170,17 @@ private:  	LLSD mContent;  	LLUUID mParcelId;  	bool mGotParcelMemoryUsed; -	bool mGotParcelMemoryUsedDetails;  	bool mGotParcelMemoryMax;  	S32 mParcelMemoryMax;  	S32 mParcelMemoryUsed; -	S32 mParcelMemoryUsedDetails; -	 +  	bool mGotParcelURLsUsed; -	bool mGotParcelURLsUsedDetails;  	bool mGotParcelURLsMax;  	S32 mParcelURLsMax;  	S32 mParcelURLsUsed; -	S32 mParcelURLsUsedDetails; -	 +  	std::vector<LLSD> mObjectListItems; -		 +  protected:  // LLRemoteParcelInfoObserver interface: @@ -208,17 +204,11 @@ public:  	LLPanelScriptLimitsAttachment()  		:	LLPanelScriptLimitsInfo(),  		mGotAttachmentMemoryUsed(false), -		mGotAttachmentMemoryUsedDetails(false), -		mGotAttachmentMemoryMax(false),  		mAttachmentMemoryMax(0),  		mAttachmentMemoryUsed(0), -		mAttachmentMemoryUsedDetails(0),  		mGotAttachmentURLsUsed(false), -		mGotAttachmentURLsUsedDetails(false), -		mGotAttachmentURLsMax(false),  		mAttachmentURLsMax(0), -		mAttachmentURLsUsed(0), -		mAttachmentURLsUsedDetails(0) +		mAttachmentURLsUsed(0)  		{};  	~LLPanelScriptLimitsAttachment() @@ -237,18 +227,12 @@ public:  private:  	bool mGotAttachmentMemoryUsed; -	bool mGotAttachmentMemoryUsedDetails; -	bool mGotAttachmentMemoryMax;  	S32 mAttachmentMemoryMax;  	S32 mAttachmentMemoryUsed; -	S32 mAttachmentMemoryUsedDetails; -	 +  	bool mGotAttachmentURLsUsed; -	bool mGotAttachmentURLsUsedDetails; -	bool mGotAttachmentURLsMax;  	S32 mAttachmentURLsMax;  	S32 mAttachmentURLsUsed; -	S32 mAttachmentURLsUsedDetails;  protected: diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index 1d0ddc2ced..b27a42cb8e 100755 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -930,11 +930,11 @@ BOOL LLFloaterSnapshot::Impl::checkImageSize(LLSnapshotLivePreview* previewp, S3  		//change another value proportionally  		if(isWidthChanged)  		{ -			height = llround(width / aspect_ratio) ; +			height = ll_round(width / aspect_ratio) ;  		}  		else  		{ -			width = llround(height * aspect_ratio) ; +			width = ll_round(height * aspect_ratio) ;  		}  		//bound w/h by the max_value diff --git a/indra/newview/llfloaterspellchecksettings.cpp b/indra/newview/llfloaterspellchecksettings.cpp index 54c7b4c37d..5124dae147 100755 --- a/indra/newview/llfloaterspellchecksettings.cpp +++ b/indra/newview/llfloaterspellchecksettings.cpp @@ -350,7 +350,8 @@ void LLFloaterSpellCheckerImport::onBtnOK()  		custom_dict_info["language"] = dict_language;  		LLSD custom_dict_map; -		llifstream custom_file_in(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml"); +        std::string custom_filename(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml"); +		llifstream custom_file_in(custom_filename.c_str());  		if (custom_file_in.is_open())  		{  			LLSDSerialize::fromXMLDocument(custom_dict_map, custom_file_in); @@ -372,7 +373,7 @@ void LLFloaterSpellCheckerImport::onBtnOK()  			custom_dict_map.append(custom_dict_info);  		} -		llofstream custom_file_out(LLSpellChecker::getDictionaryUserPath() + "user_dictionaries.xml", std::ios::trunc); +		llofstream custom_file_out(custom_filename.c_str(), std::ios::trunc);  		if (custom_file_out.is_open())  		{  			LLSDSerialize::toPrettyXML(custom_dict_map, custom_file_out); diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index 0613ffc94d..c1c21c593e 100755 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -50,7 +50,6 @@  LLFloaterTOS::LLFloaterTOS(const LLSD& data)  :	LLModalDialog( data["message"].asString() ),  	mMessage(data["message"].asString()), -	mWebBrowserWindowId( 0 ),  	mLoadingScreenLoaded(false),  	mSiteAlive(false),  	mRealNavigateBegun(false), diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h index 8921d11489..47126d06a6 100755 --- a/indra/newview/llfloatertos.h +++ b/indra/newview/llfloatertos.h @@ -62,7 +62,6 @@ public:  private:  	std::string		mMessage; -	int				mWebBrowserWindowId;  	bool			mLoadingScreenLoaded;  	bool			mSiteAlive;  	bool			mRealNavigateBegun; diff --git a/indra/newview/llfloatertwitter.cpp b/indra/newview/llfloatertwitter.cpp index 868d623d57..c48b1a3325 100644 --- a/indra/newview/llfloatertwitter.cpp +++ b/indra/newview/llfloatertwitter.cpp @@ -54,7 +54,6 @@  static LLPanelInjector<LLTwitterPhotoPanel> t_panel_photo("lltwitterphotopanel");  static LLPanelInjector<LLTwitterAccountPanel> t_panel_account("lltwitteraccountpanel"); -const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte  const std::string DEFAULT_PHOTO_LOCATION_URL = "http://maps.secondlife.com/";  const std::string DEFAULT_PHOTO_QUERY_PARAMETERS = "?sourceid=slshare_photo&utm_source=twitter&utm_medium=photo&utm_campaign=slshare";  const std::string DEFAULT_STATUS_TEXT = " #SecondLife"; diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp index bfc36a6bfb..76ad2146f1 100755 --- a/indra/newview/llfloateruipreview.cpp +++ b/indra/newview/llfloateruipreview.cpp @@ -180,7 +180,6 @@ private:  	LLButton*					mToggleOverlapButton;				// button to togle overlap panel/highlighting  	LLComboBox*					mLanguageSelection;					// combo box for primary language selection  	LLComboBox*					mLanguageSelection_2;				// combo box for secondary language selection -	LLScrollContainer*			mOverlapScrollView;					// overlapping elements scroll container  	S32							mLastDisplayedX, mLastDisplayedY;	// stored position of last floater so the new one opens up in the same place  	std::string 				mDelim;								// the OS-specific delimiter character (/ or \) (*TODO: this shouldn't be needed, right?) diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 6837f6159f..1b1c24b19a 100755 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -660,9 +660,9 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)  	F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );  	std::string full_name = llformat("%s (%d, %d, %d)",   									 sim_name.c_str(),  -									 llround(region_x),  -									 llround(region_y), -									 llround((F32)pos_global.mdV[VZ])); +									 ll_round(region_x),  +									 ll_round(region_y), +									 ll_round((F32)pos_global.mdV[VZ]));  	std::string tooltip("");  	mTrackedStatus = LLTracker::TRACKING_LOCATION; diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 64f796e1fd..c80dec0e75 100755 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -80,10 +80,10 @@ void LLToolSelectRect::handleRectangleSelection(S32 x, S32 y, MASK mask)  	S32 top =	llmax(y, mDragStartY);  	S32 bottom =llmin(y, mDragStartY); -	left = llround((F32) left * LLUI::getScaleFactor().mV[VX]); -	right = llround((F32) right * LLUI::getScaleFactor().mV[VX]); -	top = llround((F32) top * LLUI::getScaleFactor().mV[VY]); -	bottom = llround((F32) bottom * LLUI::getScaleFactor().mV[VY]); +	left = ll_round((F32) left * LLUI::getScaleFactor().mV[VX]); +	right = ll_round((F32) right * LLUI::getScaleFactor().mV[VX]); +	top = ll_round((F32) top * LLUI::getScaleFactor().mV[VY]); +	bottom = ll_round((F32) bottom * LLUI::getScaleFactor().mV[VY]);  	F32 old_far_plane = LLViewerCamera::getInstance()->getFar();  	F32 old_near_plane = LLViewerCamera::getInstance()->getNear(); diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index b1b7a87ae8..ef238cefe3 100755 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -50,6 +50,8 @@ S32 LLGroupListItem::sIconWidth = 0;  class LLGroupComparator : public LLFlatListView::ItemComparator  {  public: +	LLGroupComparator() {}; +  	/** Returns true if item1 < item2, false otherwise */  	/*virtual*/ bool compare(const LLPanel* item1, const LLPanel* item2) const  	{ diff --git a/indra/newview/llhudeffecttrail.cpp b/indra/newview/llhudeffecttrail.cpp index 8771219034..fc6efdb840 100755 --- a/indra/newview/llhudeffecttrail.cpp +++ b/indra/newview/llhudeffecttrail.cpp @@ -42,13 +42,6 @@  #include "llvoavatar.h"  #include "llworld.h" - -const F32 PARTICLE_SPACING = 0.01f; -const F32 MAX_SIZE = 0.025f; -const F32 START_POS_MAG = 1.f; -const F32 END_POS_MAG = 1.2f; - -  LLHUDEffectSpiral::LLHUDEffectSpiral(const U8 type) : LLHUDEffect(type), mbInit(FALSE)  {  	mKillTime = 10.f; diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp index 31d832e524..c7d108b6de 100755 --- a/indra/newview/llhudnametag.cpp +++ b/indra/newview/llhudnametag.cpp @@ -52,17 +52,12 @@  const F32 SPRING_STRENGTH = 0.7f; -const F32 RESTORATION_SPRING_TIME_CONSTANT = 0.1f;  const F32 HORIZONTAL_PADDING = 16.f;  const F32 VERTICAL_PADDING = 12.f;  const F32 LINE_PADDING = 3.f;			// aka "leading"  const F32 BUFFER_SIZE = 2.f; -const F32 MIN_EDGE_OVERLAP = 3.f;  const F32 HUD_TEXT_MAX_WIDTH = 190.f; -const F32 HUD_TEXT_MAX_WIDTH_NO_BUBBLE = 1000.f; -const F32 RESIZE_TIME = 0.f;  const S32 NUM_OVERLAP_ITERATIONS = 10; -const F32 NEIGHBOR_FORCE_FRACTION = 1.f;  const F32 POSITION_DAMPING_TC = 0.2f;  const F32 MAX_STABLE_CAMERA_VELOCITY = 0.1f;  const F32 LOD_0_SCREEN_COVERAGE = 0.15f; @@ -315,7 +310,7 @@ void LLHUDNameTag::renderText(BOOL for_select)  	{  		LLUIImagePtr rect_top_image = LLUI::getUIImage("Rounded_Rect_Top");  		LLRect label_top_rect = screen_rect; -		const S32 label_height = llround((mFontp->getLineHeight() * (F32)mLabelSegments.size() + (VERTICAL_PADDING / 3.f))); +		const S32 label_height = ll_round((mFontp->getLineHeight() * (F32)mLabelSegments.size() + (VERTICAL_PADDING / 3.f)));  		label_top_rect.mBottom = label_top_rect.mTop - label_height;  		LLColor4 label_top_color = text_color;  		label_top_color.mV[VALPHA] = gSavedSettings.getF32("ChatBubbleOpacity") * alpha_factor; diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp index f648d7baae..2c204170f2 100755 --- a/indra/newview/llhudtext.cpp +++ b/indra/newview/llhudtext.cpp @@ -48,23 +48,11 @@  #include "pipeline.h"  #include <boost/tokenizer.hpp> - -const F32 SPRING_STRENGTH = 0.7f; -const F32 RESTORATION_SPRING_TIME_CONSTANT = 0.1f;  const F32 HORIZONTAL_PADDING = 15.f;  const F32 VERTICAL_PADDING = 12.f;  const F32 BUFFER_SIZE = 2.f; -const F32 MIN_EDGE_OVERLAP = 3.f;  const F32 HUD_TEXT_MAX_WIDTH = 190.f;  const F32 HUD_TEXT_MAX_WIDTH_NO_BUBBLE = 1000.f; -const F32 RESIZE_TIME = 0.f; -const S32 NUM_OVERLAP_ITERATIONS = 10; -const F32 NEIGHBOR_FORCE_FRACTION = 1.f; -const F32 POSITION_DAMPING_TC = 0.2f; -const F32 MAX_STABLE_CAMERA_VELOCITY = 0.1f; -//const F32 LOD_0_SCREEN_COVERAGE = 0.15f; -//const F32 LOD_1_SCREEN_COVERAGE = 0.30f; -//const F32 LOD_2_SCREEN_COVERAGE = 0.40f;  std::set<LLPointer<LLHUDText> > LLHUDText::sTextObjects;  std::vector<LLPointer<LLHUDText> > LLHUDText::sVisibleTextObjects; diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp index 9a63e99357..cead4dbce6 100755 --- a/indra/newview/llhudview.cpp +++ b/indra/newview/llhudview.cpp @@ -44,10 +44,6 @@  LLHUDView *gHUDView = NULL; -const S32 HUD_ARROW_SIZE = 32; - - -  LLHUDView::LLHUDView(const LLRect& r)  {  	buildFromFile( "panel_hud.xml"); diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index e8d5db4437..f8ef15991d 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -199,6 +199,7 @@ protected:  class LLInventoryFolderViewModelBuilder  {  public: + 	LLInventoryFolderViewModelBuilder() {}   	virtual ~LLInventoryFolderViewModelBuilder() {}  	virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type,  										LLAssetType::EType actual_asset_type, @@ -654,6 +655,7 @@ public:  class LLRecentInventoryBridgeBuilder : public LLInventoryFolderViewModelBuilder  {  public: +	LLRecentInventoryBridgeBuilder() {}  	// Overrides FolderBridge for Recent Inventory Panel.  	// It use base functionality for bridges other than FolderBridge.  	virtual LLInvFVBridge* createBridge(LLAssetType::EType asset_type, diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index dc8b15a5bf..c66e9da4a9 100755 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -550,7 +550,7 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)  		if (mFilterOps.mFilterTypes == FILTERTYPE_UUID)  		{  			mFilterOps.mFilterTypes &= ~FILTERTYPE_UUID; -			mFilterOps.mFilterUUID == LLUUID::null; +			mFilterOps.mFilterUUID = LLUUID::null;  			setModified(FILTER_RESTART);  		} @@ -663,13 +663,13 @@ void LLInventoryFilter::setHoursAgo(U32 hours)  		BOOL more_restrictive;  		if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection)  		{ -			less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours); -			more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero); +			less_restrictive = ((are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo))) || !hours); +			more_restrictive = ((are_date_limits_valid && (!is_increasing && hours)) || is_increasing_from_zero);  		}  		else  		{ -			less_restrictive = (are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo)) || !hours); -			more_restrictive = (are_date_limits_valid && (!is_decreasing && hours) || is_increasing_from_zero); +			less_restrictive = ((are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo))) || !hours); +			more_restrictive = ((are_date_limits_valid && (!is_decreasing && hours)) || is_increasing_from_zero);  		}  		mFilterOps.mHoursAgo = hours; diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index f18832fe95..40edb13a80 100755 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -181,8 +181,6 @@ private:  }; -const S32 MAX_FETCH_RETRIES = 10; -  const char * const LOG_INV("Inventory");  } // end of namespace anonymous @@ -199,10 +197,7 @@ LLInventoryModelBackgroundFetch::LLInventoryModelBackgroundFetch():  	mAllFoldersFetched(FALSE),  	mRecursiveInventoryFetchStarted(FALSE),  	mRecursiveLibraryFetchStarted(FALSE), -	mNumFetchRetries(0), -	mMinTimeBetweenFetches(0.3f), -	mMaxTimeBetweenFetches(10.f), -	mTimelyFetchPending(FALSE) +	mMinTimeBetweenFetches(0.3f)  {}  LLInventoryModelBackgroundFetch::~LLInventoryModelBackgroundFetch() @@ -351,164 +346,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()  	if (mBackgroundFetchActive && gAgent.getRegion() && gAgent.getRegion()->capabilitiesReceived())  	{  		// If we'll be using the capability, we'll be sending batches and the background thing isn't as important. -		if (gSavedSettings.getBOOL("UseHTTPInventory"))  -		{ -			bulkFetch(); -			return; -		} -		 -#if 1 -		//-------------------------------------------------------------------------------- -		// DEPRECATED OLD CODE -		// - -		// No more categories to fetch, stop fetch process. -		if (mFetchQueue.empty()) -		{ -			setAllFoldersFetched(); -			return; -		} - -		F32 fast_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.1f); -		F32 slow_fetch_time = lerp(mMinTimeBetweenFetches, mMaxTimeBetweenFetches, 0.5f); -		if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() > slow_fetch_time) -		{ -			// Double timeouts on failure. -			mMinTimeBetweenFetches = llmin(mMinTimeBetweenFetches * 2.f, 10.f); -			mMaxTimeBetweenFetches = llmin(mMaxTimeBetweenFetches * 2.f, 120.f); -			LL_DEBUGS(LOG_INV) << "Inventory fetch times grown to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; -			// fetch is no longer considered "timely" although we will wait for full time-out. -			mTimelyFetchPending = FALSE; -		} - -		while(1) -		{ -			if (mFetchQueue.empty()) -			{ -				break; -			} - -			if (gDisconnected) -			{ -				// Just bail if we are disconnected. -				break; -			} - -			const FetchQueueInfo info = mFetchQueue.front(); - -			if (info.mIsCategory) -			{ - -				LLViewerInventoryCategory* cat = gInventory.getCategory(info.mUUID); - -				// Category has been deleted, remove from queue. -				if (!cat) -				{ -					mFetchQueue.pop_front(); -					continue; -				} -			 -				if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches &&  -					LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion()) -				{ -					// Category exists but has no children yet, fetch the descendants -					// for now, just request every time and rely on retry timer to throttle. -					if (cat->fetch()) -					{ -						mFetchTimer.reset(); -						mTimelyFetchPending = TRUE; -					} -					else -					{ -						//  The catagory also tracks if it has expired and here it says it hasn't -						//  yet.  Get out of here because nothing is going to happen until we -						//  update the timers. -						break; -					} -				} -				// Do I have all my children? -				else if (gInventory.isCategoryComplete(info.mUUID)) -				{ -					// Finished with this category, remove from queue. -					mFetchQueue.pop_front(); - -					// Add all children to queue. -					LLInventoryModel::cat_array_t* categories; -					LLInventoryModel::item_array_t* items; -					gInventory.getDirectDescendentsOf(cat->getUUID(), categories, items); -					for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); -						 it != categories->end(); -						 ++it) -					{ -						mFetchQueue.push_back(FetchQueueInfo((*it)->getUUID(),info.mRecursive)); -					} - -					// We received a response in less than the fast time. -					if (mTimelyFetchPending && mFetchTimer.getElapsedTimeF32() < fast_fetch_time) -					{ -						// Shrink timeouts based on success. -						mMinTimeBetweenFetches = llmax(mMinTimeBetweenFetches * 0.8f, 0.3f); -						mMaxTimeBetweenFetches = llmax(mMaxTimeBetweenFetches * 0.8f, 10.f); -						LL_DEBUGS(LOG_INV) << "Inventory fetch times shrunk to (" << mMinTimeBetweenFetches << ", " << mMaxTimeBetweenFetches << ")" << LL_ENDL; -					} - -					mTimelyFetchPending = FALSE; -					continue; -				} -				else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches) -				{ -					// Received first packet, but our num descendants does not match db's num descendants -					// so try again later. -					mFetchQueue.pop_front(); - -					if (mNumFetchRetries++ < MAX_FETCH_RETRIES) -					{ -						// push on back of queue -						mFetchQueue.push_back(info); -					} -					mTimelyFetchPending = FALSE; -					mFetchTimer.reset(); -					break; -				} - -				// Not enough time has elapsed to do a new fetch -				break; -			} -			else -			{ -				LLViewerInventoryItem* itemp = gInventory.getItem(info.mUUID); - -				mFetchQueue.pop_front(); -				if (!itemp)  -				{ -					continue; -				} - -				if (mFetchTimer.getElapsedTimeF32() > mMinTimeBetweenFetches) -				{ -					itemp->fetchFromServer(); -					mFetchTimer.reset(); -					mTimelyFetchPending = TRUE; -				} -				else if (itemp->mIsComplete) -				{ -					mTimelyFetchPending = FALSE; -				} -				else if (mFetchTimer.getElapsedTimeF32() > mMaxTimeBetweenFetches) -				{ -					mFetchQueue.push_back(info); -					mFetchTimer.reset(); -					mTimelyFetchPending = FALSE; -				} -				// Not enough time has elapsed to do a new fetch -				break; -			} -		} - -		// -		// DEPRECATED OLD CODE -		//-------------------------------------------------------------------------------- -#endif +		bulkFetch();  	}  } diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index 2139f85519..19fbfc2ed3 100755 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -87,12 +87,9 @@ private:  	BOOL mBackgroundFetchActive;  	bool mFolderFetchActive;  	S32 mFetchCount; -	BOOL mTimelyFetchPending; -	S32 mNumFetchRetries;  	LLFrameTimer mFetchTimer;  	F32 mMinTimeBetweenFetches; -	F32 mMaxTimeBetweenFetches;  	struct FetchQueueInfo  	{ diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp index f893daaeb2..9c00243f44 100755 --- a/indra/newview/lllandmarkactions.cpp +++ b/indra/newview/lllandmarkactions.cpp @@ -74,9 +74,9 @@ public:  		if (!landmark->getGlobalPos(landmark_global_pos))  			return false;  		//we have to round off each coordinates to compare positions properly -		return llround(mPos.mdV[VX]) ==  llround(landmark_global_pos.mdV[VX]) -				&& llround(mPos.mdV[VY]) ==  llround(landmark_global_pos.mdV[VY]) -				&& llround(mPos.mdV[VZ]) ==  llround(landmark_global_pos.mdV[VZ]); +		return ll_round(mPos.mdV[VX]) ==  ll_round(landmark_global_pos.mdV[VX]) +				&& ll_round(mPos.mdV[VY]) ==  ll_round(landmark_global_pos.mdV[VY]) +				&& ll_round(mPos.mdV[VZ]) ==  ll_round(landmark_global_pos.mdV[VZ]);  	}  }; @@ -320,7 +320,7 @@ void LLLandmarkActions::getRegionNameAndCoordsFromPosGlobal(const LLVector3d& gl  	{  		LLVector3 pos = sim_infop->getLocalPos(global_pos);  		std::string name = sim_infop->getName() ; -		cb(name, llround(pos.mV[VX]), llround(pos.mV[VY]),llround(pos.mV[VZ])); +		cb(name, ll_round(pos.mV[VX]), ll_round(pos.mV[VY]),ll_round(pos.mV[VZ]));  	}  	else  	{ @@ -364,7 +364,7 @@ void LLLandmarkActions::onRegionResponseNameAndCoords(region_name_and_coords_cal  	{  		LLVector3 local_pos = sim_infop->getLocalPos(global_pos);  		std::string name = sim_infop->getName() ; -		cb(name, llround(local_pos.mV[VX]), llround(local_pos.mV[VY]), llround(local_pos.mV[VZ])); +		cb(name, ll_round(local_pos.mV[VX]), ll_round(local_pos.mV[VY]), ll_round(local_pos.mV[VZ]));  	}  } diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp index 619140e922..8fb7550169 100755 --- a/indra/newview/lllocalbitmaps.cpp +++ b/indra/newview/lllocalbitmaps.cpp @@ -76,7 +76,6 @@ bool                        LLLocalBitmapMgr::sNeedsRebake;  static const F32 LL_LOCAL_TIMER_HEARTBEAT   = 3.0;  static const BOOL LL_LOCAL_USE_MIPMAPS      = true;  static const S32 LL_LOCAL_DISCARD_LEVEL     = 0; -static const U32 LL_LOCAL_TEXLAYER_FOR_IDX  = 0;  static const bool LL_LOCAL_SLAM_FOR_DEBUG   = true;  static const bool LL_LOCAL_REPLACE_ON_DEL   = true;  static const S32 LL_LOCAL_UPDATE_RETRIES    = 5; diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp index 680b35b550..162d6e003e 100755 --- a/indra/newview/lllocationhistory.cpp +++ b/indra/newview/lllocationhistory.cpp @@ -127,7 +127,7 @@ void LLLocationHistory::save() const  	}  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open location history file \"" << mFilename << "\" for writing" << LL_ENDL; @@ -148,7 +148,7 @@ void LLLocationHistory::load()  	// build filename for each user  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename); -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{ diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index cadbc16f1e..7ddacf3033 100755 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -302,7 +302,7 @@ void LLLogChat::saveHistory(const std::string& filename,  		return;  	} -	llofstream file (LLLogChat::makeLogFileName(filename), std::ios_base::app); +	llofstream file(LLLogChat::makeLogFileName(filename).c_str(), std::ios_base::app);  	if (!file.is_open())  	{  		LL_WARNS() << "Couldn't open chat history log! - " + filename << LL_ENDL; diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index df59283bc4..b4d0bb6823 100755 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -58,7 +58,6 @@  #include "llmachineid.h"  #include "llupdaterservice.h"  #include "llevents.h" -#include "llnotificationsutil.h"  #include "llappviewer.h"  #include <boost/scoped_ptr.hpp> @@ -75,9 +74,14 @@ namespace {  	{  	public:  		MandatoryUpdateMachine(LLLoginInstance & loginInstance, LLUpdaterService & updaterService); -		 +  		void start(void); -		 + +		LLNotificationsInterface& getNotificationsInterface() const +		{ +			return mLoginInstance.getNotificationsInterface(); +		} +  	private:  		class State;  		class CheckingForUpdate; @@ -85,9 +89,9 @@ namespace {  		class ReadyToInstall;   		class StartingUpdaterService;  		class WaitingForDownload; -		 -		LLLoginInstance & mLoginInstance; +  		boost::scoped_ptr<State> mState; +		LLLoginInstance &  mLoginInstance;  		LLUpdaterService & mUpdaterService;  		void setCurrentState(State * newState); @@ -145,7 +149,7 @@ namespace {  		virtual void exit(void);  	private: -		MandatoryUpdateMachine & mMachine; +		//MandatoryUpdateMachine & mMachine;  	}; @@ -328,7 +332,7 @@ MandatoryUpdateMachine::Error::Error(MandatoryUpdateMachine & machine):  void MandatoryUpdateMachine::Error::enter(void)  {  	LL_INFOS() << "entering error" << LL_ENDL; -	LLNotificationsUtil::add("FailedRequiredUpdateInstall", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::Error::onButtonClicked, this, _1, _2)); +	mMachine.getNotificationsInterface().add("FailedRequiredUpdateInstall", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::Error::onButtonClicked, this, _1, _2));  } @@ -349,8 +353,8 @@ void MandatoryUpdateMachine::Error::onButtonClicked(const LLSD &, const LLSD &)  //----------------------------------------------------------------------------- -MandatoryUpdateMachine::ReadyToInstall::ReadyToInstall(MandatoryUpdateMachine & machine): -	mMachine(machine) +MandatoryUpdateMachine::ReadyToInstall::ReadyToInstall(MandatoryUpdateMachine & machine) //: +	//mMachine(machine)  {  	; // No op.  } @@ -384,7 +388,7 @@ MandatoryUpdateMachine::StartingUpdaterService::StartingUpdaterService(Mandatory  void MandatoryUpdateMachine::StartingUpdaterService::enter(void)  {  	LL_INFOS() << "entering start update service" << LL_ENDL; -	LLNotificationsUtil::add("UpdaterServiceNotRunning", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::StartingUpdaterService::onButtonClicked, this, _1, _2)); +	mMachine.getNotificationsInterface().add("UpdaterServiceNotRunning", LLSD(), LLSD(), boost::bind(&MandatoryUpdateMachine::StartingUpdaterService::onButtonClicked, this, _1, _2));  } diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h index b0247da7c8..c6773bbf68 100755 --- a/indra/newview/lllogininstance.h +++ b/indra/newview/lllogininstance.h @@ -70,6 +70,7 @@ public:  	void setPlatformInfo(const std::string platform, const std::string platform_version);  	void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; } +	LLNotificationsInterface& getNotificationsInterface() const { return *mNotifications; }  	typedef boost::function<void()> UpdaterLauncherCallback;  	void setUpdaterLauncher(const UpdaterLauncherCallback& ulc) { mUpdaterLauncher = ulc; } diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp index cd6473921d..b5fd3df0f3 100755 --- a/indra/newview/llmachineid.cpp +++ b/indra/newview/llmachineid.cpp @@ -88,7 +88,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Failed to initialize security. Error code = 0x"  << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Failed to initialize security. Error code = 0x"  << hex << hres << LL_ENDL;              CoUninitialize();              return 1;                    // Program has failed.          } @@ -106,7 +106,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Failed to create IWbemLocator object." << " Err code = 0x" << hex << hres << LL_ENDL;              CoUninitialize();              return 1;                 // Program has failed.          } @@ -132,7 +132,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Could not connect. Error code = 0x"  << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Could not connect. Error code = 0x"  << hex << hres << LL_ENDL;              pLoc->Release();                   CoUninitialize();              return 1;                // Program has failed. @@ -157,7 +157,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Could not set proxy blanket. Error code = 0x"   << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Could not set proxy blanket. Error code = 0x"   << hex << hres << LL_ENDL;              pSvc->Release();              pLoc->Release();                   CoUninitialize(); @@ -178,7 +178,7 @@ S32 LLMachineID::init()          if (FAILED(hres))          { -            LL_DEBUGS("AppInit") << "Query for operating system name failed." << " Error code = 0x"  << hex << hres << LL_ENDL; +            LL_WARNS("AppInit") << "Query for operating system name failed." << " Error code = 0x"  << hex << hres << LL_ENDL;              pSvc->Release();              pLoc->Release();              CoUninitialize(); @@ -205,7 +205,7 @@ S32 LLMachineID::init()              // Get the value of the Name property              hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0); -            LL_DEBUGS("AppInit") << " Serial Number : " << vtProp.bstrVal << LL_ENDL; +            LL_INFOS("AppInit") << " Serial Number : " << vtProp.bstrVal << LL_ENDL;              // use characters in the returned Serial Number to create a byte array of size len              BSTR serialNumber ( vtProp.bstrVal);              unsigned int j = 0; @@ -252,7 +252,7 @@ S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len)      if (has_static_unique_id)      {          memcpy ( unique_id, &static_unique_id, len); -        LL_DEBUGS("AppInit") << "UniqueID: 0x"; +        LL_INFOS_ONCE("AppInit") << "UniqueID: 0x";          // Code between here and LL_ENDL is not executed unless the LL_DEBUGS          // actually produces output          for (size_t i = 0; i < len; ++i) diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp index 0935691ebc..8567180dd6 100755 --- a/indra/newview/llmanip.cpp +++ b/indra/newview/llmanip.cpp @@ -521,8 +521,8 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const std::string  	std::string val_string;  	std::string fraction_string; -	F32 val_to_print = llround(value, 0.001f); -	S32 fractional_portion = llround(fmodf(llabs(val_to_print), 1.f) * 100.f); +	F32 val_to_print = ll_round(value, 0.001f); +	S32 fractional_portion = ll_round(fmodf(llabs(val_to_print), 1.f) * 100.f);  	if (val_to_print < 0.f)  	{  		if (fractional_portion == 0) diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp index b2350e5a75..f172aa0955 100755 --- a/indra/newview/llmaniprotate.cpp +++ b/indra/newview/llmaniprotate.cpp @@ -368,9 +368,9 @@ void LLManipRotate::render()  	LLQuaternion object_rot = first_object->getRotationEdit();  	object_rot.getEulerAngles(&(euler_angles.mV[VX]), &(euler_angles.mV[VY]), &(euler_angles.mV[VZ]));  	euler_angles *= RAD_TO_DEG; -	euler_angles.mV[VX] = llround(fmodf(euler_angles.mV[VX] + 360.f, 360.f), 0.05f); -	euler_angles.mV[VY] = llround(fmodf(euler_angles.mV[VY] + 360.f, 360.f), 0.05f); -	euler_angles.mV[VZ] = llround(fmodf(euler_angles.mV[VZ] + 360.f, 360.f), 0.05f); +	euler_angles.mV[VX] = ll_round(fmodf(euler_angles.mV[VX] + 360.f, 360.f), 0.05f); +	euler_angles.mV[VY] = ll_round(fmodf(euler_angles.mV[VY] + 360.f, 360.f), 0.05f); +	euler_angles.mV[VZ] = ll_round(fmodf(euler_angles.mV[VZ] + 360.f, 360.f), 0.05f);  	renderXYZ(euler_angles);  } @@ -1524,7 +1524,6 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )  				F32 mouse_angle = fmodf(atan2(projected_mouse * axis1, projected_mouse * axis2) * RAD_TO_DEG + 360.f, 360.f);  				F32 relative_mouse_angle = fmodf(mouse_angle + (SNAP_ANGLE_DETENTE / 2), SNAP_ANGLE_INCREMENT); -				//fmodf(llround(mouse_angle * RAD_TO_DEG, 7.5f) + 360.f, 360.f);  				LLVector3 object_axis;  				getObjectAxisClosestToMouse(object_axis); @@ -1608,7 +1607,6 @@ LLQuaternion LLManipRotate::dragConstrained( S32 x, S32 y )  			F32 mouse_angle = fmodf(atan2(projected_mouse * axis1, projected_mouse * axis2) * RAD_TO_DEG + 360.f, 360.f);  			F32 relative_mouse_angle = fmodf(mouse_angle + (SNAP_ANGLE_DETENTE / 2), SNAP_ANGLE_INCREMENT); -			//fmodf(llround(mouse_angle * RAD_TO_DEG, 7.5f) + 360.f, 360.f);  			LLVector3 object_axis;  			getObjectAxisClosestToMouse(object_axis); diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 52222c3727..407613d32c 100755 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -228,8 +228,6 @@ void LLManipScale::render()  		const F32 BOX_HANDLE_BASE_SIZE		= 50.0f;   // box size in pixels = BOX_HANDLE_BASE_SIZE * BOX_HANDLE_BASE_FACTOR  		const F32 BOX_HANDLE_BASE_FACTOR	= 0.2f; -		LLVector3 center_agent = gAgent.getPosAgentFromGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal()); -  		if (mObjectSelection->getSelectType() == SELECT_TYPE_HUD)  		{  			for (S32 i = 0; i < NUM_MANIPULATORS; i++) @@ -1536,8 +1534,8 @@ void LLManipScale::updateSnapGuides(const LLBBox& bbox)  	mScaleSnapUnit1 = mScaleSnapUnit1 / (mSnapDir1 * mScaleDir);  	mScaleSnapUnit2 = mScaleSnapUnit2 / (mSnapDir2 * mScaleDir); -	mTickPixelSpacing1 = llround((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir1).length()); -	mTickPixelSpacing2 = llround((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir2).length()); +	mTickPixelSpacing1 = ll_round((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir1).length()); +	mTickPixelSpacing2 = ll_round((F32)MIN_DIVISION_PIXEL_WIDTH / (mScaleDir % mSnapGuideDir2).length());  	if (uniform)  	{ @@ -1608,8 +1606,8 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		F32 grid_offset2 = fmodf(dist_grid_axis, smallest_subdivision2);  		// how many smallest grid units are we away from largest grid scale? -		S32 sub_div_offset_1 = llround(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1 / sGridMinSubdivisionLevel) / smallest_subdivision1); -		S32 sub_div_offset_2 = llround(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2 / sGridMinSubdivisionLevel) / smallest_subdivision2); +		S32 sub_div_offset_1 = ll_round(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1 / sGridMinSubdivisionLevel) / smallest_subdivision1); +		S32 sub_div_offset_2 = ll_round(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2 / sGridMinSubdivisionLevel) / smallest_subdivision2);  		S32 num_ticks_per_side1 = llmax(1, lltrunc(0.5f * mSnapGuideLength / smallest_subdivision1));  		S32 num_ticks_per_side2 = llmax(1, lltrunc(0.5f * mSnapGuideLength / smallest_subdivision2)); @@ -1663,7 +1661,7 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		LLVector2 screen_translate_axis(llabs(mScaleDir * LLViewerCamera::getInstance()->getLeftAxis()), llabs(mScaleDir * LLViewerCamera::getInstance()->getUpAxis()));  		screen_translate_axis.normalize(); -		S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing); +		S32 tick_label_spacing = ll_round(screen_translate_axis * sTickLabelSpacing);  		for (pass = 0; pass < 3; pass++)  		{ @@ -1743,8 +1741,8 @@ void LLManipScale::renderSnapGuides(const LLBBox& bbox)  		stop_tick = llmin(max_ticks1, num_ticks_per_side1);  		F32 grid_resolution = mObjectSelection->getSelectType() == SELECT_TYPE_HUD ? 0.25f : llmax(gSavedSettings.getF32("GridResolution"), 0.001f); -		S32 label_sub_div_offset_1 = llround(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1  * 32.f) / smallest_subdivision1); -		S32 label_sub_div_offset_2 = llround(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2  * 32.f) / smallest_subdivision2); +		S32 label_sub_div_offset_1 = ll_round(fmod(dist_grid_axis - grid_offset1, mScaleSnapUnit1  * 32.f) / smallest_subdivision1); +		S32 label_sub_div_offset_2 = ll_round(fmod(dist_grid_axis - grid_offset2, mScaleSnapUnit2  * 32.f) / smallest_subdivision2);  		for (S32 i = start_tick; i <= stop_tick; i++)  		{ diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index d22672bc16..394db71fb9 100755 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -65,7 +65,6 @@  const S32 NUM_AXES = 3;  const S32 MOUSE_DRAG_SLOP = 2;       // pixels -const F32 HANDLE_HIDE_ANGLE = 0.15f; // radians  const F32 SELECTED_ARROW_SCALE = 1.3f;  const F32 MANIPULATOR_HOTSPOT_START = 0.2f;  const F32 MANIPULATOR_HOTSPOT_END = 1.2f; @@ -1246,7 +1245,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(fmodf(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() / sGridMinSubdivisionLevel) / smallest_grid_unit_scale); +		S32 sub_div_offset = ll_round(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); @@ -1361,12 +1360,12 @@ void LLManipTranslate::renderSnapGuides()  			}  		} -		sub_div_offset = llround(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() * 32.f) / smallest_grid_unit_scale); +		sub_div_offset = ll_round(fmod(dist_grid_axis - offset_nearest_grid_unit, getMinGridScale() * 32.f) / smallest_grid_unit_scale);  		LLVector2 screen_translate_axis(llabs(translate_axis * LLViewerCamera::getInstance()->getLeftAxis()), llabs(translate_axis * LLViewerCamera::getInstance()->getUpAxis()));  		screen_translate_axis.normVec(); -		S32 tick_label_spacing = llround(screen_translate_axis * sTickLabelSpacing); +		S32 tick_label_spacing = ll_round(screen_translate_axis * sTickLabelSpacing);  		// render tickmark values  		for (S32 i = -num_ticks_per_side; i <= num_ticks_per_side; i++) @@ -1404,7 +1403,7 @@ void LLManipTranslate::renderSnapGuides()  				F32 offset_val = 0.5f * tick_offset.mV[ARROW_TO_AXIS[mManipPart]] / getMinGridScale();  				EGridMode grid_mode = LLSelectMgr::getInstance()->getGridMode();  				F32 text_highlight = 0.8f; -				if(i - llround(offset_nearest_grid_unit / smallest_grid_unit_scale) == 0 && mInSnapRegime) +				if(i - ll_round(offset_nearest_grid_unit / smallest_grid_unit_scale) == 0 && mInSnapRegime)  				{  					text_highlight = 1.f;  				} diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index f4e08dc790..b96bdd73ff 100755 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -120,8 +120,8 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :  	if(!getDecoupleTextureSize())  	{ -		S32 screen_width = llround((F32)getRect().getWidth() * LLUI::getScaleFactor().mV[VX]); -		S32 screen_height = llround((F32)getRect().getHeight() * LLUI::getScaleFactor().mV[VY]); +		S32 screen_width = ll_round((F32)getRect().getWidth() * LLUI::getScaleFactor().mV[VX]); +		S32 screen_height = ll_round((F32)getRect().getHeight() * LLUI::getScaleFactor().mV[VY]);  		setTextureSize(screen_width, screen_height);  	} @@ -474,8 +474,8 @@ void LLMediaCtrl::reshape( S32 width, S32 height, BOOL called_from_parent )  {  	if(!getDecoupleTextureSize())  	{ -		S32 screen_width = llround((F32)width * LLUI::getScaleFactor().mV[VX]); -		S32 screen_height = llround((F32)height * LLUI::getScaleFactor().mV[VY]); +		S32 screen_width = ll_round((F32)width * LLUI::getScaleFactor().mV[VX]); +		S32 screen_height = ll_round((F32)height * LLUI::getScaleFactor().mV[VY]);  		// when floater is minimized, these sizes are negative  		if ( screen_height > 0 && screen_width > 0 ) @@ -789,13 +789,13 @@ void LLMediaCtrl::draw()  					{  						// max width, adjusted height  						width = r.getWidth(); -						height = llmin(llmax(llround(width / media_aspect), 0), r.getHeight()); +						height = llmin(llmax(ll_round(width / media_aspect), 0), r.getHeight());  					}  					else  					{  						// max height, adjusted width  						height = r.getHeight(); -						width = llmin(llmax(llround(height * media_aspect), 0), r.getWidth()); +						width = llmin(llmax(ll_round(height * media_aspect), 0), r.getWidth());  					}  				}  				else @@ -879,14 +879,14 @@ void LLMediaCtrl::convertInputCoords(S32& x, S32& y)  		coords_opengl = mMediaSource->getMediaPlugin()->getTextureCoordsOpenGL();  	} -	x = llround((F32)x * LLUI::getScaleFactor().mV[VX]); +	x = ll_round((F32)x * LLUI::getScaleFactor().mV[VX]);  	if ( ! coords_opengl )  	{ -		y = llround((F32)(y) * LLUI::getScaleFactor().mV[VY]); +		y = ll_round((F32)(y) * LLUI::getScaleFactor().mV[VY]);  	}  	else  	{ -		y = llround((F32)(getRect().getHeight() - y) * LLUI::getScaleFactor().mV[VY]); +		y = ll_round((F32)(getRect().getHeight() - y) * LLUI::getScaleFactor().mV[VY]);  	};  } diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp index 691be13610..2fb9e60b29 100755 --- a/indra/newview/llmediadataclient.cpp +++ b/indra/newview/llmediadataclient.cpp @@ -92,7 +92,7 @@ std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue  std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q);  template <typename T> -static typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type) +typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type)  {  	for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter)  	{ @@ -106,7 +106,7 @@ static typename T::iterator find_matching_request(T &c, const LLMediaDataClient:  }  template <typename T> -static typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type) +typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type)  {  	for(typename T::iterator iter = c.begin(); iter != c.end(); ++iter)  	{ @@ -123,7 +123,7 @@ static typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMedi  // to other elements in the container (such as std::vector).  // If the implementation is changed to use a container with this property, this will need to be revisited.  template <typename T> -static void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type) +void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type)  {  	for(typename T::iterator iter = c.begin(); iter != c.end();)  	{ @@ -171,10 +171,10 @@ bool LLMediaDataClient::isEmpty() const  bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)  { -	if(find_matching_request(mQueue, object->getID()) != mQueue.end()) +	if(find_matching_request(mQueue, object->getID(), LLMediaDataClient::Request::ANY) != mQueue.end())  		return true; -	if(find_matching_request(mUnQueuedRequests, object->getID()) != mUnQueuedRequests.end()) +	if(find_matching_request(mUnQueuedRequests, object->getID(), LLMediaDataClient::Request::ANY) != mUnQueuedRequests.end())  		return true;  	return false; @@ -183,8 +183,8 @@ bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)  void LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)  {  	LL_DEBUGS("LLMediaDataClient") << "removing requests matching ID " << object->getID() << LL_ENDL; -	remove_matching_requests(mQueue, object->getID()); -	remove_matching_requests(mUnQueuedRequests, object->getID()); +	remove_matching_requests(mQueue, object->getID(), LLMediaDataClient::Request::ANY); +	remove_matching_requests(mUnQueuedRequests, object->getID(), LLMediaDataClient::Request::ANY);  }  void LLMediaDataClient::startQueueTimer()  @@ -785,7 +785,7 @@ bool LLObjectMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &ob  	if(LLMediaDataClient::isInQueue(object))  		return true; -	if(find_matching_request(mRoundRobinQueue, object->getID()) != mRoundRobinQueue.end()) +	if(find_matching_request(mRoundRobinQueue, object->getID(), LLMediaDataClient::Request::ANY) != mRoundRobinQueue.end())  		return true;  	return false; @@ -796,7 +796,7 @@ void LLObjectMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr  	// First, call parent impl.  	LLMediaDataClient::removeFromQueue(object); -	remove_matching_requests(mRoundRobinQueue, object->getID()); +	remove_matching_requests(mRoundRobinQueue, object->getID(), LLMediaDataClient::Request::ANY);  }  bool LLObjectMediaDataClient::processQueueTimer() @@ -952,7 +952,7 @@ void LLObjectMediaNavigateClient::enqueue(Request *request)  	}  	// If there's already a matching request in the queue, remove it. -	request_queue_t::iterator iter = find_matching_request(mQueue, request); +	request_queue_t::iterator iter = find_matching_request(mQueue, request, LLMediaDataClient::Request::ANY);  	if(iter != mQueue.end())  	{  		LL_DEBUGS("LLMediaDataClient") << "removing matching queued request " << (**iter) << LL_ENDL; @@ -960,7 +960,7 @@ void LLObjectMediaNavigateClient::enqueue(Request *request)  	}  	else  	{ -		request_set_t::iterator set_iter = find_matching_request(mUnQueuedRequests, request); +		request_set_t::iterator set_iter = find_matching_request(mUnQueuedRequests, request, LLMediaDataClient::Request::ANY);  		if(set_iter != mUnQueuedRequests.end())  		{  			LL_DEBUGS("LLMediaDataClient") << "removing matching unqueued request " << (**set_iter) << LL_ENDL; diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h index 231b883c32..80dd519812 100755 --- a/indra/newview/llmediadataclient.h +++ b/indra/newview/llmediadataclient.h @@ -281,10 +281,9 @@ private:  	bool mQueueTimerIsRunning; -	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); -	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); -	template <typename T> friend void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type = LLMediaDataClient::Request::ANY); - +	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLMediaDataClient::Request *request, LLMediaDataClient::Request::Type match_type); +	template <typename T> friend typename T::iterator find_matching_request(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type); +	template <typename T> friend void remove_matching_requests(T &c, const LLUUID &id, LLMediaDataClient::Request::Type match_type);  };  // MediaDataClient specific for the ObjectMedia cap diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp index 252d1b78ea..ff86400a56 100755 --- a/indra/newview/llmorphview.cpp +++ b/indra/newview/llmorphview.cpp @@ -47,17 +47,8 @@  LLMorphView *gMorphView = NULL; - -const F32 EDIT_AVATAR_ORBIT_SPEED = 0.1f; -const F32 EDIT_AVATAR_MAX_CAMERA_PITCH = 0.5f; - -const F32 CAMERA_MOVE_TIME = 0.5f;  const F32 MORPH_NEAR_CLIP = 0.1f; -const F32 CAMERA_DIST_MIN  = 0.4f; -const F32 CAMERA_DIST_MAX  = 4.0f; -const F32 CAMERA_DIST_STEP = 1.5f; -  //-----------------------------------------------------------------------------  // LLMorphView()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 1685a18e26..d7e7f13e87 100755 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -67,7 +67,6 @@ const F32 LLNetMap::MAP_SCALE_MIN = 32;  const F32 LLNetMap::MAP_SCALE_MID = 1024;  const F32 LLNetMap::MAP_SCALE_MAX = 4096; -const F32 MAP_SCALE_INCREMENT = 16;  const F32 MAP_SCALE_ZOOM_FACTOR = 1.04f; // Zoom in factor per click of scroll wheel (4%)  const F32 MIN_DOT_RADIUS = 3.5f;  const F32 DOT_SCALE = 0.75f; @@ -210,7 +209,7 @@ void LLNetMap::draw()  		}  		// figure out where agent is -		S32 region_width = llround(LLWorld::getInstance()->getRegionWidthInMeters()); +		S32 region_width = ll_round(LLWorld::getInstance()->getRegionWidthInMeters());  		for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  			 iter != LLWorld::getInstance()->getRegionList().end(); ++iter) @@ -381,8 +380,8 @@ void LLNetMap::draw()  						(pos_map.mV[VX] >= getRect().getWidth()) ||  						(pos_map.mV[VY] >= getRect().getHeight()) )  					{ -						S32 x = llround( pos_map.mV[VX] ); -						S32 y = llround( pos_map.mV[VY] ); +						S32 x = ll_round( pos_map.mV[VX] ); +						S32 y = ll_round( pos_map.mV[VY] );  						LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10);  					} else  					{ @@ -422,12 +421,12 @@ void LLNetMap::draw()  		// Draw dot for self avatar position  		LLVector3d pos_global = gAgent.getPositionGlobal();  		pos_map = globalPosToView(pos_global); -		S32 dot_width = llround(mDotRadius * 2.f); +		S32 dot_width = ll_round(mDotRadius * 2.f);  		LLUIImagePtr you = LLWorldMapView::sAvatarYouLargeImage;  		if (you)  		{ -			you->draw(llround(pos_map.mV[VX] - mDotRadius), -					  llround(pos_map.mV[VY] - mDotRadius), +			you->draw(ll_round(pos_map.mV[VX] - mDotRadius), +					  ll_round(pos_map.mV[VY] - mDotRadius),  					  dot_width,  					  dot_width); @@ -531,8 +530,8 @@ void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color,  	{  		if (draw_arrow)  		{ -			S32 x = llround( pos_local.mV[VX] ); -			S32 y = llround( pos_local.mV[VY] ); +			S32 x = ll_round( pos_local.mV[VX] ); +			S32 y = ll_round( pos_local.mV[VY] );  			LLWorldMapView::drawTrackingCircle( getRect(), x, y, color, 1, 10 );  			LLWorldMapView::drawTrackingArrow( getRect(), x, y, color );  		} @@ -548,8 +547,8 @@ void LLNetMap::drawTracking(const LLVector3d& pos_global, const LLColor4& color,  LLVector3d LLNetMap::viewPosToGlobal( S32 x, S32 y )  { -	x -= llround(getRect().getWidth() / 2 + mCurPan.mV[VX]); -	y -= llround(getRect().getHeight() / 2 + mCurPan.mV[VY]); +	x -= ll_round(getRect().getWidth() / 2 + mCurPan.mV[VX]); +	y -= ll_round(getRect().getHeight() / 2 + mCurPan.mV[VY]);  	LLVector3 pos_local( (F32)x, (F32)y, 0 ); @@ -685,7 +684,7 @@ void LLNetMap::renderScaledPointGlobal( const LLVector3d& pos, const LLColor4U &  	LLVector3 local_pos;  	local_pos.setVec( pos - mObjectImageCenterGlobal ); -	S32 diameter_pixels = llround(2 * radius_meters * mObjectMapTPM); +	S32 diameter_pixels = ll_round(2 * radius_meters * mObjectMapTPM);  	renderPoint( local_pos, color, diameter_pixels );  } @@ -701,8 +700,8 @@ void LLNetMap::renderPoint(const LLVector3 &pos_local, const LLColor4U &color,  	const S32 image_width = (S32)mObjectImagep->getWidth();  	const S32 image_height = (S32)mObjectImagep->getHeight(); -	S32 x_offset = llround(pos_local.mV[VX] * mObjectMapTPM + image_width / 2); -	S32 y_offset = llround(pos_local.mV[VY] * mObjectMapTPM + image_height / 2); +	S32 x_offset = ll_round(pos_local.mV[VX] * mObjectMapTPM + image_width / 2); +	S32 y_offset = ll_round(pos_local.mV[VY] * mObjectMapTPM + image_height / 2);  	if ((x_offset < 0) || (x_offset >= image_width))  	{ @@ -781,7 +780,7 @@ void LLNetMap::createObjectImage()  	// ... which is, the diagonal of the rect.  	F32 width = (F32)getRect().getWidth();  	F32 height = (F32)getRect().getHeight(); -	S32 square_size = llround( sqrt(width*width + height*height) ); +	S32 square_size = ll_round( sqrt(width*width + height*height) );  	// Find the least power of two >= the minimum size.  	const S32 MIN_SIZE = 64; diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp index e9970de58c..3418b33d37 100755 --- a/indra/newview/llnotificationstorage.cpp +++ b/indra/newview/llnotificationstorage.cpp @@ -123,14 +123,18 @@ bool LLNotificationStorage::readNotifications(LLSD& pNotificationData, bool is_n  	{  		LLPointer<LLSDParser> parser = new LLSDXMLParser();  		didFileRead = (parser->parse(notifyFile, pNotificationData, LLSDSerialize::SIZE_UNLIMITED) >= 0); +        notifyFile.close(); +  		if (!didFileRead)  		{  			LL_WARNS("LLNotificationStorage") << "Failed to parse open notifications from file '" << mFileName  -				<< "'" << LL_ENDL; +                                              << "'" << LL_ENDL; +            LLFile::remove(filename); +			LL_WARNS("LLNotificationStorage") << "Removed invalid open notifications file '" << mFileName  +                                              << "'" << LL_ENDL;  		}  	} - -	LL_INFOS("LLNotificationStorage") << "ending read '" << filename << "'" << LL_ENDL; +      	if (!didFileRead)  	{  		if(is_new_filename) diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp index 3cd39d7c7e..878f1af9ef 100755 --- a/indra/newview/llpanelclassified.cpp +++ b/indra/newview/llpanelclassified.cpp @@ -462,9 +462,9 @@ std::string LLPanelClassifiedInfo::createLocationText(  	if (!pos_global.isNull())  	{ -		S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; -		S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; -		S32 region_z = llround((F32)pos_global.mdV[VZ]); +		S32 region_x = ll_round((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; +		S32 region_y = ll_round((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; +		S32 region_z = ll_round((F32)pos_global.mdV[VZ]);  		location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));  	} diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 717aece8dd..afc1a789c4 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -77,8 +77,6 @@ const S32 MATMEDIA_MEDIA = 1;		// Media  const S32 MATTYPE_DIFFUSE = 0;		// Diffuse material texture  const S32 MATTYPE_NORMAL = 1;		// Normal map  const S32 MATTYPE_SPECULAR = 2;		// Specular map -const S32 ALPHAMODE_NONE = 0;		// No alpha mask applied -const S32 ALPHAMODE_BLEND = 1;		// Alpha blending mode  const S32 ALPHAMODE_MASK = 2;		// Alpha masking mode  const S32 BUMPY_TEXTURE = 18;		// use supplied normal map  const S32 SHINY_TEXTURE = 4;		// use supplied specular map diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 2f7c44f899..a2e136bd5a 100755 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -503,8 +503,8 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)  				land_type = LLTrans::getString("land_type_unknown");  			} -			S32 region_x = llround(global_x) % REGION_WIDTH_UNITS; -			S32 region_y = llround(global_y) % REGION_WIDTH_UNITS; +			S32 region_x = ll_round(global_x) % REGION_WIDTH_UNITS; +			S32 region_y = ll_round(global_y) % REGION_WIDTH_UNITS;  			std::string location = sim_name + llformat(" (%d, %d)", region_x, region_y);  			std::string area; diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h index 32a45100f4..7e4fce80e4 100755 --- a/indra/newview/llpanellandaudio.h +++ b/indra/newview/llpanellandaudio.h @@ -51,7 +51,6 @@ private:  	LLCheckBoxCtrl* mCheckEstateDisabledVoice;  	LLCheckBoxCtrl* mCheckParcelVoiceLocal;	  	LLLineEditor*	mMusicURLEdit; -	LLCheckBoxCtrl* mMusicUrlCheck;  	LLCheckBoxCtrl* mCheckAVSoundAny;  	LLCheckBoxCtrl* mCheckAVSoundGroup; diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index 63ddc05037..a660cb3b21 100755 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -131,9 +131,9 @@ void LLPanelLandmarkInfo::setInfoType(EInfoType type)  			if (name.empty())  			{ -				S32 region_x = llround(agent_pos.mV[VX]); -				S32 region_y = llround(agent_pos.mV[VY]); -				S32 region_z = llround(agent_pos.mV[VZ]); +				S32 region_x = ll_round(agent_pos.mV[VX]); +				S32 region_y = ll_round(agent_pos.mV[VY]); +				S32 region_z = ll_round(agent_pos.mV[VZ]);  				std::string region_name;  				LLViewerRegion* region = parcel_mgr->getSelectionRegion(); diff --git a/indra/newview/llpanellandmedia.h b/indra/newview/llpanellandmedia.h index 0e6292a25e..63cfa01470 100755 --- a/indra/newview/llpanellandmedia.h +++ b/indra/newview/llpanellandmedia.h @@ -59,12 +59,10 @@ private:  	LLButton*		mSetURLButton;  	LLSpinCtrl*		mMediaHeightCtrl;  	LLSpinCtrl*		mMediaWidthCtrl; -	LLTextBox*		mMediaResetCtrlLabel;  	LLTextBox*		mMediaSizeCtrlLabel;  	LLTextureCtrl*	mMediaTextureCtrl;  	LLCheckBoxCtrl*	mMediaAutoScaleCheck;  	LLCheckBoxCtrl*	mMediaLoopCheck; -	LLCheckBoxCtrl* mMediaUrlCheck;  	LLHandle<LLFloater>	mURLEntryFloater; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 34f3bbf73e..cc8c3edd51 100755 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -75,9 +75,6 @@  #include "llsdserialize.h" -const S32 BLACK_BORDER_HEIGHT = 160; -const S32 MAX_PASSWORD = 16; -  LLPanelLogin *LLPanelLogin::sInstance = NULL;  BOOL LLPanelLogin::sCapslockDidNotification = FALSE; @@ -175,7 +172,6 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	mUsernameLength(0),  	mPasswordLength(0),  	mLocationLength(0), -	mFavoriteSelected(false),  	mShowFavorites(false)  {  	setBackgroundVisible(FALSE); @@ -196,7 +192,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	}  	else  	{ -	buildFromFile( "panel_login.xml"); +		buildFromFile( "panel_login.xml");  	}  	reshape(rect.getWidth(), rect.getHeight()); @@ -204,22 +200,18 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  	LLLineEditor* password_edit(getChild<LLLineEditor>("password_edit"));  	password_edit->setKeystrokeCallback(onPassKey, this);  	// STEAM-14: When user presses Enter with this field in focus, initiate login -	password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLast, this)); +	password_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this));  	// change z sort of clickable text to be behind buttons  	sendChildToBack(getChildView("forgot_password_text"));  	LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo");  	updateLocationSelectorsVisibility(); // separate so that it can be called from preferences +	favorites_combo->setReturnCallback(boost::bind(&LLPanelLogin::onClickConnect, this));  	favorites_combo->setFocusLostCallback(boost::bind(&LLPanelLogin::onLocationSLURL, this)); -	favorites_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectFavorite, this));  	LLComboBox* server_choice_combo = getChild<LLComboBox>("server_combo");  	server_choice_combo->setCommitCallback(boost::bind(&LLPanelLogin::onSelectServer, this)); - -	LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit"); -	location_edit->setKeystrokeCallback(boost::bind(&LLPanelLogin::onLocationEditChanged, this, _1), NULL); -	location_edit->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnectLocation, this));  	// Load all of the grids, sorted, and then add a bar and the current grid at the top  	server_choice_combo->removeall(); @@ -267,9 +259,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,  		LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed  	} -	childSetAction("connect_btn", onClickConnectLast, this); -	childSetAction("connect_favorite_btn", onClickConnectFavorite, this); -	childSetAction("connect_location_btn", onClickConnectLocation, this); +	childSetAction("connect_btn", onClickConnect, this);  	LLButton* def_btn = getChild<LLButton>("connect_btn");  	setDefaultBtn(def_btn); @@ -303,7 +293,7 @@ void LLPanelLogin::addFavoritesToStartLocation()  	LLComboBox* combo = getChild<LLComboBox>("start_location_combo");  	if (!combo) return;  	int num_items = combo->getItemCount(); -	for (int i = num_items - 1; i > 0; i--) +	for (int i = num_items - 1; i > 1; i--)  	{  		combo->remove(i);  	} @@ -318,10 +308,10 @@ void LLPanelLogin::addFavoritesToStartLocation()  	LLSD fav_llsd;  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (!file.is_open())  	{ -		file.open(old_filename); +		file.open(old_filename.c_str());  		if (!file.is_open()) return;  	}  	LLSDSerialize::fromXML(fav_llsd, file); @@ -351,6 +341,10 @@ void LLPanelLogin::addFavoritesToStartLocation()  			{  				mShowFavorites = true;  				combo->add(label, value); +				if ( LLStartUp::getStartSLURL().getSLURLString() == value) +				{ +					combo->selectByValue(value); +				}  			}  		}  		break; @@ -665,7 +659,6 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  	LL_DEBUGS("AppInit")<<new_start_slurl.asString()<<LL_ENDL;  	LLComboBox* location_combo = sInstance->getChild<LLComboBox>("start_location_combo"); -	LLLineEditor* location_edit = sInstance->getChild<LLLineEditor>("location_edit");  	/*  	 * Determine whether or not the new_start_slurl modifies the grid.  	 * @@ -697,7 +690,10 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)  			}  			if ( new_start_slurl.getLocationString().length() )  			{ -				location_edit->setValue(new_start_slurl.getLocationString()); +				if (location_combo->getCurrentIndex() == -1) +				{ +					location_combo->setLabel(new_start_slurl.getLocationString()); +				}  				sInstance->mLocationLength = new_start_slurl.getLocationString().length();  				sInstance->updateLoginButtons();  			} @@ -836,33 +832,6 @@ void LLPanelLogin::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev  // Protected methods  //---------------------------------------------------------------------------  // static -void LLPanelLogin::onClickConnectLast(void *) -{ -	std::string location = LLSLURL::SIM_LOCATION_LAST; -	LLStartUp::setStartSLURL(location); - -	void* unused_parameter = 0; -	LLPanelLogin::sInstance->onClickConnect(unused_parameter); -} - -void LLPanelLogin::onClickConnectFavorite(void *) -{ -	LLPanelLogin::sInstance->onLocationSLURL(); - -	void* unused_parameter = 0; -	LLPanelLogin::sInstance->onClickConnect(unused_parameter); -} - -void LLPanelLogin::onClickConnectLocation(void *) -{ -	std::string location = sInstance->getChild<LLUICtrl>("location_edit")->getValue().asString(); -	LLStartUp::setStartSLURL(location); - -	void* unused_parameter = 0; -	LLPanelLogin::sInstance->onClickConnect(unused_parameter); -} - -// static  void LLPanelLogin::onClickConnect(void *)  {  	if (sInstance && sInstance->mCallback) @@ -1010,60 +979,9 @@ void LLPanelLogin::updateServer()  void LLPanelLogin::updateLoginButtons()  { -	LLButton* last_login_btn = getChild<LLButton>("connect_btn"); -	LLButton* loc_btn = getChild<LLButton>("connect_location_btn"); -	LLButton* fav_btn = getChild<LLButton>("connect_favorite_btn"); +	LLButton* login_btn = getChild<LLButton>("connect_btn"); -	// no username or no password - turn all buttons off -	if ( mUsernameLength == 0 || mPasswordLength == 0 ) -	{ -		last_login_btn->setEnabled(false); -		loc_btn->setEnabled(false); -		fav_btn->setEnabled(false); -	}; - -	// we have a username and a password -	if ( mUsernameLength != 0 && mPasswordLength != 0 ) -	{ -		// last login button always enabled for this case -		last_login_btn->setEnabled(true); - -		// double check status of favorites combo (must be items there and one must be selected to enable button) -		LLComboBox* favorites_combo = getChild<LLComboBox>("start_location_combo"); -		int num_items = favorites_combo->getItemCount(); -		int selected_index = favorites_combo->getCurrentIndex(); -		if ( num_items > 0 && selected_index >=0 ) -			mFavoriteSelected = true; -		else -			mFavoriteSelected = false; - -		// only turn on favorites login button if one is selected -		fav_btn->setEnabled( mFavoriteSelected ); - -		// only enable location login if there is content there -		if ( mLocationLength > 0 ) -			loc_btn->setEnabled(true); -		else -			loc_btn->setEnabled(false); -	} -} - -void LLPanelLogin::onLocationEditChanged(LLUICtrl* ctrl) -{ -	LLLineEditor* self = (LLLineEditor*)ctrl; -	if (self ) -	{ -		mLocationLength = self->getText().length(); -		updateLoginButtons(); -	} -} - -void LLPanelLogin::onSelectFavorite() -{ -	// no way to unselect a favorite once it's selected (i think) -	mFavoriteSelected = true; - -	updateLoginButtons(); +	login_btn->setEnabled(mUsernameLength != 0 && mPasswordLength != 0);  }  void LLPanelLogin::onSelectServer() @@ -1108,7 +1026,6 @@ void LLPanelLogin::onSelectServer()  				// the grid specified by the location is not this one, so clear the combo  				location_combo->setCurrentByIndex(0); // last location on the new grid  				location_combo->setTextEntry(LLStringUtil::null); -				mFavoriteSelected = true;  			}  		}			  		break; diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index aa63ffabfc..869f2f8d39 100755 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -90,14 +90,9 @@ private:  	friend class LLPanelLoginListener;  	void addFavoritesToStartLocation();  	void addUsersWithFavoritesToUsername(); -	void onLocationEditChanged(LLUICtrl* ctrl); -	void onSelectFavorite();  	void onSelectServer();  	void onLocationSLURL(); -	static void onClickConnectLast(void*); -	static void onClickConnectFavorite(void*); -	static void onClickConnectLocation(void*);  	static void onClickConnect(void*);  	static void onClickNewAccount(void*);  	static void onClickVersion(void*); @@ -120,7 +115,7 @@ private:  	static LLPanelLogin* sInstance;  	static BOOL		sCapslockDidNotification;  	bool			mFirstLoginThisInstall; -	bool mFavoriteSelected; +  	unsigned int mUsernameLength;  	unsigned int mPasswordLength;  	unsigned int mLocationLength; diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index eb037577be..17c0b226d0 100755 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -160,10 +160,9 @@ BOOL LLPanelMainInventory::postBuild()  	}  	// Now load the stored settings from disk, if available. -	std::ostringstream filterSaveName; -	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME); -	LL_INFOS() << "LLPanelMainInventory::init: reading from " << filterSaveName.str() << LL_ENDL; -	llifstream file(filterSaveName.str()); +	std::string filterSaveName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME)); +	LL_INFOS() << "LLPanelMainInventory::init: reading from " << filterSaveName << LL_ENDL; +	llifstream file(filterSaveName.c_str());  	LLSD savedFilterState;  	if (file.is_open())  	{ @@ -243,16 +242,17 @@ LLPanelMainInventory::~LLPanelMainInventory( void )  		}  	} -	std::ostringstream filterSaveName; -	filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME); -	llofstream filtersFile(filterSaveName.str()); +	std::string filterSaveName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, FILTERS_FILENAME)); +	llofstream filtersFile(filterSaveName.c_str());  	if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))  	{  		LL_WARNS() << "Could not write to filters save file " << filterSaveName << LL_ENDL;  	}  	else +    {  		filtersFile.close(); - +    } +      	gInventory.removeObserver(this);  	delete mSavedFolderState;  } diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 2fece32449..dcd0aab3ab 100755 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -412,9 +412,9 @@ void LLPanelObject::getState( )  	LLQuaternion object_rot = objectp->getRotationEdit();  	object_rot.getEulerAngles(&(mCurEulerDegrees.mV[VX]), &(mCurEulerDegrees.mV[VY]), &(mCurEulerDegrees.mV[VZ]));  	mCurEulerDegrees *= RAD_TO_DEG; -	mCurEulerDegrees.mV[VX] = fmod(llround(mCurEulerDegrees.mV[VX], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); -	mCurEulerDegrees.mV[VY] = fmod(llround(mCurEulerDegrees.mV[VY], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); -	mCurEulerDegrees.mV[VZ] = fmod(llround(mCurEulerDegrees.mV[VZ], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); +	mCurEulerDegrees.mV[VX] = fmod(ll_round(mCurEulerDegrees.mV[VX], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); +	mCurEulerDegrees.mV[VY] = fmod(ll_round(mCurEulerDegrees.mV[VY], OBJECT_ROTATION_PRECISION) + 360.f, 360.f); +	mCurEulerDegrees.mV[VZ] = fmod(ll_round(mCurEulerDegrees.mV[VZ], OBJECT_ROTATION_PRECISION) + 360.f, 360.f);  	if (enable_rotate)  	{ @@ -1568,9 +1568,9 @@ void LLPanelObject::sendRotation(BOOL btn_down)  	if (mObject.isNull()) return;  	LLVector3 new_rot(mCtrlRotX->get(), mCtrlRotY->get(), mCtrlRotZ->get()); -	new_rot.mV[VX] = llround(new_rot.mV[VX], OBJECT_ROTATION_PRECISION); -	new_rot.mV[VY] = llround(new_rot.mV[VY], OBJECT_ROTATION_PRECISION); -	new_rot.mV[VZ] = llround(new_rot.mV[VZ], OBJECT_ROTATION_PRECISION); +	new_rot.mV[VX] = ll_round(new_rot.mV[VX], OBJECT_ROTATION_PRECISION); +	new_rot.mV[VY] = ll_round(new_rot.mV[VY], OBJECT_ROTATION_PRECISION); +	new_rot.mV[VZ] = ll_round(new_rot.mV[VZ], OBJECT_ROTATION_PRECISION);  	// Note: must compare before conversion to radians  	LLVector3 delta = new_rot - mCurEulerDegrees; diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 55eaf74f74..c1d7a134fa 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -149,7 +149,6 @@ private:  	Updater*				mFriendListUpdater;  	Updater*				mNearbyListUpdater;  	Updater*				mRecentListUpdater; -	Updater*				mFacebookListUpdater;  	Updater*				mButtonsUpdater;      LLHandle< LLFloater >	mPicker;  }; diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 44cca21a76..8fa9aac024 100755 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -284,9 +284,9 @@ std::string LLPanelPickInfo::createLocationText(const std::string& owner_name, c  	if (!pos_global.isNull())  	{ -		S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; -		S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; -		S32 region_z = llround((F32)pos_global.mdV[VZ]); +		S32 region_x = ll_round((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; +		S32 region_y = ll_round((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; +		S32 region_z = ll_round((F32)pos_global.mdV[VZ]);  		location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z));  	}  	return location_text; diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 4e7c5f6ed2..e62b5a4f1d 100755 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -231,15 +231,15 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)  	// If the region position is zero, grab position from the global  	if(mPosRegion.isExactlyZero())  	{ -		region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS; -		region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS; -		region_z = llround(parcel_data.global_z); +		region_x = ll_round(parcel_data.global_x) % REGION_WIDTH_UNITS; +		region_y = ll_round(parcel_data.global_y) % REGION_WIDTH_UNITS; +		region_z = ll_round(parcel_data.global_z);  	}  	else  	{ -		region_x = llround(mPosRegion.mV[VX]); -		region_y = llround(mPosRegion.mV[VY]); -		region_z = llround(mPosRegion.mV[VZ]); +		region_x = ll_round(mPosRegion.mV[VX]); +		region_y = ll_round(mPosRegion.mV[VY]); +		region_z = ll_round(mPosRegion.mV[VZ]);  	}  	if (!parcel_data.name.empty()) diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index ed91d277dd..e853b2d050 100755 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -551,7 +551,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  		// Can't have more than region max tasks, regardless of parcel  		// object bonus factor. -		S32 primitives = llmin(llround(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()), +		S32 primitives = llmin(ll_round(parcel->getMaxPrimCapacity() * parcel->getParcelPrimBonus()),  							   (S32)region->getMaxTasks());  		const U8* available = (U8*)getString("available").c_str(); diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 2be96b9b78..4bcd932d4b 100755 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -75,7 +75,6 @@  #include "llviewerwindow.h"  // Constants -static const S32 LANDMARK_FOLDERS_MENU_WIDTH = 250;  static const F32 PLACE_INFO_UPDATE_INTERVAL = 3.0;  static const std::string AGENT_INFO_TYPE			= "agent";  static const std::string CREATE_LANDMARK_INFO_TYPE	= "create_landmark"; diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 7c0e448a99..f42df221e4 100755 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -630,12 +630,12 @@ void LLPanelPrimMediaControls::updateShape()  		// convert screenspace bbox to pixels (in screen coords)  		LLRect window_rect = gViewerWindow->getWorldViewRectScaled();  		LLCoordGL screen_min; -		screen_min.mX = llround((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f); -		screen_min.mY = llround((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f); +		screen_min.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (min.mV[VX] + 1.f) * 0.5f); +		screen_min.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (min.mV[VY] + 1.f) * 0.5f);  		LLCoordGL screen_max; -		screen_max.mX = llround((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f); -		screen_max.mY = llround((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f); +		screen_max.mX = ll_round((F32)window_rect.mLeft + (F32)window_rect.getWidth() * (max.mV[VX] + 1.f) * 0.5f); +		screen_max.mY = ll_round((F32)window_rect.mBottom + (F32)window_rect.getHeight() * (max.mV[VY] + 1.f) * 0.5f);  		// grow panel so that screenspace bounding box fits inside "media_region" element of panel  		LLRect media_panel_rect; diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h index 07d18d03c5..108991210f 100755 --- a/indra/newview/llplacesinventorybridge.h +++ b/indra/newview/llplacesinventorybridge.h @@ -85,6 +85,8 @@ protected:  class LLPlacesInventoryBridgeBuilder : public LLInventoryFolderViewModelBuilder  {  public: +	LLPlacesInventoryBridgeBuilder() {} +  	/*virtual*/ LLInvFVBridge* createBridge(LLAssetType::EType asset_type,  											LLAssetType::EType actual_asset_type,  											LLInventoryType::EType inv_type, diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 92febf6c85..7feb20332b 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -106,9 +106,6 @@ const std::string DEFAULT_SCRIPT_NAME = "New Script"; // *TODO:Translate?  const std::string DEFAULT_SCRIPT_DESC = "(No Description)"; // *TODO:Translate?  // Description and header information - -const S32 MAX_EXPORT_SIZE = 1000; -  const S32 MAX_HISTORY_COUNT = 10;  const F32 LIVE_HELP_REFRESH_TIME = 1.f; diff --git a/indra/newview/llscripteditor.cpp b/indra/newview/llscripteditor.cpp index 81920562a7..cd3a4dfd11 100644 --- a/indra/newview/llscripteditor.cpp +++ b/indra/newview/llscripteditor.cpp @@ -32,7 +32,6 @@  #include "lllocalcliprect.h"  const S32	UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32; -const S32	UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;  static LLDefaultChildRegistry::Register<LLScriptEditor> r("script_editor"); diff --git a/indra/newview/llsearchhistory.cpp b/indra/newview/llsearchhistory.cpp index 7b4bf63740..0ea05a03d6 100755 --- a/indra/newview/llsearchhistory.cpp +++ b/indra/newview/llsearchhistory.cpp @@ -43,7 +43,7 @@ bool LLSearchHistory::load()  {  	// build filename for each user  	std::string resolved_filename = getHistoryFilePath(); -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		return false; @@ -76,7 +76,7 @@ bool LLSearchHistory::save()  	// build filename for each user  	std::string resolved_filename = getHistoryFilePath();  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		return false; diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index fc9d9f0842..40516f9bbb 100755 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -640,7 +640,7 @@ LLBasicCertificateStore::~LLBasicCertificateStore()  // persist the store  void LLBasicCertificateStore::save()  { -	llofstream file_store(mFilename, llofstream::binary); +	llofstream file_store(mFilename.c_str(), std::ios_base::binary);  	if(!file_store.fail())  	{  		for(iterator cert = begin(); @@ -1331,7 +1331,7 @@ void LLSecAPIBasicHandler::_writeProtectedData()  	std::string tmp_filename = mProtectedDataFilename + ".tmp";  	llofstream protected_data_stream(tmp_filename.c_str(),  -										llofstream::binary); +                                     std::ios_base::binary);  	try  	{ @@ -1364,6 +1364,7 @@ void LLSecAPIBasicHandler::_writeProtectedData()  	}  	catch (...)  	{ +		LL_WARNS() << "LLProtectedDataException(Error writing Protected Data Store)" << LL_ENDL;  		// it's good practice to clean up any secure information on error  		// (even though this file isn't really secure.  Perhaps in the future  		// it may be, however. @@ -1372,20 +1373,35 @@ void LLSecAPIBasicHandler::_writeProtectedData()  		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData()  		// Decided throwing an exception here was overkill until we figure out why this happens  		//throw LLProtectedDataException("Error writing Protected Data Store"); -		LL_INFOS() << "LLProtectedDataException(Error writing Protected Data Store)" << LL_ENDL;  	} -	// move the temporary file to the specified file location. -	if((((LLFile::isfile(mProtectedDataFilename) != 0) &&  -		 (LLFile::remove(mProtectedDataFilename) != 0))) ||  -	   (LLFile::rename(tmp_filename, mProtectedDataFilename))) +    try +    { +        // move the temporary file to the specified file location. +        if(((   (LLFile::isfile(mProtectedDataFilename) != 0) +             && (LLFile::remove(mProtectedDataFilename) != 0))) +           || (LLFile::rename(tmp_filename, mProtectedDataFilename))) +        { +            LL_WARNS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL; +            LLFile::remove(tmp_filename); + +            // EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() +            // Decided throwing an exception here was overkill until we figure out why this happens +            //throw LLProtectedDataException("Could not overwrite protected data store"); +        } +	} +	catch (...)  	{ +		LL_WARNS() << "LLProtectedDataException(Error renaming '" << tmp_filename +                   << "' to '" << mProtectedDataFilename << "')" << LL_ENDL; +		// it's good practice to clean up any secure information on error +		// (even though this file isn't really secure.  Perhaps in the future +		// it may be, however.  		LLFile::remove(tmp_filename); -		// EXP-1825 crash in LLSecAPIBasicHandler::_writeProtectedData() +		//crash in LLSecAPIBasicHandler::_writeProtectedData()  		// Decided throwing an exception here was overkill until we figure out why this happens -		//throw LLProtectedDataException("Could not overwrite protected data store"); -		LL_INFOS() << "LLProtectedDataException(Could not overwrite protected data store)" << LL_ENDL; +		//throw LLProtectedDataException("Error writing Protected Data Store");  	}  } @@ -1552,7 +1568,7 @@ std::string LLSecAPIBasicHandler::_legacyLoadPassword()  {  	const S32 HASHED_LENGTH = 32;	  	std::vector<U8> buffer(HASHED_LENGTH); -	llifstream password_file(mLegacyPasswordPath, llifstream::binary); +	llifstream password_file(mLegacyPasswordPath.c_str(), llifstream::binary);  	if(password_file.fail())  	{ diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index b13c30b6d4..fdc95c7784 100755 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -99,14 +99,11 @@ LLViewerObject* getSelectedParentObject(LLViewerObject *object) ;  // Consts  // -const S32 NUM_SELECTION_UNDO_ENTRIES = 200;  const F32 SILHOUETTE_UPDATE_THRESHOLD_SQUARED = 0.02f; -const S32 MAX_ACTION_QUEUE_SIZE = 20;  const S32 MAX_SILS_PER_FRAME = 50;  const S32 MAX_OBJECTS_PER_PACKET = 254;  // For linked sets  const S32 MAX_CHILDREN_PER_TASK = 255; -const S32 MAX_CHILDREN_PER_PHYSICAL_TASK = 32;  //  // Globals @@ -1975,7 +1972,7 @@ void LLSelectMgr::selectionSetMedia(U8 media_type, const LLSD &media_data)  					llassert(mMediaData.isMap());  					const LLTextureEntry *texture_entry = object->getTE(te);  					if (!mMediaData.isMap() || -						(NULL != texture_entry) && !texture_entry->hasMedia() && !mMediaData.has(LLMediaEntry::HOME_URL_KEY)) +						((NULL != texture_entry) && !texture_entry->hasMedia() && !mMediaData.has(LLMediaEntry::HOME_URL_KEY)))  					{  						// skip adding/updating media  					} diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h index cde05a8d9b..440fce07bb 100755 --- a/indra/newview/llsidepanelappearance.h +++ b/indra/newview/llsidepanelappearance.h @@ -90,9 +90,6 @@ private:  	LLTextBox*					mCurrentLookName;  	LLTextBox*					mOutfitStatus; -	// Used to make sure the user's inventory is in memory. -	LLCurrentlyWornFetchObserver* mFetchWorn; -  	// Search string for filtering landmarks and teleport  	// history locations  	std::string					mFilterSubString; diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 4970eec636..0e23e2ad10 100755 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -70,10 +70,7 @@ static LLPanelInjector<LLSidepanelInventory> t_inventory("sidepanel_inventory");  static const char * const INBOX_BUTTON_NAME = "inbox_btn";  static const char * const INBOX_LAYOUT_PANEL_NAME = "inbox_layout_panel"; -static const char * const MAIN_INVENTORY_LAYOUT_PANEL_NAME = "main_inventory_layout_panel"; -  static const char * const INVENTORY_LAYOUT_STACK_NAME = "inventory_layout_stack"; -  static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox";  // diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp index 3a82233320..728fc69723 100755 --- a/indra/newview/llslurl.cpp +++ b/indra/newview/llslurl.cpp @@ -323,9 +323,9 @@ LLSLURL::LLSLURL(const std::string& grid,  {  	mGrid = grid;  	mRegion = region; -	S32 x = llround( (F32)fmod( position[VX], (F32)REGION_WIDTH_METERS ) ); -	S32 y = llround( (F32)fmod( position[VY], (F32)REGION_WIDTH_METERS ) ); -	S32 z = llround( (F32)position[VZ] ); +	S32 x = ll_round( (F32)fmod( position[VX], (F32)REGION_WIDTH_METERS ) ); +	S32 y = ll_round( (F32)fmod( position[VY], (F32)REGION_WIDTH_METERS ) ); +	S32 z = ll_round( (F32)position[VZ] );  	mType = LOCATION;  	mPosition = LLVector3(x, y, z);  } @@ -379,9 +379,9 @@ std::string LLSLURL::getSLURLString() const  		case LOCATION:  			{  				// lookup the grid -				S32 x = llround( (F32)mPosition[VX] ); -				S32 y = llround( (F32)mPosition[VY] ); -				S32 z = llround( (F32)mPosition[VZ] );	 +				S32 x = ll_round( (F32)mPosition[VX] ); +				S32 y = ll_round( (F32)mPosition[VY] ); +				S32 z = ll_round( (F32)mPosition[VZ] );	  				return LLGridManager::getInstance()->getSLURLBase(mGrid) +   				LLURI::escape(mRegion) + llformat("/%d/%d/%d",x,y,z);   			} @@ -416,9 +416,9 @@ std::string LLSLURL::getLoginString() const  		case LOCATION:  			unescaped_start << "uri:"   			<< mRegion << "&"  -			<< llround(mPosition[0]) << "&"  -			<< llround(mPosition[1]) << "&"  -			<< llround(mPosition[2]); +			<< ll_round(mPosition[0]) << "&"  +			<< ll_round(mPosition[1]) << "&"  +			<< ll_round(mPosition[2]);  			break;  		case HOME_LOCATION:  			unescaped_start << "home"; @@ -462,9 +462,9 @@ std::string LLSLURL::getLocationString() const  {  	return llformat("%s/%d/%d/%d",  					mRegion.c_str(), -					(int)llround(mPosition[0]), -					(int)llround(mPosition[1]), -					(int)llround(mPosition[2]));						  +					(int)ll_round(mPosition[0]), +					(int)ll_round(mPosition[1]), +					(int)ll_round(mPosition[2]));						   }  // static diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index 050b88413d..0ae8a338e0 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -179,14 +179,14 @@ void LLSnapshotLivePreview::updateSnapshot(BOOL new_snapshot, BOOL new_thumbnail              if (image_aspect_ratio > window_aspect_ratio)              {                  // trim off top and bottom -                S32 new_height = llround((F32)getRect().getWidth() / image_aspect_ratio);  +                S32 new_height = ll_round((F32)getRect().getWidth() / image_aspect_ratio);                   rect.mBottom += (getRect().getHeight() - new_height) / 2;                  rect.mTop -= (getRect().getHeight() - new_height) / 2;              }              else if (image_aspect_ratio < window_aspect_ratio)              {                  // trim off left and right -                S32 new_width = llround((F32)getRect().getHeight() * image_aspect_ratio);  +                S32 new_width = ll_round((F32)getRect().getHeight() * image_aspect_ratio);                   rect.mLeft += (getRect().getWidth() - new_width) / 2;                  rect.mRight -= (getRect().getWidth() - new_width) / 2;              } @@ -347,9 +347,9 @@ void LLSnapshotLivePreview::draw()  			LLLocalClipRect clip(getLocalRect());  			{  				// draw diagonal stripe with gradient that passes over screen -				S32 x1 = gViewerWindow->getWindowWidthScaled() * llround((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f))); -				S32 x2 = x1 + llround(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); -				S32 x3 = x2 + llround(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); +				S32 x1 = gViewerWindow->getWindowWidthScaled() * ll_round((clamp_rescale(shine_interp, 0.f, 1.f, -1.f - SHINE_WIDTH, 1.f))); +				S32 x2 = x1 + ll_round(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH); +				S32 x3 = x2 + ll_round(gViewerWindow->getWindowWidthScaled() * SHINE_WIDTH);  				S32 y1 = 0;  				S32 y2 = gViewerWindow->getWindowHeightScaled(); @@ -431,7 +431,7 @@ void LLSnapshotLivePreview::draw()  			gGL.pushMatrix();  			{  				LLRect& rect = mImageRect[old_image_index]; -				gGL.translatef((F32)rect.mLeft, (F32)rect.mBottom - llround(getRect().getHeight() * 2.f * (fall_interp * fall_interp)), 0.f); +				gGL.translatef((F32)rect.mLeft, (F32)rect.mBottom - ll_round(getRect().getHeight() * 2.f * (fall_interp * fall_interp)), 0.f);  				gGL.rotatef(-45.f * fall_interp, 0.f, 0.f, 1.f);  				gGL.begin(LLRender::QUADS);  				{ @@ -485,13 +485,13 @@ BOOL LLSnapshotLivePreview::setThumbnailImageSize()  	{  		// image too wide, shrink to width  		mThumbnailWidth = max_width; -		mThumbnailHeight = llround((F32)max_width / aspect_ratio); +		mThumbnailHeight = ll_round((F32)max_width / aspect_ratio);  	}  	else  	{  		// image too tall, shrink to height  		mThumbnailHeight = max_height; -		mThumbnailWidth = llround((F32)max_height * aspect_ratio); +		mThumbnailWidth = ll_round((F32)max_height * aspect_ratio);  	}  	if (mThumbnailWidth > width || mThumbnailHeight > height) diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index eedb829b48..2d4b23d892 100755 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -94,16 +94,11 @@ extern S32 MENU_BAR_HEIGHT;  // TODO: these values ought to be in the XML too -const S32 MENU_PARCEL_SPACING = 1;	// Distance from right of menu item to parcel information  const S32 SIM_STAT_WIDTH = 8; -const F32 SIM_WARN_FRACTION = 0.75f; -const F32 SIM_FULL_FRACTION = 0.98f;  const LLColor4 SIM_OK_COLOR(0.f, 1.f, 0.f, 1.f);  const LLColor4 SIM_WARN_COLOR(1.f, 1.f, 0.f, 1.f);  const LLColor4 SIM_FULL_COLOR(1.f, 0.f, 0.f, 1.f);  const F32 ICON_TIMER_EXPIRY		= 3.f; // How long the balance and health icons should flash after a change. -const F32 ICON_FLASH_FREQUENCY	= 2.f; -const S32 TEXT_HEIGHT = 18;  static void onClickVolume(void*); diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp index e75af8db53..503dd6747d 100755 --- a/indra/newview/llsurface.cpp +++ b/indra/newview/llsurface.cpp @@ -1232,10 +1232,10 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,  	S32 x_begin, y_begin, x_end, y_end; -	x_begin = llround(x * scale_inv); -	y_begin = llround(y * scale_inv); -	x_end = llround((x + width) * scale_inv); -	y_end = llround((y + width) * scale_inv); +	x_begin = ll_round(x * scale_inv); +	y_begin = ll_round(y * scale_inv); +	x_end = ll_round((x + width) * scale_inv); +	y_end = ll_round((y + width) * scale_inv);  	if (x_end > tex_width)  	{ @@ -1283,9 +1283,9 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,  				// Want non-linear curve for transparency gradient  				coloru = MAX_WATER_COLOR;  				const F32 frac = 1.f - 2.f/(2.f - (height - WATER_HEIGHT)); -				S32 alpha = 64 + llround((255-64)*frac); +				S32 alpha = 64 + ll_round((255-64)*frac); -				alpha = llmin(llround((F32)MAX_WATER_COLOR.mV[3]), alpha); +				alpha = llmin(ll_round((F32)MAX_WATER_COLOR.mV[3]), alpha);  				alpha = llmax(64, alpha);  				coloru.mV[3] = alpha; diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp index a763d42a8d..802dff1ead 100644 --- a/indra/newview/llsyntaxid.cpp +++ b/indra/newview/llsyntaxid.cpp @@ -83,7 +83,7 @@ public:  		const std::string xml = str.str();  		// save the str to disk, usually to the cache. -		llofstream file(mFileSpec, std::ios_base::out); +		llofstream file(mFileSpec.c_str(), std::ios_base::out);  		file.write(xml.c_str(), str.str().size());  		file.close(); @@ -269,7 +269,7 @@ void LLSyntaxIdLSL::loadKeywordsIntoLLSD()  {  	LLSD content;  	llifstream file; -	file.open(mFullFileSpec); +	file.open(mFullFileSpec.c_str());  	if (file.is_open())  	{  		if (LLSDSerialize::fromXML(content, file) != LLSDParser::PARSE_FAILURE) diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp index f88f88a4fa..8a5704939a 100755 --- a/indra/newview/llteleporthistorystorage.cpp +++ b/indra/newview/llteleporthistorystorage.cpp @@ -164,7 +164,7 @@ void LLTeleportHistoryStorage::save()  	std::string resolvedFilename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);  	// open the history file for writing -	llofstream file (resolvedFilename); +	llofstream file(resolvedFilename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open teleport history file \"" << mFilename << "\" for writing" << LL_ENDL; @@ -186,7 +186,7 @@ void LLTeleportHistoryStorage::load()  	std::string resolved_filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, mFilename);  	// open the history file for reading -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't load teleport history from file \"" << mFilename << "\"" << LL_ENDL; diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 374c18b30d..717807f513 100755 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -72,12 +72,6 @@  #include "llfloaterreg.h"  #include "lllocalbitmaps.h" -static const S32 HPAD = 4; -static const S32 VPAD = 4; -static const S32 LINE = 16; -static const S32 FOOTER_HEIGHT = 100; -static const S32 BORDER_PAD = HPAD; -static const S32 TEXTURE_INVENTORY_PADDING = 30;  static const F32 CONTEXT_CONE_IN_ALPHA = 0.0f;  static const F32 CONTEXT_CONE_OUT_ALPHA = 1.f;  static const F32 CONTEXT_FADE_TIME = 0.08f; diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index acd4cf2d8d..fab4203ec3 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -340,7 +340,7 @@ private:  		// Threads:  Ttf  		DecodeResponder(LLTextureFetch* fetcher, const LLUUID& id, LLTextureFetchWorker* worker) -			: mFetcher(fetcher), mID(id), mWorker(worker) +			: mFetcher(fetcher), mID(id)  		{  		} @@ -356,7 +356,6 @@ private:  	private:  		LLTextureFetch* mFetcher;  		LLUUID mID; -		LLTextureFetchWorker* mWorker; // debug only (may get deleted from under us, use mFetcher/mID)  	};  	struct Compare diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index c82894a5cc..0a9453534b 100755 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -48,7 +48,6 @@  const S32 MAX_ALLOWED_MSG_WIDTH = 400;  const F32 DEFAULT_BUTTON_DELAY = 0.5f; -const S32 MSG_PAD = 8;  /*static*/ LLControlGroup* LLToastAlertPanel::sSettings = NULL;  /*static*/ LLToastAlertPanel::URLLoader* LLToastAlertPanel::sURLLoader; diff --git a/indra/newview/lltoastgroupnotifypanel.h b/indra/newview/lltoastgroupnotifypanel.h index 431fd32da2..269c23798c 100755 --- a/indra/newview/lltoastgroupnotifypanel.h +++ b/indra/newview/lltoastgroupnotifypanel.h @@ -60,8 +60,6 @@ private:  	static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT; -	LLButton* mSaveInventoryBtn; -  	LLUUID mGroupID;  	LLOfferInfo* mInventoryOffer;  }; diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp index e3eb8ba7af..0a0bfaf58b 100755 --- a/indra/newview/lltoolbrush.cpp +++ b/indra/newview/lltoolbrush.cpp @@ -65,8 +65,7 @@ const std::string REGION_BLOCKS_TERRAFORM_MSG = "This region does not allow terr  const S32 LAND_BRUSH_SIZE_COUNT = 3;  const F32 LAND_BRUSH_SIZE[LAND_BRUSH_SIZE_COUNT] = {1.0f, 2.0f, 4.0f}; -const S32 LAND_STEPS = 3; -const F32 LAND_METERS_PER_SECOND = 1.0f; +  enum  {  	E_LAND_LEVEL	= 0, diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp index 4bda9072d0..5a63f6e286 100755 --- a/indra/newview/lltoolcomp.cpp +++ b/indra/newview/lltoolcomp.cpp @@ -52,14 +52,8 @@  #include "llfloatertools.h"  #include "llviewercontrol.h" -const S32 BUTTON_HEIGHT = 16; -const S32 BUTTON_WIDTH_SMALL = 32; -const S32 BUTTON_WIDTH_BIG = 48; -const S32 HPAD = 4; -  extern LLControlGroup gSavedSettings; -  // we use this in various places instead of NULL  static LLPointer<LLTool> sNullTool(new LLTool(std::string("null"), NULL));  diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index b077cad9f8..526f8d1cd8 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -948,8 +948,7 @@ void LLToolDragAndDrop::pick(const LLPickInfo& pick_info)  				const S32 item_index = mCurItemIndex;  				const EDragAndDropType dad_type = mCargoTypes[item_index];  				// Call the right implementation function -				(U32)callMemberFunction(*this, -										LLDragAndDropDictionary::instance().get(dad_type, target)) +				callMemberFunction(*this, LLDragAndDropDictionary::instance().get(dad_type, target))  					(hit_obj, hit_face, pick_info.mKeyMask, TRUE);  			}  		} diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp index c12c106b8b..15f3c36674 100755 --- a/indra/newview/lltoolfocus.cpp +++ b/indra/newview/lltoolfocus.cpp @@ -61,7 +61,6 @@ BOOL gCameraBtnOrbit = FALSE;  BOOL gCameraBtnPan = FALSE;  const S32 SLOP_RANGE = 4; -const F32 FOCUS_OFFSET_FACTOR = 1.f;  //  // Camera - shared functionality diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp index 44c0cb3124..ff991dc9fd 100755 --- a/indra/newview/lltoolselectland.cpp +++ b/indra/newview/lltoolselectland.cpp @@ -219,8 +219,8 @@ void LLToolSelectLand::handleDeselect()  void LLToolSelectLand::roundXY(LLVector3d &vec)  { -	vec.mdV[VX] = llround( vec.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); -	vec.mdV[VY] = llround( vec.mdV[VY], (F64)PARCEL_GRID_STEP_METERS ); +	vec.mdV[VX] = ll_round( vec.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); +	vec.mdV[VY] = ll_round( vec.mdV[VY], (F64)PARCEL_GRID_STEP_METERS );  } diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp index 8eea2b242a..f7064e152a 100755 --- a/indra/newview/llurlhistory.cpp +++ b/indra/newview/llurlhistory.cpp @@ -40,29 +40,32 @@ const int MAX_URL_COUNT = 10;  // static  bool LLURLHistory::loadFile(const std::string& filename)  { +    bool dataloaded = false; +    sHistorySD = LLSD();  	LLSD data; -	{ -		std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter(); - -		llifstream file((temp_str + filename)); - -		if (file.is_open()) -		{ -			LL_INFOS() << "Loading history.xml file at " << filename << LL_ENDL; -			LLSDSerialize::fromXML(data, file); -		} - -		if (data.isUndefined()) -		{ -			LL_INFOS() << "file missing, ill-formed, " -				"or simply undefined; not changing the" -				" file" << LL_ENDL; -			sHistorySD = LLSD(); -			return false; -		} -	} -	sHistorySD = data; -	return true; + +    std::string user_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + filename); + +    llifstream file(user_filename.c_str()); +    if (file.is_open()) +    { +        LLSDSerialize::fromXML(data, file); +        if (data.isUndefined()) +        { +            LL_WARNS() << "error loading " << user_filename << LL_ENDL; +        } +        else +        { +            LL_INFOS() << "Loaded history file at " << user_filename << LL_ENDL; +            sHistorySD = data; +            dataloaded = true; +        } +    } +    else +    { +        LL_INFOS() << "Unable to open history file at " << user_filename << LL_ENDL; +    } +	return dataloaded;  }  // static @@ -76,10 +79,10 @@ bool LLURLHistory::saveFile(const std::string& filename)  	}  	temp_str += gDirUtilp->getDirDelimiter() + filename; -	llofstream out(temp_str); +	llofstream out(temp_str.c_str());  	if (!out.good())  	{ -		LL_WARNS() << "Unable to open " << filename << " for output." << LL_ENDL; +		LL_WARNS() << "Unable to open " << temp_str << " for output." << LL_ENDL;  		return false;  	} diff --git a/indra/newview/llurlwhitelist.cpp b/indra/newview/llurlwhitelist.cpp index 8211ce12f6..3a7285974e 100755 --- a/indra/newview/llurlwhitelist.cpp +++ b/indra/newview/llurlwhitelist.cpp @@ -87,7 +87,7 @@ bool LLUrlWhiteList::load ()  	std::string resolvedFilename = gDirUtilp->getExpandedFilename ( LL_PATH_PER_SL_ACCOUNT, mFilename );  	// open a file for reading -	llifstream file ( resolvedFilename ); +	llifstream file(resolvedFilename.c_str());  	if ( file.is_open () )  	{  		// add each line in the file to the list @@ -122,7 +122,7 @@ bool LLUrlWhiteList::save ()  	}  	// open a file for writing -	llofstream file ( resolvedFilename ); +	llofstream file(resolvedFilename.c_str());  	if ( file.is_open () )  	{  		// for each entry we have diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp index 6a8fad0134..5cc7d7bed3 100755 --- a/indra/newview/llversioninfo.cpp +++ b/indra/newview/llversioninfo.cpp @@ -38,8 +38,6 @@   #error "Channel or Version information is undefined"  #endif -const char * const LL_CHANNEL = LL_VIEWER_CHANNEL; -  //  // Set the version numbers in indra/VIEWER_VERSION  // diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index ea9463da04..afa00e3e6e 100755 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1176,8 +1176,8 @@ LLRect get_whole_screen_region()  	if (zoom_factor > 1.f)  	{  		S32 num_horizontal_tiles = llceil(zoom_factor); -		S32 tile_width = llround((F32)gViewerWindow->getWorldViewWidthScaled() / zoom_factor); -		S32 tile_height = llround((F32)gViewerWindow->getWorldViewHeightScaled() / zoom_factor); +		S32 tile_width = ll_round((F32)gViewerWindow->getWorldViewWidthScaled() / zoom_factor); +		S32 tile_height = ll_round((F32)gViewerWindow->getWorldViewHeightScaled() / zoom_factor);  		int tile_y = sub_region / num_horizontal_tiles;  		int tile_x = sub_region - (tile_y * num_horizontal_tiles); @@ -1471,8 +1471,8 @@ void render_ui_2d()  		int pos_y = sub_region / llceil(zoom_factor);  		int pos_x = sub_region - (pos_y*llceil(zoom_factor));  		// offset for this tile -		LLFontGL::sCurOrigin.mX -= llround((F32)gViewerWindow->getWindowWidthScaled() * (F32)pos_x / zoom_factor); -		LLFontGL::sCurOrigin.mY -= llround((F32)gViewerWindow->getWindowHeightScaled() * (F32)pos_y / zoom_factor); +		LLFontGL::sCurOrigin.mX -= ll_round((F32)gViewerWindow->getWindowWidthScaled() * (F32)pos_x / zoom_factor); +		LLFontGL::sCurOrigin.mY -= ll_round((F32)gViewerWindow->getWindowHeightScaled() * (F32)pos_y / zoom_factor);  	}  	stop_glerror(); diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index 9766a25521..ada829eb4b 100755 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -53,7 +53,6 @@ const F32 FLY_FRAMES = 4;  const F32 NUDGE_TIME = 0.25f;  // in seconds  const S32 NUDGE_FRAMES = 2;  const F32 ORBIT_NUDGE_RATE = 0.05f;  // fraction of normal speed -const F32 YAW_NUDGE_RATE = 0.05f;  // fraction of normal speed  struct LLKeyboardActionRegistry   :	public LLRegistrySingleton<std::string, boost::function<void (EKeystate keystate)>, LLKeyboardActionRegistry> @@ -66,7 +65,7 @@ void agent_jump( EKeystate s )  {  	if( KEYSTATE_UP == s  ) return;  	F32 time = gKeyboard->getCurKeyElapsedTime(); -	S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); +	S32 frame_count = ll_round(gKeyboard->getCurKeyElapsedFrameCount());  	if( time < FLY_TIME   		|| frame_count <= FLY_FRAMES  @@ -133,7 +132,7 @@ static void agent_push_forwardbackward( EKeystate s, S32 direction, LLAgent::EDo  	if (KEYSTATE_UP == s) return;  	F32 time = gKeyboard->getCurKeyElapsedTime(); -	S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); +	S32 frame_count = ll_round(gKeyboard->getCurKeyElapsedFrameCount());  	if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)  	{ @@ -188,7 +187,7 @@ static void agent_slide_leftright( EKeystate s, S32 direction, LLAgent::EDoubleT  	agent_handle_doubletap_run(s, mode);  	if( KEYSTATE_UP == s ) return;  	F32 time = gKeyboard->getCurKeyElapsedTime(); -	S32 frame_count = llround(gKeyboard->getCurKeyElapsedFrameCount()); +	S32 frame_count = ll_round(gKeyboard->getCurKeyElapsedFrameCount());  	if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)  	{ diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 721ee1f0f5..509227c683 100755 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -924,7 +924,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)  					{  						F32 approximate_interest_dimension = (F32) sqrt(pimpl->getInterest()); -						pimpl->setLowPrioritySizeLimit(llround(approximate_interest_dimension)); +						pimpl->setLowPrioritySizeLimit(ll_round(approximate_interest_dimension));  					}  				}  				else @@ -1278,7 +1278,7 @@ void LLViewerMedia::loadCookieFile()  	}  	// open the file for reading -	llifstream file(resolved_filename); +	llifstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't load plugin cookies from file \"" << PLUGIN_COOKIE_FILE_NAME << "\"" << LL_ENDL; @@ -1320,7 +1320,7 @@ void LLViewerMedia::saveCookieFile()  	}  	// open a file for writing -	llofstream file (resolved_filename); +	llofstream file(resolved_filename.c_str());  	if (!file.is_open())  	{  		LL_WARNS() << "can't open plugin cookie file \"" << PLUGIN_COOKIE_FILE_NAME << "\" for writing" << LL_ENDL; @@ -2330,8 +2330,8 @@ void LLViewerMediaImpl::scaleTextureCoords(const LLVector2& texture_coords, S32  		texture_y = 1.0 + texture_y;  	// scale x and y to texel units. -	*x = llround(texture_x * mMediaSource->getTextureWidth()); -	*y = llround((1.0f - texture_y) * mMediaSource->getTextureHeight()); +	*x = ll_round(texture_x * mMediaSource->getTextureWidth()); +	*y = ll_round((1.0f - texture_y) * mMediaSource->getTextureHeight());  	// Adjust for the difference between the actual texture height and the amount of the texture in use.  	*y -= (mMediaSource->getTextureHeight() - mMediaSource->getHeight()); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 0fbecd5180..5cd92c9920 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -128,10 +128,7 @@ extern void on_new_message(const LLSD& msg);  //  // Constants  // -const F32 BIRD_AUDIBLE_RADIUS = 32.0f; -const F32 SIT_DISTANCE_FROM_TARGET = 0.25f;  const F32 CAMERA_POSITION_THRESHOLD_SQUARED = 0.001f * 0.001f; -static const F32 LOGOUT_REPLY_TIME = 3.f;	// Wait this long after LogoutReply before quitting.  // Determine how quickly residents' scripts can issue question dialogs  // Allow bursts of up to 5 dialogs in 10 seconds. 10*2=20 seconds recovery if throttle kicks in @@ -2411,7 +2408,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  	BOOL is_do_not_disturb = gAgent.isDoNotDisturb();  	BOOL is_muted = LLMuteList::getInstance()->isMuted(from_id, name, LLMute::flagTextChat)  		// object IMs contain sender object id in session_id (STORM-1209) -		|| dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id); +		|| (dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id));  	BOOL is_owned_by_me = FALSE;  	BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;  	BOOL accept_im_from_only_friend = gSavedSettings.getBOOL("VoiceCallsFriendsOnly"); @@ -5117,7 +5114,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)  	if (object)  	{  		LLVector3 sit_spot = object->getPositionAgent() + (sitPosition * object->getRotation()); -		if (!use_autopilot || isAgentAvatarValid() && gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == object->getRoot()) +		if (!use_autopilot || (isAgentAvatarValid() && gAgentAvatarp->isSitting() && gAgentAvatarp->getRoot() == object->getRoot()))  		{  			//we're already sitting on this object, so don't autopilot  		} @@ -7118,8 +7115,6 @@ void process_user_info_reply(LLMessageSystem* msg, void**)  //---------------------------------------------------------------------------  const S32 SCRIPT_DIALOG_MAX_BUTTONS = 12; -const S32 SCRIPT_DIALOG_BUTTON_STR_SIZE = 24; -const S32 SCRIPT_DIALOG_MAX_MESSAGE_SIZE = 512;  const char* SCRIPT_DIALOG_HEADER = "Script Dialog:\n";  bool callback_script_dialog(const LLSD& notification, const LLSD& response) diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 87424cd584..a2c0a91ea6 100755 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -3001,7 +3001,7 @@ void LLViewerObject::processTaskInvFile(void** user_data, S32 error_code, LLExtS  BOOL LLViewerObject::loadTaskInvFile(const std::string& filename)  {  	std::string filename_and_local_path = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, filename); -	llifstream ifs(filename_and_local_path); +	llifstream ifs(filename_and_local_path.c_str());  	if(ifs.good())  	{  		char buffer[MAX_STRING];	/* Flawfinder: ignore */ diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index d574dec11d..d9d4c34fb0 100755 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -281,7 +281,7 @@ S32 LLViewerParcelMgr::getSelectedArea() const  		F64 width = mEastNorth.mdV[VX] - mWestSouth.mdV[VX];  		F64 height = mEastNorth.mdV[VY] - mWestSouth.mdV[VY];  		F32 area = (F32)(width * height); -		rv = llround(area); +		rv = ll_round(area);  	}  	return rv;  } @@ -301,10 +301,10 @@ void LLViewerParcelMgr::writeHighlightSegments(F32 west, F32 south, F32 east,  											   F32 north)  {  	S32 x, y; -	S32 min_x = llround( west / PARCEL_GRID_STEP_METERS ); -	S32 max_x = llround( east / PARCEL_GRID_STEP_METERS ); -	S32 min_y = llround( south / PARCEL_GRID_STEP_METERS ); -	S32 max_y = llround( north / PARCEL_GRID_STEP_METERS ); +	S32 min_x = ll_round( west / PARCEL_GRID_STEP_METERS ); +	S32 max_x = ll_round( east / PARCEL_GRID_STEP_METERS ); +	S32 min_y = ll_round( south / PARCEL_GRID_STEP_METERS ); +	S32 max_y = ll_round( north / PARCEL_GRID_STEP_METERS );  	const S32 STRIDE = mParcelsPerEdge+1; @@ -416,12 +416,12 @@ LLParcelSelectionHandle LLViewerParcelMgr::selectParcelAt(const LLVector3d& pos_  	LLVector3d northeast = pos_global;  	southwest -= LLVector3d( PARCEL_GRID_STEP_METERS/2, PARCEL_GRID_STEP_METERS/2, 0 ); -	southwest.mdV[VX] = llround( southwest.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); -	southwest.mdV[VY] = llround( southwest.mdV[VY], (F64)PARCEL_GRID_STEP_METERS ); +	southwest.mdV[VX] = ll_round( southwest.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); +	southwest.mdV[VY] = ll_round( southwest.mdV[VY], (F64)PARCEL_GRID_STEP_METERS );  	northeast += LLVector3d( PARCEL_GRID_STEP_METERS/2, PARCEL_GRID_STEP_METERS/2, 0 ); -	northeast.mdV[VX] = llround( northeast.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); -	northeast.mdV[VY] = llround( northeast.mdV[VY], (F64)PARCEL_GRID_STEP_METERS ); +	northeast.mdV[VX] = ll_round( northeast.mdV[VX], (F64)PARCEL_GRID_STEP_METERS ); +	northeast.mdV[VY] = ll_round( northeast.mdV[VY], (F64)PARCEL_GRID_STEP_METERS );  	// Snap to parcel  	return selectLand( southwest, northeast, TRUE ); diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 76418ad6a6..230bdca4ef 100755 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -42,8 +42,6 @@  #include "llvovolume.h"  const F32 PART_SIM_BOX_SIDE = 16.f; -const F32 PART_SIM_BOX_OFFSET = 0.5f*PART_SIM_BOX_SIDE; -const F32 PART_SIM_BOX_RAD = 0.5f*F_SQRT3*PART_SIM_BOX_SIDE;  //static  S32 LLViewerPartSim::sMaxParticleCount = 0; @@ -311,7 +309,6 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)  		if (part->mFlags & LLPartData::LL_PART_WIND_MASK)  		{ -			LLVector3 tempVel(part->mVelocity);  			part->mVelocity *= 1.f - 0.1f*dt;  			part->mVelocity += 0.1f*dt*regionp->mWind.getVelocity(regionp->getPosRegionFromAgent(part->mPosAgent));  		} @@ -391,7 +388,7 @@ void LLViewerPartGroup::updateParticles(const F32 lastdt)  		}  		// Do glow interpolation -		part->mGlow.mV[3] = (U8) llround(lerp(part->mStartGlow, part->mEndGlow, frac)*255.f); +		part->mGlow.mV[3] = (U8) ll_round(lerp(part->mStartGlow, part->mEndGlow, frac)*255.f);  		// Set the last update time to now.  		part->mLastUpdateTime = cur_time; diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp index a7fd2e0fe4..7efa821bbf 100755 --- a/indra/newview/llviewerpartsource.cpp +++ b/indra/newview/llviewerpartsource.cpp @@ -313,7 +313,7 @@ void LLViewerPartSourceScript::update(const F32 dt)  			part->mStartGlow = mPartSysData.mPartData.mStartGlow;  			part->mEndGlow = mPartSysData.mPartData.mEndGlow; -			part->mGlow = LLColor4U(0, 0, 0, (U8) llround(part->mStartGlow*255.f)); +			part->mGlow = LLColor4U(0, 0, 0, (U8) ll_round(part->mStartGlow*255.f));  			if (mPartSysData.mPattern & LLPartSysData::LL_PART_SRC_PATTERN_DROP)  			{ diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 7ebe12cc07..92e07c52a5 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -88,8 +88,6 @@  // out the two lists of capabilities for analysis.  //#define DEBUG_CAPS_GRANTS -const F32 WATER_TEXTURE_SCALE = 8.f;			//  Number of times to repeat the water texture across a region -const S16 MAX_MAP_DIST = 10;  // The server only keeps our pending agent info for 60 seconds.  // We want to allow for seed cap retry, but its not useful after that 60 seconds.  // Give it 3 chances, each at 18 seconds to give ourselves a few seconds to connect anyways if we give up. @@ -1937,7 +1935,6 @@ public:  			}  			else if( i != you_index)  			{ -				U32 loc = x << 16 | y << 8 | z; loc = loc;  				U32 pos = 0x0;  				pos |= x;  				pos <<= 8; @@ -2728,15 +2725,12 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)  	capabilityNames.append("FlickrConnect");  	capabilityNames.append("TwitterConnect"); -	if (gSavedSettings.getBOOL("UseHTTPInventory")) -	{	 -		capabilityNames.append("FetchLib2"); -		capabilityNames.append("FetchLibDescendents2"); -		capabilityNames.append("FetchInventory2"); -		capabilityNames.append("FetchInventoryDescendents2"); -		capabilityNames.append("IncrementCOFVersion"); -		AISCommand::getCapabilityNames(capabilityNames); -	} +	capabilityNames.append("FetchLib2"); +	capabilityNames.append("FetchLibDescendents2"); +	capabilityNames.append("FetchInventory2"); +	capabilityNames.append("FetchInventoryDescendents2"); +	capabilityNames.append("IncrementCOFVersion"); +	AISCommand::getCapabilityNames(capabilityNames);  	capabilityNames.append("GetDisplayNames");  	capabilityNames.append("GetMesh"); diff --git a/indra/newview/llviewertexlayer.cpp b/indra/newview/llviewertexlayer.cpp index 65ba3fb6e5..66e5742911 100755 --- a/indra/newview/llviewertexlayer.cpp +++ b/indra/newview/llviewertexlayer.cpp @@ -39,9 +39,6 @@  #include "pipeline.h"  #include "llviewercontrol.h" -static const S32 BAKE_UPLOAD_ATTEMPTS = 7; -static const F32 BAKE_UPLOAD_RETRY_DELAY = 2.f; // actual delay grows by power of 2 each attempt -  // runway consolidate  extern std::string self_av_string(); diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 0c4f55d704..85ae64aeff 100755 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -169,8 +169,7 @@ public:  		mImage(image),  		mLabel(utf8str_to_wstring(inv_item->getName())),  		mItem(inv_item), -		mEditor(editor), -		mHasMouseHover(false) +		mEditor(editor)  	{  		mStyle = new LLStyle(LLStyle::Params().font(LLFontGL::getFontSansSerif())); @@ -262,8 +261,6 @@ private:  	std::string		mToolTip;  	LLPointer<LLInventoryItem> mItem;  	LLTextEditor&	mEditor; -	bool			mHasMouseHover; -  }; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index e684be4361..a957367f61 100755 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -452,7 +452,6 @@ void LLViewerTexture::initClass()  // tuning params  const F32 discard_bias_delta = .25f;  const F32 discard_delta_time = 0.5f; -const S32 min_non_tex_system_mem = (128<<20); // 128 MB  // non-const (used externally  F32 texmem_lower_bound_scale = 0.85f;  F32 texmem_middle_bound_scale = 0.925f; diff --git a/indra/newview/llviewertextureanim.cpp b/indra/newview/llviewertextureanim.cpp index 2b364851a7..9af92d7377 100755 --- a/indra/newview/llviewertextureanim.cpp +++ b/indra/newview/llviewertextureanim.cpp @@ -179,7 +179,7 @@ S32 LLViewerTextureAnim::animateTextures(F32 &off_s, F32 &off_t,  	if (!(mMode & SMOOTH))  	{ -		frame_counter = (F32)llround(frame_counter); +		frame_counter = (F32)ll_round(frame_counter);  	}  	// diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index 322a55383a..926c40307b 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -165,7 +165,7 @@ void LLViewerTextureList::doPreloadImages()  static std::string get_texture_list_name()  { -	return std::string("texture_list_") + gSavedSettings.getString("LoginLocation") + ".xml"; +	return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "texture_list_" + gSavedSettings.getString("LoginLocation") + ".xml");  }  void LLViewerTextureList::doPrefetchImages() @@ -178,13 +178,22 @@ void LLViewerTextureList::doPrefetchImages()  	// Pre-fetch textures from last logout  	LLSD imagelist; -	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, get_texture_list_name()); +	std::string filename = get_texture_list_name();  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (file.is_open())  	{ -		LLSDSerialize::fromXML(imagelist, file); -	} +		if ( ! LLSDSerialize::fromXML(imagelist, file) ) +        { +            file.close(); +            LL_WARNS() << "XML parse error reading texture list '" << filename << "'" << LL_ENDL; +            LL_WARNS() << "Removing invalid texture list '" << filename << "'" << LL_ENDL; +            LLFile::remove(filename); +            return; +        } +        file.close(); +	} +    S32 texture_count = 0;  	for (LLSD::array_iterator iter = imagelist.beginArray();  		 iter != imagelist.endArray(); ++iter)  	{ @@ -198,10 +207,12 @@ void LLViewerTextureList::doPrefetchImages()  			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, texture_type);  			if (image)  			{ +                texture_count += 1;  				image->addTextureStats((F32)pixel_area);  			}  		}  	} +    LL_DEBUGS() << "fetched " << texture_count << " images from " << filename << LL_ENDL;  }  /////////////////////////////////////////////////////////////////////////////// @@ -261,9 +272,10 @@ void LLViewerTextureList::shutdown()  	if (count > 0 && !gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "").empty())  	{ -		std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, get_texture_list_name()); +		std::string filename = get_texture_list_name();  		llofstream file; -		file.open(filename); +		file.open(filename.c_str()); +        LL_DEBUGS() << "saving " << imagelist.size() << " image list entries" << LL_ENDL;  		LLSDSerialize::toPrettyXML(imagelist, file);  	} @@ -447,7 +459,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,  	// If the image is not found, creates new image and  	// enqueues a request for transmission -	if ((&image_id == NULL) || image_id.isNull()) +	if (image_id.isNull())  	{  		return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI));  	} @@ -1258,9 +1270,6 @@ LLPointer<LLImageJ2C> LLViewerTextureList::convertToUploadFile(LLPointer<LLImage  	return compressedImage;  } -const S32 MIN_VIDEO_RAM = 32; -const S32 MAX_VIDEO_RAM = 512; // 512MB max for performance reasons. -  // Returns min setting for TextureMemory (in MB)  S32Megabytes LLViewerTextureList::getMinVideoRamSetting()  { diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index 2f84d0947a..fbbfe9a7d4 100755 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -61,8 +61,6 @@ typedef	void (*LLImageCallback)(BOOL success,  class LLViewerTextureList  { -    LOG_CLASS(LLViewerTextureList); -  	friend class LLTextureView;  	friend class LLViewerTextureManager;  	friend class LLLocalBitmap; @@ -206,6 +204,7 @@ private:  private:  	static S32 sNumImages;  	static void (*sUUIDCallback)(void**, const LLUUID &); +    LOG_CLASS(LLViewerTextureList);  };  class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIImageList> diff --git a/indra/newview/llviewerwearable.cpp b/indra/newview/llviewerwearable.cpp index 7de82a4710..0f73515b5d 100755 --- a/indra/newview/llviewerwearable.cpp +++ b/indra/newview/llviewerwearable.cpp @@ -509,18 +509,7 @@ void LLViewerWearable::saveNewAsset() const  	//LL_INFOS() << *this << LL_ENDL;  	const std::string filename = asset_id_to_filename(mAssetID); -	LLFILE* fp = LLFile::fopen(filename, "wb");		/* Flawfinder: ignore */ -	BOOL successful_save = FALSE; -	if(fp && exportFile(fp)) -	{ -		successful_save = TRUE; -	} -	if(fp) -	{ -		fclose(fp); -		fp = NULL; -	} -	if(!successful_save) +	if(! exportFile(filename))  	{  		std::string buffer = llformat("Unable to save '%s' to wearable file.", mName.c_str());  		LL_WARNS() << buffer << LL_ENDL; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 756248a356..e317989f04 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -898,8 +898,8 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window,  LLCoordGL pos, MASK  	const char* buttonstatestr = "";  	S32 x = pos.mX;  	S32 y = pos.mY; -	x = llround((F32)x / mDisplayScale.mV[VX]); -	y = llround((F32)y / mDisplayScale.mV[VY]); +	x = ll_round((F32)x / mDisplayScale.mV[VX]); +	y = ll_round((F32)y / mDisplayScale.mV[VY]);  	// only send mouse clicks to UI if UI is visible  	if(gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) @@ -1065,8 +1065,8 @@ BOOL LLViewerWindow::handleRightMouseDown(LLWindow *window,  LLCoordGL pos, MASK  {  	S32 x = pos.mX;  	S32 y = pos.mY; -	x = llround((F32)x / mDisplayScale.mV[VX]); -	y = llround((F32)y / mDisplayScale.mV[VY]); +	x = ll_round((F32)x / mDisplayScale.mV[VX]); +	y = ll_round((F32)y / mDisplayScale.mV[VY]);  	BOOL down = TRUE;  	BOOL handle = handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_RIGHT,down); @@ -1263,8 +1263,8 @@ void LLViewerWindow::handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask  	S32 x = pos.mX;  	S32 y = pos.mY; -	x = llround((F32)x / mDisplayScale.mV[VX]); -	y = llround((F32)y / mDisplayScale.mV[VY]); +	x = ll_round((F32)x / mDisplayScale.mV[VX]); +	y = ll_round((F32)y / mDisplayScale.mV[VY]);  	mMouseInWindow = TRUE; @@ -1722,7 +1722,7 @@ LLViewerWindow::LLViewerWindow(const Params& p)  		LLCoordWindow size;  		mWindow->getSize(&size);  		mWindowRectRaw.set(0, size.mY, size.mX, 0); -		mWindowRectScaled.set(0, llround((F32)size.mY / mDisplayScale.mV[VY]), llround((F32)size.mX / mDisplayScale.mV[VX]), 0); +		mWindowRectScaled.set(0, ll_round((F32)size.mY / mDisplayScale.mV[VY]), ll_round((F32)size.mX / mDisplayScale.mV[VX]), 0);  	}  	LLFontManager::initClass(); @@ -2250,8 +2250,8 @@ void LLViewerWindow::reshape(S32 width, S32 height)  		LLUI::setScaleFactor(mDisplayScale);  		// update our window rectangle -		mWindowRectScaled.mRight = mWindowRectScaled.mLeft + llround((F32)width / mDisplayScale.mV[VX]); -		mWindowRectScaled.mTop = mWindowRectScaled.mBottom + llround((F32)height / mDisplayScale.mV[VY]); +		mWindowRectScaled.mRight = mWindowRectScaled.mLeft + ll_round((F32)width / mDisplayScale.mV[VX]); +		mWindowRectScaled.mTop = mWindowRectScaled.mBottom + ll_round((F32)height / mDisplayScale.mV[VY]);  		setup2DViewport(); @@ -2444,8 +2444,8 @@ void LLViewerWindow::draw()  		microsecondsToTimecodeString(gFrameTime,text);  		const LLFontGL* font = LLFontGL::getFontSansSerif();  		font->renderUTF8(text, 0, -						llround((getWindowWidthScaled()/2)-100.f), -						llround((getWindowHeightScaled()-60.f)), +						ll_round((getWindowWidthScaled()/2)-100.f), +						ll_round((getWindowHeightScaled()-60.f)),  			LLColor4( 1.f, 1.f, 1.f, 1.f ),  			LLFontGL::LEFT, LLFontGL::TOP);  	} @@ -2521,7 +2521,7 @@ void LLViewerWindow::draw()  			const S32 DIST_FROM_TOP = 20;  			LLFontGL::getFontSansSerifBig()->renderUTF8(  				mOverlayTitle, 0, -				llround( getWindowWidthScaled() * 0.5f), +				ll_round( getWindowWidthScaled() * 0.5f),  				getWindowHeightScaled() - DIST_FROM_TOP,  				LLColor4(1, 1, 1, 0.4f),  				LLFontGL::HCENTER, LLFontGL::TOP); @@ -3373,7 +3373,7 @@ void LLViewerWindow::updateMouseDelta()  		fdx = fdx + ((F32) dx - fdx) * llmin(gFrameIntervalSeconds.value()*amount,1.f);  		fdy = fdy + ((F32) dy - fdy) * llmin(gFrameIntervalSeconds.value()*amount,1.f); -		mCurrentMouseDelta.set(llround(fdx), llround(fdy)); +		mCurrentMouseDelta.set(ll_round(fdx), ll_round(fdy));  		mouse_vel.setVec(fdx,fdy);  	}  	else @@ -3488,10 +3488,10 @@ void LLViewerWindow::updateWorldViewRect(bool use_full_window)  		new_world_rect.mTop = llmax(new_world_rect.mTop, new_world_rect.mBottom + 1);  		new_world_rect.mRight = llmax(new_world_rect.mRight, new_world_rect.mLeft + 1); -		new_world_rect.mLeft = llround((F32)new_world_rect.mLeft * mDisplayScale.mV[VX]); -		new_world_rect.mRight = llround((F32)new_world_rect.mRight * mDisplayScale.mV[VX]); -		new_world_rect.mBottom = llround((F32)new_world_rect.mBottom * mDisplayScale.mV[VY]); -		new_world_rect.mTop = llround((F32)new_world_rect.mTop * mDisplayScale.mV[VY]); +		new_world_rect.mLeft = ll_round((F32)new_world_rect.mLeft * mDisplayScale.mV[VX]); +		new_world_rect.mRight = ll_round((F32)new_world_rect.mRight * mDisplayScale.mV[VX]); +		new_world_rect.mBottom = ll_round((F32)new_world_rect.mBottom * mDisplayScale.mV[VY]); +		new_world_rect.mTop = ll_round((F32)new_world_rect.mTop * mDisplayScale.mV[VY]);  	}  	if (mWorldViewRectRaw != new_world_rect) @@ -5146,10 +5146,10 @@ void LLViewerWindow::calcDisplayScale()  LLRect 	LLViewerWindow::calcScaledRect(const LLRect & rect, const LLVector2& display_scale)  {  	LLRect res = rect; -	res.mLeft = llround((F32)res.mLeft / display_scale.mV[VX]); -	res.mRight = llround((F32)res.mRight / display_scale.mV[VX]); -	res.mBottom = llround((F32)res.mBottom / display_scale.mV[VY]); -	res.mTop = llround((F32)res.mTop / display_scale.mV[VY]); +	res.mLeft = ll_round((F32)res.mLeft / display_scale.mV[VX]); +	res.mRight = ll_round((F32)res.mRight / display_scale.mV[VX]); +	res.mBottom = ll_round((F32)res.mBottom / display_scale.mV[VY]); +	res.mTop = ll_round((F32)res.mTop / display_scale.mV[VY]);  	return res;  } @@ -5414,8 +5414,8 @@ void LLPickInfo::updateXYCoords()  		LLPointer<LLViewerTexture> imagep = LLViewerTextureManager::getFetchedTexture(tep->getID());  		if(mUVCoords.mV[VX] >= 0.f && mUVCoords.mV[VY] >= 0.f && imagep.notNull())  		{ -			mXYCoords.mX = llround(mUVCoords.mV[VX] * (F32)imagep->getWidth()); -			mXYCoords.mY = llround((1.f - mUVCoords.mV[VY]) * (F32)imagep->getHeight()); +			mXYCoords.mX = ll_round(mUVCoords.mV[VX] * (F32)imagep->getWidth()); +			mXYCoords.mY = ll_round((1.f - mUVCoords.mV[VY]) * (F32)imagep->getHeight());  		}  	}  } @@ -5444,7 +5444,7 @@ void LLPickInfo::getSurfaceInfo()  	if (objectp)  	{ -		if (gViewerWindow->cursorIntersect(llround((F32)mMousePt.mX), llround((F32)mMousePt.mY), 1024.f, +		if (gViewerWindow->cursorIntersect(ll_round((F32)mMousePt.mX), ll_round((F32)mMousePt.mY), 1024.f,  										   objectp, -1, mPickTransparent,  										   &mObjectFace,  										   &intersection, @@ -5486,52 +5486,6 @@ void LLPickInfo::getSurfaceInfo()  	}  } - -/* code to get UV via a special UV render - removed in lieu of raycast method -LLVector2 LLPickInfo::pickUV() -{ -	LLVector2 result(-1.f, -1.f); - -	LLViewerObject* objectp = getObject(); -	if (!objectp) -	{ -		return result; -	} - -	if (mObjectFace > -1 && -		objectp->mDrawable.notNull() && objectp->getPCode() == LL_PCODE_VOLUME && -		mObjectFace < objectp->mDrawable->getNumFaces()) -	{ -		S32 scaled_x = llround((F32)mPickPt.mX * gViewerWindow->getDisplayScale().mV[VX]); -		S32 scaled_y = llround((F32)mPickPt.mY * gViewerWindow->getDisplayScale().mV[VY]); -		const S32 UV_PICK_WIDTH = 5; -		const S32 UV_PICK_HALF_WIDTH = (UV_PICK_WIDTH - 1) / 2; -		U8 uv_pick_buffer[UV_PICK_WIDTH * UV_PICK_WIDTH * 4]; -		LLFace* facep = objectp->mDrawable->getFace(mObjectFace); -		if (facep) -		{ -			LLGLState scissor_state(GL_SCISSOR_TEST); -			scissor_state.enable(); -			LLViewerCamera::getInstance()->setPerspective(FOR_SELECTION, scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH, FALSE); -			//glViewport(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH); -			glScissor(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH); - -			glClear(GL_DEPTH_BUFFER_BIT); - -			facep->renderSelectedUV(); - -			glReadPixels(scaled_x - UV_PICK_HALF_WIDTH, scaled_y - UV_PICK_HALF_WIDTH, UV_PICK_WIDTH, UV_PICK_WIDTH, GL_RGBA, GL_UNSIGNED_BYTE, uv_pick_buffer); -			U8* center_pixel = &uv_pick_buffer[4 * ((UV_PICK_WIDTH * UV_PICK_HALF_WIDTH) + UV_PICK_HALF_WIDTH + 1)]; - -			result.mV[VX] = (F32)((center_pixel[VGREEN] & 0xf) + (16.f * center_pixel[VRED])) / 4095.f; -			result.mV[VY] = (F32)((center_pixel[VGREEN] >> 4) + (16.f * center_pixel[VBLUE])) / 4095.f; -		} -	} - -	return result; -} */ - -  //static   bool LLPickInfo::isFlora(LLViewerObject* object)  { diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp index 4e9400872a..c4430f4308 100755 --- a/indra/newview/llvlcomposition.cpp +++ b/indra/newview/llvlcomposition.cpp @@ -123,10 +123,10 @@ BOOL LLVLComposition::generateHeights(const F32 x, const F32 y,  	S32 x_begin, y_begin, x_end, y_end; -	x_begin = llround( x * mScaleInv ); -	y_begin = llround( y * mScaleInv ); -	x_end = llround( (x + width) * mScaleInv ); -	y_end = llround( (y + width) * mScaleInv ); +	x_begin = ll_round( x * mScaleInv ); +	y_begin = ll_round( y * mScaleInv ); +	x_end = ll_round( (x + width) * mScaleInv ); +	y_end = ll_round( (y + width) * mScaleInv );  	if (x_end > mWidth)  	{ @@ -318,8 +318,8 @@ BOOL LLVLComposition::generateTexture(const F32 x, const F32 y,  	S32 x_begin, y_begin, x_end, y_end;  	x_begin = (S32)(x * mScaleInv);  	y_begin = (S32)(y * mScaleInv); -	x_end = llround( (x + width) * mScaleInv ); -	y_end = llround( (y + width) * mScaleInv ); +	x_end = ll_round( (x + width) * mScaleInv ); +	y_end = ll_round( (y + width) * mScaleInv );  	if (x_end > mWidth)  	{ diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 75b81cdeed..6e0d77b10a 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -137,10 +137,6 @@ const LLUUID ANIM_AGENT_PHYSICS_MOTION = LLUUID("7360e029-3cb8-ebc4-863e-212df44  //-----------------------------------------------------------------------------  // Constants  //----------------------------------------------------------------------------- - -const S32 MIN_PIXEL_AREA_FOR_COMPOSITE = 1024; -const F32 SHADOW_OFFSET_AMT = 0.03f; -  const F32 DELTA_TIME_MIN = 0.01f;	// we clamp measured deltaTime to this  const F32 DELTA_TIME_MAX = 0.2f;	// range to insure stability of computations. @@ -148,22 +144,15 @@ const F32 PELVIS_LAG_FLYING		= 0.22f;// pelvis follow half life while flying  const F32 PELVIS_LAG_WALKING	= 0.4f;	// ...while walking  const F32 PELVIS_LAG_MOUSELOOK = 0.15f;  const F32 MOUSELOOK_PELVIS_FOLLOW_FACTOR = 0.5f; -const F32 PELVIS_LAG_WHEN_FOLLOW_CAM_IS_ON = 0.0001f; // not zero! - something gets divided by this!  const F32 TORSO_NOISE_AMOUNT = 1.0f;	// Amount of deviation from up-axis, in degrees  const F32 TORSO_NOISE_SPEED = 0.2f;	// Time scale factor on torso noise.  const F32 BREATHE_ROT_MOTION_STRENGTH = 0.05f; -const F32 BREATHE_SCALE_MOTION_STRENGTH = 0.005f; - -const F32 MIN_SHADOW_HEIGHT = 0.f; -const F32 MAX_SHADOW_HEIGHT = 0.3f;  const S32 MIN_REQUIRED_PIXEL_AREA_BODY_NOISE = 10000;  const S32 MIN_REQUIRED_PIXEL_AREA_BREATHE = 10000;  const S32 MIN_REQUIRED_PIXEL_AREA_PELVIS_FIX = 40; -const S32 TEX_IMAGE_SIZE_SELF = 512; -const S32 TEX_IMAGE_AREA_SELF = TEX_IMAGE_SIZE_SELF * TEX_IMAGE_SIZE_SELF;  const S32 TEX_IMAGE_SIZE_OTHER = 512 / 4;  // The size of local textures for other (!isSelf()) avatars  const F32 HEAD_MOVEMENT_AVG_TIME = 0.9f; @@ -4207,8 +4196,8 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)  		}  		// Can't test for baked hair being defined, since that won't always be the case (not all viewers send baked hair)  		// TODO: 1.25 will be able to switch this logic back to calling isTextureVisible(); -		if ( getImage(TEX_HAIR_BAKED, 0) &&  -		     getImage(TEX_HAIR_BAKED, 0)->getID() != IMG_INVISIBLE || LLDrawPoolAlpha::sShowDebugAlpha)		 +		if ( ( getImage(TEX_HAIR_BAKED, 0) &&  +		     getImage(TEX_HAIR_BAKED, 0)->getID() != IMG_INVISIBLE ) || LLDrawPoolAlpha::sShowDebugAlpha)		  		{  			LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR);  			if (hair_mesh) @@ -7283,7 +7272,7 @@ void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMe  		if (it != contents.mParams.end())  		{  			S32 index = it - contents.mParams.begin(); -			contents.mParamAppearanceVersion = llround(contents.mParamWeights[index]); +			contents.mParamAppearanceVersion = ll_round(contents.mParamWeights[index]);  			LL_DEBUGS("Avatar") << "appversion req by appearance_version param: " << contents.mParamAppearanceVersion << LL_ENDL;  		}  	} diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index ae7a233876..1e9945b514 100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -178,7 +178,6 @@ LLVOAvatarSelf::LLVOAvatarSelf(const LLUUID& id,  	mScreenp(NULL),  	mLastRegionHandle(0),  	mRegionCrossingCount(0), -	mInitialBakesLoaded(false),  	// Value outside legal range, so will always be a mismatch the  	// first time through.  	mLastHoverOffsetSent(LLVector3(0.0f, 0.0f, -999.0f)) diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index b8e9bbb77a..dc5e64d547 100755 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -109,7 +109,6 @@ private:  private:  	LLUUID mInitialBakeIDs[6]; -	bool mInitialBakesLoaded;  /******************************************************************************** diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp index b79a48012a..8d8f33b601 100755 --- a/indra/newview/llvograss.cpp +++ b/indra/newview/llvograss.cpp @@ -51,7 +51,6 @@  const S32 GRASS_MAX_BLADES =	32;  const F32 GRASS_BLADE_BASE =	0.25f;			//  Width of grass at base -const F32 GRASS_BLADE_TOP =		0.25f;			//  Width of grass at top  const F32 GRASS_BLADE_HEIGHT =	0.5f;			// meters  const F32 GRASS_DISTRIBUTION_SD = 0.15f;		// empirically defined diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 962cdf0268..e24884fe81 100755 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -1024,10 +1024,15 @@ void LLSpeakerVolumeStorage::load()  	LLSD settings_llsd;  	llifstream file; -	file.open(filename); +	file.open(filename.c_str());  	if (file.is_open())  	{ -		LLSDSerialize::fromXML(settings_llsd, file); +		if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXML(settings_llsd, file)) +        { +            LL_WARNS("Voice") << "failed to parse " << filename << LL_ENDL; +             +        } +              	}  	for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); @@ -1062,7 +1067,7 @@ void LLSpeakerVolumeStorage::save()  		}  		llofstream file; -		file.open(filename); +		file.open(filename.c_str());  		LLSDSerialize::toPrettyXML(settings_llsd, file);  	}  } diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp index 23a8a61b85..cb83cf8fdf 100755 --- a/indra/newview/llvoicevisualizer.cpp +++ b/indra/newview/llvoicevisualizer.cpp @@ -70,7 +70,6 @@ const F32 DEFAULT_MAXIMUM_GESTICULATION_AMPLITUDE	= 1.0f;  //--------------------------------------------------------------------------------------  // other constants  //-------------------------------------------------------------------------------------- -const F32 ONE_HALF = 1.0f; // to clarify intent and reduce magic numbers in the code.   const LLVector3 WORLD_UPWARD_DIRECTION = LLVector3( 0.0f, 0.0f, 1.0f ); // Z is up in SL  //------------------------------------------------------------------ diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index b6aecb4aaa..a6a7a35b03 100755 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -2519,7 +2519,7 @@ void LLVivoxVoiceClient::sendPositionalUpdate(void)  				if(!p->mIsSelf)  				{  					// scale from the range 0.0-1.0 to vivox volume in the range 0-100 -					S32 volume = llround(p->mVolume / VOLUME_SCALE_VIVOX); +					S32 volume = ll_round(p->mVolume / VOLUME_SCALE_VIVOX);  					bool mute = p->mOnMuteList;  					if(mute) diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index c1593fa5fc..1ba0868544 100755 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -44,8 +44,6 @@  #include "pipeline.h"  #include "llspatialpartition.h" -const F32 MAX_PART_LIFETIME = 120.f; -  extern U64MicrosecondsImplicit gFrameTime;  LLPointer<LLVertexBuffer> LLVOPartGroup::sVB = NULL; @@ -683,7 +681,7 @@ void LLVOPartGroup::getGeometry(S32 idx,  		}  		else   		{ -			pglow = LLColor4U(0, 0, 0, (U8) llround(255.f*part.mStartGlow)); +			pglow = LLColor4U(0, 0, 0, (U8) ll_round(255.f*part.mStartGlow));  			pcolor = part.mStartColor;  		}  	} diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 07c2f0d44d..4dab213fa0 100755 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -62,8 +62,6 @@ static const S32 NUM_TILES = NUM_TILES_X * NUM_TILES_Y;  static const F32 SUN_DISK_RADIUS	= 0.5f;  static const F32 MOON_DISK_RADIUS	= SUN_DISK_RADIUS * 0.9f;  static const F32 SUN_INTENSITY = 1e5; -static const F32 SUN_DISK_INTENSITY = 24.f; -  // Texture coordinates:  static const LLVector2 TEX00 = LLVector2(0.f, 0.f); @@ -619,21 +617,6 @@ static inline LLColor3 colorMix(LLColor3 const & left, LLColor3 const & right, F  	return (left + ((right - left) * amount));  } -static inline F32 texture2D(LLPointer<LLImageRaw> const & tex, LLVector2 const & uv) -{ -	U16 w = tex->getWidth(); -	U16 h = tex->getHeight(); - -	U16 r = U16(uv[0] * w) % w; -	U16 c = U16(uv[1] * h) % h; - -	U8 const * imageBuffer = tex->getData(); - -	U8 sample = imageBuffer[r * w + c]; - -	return sample / 255.f; -} -  static inline LLColor3 smear(F32 val)  {  	return LLColor3(val, val, val); diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 66c0ace79d..367fa21b91 100755 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -396,9 +396,6 @@ void LLVOTree::idleUpdate(LLAgent &agent, const F64 &time)  	mTrunkLOD = trunk_LOD;  } -const F32 TREE_BLEND_MIN = 1.f; -const F32 TREE_BLEND_RANGE = 1.f; -  void LLVOTree::render(LLAgent &agent)  {  } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 47d4e5565b..0432f6f27c 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -78,10 +78,8 @@  #include "llvocache.h"  #include "llmaterialmgr.h" -const S32 MIN_QUIET_FRAMES_COALESCE = 30;  const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;  const F32 FORCE_CULL_AREA = 8.f; -const F32 MAX_LOD_DISTANCE = 24.f;  U32 JOINT_COUNT_REQUIRED_FOR_FULLRIG = 20;  BOOL gAnimateTextures = TRUE; @@ -1222,7 +1220,7 @@ S32	LLVOVolume::computeLODDetail(F32 distance, F32 radius)  	{  		// We've got LOD in the profile, and in the twist.  Use radius.  		F32 tan_angle = (LLVOVolume::sLODFactor*radius)/distance; -		cur_detail = LLVolumeLODGroup::getDetailFromTan(llround(tan_angle, 0.01f)); +		cur_detail = LLVolumeLODGroup::getDetailFromTan(ll_round(tan_angle, 0.01f));  	}  	else  	{ @@ -1280,8 +1278,8 @@ BOOL LLVOVolume::calcLOD()  	// DON'T Compensate for field of view changing on FOV zoom.  	distance *= F_PI/3.f; -	cur_detail = computeLODDetail(llround(distance, 0.01f),  -									llround(radius, 0.01f)); +	cur_detail = computeLODDetail(ll_round(distance, 0.01f),  +									ll_round(radius, 0.01f));  	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_LOD_INFO) && @@ -1294,7 +1292,7 @@ BOOL LLVOVolume::calcLOD()  	if (cur_detail != mLOD)  	{ -		mAppAngle = llround((F32) atan2( mDrawable->getRadius(), mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f); +		mAppAngle = ll_round((F32) atan2( mDrawable->getRadius(), mDrawable->mDistanceWRTCamera) * RAD_TO_DEG, 0.01f);  		mLOD = cur_detail;		  		return TRUE;  	} diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index e3419af10d..9ce16a1674 100755 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -43,9 +43,6 @@  #include "pipeline.h"  #include "llspatialpartition.h" -const BOOL gUseRoam = FALSE; - -  ///////////////////////////////////  template<class T> inline T LERP(T a, T b, F32 factor) @@ -53,12 +50,6 @@ template<class T> inline T LERP(T a, T b, F32 factor)  	return a + (b - a) * factor;  } -const U32 N_RES_HALF	= (N_RES >> 1); - -const U32 WIDTH			= (N_RES * WAVE_STEP); //128.f //64		// width of wave tile, in meters -const F32 WAVE_STEP_INV	= (1. / WAVE_STEP); - -  LLVOWater::LLVOWater(const LLUUID &id,   					 const LLPCode pcode,   					 LLViewerRegion *regionp) : diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp index c854e1fc66..374792193c 100755 --- a/indra/newview/llwaterparammanager.cpp +++ b/indra/newview/llwaterparammanager.cpp @@ -150,7 +150,7 @@ void LLWaterParamManager::savePreset(const std::string & name)  	paramsData = mParamList[name].getAll();  	// write to file -	llofstream presetsXML(pathName); +	llofstream presetsXML(pathName.c_str());  	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();  	formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);  	presetsXML.close(); diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 58a00c5be0..c731a7d6cf 100755 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -382,6 +382,10 @@ class LLWearableItemCreationDateComparator : public LLWearableItemNameComparator  {  	LOG_CLASS(LLWearableItemCreationDateComparator); +public: +	// clang demands a default ctor here  +	LLWearableItemCreationDateComparator() {} +  protected:  	/*virtual*/ bool doCompare(const LLPanelInventoryListItemBase* item1, const LLPanelInventoryListItemBase* item2) const;  }; diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 0f0d9ce703..0be6e49834 100755 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -49,7 +49,7 @@  #include "llviewerregion.h"  #include "llviewerwindow.h"  #include "llnotificationsutil.h" - +#include "lluriparser.h"  #include "uriparser/Uri.h"  #include <boost/regex.hpp> @@ -240,19 +240,10 @@ bool LLWeb::useExternalBrowser(const std::string &url)  	}  	else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS)  	{ -		UriParserStateA state; -		UriUriA uri; -		state.uri = &uri; - -		std::string uri_string = url; -		uriParseUriA(&state, uri_string.c_str()); -		if (uri.hostText.first) -		{ -			S32 length = uri.hostText.afterLast - uri.hostText.first; -			std::string buf = uri.hostText.first; -			uri_string = buf.substr(0,length); -		} -		uriFreeUriMembersA(&uri); +		LLUriParser up(url); +		up.normalize(); +		up.extractParts(); +		std::string uri_string = up.host();  		boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)$", boost::regex::perl|boost::regex::icase);  		boost::match_results<std::string::const_iterator> matches; diff --git a/indra/newview/llwindowlistener.cpp b/indra/newview/llwindowlistener.cpp index a8e06511d7..734018cfc2 100755 --- a/indra/newview/llwindowlistener.cpp +++ b/indra/newview/llwindowlistener.cpp @@ -44,10 +44,7 @@  #include <typeinfo>  #include <map>  #include <boost/scoped_ptr.hpp> -#include <boost/lambda/core.hpp> -#include <boost/lambda/bind.hpp> - -namespace bll = boost::lambda; +#include <boost/bind.hpp>  LLWindowListener::LLWindowListener(LLViewerWindow *window, const KeyboardGetter& kbgetter)  	: LLEventAPI("LLWindow", "Inject input events into the LLWindow instance"), @@ -358,6 +355,30 @@ static WhichButton buttons;  typedef boost::function<bool(LLCoordGL, MASK)> MouseFunc; +// Wrap a function returning 'void' to return 'true' instead. I'm sure there's +// a more generic way to accomplish this, but generically handling the +// arguments seems to require variadic templates and perfect forwarding. (We +// used to be able to write (boost::lambda::bind(...), true), counting on +// boost::lambda's comma operator overload, until +// https://svn.boost.org/trac/boost/ticket/10864. And boost::phoenix doesn't +// seem to overload comma the same way; or at least not with bind().) +class MouseFuncTrue +{ +    typedef boost::function<void(LLCoordGL, MASK)> MouseFuncVoid; +    MouseFuncVoid mFunc; + +public: +    MouseFuncTrue(const MouseFuncVoid& func): +        mFunc(func) +    {} + +    bool operator()(LLCoordGL coords, MASK mask) const +    { +        mFunc(coords, mask); +        return true; +    } +}; +  static void mouseEvent(const MouseFunc& func, const LLSD& request)  {  	// Ensure we send response @@ -464,11 +485,11 @@ void LLWindowListener::mouseDown(LLSD const & request)  	if (actions.valid)  	{  		// Normally you can pass NULL to an LLWindow* without compiler -		// complaint, but going through boost::lambda::bind() evidently +		// complaint, but going through boost::bind() evidently  		// bypasses that special case: it only knows you're trying to pass an  		// int to a pointer. Explicitly cast NULL to the desired pointer type. -		mouseEvent(bll::bind(actions.down, mWindow, -							 static_cast<LLWindow*>(NULL), bll::_1, bll::_2), +		mouseEvent(boost::bind(actions.down, mWindow, +							 static_cast<LLWindow*>(NULL), _1, _2),  				   request);  	}  } @@ -478,8 +499,8 @@ void LLWindowListener::mouseUp(LLSD const & request)  	Actions actions(buttons.lookup(request["button"]));  	if (actions.valid)  	{ -		mouseEvent(bll::bind(actions.up, mWindow, -							 static_cast<LLWindow*>(NULL), bll::_1, bll::_2), +		mouseEvent(boost::bind(actions.up, mWindow, +							 static_cast<LLWindow*>(NULL), _1, _2),  				   request);  	}  } @@ -489,12 +510,10 @@ void LLWindowListener::mouseMove(LLSD const & request)  	// We want to call the same central mouseEvent() routine for  	// handleMouseMove() as for button clicks. But handleMouseMove() returns  	// void, whereas mouseEvent() accepts a function returning bool -- and -	// uses that bool return. Use (void-lambda-expression, true) to construct -	// a callable that returns bool anyway. Pass 'true' because we expect that -	// our caller will usually treat 'false' as a problem. -	mouseEvent((bll::bind(&LLWindowCallbacks::handleMouseMove, mWindow, -						  static_cast<LLWindow*>(NULL), bll::_1, bll::_2), -				true), +	// uses that bool return. Use MouseFuncTrue to construct a callable that +	// returns bool anyway. +	mouseEvent(MouseFuncTrue(boost::bind(&LLWindowCallbacks::handleMouseMove, mWindow, +						  static_cast<LLWindow*>(NULL), _1, _2)),  			   request);  } diff --git a/indra/newview/llwlanimator.cpp b/indra/newview/llwlanimator.cpp index e568638cf6..2142885767 100755 --- a/indra/newview/llwlanimator.cpp +++ b/indra/newview/llwlanimator.cpp @@ -242,7 +242,7 @@ std::string LLWLAnimator::timeToString(F32 curTime)  	// get hours and minutes  	hours = (S32) (24.0 * curTime);  	curTime -= ((F32) hours / 24.0f); -	min = llround(24.0f * 60.0f * curTime); +	min = ll_round(24.0f * 60.0f * curTime);  	// handle case where it's 60  	if(min == 60)  diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp index e9b0baf612..88079c5d26 100755 --- a/indra/newview/llwldaycycle.cpp +++ b/indra/newview/llwldaycycle.cpp @@ -109,7 +109,7 @@ LLSD LLWLDayCycle::loadDayCycleFromPath(const std::string& file_path)  {  	LL_INFOS("Windlight") << "Loading DayCycle settings from " << file_path << LL_ENDL; -	llifstream day_cycle_xml(file_path); +	llifstream day_cycle_xml(file_path.c_str());  	if (day_cycle_xml.is_open())  	{  		// load and parse it @@ -137,7 +137,7 @@ void LLWLDayCycle::save(const std::string& file_path)  {  	LLSD day_data = asLLSD(); -	llofstream day_cycle_xml(file_path); +	llofstream day_cycle_xml(file_path.c_str());  	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();  	formatter->format(day_data, day_cycle_xml, LLSDFormatter::OPTIONS_PRETTY);  	day_cycle_xml.close(); diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 91ea10d43d..2b6d88efef 100755 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -334,7 +334,7 @@ void LLWLParamManager::savePreset(LLWLParamKey key)  	paramsData = mParamList[key].getAll();  	// write to file -	llofstream presetsXML(pathName); +	llofstream presetsXML(pathName.c_str());  	LLPointer<LLSDFormatter> formatter = new LLSDXMLFormatter();  	formatter->format(paramsData, presetsXML, LLSDFormatter::OPTIONS_PRETTY);  	presetsXML.close(); diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 315af3f942..5d657f7eef 100755 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -70,7 +70,6 @@ U32			gAgentPauseSerialNum = 0;  //  // Constants  // -const S32 MAX_NUMBER_OF_CLOUDS	= 750;  const S32 WORLD_PATCH_SIZE = 16;  extern LLColor4U MAX_WATER_COLOR; @@ -981,8 +980,8 @@ void LLWorld::updateWaterObjects()  		}  		// Resize and reshape the water objects -		const S32 water_center_x = center_x + llround((wx + dim[0]) * 0.5f * gDirAxes[dir][0]); -		const S32 water_center_y = center_y + llround((wy + dim[1]) * 0.5f * gDirAxes[dir][1]); +		const S32 water_center_x = center_x + ll_round((wx + dim[0]) * 0.5f * gDirAxes[dir][0]); +		const S32 water_center_y = center_y + ll_round((wy + dim[1]) * 0.5f * gDirAxes[dir][1]);  		LLVOWater* waterp = mEdgeWaterObjects[dir];  		if (!waterp || waterp->isDead()) diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 7cb53a0706..62fad32246 100755 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -67,7 +67,6 @@ const F32 OCEAN_GREEN = (F32)(0x47)/255.f;  const F32 OCEAN_BLUE  = (F32)(0x5F)/255.f;  const F32 GODLY_TELEPORT_HEIGHT = 200.f; -const S32 SCROLL_HINT_WIDTH = 65;  const F32 BIG_DOT_RADIUS = 5.f;  BOOL LLWorldMapView::sHandledLastClick = FALSE; @@ -420,8 +419,8 @@ void LLWorldMapView::draw()  			if (overlayimage)  			{  				// Inform the fetch mechanism of the size we need -				S32 draw_size = llround(sMapScale); -				overlayimage->setKnownDrawSize(llround(draw_size * LLUI::getScaleFactor().mV[VX]), llround(draw_size * LLUI::getScaleFactor().mV[VY])); +				S32 draw_size = ll_round(sMapScale); +				overlayimage->setKnownDrawSize(ll_round(draw_size * LLUI::getScaleFactor().mV[VX]), ll_round(draw_size * LLUI::getScaleFactor().mV[VY]));  				// Draw something whenever we have enough info  				if (overlayimage->hasGLTexture())  				{ @@ -509,7 +508,7 @@ void LLWorldMapView::draw()  	drawImage(pos_global, sAvatarYouImage);  	LLVector3 pos_map = globalPosToView(pos_global); -	if (!pointInView(llround(pos_map.mV[VX]), llround(pos_map.mV[VY]))) +	if (!pointInView(ll_round(pos_map.mV[VX]), ll_round(pos_map.mV[VY])))  	{  		drawTracking(pos_global,  					 lerp(LLColor4::yellow, LLColor4::orange, 0.4f), @@ -774,8 +773,8 @@ void LLWorldMapView::drawGenericItem(const LLItemInfo& item, LLUIImagePtr image)  void LLWorldMapView::drawImage(const LLVector3d& global_pos, LLUIImagePtr image, const LLColor4& color)  {  	LLVector3 pos_map = globalPosToView( global_pos ); -	image->draw(llround(pos_map.mV[VX] - image->getWidth() /2.f), -				llround(pos_map.mV[VY] - image->getHeight()/2.f), +	image->draw(ll_round(pos_map.mV[VX] - image->getWidth() /2.f), +				ll_round(pos_map.mV[VY] - image->getHeight()/2.f),  				color);  } @@ -784,8 +783,8 @@ void LLWorldMapView::drawImageStack(const LLVector3d& global_pos, LLUIImagePtr i  	LLVector3 pos_map = globalPosToView( global_pos );  	for(U32 i=0; i<count; i++)  	{ -		image->draw(llround(pos_map.mV[VX] - image->getWidth() /2.f), -					llround(pos_map.mV[VY] - image->getHeight()/2.f + i*offset), +		image->draw(ll_round(pos_map.mV[VX] - image->getWidth() /2.f), +					ll_round(pos_map.mV[VY] - image->getHeight()/2.f + i*offset),  					color);  	}  } @@ -959,8 +958,8 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&  								  const std::string& label, const std::string& tooltip, S32 vert_offset )  {  	LLVector3 pos_local = globalPosToView( pos_global ); -	S32 x = llround( pos_local.mV[VX] ); -	S32 y = llround( pos_local.mV[VY] ); +	S32 x = ll_round( pos_local.mV[VX] ); +	S32 y = ll_round( pos_local.mV[VY] );  	LLFontGL* font = LLFontGL::getFontSansSerifSmall();  	S32 text_x = x;  	S32 text_y = (S32)(y - sTrackCircleImage->getHeight()/2 - font->getLineHeight()); @@ -1111,8 +1110,8 @@ static void drawDot(F32 x_pixels, F32 y_pixels,  	if(-HEIGHT_THRESHOLD <= relative_z && relative_z <= HEIGHT_THRESHOLD)  	{ -		dot_image->draw(llround(x_pixels) - dot_image->getWidth()/2, -						llround(y_pixels) - dot_image->getHeight()/2,  +		dot_image->draw(ll_round(x_pixels) - dot_image->getWidth()/2, +						ll_round(y_pixels) - dot_image->getHeight()/2,   						color);  	}  	else @@ -1167,9 +1166,9 @@ void LLWorldMapView::drawAvatar(F32 x_pixels,  			dot_image = sAvatarAboveImage;  		}  	} -	S32 dot_width = llround(dot_radius * 2.f); -	dot_image->draw(llround(x_pixels - dot_radius), -					llround(y_pixels - dot_radius), +	S32 dot_width = ll_round(dot_radius * 2.f); +	dot_image->draw(ll_round(x_pixels - dot_radius), +					ll_round(y_pixels - dot_radius),  					dot_width,  					dot_width,  					color); @@ -1196,8 +1195,8 @@ void LLWorldMapView::drawIconName(F32 x_pixels,  								  const std::string& second_line)  {  	const S32 VERT_PAD = 8; -	S32 text_x = llround(x_pixels); -	S32 text_y = llround(y_pixels +	S32 text_x = ll_round(x_pixels); +	S32 text_y = ll_round(y_pixels  						 - BIG_DOT_RADIUS  						 - VERT_PAD); @@ -1385,8 +1384,8 @@ void LLWorldMapView::setDirectionPos( LLTextBox* text_box, F32 rotation )  	F32 radius = llmin( map_half_height - text_half_height, map_half_width - text_half_width );  	text_box->setOrigin(  -		llround(map_half_width - text_half_width + radius * cos( rotation )), -		llround(map_half_height - text_half_height + radius * sin( rotation )) ); +		ll_round(map_half_width - text_half_width + radius * cos( rotation )), +		ll_round(map_half_height - text_half_height + radius * sin( rotation )) );  } @@ -1434,8 +1433,8 @@ void LLWorldMapView::reshape( S32 width, S32 height, BOOL called_from_parent )  bool LLWorldMapView::checkItemHit(S32 x, S32 y, LLItemInfo& item, LLUUID* id, bool track)  {  	LLVector3 pos_view = globalPosToView(item.getGlobalPosition()); -	S32 item_x = llround(pos_view.mV[VX]); -	S32 item_y = llround(pos_view.mV[VY]); +	S32 item_x = ll_round(pos_view.mV[VX]); +	S32 item_y = ll_round(pos_view.mV[VY]);  	if (x < item_x - BIG_DOT_RADIUS) return false;  	if (x > item_x + BIG_DOT_RADIUS) return false; @@ -1599,8 +1598,8 @@ BOOL LLWorldMapView::handleMouseDown( S32 x, S32 y, MASK mask )  {  	gFocusMgr.setMouseCapture( this ); -	mMouseDownPanX = llround(sPanX); -	mMouseDownPanY = llround(sPanY); +	mMouseDownPanX = ll_round(sPanX); +	mMouseDownPanY = ll_round(sPanY);  	mMouseDownX = x;  	mMouseDownY = y;  	sHandledLastClick = TRUE; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 3dfe1e5992..03712c1065 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -207,15 +207,9 @@ F32 LLPipeline::CameraDoFResScale;  F32 LLPipeline::RenderAutoHideSurfaceAreaLimit;  LLTrace::EventStatHandle<S64> LLPipeline::sStatBatchSize("renderbatchsize"); -const F32 BACKLIGHT_DAY_MAGNITUDE_AVATAR = 0.2f; -const F32 BACKLIGHT_NIGHT_MAGNITUDE_AVATAR = 0.1f;  const F32 BACKLIGHT_DAY_MAGNITUDE_OBJECT = 0.1f;  const F32 BACKLIGHT_NIGHT_MAGNITUDE_OBJECT = 0.08f; -const S32 MAX_OFFSCREEN_GEOMETRY_CHANGES_PER_FRAME = 10; -const U32 REFLECTION_MAP_RES = 128;  const U32 DEFERRED_VB_MASK = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1; -// Max number of occluders to search for. JC -const S32 MAX_OCCLUDER_COUNT = 2;  extern S32 gBoxFrame;  //extern BOOL gHideSelectedObjects; @@ -410,16 +404,6 @@ static LLPipelineListener sPipelineListener;  static LLCullResult* sCull = NULL; -static const U32 gl_cube_face[] =  -{ -	GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, -	GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, -	GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, -	GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, -	GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, -	GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, -}; -  void validate_framebuffer_object(); diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index ef2f158a86..60f36770bb 100755 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -51,44 +51,20 @@        name="credits_panel">        <text            follows="top|left|right" -          height="10" +          height="20"            layout="topleft"            left="5"            name="linden_intro"            top="10"            width="435"            wrap="true"> -Second Life is brought to you by the Lindens: -      </text> -      <text_editor -       enabled="false"  -       follows="top|left" -       height="98" -       bg_readonly_color="Transparent" -       left="5" -       text_color="LtGray" -       max_length="65536" -       name="linden_names" -       top_pad="10" -       width="435" -       word_wrap="true"> -Philip, Andrew, Doug, Richard, Phoenix, Ian, Mark, Robin, Dan, Char, Ryan, Eric, Jim, Lee, Jeff, Michael, Kelly, Steve, Catherine, Bub, Ramzi, Jill, Jeska, Don, Kona, Callum, Charity, Jack, Shawn, babbage, James, Lauren, Blue, Brent, Reuben, Pathfinder, Jesse, Patsy, Torley, Bo, Cyn, Jonathan, Gia, Annette, Ginsu, Harry, Lex, Runitai, Guy, Cornelius, Beth, Swiss, Thumper, Wendy, Teeple, Seth, Dee, Mia, Sally, Liana, Aura, Beez, Milo, Red, Gulliver, Marius, Joe, Jose, Dore, Justin, Nora, Morpheus, Lexie, Amber, Chris, Xan, Leyla, Walker, Sabin, Joshua, Hiromi, Tofu, Fritz, June, Jean, Ivy, Dez, Ken, Betsy, Which, Spike, Rob, Zee, Dustin, George, Claudia, del, Matthew, jane, jay, Adrian, Yool, Rika, Yoz, siobhan, Qarl, Benjamin, Beast, Everett, madhavi, Christopher, Izzy, stephany, Jeremy, sean, adreanne, Pramod, Tobin, sejong, Iridium, maurice, kj, Meta, kari, JP, bert, kyle, Jon, Socrates, Bridie, Ivan, maria, Aric, Coco, Periapse, sandy, Storrs, Lotte, Colossus, Brad, Pastrami, Zen, BigPapi, Banzai, Sardonyx, Mani, Garry, Jaime, Neuro, Samuel, Niko, CeeLo, Austin, Soft, Poppy, emma, tessa, angelo, kurz, alexa, Sue, CG, Blake, Erica, Brett, Bevis, kristen, Q, simon, Enus, MJ, laurap, Kip, Scouse, Ron, Ram, kend, Marty, Prospero, melissa, kraft, Nat, Seraph, Hamilton, Lordan, Green, miz, Ashlei, Trinity, Ekim, Echo, Charlie, Rowan, Rome, Jt, Doris, benoc, Christy, Bao, Kate, Tj, Patch, Cheah, Johan, Brandy, Angela, Oreh, Cogsworth, Lan, Mitchell, Space, Bambers, Einstein, Bender, Malbers, Matias, Maggie, Rothman, Milton, Niall, Marin, Allison, Mango, Andrea, Katt, Yi, Ambroff, Rico, Raymond, Gail, Christa, William, Dawn, Usi, Dynamike, M, Corr, Dante, Molly, kaylee, Danica, Kelv, Lil, jacob, Nya, Rodney, elsie, Blondin, Grant, Nyx, Devin, Monty, Minerva, Keira, Katie, Jenn, Makai, Clare, Joy, Cody, Gayathri, FJ, spider, Oskar, Landon, Jarv, Noelle, Al, Doc, Gray, Vir, t, Maestro, Simone, Shannon, yang, Courtney, Scott, charlene, Quixote, Susan, Zed, Amanda, Katelin, Esbee, JoRoan, Enkidu, roxie, Scarlet, Merov, Kevin, Judy, Rand, Newell, Les, Dessie, Galen, Michon, Geo, Siz, Calyle, Pete, Praveen, Callen, Sheldon, Pink, Nelson, jenelle, Terrence, Nathan, Juan, Sascha, Huseby, Karina, Kaye, Kotler, Lis, Darv, Charrell, Dakota, Kimmora, Theeba, Taka, Mae, Perry, Ducot, dana, Esther, Dough, gisele, Doten, Viale, Fisher, jessieann, ashley, Torres, delby, rountree, kurt, Slaton, Madison, Rue, Gino, Wen, Casssandra, Brodesky, Squid, Gez, Rakesh, Gecko, Ladan, Tony, Tatem, Squire, Falcon, BK, Crimp, Tiggs, Bacon, Coyot, Carmilla, Webb, Sea, Arch, Jillian, Jason, Bernard, Vogt, Peggy, dragon, Pup, xandix, Wallace, Bewest, Inoshiro, Rhett, AG, Aimee, Ghengis, Itiaes, Eli, Steffan, Epic, Grapes, Stone, Prep, Scobu, Robert, Alain, Carla, Vicky, Tia, Alec, Taras, Lisa, Oz, Ariane, Log, House, Kazu, Kim, Drofnas, Tyler, Campbell, Michele, Madeline, Nelly, Baron, Thor, Lori, Hele, Fredrik, Teddy, Pixie, Berry, Gabrielle, Alfonso, Brooke, Wolf, Ringo, Cru, Charlar, Rodvik, Gibson, Elise, Bagman, Greger, Leonidas, Jerm, Leslie, CB, Brenda, Durian, Carlo, mm, Zeeshan, Caleb, Max, Elikak, Mercille, Steph, Chase, Baker -      </text_editor> -      <text -          follows="top|left" -          height="10" -          layout="topleft" -          left="5" -          name="contrib_intro" -          top_pad="10" -          width="435" -          wrap="true"> +Second Life is brought to you by the Lindens,   with open source contributions from:        </text>        <text_editor         enabled="false"          follows="top|left" -       height="98" +       height="340"         bg_readonly_color="Transparent"         left="5"         text_color="LtGray" @@ -99,31 +75,6 @@ with open source contributions from:         word_wrap="true">  Dummy Name replaced at run time        </text_editor> -      <text -          follows="top|left" -          height="10" -          layout="topleft" -          left="5" -          name="trans_intro" -          top_pad="10" -          width="435" -          wrap="true"> -and translations from: -      </text> -      <text_editor -       enabled="false"  -       follows="top|left" -       height="98" -       bg_readonly_color="Transparent" -       left="5" -       text_color="LtGray" -       max_length="65536" -       name="trans_names" -       top_pad="10" -       width="435" -       word_wrap="true"> -Dummy Name replaced at run time -      </text_editor>      </panel>      <panel        border="true" @@ -138,7 +89,7 @@ Dummy Name replaced at run time         left="5"         text_color="LtGray"         max_length="65536" -       name="credits_editor" +       name="licenses_editor"         top="5"         width="435"         word_wrap="true"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 658c716ee7..b75d614dcc 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -3590,16 +3590,6 @@               function="ToggleControl"               parameter="ImagePipelineUseHTTP" />          </menu_item_check> -        <menu_item_check -         label="HTTP Inventory" -         name="HTTP Inventory"> -            <menu_item_check.on_check -             function="CheckControl" -             parameter="UseHTTPInventory" /> -            <menu_item_check.on_click -             function="ToggleControl" -             parameter="UseHTTPInventory" /> -        </menu_item_check>          <menu_item_call           label="Compress Images"           name="Compress Images"> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 4602a41d52..5cd050bfba 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5277,6 +5277,17 @@ Warning: The 'Pay object' click action has been set, but it will only    <notification     icon="alertmodal.tga" +   name="PayObjectFailed" +   type="alertmodal"> +    Payment failed: object was not found. +    <tag>fail</tag> +    <usetemplate +     name="okbutton" +     yestext="OK"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="OpenObjectCannotCopy"     type="alertmodal">  There are no items in this object that you are allowed to copy. @@ -10409,7 +10420,7 @@ Cannot create large prims that intersect other players.  Please re-try when othe     icon="alertmodal.tga"     name="DefaultObjectPermissions"     type="alert"> -	There was a problem saving the default permissions due to the following reason: [REASON].  Please try setting the default permissions later. +	There was a problem saving the default object permissions: [REASON].  Please try setting the default permissions later.  	<tag>fail</tag>     <usetemplate       name="okbutton" diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index a258a874b0..183ae2e824 100755 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -19,7 +19,7 @@    left="0"    name="ui_stack"    orientation="horizontal" -  top="0" +  top="10"    width="1024">      <layout_panel        height="172" @@ -30,7 +30,7 @@        auto_resize="false"        follows="left|right|top"        name="ui_container" -      width="960" +      width="1000"        left="0"        top="0"        height="172"> @@ -56,7 +56,8 @@      name="username_combo"      width="232">      <combo_box.combo_editor -      text_pad_left="8" /> +      text_pad_left="8"  +      bg_image_always_focused="true"/>      <combo_box.combo_button        visible="false" />      <combo_box.drop_down_button @@ -65,79 +66,42 @@    <line_editor      follows="left|top"      height="32" -    left_pad="0" +    left_pad="-11"      max_length_bytes="16"      text_pad_left="8"      name="password_edit"      label="Password" +  	bg_image_always_focused="true"      font="SansSerifLarge"      is_password="true"      select_on_focus="true"      commit_on_focus_lost="false"      bottom_delta="0" -    width="200" /> -  <check_box -    control_name="RememberPassword" -    follows="left|top" -    font="SansSerifMedium" -    left_pad="20" -    bottom_delta="-14" -    height="24" -    label="Remember me" -    check_button.bottom="3" -    name="remember_check" -    width="145" /> -  <text -    follows="left|top" -    font="SansSerifMedium" -    text_color="EmphasisColor" -    height="16" -    name="forgot_password_text" -    left_delta="0" -    bottom_delta="16" -    width="200"> -    Forgotten password -  </text> -  <button -    follows="left|top" -    image_unselected="PushButton_Login" -    image_pressed="PushButton_Login_Pressed" -    image_hover="PushButton_Login_Over" -    label="Log In" -    label_color="White" -    font="SansSerifMedium" -    name="connect_btn" -    enabled="true" -    left="0" -    width="80" -    height="26" -    bottom_delta="44" /> -  <text -    follows="left|top" -    font="SansSerifLarge" -    height="24" -    name="At_My_Last_Location_Label" -    left_pad="8" -    bottom_delta="1" -    width="120"> -    at last location -  </text> +    width="165" />    <combo_box -    control_name="NextLoginLocation" +    allow_text_entry="true" +    control_name="NextLoginLocation"          follows="left|top"      label="My favorite places" -    height="26" +    height="32"      max_chars="128" -    combo_editor.font="SansSerifMedium" -    left_pad="20" +    combo_editor.font="SansSerifLarge" +    left_pad="15"      bottom_delta="0"      name="start_location_combo"      width="175"      combo_button.scale_image="true"> +    <combo_box.combo_editor +      bg_image_always_focused="true" +      text_pad_left="8"/> +    <combo_box.item +      label="My last location" +      name="MyLastLocation" +      value="last" />      <combo_box.item        label="My home"        name="MyHome" -      value="home" /> +      value="home" />         </combo_box>    <button      follows="left|top" @@ -147,53 +111,48 @@      label="Log In"      label_color="White"      font="SansSerifMedium" -    name="connect_favorite_btn" -    left_pad="8" -    width="80" -    enabled="false" -    height="26" -    bottom_delta="0" /> -  <line_editor +    name="connect_btn" +    enabled="true"     +    width="120" +    height="32" +  	left_pad="15" +    bottom_delta="0" />   +  <check_box +    control_name="RememberPassword"      follows="left|top" -    width="170" -    height="26" -    left_pad="40" -    text_pad_left="8" -    name="location_edit" -    label="Type a location"      font="SansSerifMedium" -    select_on_focus="true" -    commit_on_focus_lost="false" -    bottom_delta="0" /> -  <button +    left="185" +    bottom_delta="21"  	 +    height="24" +    label="Remember me" +    check_button.bottom="3" +    name="remember_check" +    width="145" /> +  <text      follows="left|top" -    image_unselected="PushButton_Login" -    image_pressed="PushButton_Login_Pressed" -    image_hover="PushButton_Login_Over" -    label="Log In" -    enabled="false" -    label_color="White"      font="SansSerifMedium" -    name="connect_location_btn" -    left_pad="8" -    width="80" -    height="26" -    bottom_delta="0" /> +    text_color="EmphasisColor" +    height="16" +    name="forgot_password_text" +    left="408"     +    bottom_delta="0" +    width="200"> +    Forgotten password +  </text>     <combo_box      allow_text_entry="false"      font="SansSerifTiny"      follows="left|top"      height="26" +  	left="588" +  	bottom_delta="10"      max_chars="128" -    label="Select grid" -    left_pad="40" -    bottom_delta="0" +    label="Select grid"          layout="topleft" -    top_pad="2"      name="server_combo" -    width="128" /> -    </layout_panel> -    <layout_panel +    width="149" />	 +  </layout_panel> +  <layout_panel        height="172"        auto_resize="true"        name="ui_elastic_pad_right" diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index adeb848e03..1b0334498e 100755 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -193,14 +193,6 @@ void LLAppViewer::forceQuit(void) {}  LLAppViewer * LLAppViewer::sInstance = 0;  //----------------------------------------------------------------------------- -#include "llnotificationsutil.h" -LLNotificationPtr LLNotificationsUtil::add(const std::string& name,  -					  const LLSD& substitutions,  -					  const LLSD& payload,  -					  boost::function<void (const LLSD&, const LLSD&)> functor) { return LLNotificationPtr((LLNotification*)0); } - - -//-----------------------------------------------------------------------------  #include "llupdaterservice.h"  std::string const & LLUpdaterService::pumpName(void) @@ -488,8 +480,6 @@ namespace tut      template<> template<>      void lllogininstance_object::test<3>()      { -		skip(); -		  		set_test_name("Test Mandatory Update User Accepts");  		// Part 1 - Mandatory Update, with User accepts response. @@ -517,8 +507,6 @@ namespace tut  	template<> template<>      void lllogininstance_object::test<4>()      { -		skip(); -		  		set_test_name("Test Mandatory Update User Decline");  		// Test connect with update needed. diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 7544fe1c41..32cf9d3df6 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -38,7 +38,7 @@ viewer_dir = os.path.dirname(__file__)  # Put it FIRST because some of our build hosts have an ancient install of  # indra.util.llmanifest under their system Python!  sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python")) -from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError +from indra.util.llmanifest import LLManifest, main, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError  try:      from llbase import llsd  except ImportError: @@ -55,7 +55,6 @@ class ViewerManifest(LLManifest):      def construct(self):          super(ViewerManifest, self).construct() -        self.exclude("*.svn*")          self.path(src="../../scripts/messages/message_template.msg", dst="app_settings/message_template.msg")          self.path(src="../../etc/message.xml", dst="app_settings/message.xml") @@ -74,26 +73,6 @@ class ViewerManifest(LLManifest):                  contributions_path = "../../doc/contributions.txt"                  contributor_names = self.extract_names(contributions_path)                  self.put_in_file(contributor_names, "contributors.txt", src=contributions_path) -                # include the extracted list of translators -                translations_path = "../../doc/translations.txt" -                translator_names = self.extract_names(translations_path) -                self.put_in_file(translator_names, "translators.txt", src=translations_path) -                # include the list of Lindens (if any) -                #   see https://wiki.lindenlab.com/wiki/Generated_Linden_Credits -                linden_names_path = os.getenv("LINDEN_CREDITS") -                if not linden_names_path : -                    print "No 'LINDEN_CREDITS' specified in environment, using built-in list" -                else: -                    try: -                        linden_file = open(linden_names_path,'r') -                    except IOError: -                        print "No Linden names found at '%s', using built-in list" % linden_names_path -                    else: -                         # all names should be one line, but the join below also converts to a string -                        linden_names = ', '.join(linden_file.readlines()) -                        self.put_in_file(linden_names, "lindens.txt", src=linden_names_path) -                        linden_file.close() -                        print "Linden names extracted from '%s'" % linden_names_path                  # ... and the entire windlight directory                  self.path("windlight") @@ -107,6 +86,9 @@ class ViewerManifest(LLManifest):                      self.path("dictionaries")                      self.end_prefix(pkgdir) +                # include the extracted packages information (see BuildPackagesInfo.cmake) +                self.path(src=os.path.join(self.args['build'],"packages-info.txt"), dst="packages-info.txt") +                  # CHOP-955: If we have "sourceid" or "viewer_channel" in the                  # build process environment, generate it into                  # settings_install.xml. @@ -349,14 +331,18 @@ class Windows_i686_Manifest(ViewerManifest):      def construct(self):          super(Windows_i686_Manifest, self).construct() +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") +          if self.is_packaging_viewer():              # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.              self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())          # Plugin host application -        self.path2basename(os.path.join(os.pardir, -                                        'llplugin', 'slplugin', self.args['configuration']), -                           "slplugin.exe") +        # The current slplugin package places slplugin.exe right into the +        # packages base directory. +        self.path2basename(pkgdir, "slplugin.exe")          self.path2basename("../viewer_components/updater/scripts/windows", "update_install.bat")          # Get shared libs from the shared libs staging directory @@ -376,15 +362,10 @@ class Windows_i686_Manifest(ViewerManifest):              # Mesh 3rd party libs needed for auto LOD and collada reading              try: -                if self.args['configuration'].lower() == 'debug': -                    self.path("libcollada14dom22-d.dll") -                else: -                    self.path("libcollada14dom22.dll") -                                      self.path("glod.dll")              except RuntimeError, err:                  print err.message -                print "Skipping COLLADA and GLOD libraries (assumming linked statically)" +                print "Skipping GLOD library (assumming linked statically)"              # Get fmodex dll, continue if missing              try: @@ -404,11 +385,11 @@ class Windows_i686_Manifest(ViewerManifest):              # These need to be installed as a SxS assembly, currently a 'private' assembly.              # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx              if self.args['configuration'].lower() == 'debug': -                 self.path("msvcr100d.dll") -                 self.path("msvcp100d.dll") +                 self.path("msvcr120d.dll") +                 self.path("msvcp120d.dll")              else: -                 self.path("msvcr100.dll") -                 self.path("msvcp100.dll") +                 self.path("msvcr120.dll") +                 self.path("msvcp120.dll")              # Vivox runtimes              self.path("SLVoice.exe") @@ -443,82 +424,52 @@ class Windows_i686_Manifest(ViewerManifest):          self.path("featuretable_xp.txt")          # Media plugins - QuickTime -        if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): -            self.path("media_plugin_quicktime.dll") -            self.end_prefix() -          # Media plugins - WebKit/Qt -        if self.prefix(src='../media_plugins/webkit/%s' % self.args['configuration'], dst="llplugin"): +        if self.prefix(src=os.path.join(pkgdir, "llplugin"), dst="llplugin"): +            self.path("media_plugin_quicktime.dll")              self.path("media_plugin_webkit.dll") -            self.end_prefix() +            self.path("qtcore4.dll") +            self.path("qtgui4.dll") +            self.path("qtnetwork4.dll") +            self.path("qtopengl4.dll") +            self.path("qtwebkit4.dll") +            self.path("qtxmlpatterns4.dll") + +            # For WebKit/Qt plugin runtimes (image format plugins) +            if self.prefix(src="imageformats", dst="imageformats"): +                self.path("qgif4.dll") +                self.path("qico4.dll") +                self.path("qjpeg4.dll") +                self.path("qmng4.dll") +                self.path("qsvg4.dll") +                self.path("qtiff4.dll") +                self.end_prefix() + +            # For WebKit/Qt plugin runtimes (codec/character encoding plugins) +            if self.prefix(src="codecs", dst="codecs"): +                self.path("qcncodecs4.dll") +                self.path("qjpcodecs4.dll") +                self.path("qkrcodecs4.dll") +                self.path("qtwcodecs4.dll") +                self.end_prefix() + +        self.end_prefix()          # winmm.dll shim          if self.prefix(src='../media_plugins/winmmshim/%s' % self.args['configuration'], dst=""):              self.path("winmm.dll")              self.end_prefix() -          if self.args['configuration'].lower() == 'debug': -            if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'debug'), -                           dst="llplugin"): +            if self.prefix(src=debpkgdir, dst="llplugin"):                  self.path("libeay32.dll") -                self.path("qtcored4.dll") -                self.path("qtguid4.dll") -                self.path("qtnetworkd4.dll") -                self.path("qtopengld4.dll") -                self.path("qtwebkitd4.dll") -                self.path("qtxmlpatternsd4.dll")                  self.path("ssleay32.dll") - -                # For WebKit/Qt plugin runtimes (image format plugins) -                if self.prefix(src="imageformats", dst="imageformats"): -                    self.path("qgifd4.dll") -                    self.path("qicod4.dll") -                    self.path("qjpegd4.dll") -                    self.path("qmngd4.dll") -                    self.path("qsvgd4.dll") -                    self.path("qtiffd4.dll") -                    self.end_prefix() - -                # For WebKit/Qt plugin runtimes (codec/character encoding plugins) -                if self.prefix(src="codecs", dst="codecs"): -                    self.path("qcncodecsd4.dll") -                    self.path("qjpcodecsd4.dll") -                    self.path("qkrcodecsd4.dll") -                    self.path("qtwcodecsd4.dll") -                    self.end_prefix() -                  self.end_prefix() +          else: -            if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release'), -                           dst="llplugin"): +            if self.prefix(src=relpkgdir, dst="llplugin"):                  self.path("libeay32.dll") -                self.path("qtcore4.dll") -                self.path("qtgui4.dll") -                self.path("qtnetwork4.dll") -                self.path("qtopengl4.dll") -                self.path("qtwebkit4.dll") -                self.path("qtxmlpatterns4.dll")                  self.path("ssleay32.dll") - -                # For WebKit/Qt plugin runtimes (image format plugins) -                if self.prefix(src="imageformats", dst="imageformats"): -                    self.path("qgif4.dll") -                    self.path("qico4.dll") -                    self.path("qjpeg4.dll") -                    self.path("qmng4.dll") -                    self.path("qsvg4.dll") -                    self.path("qtiff4.dll") -                    self.end_prefix() - -                # For WebKit/Qt plugin runtimes (codec/character encoding plugins) -                if self.prefix(src="codecs", dst="codecs"): -                    self.path("qcncodecs4.dll") -                    self.path("qjpcodecs4.dll") -                    self.path("qkrcodecs4.dll") -                    self.path("qtwcodecs4.dll") -                    self.end_prefix() -                  self.end_prefix()          # pull in the crash logger and updater from other projects @@ -631,7 +582,7 @@ class Windows_i686_Manifest(ViewerManifest):          while (not installer_created) and (nsis_attempts > 0):              try:                  nsis_attempts-=1; -                self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile)) +                self.run_command('"' + NSIS_path + '" ' + self.dst_path_of(tempfile))                  installer_created=True # if no exception was raised, the codesign worked              except ManifestError, err:                  if nsis_attempts: @@ -668,12 +619,16 @@ class Darwin_i386_Manifest(ViewerManifest):          # copy over the build result (this is a no-op if run within the xcode script)          self.path(self.args['configuration'] + "/Second Life.app", dst="") +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") +          if self.prefix(src="", dst="Contents"):  # everything goes in Contents              self.path("Info.plist", dst="Info.plist")              # copy additional libs in <bundle>/Contents/MacOS/ -            self.path("../packages/lib/release/libndofdev.dylib", dst="Resources/libndofdev.dylib") -            self.path("../packages/lib/release/libhunspell-1.3.0.dylib", dst="Resources/libhunspell-1.3.0.dylib") +            self.path(os.path.join(relpkgdir, "libndofdev.dylib"), dst="Resources/libndofdev.dylib") +            self.path(os.path.join(relpkgdir, "libhunspell-1.3.0.dylib"), dst="Resources/libhunspell-1.3.0.dylib")              if self.prefix(dst="MacOS"):                  self.path2basename("../viewer_components/updater/scripts/darwin", "*.py") @@ -733,7 +688,6 @@ class Darwin_i386_Manifest(ViewerManifest):                      print "Skipping %s" % dst                      return [] -                libdir = "../packages/lib/release"                  # dylibs is a list of all the .dylib files we expect to need                  # in our bundled sub-apps. For each of these we'll create a                  # symlink from sub-app/Contents/Resources to the real .dylib. @@ -743,7 +697,7 @@ class Darwin_i386_Manifest(ViewerManifest):                                                                 "llcommon",                                                                 self.args['configuration'],                                                                 libfile), -                                                               os.path.join(libdir, libfile)), +                                                               os.path.join(relpkgdir, libfile)),                                         dst=libfile)                  for libfile in ( @@ -754,7 +708,7 @@ class Darwin_i386_Manifest(ViewerManifest):                                  "libexception_handler.dylib",                                  "libGLOD.dylib",                                  ): -                    dylibs += path_optional(os.path.join(libdir, libfile), libfile) +                    dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile)                  # SLVoice and vivox lols, no symlinks needed                  for libfile in ( @@ -766,38 +720,41 @@ class Darwin_i386_Manifest(ViewerManifest):                                  'ca-bundle.crt',                                  'SLVoice',                                  ): -                     self.path2basename(libdir, libfile) +                     self.path2basename(relpkgdir, libfile)                  # dylibs that vary based on configuration                  if self.args['configuration'].lower() == 'debug':                      for libfile in (                                  "libfmodexL.dylib",                                  ): -                        dylibs += path_optional(os.path.join("../packages/lib/debug", -                                                             libfile), libfile) +                        dylibs += path_optional(os.path.join(debpkgdir, libfile), libfile)                  else:                      for libfile in (                                  "libfmodex.dylib",                                  ): -                        dylibs += path_optional(os.path.join("../packages/lib/release", -                                                             libfile), libfile) +                        dylibs += path_optional(os.path.join(relpkgdir, libfile), libfile)                  # our apps -                for app_bld_dir, app in (("mac_crash_logger", "mac-crash-logger.app"), +                for app_bld_dir, app in ((os.path.join(os.pardir, +                                                       "mac_crash_logger", +                                                       self.args['configuration']), +                                          "mac-crash-logger.app"),                                           # plugin launcher -                                         (os.path.join("llplugin", "slplugin"), "SLPlugin.app"), +                                         (pkgdir, "SLPlugin.app"),                                           ): -                    self.path2basename(os.path.join(os.pardir, -                                                    app_bld_dir, self.args['configuration']), -                                       app) +                    self.path2basename(app_bld_dir, app)                      # our apps dependencies on shared libs                      # for each app, for each dylib we collected in dylibs,                      # create a symlink to the real copy of the dylib.                      resource_path = self.dst_path_of(os.path.join(app, "Contents", "Resources"))                      for libfile in dylibs: -                        symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile), -                                 os.path.join(resource_path, libfile)) +                        src = os.path.join(os.pardir, os.pardir, os.pardir, libfile) +                        dst = os.path.join(resource_path, libfile) +                        try: +                            symlinkf(src, dst) +                        except OSError as err: +                            print "Can't symlink %s -> %s: %s" % (src, dst, err)                  # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs.                  if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"):                      for libfile in ('libQtCore.4.dylib', @@ -814,26 +771,24 @@ class Darwin_i386_Manifest(ViewerManifest):                                      'libQtWebKit.4.7.1.dylib',                                      'libQtXml.4.dylib',                                      'libQtXml.4.7.1.dylib'): -                        self.path2basename("../packages/lib/release", libfile) +                        self.path2basename(relpkgdir, libfile)                      self.end_prefix("SLPlugin.app/Contents/Resources")                  # Qt4 codecs go to llplugin.  Not certain why but this is the first                  # location probed according to dtruss so we'll go with that. -                if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"): +                if self.prefix(src=os.path.join(pkgdir, "llplugin/codecs/"), dst="llplugin/codecs"):                      self.path("libq*.dylib")                      self.end_prefix("llplugin/codecs")                  # Similarly for imageformats. -                if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"): +                if self.prefix(src=os.path.join(pkgdir, "llplugin/imageformats/"), dst="llplugin/imageformats"):                      self.path("libq*.dylib")                      self.end_prefix("llplugin/imageformats")                  # SLPlugin plugins proper -                if self.prefix(src="", dst="llplugin"): -                    self.path2basename("../media_plugins/quicktime/" + self.args['configuration'], -                                       "media_plugin_quicktime.dylib") -                    self.path2basename("../media_plugins/webkit/" + self.args['configuration'], -                                       "media_plugin_webkit.dylib") +                if self.prefix(src=os.path.join(pkgdir, "llplugin"), dst="llplugin"): +                    self.path("media_plugin_quicktime.dylib") +                    self.path("media_plugin_webkit.dylib")                      self.end_prefix("llplugin")                  self.end_prefix("Resources") @@ -858,48 +813,6 @@ class Darwin_i386_Manifest(ViewerManifest):      def package_finish(self):          global CHANNEL_VENDOR_BASE -        # Sign the app if requested. -        if 'signature' in self.args: -            identity = self.args['signature'] -            if identity == '': -                identity = 'Developer ID Application' - -            # Look for an environment variable set via build.sh when running in Team City. -            try: -                build_secrets_checkout = os.environ['build_secrets_checkout'] -            except KeyError: -                pass -            else: -                # variable found so use it to unlock keyvchain followed by codesign -                home_path = os.environ['HOME'] -                keychain_pwd_path = os.path.join(build_secrets_checkout,'code-signing-osx','password.txt') -                keychain_pwd = open(keychain_pwd_path).read().rstrip() - -                self.run_command('security unlock-keychain -p "%s" "%s/Library/Keychains/viewer.keychain"' % ( keychain_pwd, home_path ) ) -                signed=False -                sign_attempts=3 -                sign_retry_wait=15 -                while (not signed) and (sign_attempts > 0): -                    try: -                        sign_attempts-=1; -                        self.run_command( -                           'codesign --verbose --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % { -                               'home_path' : home_path, -                               'identity': identity, -                               'bundle': self.get_dst_prefix() -                               }) -                        signed=True # if no exception was raised, the codesign worked -                    except ManifestError, err: -                        if sign_attempts: -                            print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" % sign_retry_wait -                            time.sleep(sign_retry_wait) -                            sign_retry_wait*=2 -                        else: -                            print >> sys.stderr, "Maximum codesign attempts exceeded; giving up" -                            raise - -        imagename="SecondLife_" + '_'.join(self.args['version']) -          # MBW -- If the mounted volume name changes, it breaks the .DS_Store's background image and icon positioning.          #  If we really need differently named volumes, we'll need to create multiple DS_Store file images, or use some other trick. @@ -981,6 +894,56 @@ class Darwin_i386_Manifest(ViewerManifest):              # Set the disk image root's custom icon bit              self.run_command('SetFile -a C %r' % volpath) + +            # Sign the app if requested;  +            # do this in the copy that's in the .dmg so that the extended attributes used by  +            # the signature are preserved; moving the files using python will leave them behind +            # and invalidate the signatures. +            if 'signature' in self.args: +                app_in_dmg=os.path.join(volpath,self.app_name()+".app") +                print "Attempting to sign '%s'" % app_in_dmg +                identity = self.args['signature'] +                if identity == '': +                    identity = 'Developer ID Application' + +                # Look for an environment variable set via build.sh when running in Team City. +                try: +                    build_secrets_checkout = os.environ['build_secrets_checkout'] +                except KeyError: +                    pass +                else: +                    # variable found so use it to unlock keychain followed by codesign +                    home_path = os.environ['HOME'] +                    keychain_pwd_path = os.path.join(build_secrets_checkout,'code-signing-osx','password.txt') +                    keychain_pwd = open(keychain_pwd_path).read().rstrip() + +                    self.run_command('security unlock-keychain -p "%s" "%s/Library/Keychains/viewer.keychain"' % ( keychain_pwd, home_path ) ) +                    signed=False +                    sign_attempts=3 +                    sign_retry_wait=15 +                    while (not signed) and (sign_attempts > 0): +                        try: +                            sign_attempts-=1; +                            self.run_command( +                               'codesign --verbose --deep --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % { +                                   'home_path' : home_path, +                                   'identity': identity, +                                   'bundle': app_in_dmg +                                   }) +                            signed=True # if no exception was raised, the codesign worked +                        except ManifestError, err: +                            if sign_attempts: +                                print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" % sign_retry_wait +                                time.sleep(sign_retry_wait) +                                sign_retry_wait*=2 +                            else: +                                print >> sys.stderr, "Maximum codesign attempts exceeded; giving up" +                                raise +                    self.run_command('spctl -a -texec -vv %(bundle)r' % { 'bundle': app_in_dmg }) + +            imagename="SecondLife_" + '_'.join(self.args['version']) + +          finally:              # Unmount the image even if exceptions from any of the above               self.run_command('hdiutil detach -force %r' % devfile) @@ -995,6 +958,11 @@ class Darwin_i386_Manifest(ViewerManifest):  class LinuxManifest(ViewerManifest):      def construct(self):          super(LinuxManifest, self).construct() + +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") +          self.path("licenses-linux.txt","licenses.txt")          if self.prefix("linux_tools", dst=""):              self.path("client-readme.txt","README-linux.txt") @@ -1013,7 +981,7 @@ class LinuxManifest(ViewerManifest):          if self.prefix(src="", dst="bin"):              self.path("secondlife-bin","do-not-directly-run-secondlife-bin")              self.path("../linux_crash_logger/linux-crash-logger","linux-crash-logger.bin") -            self.path2basename("../llplugin/slplugin", "SLPlugin") +            self.path2basename(pkgdir, "SLPlugin")              self.path2basename("../viewer_components/updater/scripts/linux", "update_install")              self.end_prefix("bin") @@ -1033,9 +1001,9 @@ class LinuxManifest(ViewerManifest):              self.end_prefix(icon_path)          # plugins -        if self.prefix(src="", dst="bin/llplugin"): -            self.path2basename("../media_plugins/webkit", "libmedia_plugin_webkit.so") -            self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so") +        if self.prefix(src=os.path.join(pkgdir, "llplugin"), dst="bin/llplugin"): +            self.path("libmedia_plugin_webkit.so") +            self.path("libmedia_plugin_gstreamer.so")              self.end_prefix("bin/llplugin")          # llcommon @@ -1097,7 +1065,11 @@ class Linux_i686_Manifest(LinuxManifest):      def construct(self):          super(Linux_i686_Manifest, self).construct() -        if self.prefix("../packages/lib/release", dst="lib"): +        pkgdir = os.path.join(self.args['build'], os.pardir, 'packages') +        relpkgdir = os.path.join(pkgdir, "lib", "release") +        debpkgdir = os.path.join(pkgdir, "lib", "debug") + +        if self.prefix(relpkgdir, dst="lib"):              self.path("libapr-1.so")              self.path("libapr-1.so.0")              self.path("libapr-1.so.0.4.5") @@ -1117,8 +1089,8 @@ class Linux_i686_Manifest(LinuxManifest):              self.path("libfusion-1.4.so.5")              self.path("libdirect-1.4.so.5*")              self.path("libhunspell-1.3.so*") -            self.path("libalut.so") -            self.path("libopenal.so", "libopenal.so.1") +            self.path("libalut.so*") +            self.path("libopenal.so*")              self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname              # KLUDGE: As of 2012-04-11, the 'fontconfig' package installs              # libfontconfig.so.1.4.4, along with symlinks libfontconfig.so.1 @@ -1160,10 +1132,10 @@ class Linux_i686_Manifest(LinuxManifest):              self.end_prefix("lib")              # Vivox runtimes -            if self.prefix(src="../packages/lib/release", dst="bin"): +            if self.prefix(src=relpkgdir, dst="bin"):                  self.path("SLVoice")                  self.end_prefix() -            if self.prefix(src="../packages/lib/release", dst="lib"): +            if self.prefix(src=relpkgdir, dst="lib"):                  self.path("libortp.so")                  self.path("libsndfile.so.1")                  #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib @@ -1172,7 +1144,7 @@ class Linux_i686_Manifest(LinuxManifest):                  self.end_prefix("lib")              # plugin runtime -            if self.prefix(src="../packages/lib/release", dst="lib"): +            if self.prefix(src=os.path.join(pkgdir, "lib"), dst="lib"):                  self.path("libQtCore.so*")                  self.path("libQtGui.so*")                  self.path("libQtNetwork.so*") @@ -1183,7 +1155,8 @@ class Linux_i686_Manifest(LinuxManifest):                  self.end_prefix("lib")              # For WebKit/Qt plugin runtimes (image format plugins) -            if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"): +            if self.prefix(src=os.path.join(pkgdir, "llplugin", "imageformats"), +                           dst="bin/llplugin/imageformats"):                  self.path("libqgif.so")                  self.path("libqico.so")                  self.path("libqjpeg.so") @@ -1193,7 +1166,8 @@ class Linux_i686_Manifest(LinuxManifest):                  self.end_prefix("bin/llplugin/imageformats")              # For WebKit/Qt plugin runtimes (codec/character encoding plugins) -            if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"): +            if self.prefix(src=os.path.join(pkgdir, "llplugin", "codecs"), +                           dst="bin/llplugin/codecs"):                  self.path("libqcncodecs.so")                  self.path("libqjpcodecs.so")                  self.path("libqkrcodecs.so") | 
