From 79965fade1129d44b10da852840f8185a9fb8e8a Mon Sep 17 00:00:00 2001 From: Lirusaito Date: Thu, 25 Feb 2016 21:13:13 -0500 Subject: [PATCH] Alchemerge Applies the following alchemy patches: 28fe46209ea5: Don't spam setPaused in fmod studio audio stream code eb12ff41434a: Fix single click to walk triggering on huds 31955a7826b9: Fix double click to walk being triggered by huds and touchable objects Fix double click to walk triggering while sitting and flying Fix double click to walk behavior being inconsistent with single click to walk Fix double click teleport being affected by transparent objects Properly fixes MAINT-957 Compile stuff updates: Adds VCRedist to package, should fix failure to launch reported by Nomade Zhao. Updates package_description to better suit Singularity Turns secondlife-bin in places to singularity-bin Updates the following libraries: Curl (7.47.0), gperftools (0.0.2), openssl (1.0.2f), SLVoice on Linux64, --- autobuild.xml | 114 +++++++++----- indra/llaudio/llstreamingaudio_fmodstudio.cpp | 45 +++--- indra/llwindow/lldxhardware.cpp | 24 ++- indra/newview/CMakeLists.txt | 14 +- .../installers/windows/installer_template.nsi | 12 +- indra/newview/lltoolpie.cpp | 143 ++++++++++++------ indra/newview/viewer_manifest.py | 67 +++++++- 7 files changed, 286 insertions(+), 133 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 96303e7b6..2c40fd105 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -438,11 +438,11 @@ archive hash - 6e443a01d85367e1f058fbfb378cf80e + edeb99f22363e6c7dde1ade2d2810246 hash_algorithm md5 url - http://depot.alchemyviewer.org/pub/windows/lib-vc14/curl-7.46.0-windows-201601151153.tar.bz2 + http://depot.alchemyviewer.org/pub/windows/lib-vc14/curl-7.47.0-windows-201601291530.tar.bz2 name windows @@ -452,18 +452,18 @@ archive hash - 9aca8339f269df5f42484f4bfafbf430 + c822bf688eaaa9524d821c8a9d72e1d7 hash_algorithm md5 url - http://depot.alchemyviewer.org/pub/windows64/lib-vc14/curl-7.46.0-windows64-201512122022.tar.bz2 + http://depot.alchemyviewer.org/pub/windows64/lib-vc14/curl-7.47.0-windows64-201601291527.tar.bz2 name windows64 version - 7.46.0 + 7.47.0 dbus-glib @@ -1137,18 +1137,6 @@ gperftools platforms - darwin - - archive - - hash - 0137e450bf24cff7e78634bb9a1c85e4 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/Darwin/installer/gperftools-2.0.297263-darwin-297263.tar.bz2 - - name - darwin - linux archive @@ -1166,9 +1154,21 @@ archive hash - 2946f9bbf227dee8881af43856ebb3a1 + e81d9e4526ceac49f1532d6518085985 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/CYGWIN/installer/gperftools-2.0.297263-windows-297263.tar.bz2 + https://bitbucket.org/alchemyviewer/publiclibs/downloads/gperftools-2.1-windows-20140120.tar.bz2 + + name + windows + + windows64 + + archive + + hash + da6ec7472ed69fe3231eb95432a789d9 + url + https://bitbucket.org/alchemyviewer/publiclibs/downloads/gperftools-2.2-windows64-20140605.tar.bz2 name windows @@ -1249,7 +1249,7 @@ version - 0.0 + 0.0.2 jpeglib @@ -2232,11 +2232,11 @@ archive hash - 213e62795373d12621282636fc760f20 + 835a1e2a994acd82a51d99e382de1549 hash_algorithm md5 url - http://depot.alchemyviewer.org/pub/windows/lib-vc14/openssl-1.0.2e-windows-201601151130.tar.bz2 + http://depot.alchemyviewer.org/pub/windows/lib-vc14/openssl-1.0.2f-windows-201601291508.tar.bz2 name windows @@ -2246,18 +2246,18 @@ archive hash - 44f5553704a5fc74f23342ac1216175b + 5aae87070da31ed959585ca641ba3ad9 hash_algorithm md5 url - http://depot.alchemyviewer.org/pub/windows64/lib-vc14/openssl-1.0.2e-windows64-201512121953.tar.bz2 + http://depot.alchemyviewer.org/pub/windows64/lib-vc14/openssl-1.0.2f-windows64-201601291450.tar.bz2 name windows64 version - 1.0.2e + 1.0.2f quicktime @@ -2324,9 +2324,9 @@ archive hash - 48ed7ddcf93fa3c751d677f5eb5f9367 + 9f60e56aba35ec90b3045e9d049ac284 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/Linux/installer/slvoice-3.2.0002.10426.298329-linux-298329.tar.bz2 + http://depot.alchemyviewer.org/pub/linux/lib/slvoice-4.5.0009.17865-linux-20141214.tar.bz2 name linux @@ -2493,6 +2493,52 @@ version 0.8.4 + vcredist + + copyright + Copyright (c) Microsoft Corporation. All rights reserved. + description + The Visual Studio C and C++ runtime redistributable + license + Proprietary + license_file + LICENSES/vcredist.txt + name + vcredist + platforms + + windows + + archive + + hash + 960953da9ab7c335a0f4f97e9bf8341c + hash_algorithm + md5 + url + http://depot.alchemyviewer.org/pub/windows/lib-vc14/vcredist-14.0.23506.0-windows-201601191536.tar.bz2 + + name + windows + + windows64 + + archive + + hash + 918588215463f36836eeefd9d3891868 + hash_algorithm + md5 + url + http://depot.alchemyviewer.org/pub/windows64/lib-vc14/vcredist-14.0.23506.0-windows64-201601191536.tar.bz2 + + name + windows64 + + + version + 14.0.23506.0 + xmlrpc-epi copyright @@ -2667,15 +2713,15 @@ package_description copyright - Copyright (c) 2014, Linden Research, Inc. + Copyright (c) 2010-2016, Singularity Viewer Team description - Second Life Viewer + Singularity Viewer license LGPL license_file docs/LICENSE-source.txt name - Second Life Viewer + Singularity Viewer platforms common @@ -2940,7 +2986,7 @@ --config RelWithDebInfo --startup - secondlife-bin + singularity-bin options @@ -2987,7 +3033,7 @@ --config Release --startup - secondlife-bin + singularity-bin options @@ -3042,7 +3088,7 @@ --config RelWithDebInfo --startup - secondlife-bin + singularity-bin options @@ -3090,7 +3136,7 @@ --config Release --startup - secondlife-bin + singularity-bin options diff --git a/indra/llaudio/llstreamingaudio_fmodstudio.cpp b/indra/llaudio/llstreamingaudio_fmodstudio.cpp index 047b6e5f1..470eb8828 100644 --- a/indra/llaudio/llstreamingaudio_fmodstudio.cpp +++ b/indra/llaudio/llstreamingaudio_fmodstudio.cpp @@ -31,6 +31,7 @@ */ #include "linden_common.h" +#include "llstreamingaudio_fmodstudio.h" #include "llmath.h" #include "llthread.h" @@ -38,8 +39,6 @@ #include "fmod.hpp" #include "fmod_errors.h" -#include "llstreamingaudio_fmodstudio.h" - inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string) { if (result == FMOD_OK) @@ -61,9 +60,9 @@ public: FMOD_RESULT getOpenState(FMOD_OPENSTATE& openstate, unsigned int* percentbuffered = NULL, bool* starving = NULL, bool* diskbusy = NULL); protected: FMOD::System* mSystem; + FMOD::ChannelGroup* mChannelGroup; FMOD::Channel* mStreamChannel; FMOD::Sound* mInternetStream; - FMOD::ChannelGroup* mChannelGroup; bool mReady; std::string mInternetStreamURL; @@ -119,11 +118,11 @@ FMOD_RESULT F_CALLBACK waveDataCallback(FMOD_DSP_STATE *dsp_state, float *inbuff LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) : mSystem(system), mCurrentInternetStreamp(NULL), + mStreamDSP(NULL), + mStreamGroup(NULL), mFMODInternetStreamChannelp(NULL), mGain(1.0f), - mMetaData(NULL), - mStreamGroup(NULL), - mStreamDSP(NULL) + mMetaData(NULL) { FMOD_RESULT result; @@ -142,10 +141,9 @@ LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) : // Leave the net buffer properties at the default. //FSOUND_Stream_Net_SetBufferProperties(20000, 40, 80); - Check_FMOD_Error(mSystem->createChannelGroup("stream", &mStreamGroup), "FMOD::System::createChannelGroup"); + Check_FMOD_Error(system->createChannelGroup("stream", &mStreamGroup), "FMOD::System::createChannelGroup"); - FMOD_DSP_DESCRIPTION dspdesc; - memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION)); //Zero out everything + FMOD_DSP_DESCRIPTION dspdesc = {0}; dspdesc.pluginsdkversion = FMOD_PLUGIN_SDK_VERSION; strncpy(dspdesc.name, "Waveform", sizeof(dspdesc.name)); dspdesc.numoutputbuffers = 1; @@ -154,7 +152,6 @@ LLStreamingAudio_FMODSTUDIO::LLStreamingAudio_FMODSTUDIO(FMOD::System *system) : Check_FMOD_Error(system->createDSP(&dspdesc, &mStreamDSP), "FMOD::System::createDSP"); } - LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO() { stop(); @@ -168,7 +165,6 @@ LLStreamingAudio_FMODSTUDIO::~LLStreamingAudio_FMODSTUDIO() cleanupWaveData(); } - void LLStreamingAudio_FMODSTUDIO::start(const std::string& url) { //if (!mInited) @@ -209,7 +205,7 @@ enum utf_endian_type_t UTF16 }; -std::string utf16input_to_utf8(char* input, U32 len, utf_endian_type_t type) +std::string utf16input_to_utf8(unsigned char* input, U32 len, utf_endian_type_t type) { if (type == UTF16) { @@ -226,7 +222,7 @@ std::string utf16input_to_utf8(char* input, U32 len, utf_endian_type_t type) } } } - llutf16string out_16((utf16strtype*)input, len / 2); + llutf16string out_16((llutf16string::value_type*)input, len / 2); if (len % 2) { out_16.push_back((input)[len - 1] << 8); @@ -254,7 +250,7 @@ void LLStreamingAudio_FMODSTUDIO::update() { llassert_always(mCurrentInternetStreamp == NULL); LL_INFOS() << "Starting internet stream: " << mPendingURL << LL_ENDL; - mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem,mStreamGroup, mPendingURL); + mCurrentInternetStreamp = new LLAudioStreamManagerFMODSTUDIO(mSystem, mStreamGroup, mPendingURL); mURL = mPendingURL; mMetaData = new LLSD; mPendingURL.clear(); @@ -315,6 +311,7 @@ void LLStreamingAudio_FMODSTUDIO::update() { if(sound->getTag(NULL, i, &tag)!=FMOD_OK) continue; + std::string name = tag.name; switch(tag.type) //Crappy tag translate table. { @@ -373,7 +370,7 @@ void LLStreamingAudio_FMODSTUDIO::update() break; case(FMOD_TAGDATATYPE_STRING_UTF16): { - std::string out = utf16input_to_utf8((char*)tag.data, tag.datalen, UTF16); + std::string out = utf16input_to_utf8((unsigned char*)tag.data, tag.datalen, UTF16); if (out.length() && out[out.size() - 1] == 0) out.erase(out.size() - 1); (*mMetaData)[name] = out; @@ -382,7 +379,7 @@ void LLStreamingAudio_FMODSTUDIO::update() break; case(FMOD_TAGDATATYPE_STRING_UTF16BE): { - std::string out = utf16input_to_utf8((char*)tag.data, tag.datalen, UTF16BE); + std::string out = utf16input_to_utf8((unsigned char*)tag.data, tag.datalen, UTF16BE); if (out.length() && out[out.size() - 1] == 0) out.erase(out.size() - 1); (*mMetaData)[name] = out; @@ -393,6 +390,7 @@ void LLStreamingAudio_FMODSTUDIO::update() } } } + static bool was_starved = false; if(starving) { bool paused = false; @@ -403,9 +401,11 @@ void LLStreamingAudio_FMODSTUDIO::update() LL_INFOS() << " (progress="<setPaused(true), "FMOD::Channel::setPaused"); } + was_starved = true; } - else if(progress > 80) + else if(progress > 80 && was_starved) { + was_starved = false; Check_FMOD_Error(mFMODInternetStreamChannelp->setPaused(false), "FMOD::Channel::setPaused"); } } @@ -446,7 +446,6 @@ void LLStreamingAudio_FMODSTUDIO::stop() mDeadStreams.push_back(mCurrentInternetStreamp); } mCurrentInternetStreamp = NULL; - //mURL.clear(); } } @@ -514,7 +513,8 @@ void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol) } } -/*virtual*/ bool LLStreamingAudio_FMODSTUDIO::getWaveData(float* arr, S32 count, S32 stride/*=1*/) +/* virtual */ +bool LLStreamingAudio_FMODSTUDIO::getWaveData(float* arr, S32 count, S32 stride/*=1*/) { if (count > (WAVE_BUFFER_SIZE / 2)) LL_ERRS("AudioImpl") << "Count=" << count << " exceeds WAVE_BUFFER_SIZE/2=" << WAVE_BUFFER_SIZE << LL_ENDL; @@ -547,9 +547,9 @@ void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol) LLAudioStreamManagerFMODSTUDIO::LLAudioStreamManagerFMODSTUDIO(FMOD::System *system, FMOD::ChannelGroup *group, const std::string& url) : mSystem(system), + mChannelGroup(group), mStreamChannel(NULL), mInternetStream(NULL), - mChannelGroup(group), mReady(false) { mInternetStreamURL = url; @@ -632,8 +632,7 @@ FMOD_RESULT LLAudioStreamManagerFMODSTUDIO::getOpenState(FMOD_OPENSTATE& state, void LLStreamingAudio_FMODSTUDIO::setBufferSizes(U32 streambuffertime, U32 decodebuffertime) { Check_FMOD_Error(mSystem->setStreamBufferSize(streambuffertime / 1000 * 128 * 128, FMOD_TIMEUNIT_RAWBYTES), "FMOD::System::setStreamBufferSize"); - FMOD_ADVANCEDSETTINGS settings; - memset(&settings,0,sizeof(settings)); + FMOD_ADVANCEDSETTINGS settings = {0}; settings.cbSize=sizeof(settings); settings.defaultDecodeBufferSize = decodebuffertime;//ms Check_FMOD_Error(mSystem->setAdvancedSettings(&settings), "FMOD::System::setAdvancedSettings"); @@ -672,4 +671,4 @@ void LLStreamingAudio_FMODSTUDIO::cleanupWaveData() if(mStreamDSP) Check_FMOD_Error(mStreamDSP->release(), "FMOD::DSP::release"); mStreamDSP = NULL; -} \ No newline at end of file +} diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp index 40d0a2212..e0ec7c565 100644 --- a/indra/llwindow/lldxhardware.cpp +++ b/indra/llwindow/lldxhardware.cpp @@ -183,11 +183,11 @@ HRESULT GetVideoMemoryViaWMI( WCHAR* strInputDeviceID, DWORD* pdwAdapterRam ) SAFE_RELEASE( pVideoControllers[iController] ); } } - SAFE_RELEASE(pEnumVideoControllers); } if( pClassName ) SysFreeString( pClassName ); + SAFE_RELEASE( pEnumVideoControllers ); } if( pNamespace ) @@ -206,7 +206,7 @@ HRESULT GetVideoMemoryViaWMI( WCHAR* strInputDeviceID, DWORD* pdwAdapterRam ) return E_FAIL; } -void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPropValue, int outputSize) +void get_wstring(IDxDiagContainer* containerp, const WCHAR* wszPropName, WCHAR* wszPropValue, int outputSize) { HRESULT hr; VARIANT var; @@ -219,10 +219,10 @@ void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPro switch( var.vt ) { case VT_UI4: - swprintf( wszPropValue, L"%d", var.ulVal ); /* Flawfinder: ignore */ + swprintf(wszPropValue, outputSize, L"%d", var.ulVal); /* Flawfinder: ignore */ break; case VT_I4: - swprintf( wszPropValue, L"%d", var.lVal ); /* Flawfinder: ignore */ + swprintf(wszPropValue, outputSize, L"%d", var.lVal); /* Flawfinder: ignore */ break; case VT_BOOL: wcscpy( wszPropValue, (var.boolVal) ? L"true" : L"false" ); /* Flawfinder: ignore */ @@ -237,7 +237,7 @@ void get_wstring(IDxDiagContainer* containerp, WCHAR* wszPropName, WCHAR* wszPro VariantClear( &var ); } -std::string get_string(IDxDiagContainer *containerp, WCHAR *wszPropName) +std::string get_string(IDxDiagContainer *containerp, const WCHAR *wszPropName) { WCHAR wszPropValue[256]; get_wstring(containerp, wszPropName, wszPropValue, 256); @@ -452,9 +452,9 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) hr = CoInitialize(NULL); if (FAILED(hr)) { - LL_WARNS("AppInit") << "COM library initialization failed!" << LL_ENDL; - gWriteDebug("COM library initialization failed!\n"); - return FALSE; + LL_WARNS() << "COM initialization failure!" << LL_ENDL; + gWriteDebug("COM initialization failure!\n"); + return ok; } IDxDiagProvider *dx_diag_providerp = NULL; @@ -507,8 +507,6 @@ BOOL LLDXHardware::getInfo(BOOL vram_only) goto LCleanup; } - HRESULT hr; - // Get display driver information LL_DEBUGS("AppInit") << "dx_diag_rootp->GetChildContainer" << LL_ENDL; hr = dx_diag_rootp->GetChildContainer(L"DxDiag_DisplayDevices", &devices_containerp); @@ -718,8 +716,8 @@ LLSD LLDXHardware::getDisplayInfo() hr = CoInitialize(NULL); if (FAILED(hr)) { - LL_WARNS("AppInit") << "COM library initialization failed!" << LL_ENDL; - gWriteDebug("COM library initialization failed!\n"); + LL_WARNS() << "COM initialization failure!" << LL_ENDL; + gWriteDebug("COM initialization failure!\n"); return ret; } @@ -772,8 +770,6 @@ LLSD LLDXHardware::getDisplayInfo() goto LCleanup; } - HRESULT hr; - // Get display driver information LL_INFOS() << "dx_diag_rootp->GetChildContainer" << LL_ENDL; hr = dx_diag_rootp->GetChildContainer(L"DxDiag_DisplayDevices", &devices_containerp); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e34bb1097..be6b4f126 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -42,6 +42,10 @@ include(ViewerMiscLibs) include(WinManifest) include(ZLIB) +if (MSVC) + use_prebuilt_binary(vcredist) +endif (MSVC) + include_directories( ${STATEMACHINE_INCLUDE_DIRS} ${DBUSGLIB_INCLUDE_DIRS} @@ -64,7 +68,6 @@ include_directories( ${LLWINDOW_INCLUDE_DIRS} ${LLXML_INCLUDE_DIRS} ${HUNSPELL_INCLUDE_DIR} - ${LLAPPEARANCE_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR} ) @@ -593,8 +596,7 @@ set(viewer_SOURCE_FILES wlfPanel_AdvSettings.cpp ) -# This gets renamed in the packaging step -set(VIEWER_BINARY_NAME "secondlife-bin" CACHE STRING +set(VIEWER_BINARY_NAME "singularity-bin" CACHE STRING "The name of the viewer executable to create.") set(viewer_HEADER_FILES @@ -1628,7 +1630,6 @@ target_link_libraries(${VIEWER_BINARY_NAME} ${LLVFS_LIBRARIES} ${LLWINDOW_LIBRARIES} ${LLXML_LIBRARIES} -# ${LSCRIPT_LIBRARIES} ${LLMATH_LIBRARIES} ${LLCOMMON_LIBRARIES} ${NDOF_LIBRARY} @@ -1671,7 +1672,7 @@ if (LINUX) add_dependencies(${VIEWER_BINARY_NAME} generate_viewer_version) add_custom_command( - OUTPUT ${product}.tar.bz2 + OUTPUT ${product}.tar.xz COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py @@ -1733,7 +1734,7 @@ if (DARWIN) set(MACOSX_BUNDLE_BUNDLE_NAME "${VIEWER_BRANDING_NAME}") set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}") set(MACOSX_BUNDLE_BUNDLE_VERSION "${${ROOT_PROJECT_NAME}_VERSION}") - set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2013 Siana Gearz") + set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2016 Siana Gearz") set_target_properties( ${VIEWER_BINARY_NAME} @@ -1804,7 +1805,6 @@ if (INSTALL) include(${CMAKE_CURRENT_SOURCE_DIR}/ViewerInstall.cmake) endif (INSTALL) - if (PACKAGE) set(SYMBOL_NAME ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${VIEWER_BRANDING_NAME_CAMELCASE}-${${ROOT_PROJECT_NAME}_VERSION}-symbols) set(SYMBOL_SEARCH_DIRS "") diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 74ee4a7c3..ed160f8a1 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -423,11 +423,11 @@ Section "Viewer" ;This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py %%INSTALL_FILES%% -;!ifdef WIN64_BIN_BUILD -; ExecWait '"$INSTDIR\redist\vc_redist.x64.exe" /passive' -;!else -; ExecWait '"$INSTDIR\redist\vc_redist.x86.exe" /passive' -;!endif +!ifdef WIN64_BIN_BUILD + ExecWait '"$INSTDIR\redist\vc_redist.x64.exe" /passive /norestart' +!else + ExecWait '"$INSTDIR\redist\vc_redist.x86.exe" /passive /norestart' +!endif ;Pass the installer's language to the client to use as a default StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)" @@ -482,7 +482,7 @@ Section "Viewer" WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "NoRepair" 1 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "Publisher" "${VENDORSTR}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLInfoAbout" "http://www.singularityviewer.org" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLUpdateInfo" "http://www.singularityviewer.org" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "URLUpdateInfo" "http://www.singularityviewer.org/downloads" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" "$\"$INSTDIR\uninst.exe$\"" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "QuietUninstallString" "$\"$INSTDIR\uninst.exe$\" /S" ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 5f2d4b403..16b32d2e4 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -108,7 +108,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask) mMouseDownX = x; mMouseDownY = y; - //left mouse down always picks transparent + //left mouse down always picks transparent (but see handleMouseUp) mPick = gViewerWindow->pickImmediate(x, y, TRUE); mPick.mKeyMask = mask; @@ -605,6 +605,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) if (handleMediaHover(mHoverPick)) { // cursor set by media object + LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL; } else if (!mMouseOutsideSlop && mMouseButtonDown @@ -640,6 +641,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) { ECursorType cursor = cursorFromObject(click_action_object); gViewerWindow->setCursor(cursor); + LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL; } // [RLVa:KB] - Checked: 2010-03-11 (RLVa-1.2.0e) | Added: RLVa-1.1.0l else if ( (object) && (rlv_handler_t::isEnabled()) && (!gRlvHandler.canTouch(object)) ) @@ -652,22 +654,23 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask) || (parent && !parent->isAvatar() && parent->flagUsePhysics())) { gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB); + LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL; } else if ( (object && object->flagHandleTouch()) || (parent && parent->flagHandleTouch())) { gViewerWindow->setCursor(UI_CURSOR_HAND); + LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL; } else { gViewerWindow->setCursor(UI_CURSOR_ARROW); + LL_DEBUGS("UserInput") << "hover handled by LLToolPie (inactive)" << LL_ENDL; } } if(!object) { - //gViewerWindow->setCursor(UI_CURSOR_ARROW); - // We need to clear media hover flag LLViewerMediaFocus::getInstance()->clearHover(); } @@ -693,29 +696,51 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) && gAgentAvatarp && !gAgentAvatarp->isSitting() && !mBlockClickToWalk // another behavior hasn't cancelled click to walk - && !mPick.mPosGlobal.isExactlyZero() // valid coordinates for pick - && (mPick.mPickType == LLPickInfo::PICK_LAND // we clicked on land - || mPick.mObjectID.notNull())) // or on an object + ) { - // handle special cases of steering picks - LLViewerObject* avatar_object = mPick.getObject(); + // We may be doing click to walk, but we don't want to use a target on + // a transparent object because the user thought they were clicking on + // whatever they were seeing through it, so recompute what was clicked on + // ignoring transparent objects + LLPickInfo savedPick = mPick; + mPick = gViewerWindow->pickImmediate(savedPick.mMousePt.mX, savedPick.mMousePt.mY, + FALSE /* ignore transparent *//*, + FALSE*/ /* ignore particles */); // Singu TODO: Particle picking - // get pointer to avatar - while (avatar_object && !avatar_object->isAvatar()) - { - avatar_object = (LLViewerObject*)avatar_object->getParent(); + LLViewerObject* objp = mPick.getObject(); + bool is_in_world = mPick.mObjectID.notNull() && objp && !objp->isHUDAttachment(); // We clicked on a non-hud object + bool is_land = mPick.mPickType == LLPickInfo::PICK_LAND; // or on land + bool pos_non_zero = !mPick.mPosGlobal.isExactlyZero(); // valid coordinates for pick + if (pos_non_zero && (is_land || is_in_world)) + { + // get pointer to avatar + while (objp && !objp->isAvatar()) + { + objp = (LLViewerObject*) objp->getParent(); + } + + if (objp && ((LLVOAvatar*) objp)->isSelf()) + { + const F64 SELF_CLICK_WALK_DISTANCE = 3.0; + // pretend we picked some point a bit in front of avatar + mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE; + } + gAgentCamera.setFocusOnAvatar(TRUE, TRUE); + walkToClickedLocation(); + //LLFirstUse::notMoving(false); + + return TRUE; } - - if (avatar_object && ((LLVOAvatar*)avatar_object)->isSelf()) - { - const F64 SELF_CLICK_WALK_DISTANCE = 3.0; - // pretend we picked some point a bit in front of avatar - mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE; - } - gAgentCamera.setFocusOnAvatar(TRUE, TRUE); - walkToClickedLocation(); - - return TRUE; + else + { + LL_DEBUGS("maint5901") << "walk target was " + << (mPick.mPosGlobal.isExactlyZero() ? "zero" : "not zero") + << ", pick type was " << (mPick.mPickType == LLPickInfo::PICK_LAND ? "land" : "not land") + << ", pick object was " << mPick.mObjectID + << LL_ENDL; + // we didn't click to walk, so restore the original target + mPick = savedPick; + } } gViewerWindow->setCursor(UI_CURSOR_ARROW); if (hasMouseCapture()) @@ -754,17 +779,22 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) return TRUE; } - if (gSavedSettings.getBOOL("DoubleClickAutoPilot")) - { - if ((mPick.mPickType == LLPickInfo::PICK_LAND && !mPick.mPosGlobal.isExactlyZero()) || - (mPick.mObjectID.notNull() && !mPick.mPosGlobal.isExactlyZero())) - { - walkToClickedLocation(); - return TRUE; - } - } - else if (gSavedSettings.getBOOL("DoubleClickTeleport")) + bool dbl_click_autoplt = gSavedSettings.getBOOL("DoubleClickAutoPilot"); + bool dbl_click_teleport = gSavedSettings.getBOOL("DoubleClickTeleport"); + + if (dbl_click_autoplt || dbl_click_teleport) { + // Save the original pick + LLPickInfo savedPick = mPick; + + // We may be doing double click to walk or a double click teleport, but + // we don't want to use a target on a transparent object because the user + // thought they were clicking on whatever they were seeing through it, so + // recompute what was clicked on ignoring transparent objects + mPick = gViewerWindow->pickImmediate(savedPick.mMousePt.mX, savedPick.mMousePt.mY, + FALSE /* ignore transparent *//*, + FALSE*/ /* ignore particles */); // Singu TODO: Particle picking + LLViewerObject* objp = mPick.getObject(); LLViewerObject* parentp = objp ? objp->getRootEdit() : NULL; @@ -772,15 +802,43 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) bool is_land = mPick.mPickType == LLPickInfo::PICK_LAND; bool pos_non_zero = !mPick.mPosGlobal.isExactlyZero(); bool has_touch_handler = (objp && objp->flagHandleTouch()) || (parentp && parentp->flagHandleTouch()); - bool has_click_action = final_click_action(objp); - - if (pos_non_zero && (is_land || (is_in_world && !has_touch_handler && !has_click_action))) + bool no_click_action = final_click_action(objp) == CLICK_ACTION_NONE; + if (pos_non_zero && (is_land || (is_in_world && !has_touch_handler && no_click_action))) { - LLVector3d pos = mPick.mPosGlobal; - pos.mdV[VZ] += gAgentAvatarp->getPelvisToFoot(); - gAgent.teleportViaLocationLookAt(pos); - return TRUE; + if (dbl_click_autoplt + && !gAgent.getFlying() // don't auto-navigate while flying until that works + && isAgentAvatarValid() + && !gAgentAvatarp->isSitting() + ) + { + // get pointer to avatar + while (objp && !objp->isAvatar()) + { + objp = (LLViewerObject*) objp->getParent(); + } + + if (objp && ((LLVOAvatar*) objp)->isSelf()) + { + const F64 SELF_CLICK_WALK_DISTANCE = 3.0; + // pretend we picked some point a bit in front of avatar + mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE; + } + gAgentCamera.setFocusOnAvatar(TRUE, TRUE); + walkToClickedLocation(); + //LLFirstUse::notMoving(false); + return TRUE; + } + else if (dbl_click_teleport) + { + LLVector3d pos = mPick.mPosGlobal; + pos.mdV[VZ] += gAgentAvatarp->getPelvisToFoot(); + gAgent.teleportViaLocationLookAt(pos); + return TRUE; + } } + + // restore the original pick for any other purpose + mPick = savedPick; } return FALSE; @@ -1271,12 +1329,10 @@ BOOL LLToolPie::handleRightClickPick() void LLToolPie::showVisualContextMenuEffect() { - // if (gSavedSettings.getBOOL("DisablePointAtAndBeam")) { return; } - // // VEFFECT: ShowPie LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE); @@ -1322,6 +1378,7 @@ bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_di void LLToolPie::startCameraSteering() { + //LLFirstUse::notMoving(false); mMouseOutsideSlop = true; mBlockClickToWalk = true; @@ -1429,7 +1486,7 @@ void LLToolPie::steerCameraWithMouse(S32 x, S32 y) { old_yaw_angle = F_PI_BY_TWO + asinf(pick_distance_from_rotation_center / camera_distance_from_rotation_center); - if (mouse_ray * rotation_frame.getLeftAxis() < 0.f) + if (old_mouse_ray * rotation_frame.getLeftAxis() < 0.f) { old_yaw_angle *= -1.f; } diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index cb5edef51..49cb05e7b 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -78,7 +78,7 @@ class ViewerManifest(LLManifest): # ... and the entire windlight directory self.path("windlight") - # ... and the hunspell dictionaries + # ... and the included spell checking dictionaries self.path("dictionaries") # include the extracted packages information (see BuildPackagesInfo.cmake) @@ -243,6 +243,51 @@ class WindowsManifest(ViewerManifest): def final_exe(self): return self.app_name_oneword()+"Viewer.exe" + def test_msvcrt_and_copy_action(self, src, dst): + # This is used to test a dll manifest. + # It is used as a temporary override during the construct method + from test_win32_manifest import test_assembly_binding + if src and (os.path.exists(src) or os.path.islink(src)): + # ensure that destination path exists + self.cmakedirs(os.path.dirname(dst)) + self.created_paths.append(dst) + if not os.path.isdir(src): + if(self.args['configuration'].lower() == 'debug'): + test_assembly_binding(src, "Microsoft.VC80.DebugCRT", "8.0.50727.4053") + else: + test_assembly_binding(src, "Microsoft.VC80.CRT", "8.0.50727.4053") + self.ccopy(src,dst) + else: + raise Exception("Directories are not supported by test_CRT_and_copy_action()") + else: + print "Doesn't exist:", src + + def test_for_no_msvcrt_manifest_and_copy_action(self, src, dst): + # This is used to test that no manifest for the msvcrt exists. + # It is used as a temporary override during the construct method + from test_win32_manifest import test_assembly_binding + from test_win32_manifest import NoManifestException, NoMatchingAssemblyException + if src and (os.path.exists(src) or os.path.islink(src)): + # ensure that destination path exists + self.cmakedirs(os.path.dirname(dst)) + self.created_paths.append(dst) + if not os.path.isdir(src): + try: + if(self.args['configuration'].lower() == 'debug'): + test_assembly_binding(src, "Microsoft.VC80.DebugCRT", "") + else: + test_assembly_binding(src, "Microsoft.VC80.CRT", "") + raise Exception("Unknown condition") + except NoManifestException, err: + pass + except NoMatchingAssemblyException, err: + pass + + self.ccopy(src,dst) + else: + raise Exception("Directories are not supported by test_CRT_and_copy_action()") + else: + print "Doesn't exist:", src def construct(self): super(WindowsManifest, self).construct() @@ -252,8 +297,8 @@ class WindowsManifest(ViewerManifest): 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()) + # Find singularity-bin.exe in the 'configuration' dir, then rename it to the result of final_exe. + self.path(src='%s/singularity-bin.exe' % self.args['configuration'], dst=self.final_exe()) # Plugin host application self.path2basename(os.path.join(os.pardir, @@ -582,6 +627,11 @@ class Windows_i686_Manifest(WindowsManifest): self.path("fmod.dll") except: print "Skipping fmodstudio audio library(assuming other audio engine)" + + self.end_prefix() + + if self.prefix(src=os.path.join(self.args['build'], os.pardir, 'packages', 'bin'), dst="redist"): + self.path("vc_redist.x86.exe") self.end_prefix() @@ -601,8 +651,14 @@ class Windows_x86_64_Manifest(WindowsManifest): self.path("fmod64.dll") except: print "Skipping fmodstudio audio library(assuming other audio engine)" + self.end_prefix() + if self.prefix(src=os.path.join(self.args['build'], os.pardir, 'packages', 'bin'), dst="redist"): + self.path("vc_redist.x64.exe") + self.end_prefix() + + class DarwinManifest(ViewerManifest): def construct(self): # copy over the build result (this is a no-op if run within the xcode script) @@ -893,7 +949,7 @@ class LinuxManifest(ViewerManifest): # self.put_in_file(self.flags_list(), 'gridargs.dat') if self.prefix(src="", dst="bin"): - self.path("secondlife-bin","do-not-directly-run-singularity-bin") + self.path("singularity-bin","do-not-directly-run-singularity-bin") self.path2basename("../llplugin/slplugin", "SLPlugin") self.end_prefix("bin") @@ -1043,13 +1099,13 @@ class Linux_x86_64_Manifest(LinuxManifest): except: print "Skipping libfmod.so - not found" pass + self.end_prefix("lib64") # Vivox runtimes if self.prefix(src=relpkgdir, dst="bin"): self.path("SLVoice") self.end_prefix("bin") - if self.prefix(src=relpkgdir, dst="lib32"): self.path("libortp.so") self.path("libsndfile.so.1") @@ -1083,4 +1139,3 @@ def symlinkf(src, dst): if __name__ == "__main__": main() -