summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.hgignore1
-rwxr-xr-x.hgtags5
-rwxr-xr-xBuildParams30
-rwxr-xr-xautobuild.xml1406
-rwxr-xr-xbuild.sh79
-rwxr-xr-xdoc/contributions.txt7
-rwxr-xr-xindra/CMakeLists.txt8
-rwxr-xr-xindra/cmake/00-Common.cmake25
-rwxr-xr-xindra/cmake/Audio.cmake2
-rwxr-xr-xindra/cmake/BerkeleyDB.cmake2
-rw-r--r--indra/cmake/BuildPackagesInfo.cmake10
-rwxr-xr-xindra/cmake/CMakeLists.txt16
-rwxr-xr-xindra/cmake/Copy3rdPartyLibs.cmake116
-rwxr-xr-xindra/cmake/DBusGlib.cmake2
-rwxr-xr-xindra/cmake/FindAutobuild.cmake36
-rw-r--r--indra/cmake/FindURIPARSER.cmake46
-rw-r--r--indra/cmake/GLEXT.cmake6
-rwxr-xr-xindra/cmake/GLH.cmake2
-rwxr-xr-xindra/cmake/GLOD.cmake2
-rwxr-xr-xindra/cmake/GoogleMock.cmake10
-rwxr-xr-xindra/cmake/Havok.cmake14
-rwxr-xr-xindra/cmake/JsonCpp.cmake6
-rw-r--r--indra/cmake/LLAddBuildTest.cmake4
-rw-r--r--indra/cmake/LLAppearanceUtility.cmake2
-rwxr-xr-xindra/cmake/LLSharedLibs.cmake2
-rwxr-xr-xindra/cmake/Linking.cmake2
-rwxr-xr-xindra/cmake/NDOF.cmake6
-rwxr-xr-xindra/cmake/OPENAL.cmake6
-rwxr-xr-xindra/cmake/Prebuilt.cmake26
-rwxr-xr-xindra/cmake/QuickTimePlugin.cmake4
-rwxr-xr-xindra/cmake/UI.cmake5
-rw-r--r--indra/cmake/URIPARSER.cmake35
-rwxr-xr-xindra/cmake/Variables.cmake54
-rwxr-xr-xindra/cmake/ViewerMiscLibs.cmake6
-rwxr-xr-xindra/cmake/XmlRpcEpi.cmake2
-rwxr-xr-xindra/cmake/run_build_test.py19
-rw-r--r--indra/llappearance/llpolymorph.h10
-rw-r--r--indra/llappearance/llpolyskeletaldistortion.h13
-rw-r--r--indra/llappearance/lltexturemanagerbridge.h2
-rwxr-xr-xindra/llappearance/llwearable.cpp13
-rwxr-xr-xindra/llappearance/llwearable.h10
-rwxr-xr-xindra/llappearance/llwearabledata.cpp5
-rw-r--r--indra/llappearance/llwearabletype.h3
-rwxr-xr-xindra/llaudio/CMakeLists.txt1
-rwxr-xr-xindra/llaudio/llaudiodecodemgr.cpp11
-rwxr-xr-xindra/llcharacter/llcharacter.h6
-rwxr-xr-xindra/llcharacter/lleditingmotion.cpp2
-rwxr-xr-xindra/llcharacter/llheadrotmotion.cpp3
-rwxr-xr-xindra/llcharacter/lljoint.cpp3
-rwxr-xr-xindra/llcharacter/lljointstate.h24
-rwxr-xr-xindra/llcharacter/llkeyframemotion.cpp4
-rwxr-xr-xindra/llcharacter/llkeyframewalkmotion.cpp3
-rwxr-xr-xindra/llcharacter/lltargetingmotion.cpp3
-rwxr-xr-xindra/llcommon/CMakeLists.txt7
-rwxr-xr-xindra/llcommon/llerror.cpp6
-rwxr-xr-xindra/llcommon/lleventcoro.h8
-rwxr-xr-xindra/llcommon/llfile.cpp170
-rwxr-xr-xindra/llcommon/llfile.h110
-rwxr-xr-xindra/llcommon/llframetimer.cpp1
-rwxr-xr-xindra/llcommon/llhash.h43
-rwxr-xr-xindra/llcommon/llinitparam.h12
-rwxr-xr-xindra/llcommon/llliveappconfig.cpp2
-rwxr-xr-xindra/llcommon/lllivefile.cpp85
-rwxr-xr-xindra/llcommon/llmd5.cpp12
-rwxr-xr-xindra/llcommon/llmemory.cpp76
-rwxr-xr-xindra/llcommon/llmemory.h54
-rw-r--r--indra/llcommon/llpredicate.h4
-rwxr-xr-xindra/llcommon/llpreprocessor.h5
-rwxr-xr-xindra/llcommon/llprocessor.cpp17
-rwxr-xr-xindra/llcommon/llrefcount.h36
-rwxr-xr-xindra/llcommon/llsd.cpp5
-rwxr-xr-xindra/llcommon/llsdparam.h1
-rwxr-xr-xindra/llcommon/llsdutil.cpp2
-rwxr-xr-xindra/llcommon/llsdutil.h2
-rwxr-xr-xindra/llcommon/llstacktrace.cpp29
-rwxr-xr-xindra/llcommon/llstacktrace.h1
-rwxr-xr-xindra/llcommon/llstring.cpp4
-rwxr-xr-xindra/llcommon/llsys.cpp5
-rwxr-xr-xindra/llcommon/llthread.cpp18
-rw-r--r--indra/llcommon/llthreadlocalstorage.h41
-rwxr-xr-xindra/llcommon/lltimer.cpp4
-rw-r--r--indra/llcommon/lltraceaccumulators.h18
-rw-r--r--indra/llcommon/llunittype.h92
-rw-r--r--indra/llcommon/lluriparser.cpp261
-rw-r--r--indra/llcommon/lluriparser.h87
-rwxr-xr-xindra/llcommon/stringize.h6
-rwxr-xr-xindra/llcommon/tests/lldependencies_test.cpp46
-rwxr-xr-xindra/llcommon/tests/llerror_test.cpp30
-rwxr-xr-xindra/llcommon/tests/lleventcoro_test.cpp1
-rwxr-xr-xindra/llcommon/tests/llframetimer_test.cpp33
-rwxr-xr-xindra/llcommon/tests/llleap_test.cpp27
-rwxr-xr-xindra/llcommon/tests/llprocess_test.cpp6
-rwxr-xr-xindra/llcommon/tests/llsdserialize_test.cpp41
-rwxr-xr-xindra/llcommon/tests/llstring_test.cpp4
-rwxr-xr-xindra/llcorehttp/_httpoprequest.cpp47
-rwxr-xr-xindra/llcorehttp/bufferstream.cpp2
-rwxr-xr-xindra/llcorehttp/examples/http_texture_load.cpp4
-rw-r--r--indra/llcrashlogger/llcrashlock.cpp4
-rwxr-xr-xindra/llimage/llimage.cpp20
-rwxr-xr-xindra/llimage/llimagefilter.cpp2
-rwxr-xr-xindra/llimage/llimagepng.cpp4
-rwxr-xr-xindra/llimage/llimageworker.cpp5
-rwxr-xr-xindra/llimage/llpngwrapper.cpp9
-rwxr-xr-xindra/llimage/llpngwrapper.h3
-rwxr-xr-xindra/llimage/tests/llimageworker_test.cpp2
-rwxr-xr-xindra/llkdu/llimagej2ckdu.h10
-rwxr-xr-xindra/llkdu/llkdumem.h10
-rwxr-xr-xindra/llkdu/tests/llimagej2ckdu_test.cpp23
-rwxr-xr-xindra/llmath/llline.cpp1
-rwxr-xr-xindra/llmath/llmath.h36
-rwxr-xr-xindra/llmath/lloctree.h16
-rwxr-xr-xindra/llmath/llquantize.h4
-rwxr-xr-xindra/llmath/llsphere.cpp6
-rwxr-xr-xindra/llmath/llvolume.cpp32
-rwxr-xr-xindra/llmath/llvolume.h3
-rwxr-xr-xindra/llmath/tests/llquaternion_test.cpp4
-rwxr-xr-xindra/llmath/tests/mathmisc_test.cpp24
-rwxr-xr-xindra/llmath/tests/v4coloru_test.cpp8
-rwxr-xr-xindra/llmath/v4color.cpp8
-rwxr-xr-xindra/llmath/v4coloru.h22
-rwxr-xr-xindra/llmessage/llavatarnamecache.cpp39
-rwxr-xr-xindra/llmessage/llavatarnamecache.h2
-rwxr-xr-xindra/llmessage/llcachename.cpp3
-rwxr-xr-xindra/llmessage/llcircuit.cpp80
-rwxr-xr-xindra/llmessage/llcircuit.h5
-rwxr-xr-xindra/llmessage/llhttpassetstorage.cpp3
-rwxr-xr-xindra/llmessage/llhttpclient.cpp2
-rwxr-xr-xindra/llmessage/lliopipe.h72
-rwxr-xr-xindra/llmessage/llmessageconfig.cpp2
-rwxr-xr-xindra/llmessage/llpartdata.cpp5
-rwxr-xr-xindra/llmessage/llregionhandle.h4
-rwxr-xr-xindra/llmessage/llservicebuilder.cpp2
-rwxr-xr-xindra/llmessage/llthrottle.cpp2
-rwxr-xr-xindra/llmessage/llxfermanager.cpp2
-rwxr-xr-xindra/llmessage/message.cpp6
-rwxr-xr-xindra/llmessage/message.h2
-rwxr-xr-xindra/llmessage/message_prehash.cpp2
-rwxr-xr-xindra/llmessage/message_prehash.h2
-rwxr-xr-xindra/llmessage/tests/llhost_test.cpp30
-rwxr-xr-xindra/llplugin/CMakeLists.txt2
-rwxr-xr-xindra/llplugin/llpluginclassmedia.cpp2
-rwxr-xr-xindra/llplugin/slplugin/slplugin-objc.h2
-rw-r--r--indra/llprimitive/llmaterial.cpp20
-rwxr-xr-xindra/llprimitive/llmodel.cpp8
-rwxr-xr-xindra/llprimitive/llprimitive.cpp30
-rwxr-xr-xindra/llprimitive/llprimitive.h2
-rwxr-xr-xindra/llprimitive/llprimtexturelist.cpp10
-rwxr-xr-xindra/llprimitive/llprimtexturelist.h2
-rwxr-xr-xindra/llprimitive/llvolumemessage.cpp64
-rwxr-xr-xindra/llprimitive/object_flags.h1
-rwxr-xr-xindra/llrender/CMakeLists.txt1
-rwxr-xr-xindra/llrender/llfontfreetype.cpp5
-rwxr-xr-xindra/llrender/llfontfreetype.h2
-rwxr-xr-xindra/llrender/llfontgl.cpp38
-rwxr-xr-xindra/llrender/llpostprocess.cpp9
-rwxr-xr-xindra/llrender/llrender.cpp24
-rw-r--r--indra/llrender/llrender2dutils.cpp16
-rw-r--r--indra/llrender/lluiimage.cpp4
-rwxr-xr-xindra/llui/llaccordionctrl.cpp10
-rwxr-xr-xindra/llui/llbadge.cpp8
-rwxr-xr-xindra/llui/llbutton.cpp8
-rwxr-xr-xindra/llui/llcheckboxctrl.cpp2
-rwxr-xr-xindra/llui/llcombobox.cpp5
-rwxr-xr-xindra/llui/llcombobox.h6
-rwxr-xr-xindra/llui/llconsole.cpp1
-rwxr-xr-xindra/llui/lldraghandle.cpp1
-rwxr-xr-xindra/llui/llfloater.cpp30
-rwxr-xr-xindra/llui/llfocusmgr.h2
-rwxr-xr-xindra/llui/llfolderview.cpp17
-rw-r--r--indra/llui/llfolderviewitem.cpp16
-rwxr-xr-xindra/llui/lllayoutstack.cpp22
-rwxr-xr-xindra/llui/lllineeditor.cpp24
-rwxr-xr-xindra/llui/lllineeditor.h3
-rwxr-xr-xindra/llui/llmenugl.cpp87
-rwxr-xr-xindra/llui/llmodaldialog.cpp2
-rwxr-xr-xindra/llui/llprogressbar.cpp2
-rwxr-xr-xindra/llui/llrngwriter.cpp9
-rwxr-xr-xindra/llui/llscrollcontainer.cpp3
-rwxr-xr-xindra/llui/llscrolllistctrl.cpp8
-rwxr-xr-xindra/llui/llsliderctrl.cpp17
-rwxr-xr-xindra/llui/llsliderctrl.h5
-rwxr-xr-xindra/llui/llspellcheck.cpp19
-rwxr-xr-xindra/llui/llspinctrl.cpp2
-rwxr-xr-xindra/llui/llstatbar.cpp2
-rwxr-xr-xindra/llui/llstatbar.h1
-rwxr-xr-xindra/llui/llstatgraph.cpp2
-rwxr-xr-xindra/llui/lltextbase.cpp64
-rwxr-xr-xindra/llui/lltextbase.h1
-rwxr-xr-xindra/llui/lltexteditor.cpp28
-rwxr-xr-xindra/llui/lltextutil.h10
-rwxr-xr-xindra/llui/lltextvalidate.cpp2
-rwxr-xr-xindra/llui/lltimectrl.cpp7
-rwxr-xr-xindra/llui/llui.cpp16
-rwxr-xr-xindra/llui/lluictrlfactory.h8
-rwxr-xr-xindra/llui/llurlentry.cpp202
-rwxr-xr-xindra/llui/llurlentry.h48
-rwxr-xr-xindra/llui/llurlmatch.cpp11
-rwxr-xr-xindra/llui/llurlmatch.h12
-rwxr-xr-xindra/llui/llurlregistry.cpp31
-rwxr-xr-xindra/llui/llurlregistry.h2
-rwxr-xr-xindra/llui/llview.cpp4
-rw-r--r--indra/llui/llviewereventrecorder.cpp2
-rwxr-xr-xindra/llui/llxuiparser.cpp2
-rwxr-xr-xindra/llui/tests/llurlmatch_test.cpp30
-rwxr-xr-xindra/llvfs/lldiriterator.cpp3
-rw-r--r--indra/llvfs/llpidlock.cpp6
-rwxr-xr-xindra/llvfs/llvfs_objc.h2
-rwxr-xr-xindra/llvfs/llvfs_objc.mm2
-rw-r--r--indra/llwindow/llopenglview-objc.mm17
-rwxr-xr-xindra/llwindow/llwindowheadless.cpp1
-rwxr-xr-xindra/llwindow/llwindowheadless.h3
-rwxr-xr-xindra/llwindow/llwindowmacosx.cpp49
-rwxr-xr-xindra/llwindow/llwindowmacosx.h6
-rwxr-xr-xindra/llwindow/llwindowmesaheadless.h1
-rwxr-xr-xindra/llwindow/llwindowsdl.h1
-rwxr-xr-xindra/llwindow/llwindowwin32.h1
-rwxr-xr-xindra/llxml/llcontrol.cpp4
-rwxr-xr-xindra/llxml/llxmlnode.cpp2
-rwxr-xr-xindra/llxml/tests/llcontrol_test.cpp2
-rwxr-xr-xindra/lscript/lscript_execute/lscript_readlso.cpp2
-rwxr-xr-xindra/media_plugins/example/media_plugin_example.cpp4
-rwxr-xr-xindra/media_plugins/winmmshim/forwarding_api.cpp4
-rwxr-xr-xindra/media_plugins/winmmshim/forwarding_api.h4
-rwxr-xr-xindra/newview/CMakeLists.txt100
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rwxr-xr-xindra/newview/app_settings/keywords_lsl_default.xml2
-rwxr-xr-xindra/newview/app_settings/logcontrol.xml1
-rwxr-xr-xindra/newview/app_settings/settings.xml63
-rwxr-xr-xindra/newview/app_settings/settings_per_account.xml13
-rwxr-xr-xindra/newview/generate_breakpad_symbols.py3
-rwxr-xr-xindra/newview/installers/windows/installer_template.nsi1117
-rwxr-xr-xindra/newview/installers/windows/lang_da.nsibin8026 -> 7816 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_de.nsibin9346 -> 8420 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_en-us.nsibin8120 -> 8510 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_es.nsibin8764 -> 8458 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_fr.nsibin9030 -> 8748 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_it.nsibin8372 -> 8102 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_ja.nsibin7288 -> 6514 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_pl.nsibin8426 -> 8136 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_pt-br.nsibin8788 -> 8522 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_ru.nsibin8144 -> 7898 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_tr.nsibin8266 -> 8006 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_zh.nsibin6798 -> 6576 bytes
-rwxr-xr-xindra/newview/llagent.cpp8
-rwxr-xr-xindra/newview/llagent.h7
-rwxr-xr-xindra/newview/llagentcamera.cpp8
-rwxr-xr-xindra/newview/llagentpilot.cpp8
-rwxr-xr-xindra/newview/llappearancemgr.cpp2
-rwxr-xr-xindra/newview/llappviewer.cpp117
-rwxr-xr-xindra/newview/llappviewer.h3
-rwxr-xr-xindra/newview/llappviewermacosx.cpp11
-rwxr-xr-xindra/newview/llassetuploadresponders.cpp49
-rwxr-xr-xindra/newview/llavataractions.cpp14
-rwxr-xr-xindra/newview/llavataractions.h2
-rwxr-xr-xindra/newview/llavatariconctrl.cpp4
-rwxr-xr-xindra/newview/llblocklist.cpp1
-rwxr-xr-xindra/newview/llblocklist.h1
-rwxr-xr-xindra/newview/llcallingcard.cpp8
-rwxr-xr-xindra/newview/llcallingcard.h6
-rwxr-xr-xindra/newview/llchathistory.cpp10
-rwxr-xr-xindra/newview/llchiclet.cpp8
-rwxr-xr-xindra/newview/llchiclet.h2
-rwxr-xr-xindra/newview/llchicletbar.cpp10
-rwxr-xr-xindra/newview/llcommandlineparser.cpp2
-rwxr-xr-xindra/newview/llcommunicationchannel.cpp6
-rw-r--r--indra/newview/llconversationmodel.h1
-rw-r--r--indra/newview/llconversationview.cpp2
-rwxr-xr-xindra/newview/lldaycyclemanager.cpp2
-rwxr-xr-xindra/newview/lldrawable.cpp12
-rwxr-xr-xindra/newview/lldrawpoolavatar.cpp2
-rwxr-xr-xindra/newview/lldrawpoolbump.cpp4
-rwxr-xr-xindra/newview/llenvmanager.cpp3
-rwxr-xr-xindra/newview/llface.cpp62
-rwxr-xr-xindra/newview/llface.h7
-rwxr-xr-xindra/newview/llfasttimerview.cpp13
-rwxr-xr-xindra/newview/llfavoritesbar.cpp285
-rwxr-xr-xindra/newview/llfavoritesbar.h18
-rwxr-xr-xindra/newview/llfeaturemanager.cpp4
-rwxr-xr-xindra/newview/llfilepicker.h2
-rwxr-xr-xindra/newview/llflexibleobject.cpp2
-rwxr-xr-xindra/newview/llfloaterabout.cpp58
-rwxr-xr-xindra/newview/llfloateravatarpicker.cpp4
-rwxr-xr-xindra/newview/llfloaterbump.cpp133
-rwxr-xr-xindra/newview/llfloaterbump.h23
-rwxr-xr-xindra/newview/llfloaterbuyland.cpp7
-rwxr-xr-xindra/newview/llfloatercamera.cpp7
-rwxr-xr-xindra/newview/llfloatercolorpicker.cpp50
-rwxr-xr-xindra/newview/llfloatercolorpicker.h3
-rw-r--r--indra/newview/llfloaterfacebook.cpp1
-rw-r--r--indra/newview/llfloaterflickr.cpp10
-rwxr-xr-xindra/newview/llfloatergodtools.cpp8
-rwxr-xr-xindra/newview/llfloaterhoverheight.cpp157
-rwxr-xr-xindra/newview/llfloaterhoverheight.h52
-rwxr-xr-xindra/newview/llfloaterimsession.cpp4
-rwxr-xr-xindra/newview/llfloaterimsessiontab.cpp1
-rwxr-xr-xindra/newview/llfloaterinspect.cpp53
-rwxr-xr-xindra/newview/llfloaterland.cpp13
-rwxr-xr-xindra/newview/llfloaterlandholdings.cpp4
-rwxr-xr-xindra/newview/llfloatermap.cpp9
-rwxr-xr-xindra/newview/llfloatermediasettings.cpp1
-rwxr-xr-xindra/newview/llfloatermediasettings.h1
-rwxr-xr-xindra/newview/llfloatermodelpreview.cpp86
-rwxr-xr-xindra/newview/llfloatermodelpreview.h7
-rwxr-xr-xindra/newview/llfloaternamedesc.cpp5
-rw-r--r--indra/newview/llfloaternotificationstabbed.cpp2
-rwxr-xr-xindra/newview/llfloaterpathfindingcharacters.cpp2
-rwxr-xr-xindra/newview/llfloaterpathfindingobjects.cpp2
-rwxr-xr-xindra/newview/llfloaterpay.cpp24
-rwxr-xr-xindra/newview/llfloaterperms.cpp25
-rwxr-xr-xindra/newview/llfloaterpreference.cpp30
-rwxr-xr-xindra/newview/llfloaterproperties.cpp49
-rwxr-xr-xindra/newview/llfloaterreporter.cpp2
-rwxr-xr-xindra/newview/llfloaterscriptlimits.h26
-rwxr-xr-xindra/newview/llfloatersnapshot.cpp56
-rwxr-xr-xindra/newview/llfloaterspellchecksettings.cpp5
-rwxr-xr-xindra/newview/llfloatertos.cpp1
-rwxr-xr-xindra/newview/llfloatertos.h1
-rw-r--r--indra/newview/llfloatertwitter.cpp1
-rwxr-xr-xindra/newview/llfloateruipreview.cpp1
-rwxr-xr-xindra/newview/llfloaterworldmap.cpp16
-rwxr-xr-xindra/newview/llfloaterworldmap.h2
-rwxr-xr-xindra/newview/llglsandbox.cpp8
-rwxr-xr-xindra/newview/llgrouplist.cpp2
-rwxr-xr-xindra/newview/llhudeffectlookat.cpp2
-rwxr-xr-xindra/newview/llhudeffecttrail.cpp7
-rwxr-xr-xindra/newview/llhudnametag.cpp7
-rwxr-xr-xindra/newview/llhudtext.cpp12
-rwxr-xr-xindra/newview/llhudview.cpp4
-rwxr-xr-xindra/newview/llimview.cpp18
-rwxr-xr-xindra/newview/llinspectobject.cpp2
-rwxr-xr-xindra/newview/llinspecttoast.cpp5
-rwxr-xr-xindra/newview/llinventorybridge.cpp4
-rwxr-xr-xindra/newview/llinventorybridge.h2
-rwxr-xr-xindra/newview/llinventoryfilter.cpp10
-rwxr-xr-xindra/newview/llinventorymodelbackgroundfetch.cpp166
-rwxr-xr-xindra/newview/llinventorymodelbackgroundfetch.h3
-rwxr-xr-xindra/newview/lljoystickbutton.cpp6
-rwxr-xr-xindra/newview/lljoystickbutton.h1
-rwxr-xr-xindra/newview/lllandmarkactions.cpp10
-rwxr-xr-xindra/newview/lllocalbitmaps.cpp3
-rwxr-xr-xindra/newview/lllocationhistory.cpp4
-rwxr-xr-xindra/newview/lllogchat.cpp2
-rwxr-xr-xindra/newview/lllogininstance.cpp24
-rwxr-xr-xindra/newview/lllogininstance.h1
-rwxr-xr-xindra/newview/llmachineid.cpp14
-rwxr-xr-xindra/newview/llmanip.cpp4
-rwxr-xr-xindra/newview/llmaniprotate.cpp8
-rwxr-xr-xindra/newview/llmanipscale.cpp82
-rwxr-xr-xindra/newview/llmanipscale.h4
-rwxr-xr-xindra/newview/llmaniptranslate.cpp9
-rwxr-xr-xindra/newview/llmediactrl.cpp18
-rwxr-xr-xindra/newview/llmediadataclient.cpp22
-rwxr-xr-xindra/newview/llmediadataclient.h7
-rwxr-xr-xindra/newview/llmorphview.cpp9
-rwxr-xr-xindra/newview/llnetmap.cpp29
-rw-r--r--indra/newview/llnotificationlistitem.cpp55
-rw-r--r--indra/newview/llnotificationlistitem.h52
-rwxr-xr-xindra/newview/llnotificationstorage.cpp10
-rwxr-xr-xindra/newview/llpanelclassified.cpp6
-rwxr-xr-xindra/newview/llpanelcontents.cpp3
-rwxr-xr-xindra/newview/llpanelface.cpp69
-rwxr-xr-xindra/newview/llpanelface.h2
-rwxr-xr-xindra/newview/llpanelgrouplandmoney.cpp49
-rwxr-xr-xindra/newview/llpanellandaudio.h1
-rwxr-xr-xindra/newview/llpanellandmarkinfo.cpp6
-rwxr-xr-xindra/newview/llpanellandmarks.cpp3
-rwxr-xr-xindra/newview/llpanellandmedia.h2
-rwxr-xr-xindra/newview/llpanellogin.cpp143
-rwxr-xr-xindra/newview/llpanellogin.h7
-rwxr-xr-xindra/newview/llpanelmaininventory.cpp16
-rwxr-xr-xindra/newview/llpanelobject.cpp18
-rwxr-xr-xindra/newview/llpanelobject.h1
-rwxr-xr-xindra/newview/llpanelobjectinventory.cpp12
-rwxr-xr-xindra/newview/llpanelpeople.h1
-rwxr-xr-xindra/newview/llpanelpermissions.cpp8
-rwxr-xr-xindra/newview/llpanelpick.cpp6
-rwxr-xr-xindra/newview/llpanelplaceinfo.cpp12
-rwxr-xr-xindra/newview/llpanelplaceprofile.cpp2
-rwxr-xr-xindra/newview/llpanelplaces.cpp1
-rwxr-xr-xindra/newview/llpanelprimmediacontrols.cpp8
-rwxr-xr-xindra/newview/llpanelsnapshot.cpp35
-rwxr-xr-xindra/newview/llplacesinventorybridge.h2
-rwxr-xr-xindra/newview/llpostcard.cpp6
-rwxr-xr-xindra/newview/llpreview.cpp18
-rwxr-xr-xindra/newview/llpreviewnotecard.cpp66
-rwxr-xr-xindra/newview/llpreviewnotecard.h1
-rwxr-xr-xindra/newview/llpreviewscript.cpp27
-rwxr-xr-xindra/newview/llpreviewtexture.cpp25
-rwxr-xr-xindra/newview/llpreviewtexture.h1
-rw-r--r--indra/newview/llscripteditor.cpp1
-rwxr-xr-xindra/newview/llscriptfloater.cpp1
-rwxr-xr-xindra/newview/llsearchhistory.cpp4
-rwxr-xr-xindra/newview/llsechandler_basic.cpp38
-rwxr-xr-xindra/newview/llselectmgr.cpp114
-rwxr-xr-xindra/newview/llselectmgr.h8
-rwxr-xr-xindra/newview/llsidepanelappearance.h3
-rwxr-xr-xindra/newview/llsidepanelinventory.cpp3
-rwxr-xr-xindra/newview/llsidepaneliteminfo.cpp42
-rwxr-xr-xindra/newview/llsidepaneltaskinfo.cpp15
-rwxr-xr-xindra/newview/llslurl.cpp24
-rw-r--r--indra/newview/llsnapshotlivepreview.cpp29
-rw-r--r--indra/newview/llsnapshotlivepreview.h1
-rwxr-xr-xindra/newview/llspeakers.cpp24
-rwxr-xr-xindra/newview/llspeakers.h2
-rwxr-xr-xindra/newview/llstartup.cpp8
-rwxr-xr-xindra/newview/llstatusbar.cpp5
-rwxr-xr-xindra/newview/llsurface.cpp12
-rw-r--r--indra/newview/llsyntaxid.cpp4
-rwxr-xr-xindra/newview/llteleporthistorystorage.cpp4
-rwxr-xr-xindra/newview/lltexturectrl.cpp16
-rwxr-xr-xindra/newview/lltexturefetch.cpp3
-rwxr-xr-xindra/newview/lltoastalertpanel.cpp1
-rwxr-xr-xindra/newview/lltoastgroupnotifypanel.h2
-rwxr-xr-xindra/newview/lltoolbrush.cpp3
-rwxr-xr-xindra/newview/lltoolcomp.cpp6
-rwxr-xr-xindra/newview/lltooldraganddrop.cpp13
-rwxr-xr-xindra/newview/lltoolfocus.cpp3
-rwxr-xr-xindra/newview/lltoolselectland.cpp4
-rwxr-xr-xindra/newview/llurlhistory.cpp51
-rwxr-xr-xindra/newview/llurlwhitelist.cpp4
-rwxr-xr-xindra/newview/llversioninfo.cpp2
-rwxr-xr-xindra/newview/llviewerdisplay.cpp12
-rwxr-xr-xindra/newview/llviewerfloaterreg.cpp4
-rwxr-xr-xindra/newview/llviewerkeyboard.cpp33
-rwxr-xr-xindra/newview/llviewermedia.cpp12
-rwxr-xr-xindra/newview/llviewermenu.cpp50
-rwxr-xr-xindra/newview/llviewermenufile.cpp2
-rwxr-xr-xindra/newview/llviewermessage.cpp12
-rwxr-xr-xindra/newview/llviewerobject.cpp16
-rwxr-xr-xindra/newview/llviewerparcelmgr.cpp26
-rwxr-xr-xindra/newview/llviewerpartsim.cpp5
-rwxr-xr-xindra/newview/llviewerpartsource.cpp2
-rwxr-xr-xindra/newview/llviewerregion.cpp66
-rwxr-xr-xindra/newview/llviewerregion.h14
-rwxr-xr-xindra/newview/llviewertexlayer.cpp3
-rwxr-xr-xindra/newview/llviewertexteditor.cpp5
-rwxr-xr-xindra/newview/llviewertexture.cpp38
-rwxr-xr-xindra/newview/llviewertexture.h11
-rwxr-xr-xindra/newview/llviewertextureanim.cpp2
-rwxr-xr-xindra/newview/llviewertexturelist.cpp33
-rwxr-xr-xindra/newview/llviewertexturelist.h3
-rwxr-xr-xindra/newview/llviewerwearable.cpp13
-rwxr-xr-xindra/newview/llviewerwindow.cpp116
-rwxr-xr-xindra/newview/llviewerwindow.h11
-rwxr-xr-xindra/newview/llvlcomposition.cpp12
-rwxr-xr-xindra/newview/llvoavatar.cpp193
-rwxr-xr-xindra/newview/llvoavatar.h11
-rwxr-xr-xindra/newview/llvoavatarself.cpp110
-rwxr-xr-xindra/newview/llvoavatarself.h13
-rwxr-xr-xindra/newview/llvograss.cpp1
-rwxr-xr-xindra/newview/llvoiceclient.cpp11
-rwxr-xr-xindra/newview/llvoicevisualizer.cpp1
-rwxr-xr-xindra/newview/llvoicevivox.cpp2
-rwxr-xr-xindra/newview/llvopartgroup.cpp4
-rwxr-xr-xindra/newview/llvosky.cpp17
-rwxr-xr-xindra/newview/llvotree.cpp3
-rwxr-xr-xindra/newview/llvovolume.cpp251
-rwxr-xr-xindra/newview/llvovolume.h26
-rwxr-xr-xindra/newview/llvowater.cpp9
-rwxr-xr-xindra/newview/llwaterparammanager.cpp2
-rwxr-xr-xindra/newview/llwearableitemslist.h4
-rwxr-xr-xindra/newview/llweb.cpp11
-rwxr-xr-xindra/newview/llwindowlistener.cpp49
-rwxr-xr-xindra/newview/llwlanimator.cpp2
-rwxr-xr-xindra/newview/llwldaycycle.cpp4
-rwxr-xr-xindra/newview/llwlparammanager.cpp2
-rwxr-xr-xindra/newview/llworld.cpp12
-rwxr-xr-xindra/newview/llworldmapview.cpp45
-rwxr-xr-xindra/newview/pipeline.cpp16
-rw-r--r--indra/newview/skins/default/textures/icons/hand.pngbin0 -> 957 bytes
-rwxr-xr-xindra/newview/skins/default/textures/textures.xml2
-rwxr-xr-xindra/newview/skins/default/xui/da/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_stats.xml6
-rwxr-xr-xindra/newview/skins/default/xui/de/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_about.xml57
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_edit_hover_height.xml38
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_inventory_item_properties.xml46
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_preview_gesture.xml4
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_stats.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_attachment_self.xml8
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_avatar_other.xml7
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_avatar_self.xml8
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_object.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_viewer.xml29
-rwxr-xr-xindra/newview/skins/default/xui/en/notifications.xml37
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_login.xml141
-rw-r--r--indra/newview/skins/default/xui/en/panel_login_first.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_notification_list_item.xml196
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_general.xml14
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_sound.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_status_bar.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_teleport_history_item.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/sidepanel_item_info.xml22
-rwxr-xr-xindra/newview/skins/default/xui/en/sidepanel_task_info.xml4
-rwxr-xr-xindra/newview/skins/default/xui/en/strings.xml1
-rwxr-xr-xindra/newview/skins/default/xui/es/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/es/panel_region_debug.xml10
-rwxr-xr-xindra/newview/skins/default/xui/fr/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/fr/panel_region_debug.xml10
-rwxr-xr-xindra/newview/skins/default/xui/it/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/it/panel_region_debug.xml10
-rwxr-xr-xindra/newview/skins/default/xui/ja/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/pl/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/pt/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/pt/panel_region_debug.xml10
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_viewer.xml16
-rwxr-xr-xindra/newview/skins/default/xui/ru/panel_region_debug.xml10
-rwxr-xr-xindra/newview/skins/default/xui/tr/menu_viewer.xml4
-rwxr-xr-xindra/newview/skins/default/xui/tr/panel_region_debug.xml10
-rwxr-xr-xindra/newview/skins/default/xui/zh/menu_viewer.xml4
-rwxr-xr-xindra/newview/tests/lllogininstance_test.cpp12
-rwxr-xr-xindra/newview/viewer_manifest.py326
-rwxr-xr-xindra/test/CMakeLists.txt12
-rwxr-xr-xindra/test/llbuffer_tut.cpp1
-rwxr-xr-xindra/test/llevents_tut.cpp2
-rwxr-xr-xindra/test/llmessageconfig_tut.cpp2
-rwxr-xr-xindra/test/llpermissions_tut.cpp2
-rwxr-xr-xindra/test/llsd_new_tut.cpp43
-rwxr-xr-xindra/test/lltranscode_tut.cpp3
-rwxr-xr-xindra/test/lltut.cpp43
-rwxr-xr-xindra/test/lltut.h85
-rwxr-xr-xindra/test/message_tut.cpp5
-rwxr-xr-xindra/test/namedtempfile.h10
-rw-r--r--indra/test_apps/llfbconnecttest/CMakeLists.txt8
-rw-r--r--indra/test_apps/llfbconnecttest/llfbconnecttest.h36
-rwxr-xr-xindra/test_apps/llplugintest/CMakeLists.txt12
-rwxr-xr-xindra/tools/vstool/VSTool.exebin24576 -> 24576 bytes
-rwxr-xr-xindra/tools/vstool/main.cs8
-rwxr-xr-xindra/viewer_components/login/CMakeLists.txt3
-rwxr-xr-xindra/viewer_components/updater/llupdatedownloader.cpp12
-rwxr-xr-xindra/viewer_components/updater/llupdaterservice.cpp8
-rwxr-xr-xscripts/automated_build_scripts/opensrc-build.sh391
-rwxr-xr-xscripts/messages/message_template.msg4
-rwxr-xr-xscripts/messages/message_template.msg.sha12
-rwxr-xr-xscripts/packages-formatter.py93
535 files changed, 7218 insertions, 5793 deletions
diff --git a/.hgignore b/.hgignore
index f3fca9bcb2..10549b6144 100755
--- a/.hgignore
+++ b/.hgignore
@@ -17,6 +17,7 @@ build-linux-*
build-darwin-*
build-vc80/
build-vc100/
+build-vc120/
indra/build-vc[0-9]*
indra/CMakeFiles
indra/lib/mono/1.0/*.dll
diff --git a/.hgtags b/.hgtags
index a9ab8061d3..cc88ee1664 100755
--- a/.hgtags
+++ b/.hgtags
@@ -496,3 +496,8 @@ bcc2770e21c125e0bab59141c51db9145aec068d 3.7.17-release
9ecab4b0c7d8614767724a3422d3c1dca6bd4e4f 3.7.21-release
bc61801f614022c920cb5c3df1d7d67a9561ce1f 3.7.22-release
3be800e1afad9615442159e388d6d137be7b951e 3.7.23-release
+d3d0101e980ec95043e0af9b7903045d3bc447e4 3.7.24-release
+9978a8c3a2ffce4a5e1c186256581c2ac139c9dc 3.7.25-release
+000e9dda4162cbf0a83ba88558b19473654a09a9 3.7.26-release
+afd8d4756e8eda3c8f760625d1c17a2ad40ad6c8 3.7.27-release
+566874eb5ab26c003ef7fb0e22ce40c5fa0013f4 3.7.28-release
diff --git a/BuildParams b/BuildParams
index c2fadf5943..74bd2b4923 100755
--- a/BuildParams
+++ b/BuildParams
@@ -11,9 +11,14 @@ Linux.symbolfiles = "newview/secondlife-symbols-linux.tar.bz2"
# Use Public Upload Locations
public_build = true
+build_docs = true
-# skip windows debug build until we can get a fix in.
+# disable all Debug builds (RelWithDebInfo is sufficient)
build_CYGWIN_Debug = false
+build_Linux_Debug = false
+build_Darwin_Debug = false
+build_Debug = false
+
# Update Public Inworld Build Status Indicators (setting should mirror "public_build")
email_status_this_is_os = true
@@ -47,13 +52,24 @@ Linux.cxx_version = /usr/bin/g++-4.6
################################################################
viewer_channel = "Second Life Test"
-# Setup default packaging parameters.
+################################################################
+# Special packaging parameters.
+# These parameters can be used to create additional packages
+# which identify themselves in a distinct way with either
+# a sourceid (sent to web services) or a channel name (sent to login)
+# the default sourceid should always be a null string:
sourceid = ""
-additional_packages = "Amazon Desura"
-Amazon_sourceid = "1207v_Amazon"
-Amazon_viewer_channel_suffix = "Amazon"
-Desura_sourceid = "1208_desura"
-Desura_viewer_channel_suffix = "Desura"
+# the additional_packages variable is a blank separated list of package prefixes:
+additional_packages = ""
+# to set the special values for a package, create variables using each prefix:
+# additional_packages = "Foo Bar"
+# Foo_sourceid = "bingo"
+# Foo_viewer_channel_suffix = "Foo"
+# Bar_sourceid = "bongo"
+# Bar_viewer_channel_suffix = "Bar"
+# the viewer_channel_suffix is prefixed by a blank and then appended to the viewer_channel
+# for the package in a setting that overrides the compiled-in value
+################################################################
# Notifications - to configure email notices, add a setting like this:
# <username>_<reponame>.email = <email-address>
diff --git a/autobuild.xml b/autobuild.xml
index ccf08f8c94..52d750f64d 100755
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -3,56 +3,12 @@
<map>
<key>installables</key>
<map>
- <key>GLOD</key>
- <map>
- <key>license</key>
- <string>GLOD</string>
- <key>license_file</key>
- <string>LICENSES/glod.txt</string>
- <key>name</key>
- <string>GLOD</string>
- <key>platforms</key>
- <map>
- <key>darwin</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>e6071abd822c0688390382a26f8a782c</string>
- <key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/267984/arch/Darwin/installer/glod-1.0pre4-darwin-20121211.tar.bz2</string>
- </map>
- <key>name</key>
- <string>darwin</string>
- </map>
- <key>linux</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>176736c52b3cde6ca8e7d9e173d91731</string>
- <key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/268002/arch/Linux/installer/glod-1.0pre4-linux-20121212.tar.bz2</string>
- </map>
- <key>name</key>
- <string>linux</string>
- </map>
- <key>windows</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>842208365f5b108dac4c7c733b99da9c</string>
- <key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glod/rev/232684/arch/CYGWIN/installer/glod-1.0pre4-windows-20110610.tar.bz2</string>
- </map>
- <key>name</key>
- <string>windows</string>
- </map>
- </map>
- </map>
<key>SDL</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) 1997-2012 Sam Lantinga</string>
+ <key>description</key>
+ <string>Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.</string>
<key>license</key>
<string>lgpl</string>
<key>license_file</key>
@@ -66,17 +22,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>8da309d24fb0bad8eaaa667fb04c6dc7</string>
+ <string>459cdc8d7c19a8025f98f61db95622ff</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-sdl-update/rev/290561/arch/Linux/installer/SDL-1.2.15-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/sdl_3p-update-sdl/rev/297546/arch/Linux/installer/SDL-1.2.15-linux-297546.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
+ <key>version</key>
+ <string>1.2.15</string>
</map>
<key>apr_suite</key>
<map>
+ <key>copyright</key>
+ <string>Copyright © 2012 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.</string>
+ <key>description</key>
+ <string>Apache portable runtime project</string>
<key>license</key>
<string>apache</string>
<key>license_file</key>
@@ -90,9 +52,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>2dfcd809e747f714b3fe0bf82a175812</string>
+ <string>0c53148aa00e51c06fa246c4130915be</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Darwin/installer/apr_suite-1.4.5-darwin-20120618.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/Darwin/installer/apr_suite-1.4.5.297252-darwin-297252.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -102,9 +64,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>f38c966a430012dc157fdc104f23a59b</string>
+ <string>402552cf158e2fe953b7224f4615a957</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/Linux/installer/apr_suite-1.4.5-linux-20120618.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/Linux/installer/apr_suite-1.4.5.297252-linux-297252.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -114,17 +76,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4a9d040582342699c58c886c5ccd2caf</string>
+ <string>8f865b509bb5011caf3dd95a22a4589d</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-apr/rev/259951/arch/CYGWIN/installer/apr_suite-1.4.5-windows-20120618.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/CYGWIN/installer/apr_suite-1.4.5.297252-windows-297252.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.4.5.297252</string>
</map>
<key>ares</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 1998 by the Massachusetts Institute of Technology.</string>
+ <key>description</key>
+ <string>C-ares, an asynchronous resolver library.</string>
<key>license</key>
<string>c-ares</string>
<key>license_file</key>
@@ -138,9 +106,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>127c6c37726b11a0750cd4d3b920beff</string>
+ <string>637b4996f703f3e5bf835d847fc4cb81</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Darwin/installer/ares-1.10.0-darwin-20140529.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/ares_3p-update-ares/rev/295506/arch/Darwin/installer/ares-1.10.0.295506-darwin-295506.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -150,9 +118,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>92f6a454d90b5740a38fb68e369cc13e</string>
+ <string>7771d3653a0daf22d35bf96055d02d9a</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/Linux/installer/ares-1.10.0-linux-20140529.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/ares_3p-update-ares/rev/295506/arch/Linux/installer/ares-1.10.0.295506-linux-295506.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -162,19 +130,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>887c93c4075beefefa44b69fb2c0461e</string>
+ <string>f044de05e704d3f3fb6934adf42447c2</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-ares-update/rev/290399/arch/CYGWIN/installer/ares-1.10.0-windows-20140529.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/ares_3p-update-ares/rev/295506/arch/CYGWIN/installer/ares-1.10.0.295506-windows-295506.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.10.0.295506</string>
</map>
<key>boost</key>
<map>
+ <key>copyright</key>
+ <string>(see individual source files)</string>
+ <key>description</key>
+ <string>Boost C++ Libraries</string>
<key>license</key>
- <string>boost</string>
+ <string>boost 1.0</string>
<key>license_file</key>
<string>LICENSES/boost.txt</string>
<key>name</key>
@@ -186,9 +160,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>b57789bd22dd166aade4a35ec5d36fbb</string>
+ <string>c296845cad075250c1ae2620f175a957</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Darwin/installer/boost-1.55.0-darwin-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Darwin/installer/boost-1.57-darwin-297445.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -198,9 +172,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>2f076eae296600a1b810ce375dc4b42d</string>
+ <string>fb1537f7ad0b490fcb4f096c15dce9cd</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/Linux/installer/boost-1.55.0-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Linux/installer/boost-1.57-linux-297445.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -210,19 +184,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>8af0500013739866a41cfc2ce90e4f4b</string>
+ <string>76a607d8a625062b9a63a88b62819894</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-boost-update/rev/290566/arch/CYGWIN/installer/boost-1.55.0-windows-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/CYGWIN/installer/boost-1.57-windows-297445.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.57</string>
</map>
<key>colladadom</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 2006 Sony Computer Entertainment Inc.</string>
<key>license</key>
- <string>scea</string>
+ <string>SCEA</string>
<key>license_file</key>
<string>LICENSES/collada.txt</string>
<key>name</key>
@@ -234,9 +212,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>68dc13f49a686331df6f0128c5483da3</string>
+ <string>66849777a83cb69cec3c06b07da7cd3d</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Darwin/installer/colladadom-2.3-darwin-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Darwin/installer/colladadom-2.3.297450-darwin-297450.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -246,9 +224,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>bdec5fe5fd008da4328f84115128ee61</string>
+ <string>d627c2a679f3afb8d3e090d42f53cd2e</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/Linux/installer/colladadom-2.3-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Linux/installer/colladadom-2.3.297450-linux-297450.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -258,17 +236,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>ae103c9481be20cd6c035940832b2650</string>
+ <string>220897a1893a188aa9d31efb48909878</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-colladadom-update/rev/290576/arch/CYGWIN/installer/colladadom-2.3-windows-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/CYGWIN/installer/colladadom-2.3.297450-windows-297450.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2.3.297450</string>
</map>
<key>curl</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 1996 - 2014, Daniel Stenberg, (daniel@haxx.se).</string>
+ <key>description</key>
+ <string>Library for transferring data specified with URL syntax</string>
<key>license</key>
<string>curl</string>
<key>license_file</key>
@@ -282,9 +266,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>40b1c6b3727ebedafc2f1a172797ccd1</string>
+ <string>d1c5125650a339a5209f429c70f4d395</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/Darwin/installer/curl-7.38.0-darwin-20141010.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/curl_3p-update-curl/rev/297172/arch/Darwin/installer/curl-7.38.0.297172-darwin-297172.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -294,9 +278,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>06149da3d7a34adf40853f813ae55328</string>
+ <string>ee6c089ee193e551040d610befc5d1c1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/Linux/installer/curl-7.38.0-linux-20141010.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/curl_3p-update-curl/rev/297172/arch/Linux/installer/curl-7.38.0.297172-linux-297172.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -306,17 +290,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>e4280eae792a5f13bc9d01d8cfb7c557</string>
+ <string>fdeca7cbc074a88d2701d74a31d21bd8</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-curl-update/rev/295367/arch/CYGWIN/installer/curl-7.38.0-windows-20141010.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/curl_3p-update-curl/rev/297172/arch/CYGWIN/installer/curl-7.38.0.297172-windows-297172.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>7.38.0.297172</string>
</map>
<key>db</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 1990, 2010 Oracle and/or its affiliates. All rights reserved.</string>
+ <key>description</key>
+ <string>Berkeley DB (libdb) is a programmatic toolkit that provides embedded database support for both traditional and client/server applications.</string>
<key>license</key>
<string>bsd</string>
<key>license_file</key>
@@ -330,23 +320,29 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>8f57c413e0786681cbcb9ed2fb8a6d37</string>
+ <string>1cc7940e500858a9754e9a3cc3ba2237</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/db_3p-update-db/rev/295315/arch/Linux/installer/db-5.1.25-linux-295315.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
+ <key>version</key>
+ <string>5.1.25</string>
</map>
- <key>dbusglib</key>
+ <key>dbus_glib</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) Red Hat Inc.</string>
+ <key>description</key>
+ <string>D-Bus bindings for glib</string>
<key>license</key>
- <string>AFL2.1</string>
+ <string>Academic Free License v. 2.1</string>
<key>license_file</key>
<string>LICENSES/dbus-glib.txt</string>
<key>name</key>
- <string>dbusglib</string>
+ <string>dbus_glib</string>
<key>platforms</key>
<map>
<key>linux</key>
@@ -354,62 +350,46 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>94b058b9a81114dc4567bd78e4335425</string>
+ <string>c11ff7e2e0bd59e6e59628f24902bbcd</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/dbus-glib_3p-update-dbus-glib/rev/297768/arch/Linux/installer/dbus_glib-0.76-linux-297768.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
+ <key>version</key>
+ <string>0.76</string>
</map>
<key>dictionaries</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 2014 Apache OpenOffice software</string>
+ <key>description</key>
+ <string>Spell checking dictionaries to bundled into the viewer</string>
<key>license</key>
- <string>various open</string>
+ <string>various open source</string>
<key>license_file</key>
<string>LICENSES/dictionaries.txt</string>
<key>name</key>
<string>dictionaries</string>
<key>platforms</key>
<map>
- <key>darwin</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>06a6c49eb1873e95623d3d2d07aee903</string>
- <key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Darwin/installer/dictionaries-1-darwin-20120616.tar.bz2</string>
- </map>
- <key>name</key>
- <string>darwin</string>
- </map>
- <key>linux</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>4f0ca21d27e0cd0b002149062b0a4b25</string>
- <key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/Linux/installer/dictionaries-1-linux-20120616.tar.bz2</string>
- </map>
- <key>name</key>
- <string>linux</string>
- </map>
- <key>windows</key>
+ <key>common</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
- <string>7520d75f6af325328322201c888191d4</string>
+ <string>a62723a6deea8187702a2f926e98a35f</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-dictionaries/rev/259873/arch/CYGWIN/installer/dictionaries-1-windows-20120616.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/dictionaries_3p-update-dictionaries/rev/297347/arch/Linux/installer/dictionaries-1.297347-common-297347.tar.bz2</string>
</map>
<key>name</key>
- <string>windows</string>
+ <string>common</string>
</map>
</map>
+ <key>version</key>
+ <string>1.297347</string>
</map>
<key>elfio</key>
<map>
@@ -437,8 +417,12 @@
</map>
<key>expat</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd and Clark Cooper - Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers.</string>
+ <key>description</key>
+ <string>Expat is an XML parser library written in C</string>
<key>license</key>
- <string>mit</string>
+ <string>expat</string>
<key>license_file</key>
<string>LICENSES/expat.txt</string>
<key>name</key>
@@ -450,9 +434,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>180e03d0be1f1acfc3244e78742d7bef</string>
+ <string>452d1910ef853329cd59858e6c5b2c48</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Darwin/installer/expat-2.0.1-darwin-20110218.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/Darwin/installer/expat-2.0.1.297014-darwin-297014.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -462,9 +446,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>9bd79781b58e556ab1c36084ec4a1c0c</string>
+ <string>f546615d76bc0f9e8bc2b9ef89f0ca86</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Linux/installer/expat-2.0.1-linux-20110219.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/Linux/installer/expat-2.0.1.297014-linux-297014.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -474,17 +458,21 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>e72db1bda49b205ebdf4945d4ed2b8f8</string>
+ <string>c70c72a8a0a1e508691a9b35739b373f</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/CYGWIN/installer/expat-2.0.1.297014-windows-297014.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2.0.1.297014</string>
</map>
<key>fmodex</key>
<map>
+ <key>copyright</key>
+ <string>COPYRIGHT 2014 FIRELIGHT TECHNOLOGIES PTY LTD. ALL RIGHTS RESERVED</string>
<key>license</key>
<string>fmodex</string>
<key>license_file</key>
@@ -498,9 +486,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>862b9244ed8a27bec16b62883fe3580a</string>
+ <string>ed0d8767652aecd65a7fef3e28645bad</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/Darwin/installer/fmodex-4.44.31-darwin-20140314.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/fmodex_3p-update-fmodex/rev/297261/arch/Darwin/installer/fmodex-4.44.31.297261-darwin-297261.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -510,9 +498,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>180f4d703deec104469e6a9044243110</string>
+ <string>dd0135d53706a4040d65974f7e804d6f</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/Linux/installer/fmodex-4.44.31-linux-20140315.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/fmodex_3p-update-fmodex/rev/297261/arch/Linux/installer/fmodex-4.44.31.297261-linux-297261.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -522,19 +510,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6c859cd17fb8c9cdd96b188c2a2c2838</string>
+ <string>5aa7b826e7c1cf95e9cd3ef77e314f35</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/288122/arch/CYGWIN/installer/fmodex-4.44.31-windows-20140314.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/fmodex_3p-update-fmodex/rev/297261/arch/CYGWIN/installer/fmodex-4.44.31.297261-windows-297261.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>4.44.31.297261</string>
</map>
<key>fontconfig</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) 2000,2001,2002,2003,2004,2006,2007 Keith Packard, 2005 Patrick Lam, 2009 Roozbeh Pournader, 2008,2009 Red Hat, Inc., 2008 Danilo Šegan, 2012 Google, Inc.</string>
+ <key>description</key>
+ <string>Fontconfig is a library for configuring and customizing font access.</string>
<key>license</key>
- <string>mit</string>
+ <string>bsd</string>
<key>license_file</key>
<string>LICENSES/fontconfig.txt</string>
<key>name</key>
@@ -546,19 +540,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>2843c48e6c84a51e3d6aa05dace4c8c0</string>
+ <string>864f9361661748ecf0e2cec7110d70b3</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-fontconfig-update/rev/290569/arch/Linux/installer/fontconfig-2.11.0-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/fontconfig_3p-update-fontconfig/rev/297551/arch/Linux/installer/fontconfig-2.11.0-linux-297551.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
+ <key>version</key>
+ <string>2.11.0</string>
</map>
<key>freeglut</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.</string>
+ <key>description</key>
+ <string>freeglut is a completely OpenSourced alternative to the OpenGL Utility Toolkit (GLUT) library.</string>
<key>license</key>
- <string>mit</string>
+ <string>freeglut</string>
<key>license_file</key>
<string>LICENSES/freeglut.txt</string>
<key>name</key>
@@ -570,19 +570,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>825d5a9bafcc5bfe28dc4c1c4f87c576</string>
+ <string>58e328a8b2f3788f932c57ad77e3e117</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freeglut/rev/221064/arch/CYGWIN/installer/freeglut-2.6.0-windows-20110214.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freeglut_3p-update-freeglut/rev/295926/arch/CYGWIN/installer/freeglut-2.6.0.295926-windows-295926.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2.6.0.295926</string>
</map>
<key>freetype</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 2006, 2007, 2008, 2009, 2010 by David Turner, Robert Wilhelm, and Werner Lemberg.</string>
+ <key>description</key>
+ <string>Font rendering library</string>
<key>license</key>
- <string>freetype</string>
+ <string>FreeType</string>
<key>license_file</key>
<string>LICENSES/freetype.txt</string>
<key>name</key>
@@ -594,9 +600,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>71c8d80de052f0c2a49e4c7ddf1a56a0</string>
+ <string>83618d16d974eb0af93926a10ac13297</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Darwin/installer/freetype-2.4.4-darwin-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/Darwin/installer/freetype-2.4.4.297053-darwin-297053.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -606,9 +612,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>52f87a65cc61ec4b05721c079d015b19</string>
+ <string>1ac3152b440287c58509d8af0a50326d</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/Linux/installer/freetype-2.4.4-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/Linux/installer/freetype-2.4.4.297053-linux-297053.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -618,19 +624,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6e9fc0fe628a7c88f6f614bf3b0450ae</string>
+ <string>207aa1a29bfe4ba63edbca38170970a1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-freetype-update/rev/290557/arch/CYGWIN/installer/freetype-2.4.4-windows-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/CYGWIN/installer/freetype-2.4.4.297053-windows-297053.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2.4.4.297053</string>
</map>
<key>glext</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2007-2010 The Khronos Group Inc.</string>
+ <key>description</key>
+ <string>glext headers define function prototypes and constants for OpenGL extensions</string>
<key>license</key>
- <string>glext</string>
+ <string>Copyright (c) 2007-2010 The Khronos Group Inc.</string>
<key>license_file</key>
<string>LICENSES/glext.txt</string>
<key>name</key>
@@ -642,9 +654,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5de58ca0fe19abf68b25956762ee0d29</string>
+ <string>4bf4f9e65168138eebbc769e9e12230b</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glext_3p-update-glext/rev/296893/arch/Linux/installer/glext-68-linux-296893.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -654,23 +666,57 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5de58ca0fe19abf68b25956762ee0d29</string>
+ <string>6eb51c6f17e717a5617b112858d41c80</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glext-68-windows-20110406.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glext_3p-update-glext/rev/296893/arch/CYGWIN/installer/glext-68-windows-296893.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>68</string>
+ </map>
+ <key>glh-linear</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2000 Cass Everitt</string>
+ <key>description</key>
+ <string>glh - is a platform-indepenedent C++ OpenGL helper library</string>
+ <key>license</key>
+ <string>BSD</string>
+ <key>license_file</key>
+ <string>LICENSES/glh-linear.txt</string>
+ <key>name</key>
+ <string>glh-linear</string>
+ <key>platforms</key>
+ <map>
+ <key>common</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>f577144536fd7c9d26d9f989acf17857</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glh-linear_3p-update-glh-linear/rev/297692/arch/Linux/installer/glh_linear-0.0.0-common-297692.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>common</string>
+ </map>
+ </map>
+ <key>version</key>
+ <string>0.0.0</string>
</map>
- <key>glh_linear</key>
+ <key>glod</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 2003 Jonathan Cohen, Nat Duca, David Luebke, Brenden Schubert - Johns Hopkins University and University of Virginia</string>
<key>license</key>
- <string>glh_linear</string>
+ <string>GLOD Open-Source License Version 1.0</string>
<key>license_file</key>
- <string>LICENSES/glh_linear.txt</string>
+ <string>LICENSES/GLOD.txt</string>
<key>name</key>
- <string>glh_linear</string>
+ <string>glod</string>
<key>platforms</key>
<map>
<key>darwin</key>
@@ -678,9 +724,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>366f940f2634b0e05954646927620bfd</string>
+ <string>71e678d70e276fc42a56926fc28a7abd</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glod_3p-update-glod/rev/296895/arch/Darwin/installer/glod-1.0pre4.296895-darwin-296895.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -690,9 +738,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>1b1f1e9975e3a671c9faf32fcf4b6d43</string>
+ <string>fffd130f17cbbe2b93cc241b27262647</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-glh_linear/rev/263308/arch/Linux/installer/glh_linear-0.0.0-linux-20120810.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glod_3p-update-glod/rev/296895/arch/Linux/installer/glod-1.0pre4.296895-linux-296895.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -702,19 +752,27 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>57f8be28bbaa2505ae3b59deb2c77cdf</string>
+ <string>b0b32155319c6441997c034bdae28a22</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glod_3p-update-glod/rev/296895/arch/CYGWIN/installer/glod-1.0pre4.296895-windows-296895.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.0pre4.296895</string>
</map>
<key>glui</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 2006 Paul Rademacher</string>
+ <key>description</key>
+ <string>GLUI is a GLUT-based C++ user interface library which provides controls such as buttons, checkboxes, radio buttons, and spinners to OpenGL applications.</string>
<key>license</key>
- <string>lgpl</string>
+ <string>ZLIB</string>
<key>license_file</key>
<string>LICENSES/glui.txt</string>
<key>name</key>
@@ -726,35 +784,53 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>bd2f84ef8bd308570e2e532a371dc2ef</string>
+ <string>9b7e2ab9b208b3001803294f83d2b610</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glui_3p-update-glui/rev/297273/arch/Darwin/installer/glui-2.36.297273-darwin-297273.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
</map>
+ <key>linux</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>f330b3acd03526d827030eefeeb06240</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glui_3p-update-glui/rev/297273/arch/Linux/installer/glui-2.36.297273-linux-297273.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>linux</string>
+ </map>
<key>windows</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
- <string>e006635a741420a15f40bbdac13bd8d7</string>
+ <string>75b16a5a606c78aaeb2f8e6046310a58</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glui_3p-update-glui/rev/297273/arch/CYGWIN/installer/glui-2.36.297273-windows-297273.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2.36.297273</string>
</map>
- <key>gmock</key>
+ <key>google_breakpad</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2006, Google Inc.</string>
+ <key>description</key>
+ <string>Breakpad is a crossplatform library for capturing crash callstacks and runtime data.</string>
<key>license</key>
<string>bsd</string>
<key>license_file</key>
- <string>LICENSES/gmock.txt</string>
+ <string>LICENSES/google_breakpad.txt</string>
<key>name</key>
- <string>gmock</string>
+ <string>google_breakpad</string>
<key>platforms</key>
<map>
<key>darwin</key>
@@ -762,9 +838,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>36b0ea1a8be38f5749a7b13536b871ab</string>
+ <string>171b39db6d0702535b41fad5b476e39d</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Darwin/installer/gmock-1.7.0-darwin-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-breakpad_3p-update-google-breakpad/rev/298033/arch/Darwin/installer/google_breakpad-1413.298033-darwin-298033.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -774,9 +850,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>3de99704847b34c7acccf5ab87222f6c</string>
+ <string>0bf69fbc829d964820b798a0494278c9</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/Linux/installer/gmock-1.7.0-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-breakpad_3p-update-google-breakpad/rev/298033/arch/Linux/installer/google_breakpad-1413.298033-linux-298033.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -786,23 +862,29 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5d91c1d03780aa26bcd5481145ee9e86</string>
+ <string>c73a7c9aa53a4e266df2d5230a650fbf</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-google-mock-update/rev/290574/arch/CYGWIN/installer/gmock-1.7.0-windows-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-breakpad_3p-update-google-breakpad/rev/298127/arch/CYGWIN/installer/google_breakpad-1413.298127-windows-298127.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1413.298127</string>
</map>
- <key>google_breakpad</key>
+ <key>googlemock</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 2008, Google Inc.</string>
+ <key>description</key>
+ <string>a library for writing and using C++ mock classes</string>
<key>license</key>
- <string>bsd</string>
+ <string>BSD</string>
<key>license_file</key>
- <string>LICENSES/google_breakpad.txt</string>
+ <string>LICENSES/gmock.txt</string>
<key>name</key>
- <string>google_breakpad</string>
+ <string>googlemock</string>
<key>platforms</key>
<map>
<key>darwin</key>
@@ -810,9 +892,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>aff5566e04003de0383941981198e04e</string>
+ <string>022649e284163b8ee23e3c9a81302fa7</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/Darwin/installer/google_breakpad-0.0.0-rev1099-darwin-20130329.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Darwin/installer/googlemock-1.7.0.297460-darwin-297460.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -822,9 +904,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>52257e5eb166a0b69c9c0c38f6e1920e</string>
+ <string>e08b0e9e269b80b549f6044c4e608fb5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/Linux/installer/googlemock-1.7.0.297460-linux-297460.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -834,33 +916,51 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a1e519d08c507c12f9d412b2ae8328c8</string>
+ <string>f30de5bf36e8ca8681883fe8fd8e0092</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/279804/arch/CYGWIN/installer/google_breakpad-0.0.0-rev1099-windows-20130813.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/googlemock_3p-update-googlemock/rev/297460/arch/CYGWIN/installer/googlemock-1.7.0.297460-windows-297460.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.7.0.297460</string>
</map>
<key>gperftools</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2005, Google Inc.</string>
+ <key>description</key>
+ <string>Fast, multi-threaded malloc() and nifty performance analysis tools</string>
<key>license</key>
- <string>bsd</string>
+ <string>BSD</string>
<key>license_file</key>
<string>LICENSES/gperftools.txt</string>
<key>name</key>
<string>gperftools</string>
<key>platforms</key>
<map>
+ <key>darwin</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>0137e450bf24cff7e78634bb9a1c85e4</string>
+ <key>url</key>
+ <string>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</string>
+ </map>
+ <key>name</key>
+ <string>darwin</string>
+ </map>
<key>linux</key>
<map>
<key>archive</key>
<map>
<key>hash</key>
- <string>8aedfdcf670348c18a9991ae1b384a61</string>
+ <string>0c252bcaa1cb852f5c4e46a13ed459c5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/google-perftools_3p-update-google-perftools/rev/297263/arch/Linux/installer/gperftools-2.0.297263-linux-297263.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -870,19 +970,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>f62841804acb91e1309603a84f3f0ce8</string>
+ <string>2946f9bbf227dee8881af43856ebb3a1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2</string>
+ <string>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</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2.0.297263</string>
</map>
<key>gstreamer</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt;</string>
<key>license</key>
- <string>lgpl</string>
+ <string>LGPL</string>
<key>license_file</key>
<string>LICENSES/gstreamer.txt</string>
<key>name</key>
@@ -894,17 +998,21 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>ddbc0a64ad788107877fee777403592c</string>
+ <string>fb1479533a7699b44d34e3a550037eb7</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/gstreamer_3p-update-gstreamer/rev/294903/arch/Linux/installer/gstreamer-0.10.6.294903-linux-294903.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
+ <key>version</key>
+ <string>0.10.6.294903</string>
</map>
<key>gtk-atk-pango-glib</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (various, see sources)</string>
<key>license</key>
<string>lgpl</string>
<key>license_file</key>
@@ -918,31 +1026,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>03694ade27f53199229c03cbbda89214</string>
+ <string>15af375116f5c943ea6f4190bc764224</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/gtk_3p-gtk-atk-pango-glib/rev/294804/arch/Linux/installer/gtk_atk_pango_glib-0.1-linux-294804.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
- <key>windows</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>c257d718abdde8cfe8a0af26175161a7</string>
- <key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20101001a.tar.bz2</string>
- </map>
- <key>name</key>
- <string>windows</string>
- </map>
</map>
+ <key>version</key>
+ <string>0.0</string>
</map>
<key>havok-source</key>
<map>
+ <key>copyright</key>
+ <string>Uses Havok (TM) Physics. (c)Copyright 1999-2010 Havok.com Inc. (and its Licensors). All Rights Reserved. See www.havok.com for details.</string>
+ <key>description</key>
+ <string>Havok source code for libs and demos</string>
<key>license</key>
- <string>havok-ares</string>
+ <string>havok</string>
<key>license_file</key>
<string>LICENSES/havok.txt</string>
<key>name</key>
@@ -954,9 +1056,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>e6feee3b452c2f70ce8558e30d6bc10a</string>
+ <string>5c5b4820999ae9e398801d6a46f45897</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Darwin/installer/havok_source-2012.1-darwin-20121219.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/297312/arch/Darwin/installer/havok_source-2012.1-darwin-297312.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -966,9 +1068,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0c0d2058ba48446e274d6595d1d8063e</string>
+ <string>6b0f41ddddfa60d8424d8a2e0bc2077d</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/Linux/installer/havok_source-2012.1-linux-20121219.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/296959/arch/Linux/installer/havok_source-2012.1-linux-296959.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -978,17 +1080,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>88391b6e08d473506d406ca6f3e88cfb</string>
+ <string>ab30ae74a665950d73ea559f019ff358</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/lindenlab_3p-havok-source/rev/268409/arch/CYGWIN/installer/havok_source-2012.1-windows-20121219.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/297566/arch/CYGWIN/installer/havok_source-2012.1-windows-297566.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2012.1</string>
</map>
<key>jpeglib</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) 1991-2011, Thomas G. Lane, Guido Vollbeding.</string>
+ <key>description</key>
+ <string>JPEG encoding, decoding library</string>
<key>license</key>
<string>jpeglib</string>
<key>license_file</key>
@@ -1002,9 +1110,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>71bd6efbf508e1f2e7d98a6195a93e9e</string>
+ <string>4d7658997fd0f93a9c55e40e40b1b0e5</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jpeglib_3p-update-jpeglib/rev/296854/arch/Darwin/installer/jpeglib-8c.296854-darwin-296854.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1014,9 +1122,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>dcca1db348831cdb7c6b26dc4076c597</string>
+ <string>0a6641f030e173a7bc0dc8a3087b6c7d</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-jpeglib/rev/224895/arch/Linux/installer/jpeglib-8c-linux-20110323.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jpeglib_3p-update-jpeglib/rev/296854/arch/Linux/installer/jpeglib-8c.296854-linux-296854.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1026,19 +1134,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a202ec58cef9097c94acfa958ed6da8d</string>
+ <string>98d3dc8d107d04b572fe47bd43a56e74</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jpeglib_3p-update-jpeglib/rev/296854/arch/CYGWIN/installer/jpeglib-8c.296854-windows-296854.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>8c.296854</string>
</map>
<key>jsoncpp</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2007-2010 Baptiste Lepilleur</string>
+ <key>description</key>
+ <string>jsoncpp is an implementation of a JSON (http://json.org) reader and writer in C++.</string>
<key>license</key>
- <string>jsoncpp</string>
+ <string>public domain</string>
<key>license_file</key>
<string>LICENSES/jsoncpp.txt</string>
<key>name</key>
@@ -1050,9 +1164,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>de8b96120c274e052abb4f692861be46</string>
+ <string>b25a4f480e07c670ffef00c3da578f87</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jsoncpp_3p-update-jsoncpp/rev/297281/arch/Darwin/installer/jsoncpp-0.5.0.297281-darwin-297281.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1062,9 +1176,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>840cd9455638c0ea52c613cfddd07d5b</string>
+ <string>5b3b5dbf0c82c1046482a74ce9e11c38</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jsoncpp_3p-update-jsoncpp/rev/297281/arch/Linux/installer/jsoncpp-0.5.0.297281-linux-297281.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1074,19 +1188,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>afff2018e6a887c281b072eecdd9343e</string>
+ <string>e5a832cffe307a1e814ca0664be30b10</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/jsoncpp_3p-update-jsoncpp/rev/297580/arch/CYGWIN/installer/jsoncpp-0.5.0.297580-windows-297580.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>0.5.0.297580</string>
</map>
<key>kdu</key>
<map>
+ <key>copyright</key>
+ <string>Kakadu software</string>
+ <key>description</key>
+ <string>JPEG2000 library by Kakadu</string>
<key>license</key>
- <string>kdu</string>
+ <string>Kakadu</string>
<key>license_file</key>
<string>LICENSES/kdu.txt</string>
<key>name</key>
@@ -1098,9 +1218,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a5b2dff0d97b643227a58473e5c57906</string>
+ <string>e62f2fc1ee9ab791d603c5b717b46119</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/Darwin/installer/kdu-7.0.0-darwin-20120515.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/kdu_3p-update-kdu/rev/296932/arch/Darwin/installer/kdu-7.2.296932-darwin-296932.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1110,9 +1230,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>fbf8a4f78dff986d7c16b3a0437e033e</string>
+ <string>ed952c0cb86329e63a8db190953962d8</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/223538/arch/Linux/installer/kdu-6.4.1-linux-20110311.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/kdu_3p-update-kdu/rev/296932/arch/Linux/installer/kdu-7.2.296932-linux-296932.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1122,19 +1242,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6d80d35524e1c0c32d3385014d02d48c</string>
+ <string>a0e5c050a4975c81611d9f1862ac57fb</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/256978/arch/CYGWIN/installer/kdu-7.0.0-windows-20120515.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/kdu_3p-update-kdu/rev/296932/arch/CYGWIN/installer/kdu-7.2.296932-windows-296932.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>7.2.296932</string>
</map>
<key>libhunspell</key>
<map>
+ <key>copyright</key>
+ <string>See hunspell.txt</string>
+ <key>description</key>
+ <string>Spell checking library</string>
<key>license</key>
- <string>libhunspell</string>
+ <string>LGPL</string>
<key>license_file</key>
<string>LICENSES/hunspell.txt</string>
<key>name</key>
@@ -1146,9 +1272,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6f5db0ef258df6e5c93c843ec559db6d</string>
+ <string>05eda16106df26a211f8bdd874d1fca5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Darwin/installer/libhunspell-1.3.2-darwin-20120616.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/Darwin/installer/libhunspell-1.3.2.296916-darwin-296916.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1158,9 +1284,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0c432d2626aea2e91a56335879c92965</string>
+ <string>988deae5c63ec638ad222b400a431f5b</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/Linux/installer/libhunspell-1.3.2-linux-20120616.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/Linux/installer/libhunspell-1.3.2.296916-linux-296916.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1170,17 +1296,65 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6a140e5620826aa5e587b4157f57b389</string>
+ <string>ada0ad726842d902c09ab20a7ad5ac8f</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-hunspell/rev/259874/arch/CYGWIN/installer/libhunspell-1.3.2-windows-20120616.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/CYGWIN/installer/libhunspell-1.3.2.296916-windows-296916.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.3.2.296916</string>
+ </map>
+ <key>libndofdev</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (c) 2007, 3Dconnexion, Inc. - All rights reserved.</string>
+ <key>description</key>
+ <string>3DConnexion SDK</string>
+ <key>license</key>
+ <string>BSD</string>
+ <key>license_file</key>
+ <string>LICENSES/libndofdev.txt</string>
+ <key>name</key>
+ <string>libndofdev</string>
+ <key>platforms</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>a01b411433dbf8a4b481de9e76d9a652</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297264/arch/Darwin/installer/libndofdev-0.1.297264-darwin-297264.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>darwin</string>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>1c40c22fb7b84ccccefbf797e2478ec4</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297264/arch/CYGWIN/installer/libndofdev-0.1.297264-windows-297264.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>windows</string>
+ </map>
+ </map>
+ <key>version</key>
+ <string>0.1.297264</string>
</map>
<key>libpng</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson</string>
+ <key>description</key>
+ <string>PNG Reference library</string>
<key>license</key>
<string>libpng</string>
<key>license_file</key>
@@ -1194,9 +1368,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>80a84bbbb363e1a38f39bb6be8a3f166</string>
+ <string>14cb5c8686a472e9e60179e46cd196f7</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Darwin/installer/libpng-1.6.8-darwin-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297708/arch/Darwin/installer/libpng-1.6.8.297708-darwin-297708.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1206,9 +1380,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>3368a25b361c22a03f7ec7e0f8d5ff9d</string>
+ <string>6dec32fc2527f8cafd616f9271ff3478</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/Linux/installer/libpng-1.6.8-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297051/arch/Linux/installer/libpng-1.6.8.297051-linux-297051.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1218,21 +1392,27 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>596f4798f90941817b1ca5009c24d16a</string>
+ <string>09eb65e66e0230ab01e57e643647a4f1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libpng-update/rev/290558/arch/CYGWIN/installer/libpng-1.6.8-windows-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297708/arch/CYGWIN/installer/libpng-1.6.8.297708-windows-297708.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.6.8.297708</string>
</map>
<key>libuuid</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2004-2008 The OSSP Project &lt;http://www.ossp.org/&gt;</string>
+ <key>description</key>
+ <string>OSSP uuid is a ISO-C:1999 application programming interface (API) and corresponding command line interface (CLI) for the generation of DCE 1.1, ISO/IEC 11578:1996 and RFC 4122 compliant Universally Unique Identifier (UUID). </string>
<key>license</key>
- <string>lgpl</string>
+ <string>UUID</string>
<key>license_file</key>
- <string>LICENSES/libuuid.txt</string>
+ <string>LICENSES/uuid.txt</string>
<key>name</key>
<string>libuuid</string>
<key>platforms</key>
@@ -1242,17 +1422,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>873e8e99d29711df2efa30646dca1795</string>
+ <string>f231b6ec8bc2f050cfb1ee20bd83190d</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libuuid_3p-update-libuuid/rev/295209/arch/Linux/installer/libuuid-1.6.2-linux-295209.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
+ <key>version</key>
+ <string>1.6.2</string>
</map>
<key>libxml2</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved.</string>
+ <key>description</key>
+ <string>Libxml2 is the XML C parser and toolkit developed for the Gnome project.</string>
<key>license</key>
<string>mit</string>
<key>license_file</key>
@@ -1266,9 +1452,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4a5880b8235beb5ca21f1e252a46e342</string>
+ <string>9303f0dd174129e297eca6cc2eb1ab3f</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Darwin/installer/libxml2-2.9.1-darwin-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/Darwin/installer/libxml2-2.9.1.297050-darwin-297050.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1278,9 +1464,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>7eb90f075730f8d7d176f8fb7bad5ef5</string>
+ <string>b8b584853dc1344bb3571c13b06ec39e</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/Linux/installer/libxml2-2.9.1-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/Linux/installer/libxml2-2.9.1.297050-linux-297050.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1290,23 +1476,29 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>ba20e2634b4c249a7064620d135f7972</string>
+ <string>37fa0e86e54f5f283aa653d770fc8ed5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-libxml-update/rev/290562/arch/CYGWIN/installer/libxml2-2.9.1-windows-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/CYGWIN/installer/libxml2-2.9.1.297050-windows-297050.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>2.9.1.297050</string>
</map>
- <key>llappearanceutility-source</key>
+ <key>llappearance_utility</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2000-2012, Linden Research, Inc.</string>
+ <key>description</key>
+ <string>Linden Lab appearance utility for server-side avatar baking services.</string>
<key>license</key>
- <string>TEMPORARY</string>
+ <string>Proprietary</string>
<key>license_file</key>
<string>LICENSES/llappearanceutility.txt</string>
<key>name</key>
- <string>llappearanceutility-source</string>
+ <string>llappearance_utility</string>
<key>platforms</key>
<map>
<key>linux</key>
@@ -1314,21 +1506,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0e15751836ac0492250001b80aea379f</string>
+ <string>ce1261a54d877ab5530ae6a9134a77a3</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearanceutility-source/rev/293888/arch/Linux/installer/llappearanceutility_source-0.1-linux-20140908.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llappearance_viewer-update-llappearance-utility/rev/294906/arch/Linux/installer/llappearance_utility-0.0.1-linux-294906.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
<key>version</key>
- <string>0.1</string>
+ <string>0.0.1</string>
</map>
<key>llphysicsextensions_source</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2010, Linden Research, Inc.</string>
<key>license</key>
- <string>TEMPORARY</string>
+ <string>internal</string>
<key>license_file</key>
<string>LICENSES/llphysicsextensions.txt</string>
<key>name</key>
@@ -1340,11 +1534,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0578fa67ef9906c6aaa326f51db2669f</string>
+ <string>468e88a527e610804c3eecf07f4ed70b</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/Darwin/installer/llphysicsextensions_source-0.3-darwin-20120814.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/Darwin/installer/llphysicsextensions_source-1.0.298369-darwin-298369.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1354,9 +1548,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a6856b4d58a3b71321acad7e1fa9c8d4</string>
+ <string>793964e49c935b414c4bdbb8a0d14ad1</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/265749/arch/Linux/installer/llphysicsextensions_source-0.3-linux-20121011.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/Linux/installer/llphysicsextensions_source-1.0.298369-linux-298369.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1366,21 +1560,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0cebd359ea732a7db363d88f9886a1ef</string>
+ <string>922aad5261aac150e5ce3c094e57f373</string>
<key>url</key>
- <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source/rev/263415/arch/CYGWIN/installer/llphysicsextensions_source-0.3-windows-20120814.tar.bz2</string>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/llphysicsextensions-source_llphysicsextensions-update/rev/298369/arch/CYGWIN/installer/llphysicsextensions_source-1.0.298369-windows-298369.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
<key>version</key>
- <string>0.2</string>
+ <string>1.0.298369</string>
</map>
<key>llphysicsextensions_stub</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2010, Linden Research, Inc.</string>
<key>license</key>
- <string>TEMPORARY</string>
+ <string>internal</string>
<key>license_file</key>
<string>LICENSES/llphysicsextensions.txt</string>
<key>name</key>
@@ -1392,11 +1588,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>3ae798d4dfb54a1d806ee5f8b31f7626</string>
+ <string>1175977a191ffc936fd0ccca433c8278</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Darwin/installer/llphysicsextensions_stub-0.3-darwin-20120814.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/Darwin/installer/llphysicsextensions_stub-1.0.298370-darwin-298370.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1406,9 +1602,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>aa8a2f25e8629cf5e6a96cc0eb93de8e</string>
+ <string>d13d7927692eab2d6a63e36166b72a8a</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/Linux/installer/llphysicsextensions_stub-0.3-linux-20120814.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/Linux/installer/llphysicsextensions_stub-1.0.298370-linux-298370.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1418,21 +1614,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>3ea4cee6a8dd4c89fbfd3ad6abd703c2</string>
+ <string>9594f6fd79ee924fe675a4a23e30516e</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub/rev/263415/arch/CYGWIN/installer/llphysicsextensions_stub-0.3-windows-20120814.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/llphysicsextensions-stub_llphysicsextensions-update/rev/298370/arch/CYGWIN/installer/llphysicsextensions_stub-1.0.298370-windows-298370.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
<key>version</key>
- <string>0.2</string>
+ <string>1.0.298370</string>
</map>
<key>llqtwebkit</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</string>
+ <key>description</key>
+ <string>QT cross-platform application and UI framework.</string>
<key>license</key>
- <string>lgpl</string>
+ <string>LGPL</string>
<key>license_file</key>
<string>LICENSES/llqtwebkit.txt</string>
<key>name</key>
@@ -1445,6 +1645,8 @@
<map>
<key>hash</key>
<string>3c2b6be4c78b2479c3fae612e1053d37</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20141015.tar.bz2</string>
</map>
@@ -1457,6 +1659,8 @@
<map>
<key>hash</key>
<string>d31358176b9ba8c676458cc061767c0b</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/Linux/installer/llqtwebkit-4.7.1-linux-20141015.tar.bz2</string>
</map>
@@ -1469,6 +1673,8 @@
<map>
<key>hash</key>
<string>bb4e8c8006c8a7aef6d3e3c36a8cebbf</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/canonical_3p-llqtwebkit2/rev/295522/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20141015.tar.bz2</string>
</map>
@@ -1476,6 +1682,8 @@
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>4.7.1</string>
</map>
<key>mesa</key>
<map>
@@ -1492,67 +1700,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>1f600840463c7327ea17486821425750</string>
- <key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.tar.bz2</string>
- </map>
- <key>name</key>
- <string>linux</string>
- </map>
- </map>
- </map>
- <key>ndofdev</key>
- <map>
- <key>license</key>
- <string>linden</string>
- <key>license_file</key>
- <string>LICENSES/libndofdev.txt</string>
- <key>name</key>
- <string>ndofdev</string>
- <key>platforms</key>
- <map>
- <key>darwin</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>674d37d2ba76a2df7f18c47bf50b5d03</string>
- <key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-darwin-20110308.tar.bz2</string>
- </map>
- <key>name</key>
- <string>darwin</string>
- </map>
- <key>linux</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>9bf7a96c1d2fadb180fda91740c945c6</string>
+ <string>22c50a5d362cad311b4f413cfcffbba2</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-libndofdev-linux/rev/233137/arch/Linux/installer/libndofdev-0.3-linux-20110617.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/mesa_3p-update-mesa/rev/297294/arch/Linux/installer/mesa-7.11.1.297294-linux-297294.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
- <key>windows</key>
- <map>
- <key>archive</key>
- <map>
- <key>hash</key>
- <string>3a4bec9562ed6ac53e85abcb1afc5fc0</string>
- <key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-windows-20110223.tar.bz2</string>
- </map>
- <key>name</key>
- <string>windows</string>
- </map>
</map>
+ <key>version</key>
+ <string>7.11.1.297294</string>
</map>
<key>nvapi</key>
<map>
+ <key>copyright</key>
+ <string>Copyright © 2012 NVIDIA Corporation. All rights reserved.</string>
+ <key>description</key>
+ <string>NVAPI provides an interface to NVIDIA devices.</string>
<key>license</key>
- <string>NVAPI</string>
+ <string>NVIDIA Corporation Software License Agreement – NVAPI SDK</string>
<key>license_file</key>
<string>LICENSES/NVAPI_SDK_License_Agreement.pdf</string>
<key>name</key>
@@ -1564,23 +1730,29 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>baf519d36dffe4e4a59471450e391d01</string>
+ <string>9e30c9e228d6a825b6774b97ff052973</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-nvapi/rev/267102/arch/CYGWIN/installer/nvapi-304-windows-20121116.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/nvapi_3p-update-nvapi/rev/295118/arch/CYGWIN/installer/nvapi-304-windows-295118.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>304</string>
</map>
- <key>ogg-vorbis</key>
+ <key>ogg_vorbis</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2002, Xiph.org Foundation</string>
+ <key>description</key>
+ <string>Audio encoding library</string>
<key>license</key>
<string>ogg-vorbis</string>
<key>license_file</key>
<string>LICENSES/ogg-vorbis.txt</string>
<key>name</key>
- <string>ogg-vorbis</string>
+ <string>ogg_vorbis</string>
<key>platforms</key>
<map>
<key>darwin</key>
@@ -1588,9 +1760,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>e849bc2b779fb7cc5e81aeb021a542c0</string>
+ <string>07fca1531a27915f642a5c1d95008d54</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2-darwin-20110510.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2.296878-darwin-296878.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1600,9 +1772,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>71eaa462eb0bf8842277a3436483a354</string>
+ <string>b0cd31d5b07a9fc25c4d69ba2f95eace</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2-linux-20110511.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/Linux/installer/ogg_vorbis-1.2.2-1.3.2.296878-linux-296878.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1612,23 +1784,59 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>291dbba89dd8162b76f2c2d82e908c6f</string>
+ <string>f358717739c288ec7401d6d1936ef878</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ogvorbis/rev/229529/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2-windows-20110510.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/CYGWIN/installer/ogg_vorbis-1.2.2-1.3.2.296878-windows-296878.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.2.2-1.3.2.296878</string>
</map>
- <key>openal_soft</key>
+ <key>open-libndofdev</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2008, Jan Ciger (jan.ciger (at) gmail.com)</string>
+ <key>description</key>
+ <string>Open Source replacement for 3DConnection SDK</string>
+ <key>license</key>
+ <string>BSD</string>
+ <key>license_file</key>
+ <string>LICENSES/libndofdev.txt</string>
+ <key>name</key>
+ <string>open-libndofdev</string>
+ <key>platforms</key>
+ <map>
+ <key>linux</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>b1245d467d5914a266efa16afeb55406</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297553/arch/Linux/installer/open_libndofdev-0.3-linux-297553.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>linux</string>
+ </map>
+ </map>
+ <key>version</key>
+ <string>0.3</string>
+ </map>
+ <key>openal</key>
+ <map>
+ <key>copyright</key>
+ <string>Creative Labs</string>
+ <key>description</key>
+ <string>OpenAL is a cross-platform 3D audio API appropriate for use with gaming applications and many other types of audio applications.</string>
<key>license</key>
<string>lgpl</string>
<key>license_file</key>
- <string>LICENSES/OPENAL.txt</string>
+ <string>LICENSES/openal.txt</string>
<key>name</key>
- <string>openal_soft</string>
+ <string>openal</string>
<key>platforms</key>
<map>
<key>linux</key>
@@ -1636,11 +1844,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>fccdca18a950ac9363c6fb39118b80e1</string>
+ <string>15ebe611213c9577691ffbade081549d</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openal_3p-update-openal/rev/297677/arch/Linux/installer/openal-1.12.854-1.1.0.297677-linux-297677.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1650,21 +1858,27 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>04df406f3e5d04cf176660bdac66c3a1</string>
+ <string>3bf6e26aeec71f36c8b6e20c6b883fe9</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openal_3p-update-openal/rev/297677/arch/CYGWIN/installer/openal-1.12.854-1.1.0.297677-windows-297677.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
<key>version</key>
- <string>3ad86a1c</string>
+ <string>1.12.854-1.1.0.297677</string>
</map>
<key>openjpeg</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium, Copyright (c) 2002-2007, Professor Benoit Macq, Copyright (c) 2001-2003, David Janssens, Copyright (c) 2002-2003, Yannick Verschueren, Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe, Copyright (c) 2005, Herve Drolon, FreeImage Team</string>
+ <key>description</key>
+ <string>The OpenJPEG library is an open-source JPEG 2000 codec written in C language.</string>
<key>license</key>
- <string>openjpeg</string>
+ <string>BSD</string>
<key>license_file</key>
<string>LICENSES/openjpeg.txt</string>
<key>name</key>
@@ -1676,9 +1890,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4be51c7cca7d84831e30b63279df7ae5</string>
+ <string>2adb5b8bd2493d576c5d02b992d8f819</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Darwin/installer/openjpeg-1.4.297018-darwin-297018.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1688,9 +1902,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>fb2382014c79e0049746e4e29bd834f9</string>
+ <string>675c283030879d3d9c49082bfa2192eb</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Linux/installer/openjpeg-1.4.297018-linux-297018.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1700,17 +1914,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>ca5765af55f798724d601720afdf6953</string>
+ <string>b35adcf74d22c128045aa87aade74736</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/CYGWIN/installer/openjpeg-1.4.297018-windows-297018.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.4.297018</string>
</map>
<key>openssl</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved; Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)</string>
+ <key>description</key>
+ <string>Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) Library</string>
<key>license</key>
<string>openssl</string>
<key>license_file</key>
@@ -1724,9 +1944,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>4db126327bbb125ea2490c79c73103bf</string>
+ <string>0a77d56769e6075957f614be6575423e</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Darwin/installer/openssl-1.0.1h-darwin-20140605.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/Darwin/installer/openssl-1.0.1h.297168-darwin-297168.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1736,9 +1956,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>0665c18f8cdbe2f90cb0a2f088cfe1a6</string>
+ <string>c310ba9971cbd796b303c3be67fb11c6</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/Linux/installer/openssl-1.0.1h-linux-20140605.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/Linux/installer/openssl-1.0.1h.297168-linux-297168.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1748,17 +1968,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>138997e1a73c65525d45c00f43f08010</string>
+ <string>398743f47578cbb44f5504128780369f</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-openssl-update/rev/290662/arch/CYGWIN/installer/openssl-1.0.1h-windows-20140605.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/CYGWIN/installer/openssl-1.0.1h.297168-windows-297168.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.0.1h.297168</string>
</map>
<key>pcre</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 1997-2014 University of Cambridge; Copyright(c) 2009-2014 Zoltan Herczeg; Copyright (c) 2007-2012, Google Inc.</string>
+ <key>description</key>
+ <string>PCRE Perl-compatible regular expression library</string>
<key>license</key>
<string>bsd</string>
<key>license_file</key>
@@ -1772,9 +1998,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>af0d38a4c56b52c4df40a4ff0d51efef</string>
+ <string>6d2b38897f1adf354b299345d5fc759b</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Darwin/installer/pcre-8.35-darwin-20140529.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/pcre_3p-update-pcre/rev/297155/arch/Darwin/installer/pcre-8.35.-darwin-297155.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1784,9 +2010,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5e6368d39b95f2c0d5162dac2c17c67f</string>
+ <string>b82817bcc2f63094d9c915d018d0b036</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/Linux/installer/pcre-8.35-linux-20140530.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/pcre_3p-update-pcre/rev/297155/arch/Linux/installer/pcre-8.35.-linux-297155.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1796,19 +2022,25 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>9250f74fed826ad1b8700229e964519d</string>
+ <string>96ed836c89a99dfc22f9c16a0d7272d3</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-pcre-update/rev/290406/arch/CYGWIN/installer/pcre-8.35-windows-20140529.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/pcre_3p-update-pcre/rev/297155/arch/CYGWIN/installer/pcre-8.35.-windows-297155.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
</map>
</map>
+ <key>version</key>
+ <string>8.35.</string>
</map>
<key>quicktime</key>
<map>
+ <key>copyright</key>
+ <string>2010 Apple</string>
+ <key>description</key>
+ <string>QuickTime 7.3 SDK for Windows</string>
<key>license</key>
- <string>quicktime</string>
+ <string>unknown</string>
<key>license_file</key>
<string>LICENSES/quicktime.txt</string>
<key>name</key>
@@ -1820,19 +2052,81 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>52e49ab6937b09882389da0dbaec17f5</string>
+ <string>3f8b52280cb1eff2d1acd0214bce1b16</string>
+ <key>url</key>
+ <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/quicktime_3p-update-quicktime/rev/296445/arch/CYGWIN/installer/quicktime-7.3-windows-296445.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>windows</string>
+ </map>
+ </map>
+ <key>version</key>
+ <string>7.3</string>
+ </map>
+ <key>slplugins</key>
+ <map>
+ <key>copyright</key>
+ <string>Second Life Viewer Source Code - Copyright (C) 2010, Linden Research, Inc.</string>
+ <key>description</key>
+ <string>Second Life Viewer Plugins and launcher</string>
+ <key>license</key>
+ <string>LGPL</string>
+ <key>license_file</key>
+ <string>LICENSES/slplugins-license.txt</string>
+ <key>name</key>
+ <string>slplugins</string>
+ <key>platforms</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>f6bfb026572f03a4c8ac6b2b7d7eb0ae</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slplugins_3p-update-slplugins/rev/298079/arch/Darwin/installer/slplugins-3.7.24.297623.298079-darwin-298079.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>darwin</string>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>64b8a3bac95b5888a7ede3d7661a18b8</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slplugins_3p-update-slplugins/rev/298079/arch/Linux/installer/slplugins-3.7.24.297623.298079-linux-298079.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>linux</string>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>3a1ea3385303b78b0327c8cea929ef27</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slplugins_3p-update-slplugins/rev/298079/arch/CYGWIN/installer/slplugins-3.7.24.297623.298079-windows-298079.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>3.7.24.297623.298079</string>
</map>
<key>slvoice</key>
<map>
+ <key>copyright</key>
+ <string>2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C)</string>
+ <key>description</key>
+ <string>Vivox SDK components</string>
<key>license</key>
- <string>vivox</string>
+ <string>Mixed</string>
<key>license_file</key>
<string>LICENSES/slvoice.txt</string>
<key>name</key>
@@ -1844,9 +2138,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>88181b9f66b7db650e0d571bbb632bdc</string>
+ <string>68a8fab5ad3a180487598d3a3e0d57b1</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/287264/arch/Darwin/installer/slvoice-4.6.0009.20030-darwin-20140226.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/Darwin/installer/slvoice-4.6.0017.21209.298329-darwin-298329.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1856,9 +2150,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>957773fff7148ffaca42b1ea4a18d192</string>
+ <string>48ed7ddcf93fa3c751d677f5eb5f9367</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/270512/arch/Linux/installer/slvoice-4.5.0009.17865-linux-20130216.tar.bz2</string>
+ <string>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</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1868,17 +2162,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>ce89b881ee24977641d1ecbf8aff6dc7</string>
+ <string>399afab7047e6fa62e7b2fb1768059ea</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-slvoice/rev/287264/arch/CYGWIN/installer/slvoice-4.6.0009.20030-windows-20140227.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/slvoice_3p-update-slvoice/rev/298329/arch/CYGWIN/installer/slvoice-4.6.0017.21209.298329-windows-298329.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>4.6.0017.21209.2988329</string>
</map>
<key>tut</key>
<map>
+ <key>copyright</key>
+ <string>Copyright 2002-2006 Vladimir Dyuzhev, Copyright 2007 Denis Kononenko, Copyright 2008-2009 Michał Rzechonek</string>
+ <key>description</key>
+ <string>TUT is a small and portable unit test framework for C++.</string>
<key>license</key>
<string>bsd</string>
<key>license_file</key>
@@ -1892,17 +2192,77 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5c6d3e606f027e78f056cb77b20f228e</string>
+ <string>2f32faa00e600911f838a7d82da5a8db</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/tut_3p-update-tut/rev/297257/arch/Linux/installer/tut-2008.11.30-common-297257.tar.bz2</string>
</map>
<key>name</key>
<string>common</string>
</map>
</map>
+ <key>version</key>
+ <string>2008.11.30</string>
+ </map>
+ <key>uriparser</key>
+ <map>
+ <key>copyright</key>
+ <string>Copyright (C) 2007, Weijia Song &lt;songweijia@gmail.com&gt;, Sebastian Pipping &lt;webmaster@hartwork.org&gt;</string>
+ <key>description</key>
+ <string>uriparser is a strictly RFC 3986 compliant URI parsing and handling library written in C. uriparser is cross-platform, fast, supports Unicode and is licensed under the New BSD license.</string>
+ <key>license</key>
+ <string>New BSD license</string>
+ <key>license_file</key>
+ <string>LICENSES/uriparser.txt</string>
+ <key>name</key>
+ <string>uriparser</string>
+ <key>platforms</key>
+ <map>
+ <key>darwin</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>22608adaf54e8ddc9182a719ba6e2b32</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Darwin/installer/uriparser-0.8.0.1-darwin-299435.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>darwin</string>
+ </map>
+ <key>linux</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>dddfc8dea540801f93ba0382cb1e3685</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Linux/installer/uriparser-0.8.0.1-linux-299435.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>linux</string>
+ </map>
+ <key>windows</key>
+ <map>
+ <key>archive</key>
+ <map>
+ <key>hash</key>
+ <string>e4520158dda88453e46942eab6f9c0a8</string>
+ <key>url</key>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/CYGWIN/installer/uriparser-0.8.0.1-windows-299435.tar.bz2</string>
+ </map>
+ <key>name</key>
+ <string>windows</string>
+ </map>
+ </map>
+ <key>version</key>
+ <string>0.8.0.1</string>
</map>
<key>xmlrpc-epi</key>
<map>
+ <key>copyright</key>
+ <string>Copyright: (C) 2000 Epinions, Inc.</string>
+ <key>description</key>
+ <string>XMLRPC Library</string>
<key>license</key>
<string>xmlrpc-epi</string>
<key>license_file</key>
@@ -1916,9 +2276,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>a3e0fb4b4a51b01690a99747a1cca531</string>
+ <string>ffd3aab8e0c0ff6dadbce49ca2809078</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/Darwin/installer/xmlrpc_epi-0.54.1.297075-darwin-297075.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1928,9 +2288,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>174ab797440157956eda7061dae37564</string>
+ <string>30bb26d6cc78c16047fc85a63f48fcdb</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/Linux/installer/xmlrpc_epi-0.54.1.297075-linux-297075.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1940,17 +2300,23 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>5181d1a8f2516928ac064d72acf164a4</string>
+ <string>a7e1a8369a5afd52e1b6fc1f14155033</string>
<key>url</key>
- <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/CYGWIN/installer/xmlrpc_epi-0.54.1.297075-windows-297075.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>0.54.1.297075</string>
</map>
<key>zlib</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler</string>
+ <key>description</key>
+ <string>Zlib Data Compression Library</string>
<key>license</key>
<string>zlib</string>
<key>license_file</key>
@@ -1964,9 +2330,9 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>6658071e3b54b1dd5f5279227aff402a</string>
+ <string>1a79eeac199c2d94e4ae4e5d0194e25f</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Darwin/installer/zlib-1.2.8-darwin-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/Darwin/installer/zlib-1.2.8.296881-darwin-296881.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@@ -1976,9 +2342,11 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>63a62bb3cbef2aad3cca49cb6f2d0aeb</string>
+ <string>2eb8e59b6464222dcf4435016ad5f618</string>
+ <key>hash_algorithm</key>
+ <string>md5</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/Linux/installer/zlib-1.2.8-linux-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/Linux/installer/zlib-1.2.8.296881-linux-296881.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>
@@ -1988,22 +2356,28 @@
<key>archive</key>
<map>
<key>hash</key>
- <string>ab45a628e22a495814e806ce46081806</string>
+ <string>ae420ec6d30411c07aac2502d7bbc0f3</string>
<key>url</key>
- <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3pl_3p-zlib-update/rev/290556/arch/CYGWIN/installer/zlib-1.2.8-windows-20140602.tar.bz2</string>
+ <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/CYGWIN/installer/zlib-1.2.8.296881-windows-296881.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
</map>
</map>
+ <key>version</key>
+ <string>1.2.8.296881</string>
</map>
</map>
<key>package_description</key>
<map>
+ <key>copyright</key>
+ <string>Copyright (c) 2014, Linden Research, Inc.</string>
<key>description</key>
<string>Second Life Viewer</string>
<key>license</key>
<string>LGPL</string>
+ <key>license_file</key>
+ <string>docs/LICENSE-source.txt</string>
<key>name</key>
<string>Second Life Viewer</string>
<key>platforms</key>
@@ -2012,47 +2386,6 @@
<map>
<key>configurations</key>
<map>
- <key>Debug</key>
- <map>
- <key>build</key>
- <map>
- </map>
- <key>configure</key>
- <map>
- <key>command</key>
- <string>cmake</string>
- <key>options</key>
- <array>
- <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
- <string>-DWORD_SIZE:STRING=32</string>
- <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
- <string>-DINSTALL_PROPRIETARY=TRUE</string>
- </array>
- </map>
- <key>name</key>
- <string>Debug</string>
- </map>
- <key>DebugOS</key>
- <map>
- <key>configure</key>
- <map>
- <key>arguments</key>
- <array>
- <string>../indra</string>
- </array>
- <key>command</key>
- <string>cmake</string>
- <key>options</key>
- <array>
- <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
- <string>-DWORD_SIZE:STRING=32</string>
- <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
- <string>-DINSTALL_PROPRIETARY=FALSE</string>
- </array>
- </map>
- <key>name</key>
- <string>DebugOS</string>
- </map>
<key>RelWithDebInfo</key>
<map>
<key>build</key>
@@ -2145,60 +2478,6 @@
<string>build-darwin-i386</string>
<key>configurations</key>
<map>
- <key>Debug</key>
- <map>
- <key>build</key>
- <map>
- <key>command</key>
- <string>xcodebuild</string>
- <key>filters</key>
- <array>
- <string>setenv</string>
- </array>
- <key>options</key>
- <array>
- <string>-configuration Debug</string>
- <string>-project SecondLife.xcodeproj</string>
- </array>
- </map>
- <key>configure</key>
- <map>
- <key>arguments</key>
- <array>
- <string>../indra</string>
- </array>
- <key>options</key>
- <array>
- <string>-G</string>
- <string>'Xcode'</string>
- </array>
- </map>
- <key>name</key>
- <string>Debug</string>
- </map>
- <key>DebugOS</key>
- <map>
- <key>build</key>
- <map>
- <key>command</key>
- <string>xcodebuild</string>
- <key>options</key>
- <array>
- <string>-configuration Debug</string>
- <string>-project SecondLife.xcodeproj</string>
- </array>
- </map>
- <key>configure</key>
- <map>
- <key>options</key>
- <array>
- <string>-G</string>
- <string>'Xcode'</string>
- </array>
- </map>
- <key>name</key>
- <string>DebugOS</string>
- </map>
<key>RelWithDebInfo</key>
<map>
<key>build</key>
@@ -2323,54 +2602,6 @@
<string>build-linux-i686</string>
<key>configurations</key>
<map>
- <key>Debug</key>
- <map>
- <key>build</key>
- <map>
- <key>command</key>
- <string>make</string>
- <key>options</key>
- <array>
- <string>-j 12</string>
- </array>
- </map>
- <key>configure</key>
- <map>
- <key>arguments</key>
- <array>
- <string>../indra</string>
- </array>
- <key>options</key>
- <array>
- <string>-G</string>
- <string>'Unix Makefiles'</string>
- </array>
- </map>
- <key>name</key>
- <string>Debug</string>
- </map>
- <key>DebugOS</key>
- <map>
- <key>build</key>
- <map>
- <key>command</key>
- <string>make</string>
- <key>options</key>
- <array>
- <string>-j 7</string>
- </array>
- </map>
- <key>configure</key>
- <map>
- <key>options</key>
- <array>
- <string>-G</string>
- <string>'Unix Makefiles'</string>
- </array>
- </map>
- <key>name</key>
- <string>DebugOS</string>
- </map>
<key>RelWithDebInfo</key>
<map>
<key>build</key>
@@ -2484,94 +2715,9 @@
<key>windows</key>
<map>
<key>build_directory</key>
- <string>build-vc100</string>
+ <string>build-vc120</string>
<key>configurations</key>
<map>
- <key>Debug</key>
- <map>
- <key>build</key>
- <map>
- <key>arguments</key>
- <array>
- <string>SecondLife.sln</string>
- </array>
- <key>command</key>
- <string>BuildConsole</string>
- <key>options</key>
- <array>
- <string>/build</string>
- <string>"/cfg=Debug|Win32"</string>
- </array>
- </map>
- <key>configure</key>
- <map>
- <key>arguments</key>
- <array>
- <string>..\indra</string>
- <string>&amp;&amp;</string>
- <string>..\indra\tools\vstool\VSTool.exe</string>
- <string>--solution</string>
- <string>SecondLife.sln</string>
- <string>--config</string>
- <string>Debug</string>
- <string>--startup</string>
- <string>secondlife-bin</string>
- </array>
- <key>options</key>
- <array>
- <string>-G</string>
- <string>"Visual Studio 10"</string>
- </array>
- </map>
- <key>name</key>
- <string>Debug</string>
- </map>
- <key>DebugOS</key>
- <map>
- <key>build</key>
- <map>
- <key>arguments</key>
- <array>
- <string>SecondLife.sln</string>
- </array>
- <key>command</key>
- <string>msbuild.exe</string>
- <key>options</key>
- <array>
- <string>/p:Configuration=Debug</string>
- <string>/p:Platform=Win32</string>
- <string>/t:Build</string>
- <string>/p:useenv=true</string>
- <string>/verbosity:minimal</string>
- <string>/toolsversion:4.0</string>
- <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
- </array>
- </map>
- <key>configure</key>
- <map>
- <key>arguments</key>
- <array>
- <string>..\indra</string>
- <string>&amp;&amp;</string>
- <string>..\indra\tools\vstool\VSTool.exe</string>
- <string>--solution</string>
- <string>SecondLife.sln</string>
- <string>--config</string>
- <string>Debug</string>
- <string>--startup</string>
- <string>secondlife-bin</string>
- </array>
- <key>options</key>
- <array>
- <string>-G</string>
- <string>"Visual Studio 10"</string>
- <string>-DUNATTENDED:BOOL=ON</string>
- <string>-DUSE_KDU=FALSE</string>
- </array>
- </map>
- <key>name</key>
- <string>DebugOS</string>
- </map>
<key>RelWithDebInfo</key>
<map>
<key>build</key>
@@ -2581,11 +2727,11 @@
<string>SecondLife.sln</string>
</array>
<key>command</key>
- <string>BuildConsole</string>
+ <string>devenv</string>
<key>options</key>
<array>
<string>/build</string>
- <string>"/cfg=RelWithDebInfo|Win32"</string>
+ <string>"RelWithDebInfo|Win32"</string>
</array>
</map>
<key>configure</key>
@@ -2605,7 +2751,7 @@
<key>options</key>
<array>
<string>-G</string>
- <string>"Visual Studio 10"</string>
+ <string>"Visual Studio 12"</string>
</array>
</map>
<key>default</key>
@@ -2651,7 +2797,7 @@
<key>options</key>
<array>
<string>-G</string>
- <string>"Visual Studio 10"</string>
+ <string>"Visual Studio 12"</string>
<string>-DUNATTENDED:BOOL=ON</string>
<string>-DINSTALL_PROPRIETARY=FALSE</string>
<string>-DUSE_KDU=FALSE</string>
@@ -2669,11 +2815,11 @@
<string>SecondLife.sln</string>
</array>
<key>command</key>
- <string>BuildConsole</string>
+ <string>devenv</string>
<key>options</key>
<array>
<string>/build</string>
- <string>"/cfg=Release|Win32"</string>
+ <string>"Release|Win32"</string>
</array>
</map>
<key>configure</key>
@@ -2693,7 +2839,7 @@
<key>options</key>
<array>
<string>-G</string>
- <string>"Visual Studio 10"</string>
+ <string>"Visual Studio 12"</string>
</array>
</map>
<key>name</key>
@@ -2737,7 +2883,7 @@
<key>options</key>
<array>
<string>-G</string>
- <string>"Visual Studio 10"</string>
+ <string>"Visual Studio 12"</string>
<string>-DUNATTENDED:BOOL=ON</string>
<string>-DINSTALL_PROPRIETARY=FALSE</string>
<string>-DUSE_KDU=FALSE</string>
@@ -2751,12 +2897,12 @@
<string>windows</string>
</map>
</map>
- <key>version</key>
- <string>1.0</string>
+ <key>version_file</key>
+ <string>newview/viewer_version.txt</string>
</map>
<key>type</key>
<string>autobuild</string>
<key>version</key>
- <string>1.2</string>
+ <string>1.3</string>
</map>
</llsd>
diff --git a/build.sh b/build.sh
index f908139979..b66d1a0705 100755
--- a/build.sh
+++ b/build.sh
@@ -1,6 +1,7 @@
#!/bin/sh
-# This is a the master build script - it is intended to be run by parabuild
+# This is a the master build script - it is intended to be run by the Linden
+# Lab build farm
# It is called by a wrapper script in the shared repository which sets up
# the environment from the various BuildParams files and does all the build
# result post-processing.
@@ -12,8 +13,6 @@
# * The special style in which python is invoked is intentional to permit
# use of a native python install on windows - which requires paths in DOS form
# * This script relies heavily on parameters defined in BuildParams
-# * The basic convention is that the build name can be mapped onto a mercurial URL,
-# which is also used as the "branch" name.
check_for()
{
@@ -33,7 +32,7 @@ build_dir_Linux()
build_dir_CYGWIN()
{
- echo build-vc100
+ echo build-vc120
}
viewer_channel_suffix()
@@ -102,7 +101,7 @@ pre_build()
check_for "Confirm dictionaries are installed before 'autobuild configure'" ${build_dir}/packages/dictionaries
- "$AUTOBUILD" configure -c $variant -- \
+ "$autobuild" configure -c $variant -- \
-DPACKAGE:BOOL=ON \
-DRELEASE_CRASH_REPORTING:BOOL=ON \
-DVIEWER_CHANNEL:STRING="\"$viewer_channel\"" \
@@ -120,14 +119,20 @@ package_llphysicsextensions_tpv()
if [ "$variant" = "Release" ]
then
llpetpvcfg=$build_dir/packages/llphysicsextensions/autobuild-tpv.xml
- "$AUTOBUILD" build --verbose --config-file $llpetpvcfg -c Tpv
+ "$autobuild" build --verbose --config-file $llpetpvcfg -c Tpv
# capture the package file name for use in upload later...
PKGTMP=`mktemp -t pgktpv.XXXXXX`
trap "rm $PKGTMP* 2>/dev/null" 0
- "$AUTOBUILD" package --verbose --config-file $llpetpvcfg > $PKGTMP
+ "$autobuild" package --verbose --config-file $llpetpvcfg --results-file "$(native_path $PKGTMP)"
tpv_status=$?
- sed -n -e 's/^wrote *//p' $PKGTMP > $build_dir/llphysicsextensions_package
+ if [ -r "${PKGTMP}" ]
+ then
+ cat "${PKGTMP}" >> "$build_log"
+ eval $(cat "${PKGTMP}") # sets autobuild_package_{name,filename,md5}
+ autobuild_package_filename="$(shell_path "${autobuild_package_filename}")"
+ echo "${autobuild_package_filename}" > $build_dir/llphysicsextensions_package
+ fi
else
echo "Do not provide llphysicsextensions_tpv for $variant"
llphysicsextensions_package=""
@@ -143,7 +148,7 @@ build()
then
begin_section "Viewer$variant"
- "$AUTOBUILD" build --no-configure -c $variant
+ "$autobuild" build --no-configure -c $variant
build_ok=$?
end_section "Viewer$variant"
@@ -172,11 +177,22 @@ build()
# This is called from the branch independent script upon completion of all platform builds.
build_docs()
{
- begin_section Docs
- # Stub code to generate docs
- echo Hello world > documentation.txt
- upload_item docs documentation.txt text/plain
- end_section Docs
+ begin_section "Building Documentation"
+ begin_section "Autobuild metadata"
+ if [ -r "$build_dir/autobuild-package.xml" ]
+ then
+ upload_item docs "$build_dir/autobuild-package.xml" text/xml
+ else
+ record_event "no metadata at '$build_dir/autobuild-package.xml'"
+ fi
+ end_section "Autobuild metadata"
+ if [ "$arch" != "Linux" ]
+ then
+ record_dependencies_graph # defined in build.sh
+ else
+ echo "TBD - skipping linux graph (probable python version dependency)" 1>&2
+ fi
+ end_section "Building Documentation"
}
@@ -200,33 +216,23 @@ fi
# Check to see if we're skipping the platform
eval '$build_'"$arch" || pass
-if [ -z "$AUTOBUILD" ]
+# ensure AUTOBUILD is in native path form for child processes
+AUTOBUILD="$(native_path "$AUTOBUILD")"
+# set "$autobuild" to cygwin path form for use locally in this script
+autobuild="$(shell_path "$AUTOBUILD")"
+if [ ! -x "$autobuild" ]
then
- export autobuild_dir="$here/../../../autobuild/bin/"
- if [ -d "$autobuild_dir" ]
- then
- export AUTOBUILD="$autobuild_dir"autobuild
- if [ -x "$AUTOBUILD" ]
- then
- # *HACK - bash doesn't know how to pass real pathnames to native windows python
- case "$arch" in
- CYGWIN) AUTOBUILD=$(cygpath -u $AUTOBUILD.cmd) ;;
- esac
- else
- record_failure "Not executable: $AUTOBUILD"
- exit 1
- fi
- else
- record_failure "Not found: $autobuild_dir"
- exit 1
- fi
+ record_failure "AUTOBUILD not executable: '$autobuild'"
+ exit 1
fi
-# load autbuild provided shell functions and variables
-eval "$("$AUTOBUILD" source_environment)"
+# load autobuild provided shell functions and variables
+eval "$("$autobuild" source_environment)"
# dump environment variables for debugging
+begin_section "Environment"
env|sort
+end_section "Environment"
# Now run the build
succeeded=true
@@ -276,6 +282,8 @@ do
end_section "Do$variant"
done
+build_docs
+
# If we are building variants in parallel, wait, then collect results.
# This requires that the build dirs are variant specific
if $build_link_parallel && [ x"$build_processes" != x ]
@@ -375,7 +383,6 @@ then
fi
fi
-
# check status and upload results to S3
if $succeeded
then
diff --git a/doc/contributions.txt b/doc/contributions.txt
index 18acb18911..211d4fcf08 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -313,7 +313,9 @@ Ciaran Laval
Cinder Roxley
BUG-2326
BUG-3863
+ BUG-8786
OPEN-185
+ OPEN-282
STORM-1703
STORM-1948
STORM-1831
@@ -325,6 +327,7 @@ Cinder Roxley
STORM-2036
STORM-2037
STORM-2053
+ STORM-2113
Clara Young
Coaldust Numbers
VWR-1095
@@ -357,6 +360,7 @@ Decro Schmooz
Denim Kamachi
DiJodi Dubratt
Dil Spitz
+ MAINT-4455
Dimitrio Lewis
Dirk
Draconis Neurocam
@@ -1228,8 +1232,10 @@ Sovereign Engineer
MAINT-2334
OPEN-189
STORM-1972
+ STORM-2113
OPEN-195
OPEN-217
+ OPEN-295
SpacedOut Frye
VWR-34
VWR-45
@@ -1271,6 +1277,7 @@ TankMaster Finesmith
OPEN-140
OPEN-142
OPEN-154
+ OPEN-295
STORM-1100
STORM-1258
STORM-1602
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 24ea59ca49..10692402a5 100755
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -20,12 +20,6 @@ if (NOT CMAKE_BUILD_TYPE)
"Build type. One of: Debug Release RelWithDebInfo" FORCE)
endif (NOT CMAKE_BUILD_TYPE)
-# For the library installation process;
-# see cmake/Prebuild.cmake for the counterpart code.
-if ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${CMAKE_BINARY_DIR}/temp/sentinel_installed")
- file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/temp)
- file(WRITE ${CMAKE_BINARY_DIR}/temp/sentinel_installed "0")
-endif ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${CMAKE_BINARY_DIR}/temp/sentinel_installed")
add_subdirectory(cmake)
add_subdirectory(${LIBS_OPEN_PREFIX}llaudio)
@@ -60,6 +54,7 @@ add_subdirectory(${LIBS_OPEN_PREFIX}viewer_components)
# Legacy C++ tests. Build always, run if LL_TESTS is true.
add_subdirectory(${VIEWER_PREFIX}test)
+if (ENABLE_MEDIA_PLUGINS)
# viewer media plugins
add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
@@ -68,6 +63,7 @@ add_subdirectory(${LIBS_OPEN_PREFIX}media_plugins)
add_subdirectory(${VIEWER_PREFIX}test_apps/llplugintest)
add_subdirectory(${VIEWER_PREFIX}test_apps/llfbconnecttest)
endif (LL_TESTS AND NOT LINUX)
+endif (ENABLE_MEDIA_PLUGINS)
if (LINUX)
add_subdirectory(${VIEWER_PREFIX}linux_crash_logger)
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 52b0f4e8b4..7a320ffc59 100755
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -49,12 +49,13 @@ if (WINDOWS)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP -D_SCL_SECURE_NO_WARNINGS=1"
CACHE STRING "C++ compiler debug options" FORCE)
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
- "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob0 -D_SECURE_STL=0"
+ "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /Zo /MD /MP /Ob0 -D_SECURE_STL=0"
CACHE STRING "C++ compiler release-with-debug options" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE
- "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
+ "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /Zo /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
CACHE STRING "C++ compiler release options" FORCE)
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE")
+ # zlib has assembly-language object files incompatible with SAFESEH
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /LARGEADDRESSAWARE /SAFESEH:NO /NODEFAULTLIB:LIBCMT")
set(CMAKE_CXX_STANDARD_LIBRARIES "")
set(CMAKE_C_STANDARD_LIBRARIES "")
@@ -190,22 +191,28 @@ if (DARWIN)
add_definitions(-DLL_DARWIN=1)
set(CMAKE_CXX_LINK_FLAGS "-Wl,-no_compact_unwind -Wl,-headerpad_max_install_names,-search_paths_first")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
- set(DARWIN_extra_cstar_flags "-mlong-branch -g")
+ set(DARWIN_extra_cstar_flags "-g")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DARWIN_extra_cstar_flags}")
# NOTE: it's critical that the optimization flag is put in front.
# NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O0 ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
- if (XCODE_VERSION GREATER 4.2)
- set(ENABLE_SIGNING TRUE)
- set(SIGNING_IDENTITY "Developer ID Application: Linden Research, Inc.")
- endif (XCODE_VERSION GREATER 4.2)
+ set(ENABLE_SIGNING TRUE)
+ set(SIGNING_IDENTITY "Developer ID Application: Linden Research, Inc.")
endif (DARWIN)
if (LINUX OR DARWIN)
- set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
+ if (CMAKE_CXX_COMPILER MATCHES ".*clang")
+ set(CMAKE_COMPILER_IS_CLANGXX 1)
+ endif (CMAKE_CXX_COMPILER MATCHES ".*clang")
+
+ if (CMAKE_COMPILER_IS_GNUCXX)
+ set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
+ elseif (CMAKE_COMPILER_IS_CLANGXX)
+ set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs")
+ endif()
if (NOT GCC_DISABLE_FATAL_WARNINGS)
set(GCC_WARNINGS "${GCC_WARNINGS} -Werror")
diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake
index 876b7f82a8..f95439245a 100755
--- a/indra/cmake/Audio.cmake
+++ b/indra/cmake/Audio.cmake
@@ -8,7 +8,7 @@ if (USESYSTEMLIBS)
pkg_check_modules(VORBISENC REQUIRED vorbisenc)
pkg_check_modules(VORBISFILE REQUIRED vorbisfile)
else (USESYSTEMLIBS)
- use_prebuilt_binary(ogg-vorbis)
+ use_prebuilt_binary(ogg_vorbis)
set(VORBIS_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
set(VORBISENC_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
set(VORBISFILE_INCLUDE_DIRS ${VORBIS_INCLUDE_DIRS})
diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake
index 5f6b644a15..ee670ac650 100755
--- a/indra/cmake/BerkeleyDB.cmake
+++ b/indra/cmake/BerkeleyDB.cmake
@@ -1,5 +1,5 @@
# -*- cmake -*-
-
+include(Prebuilt)
set(DB_FIND_QUIETLY ON)
set(DB_FIND_REQUIRED ON)
diff --git a/indra/cmake/BuildPackagesInfo.cmake b/indra/cmake/BuildPackagesInfo.cmake
new file mode 100644
index 0000000000..0f574ee39a
--- /dev/null
+++ b/indra/cmake/BuildPackagesInfo.cmake
@@ -0,0 +1,10 @@
+# -*- cmake -*-
+# Construct the version and copyright information based on package data.
+include(Python)
+
+add_custom_command(OUTPUT packages-info.txt
+ COMMENT Generating packages-info.txt for the about box
+ MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/../autobuild.xml
+ DEPENDS ${CMAKE_SOURCE_DIR}/../scripts/packages-formatter.py
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/../scripts/packages-formatter.py > packages-info.txt
+ )
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index 10a23ea068..cd7da5d6c1 100755
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -23,7 +23,7 @@ set(cmake_SOURCE_FILES
DirectX.cmake
DragDrop.cmake
EXPAT.cmake
- ExamplePlugin.cmake
+## ExamplePlugin.cmake
FindAPR.cmake
FindAutobuild.cmake
FindBerkeleyDB.cmake
@@ -37,6 +37,7 @@ set(cmake_SOURCE_FILES
FindNDOF.cmake
FindOpenJPEG.cmake
FindSCP.cmake
+ FindURIPARSER.cmake
FindXmlRpcEpi.cmake
FindZLIB.cmake
FMODEX.cmake
@@ -44,9 +45,9 @@ set(cmake_SOURCE_FILES
GLEXT.cmake
GLH.cmake
GLOD.cmake
- GStreamer010Plugin.cmake
+## GStreamer010Plugin.cmake
GetPrerequisites_2_8.cmake
- Glui.cmake
+## Glui.cmake
Glut.cmake
GoogleBreakpad.cmake
GoogleMock.cmake
@@ -81,26 +82,27 @@ set(cmake_SOURCE_FILES
LLXML.cmake
LScript.cmake
Linking.cmake
- MediaPluginBase.cmake
+## MediaPluginBase.cmake
NDOF.cmake
OPENAL.cmake
OpenGL.cmake
OpenJPEG.cmake
OpenSSL.cmake
PNG.cmake
- PluginAPI.cmake
+## PluginAPI.cmake
Prebuilt.cmake
PulseAudio.cmake
Python.cmake
- QuickTimePlugin.cmake
+## QuickTimePlugin.cmake
TemplateCheck.cmake
Tut.cmake
UI.cmake
UnixInstall.cmake
+ URIPARSER.cmake
Variables.cmake
ViewerMiscLibs.cmake
VisualLeakDetector.cmake
- WebKitLibPlugin.cmake
+## WebKitLibPlugin.cmake
XmlRpcEpi.cmake
ZLIB.cmake
)
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 28202f85d6..84947adaae 100755
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -66,126 +66,80 @@ if(WINDOWS)
set(release_files ${release_files} fmodex.dll)
endif (FMODEX)
-#*******************************
-# Copy MS C runtime dlls, required for packaging.
-# *TODO - Adapt this to support VC9
-if (MSVC80)
- FIND_PATH(debug_msvc8_redist_path msvcr80d.dll
- PATHS
- ${MSVC_DEBUG_REDIST_PATH}
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT
- NO_DEFAULT_PATH
- NO_DEFAULT_PATH
- )
-
- if(EXISTS ${debug_msvc8_redist_path})
- set(debug_msvc8_files
- msvcr80d.dll
- msvcp80d.dll
- Microsoft.VC80.DebugCRT.manifest
- )
-
- copy_if_different(
- ${debug_msvc8_redist_path}
- "${SHARED_LIB_STAGING_DIR_DEBUG}"
- out_targets
- ${debug_msvc8_files}
- )
- set(third_party_targets ${third_party_targets} ${out_targets})
-
- endif (EXISTS ${debug_msvc8_redist_path})
-
- FIND_PATH(release_msvc8_redist_path msvcr80.dll
- PATHS
- ${MSVC_REDIST_PATH}
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT
- NO_DEFAULT_PATH
- NO_DEFAULT_PATH
- )
-
- if(EXISTS ${release_msvc8_redist_path})
- set(release_msvc8_files
- msvcr80.dll
- msvcp80.dll
- Microsoft.VC80.CRT.manifest
- )
-
- copy_if_different(
- ${release_msvc8_redist_path}
- "${SHARED_LIB_STAGING_DIR_RELEASE}"
- out_targets
- ${release_msvc8_files}
- )
- set(third_party_targets ${third_party_targets} ${out_targets})
-
- copy_if_different(
- ${release_msvc8_redist_path}
- "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
- out_targets
- ${release_msvc8_files}
- )
- set(third_party_targets ${third_party_targets} ${out_targets})
-
- endif (EXISTS ${release_msvc8_redist_path})
-elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
- FIND_PATH(debug_msvc10_redist_path msvcr100d.dll
+ #*******************************
+ # Copy MS C runtime dlls, required for packaging.
+ # *TODO - Adapt this to support VC9
+ if (MSVC80)
+ set(MSVC_VER 80)
+ set(MSVC_VERDOT 8.0)
+ elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
+ set(MSVC_VER 100)
+ set(MSVC_VERDOT 10.0)
+ elseif (MSVC_VERSION EQUAL 1800) # VisualStudio 2013, which is (sigh) VS 12
+ set(MSVC_VER 120)
+ set(MSVC_VERDOT 12.0)
+ else (MSVC80)
+ MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake")
+ endif (MSVC80)
+
+ FIND_PATH(debug_msvc_redist_path msvcr${MSVC_VER}d.dll
PATHS
${MSVC_DEBUG_REDIST_PATH}
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC100.DebugCRT
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC${MSVC_VER}.DebugCRT
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
NO_DEFAULT_PATH
)
- if(EXISTS ${debug_msvc10_redist_path})
- set(debug_msvc10_files
- msvcr100d.dll
- msvcp100d.dll
+ if(EXISTS ${debug_msvc_redist_path})
+ set(debug_msvc_files
+ msvcr${MSVC_VER}d.dll
+ msvcp${MSVC_VER}d.dll
)
copy_if_different(
- ${debug_msvc10_redist_path}
+ ${debug_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_DEBUG}"
out_targets
- ${debug_msvc10_files}
+ ${debug_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
endif ()
- FIND_PATH(release_msvc10_redist_path msvcr100.dll
+ FIND_PATH(release_msvc_redist_path msvcr${MSVC_VER}.dll
PATHS
${MSVC_REDIST_PATH}
- [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC100.CRT
+ [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC${MSVC_VER}.CRT
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
NO_DEFAULT_PATH
)
- if(EXISTS ${release_msvc10_redist_path})
- set(release_msvc10_files
- msvcr100.dll
- msvcp100.dll
+ if(EXISTS ${release_msvc_redist_path})
+ set(release_msvc_files
+ msvcr${MSVC_VER}.dll
+ msvcp${MSVC_VER}.dll
)
copy_if_different(
- ${release_msvc10_redist_path}
+ ${release_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_RELEASE}"
out_targets
- ${release_msvc10_files}
+ ${release_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
copy_if_different(
- ${release_msvc10_redist_path}
+ ${release_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
out_targets
- ${release_msvc10_files}
+ ${release_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
endif ()
-endif (MSVC80)
+
elseif(DARWIN)
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug/Resources")
diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake
index d148a35a5b..5e46b6711a 100755
--- a/indra/cmake/DBusGlib.cmake
+++ b/indra/cmake/DBusGlib.cmake
@@ -7,7 +7,7 @@ if (USESYSTEMLIBS)
pkg_check_modules(DBUSGLIB REQUIRED dbus-glib-1)
elseif (LINUX)
- use_prebuilt_binary(dbusglib)
+ use_prebuilt_binary(dbus_glib)
set(DBUSGLIB_FOUND ON FORCE BOOL)
set(DBUSGLIB_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include/dbus
diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake
index 4b5fd484ae..ea5ad6d108 100755
--- a/indra/cmake/FindAutobuild.cmake
+++ b/indra/cmake/FindAutobuild.cmake
@@ -4,14 +4,18 @@
#
# Output variables:
#
-# AUTOBUILD_EXECUTABLE - path to autobuild or pautobuild executable
+# AUTOBUILD_EXECUTABLE - path to autobuild executable
+
-# *TODO - if cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var
-# update this to check for that case
IF (NOT AUTOBUILD_EXECUTABLE)
+
+ # If cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var
+ IF (DEFINED ENV{AUTOBUILD})
+ SET(AUTOBUILD_EXECUTABLE $ENV{AUTOBUILD})
+ ELSE (DEFINED ENV{AUTOBUILD})
IF(WIN32)
- SET(AUTOBUILD_EXE_NAMES autobuild.cmd autobuild.exe)
+ SET(AUTOBUILD_EXE_NAMES autobuild.exe autobuild.cmd)
ELSE(WIN32)
SET(AUTOBUILD_EXE_NAMES autobuild)
ENDIF(WIN32)
@@ -21,21 +25,19 @@ IF (NOT AUTOBUILD_EXECUTABLE)
AUTOBUILD_EXECUTABLE
NAMES ${AUTOBUILD_EXE_NAMES}
PATHS
- ENV PATH
- ${CMAKE_SOURCE_DIR}/..
- ${CMAKE_SOURCE_DIR}/../..
- ${CMAKE_SOURCE_DIR}/../../..
+ ENV PATH
+ ${CMAKE_SOURCE_DIR}/..
+ ${CMAKE_SOURCE_DIR}/../..
+ ${CMAKE_SOURCE_DIR}/../../..
PATH_SUFFIXES "/autobuild/bin/"
)
+ ENDIF (DEFINED ENV{AUTOBUILD})
- IF (AUTOBUILD_EXECUTABLE)
- GET_FILENAME_COMPONENT(_autobuild_name ${AUTOBUILD_EXECUTABLE} NAME_WE)
- MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}")
- ELSE (AUTOBUILD_EXECUTABLE)
- IF (AUTOBUILD_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "Could not find autobuild executable")
- ENDIF (AUTOBUILD_FIND_REQUIRED)
- ENDIF (AUTOBUILD_EXECUTABLE)
+ IF (NOT AUTOBUILD_EXECUTABLE)
+ IF (AUTOBUILD_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Could not find autobuild executable")
+ ENDIF (AUTOBUILD_FIND_REQUIRED)
+ ENDIF (NOT AUTOBUILD_EXECUTABLE)
- MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE)
+ MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE)
ENDIF (NOT AUTOBUILD_EXECUTABLE)
diff --git a/indra/cmake/FindURIPARSER.cmake b/indra/cmake/FindURIPARSER.cmake
new file mode 100644
index 0000000000..8ab9f0f4ed
--- /dev/null
+++ b/indra/cmake/FindURIPARSER.cmake
@@ -0,0 +1,46 @@
+# -*- cmake -*-
+
+# - Find uriparser
+# Find the URIPARSER includes and library
+# This module defines
+# URIPARSER_INCLUDE_DIRS, where to find uriparser.h, etc.
+# URIPARSER_LIBRARIES, the libraries needed to use uriparser.
+# URIPARSER_FOUND, If false, do not try to use uriparser.
+#
+# This FindURIPARSER is about 43 times as fast the one provided with cmake (2.8.x),
+# because it doesn't look up the version of uriparser, resulting in a dramatic
+# speed up for configure (from 4 minutes 22 seconds to 6 seconds).
+#
+# Note: Since this file is only used for standalone, the windows
+# specific parts were left out.
+
+FIND_PATH(URIPARSER_INCLUDE_DIR uriparser/uri.h
+ NO_SYSTEM_ENVIRONMENT_PATH
+ )
+
+FIND_LIBRARY(URIPARSER_LIBRARY uriparser)
+
+if (URIPARSER_LIBRARY AND URIPARSER_INCLUDE_DIR)
+ SET(URIPARSER_INCLUDE_DIRS ${URIPARSER_INCLUDE_DIR})
+ SET(URIPARSER_LIBRARIES ${URIPARSER_LIBRARY})
+ SET(URIPARSER_FOUND "YES")
+else (URIPARSER_LIBRARY AND URIPARSER_INCLUDE_DIR)
+ SET(URIPARSER_FOUND "NO")
+endif (URIPARSER_LIBRARY AND URIPARSER_INCLUDE_DIR)
+
+if (URIPARSER_FOUND)
+ if (NOT URIPARSER_FIND_QUIETLY)
+ message(STATUS "Found URIPARSER: ${URIPARSER_LIBRARIES}")
+ SET(URIPARSER_FIND_QUIETLY TRUE)
+ endif (NOT URIPARSER_FIND_QUIETLY)
+else (URIPARSER_FOUND)
+ if (URIPARSER_FIND_REQUIRED)
+ message(FATAL_ERROR "Could not find URIPARSER library")
+ endif (URIPARSER_FIND_REQUIRED)
+endif (URIPARSER_FOUND)
+
+mark_as_advanced(
+ URIPARSER_LIBRARY
+ URIPARSER_INCLUDE_DIR
+ )
+
diff --git a/indra/cmake/GLEXT.cmake b/indra/cmake/GLEXT.cmake
index a749644202..2a08c8fbae 100644
--- a/indra/cmake/GLEXT.cmake
+++ b/indra/cmake/GLEXT.cmake
@@ -2,7 +2,9 @@
include(Prebuilt)
if (NOT USESYSTEMLIBS)
- use_prebuilt_binary(glext)
- use_prebuilt_binary(glh_linear)
+ if (WINDOWS OR LINUX)
+ use_prebuilt_binary(glext)
+ endif (WINDOWS OR LINUX)
+ use_prebuilt_binary(glh-linear)
set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
endif (NOT USESYSTEMLIBS)
diff --git a/indra/cmake/GLH.cmake b/indra/cmake/GLH.cmake
index d5262f2efa..d0992f57b8 100755
--- a/indra/cmake/GLH.cmake
+++ b/indra/cmake/GLH.cmake
@@ -7,5 +7,5 @@ set(GLH_FIND_QUIETLY TRUE)
if (USESYSTEMLIBS)
include(FindGLH)
else (USESYSTEMLIBS)
- use_prebuilt_binary(glh_linear)
+ use_prebuilt_binary(glh-linear)
endif (USESYSTEMLIBS)
diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake
index 3683768af9..a347eb6fee 100755
--- a/indra/cmake/GLOD.cmake
+++ b/indra/cmake/GLOD.cmake
@@ -2,7 +2,7 @@
include(Prebuilt)
if (NOT USESYSTEMLIBS)
- use_prebuilt_binary(GLOD)
+ use_prebuilt_binary(glod)
endif (NOT USESYSTEMLIBS)
set(GLOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake
index cac072988e..5a00546927 100755
--- a/indra/cmake/GoogleMock.cmake
+++ b/indra/cmake/GoogleMock.cmake
@@ -2,20 +2,20 @@
include(Prebuilt)
include(Linking)
-use_prebuilt_binary(gmock)
+use_prebuilt_binary(googlemock)
-set(GOOGLEMOCK_INCLUDE_DIRS
+set(GOOGLEMOCK_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include)
if (LINUX)
# VWR-24366: gmock is underlinked, it needs gtest.
- set(GOOGLEMOCK_LIBRARIES
+ set(GOOGLEMOCK_LIBRARIES
gmock -Wl,--no-as-needed
gtest -Wl,--as-needed)
elseif(WINDOWS)
- set(GOOGLEMOCK_LIBRARIES
+ set(GOOGLEMOCK_LIBRARIES
gmock)
- set(GOOGLEMOCK_INCLUDE_DIRS
+ set(GOOGLEMOCK_INCLUDE_DIRS
${LIBS_PREBUILT_DIR}/include
${LIBS_PREBUILT_DIR}/include/gmock
${LIBS_PREBUILT_DIR}/include/gmock/boost/tr1/tr1)
diff --git a/indra/cmake/Havok.cmake b/indra/cmake/Havok.cmake
index 8b7f01d20b..99e7334118 100755
--- a/indra/cmake/Havok.cmake
+++ b/indra/cmake/Havok.cmake
@@ -1,5 +1,5 @@
# -*- cmake -*-
-
+include(Prebuilt)
if(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")
@@ -61,14 +61,14 @@ foreach(HAVOK_LIB ${HAVOK_LIBS})
set(relwithdebinfo_dir "${HAVOK_RELWITHDEBINFO_LIBRARY_PATH}/${HAVOK_LIB}")
# Try to avoid extracting havok library each time we run cmake.
- if("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted")
- file(READ ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted "havok_${HAVOK_LIB}_extracted")
+ if("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted")
+ file(READ ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted "havok_${HAVOK_LIB}_extracted")
if(DEBUG_PREBUILT)
message(STATUS "havok_${HAVOK_LIB}_extracted: \"${havok_${HAVOK_LIB}_extracted}\"")
endif(DEBUG_PREBUILT)
- endif("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted")
+ endif("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted")
- if(${CMAKE_BINARY_DIR}/temp/havok-source_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)
+ if(${PREBUILD_TRACKING_DIR}/havok_source_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)
if(DEBUG_PREBUILT)
MESSAGE(STATUS "Extracting ${HAVOK_LIB}...")
endif(DEBUG_PREBUILT)
@@ -109,9 +109,9 @@ foreach(HAVOK_LIB ${HAVOK_LIBS})
# Just assume success for now.
set(havok_${HAVOK_LIB}_extracted 0)
- file(WRITE ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted "${havok_${HAVOK_LIB}_extracted}")
+ file(WRITE ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted "${havok_${HAVOK_LIB}_extracted}")
- endif(${CMAKE_BINARY_DIR}/temp/havok-source_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)
+ endif(${PREBUILD_TRACKING_DIR}/havok_source_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)
file(GLOB extracted_debug "${debug_dir}/*.o")
file(GLOB extracted_release "${release_dir}/*.o")
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
index 0aab2d6634..079619adf8 100755
--- a/indra/cmake/JsonCpp.cmake
+++ b/indra/cmake/JsonCpp.cmake
@@ -11,10 +11,10 @@ else (USESYSTEMLIBS)
use_prebuilt_binary(jsoncpp)
if (WINDOWS)
set(JSONCPP_LIBRARIES
- debug json_vc100debug_libmt.lib
- optimized json_vc100_libmt)
+ debug json_libmdd.lib
+ optimized json_libmd.lib)
elseif (DARWIN)
- set(JSONCPP_LIBRARIES libjson_linux-gcc-4.0.1_libmt.a)
+ set(JSONCPP_LIBRARIES libjson_darwin_libmt.a)
elseif (LINUX)
set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
endif (WINDOWS)
diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index 804624f5ec..ac5c5c6a2a 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -137,7 +137,7 @@ INCLUDE(GoogleMock)
#
# Setup test targets
#
- GET_TARGET_PROPERTY(TEST_EXE PROJECT_${project}_TEST_${name} LOCATION)
+ SET(TEST_EXE $<TARGET_FILE:PROJECT_${project}_TEST_${name}>)
SET(TEST_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/PROJECT_${project}_TEST_${name}_ok.txt)
SET(TEST_CMD ${TEST_EXE} --touch=${TEST_OUTPUT} --sourcedir=${CMAKE_CURRENT_SOURCE_DIR})
@@ -225,7 +225,7 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
# Create the test running command
SET(test_command ${ARGN})
- GET_TARGET_PROPERTY(TEST_EXE INTEGRATION_TEST_${testname} LOCATION)
+ SET(TEST_EXE $<TARGET_FILE:INTEGRATION_TEST_${testname}>)
LIST(FIND test_command "{}" test_exe_pos)
IF(test_exe_pos LESS 0)
# The {} marker means "the full pathname of the test executable."
diff --git a/indra/cmake/LLAppearanceUtility.cmake b/indra/cmake/LLAppearanceUtility.cmake
index bea45543de..709b91c134 100644
--- a/indra/cmake/LLAppearanceUtility.cmake
+++ b/indra/cmake/LLAppearanceUtility.cmake
@@ -4,7 +4,7 @@ include(Prebuilt)
# Linux proprietary build only
if (INSTALL_PROPRIETARY)
if(LINUX)
- use_prebuilt_binary(llappearanceutility-source)
+ use_prebuilt_binary(llappearance_utility)
set(LLAPPEARANCEUTILITY_SRC_DIR ${LIBS_PREBUILT_DIR}/llappearanceutility/src)
set(LLAPPEARANCEUTILITY_BIN_DIR ${CMAKE_BINARY_DIR}/llappearanceutility)
endif (LINUX)
diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
index 14dd67f32f..a3c1c871aa 100755
--- a/indra/cmake/LLSharedLibs.cmake
+++ b/indra/cmake/LLSharedLibs.cmake
@@ -1,7 +1,7 @@
# ll_deploy_sharedlibs_command
# target_exe: the cmake target of the executable for which the shared libs will be deployed.
macro(ll_deploy_sharedlibs_command target_exe)
- get_target_property(TARGET_LOCATION ${target_exe} LOCATION)
+ set(TARGET_LOCATION $<TARGET_FILE:${target_exe}>)
get_filename_component(OUTPUT_PATH ${TARGET_LOCATION} PATH)
if(DARWIN)
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index 74fe3f1137..c95f0c3702 100755
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -6,7 +6,7 @@ set(${CMAKE_CURRENT_LIST_FILE}_INCLUDED "YES")
include(Variables)
set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib)
-set(ARCH_PREBUILT_DIRS_PLUGINS ${AUTOBUILD_INSTALL_DIR}/plugins)
+##set(ARCH_PREBUILT_DIRS_PLUGINS ${AUTOBUILD_INSTALL_DIR}/plugins)
set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release)
set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug)
if (WINDOWS)
diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake
index e72845db53..388df16a52 100755
--- a/indra/cmake/NDOF.cmake
+++ b/indra/cmake/NDOF.cmake
@@ -8,7 +8,11 @@ if (NDOF)
set(NDOF_FIND_REQUIRED ON)
include(FindNDOF)
else (USESYSTEMLIBS)
- use_prebuilt_binary(ndofdev)
+ if (WINDOWS OR DARWIN)
+ use_prebuilt_binary(libndofdev)
+ elseif (LINUX)
+ use_prebuilt_binary(open-libndofdev)
+ endif (WINDOWS OR DARWIN)
if (WINDOWS)
set(NDOF_LIBRARY libndofdev)
diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake
index c084d68de7..1bbfff6f98 100755
--- a/indra/cmake/OPENAL.cmake
+++ b/indra/cmake/OPENAL.cmake
@@ -16,7 +16,7 @@ if (OPENAL)
pkg_check_modules(OPENAL_LIB REQUIRED openal)
pkg_check_modules(FREEALUT_LIB REQUIRED freealut)
else (USESYSTEMLIBS)
- use_prebuilt_binary(openal_soft)
+ use_prebuilt_binary(openal)
endif (USESYSTEMLIBS)
if(WINDOWS)
set(OPENAL_LIBRARIES
@@ -30,7 +30,3 @@ if (OPENAL)
)
endif()
endif (OPENAL)
-
-if (OPENAL)
- message(STATUS "Building with OpenAL audio support")
-endif (OPENAL)
diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake
index e548805148..98013da2f2 100755
--- a/indra/cmake/Prebuilt.cmake
+++ b/indra/cmake/Prebuilt.cmake
@@ -8,44 +8,50 @@ if(INSTALL_PROPRIETARY)
include(FindSCP)
endif(INSTALL_PROPRIETARY)
+set(PREBUILD_TRACKING_DIR ${AUTOBUILD_INSTALL_DIR}/cmake_tracking)
+# For the library installation process;
+# see cmake/Prebuild.cmake for the counterpart code.
+if ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${PREBUILD_TRACKING_DIR}/sentinel_installed")
+ file(MAKE_DIRECTORY ${PREBUILD_TRACKING_DIR})
+ file(WRITE ${PREBUILD_TRACKING_DIR}/sentinel_installed "0")
+endif ("${CMAKE_SOURCE_DIR}/../autobuild.xml" IS_NEWER_THAN "${PREBUILD_TRACKING_DIR}/sentinel_installed")
+
# The use_prebuilt_binary macro handles automated installation of package
# dependencies using autobuild. The goal is that 'autobuild install' should
# only be run when we know we need to install a new package. This should be
# the case in a clean checkout, or if autobuild.xml has been updated since the
-# last run (encapsulated by the file ${CMAKE_BINARY_DIR}/temp/sentinel_installed),
+# last run (encapsulated by the file ${PREBUILD_TRACKING_DIR}/sentinel_installed),
# or if a previous attempt to install the package has failed (the exit status
# of previous attempts is serialized in the file
-# ${CMAKE_BINARY_DIR}/temp/${_binary}_installed)
+# ${PREBUILD_TRACKING_DIR}/${_binary}_installed)
macro (use_prebuilt_binary _binary)
if (NOT DEFINED USESYSTEMLIBS_${_binary})
set(USESYSTEMLIBS_${_binary} ${USESYSTEMLIBS})
endif (NOT DEFINED USESYSTEMLIBS_${_binary})
if (NOT USESYSTEMLIBS_${_binary})
- if("${${_binary}_installed}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/${_binary}_installed")
- file(READ ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${_binary}_installed")
+ if("${${_binary}_installed}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/${_binary}_installed")
+ file(READ ${PREBUILD_TRACKING_DIR}/${_binary}_installed "${_binary}_installed")
if(DEBUG_PREBUILT)
message(STATUS "${_binary}_installed: \"${${_binary}_installed}\"")
endif(DEBUG_PREBUILT)
- endif("${${_binary}_installed}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/${_binary}_installed")
+ endif("${${_binary}_installed}" STREQUAL "" AND EXISTS "${PREBUILD_TRACKING_DIR}/${_binary}_installed")
- if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)
+ if(${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)
if(DEBUG_PREBUILT)
message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install
--install-dir=${AUTOBUILD_INSTALL_DIR}
- --skip-license-check
${_binary} ")
endif(DEBUG_PREBUILT)
execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}"
install
--install-dir=${AUTOBUILD_INSTALL_DIR}
- --skip-license-check
${_binary}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE ${_binary}_installed
)
- file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}")
- endif(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)
+ file(WRITE ${PREBUILD_TRACKING_DIR}/${_binary}_installed "${${_binary}_installed}")
+ endif(${PREBUILD_TRACKING_DIR}/sentinel_installed IS_NEWER_THAN ${PREBUILD_TRACKING_DIR}/${_binary}_installed OR NOT ${${_binary}_installed} EQUAL 0)
if(NOT ${_binary}_installed EQUAL 0)
message(FATAL_ERROR
diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake
index 012f4e20d8..c08e153ee3 100755
--- a/indra/cmake/QuickTimePlugin.cmake
+++ b/indra/cmake/QuickTimePlugin.cmake
@@ -2,7 +2,9 @@
if(INSTALL_PROPRIETARY)
include(Prebuilt)
- use_prebuilt_binary(quicktime)
+ if (WINDOWS)
+ use_prebuilt_binary(quicktime)
+ endif (WINDOWS)
endif(INSTALL_PROPRIETARY)
if (DARWIN)
diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake
index 58acdc22bd..31174209a3 100755
--- a/indra/cmake/UI.cmake
+++ b/indra/cmake/UI.cmake
@@ -32,7 +32,10 @@ if (USESYSTEMLIBS)
add_definitions(${${pkg}_CFLAGS_OTHERS})
endforeach(pkg)
else (USESYSTEMLIBS)
- use_prebuilt_binary(gtk-atk-pango-glib)
+ if (LINUX OR WINDOWS)
+ use_prebuilt_binary(gtk-atk-pango-glib)
+ endif (LINUX OR WINDOWS)
+
if (LINUX)
set(UI_LIBRARIES
atk-1.0
diff --git a/indra/cmake/URIPARSER.cmake b/indra/cmake/URIPARSER.cmake
new file mode 100644
index 0000000000..de146885a0
--- /dev/null
+++ b/indra/cmake/URIPARSER.cmake
@@ -0,0 +1,35 @@
+# -*- cmake -*-
+
+set(URIPARSER_FIND_QUIETLY ON)
+set(URIPARSER_FIND_REQUIRED ON)
+
+include(Prebuilt)
+
+if (USESYSTEMLIBS)
+ include(FindURIPARSER)
+else (USESYSTEMLIBS)
+ use_prebuilt_binary(uriparser)
+ if (WINDOWS)
+ set(URIPARSER_LIBRARIES
+ debug uriparserd
+ optimized uriparser)
+ elseif (LINUX)
+ #
+ # When we have updated static libraries in competition with older
+ # shared libraries and we want the former to win, we need to do some
+ # extra work. The *_PRELOAD_ARCHIVES settings are invoked early
+ # and will pull in the entire archive to the binary giving it.
+ # priority in symbol resolution. Beware of cmake moving the
+ # achive load itself to another place on the link command line. If
+ # that happens, you can try something like -Wl,-luriparser here to hide
+ # the archive. Also be aware that the linker will not tolerate a
+ # second whole-archive load of the archive. See viewer's
+ # CMakeLists.txt for more information.
+ #
+ set(URIPARSER_PRELOAD_ARCHIVES -Wl,--whole-archive uriparser -Wl,--no-whole-archive)
+ set(URIPARSER_LIBRARIES uriparser)
+ elseif (DARWIN)
+ set(URIPARSER_LIBRARIES uriparser)
+ endif (WINDOWS)
+ set(URIPARSER_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/uriparser)
+endif (USESYSTEMLIBS)
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 963b1bd386..76d92d7a48 100755
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -26,6 +26,7 @@ set(VIEWER_PREFIX)
set(INTEGRATION_TESTS_PREFIX)
set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation")
set(INCREMENTAL_LINK OFF CACHE BOOL "Use incremental linking on win32 builds (enable for faster links on some machines)")
+set(ENABLE_MEDIA_PLUGINS OFF CACHE BOOL "Turn off building media plugins if they are imported by third-party library mechanism")
if(LIBS_CLOSED_DIR)
file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR)
@@ -129,44 +130,25 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(DARWIN 1)
- execute_process(
- COMMAND sh -c "xcodebuild -version | grep Xcode | cut -d ' ' -f2 | cut -d'.' -f1-2"
- OUTPUT_VARIABLE XCODE_VERSION )
-
- # To support a different SDK update these Xcode settings:
- if (XCODE_VERSION GREATER 4.5)
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.8)
- set(CMAKE_OSX_SYSROOT macosx10.8)
- else (XCODE_VERSION GREATER 4.5)
- if (XCODE_VERSION GREATER 4.2)
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
- set(CMAKE_OSX_SYSROOT macosx10.7)
- else (XCODE_VERSION GREATER 4.2)
- set(CMAKE_OSX_DEPLOYMENT_TARGET 10.6)
- set(CMAKE_OSX_SYSROOT macosx10.7)
- endif (XCODE_VERSION GREATER 4.2)
- endif (XCODE_VERSION GREATER 4.5)
-
- set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
+ # now we only support Xcode 6.0 using 10.9 (Mavericks), minimum OS 10.7 (Lion)
+ set(XCODE_VERSION 6.0)
+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.7)
+ set(CMAKE_OSX_SYSROOT macosx10.9)
+
+ set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0")
+ set(CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL 3)
+ set(CMAKE_XCODE_ATTRIBUTE_GCC_STRICT_ALIASING NO)
+ set(CMAKE_XCODE_ATTRIBUTE_GCC_FAST_MATH NO)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_X86_VECTOR_INSTRUCTIONS ssse3)
+ set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym)
- # NOTE: To attempt an i386/PPC Universal build, add this on the configure line:
- # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc'
- # Build only for i386 by default, system default on MacOSX 10.6 is x86_64
+ # Build only for i386 by default, system default on MacOSX 10.6+ is x86_64
if (NOT CMAKE_OSX_ARCHITECTURES)
- set(CMAKE_OSX_ARCHITECTURES i386)
+ set(CMAKE_OSX_ARCHITECTURES "i386")
endif (NOT CMAKE_OSX_ARCHITECTURES)
- if (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
- set(ARCH universal)
- else (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
- if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc")
- set(ARCH ppc)
- else (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc")
- set(ARCH i386)
- endif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc")
- endif (CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc")
-
+ set(ARCH ${CMAKE_OSX_ARCHITECTURES})
set(LL_ARCH ${ARCH}_darwin)
set(LL_ARCH_DIR universal-darwin)
set(WORD_SIZE 32)
@@ -177,10 +159,8 @@ set(GRID agni CACHE STRING "Target Grid")
set(VIEWER_CHANNEL "Second Life Test" CACHE STRING "Viewer Channel Name")
-if (XCODE_VERSION GREATER 4.2)
- set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer")
- set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")
-endif (XCODE_VERSION GREATER 4.2)
+set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer")
+set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")
set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")
set(USESYSTEMLIBS OFF CACHE BOOL "Use libraries from your system rather than Linden-supplied prebuilt libraries.")
diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake
index d4be24799f..fc5bdedb5a 100755
--- a/indra/cmake/ViewerMiscLibs.cmake
+++ b/indra/cmake/ViewerMiscLibs.cmake
@@ -2,9 +2,11 @@
include(Prebuilt)
if (NOT USESYSTEMLIBS)
+ if (LINUX)
+ use_prebuilt_binary(libuuid)
+ use_prebuilt_binary(fontconfig)
+ endif (LINUX)
use_prebuilt_binary(libhunspell)
- use_prebuilt_binary(libuuid)
use_prebuilt_binary(slvoice)
- use_prebuilt_binary(fontconfig)
endif(NOT USESYSTEMLIBS)
diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake
index 3a0caa0a06..8c3790ea89 100755
--- a/indra/cmake/XmlRpcEpi.cmake
+++ b/indra/cmake/XmlRpcEpi.cmake
@@ -9,7 +9,7 @@ if (USESYSTEMLIBS)
else (USESYSTEMLIBS)
use_prebuilt_binary(xmlrpc-epi)
if (WINDOWS)
- set(XMLRPCEPI_LIBRARIES
+ set(XMLRPCEPI_LIBRARIES
debug xmlrpc-epid
optimized xmlrpc-epi
)
diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py
index a2ef61c8fd..582185e5ab 100755
--- a/indra/cmake/run_build_test.py
+++ b/indra/cmake/run_build_test.py
@@ -46,6 +46,7 @@ $/LicenseInfo$
import os
import sys
+import errno
import signal
import subprocess
@@ -112,7 +113,23 @@ def main(command, libpath=[], vars={}):
print "Running: %s" % " ".join(command)
# Make sure we see all relevant output *before* child-process output.
sys.stdout.flush()
- return subprocess.call(command)
+ try:
+ return subprocess.call(command)
+ except OSError as err:
+ # If the caller is trying to execute a test program that doesn't
+ # exist, we want to produce a reasonable error message rather than a
+ # traceback. This happens when the build is halted by errors, but
+ # CMake tries to proceed with testing anyway <eyeroll/>. However, do
+ # NOT attempt to handle any error but "doesn't exist."
+ if err.errno != errno.ENOENT:
+ raise
+ # In practice, the pathnames into CMake's build tree are so long as to
+ # obscure the name of the test program. Just print its basename.
+ print "No such program %s; check for preceding build errors" % \
+ os.path.basename(command[0])
+ # What rc should we simulate for missing executable? Windows produces
+ # 9009.
+ return 9009
# swiped from vita, sigh, seems like a Bad Idea to introduce dependency
def translate_rc(rc):
diff --git a/indra/llappearance/llpolymorph.h b/indra/llappearance/llpolymorph.h
index 7e712f9e94..3c2c68079c 100644
--- a/indra/llappearance/llpolymorph.h
+++ b/indra/llappearance/llpolymorph.h
@@ -182,6 +182,16 @@ public:
void applyMask(U8 *maskData, S32 width, S32 height, S32 num_components, BOOL invert);
void addPendingMorphMask() { mNumMorphMasksPending++; }
+ void* operator new(size_t size)
+ {
+ return ll_aligned_malloc_16(size);
+ }
+
+ void operator delete(void* ptr)
+ {
+ ll_aligned_free_16(ptr);
+ }
+
protected:
LLPolyMorphTarget(const LLPolyMorphTarget& pOther);
diff --git a/indra/llappearance/llpolyskeletaldistortion.h b/indra/llappearance/llpolyskeletaldistortion.h
index ea2adb8a87..ab1a132d19 100644
--- a/indra/llappearance/llpolyskeletaldistortion.h
+++ b/indra/llappearance/llpolyskeletaldistortion.h
@@ -73,6 +73,19 @@ public:
/*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
+
+
+ void* operator new(size_t size)
+ {
+ return ll_aligned_malloc_16(size);
+ }
+
+ void operator delete(void* ptr)
+ {
+ ll_aligned_free_16(ptr);
+ }
+
+
protected:
typedef std::vector<LLPolySkeletalBoneInfo> bone_info_list_t;
bone_info_list_t mBoneInfoList;
diff --git a/indra/llappearance/lltexturemanagerbridge.h b/indra/llappearance/lltexturemanagerbridge.h
index 4b814b522d..101704b162 100644
--- a/indra/llappearance/lltexturemanagerbridge.h
+++ b/indra/llappearance/lltexturemanagerbridge.h
@@ -35,6 +35,8 @@
class LLTextureManagerBridge
{
public:
+ virtual ~LLTextureManagerBridge() {}
+
virtual LLPointer<LLGLTexture> getLocalTexture(BOOL usemipmaps = TRUE, BOOL generate_gl_tex = TRUE) = 0;
virtual LLPointer<LLGLTexture> getLocalTexture(const U32 width, const U32 height, const U8 components, BOOL usemipmaps, BOOL generate_gl_tex = TRUE) = 0;
virtual LLGLTexture* getFetchedTexture(const LLUUID &image_id) = 0;
diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp
index 4bce3f99ed..5ca9f55ac8 100755
--- a/indra/llappearance/llwearable.cpp
+++ b/indra/llappearance/llwearable.cpp
@@ -86,10 +86,10 @@ LLAssetType::EType LLWearable::getAssetType() const
return LLWearableType::getAssetType(mType);
}
-BOOL LLWearable::exportFile(LLFILE* fp) const
+BOOL LLWearable::exportFile(const std::string& filename) const
{
- llofstream ofs(fp);
- return exportStream(ofs);
+ llofstream ofs(filename.c_str(), std::ios_base::out | std::ios_base::trunc | std::ios_base::binary);
+ return ofs.is_open() && exportStream(ofs);
}
// virtual
@@ -201,10 +201,11 @@ void LLWearable::createLayers(S32 te, LLAvatarAppearance *avatarp)
}
}
-LLWearable::EImportResult LLWearable::importFile(LLFILE* fp, LLAvatarAppearance* avatarp )
+LLWearable::EImportResult LLWearable::importFile(const std::string& filename,
+ LLAvatarAppearance* avatarp )
{
- llifstream ifs(fp);
- return importStream(ifs, avatarp);
+ llifstream ifs(filename.c_str(), std::ios_base::in | std::ios_base::binary);
+ return (! ifs.is_open())? FAILURE : importStream(ifs, avatarp);
}
// virtual
diff --git a/indra/llappearance/llwearable.h b/indra/llappearance/llwearable.h
index 406fc7e883..875c2932f1 100755
--- a/indra/llappearance/llwearable.h
+++ b/indra/llappearance/llwearable.h
@@ -81,8 +81,8 @@ public:
SUCCESS,
BAD_HEADER
};
- BOOL exportFile(LLFILE* file) const;
- EImportResult importFile(LLFILE* file, LLAvatarAppearance* avatarp );
+ BOOL exportFile(const std::string& filename) const;
+ EImportResult importFile(const std::string& filename, LLAvatarAppearance* avatarp );
virtual BOOL exportStream( std::ostream& output_stream ) const;
virtual EImportResult importStream( std::istream& input_stream, LLAvatarAppearance* avatarp );
@@ -113,6 +113,9 @@ public:
// Update the baked texture hash.
virtual void addToBakedTextureHash(LLMD5& hash) const = 0;
+ typedef std::map<S32, LLVisualParam *> visual_param_index_map_t;
+ visual_param_index_map_t mVisualParamIndexMap;
+
protected:
typedef std::map<S32, LLLocalTextureObject*> te_map_t;
void syncImages(te_map_t &src, te_map_t &dst);
@@ -132,9 +135,6 @@ protected:
typedef std::map<S32, F32> param_map_t;
param_map_t mSavedVisualParamMap; // last saved version of visual params
- typedef std::map<S32, LLVisualParam *> visual_param_index_map_t;
- visual_param_index_map_t mVisualParamIndexMap;
-
te_map_t mTEMap; // maps TE to LocalTextureObject
te_map_t mSavedTEMap; // last saved version of TEMap
};
diff --git a/indra/llappearance/llwearabledata.cpp b/indra/llappearance/llwearabledata.cpp
index cf1ee435a8..5dfb201fc4 100755
--- a/indra/llappearance/llwearabledata.cpp
+++ b/indra/llappearance/llwearabledata.cpp
@@ -173,8 +173,9 @@ bool LLWearableData::swapWearables(const LLWearableType::EType type, U32 index_a
}
wearableentry_vec_t& wearable_vec = wearable_iter->second;
- if (0 > index_a || index_a >= wearable_vec.size()) return false;
- if (0 > index_b || index_b >= wearable_vec.size()) return false;
+ // removed 0 > index_a and index_b comparisions - can never be true
+ if (index_a >= wearable_vec.size()) return false;
+ if (index_b >= wearable_vec.size()) return false;
LLWearable* wearable = wearable_vec[index_a];
wearable_vec[index_a] = wearable_vec[index_b];
diff --git a/indra/llappearance/llwearabletype.h b/indra/llappearance/llwearabletype.h
index e51e6731d3..7c9594644d 100644
--- a/indra/llappearance/llwearabletype.h
+++ b/indra/llappearance/llwearabletype.h
@@ -35,6 +35,9 @@
class LLTranslationBridge
{
public:
+ // clang needs this to be happy
+ virtual ~LLTranslationBridge() {}
+
virtual std::string getString(const std::string &xml_desc) = 0;
};
diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
index 1b2bdb9888..e943dd5d5c 100755
--- a/indra/llaudio/CMakeLists.txt
+++ b/indra/llaudio/CMakeLists.txt
@@ -3,7 +3,6 @@
project(llaudio)
include(00-Common)
-include(Audio)
include(LLAudio)
include(FMODEX)
include(OPENAL)
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp
index 20a7afc748..77e57b14f5 100755
--- a/indra/llaudio/llaudiodecodemgr.cpp
+++ b/indra/llaudio/llaudiodecodemgr.cpp
@@ -247,8 +247,7 @@ BOOL LLVorbisDecodeState::initDecode()
LL_WARNS("AudioEngine") << "Illegal sample count: " << sample_count << LL_ENDL;
}
- if( size_guess > LLVORBIS_CLIP_REJECT_SIZE ||
- size_guess < 0)
+ if( size_guess > LLVORBIS_CLIP_REJECT_SIZE )
{
abort_decode = true;
LL_WARNS("AudioEngine") << "Illegal sample size: " << size_guess << LL_ENDL;
@@ -697,11 +696,3 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " no file available" << LL_ENDL;
return FALSE;
}
-
-#if LL_DARWIN || LL_LINUX
-// HACK: to fool the compiler into not emitting unused warnings.
-namespace {
- const ov_callbacks callback_array[4] = {OV_CALLBACKS_DEFAULT, OV_CALLBACKS_NOCLOSE, OV_CALLBACKS_STREAMONLY,
- OV_CALLBACKS_STREAMONLY_NOCLOSE};
-}
-#endif
diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h
index d4e3b76386..1a3e307663 100755
--- a/indra/llcharacter/llcharacter.h
+++ b/indra/llcharacter/llcharacter.h
@@ -261,6 +261,9 @@ public:
static std::vector< LLCharacter* > sInstances;
static BOOL sAllowInstancesChange ; //debug use
+ virtual void setHoverOffset(const LLVector3& hover_offset, bool send_update=true) { mHoverOffset = hover_offset; }
+ const LLVector3& getHoverOffset() const { return mHoverOffset; }
+
protected:
LLMotionController mMotionController;
@@ -273,7 +276,6 @@ protected:
U32 mSkeletonSerialNum;
LLAnimPauseRequest mPauseRequest;
-
private:
// visual parameter stuff
typedef std::map<S32, LLVisualParam *> visual_param_index_map_t;
@@ -284,6 +286,8 @@ private:
visual_param_name_map_t mVisualParamNameMap;
static LLStringTable sVisualParamNames;
+
+ LLVector3 mHoverOffset;
};
#endif // LL_LLCHARACTER_H
diff --git a/indra/llcharacter/lleditingmotion.cpp b/indra/llcharacter/lleditingmotion.cpp
index 36341065ae..f4a37a139a 100755
--- a/indra/llcharacter/lleditingmotion.cpp
+++ b/indra/llcharacter/lleditingmotion.cpp
@@ -39,8 +39,6 @@
//-----------------------------------------------------------------------------
const LLQuaternion EDIT_MOTION_WRIST_ROTATION(F_PI_BY_TWO * 0.7f, LLVector3(1.0f, 0.0f, 0.0f));
const F32 TARGET_LAG_HALF_LIFE = 0.1f; // half-life of IK targeting
-const F32 TORSO_LAG_HALF_LIFE = 0.2f;
-const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation
S32 LLEditingMotion::sHandPose = LLHandMotion::HAND_POSE_RELAXED_R;
S32 LLEditingMotion::sHandPosePriority = 3;
diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp
index d045bca22e..812c4201af 100755
--- a/indra/llcharacter/llheadrotmotion.cpp
+++ b/indra/llcharacter/llheadrotmotion.cpp
@@ -43,11 +43,8 @@ const F32 TORSO_LAG = 0.35f; // torso rotation factor
const F32 NECK_LAG = 0.5f; // neck rotation factor
const F32 HEAD_LOOKAT_LAG_HALF_LIFE = 0.15f; // half-life of lookat targeting for head
const F32 TORSO_LOOKAT_LAG_HALF_LIFE = 0.27f; // half-life of lookat targeting for torso
-const F32 EYE_LOOKAT_LAG_HALF_LIFE = 0.06f; // half-life of lookat targeting for eye
const F32 HEAD_ROTATION_CONSTRAINT = F_PI_BY_TWO * 0.8f; // limit angle for head rotation
-
const F32 MIN_HEAD_LOOKAT_DISTANCE = 0.3f; // minimum distance from head before we turn to look at it
-const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation
const F32 EYE_JITTER_MIN_TIME = 0.3f; // min amount of time between eye "jitter" motions
const F32 EYE_JITTER_MAX_TIME = 2.5f; // max amount of time between eye "jitter" motions
const F32 EYE_JITTER_MAX_YAW = 0.08f; // max yaw of eye jitter motion
diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp
index 6f22a7c6b7..8fa08a2a6c 100755
--- a/indra/llcharacter/lljoint.cpp
+++ b/indra/llcharacter/lljoint.cpp
@@ -290,7 +290,7 @@ const LLVector3& LLJoint::getPosition()
bool do_debug_joint(const std::string& name)
{
- return true;
+ return false;
}
//--------------------------------------------------------------------
@@ -361,7 +361,6 @@ void LLJoint::removeAttachmentPosOverride( const LLUUID& mesh_id, const std::str
}
updatePos(av_info);
}
-
}
//--------------------------------------------------------------------
diff --git a/indra/llcharacter/lljointstate.h b/indra/llcharacter/lljointstate.h
index b9c91f80b5..1ccc6b5093 100755
--- a/indra/llcharacter/lljointstate.h
+++ b/indra/llcharacter/lljointstate.h
@@ -64,22 +64,18 @@ protected:
public:
// Constructor
LLJointState()
- {
- mUsage = 0;
- mJoint = NULL;
- mUsage = 0;
- mWeight = 0.f;
- mPriority = LLJoint::USE_MOTION_PRIORITY;
- }
+ : mUsage(0)
+ , mJoint(NULL)
+ , mWeight(0.f)
+ , mPriority(LLJoint::USE_MOTION_PRIORITY)
+ {}
LLJointState(LLJoint* joint)
- {
- mUsage = 0;
- mJoint = joint;
- mUsage = 0;
- mWeight = 0.f;
- mPriority = LLJoint::USE_MOTION_PRIORITY;
- }
+ : mUsage(0)
+ , mJoint(joint)
+ , mWeight(0.f)
+ , mPriority(LLJoint::USE_MOTION_PRIORITY)
+ {}
// joint that this state is applied to
LLJoint* getJoint() { return mJoint; }
diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp
index 22aa4f1d2f..cd201a65b4 100755
--- a/indra/llcharacter/llkeyframemotion.cpp
+++ b/indra/llcharacter/llkeyframemotion.cpp
@@ -902,7 +902,7 @@ void LLKeyframeMotion::deactivateConstraint(JointConstraint *constraintp)
constraintp->mSourceVolume->mUpdateXform = FALSE;
}
- if (!constraintp->mSharedData->mConstraintTargetType == CONSTRAINT_TARGET_TYPE_GROUND)
+ if (constraintp->mSharedData->mConstraintTargetType != CONSTRAINT_TARGET_TYPE_GROUND)
{
if (constraintp->mTargetVolume)
{
@@ -1048,7 +1048,7 @@ void LLKeyframeMotion::applyConstraint(JointConstraint* constraint, F32 time, U8
LLVector3 source_to_target = target_pos - keyframe_source_pos;
- S32 max_iteration_count = llround(clamp_rescale(
+ S32 max_iteration_count = ll_round(clamp_rescale(
mCharacter->getPixelArea(),
MAX_PIXEL_AREA_CONSTRAINTS,
MIN_PIXEL_AREA_CONSTRAINTS,
diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp
index 7c1fcacf8a..f180702385 100755
--- a/indra/llcharacter/llkeyframewalkmotion.cpp
+++ b/indra/llcharacter/llkeyframewalkmotion.cpp
@@ -45,10 +45,7 @@ const F32 TIME_EPSILON = 0.001f; // minumum frame time
const F32 MAX_TIME_DELTA = 2.f; // max two seconds a frame for calculating interpolation
F32 SPEED_ADJUST_MAX_SEC = 2.f; // maximum adjustment to walk animation playback speed for a second
F32 ANIM_SPEED_MAX = 1.5f; // absolute upper limit on animation speed
-const F32 DRIFT_COMP_MAX_TOTAL = 0.1f; // maximum drift compensation overall, in any direction
-const F32 DRIFT_COMP_MAX_SPEED = 4.f; // speed at which drift compensation total maxes out
const F32 MAX_ROLL = 0.6f;
-const F32 PELVIS_COMPENSATION_WIEGHT = 0.7f; // proportion of foot drift that is compensated by moving the avatar directly
const F32 SPEED_ADJUST_TIME_CONSTANT = 0.1f; // time constant for speed adjustment interpolation
//-----------------------------------------------------------------------------
diff --git a/indra/llcharacter/lltargetingmotion.cpp b/indra/llcharacter/lltargetingmotion.cpp
index 007834b178..69681e4197 100755
--- a/indra/llcharacter/lltargetingmotion.cpp
+++ b/indra/llcharacter/lltargetingmotion.cpp
@@ -38,9 +38,6 @@
// Constants
//-----------------------------------------------------------------------------
const F32 TORSO_TARGET_HALF_LIFE = 0.25f;
-const F32 MAX_TIME_DELTA = 2.f; //max two seconds a frame for calculating interpolation
-const F32 TARGET_PLANE_THRESHOLD_DOT = 0.6f;
-const F32 TORSO_ROT_FRACTION = 0.5f;
//-----------------------------------------------------------------------------
// LLTargetingMotion()
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 763f5a3521..1459b9ada2 100755
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -12,12 +12,14 @@ include(GoogleBreakpad)
include(GooglePerfTools)
include(Copy3rdPartyLibs)
include(ZLIB)
+include(URIPARSER)
include_directories(
${EXPAT_INCLUDE_DIRS}
${LLCOMMON_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIRS}
${BREAKPAD_INCLUDE_DIRECTORIES}
+ ${URIPARSER_INCLUDE_DIRS}
)
# add_executable(lltreeiterators lltreeiterators.cpp)
@@ -103,6 +105,7 @@ set(llcommon_SOURCE_FILES
lltracerecording.cpp
lltracethreadrecorder.cpp
lluri.cpp
+ lluriparser.cpp
lluuid.cpp
llworkerthread.cpp
timing.cpp
@@ -217,6 +220,7 @@ set(llcommon_HEADER_FILES
llunits.h
llunittype.h
lluri.h
+ lluriparser.h
lluuid.h
llwin32headers.h
llwin32headerslean.h
@@ -261,6 +265,7 @@ target_link_libraries(
${BOOST_PROGRAM_OPTIONS_LIBRARY}
${BOOST_REGEX_LIBRARY}
${GOOGLE_PERFTOOLS_LIBRARIES}
+ ${URIPARSER_LIBRARIES}
)
if (DARWIN)
@@ -301,7 +306,7 @@ if (LL_TESTS)
LL_ADD_INTEGRATION_TEST(llunits "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")
- LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}")
+ LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY};${BOOST_THREAD_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}")
LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}")
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 22cd861c72..2100989316 100755
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -113,7 +113,7 @@ namespace {
public:
RecordToFile(const std::string& filename)
{
- mFile.open(filename, llofstream::out | llofstream::app);
+ mFile.open(filename.c_str(), std::ios_base::out | std::ios_base::app);
if (!mFile)
{
LL_INFOS() << "Error setting log file to " << filename << LL_ENDL;
@@ -126,7 +126,7 @@ namespace {
mFile.close();
}
- bool okay() { return mFile; }
+ bool okay() { return mFile.good(); }
virtual void recordMessage(LLError::ELevel level,
const std::string& message)
@@ -335,7 +335,7 @@ namespace
LLSD configuration;
{
- llifstream file(filename());
+ llifstream file(filename().c_str());
if (file.is_open())
{
LLSDSerialize::fromXML(configuration, file);
diff --git a/indra/llcommon/lleventcoro.h b/indra/llcommon/lleventcoro.h
index a42af63b65..abbeeaa373 100755
--- a/indra/llcommon/lleventcoro.h
+++ b/indra/llcommon/lleventcoro.h
@@ -67,7 +67,7 @@ public:
LLEventPumpOrPumpName() {}
operator LLEventPump& () const { return *mPump; }
LLEventPump& getPump() const { return *mPump; }
- operator bool() const { return mPump; }
+ operator bool() const { return bool(mPump); }
bool operator!() const { return ! mPump; }
private:
@@ -102,6 +102,9 @@ LLVoidListener<LISTENER> voidlistener(const LISTENER& listener)
namespace LLEventDetail
{
+ /// Implementation for listenerNameForCoro(), see below
+ LL_COMMON_API std::string listenerNameForCoroImpl(const void* self_id);
+
/**
* waitForEventOn() permits a coroutine to temporarily listen on an
* LLEventPump any number of times. We don't really want to have to ask
@@ -129,9 +132,6 @@ namespace LLEventDetail
return listenerNameForCoroImpl(self.get_id());
}
- /// Implementation for listenerNameForCoro()
- LL_COMMON_API std::string listenerNameForCoroImpl(const void* self_id);
-
/**
* Implement behavior described for postAndWait()'s @a replyPumpNamePath
* parameter:
diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp
index 259187c52f..295c97eac8 100755
--- a/indra/llcommon/llfile.cpp
+++ b/indra/llcommon/llfile.cpp
@@ -424,26 +424,6 @@ LLFILE * LLFile::_Fiopen(const std::string& filename,
/************** llstdio file buffer ********************************/
-//llstdio_filebuf* llstdio_filebuf::open(const char *_Filename,
-// ios_base::openmode _Mode)
-//{
-//#if LL_WINDOWS
-// _Filet *_File;
-// if (is_open() || (_File = LLFILE::_Fiopen(_Filename, _Mode)) == 0)
-// return (0); // open failed
-//
-// _Init(_File, _Openfl);
-// _Initcvt(&_USE(_Mysb::getloc(), _Cvt));
-// return (this); // open succeeded
-//#else
-// std::filebuf* _file = std::filebuf::open(_Filename, _Mode);
-// if (NULL == _file) return NULL;
-// return this;
-//#endif
-//}
-
-
-// *TODO: Seek the underlying c stream for better cross-platform compatibility?
#if !LL_WINDOWS
llstdio_filebuf::int_type llstdio_filebuf::overflow(llstdio_filebuf::int_type __c)
{
@@ -807,7 +787,7 @@ std::streamsize llstdio_filebuf::xsgetn(char_type* __s, std::streamsize __n)
return __ret;
}
-std::streamsize llstdio_filebuf::xsputn(char_type* __s, std::streamsize __n)
+std::streamsize llstdio_filebuf::xsputn(const char_type* __s, std::streamsize __n)
{
// Optimization in the always_noconv() case, to be generalized in the
// future: when __n is sufficiently large we write directly instead of
@@ -865,23 +845,19 @@ int llstdio_filebuf::sync()
}
#endif
+#if LL_WINDOWS
/************** input file stream ********************************/
-
-llifstream::llifstream() : _M_filebuf(),
-#if LL_WINDOWS
- std::istream(&_M_filebuf) {}
-#else
- std::istream()
+llifstream::llifstream() :
+ _M_filebuf(),
+ std::istream(&_M_filebuf)
{
- this->init(&_M_filebuf);
}
-#endif
// explicit
llifstream::llifstream(const std::string& _Filename,
- ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+ ios_base::openmode _Mode) :
+ _M_filebuf(),
std::istream(&_M_filebuf)
{
llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -890,18 +866,11 @@ llifstream::llifstream(const std::string& _Filename,
_Myios::setstate(ios_base::failbit);
}
}
-#else
- std::istream()
-{
- this->init(&_M_filebuf);
- this->open(_Filename.c_str(), _Mode | ios_base::in);
-}
-#endif
// explicit
llifstream::llifstream(const char* _Filename,
- ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+ ios_base::openmode _Mode) :
+ _M_filebuf(),
std::istream(&_M_filebuf)
{
llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -910,38 +879,6 @@ llifstream::llifstream(const char* _Filename,
_Myios::setstate(ios_base::failbit);
}
}
-#else
- std::istream()
-{
- this->init(&_M_filebuf);
- this->open(_Filename, _Mode | ios_base::in);
-}
-#endif
-
-
-// explicit
-llifstream::llifstream(_Filet *_File,
- ios_base::openmode _Mode, size_t _Size) :
- _M_filebuf(_File, _Mode, _Size),
-#if LL_WINDOWS
- std::istream(&_M_filebuf) {}
-#else
- std::istream()
-{
- this->init(&_M_filebuf);
-}
-#endif
-
-#if !LL_WINDOWS
-// explicit
-llifstream::llifstream(int __fd,
- ios_base::openmode _Mode, size_t _Size) :
- _M_filebuf(__fd, _Mode, _Size),
- std::istream()
-{
- this->init(&_M_filebuf);
-}
-#endif
bool llifstream::is_open() const
{ // test if C stream has been opened
@@ -950,8 +887,6 @@ bool llifstream::is_open() const
void llifstream::open(const char* _Filename, ios_base::openmode _Mode)
{ // open a C stream with specified mode
-
-#if LL_WINDOWS
llutf16string wideName = utf8str_to_utf16str( _Filename );
if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::in) == 0)
{
@@ -961,27 +896,13 @@ void llifstream::open(const char* _Filename, ios_base::openmode _Mode)
{
_Myios::clear();
}
-#else
- if (_M_filebuf.open(_Filename, _Mode | ios_base::in) == 0)
- {
- this->setstate(ios_base::failbit);
- }
- else
- {
- this->clear();
- }
-#endif
}
void llifstream::close()
{ // close the C stream
if (_M_filebuf.close() == 0)
{
-#if LL_WINDOWS
_Myios::setstate(ios_base::failbit);
-#else
- this->setstate(ios_base::failbit);
-#endif
}
}
@@ -989,20 +910,16 @@ void llifstream::close()
/************** output file stream ********************************/
-llofstream::llofstream() : _M_filebuf(),
-#if LL_WINDOWS
- std::ostream(&_M_filebuf) {}
-#else
- std::ostream()
+llofstream::llofstream() :
+ _M_filebuf(),
+ std::ostream(&_M_filebuf)
{
- this->init(&_M_filebuf);
}
-#endif
// explicit
llofstream::llofstream(const std::string& _Filename,
- ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+ ios_base::openmode _Mode) :
+ _M_filebuf(),
std::ostream(&_M_filebuf)
{
llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -1011,18 +928,11 @@ llofstream::llofstream(const std::string& _Filename,
_Myios::setstate(ios_base::failbit);
}
}
-#else
- std::ostream()
-{
- this->init(&_M_filebuf);
- this->open(_Filename.c_str(), _Mode | ios_base::out);
-}
-#endif
// explicit
llofstream::llofstream(const char* _Filename,
- ios_base::openmode _Mode) : _M_filebuf(),
-#if LL_WINDOWS
+ ios_base::openmode _Mode) :
+ _M_filebuf(),
std::ostream(&_M_filebuf)
{
llutf16string wideName = utf8str_to_utf16str( _Filename );
@@ -1031,37 +941,6 @@ llofstream::llofstream(const char* _Filename,
_Myios::setstate(ios_base::failbit);
}
}
-#else
- std::ostream()
-{
- this->init(&_M_filebuf);
- this->open(_Filename, _Mode | ios_base::out);
-}
-#endif
-
-// explicit
-llofstream::llofstream(_Filet *_File,
- ios_base::openmode _Mode, size_t _Size) :
- _M_filebuf(_File, _Mode, _Size),
-#if LL_WINDOWS
- std::ostream(&_M_filebuf) {}
-#else
- std::ostream()
-{
- this->init(&_M_filebuf);
-}
-#endif
-
-#if !LL_WINDOWS
-// explicit
-llofstream::llofstream(int __fd,
- ios_base::openmode _Mode, size_t _Size) :
- _M_filebuf(__fd, _Mode, _Size),
- std::ostream()
-{
- this->init(&_M_filebuf);
-}
-#endif
bool llofstream::is_open() const
{ // test if C stream has been opened
@@ -1070,7 +949,6 @@ bool llofstream::is_open() const
void llofstream::open(const char* _Filename, ios_base::openmode _Mode)
{ // open a C stream with specified mode
-#if LL_WINDOWS
llutf16string wideName = utf8str_to_utf16str( _Filename );
if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0)
{
@@ -1080,27 +958,13 @@ void llofstream::open(const char* _Filename, ios_base::openmode _Mode)
{
_Myios::clear();
}
-#else
- if (_M_filebuf.open(_Filename, _Mode | ios_base::out) == 0)
- {
- this->setstate(ios_base::failbit);
- }
- else
- {
- this->clear();
- }
-#endif
}
void llofstream::close()
{ // close the C stream
if (_M_filebuf.close() == 0)
{
-#if LL_WINDOWS
_Myios::setstate(ios_base::failbit);
-#else
- this->setstate(ios_base::failbit);
-#endif
}
}
@@ -1130,4 +994,4 @@ std::streamsize llofstream_size(llofstream& ofstr)
return pos_end - pos_beg;
}
-
+#endif // LL_WINDOWS
diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h
index f56b22bf9a..347c9867aa 100755
--- a/indra/llcommon/llfile.h
+++ b/indra/llcommon/llfile.h
@@ -188,11 +188,11 @@ protected:
/*virtual*/ int sync();
std::streamsize xsgetn(char_type*, std::streamsize);
- std::streamsize xsputn(char_type*, std::streamsize);
+ std::streamsize xsputn(const char_type*, std::streamsize);
#endif
};
-
+#if LL_WINDOWS
/**
* @brief Controlling input for files.
*
@@ -201,11 +201,11 @@ protected:
* sequence, an instance of std::basic_filebuf (or a platform-specific derivative)
* which allows construction using a pre-exisintg file stream buffer.
* We refer to this std::basic_filebuf (or derivative) as @c sb.
-*/
+ */
class LL_COMMON_API llifstream : public std::istream
{
// input stream associated with a C stream
-public:
+ public:
// Constructors:
/**
* @brief Default constructor.
@@ -213,7 +213,7 @@ public:
* Initializes @c sb using its default constructor, and passes
* @c &sb to the base class initializer. Does not open any files
* (you haven't given it a filename to open).
- */
+ */
llifstream();
/**
@@ -222,44 +222,18 @@ public:
* @param Mode Open file in specified mode (see std::ios_base).
*
* @c ios_base::in is automatically included in @a mode.
- */
+ */
explicit llifstream(const std::string& _Filename,
- ios_base::openmode _Mode = ios_base::in);
+ ios_base::openmode _Mode = ios_base::in);
explicit llifstream(const char* _Filename,
- ios_base::openmode _Mode = ios_base::in);
-
- /**
- * @brief Create a stream using an open c file stream.
- * @param File An open @c FILE*.
- @param Mode Same meaning as in a standard filebuf.
- @param Size Optimal or preferred size of internal buffer, in chars.
- Defaults to system's @c BUFSIZ.
- */
- explicit llifstream(_Filet *_File,
- ios_base::openmode _Mode = ios_base::in,
- //size_t _Size = static_cast<size_t>(BUFSIZ));
- size_t _Size = static_cast<size_t>(1));
-
- /**
- * @brief Create a stream using an open file descriptor.
- * @param fd An open file descriptor.
- @param Mode Same meaning as in a standard filebuf.
- @param Size Optimal or preferred size of internal buffer, in chars.
- Defaults to system's @c BUFSIZ.
- */
-#if !LL_WINDOWS
- explicit llifstream(int __fd,
- ios_base::openmode _Mode = ios_base::in,
- //size_t _Size = static_cast<size_t>(BUFSIZ));
- size_t _Size = static_cast<size_t>(1));
-#endif
+ ios_base::openmode _Mode = ios_base::in);
/**
* @brief The destructor does nothing.
*
* The file is closed by the filebuf object, not the formatting
* stream.
- */
+ */
virtual ~llifstream() {}
// Members:
@@ -275,7 +249,7 @@ public:
/**
* @brief Wrapper to test for an open file.
* @return @c rdbuf()->is_open()
- */
+ */
bool is_open() const;
/**
@@ -285,22 +259,22 @@ public:
*
* Calls @c llstdio_filebuf::open(s,mode|in). If that function
* fails, @c failbit is set in the stream's error state.
- */
+ */
void open(const std::string& _Filename,
- ios_base::openmode _Mode = ios_base::in)
+ ios_base::openmode _Mode = ios_base::in)
{ open(_Filename.c_str(), _Mode); }
void open(const char* _Filename,
- ios_base::openmode _Mode = ios_base::in);
+ ios_base::openmode _Mode = ios_base::in);
/**
* @brief Close the file.
*
* Calls @c llstdio_filebuf::close(). If that function
* fails, @c failbit is set in the stream's error state.
- */
+ */
void close();
-private:
+ private:
llstdio_filebuf _M_filebuf;
};
@@ -316,7 +290,7 @@ private:
*/
class LL_COMMON_API llofstream : public std::ostream
{
-public:
+ public:
// Constructors:
/**
* @brief Default constructor.
@@ -324,7 +298,7 @@ public:
* Initializes @c sb using its default constructor, and passes
* @c &sb to the base class initializer. Does not open any files
* (you haven't given it a filename to open).
- */
+ */
llofstream();
/**
@@ -334,37 +308,11 @@ public:
*
* @c ios_base::out|ios_base::trunc is automatically included in
* @a mode.
- */
+ */
explicit llofstream(const std::string& _Filename,
- ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
+ ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
explicit llofstream(const char* _Filename,
- ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
-
- /**
- * @brief Create a stream using an open c file stream.
- * @param File An open @c FILE*.
- @param Mode Same meaning as in a standard filebuf.
- @param Size Optimal or preferred size of internal buffer, in chars.
- Defaults to system's @c BUFSIZ.
- */
- explicit llofstream(_Filet *_File,
- ios_base::openmode _Mode = ios_base::out,
- //size_t _Size = static_cast<size_t>(BUFSIZ));
- size_t _Size = static_cast<size_t>(1));
-
- /**
- * @brief Create a stream using an open file descriptor.
- * @param fd An open file descriptor.
- @param Mode Same meaning as in a standard filebuf.
- @param Size Optimal or preferred size of internal buffer, in chars.
- Defaults to system's @c BUFSIZ.
- */
-#if !LL_WINDOWS
- explicit llofstream(int __fd,
- ios_base::openmode _Mode = ios_base::out,
- //size_t _Size = static_cast<size_t>(BUFSIZ));
- size_t _Size = static_cast<size_t>(1));
-#endif
+ ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
/**
* @brief The destructor does nothing.
@@ -397,22 +345,22 @@ public:
*
* Calls @c llstdio_filebuf::open(s,mode|out). If that function
* fails, @c failbit is set in the stream's error state.
- */
+ */
void open(const std::string& _Filename,
- ios_base::openmode _Mode = ios_base::out|ios_base::trunc)
+ ios_base::openmode _Mode = ios_base::out|ios_base::trunc)
{ open(_Filename.c_str(), _Mode); }
void open(const char* _Filename,
- ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
+ ios_base::openmode _Mode = ios_base::out|ios_base::trunc);
/**
* @brief Close the file.
*
* Calls @c llstdio_filebuf::close(). If that function
* fails, @c failbit is set in the stream's error state.
- */
+ */
void close();
-private:
+ private:
llstdio_filebuf _M_filebuf;
};
@@ -427,4 +375,12 @@ private:
std::streamsize LL_COMMON_API llifstream_size(llifstream& fstr);
std::streamsize LL_COMMON_API llofstream_size(llofstream& fstr);
+#else // ! LL_WINDOWS
+
+// on non-windows, llifstream and llofstream are just mapped directly to the std:: equivalents
+typedef std::ifstream llifstream;
+typedef std::ofstream llofstream;
+
+#endif // LL_WINDOWS or ! LL_WINDOWS
+
#endif // not LL_LLFILE_H
diff --git a/indra/llcommon/llframetimer.cpp b/indra/llcommon/llframetimer.cpp
index 1af2cb8afd..1e9920746b 100755
--- a/indra/llcommon/llframetimer.cpp
+++ b/indra/llcommon/llframetimer.cpp
@@ -37,7 +37,6 @@ U64 LLFrameTimer::sTotalTime = 0;
F64 LLFrameTimer::sTotalSeconds = 0.0;
S32 LLFrameTimer::sFrameCount = 0;
U64 LLFrameTimer::sFrameDeltaTime = 0;
-const F64 USEC_PER_SECOND = 1000000.0;
const F64 USEC_TO_SEC_F64 = 0.000001;
// static
diff --git a/indra/llcommon/llhash.h b/indra/llcommon/llhash.h
index c077ebe93f..4b58e81565 100755
--- a/indra/llcommon/llhash.h
+++ b/indra/llcommon/llhash.h
@@ -27,26 +27,7 @@
#ifndef LL_LLHASH_H
#define LL_LLHASH_H
-#include "llpreprocessor.h" // for GCC_VERSION
-
-#if (LL_WINDOWS)
-#include <hash_map>
-#include <algorithm>
-#elif LL_DARWIN || LL_LINUX
-# if GCC_VERSION >= 40300 // gcc 4.3 and up
-# include <backward/hashtable.h>
-# elif GCC_VERSION >= 30400 // gcc 3.4 and up
-# include <ext/hashtable.h>
-# elif __GNUC__ >= 3
-# include <ext/stl_hashtable.h>
-# else
-# include <hashtable.h>
-# endif
-#elif LL_SOLARIS
-#include <ext/hashtable.h>
-#else
-#error Please define your platform.
-#endif
+#include <boost/functional/hash.hpp>
// Warning - an earlier template-based version of this routine did not do
// the correct thing on Windows. Since this is only used to get
@@ -55,17 +36,17 @@
inline size_t llhash( const char * value )
{
-#if LL_WINDOWS
- return stdext::hash_value(value);
-#elif ( (defined _STLPORT_VERSION) || ((LL_LINUX) && (__GNUC__ <= 2)) )
- std::hash<const char *> H;
- return H(value);
-#elif LL_DARWIN || LL_LINUX || LL_SOLARIS
- __gnu_cxx::hash<const char *> H;
- return H(value);
-#else
-#error Please define your platform.
-#endif
+ // boost::hash is defined for std::string and for char, but there's no
+ // special overload for const char*. The lazy approach would be to
+ // instantiate a std::string and take its hash, but that might be more
+ // overhead than our callers want. Or we could use boost::hash_range() --
+ // but that would require a preliminary pass over the value to determine
+ // the end iterator. Instead, use boost::hash_combine() to hash individual
+ // characters.
+ std::size_t seed = 0;
+ for ( ; *value; ++value)
+ boost::hash_combine(seed, *value);
+ return seed;
}
#endif
diff --git a/indra/llcommon/llinitparam.h b/indra/llcommon/llinitparam.h
index 7aa87fcd0e..c65b05f610 100755
--- a/indra/llcommon/llinitparam.h
+++ b/indra/llcommon/llinitparam.h
@@ -435,7 +435,7 @@ namespace LLInitParam
typedef self_t type_value_t;
TypeValuesHelper(const std::string& val)
- : TypeValuesHelper(val)
+ : base_t(val)
{}
void operator ()(const std::string& name)
@@ -1123,7 +1123,7 @@ namespace LLInitParam
void set(const value_t& val, bool flag_as_provided = true)
{
named_value_t::clearValueName();
- setValue(val);
+ named_value_t::setValue(val);
setProvided(flag_as_provided);
}
@@ -1287,7 +1287,7 @@ namespace LLInitParam
// assign block contents to this param-that-is-a-block
void set(const value_t& val, bool flag_as_provided = true)
{
- setValue(val);
+ named_value_t::setValue(val);
named_value_t::clearValueName();
setProvided(flag_as_provided);
}
@@ -2054,7 +2054,7 @@ namespace LLInitParam
Optional& operator =(const value_t& val)
{
- set(val);
+ super_t::set(val);
return *this;
}
@@ -2084,7 +2084,7 @@ namespace LLInitParam
Mandatory& operator =(const value_t& val)
{
- set(val);
+ super_t::set(val);
return *this;
}
@@ -2120,7 +2120,7 @@ namespace LLInitParam
Multiple& operator =(const container_t& val)
{
- set(val);
+ super_t::set(val);
return *this;
}
diff --git a/indra/llcommon/llliveappconfig.cpp b/indra/llcommon/llliveappconfig.cpp
index 7c87c5a1a0..a9b1cdf4f6 100755
--- a/indra/llcommon/llliveappconfig.cpp
+++ b/indra/llcommon/llliveappconfig.cpp
@@ -49,7 +49,7 @@ bool LLLiveAppConfig::loadFile()
{
LL_INFOS() << "LLLiveAppConfig::loadFile(): reading from "
<< filename() << LL_ENDL;
- llifstream file(filename());
+ llifstream file(filename().c_str());
LLSD config;
if (file.is_open())
{
diff --git a/indra/llcommon/lllivefile.cpp b/indra/llcommon/lllivefile.cpp
index c1987baf55..ea485c2d86 100755
--- a/indra/llcommon/lllivefile.cpp
+++ b/indra/llcommon/lllivefile.cpp
@@ -51,6 +51,8 @@ public:
bool mLastExists;
LLEventTimer* mEventTimer;
+private:
+ LOG_CLASS(LLLiveFile);
};
LLLiveFile::Impl::Impl(const std::string& filename, const F32 refresh_period)
@@ -83,46 +85,51 @@ LLLiveFile::~LLLiveFile()
bool LLLiveFile::Impl::check()
{
- if (!mForceCheck && mRefreshTimer.getElapsedTimeF32() < mRefreshPeriod)
+ bool detected_change = false;
+ // Skip the check if not enough time has elapsed and we're not
+ // forcing a check of the file
+ if (mForceCheck || mRefreshTimer.getElapsedTimeF32() >= mRefreshPeriod)
{
- // Skip the check if not enough time has elapsed and we're not
- // forcing a check of the file
- return false;
- }
- mForceCheck = false;
- mRefreshTimer.reset();
-
- // Stat the file to see if it exists and when it was last modified.
- llstat stat_data;
- int res = LLFile::stat(mFilename, &stat_data);
-
- if (res)
- {
- // Couldn't stat the file, that means it doesn't exist or is
- // broken somehow. Clear flags and return.
- if (mLastExists)
- {
- mLastExists = false;
- return true; // no longer existing is a change!
- }
- return false;
- }
-
- // The file exists, decide if we want to load it.
- if (mLastExists)
- {
- // The file existed last time, don't read it if it hasn't changed since
- // last time.
- if (stat_data.st_mtime <= mLastModTime)
- {
- return false;
- }
- }
-
- // We want to read the file. Update status info for the file.
- mLastExists = true;
- mLastStatTime = stat_data.st_mtime;
- return true;
+ mForceCheck = false; // force only forces one check
+ mRefreshTimer.reset(); // don't check again until mRefreshPeriod has passed
+
+ // Stat the file to see if it exists and when it was last modified.
+ llstat stat_data;
+ if (LLFile::stat(mFilename, &stat_data))
+ {
+ // Couldn't stat the file, that means it doesn't exist or is
+ // broken somehow.
+ if (mLastExists)
+ {
+ mLastExists = false;
+ detected_change = true; // no longer existing is a change!
+ LL_DEBUGS() << "detected deleted file '" << mFilename << "'" << LL_ENDL;
+ }
+ }
+ else
+ {
+ // The file exists
+ if ( ! mLastExists )
+ {
+ // last check, it did not exist - that counts as a change
+ LL_DEBUGS() << "detected created file '" << mFilename << "'" << LL_ENDL;
+ detected_change = true;
+ }
+ else if ( stat_data.st_mtime > mLastModTime )
+ {
+ // file modification time is newer than last check
+ LL_DEBUGS() << "detected updated file '" << mFilename << "'" << LL_ENDL;
+ detected_change = true;
+ }
+ mLastExists = true;
+ mLastStatTime = stat_data.st_mtime;
+ }
+ }
+ if (detected_change)
+ {
+ LL_INFOS() << "detected file change '" << mFilename << "'" << LL_ENDL;
+ }
+ return detected_change;
}
void LLLiveFile::Impl::changed()
diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp
index ed80af36d8..f942a976b7 100755
--- a/indra/llcommon/llmd5.cpp
+++ b/indra/llcommon/llmd5.cpp
@@ -118,6 +118,12 @@ void LLMD5::update (const uint1 *input, const uint4 input_length) {
buffer_space = 64 - buffer_index; // how much space is left in buffer
+ // now, transform each 64-byte piece of the input, bypassing the buffer
+ if (input == NULL || input_length == 0){
+ std::cerr << "LLMD5::update: Invalid input!" << std::endl;
+ return;
+ }
+
// Transform as many times as possible.
if (input_length >= buffer_space) { // ie. we have enough to fill the buffer
// fill the rest of the buffer and transform
@@ -127,12 +133,6 @@ void LLMD5::update (const uint1 *input, const uint4 input_length) {
buffer_space);
transform (buffer);
- // now, transform each 64-byte piece of the input, bypassing the buffer
- if (input == NULL || input_length == 0){
- std::cerr << "LLMD5::update: Invalid input!" << std::endl;
- return;
- }
-
for (input_index = buffer_space; input_index + 63 < input_length;
input_index += 64)
transform (input+input_index);
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
index e0b2aa87c2..ae11988df8 100755
--- a/indra/llcommon/llmemory.cpp
+++ b/indra/llcommon/llmemory.cpp
@@ -63,13 +63,18 @@ LLPrivateMemoryPoolManager::mem_allocation_info_t LLPrivateMemoryPoolManager::sM
void ll_assert_aligned_func(uintptr_t ptr,U32 alignment)
{
-#ifdef SHOW_ASSERT
- // Redundant, place to set breakpoints.
- if (ptr%alignment!=0)
- {
- LL_WARNS() << "alignment check failed" << LL_ENDL;
- }
- llassert(ptr%alignment==0);
+#if defined(LL_WINDOWS) && defined(LL_DEBUG_BUFFER_OVERRUN)
+ //do not check
+ return;
+#else
+ #ifdef SHOW_ASSERT
+ // Redundant, place to set breakpoints.
+ if (ptr%alignment!=0)
+ {
+ LL_WARNS() << "alignment check failed" << LL_ENDL;
+ }
+ llassert(ptr%alignment==0);
+ #endif
#endif
}
@@ -2148,3 +2153,60 @@ void LLPrivateMemoryPoolTester::fragmentationtest()
}
#endif
//--------------------------------------------------------------------
+
+#if defined(LL_WINDOWS) && defined(LL_DEBUG_BUFFER_OVERRUN)
+
+#include <map>
+
+struct mem_info {
+ std::map<void*, void*> memory_info;
+ LLMutex mutex;
+
+ static mem_info& get() {
+ static mem_info instance;
+ return instance;
+ }
+
+private:
+ mem_info(){}
+};
+
+void* ll_aligned_malloc_fallback( size_t size, int align )
+{
+ SYSTEM_INFO sysinfo;
+ GetSystemInfo(&sysinfo);
+
+ unsigned int for_alloc = sysinfo.dwPageSize;
+ while(for_alloc < size) for_alloc += sysinfo.dwPageSize;
+
+ void *p = VirtualAlloc(NULL, for_alloc+sysinfo.dwPageSize, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
+ if(NULL == p) {
+ // call debugger
+ __asm int 3;
+ }
+ DWORD old;
+ BOOL Res = VirtualProtect((void*)((char*)p + for_alloc), sysinfo.dwPageSize, PAGE_NOACCESS, &old);
+ if(FALSE == Res) {
+ // call debugger
+ __asm int 3;
+ }
+
+ void* ret = (void*)((char*)p + for_alloc-size);
+
+ {
+ LLMutexLock lock(&mem_info::get().mutex);
+ mem_info::get().memory_info.insert(std::pair<void*, void*>(ret, p));
+ }
+
+
+ return ret;
+}
+
+void ll_aligned_free_fallback( void* ptr )
+{
+ LLMutexLock lock(&mem_info::get().mutex);
+ VirtualFree(mem_info::get().memory_info.find(ptr)->second, 0, MEM_RELEASE);
+ mem_info::get().memory_info.erase(ptr);
+}
+
+#endif
diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h
index 7d1d541a4b..c4c9cc0566 100755
--- a/indra/llcommon/llmemory.h
+++ b/indra/llcommon/llmemory.h
@@ -94,32 +94,44 @@ template <typename T> T* LL_NEXT_ALIGNED_ADDRESS_64(T* address)
#define LL_ALIGN_16(var) LL_ALIGN_PREFIX(16) var LL_ALIGN_POSTFIX(16)
-
-inline void* ll_aligned_malloc_fallback( size_t size, int align )
-{
-#if defined(LL_WINDOWS)
- return _aligned_malloc(size, align);
+//------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------------
+ // for enable buffer overrun detection predefine LL_DEBUG_BUFFER_OVERRUN in current library
+ // change preprocessro code to: #if 1 && defined(LL_WINDOWS)
+
+#if 0 && defined(LL_WINDOWS)
+ void* ll_aligned_malloc_fallback( size_t size, int align );
+ void ll_aligned_free_fallback( void* ptr );
+//------------------------------------------------------------------------------------------------
#else
- void* mem = malloc( size + (align - 1) + sizeof(void*) );
- char* aligned = ((char*)mem) + sizeof(void*);
- aligned += align - ((uintptr_t)aligned & (align - 1));
-
- ((void**)aligned)[-1] = mem;
- return aligned;
-#endif
-}
+ inline void* ll_aligned_malloc_fallback( size_t size, int align )
+ {
+ #if defined(LL_WINDOWS)
+ return _aligned_malloc(size, align);
+ #else
+ void* mem = malloc( size + (align - 1) + sizeof(void*) );
+ char* aligned = ((char*)mem) + sizeof(void*);
+ aligned += align - ((uintptr_t)aligned & (align - 1));
+
+ ((void**)aligned)[-1] = mem;
+ return aligned;
+ #endif
+ }
-inline void ll_aligned_free_fallback( void* ptr )
-{
-#if defined(LL_WINDOWS)
- _aligned_free(ptr);
-#else
- if (ptr)
+ inline void ll_aligned_free_fallback( void* ptr )
{
- free( ((void**)ptr)[-1] );
+ #if defined(LL_WINDOWS)
+ _aligned_free(ptr);
+ #else
+ if (ptr)
+ {
+ free( ((void**)ptr)[-1] );
+ }
+ #endif
}
#endif
-}
+//------------------------------------------------------------------------------------------------
+//------------------------------------------------------------------------------------------------
#if !LL_USE_TCMALLOC
inline void* ll_aligned_malloc_16(size_t size) // returned hunk MUST be freed with ll_aligned_free_16().
diff --git a/indra/llcommon/llpredicate.h b/indra/llcommon/llpredicate.h
index a0e970a799..e6c56a5711 100644
--- a/indra/llcommon/llpredicate.h
+++ b/indra/llcommon/llpredicate.h
@@ -139,9 +139,9 @@ namespace LLPredicate
Rule()
{}
- void require(ENUM e)
+ void require(ENUM e, bool match)
{
- mRule.set(e, require);
+ mRule.set(e, match);
}
void allow(ENUM e)
diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h
index 309165da7f..2c4bcc91f6 100755
--- a/indra/llcommon/llpreprocessor.h
+++ b/indra/llcommon/llpreprocessor.h
@@ -101,6 +101,11 @@
#endif
+#if LL_WINDOWS
+# define LL_THREAD_LOCAL __declspec(thread)
+#else
+# define LL_THREAD_LOCAL __thread
+#endif
// Static linking with apr on windows needs to be declared.
#if LL_WINDOWS && !LL_COMMON_LINK_SHARED
diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp
index 69043dc173..e3e1d0c391 100755
--- a/indra/llcommon/llprocessor.cpp
+++ b/indra/llcommon/llprocessor.cpp
@@ -204,21 +204,6 @@ namespace
return "Unknown";
}
- std::string compute_CPUFamilyName(const char* cpu_vendor, int composed_family)
- {
- const char* intel_string = "GenuineIntel";
- const char* amd_string = "AuthenticAMD";
- if(!strncmp(cpu_vendor, intel_string, strlen(intel_string)))
- {
- return intel_CPUFamilyName(composed_family);
- }
- else if(!strncmp(cpu_vendor, amd_string, strlen(amd_string)))
- {
- return amd_CPUFamilyName(composed_family);
- }
- return "Unknown";
- }
-
std::string compute_CPUFamilyName(const char* cpu_vendor, int family, int ext_family)
{
const char* intel_string = "GenuineIntel";
@@ -793,7 +778,7 @@ private:
setInfo(eFamily, family);
}
- setInfo(eFamilyName, compute_CPUFamilyName(cpuinfo["vendor_id"].c_str(), family));
+ setInfo(eFamilyName, compute_CPUFamilyName(cpuinfo["vendor_id"].c_str(), family, 0));
// setInfo(eExtendedModel, getSysctlInt("machdep.cpu.extmodel"));
// setInfo(eBrandID, getSysctlInt("machdep.cpu.brand"));
diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h
index 72011d04a0..3836a9b5fb 100755
--- a/indra/llcommon/llrefcount.h
+++ b/indra/llcommon/llrefcount.h
@@ -151,29 +151,25 @@ private:
* intrusive pointer support for LLThreadSafeRefCount
* this allows you to use boost::intrusive_ptr with any LLThreadSafeRefCount-derived type
*/
-namespace boost
-{
- inline void intrusive_ptr_add_ref(LLThreadSafeRefCount* p)
- {
- p->ref();
- }
-
- inline void intrusive_ptr_release(LLThreadSafeRefCount* p)
- {
- p->unref();
- }
- inline void intrusive_ptr_add_ref(LLRefCount* p)
- {
- p->ref();
- }
+inline void intrusive_ptr_add_ref(LLThreadSafeRefCount* p)
+{
+ p->ref();
+}
- inline void intrusive_ptr_release(LLRefCount* p)
- {
- p->unref();
- }
-};
+inline void intrusive_ptr_release(LLThreadSafeRefCount* p)
+{
+ p->unref();
+}
+inline void intrusive_ptr_add_ref(LLRefCount* p)
+{
+ p->ref();
+}
+inline void intrusive_ptr_release(LLRefCount* p)
+{
+ p->unref();
+}
#endif
diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp
index d8bbb3a74f..57aa7d9c07 100755
--- a/indra/llcommon/llsd.cpp
+++ b/indra/llcommon/llsd.cpp
@@ -789,10 +789,7 @@ namespace
{
inline LLSD::Impl& safe(LLSD::Impl* impl)
{ return LLSD::Impl::safe(impl); }
-
- inline const LLSD::Impl& safe(const LLSD::Impl* impl)
- { return LLSD::Impl::safe(impl); }
-
+
inline ImplMap& makeMap(LLSD::Impl*& var)
{ return safe(var).makeMap(var); }
diff --git a/indra/llcommon/llsdparam.h b/indra/llcommon/llsdparam.h
index 1542f95e68..09f1bdf1e3 100755
--- a/indra/llcommon/llsdparam.h
+++ b/indra/llcommon/llsdparam.h
@@ -106,7 +106,6 @@ private:
Parser::name_stack_t mNameStack;
const LLSD* mCurReadSD;
LLSD* mWriteRootSD;
- LLSD* mCurWriteSD;
};
diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp
index 562fd26658..6ad4a97149 100755
--- a/indra/llcommon/llsdutil.cpp
+++ b/indra/llcommon/llsdutil.cpp
@@ -572,7 +572,7 @@ std::string llsd_matches(const LLSD& prototype, const LLSD& data, const std::str
return match_types(prototype.type(), TypeVector(), data.type(), pfx);
}
-bool llsd_equals(const LLSD& lhs, const LLSD& rhs, unsigned bits)
+bool llsd_equals(const LLSD& lhs, const LLSD& rhs, int bits)
{
// We're comparing strict equality of LLSD representation rather than
// performing any conversions. So if the types aren't equal, the LLSD
diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h
index d0b536c39a..99cb79aa54 100755
--- a/indra/llcommon/llsdutil.h
+++ b/indra/llcommon/llsdutil.h
@@ -126,7 +126,7 @@ LL_COMMON_API std::string llsd_matches(const LLSD& prototype, const LLSD& data,
/// Deep equality. If you want to compare LLSD::Real values for approximate
/// equality rather than bitwise equality, pass @a bits as for
/// is_approx_equal_fraction().
-LL_COMMON_API bool llsd_equals(const LLSD& lhs, const LLSD& rhs, unsigned bits=-1);
+LL_COMMON_API bool llsd_equals(const LLSD& lhs, const LLSD& rhs, int bits=-1);
// Simple function to copy data out of input & output iterators if
// there is no need for casting.
diff --git a/indra/llcommon/llstacktrace.cpp b/indra/llcommon/llstacktrace.cpp
index e0e9056380..bbf0e1e141 100755
--- a/indra/llcommon/llstacktrace.cpp
+++ b/indra/llcommon/llstacktrace.cpp
@@ -125,6 +125,30 @@ bool ll_get_stack_trace(std::vector<std::string>& lines)
return false;
}
+void ll_get_stack_trace_internal(std::vector<std::string>& lines)
+{
+ const S32 MAX_STACK_DEPTH = 100;
+ const S32 STRING_NAME_LENGTH = 256;
+
+ HANDLE process = GetCurrentProcess();
+ SymInitialize( process, NULL, TRUE );
+
+ void *stack[MAX_STACK_DEPTH];
+
+ unsigned short frames = RtlCaptureStackBackTrace_fn( 0, MAX_STACK_DEPTH, stack, NULL );
+ SYMBOL_INFO *symbol = (SYMBOL_INFO*)calloc(sizeof(SYMBOL_INFO) + STRING_NAME_LENGTH * sizeof(char), 1);
+ symbol->MaxNameLen = STRING_NAME_LENGTH-1;
+ symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
+
+ for(unsigned int i = 0; i < frames; i++)
+ {
+ SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol);
+ lines.push_back(symbol->Name);
+ }
+
+ free( symbol );
+}
+
#else
bool ll_get_stack_trace(std::vector<std::string>& lines)
@@ -132,5 +156,10 @@ bool ll_get_stack_trace(std::vector<std::string>& lines)
return false;
}
+void ll_get_stack_trace_internal(std::vector<std::string>& lines)
+{
+
+}
+
#endif
diff --git a/indra/llcommon/llstacktrace.h b/indra/llcommon/llstacktrace.h
index ca72c64c5d..335765386a 100755
--- a/indra/llcommon/llstacktrace.h
+++ b/indra/llcommon/llstacktrace.h
@@ -33,6 +33,7 @@
#include <string>
LL_COMMON_API bool ll_get_stack_trace(std::vector<std::string>& lines);
+LL_COMMON_API void ll_get_stack_trace_internal(std::vector<std::string>& lines);
#endif
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 76979f29f6..f3b8999883 100755
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -107,7 +107,7 @@ bool iswindividual(llwchar elem)
bool _read_file_into_string(std::string& str, const std::string& filename)
{
- llifstream ifs(filename, llifstream::binary);
+ llifstream ifs(filename.c_str(), llifstream::binary);
if (!ifs.is_open())
{
LL_INFOS() << "Unable to open file " << filename << LL_ENDL;
@@ -1397,7 +1397,7 @@ void LLStringUtilBase<T>::testHarness()
s2.erase( 4, 1 );
llassert( s2 == "hell");
- s2.insert( 0, 'y' );
+ s2.insert( 0, "y" );
llassert( s2 == "yhell");
s2.erase( 1, 3 );
llassert( s2 == "yl");
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index 06e118aa44..1a66612e87 100755
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -99,8 +99,6 @@ const char MEMINFO_FILE[] = "/proc/meminfo";
extern int errno;
#endif
-
-static const S32 CPUINFO_BUFFER_SIZE = 16383;
LLCPUInfo gSysCPU;
// Don't log memory info any more often than this. It also serves as our
@@ -672,8 +670,6 @@ const std::string& LLOSInfo::getOSVersionString() const
return mOSVersionString;
}
-const S32 STATUS_SIZE = 8192;
-
//static
U32 LLOSInfo::getProcessVirtualSizeKB()
{
@@ -681,6 +677,7 @@ U32 LLOSInfo::getProcessVirtualSizeKB()
#if LL_WINDOWS
#endif
#if LL_LINUX
+# define STATUS_SIZE 2048
LLFILE* status_filep = LLFile::fopen("/proc/self/status", "rb");
if (status_filep)
{
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
index 51c89e1eaf..c3f235c6ee 100755
--- a/indra/llcommon/llthread.cpp
+++ b/indra/llcommon/llthread.cpp
@@ -92,13 +92,7 @@ void set_thread_name( DWORD dwThreadID, const char* threadName)
//
//----------------------------------------------------------------------------
-#if LL_DARWIN
-// statically allocated thread local storage not supported in Darwin executable formats
-#elif LL_WINDOWS
-U32 __declspec(thread) sThreadID = 0;
-#elif LL_LINUX
-U32 __thread sThreadID = 0;
-#endif
+U32 LL_THREAD_LOCAL sThreadID = 0;
U32 LLThread::sIDIter = 0;
@@ -115,9 +109,7 @@ LL_COMMON_API void assert_main_thread()
void LLThread::registerThreadID()
{
-#if !LL_DARWIN
sThreadID = ++sIDIter;
-#endif
}
//
@@ -134,9 +126,7 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap
// for now, hard code all LLThreads to report to single master thread recorder, which is known to be running on main thread
threadp->mRecorder = new LLTrace::ThreadRecorder(*LLTrace::get_master_thread_recorder());
-#if !LL_DARWIN
sThreadID = threadp->mID;
-#endif
// Run the user supplied function
threadp->run();
@@ -347,13 +337,7 @@ void LLThread::setQuitting()
// static
U32 LLThread::currentID()
{
-#if LL_DARWIN
- // statically allocated thread local storage not supported in Darwin executable formats
- return (U32)apr_os_thread_current();
-#else
return sThreadID;
-#endif
-
}
// static
diff --git a/indra/llcommon/llthreadlocalstorage.h b/indra/llcommon/llthreadlocalstorage.h
index ec3b52c8cb..3b5786023f 100644
--- a/indra/llcommon/llthreadlocalstorage.h
+++ b/indra/llcommon/llthreadlocalstorage.h
@@ -130,56 +130,19 @@ class LLThreadLocalSingletonPointer
public:
LL_FORCE_INLINE static DERIVED_TYPE* getInstance()
{
-#if LL_DARWIN
- createTLSKey();
- return (DERIVED_TYPE*)pthread_getspecific(sInstanceKey);
-#else
return sInstance;
-#endif
}
static void setInstance(DERIVED_TYPE* instance)
{
-#if LL_DARWIN
- createTLSKey();
- pthread_setspecific(sInstanceKey, (void*)instance);
-#else
sInstance = instance;
-#endif
}
private:
-
-#if LL_WINDOWS
- static __declspec(thread) DERIVED_TYPE* sInstance;
-#elif LL_LINUX
- static __thread DERIVED_TYPE* sInstance;
-#elif LL_DARWIN
- static void TLSError()
- {
- LL_ERRS() << "Could not create thread local storage" << LL_ENDL;
- }
- static void createTLSKey()
- {
- static S32 key_created = pthread_key_create(&sInstanceKey, NULL);
- if (key_created != 0)
- {
- LL_ERRS() << "Could not create thread local storage" << LL_ENDL;
- }
- }
- static pthread_key_t sInstanceKey;
-#endif
+ static LL_THREAD_LOCAL DERIVED_TYPE* sInstance;
};
-#if LL_WINDOWS
-template<typename DERIVED_TYPE>
-__declspec(thread) DERIVED_TYPE* LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstance = NULL;
-#elif LL_LINUX
-template<typename DERIVED_TYPE>
-__thread DERIVED_TYPE* LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstance = NULL;
-#elif LL_DARWIN
template<typename DERIVED_TYPE>
-pthread_key_t LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstanceKey;
-#endif
+LL_THREAD_LOCAL DERIVED_TYPE* LLThreadLocalSingletonPointer<DERIVED_TYPE>::sInstance = NULL;
#endif // LL_LLTHREADLOCALSTORAGE_H
diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp
index ab105a82e6..76e892212a 100755
--- a/indra/llcommon/lltimer.cpp
+++ b/indra/llcommon/lltimer.cpp
@@ -39,14 +39,10 @@
# error "architecture not supported"
#endif
-
//
// Locally used constants
//
-const F64 SEC_TO_MICROSEC = 1000000.f;
const U64 SEC_TO_MICROSEC_U64 = 1000000;
-const F64 USEC_TO_SEC_F64 = 0.000001;
-
//---------------------------------------------------------------------------
// Globals and statics
diff --git a/indra/llcommon/lltraceaccumulators.h b/indra/llcommon/lltraceaccumulators.h
index 42fad8a793..6f27b97dff 100644
--- a/indra/llcommon/lltraceaccumulators.h
+++ b/indra/llcommon/lltraceaccumulators.h
@@ -62,11 +62,11 @@ namespace LLTrace
{}
public:
-
- AccumulatorBuffer(const AccumulatorBuffer& other = *getDefaultBuffer())
- : mStorageSize(0),
+ AccumulatorBuffer()
+ : mStorageSize(0),
mStorage(NULL)
{
+ const AccumulatorBuffer& other = *getDefaultBuffer();
resize(sNextStorageSlot);
for (S32 i = 0; i < sNextStorageSlot; i++)
{
@@ -93,6 +93,18 @@ namespace LLTrace
return mStorage[index];
}
+
+ AccumulatorBuffer(const AccumulatorBuffer& other)
+ : mStorageSize(0),
+ mStorage(NULL)
+ {
+ resize(sNextStorageSlot);
+ for (S32 i = 0; i < sNextStorageSlot; i++)
+ {
+ mStorage[i] = other.mStorage[i];
+ }
+ }
+
void addSamples(const AccumulatorBuffer<ACCUMULATOR>& other, EBufferAppendType append_type)
{
llassert(mStorageSize >= sNextStorageSlot && other.mStorageSize >= sNextStorageSlot);
diff --git a/indra/llcommon/llunittype.h b/indra/llcommon/llunittype.h
index 0e05ecd683..ac8504ca61 100644
--- a/indra/llcommon/llunittype.h
+++ b/indra/llcommon/llunittype.h
@@ -87,6 +87,40 @@ struct LLUnit
: mValue(value)
{}
+
+ LL_FORCE_INLINE static self_t convert(self_t v)
+ {
+ return v;
+ }
+
+ template<typename FROM_STORAGE_TYPE>
+ LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, UNITS> v)
+ {
+ self_t result;
+ result.mValue = (STORAGE_TYPE)v.value();
+ return result;
+ }
+
+ template<typename FROM_UNITS>
+ LL_FORCE_INLINE static self_t convert(LLUnit<STORAGE_TYPE, FROM_UNITS> v)
+ {
+ self_t result;
+ STORAGE_TYPE divisor = ll_convert_units(v, result);
+ result.mValue /= divisor;
+ return result;
+ }
+
+ template<typename FROM_STORAGE_TYPE, typename FROM_UNITS>
+ LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, FROM_UNITS> v)
+ {
+ typedef typename LLResultTypePromote<FROM_STORAGE_TYPE, STORAGE_TYPE>::type_t result_storage_t;
+ LLUnit<result_storage_t, UNITS> result;
+ result_storage_t divisor = ll_convert_units(v, result);
+ result.value(result.value() / divisor);
+ return self_t(result.value());
+ }
+
+
// unit initialization and conversion
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE LLUnit(LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other)
@@ -183,38 +217,6 @@ struct LLUnit
return mValue >= convert(other).value();
}
- LL_FORCE_INLINE static self_t convert(self_t v)
- {
- return v;
- }
-
- template<typename FROM_STORAGE_TYPE>
- LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, UNITS> v)
- {
- self_t result;
- result.mValue = (STORAGE_TYPE)v.value();
- return result;
- }
-
- template<typename FROM_UNITS>
- LL_FORCE_INLINE static self_t convert(LLUnit<STORAGE_TYPE, FROM_UNITS> v)
- {
- self_t result;
- STORAGE_TYPE divisor = ll_convert_units(v, result);
- result.mValue /= divisor;
- return result;
- }
-
- template<typename FROM_STORAGE_TYPE, typename FROM_UNITS>
- LL_FORCE_INLINE static self_t convert(LLUnit<FROM_STORAGE_TYPE, FROM_UNITS> v)
- {
- typedef typename LLResultTypePromote<FROM_STORAGE_TYPE, STORAGE_TYPE>::type_t result_storage_t;
- LLUnit<result_storage_t, UNITS> result;
- result_storage_t divisor = ll_convert_units(v, result);
- result.value(result.value() / divisor);
- return self_t(result.value());
- }
-
protected:
storage_t mValue;
};
@@ -269,7 +271,7 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE void operator += (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other)
{
- base_t::mValue += convert(other).value();
+ base_t::mValue += base_t::convert(other).value();
}
using base_t::operator -=;
@@ -283,19 +285,19 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE void operator -= (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other)
{
- base_t::mValue -= convert(other).value();
+ base_t::mValue -= base_t::convert(other).value();
}
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator == (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue == convert(other).value();
+ return base_t::mValue == base_t::convert(other).value();
}
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator == (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue == convert(other).value();
+ return base_t::mValue == base_t::convert(other).value();
}
template<typename STORAGE_T>
@@ -313,7 +315,7 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator != (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue != convert(other).value();
+ return base_t::mValue != base_t::convert(other).value();
}
template<typename STORAGE_T>
@@ -325,13 +327,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator < (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue < convert(other).value();
+ return base_t::mValue < base_t::convert(other).value();
}
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator < (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue < convert(other).value();
+ return base_t::mValue < base_t::convert(other).value();
}
template<typename STORAGE_T>
@@ -343,13 +345,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator <= (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue <= convert(other).value();
+ return base_t::mValue <= base_t::convert(other).value();
}
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator <= (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue <= convert(other).value();
+ return base_t::mValue <= base_t::convert(other).value();
}
template<typename STORAGE_T>
@@ -361,13 +363,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator > (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue > convert(other).value();
+ return base_t::mValue > base_t::convert(other).value();
}
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator > (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue > convert(other).value();
+ return base_t::mValue > base_t::convert(other).value();
}
template<typename STORAGE_T>
@@ -379,13 +381,13 @@ struct LLUnitImplicit : public LLUnit<STORAGE_TYPE, UNITS>
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator >= (LLUnit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue >= convert(other).value();
+ return base_t::mValue >= base_t::convert(other).value();
}
template<typename OTHER_STORAGE_TYPE, typename OTHER_UNITS>
LL_FORCE_INLINE bool operator >= (LLUnitImplicit<OTHER_STORAGE_TYPE, OTHER_UNITS> other) const
{
- return base_t::mValue >= convert(other).value();
+ return base_t::mValue >= base_t::convert(other).value();
}
template<typename STORAGE_T>
diff --git a/indra/llcommon/lluriparser.cpp b/indra/llcommon/lluriparser.cpp
new file mode 100644
index 0000000000..d98bc297e5
--- /dev/null
+++ b/indra/llcommon/lluriparser.cpp
@@ -0,0 +1,261 @@
+/**
+ * @file lluriparser.cpp
+ * @author Protey
+ * @date 2014-10-07
+ * @brief Implementation of the LLUriParser class.
+ *
+ * $LicenseInfo:firstyear=2014&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2014, 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
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+#include "lluriparser.h"
+
+LLUriParser::LLUriParser(const std::string& u) : mTmpScheme(false), mNormalizedTmp(false), mRes(0)
+{
+ mState.uri = &mUri;
+
+ if (u.find("://") == std::string::npos)
+ {
+ mNormalizedUri = "http://";
+ mTmpScheme = true;
+ }
+
+ mNormalizedUri += u.c_str();
+
+ mRes = parse();
+}
+
+LLUriParser::~LLUriParser()
+{
+ uriFreeUriMembersA(&mUri);
+}
+
+S32 LLUriParser::parse()
+{
+ mRes = uriParseUriA(&mState, mNormalizedUri.c_str());
+ return mRes;
+}
+
+const char * LLUriParser::scheme() const
+{
+ return mScheme.c_str();
+}
+
+void LLUriParser::sheme(const std::string& s)
+{
+ mTmpScheme = !s.size();
+ mScheme = s;
+}
+
+const char * LLUriParser::port() const
+{
+ return mPort.c_str();
+}
+
+void LLUriParser::port(const std::string& s)
+{
+ mPort = s;
+}
+
+const char * LLUriParser::host() const
+{
+ return mHost.c_str();
+}
+
+void LLUriParser::host(const std::string& s)
+{
+ mHost = s;
+}
+
+const char * LLUriParser::path() const
+{
+ return mPath.c_str();
+}
+
+void LLUriParser::path(const std::string& s)
+{
+ mPath = s;
+}
+
+const char * LLUriParser::query() const
+{
+ return mQuery.c_str();
+}
+
+void LLUriParser::query(const std::string& s)
+{
+ mQuery = s;
+}
+
+const char * LLUriParser::fragment() const
+{
+ return mFragment.c_str();
+}
+
+void LLUriParser::fragment(const std::string& s)
+{
+ mFragment = s;
+}
+
+void LLUriParser::textRangeToString(UriTextRangeA& textRange, std::string& str)
+{
+ if (textRange.first != NULL && textRange.afterLast != NULL && textRange.first < textRange.afterLast)
+ {
+ const ptrdiff_t len = textRange.afterLast - textRange.first;
+ str.assign(textRange.first, static_cast<std::string::size_type>(len));
+ }
+ else
+ {
+ str = LLStringUtil::null;
+ }
+}
+
+void LLUriParser::extractParts()
+{
+ if (mTmpScheme || mNormalizedTmp)
+ {
+ mScheme.clear();
+ }
+ else
+ {
+ textRangeToString(mUri.scheme, mScheme);
+ }
+
+ textRangeToString(mUri.hostText, mHost);
+ textRangeToString(mUri.portText, mPort);
+ textRangeToString(mUri.query, mQuery);
+ textRangeToString(mUri.fragment, mFragment);
+
+ UriPathSegmentA * pathHead = mUri.pathHead;
+ while (pathHead)
+ {
+ std::string partOfPath;
+ textRangeToString(pathHead->text, partOfPath);
+
+ mPath += '/';
+ mPath += partOfPath;
+
+ pathHead = pathHead->next;
+ }
+}
+
+S32 LLUriParser::normalize()
+{
+ mNormalizedTmp = mTmpScheme;
+ if (!mRes)
+ {
+ mRes = uriNormalizeSyntaxExA(&mUri, URI_NORMALIZE_SCHEME | URI_NORMALIZE_HOST);
+
+ if (!mRes)
+ {
+ S32 chars_required;
+ mRes = uriToStringCharsRequiredA(&mUri, &chars_required);
+
+ if (!mRes)
+ {
+ chars_required++;
+ std::vector<char> label_buf(chars_required);
+ mRes = uriToStringA(&label_buf[0], &mUri, chars_required, NULL);
+
+ if (!mRes)
+ {
+ mNormalizedUri = &label_buf[mTmpScheme ? 7 : 0];
+ mTmpScheme = false;
+ }
+ }
+ }
+ }
+
+ if(mTmpScheme)
+ {
+ mNormalizedUri = mNormalizedUri.substr(7);
+ mTmpScheme = false;
+ }
+
+ return mRes;
+}
+
+void LLUriParser::glue(std::string& uri) const
+{
+ std::string first_part;
+ glueFirst(first_part);
+
+ std::string second_part;
+ glueSecond(second_part);
+
+ uri = first_part + second_part;
+}
+
+void LLUriParser::glueFirst(std::string& uri) const
+{
+ if (mScheme.size())
+ {
+ uri = mScheme;
+ uri += "://";
+ }
+ else
+ {
+ uri.clear();
+ }
+
+ uri += mHost;
+}
+
+void LLUriParser::glueSecond(std::string& uri) const
+{
+ if (mPort.size())
+ {
+ uri = ':';
+ uri += mPort;
+ }
+ else
+ {
+ uri.clear();
+ }
+
+ uri += mPath;
+
+ if (mQuery.size())
+ {
+ uri += '?';
+ uri += mQuery;
+
+ if (mFragment.size())
+ {
+ uri += '#';
+ uri += mFragment;
+ }
+ }
+}
+
+bool LLUriParser::test() const
+{
+ std::string uri;
+ glue(uri);
+
+ return uri == mNormalizedUri;
+}
+
+const char * LLUriParser::normalizedUri() const
+{
+ return mNormalizedUri.c_str();
+}
diff --git a/indra/llcommon/lluriparser.h b/indra/llcommon/lluriparser.h
new file mode 100644
index 0000000000..2df8085ae6
--- /dev/null
+++ b/indra/llcommon/lluriparser.h
@@ -0,0 +1,87 @@
+/**
+ * @file lluriparser.h
+ * @author Protey
+ * @date 20146-10-07
+ * @brief Declaration of the UriParser class.
+ *
+ * $LicenseInfo:firstyear=2014&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2014, 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
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLURIPARSER_H
+#define LL_LLURIPARSER_H
+
+#include <string>
+#include "uriparser/Uri.h"
+
+class LL_COMMON_API LLUriParser
+{
+public:
+ LLUriParser(const std::string& u);
+ ~LLUriParser();
+
+ const char * scheme() const;
+ void sheme (const std::string& s);
+
+ const char * port() const;
+ void port (const std::string& s);
+
+ const char * host() const;
+ void host (const std::string& s);
+
+ const char * path() const;
+ void path (const std::string& s);
+
+ const char * query() const;
+ void query (const std::string& s);
+
+ const char * fragment() const;
+ void fragment (const std::string& s);
+
+ const char * normalizedUri() const;
+
+ void extractParts();
+ void glue(std::string& uri) const;
+ void glueFirst(std::string& uri) const;
+ void glueSecond(std::string& uri) const;
+ bool test() const;
+ S32 normalize();
+
+private:
+ S32 parse();
+ void textRangeToString(UriTextRangeA& textRange, std::string& str);
+ std::string mScheme;
+ std::string mHost;
+ std::string mPort;
+ std::string mPath;
+ std::string mQuery;
+ std::string mFragment;
+ std::string mNormalizedUri;
+
+ UriParserStateA mState;
+ UriUriA mUri;
+
+ S32 mRes;
+ bool mTmpScheme;
+ bool mNormalizedTmp;
+};
+
+#endif // LL_LLURIPARSER_H
diff --git a/indra/llcommon/stringize.h b/indra/llcommon/stringize.h
index 2df008febb..a5a90d7297 100755
--- a/indra/llcommon/stringize.h
+++ b/indra/llcommon/stringize.h
@@ -30,7 +30,7 @@
#define LL_STRINGIZE_H
#include <sstream>
-#include <boost/lambda/lambda.hpp>
+#include <boost/phoenix/phoenix.hpp>
#include <llstring.h>
/**
@@ -108,7 +108,7 @@ std::string stringize_f(Functor const & f)
* return out.str();
* @endcode
*/
-#define STRINGIZE(EXPRESSION) (stringize_f(boost::lambda::_1 << EXPRESSION))
+#define STRINGIZE(EXPRESSION) (stringize_f(boost::phoenix::placeholders::arg1 << EXPRESSION))
/**
@@ -144,7 +144,7 @@ void destringize_f(std::string const & str, Functor const & f)
* in >> item1 >> item2 >> item3 ... ;
* @endcode
*/
-#define DESTRINGIZE(STR, EXPRESSION) (destringize_f((STR), (boost::lambda::_1 >> EXPRESSION)))
+#define DESTRINGIZE(STR, EXPRESSION) (destringize_f((STR), (boost::phoenix::placeholders::arg1 >> EXPRESSION)))
#endif /* ! defined(LL_STRINGIZE_H) */
diff --git a/indra/llcommon/tests/lldependencies_test.cpp b/indra/llcommon/tests/lldependencies_test.cpp
index 5395d785b6..b5e189a465 100755
--- a/indra/llcommon/tests/lldependencies_test.cpp
+++ b/indra/llcommon/tests/lldependencies_test.cpp
@@ -37,29 +37,14 @@
// associated header
#include "../lldependencies.h"
// other Linden headers
-#include "../test/lltut.h"
-
-using boost::assign::list_of;
#if LL_WINDOWS
#pragma warning (disable : 4675) // "resolved by ADL" -- just as I want!
#endif
-typedef LLDependencies<> StringDeps;
-typedef StringDeps::KeyList StringList;
-
-// We use the very cool boost::assign::list_of() construct to specify vectors
-// of strings inline. For reasons on which I'm not entirely clear, though, it
-// needs a helper function. You can use list_of() to construct an implicit
-// StringList (std::vector<std::string>) by conversion, e.g. for a function
-// parameter -- but if you simply write StringList(list_of("etc.")), you get
-// ambiguity errors. Shrug!
-template<typename CONTAINER>
-CONTAINER make(const CONTAINER& data)
-{
- return data;
-}
-
+/*****************************************************************************
+* Display helpers: must be defined BEFORE lltut.h!
+*****************************************************************************/
// Display an arbitary value as itself...
template<typename T>
std::ostream& display(std::ostream& out, const T& value)
@@ -113,6 +98,31 @@ std::ostream& operator<<(std::ostream& out, const std::set<ENTRY>& set)
return out;
}
+/*****************************************************************************
+* Now we can #include lltut.h
+*****************************************************************************/
+#include "../test/lltut.h"
+
+/*****************************************************************************
+* Other helpers
+*****************************************************************************/
+using boost::assign::list_of;
+
+typedef LLDependencies<> StringDeps;
+typedef StringDeps::KeyList StringList;
+
+// We use the very cool boost::assign::list_of() construct to specify vectors
+// of strings inline. For reasons on which I'm not entirely clear, though, it
+// needs a helper function. You can use list_of() to construct an implicit
+// StringList (std::vector<std::string>) by conversion, e.g. for a function
+// parameter -- but if you simply write StringList(list_of("etc.")), you get
+// ambiguity errors. Shrug!
+template<typename CONTAINER>
+CONTAINER make(const CONTAINER& data)
+{
+ return data;
+}
+
const std::string& extract_key(const LLDependencies<>::value_type& entry)
{
return entry.first;
diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp
index a5aaff10c5..f51279e817 100755
--- a/indra/llcommon/tests/llerror_test.cpp
+++ b/indra/llcommon/tests/llerror_test.cpp
@@ -38,6 +38,9 @@
namespace
{
+#ifdef __clang__
+# pragma clang diagnostic ignored "-Wunused-function"
+#endif
void test_that_error_h_includes_enough_things_to_compile_a_message()
{
LL_INFOS() << "!" << LL_ENDL;
@@ -381,8 +384,6 @@ namespace
};
std::string logFromNamespace(bool id) { return Foo::logFromNamespace(id); }
- std::string logFromClassWithNoLogTypeMember(bool id) { ClassWithNoLogType c; return c.logFromMember(id); }
- std::string logFromClassWithNoLogTypeStatic(bool id) { return ClassWithNoLogType::logFromStatic(id); }
std::string logFromClassWithLogTypeMember(bool id) { ClassWithLogType c; return c.logFromMember(id); }
std::string logFromClassWithLogTypeStatic(bool id) { return ClassWithLogType::logFromStatic(id); }
@@ -393,8 +394,8 @@ namespace
if (n1 == std::string::npos)
{
std::stringstream ss;
- ss << message << ": " << "expected to find a copy of " << expected
- << " in actual " << actual;
+ ss << message << ": " << "expected to find a copy of '" << expected
+ << "' in actual '" << actual << "'";
throw tut::failure(ss.str().c_str());
}
}
@@ -435,9 +436,6 @@ namespace tut
testLogName(mRecorder, logFromStatic);
testLogName(mRecorder, logFromAnon);
testLogName(mRecorder, logFromNamespace);
- //testLogName(mRecorder, logFromClassWithNoLogTypeMember, "ClassWithNoLogType");
- //testLogName(mRecorder, logFromClassWithNoLogTypeStatic, "ClassWithNoLogType");
- // XXX: figure out what the exepcted response is for these
testLogName(mRecorder, logFromClassWithLogTypeMember, "ClassWithLogType");
testLogName(mRecorder, logFromClassWithLogTypeStatic, "ClassWithLogType");
}
@@ -457,11 +455,6 @@ namespace
return "bar";
}
- void uberLogger()
- {
- LL_INFOS() << "uber(" << outerLogger() << "," << innerLogger() << ")" << LL_ENDL;
- }
-
class LogWhileLogging
{
public:
@@ -494,17 +487,10 @@ namespace tut
ensure_message_contains(1, "outside(moo)");
ensure_message_count(2);
- uberLogger();
- ensure_message_contains(2, "inside");
- ensure_message_contains(3, "inside");
- ensure_message_contains(4, "outside(moo)");
- ensure_message_contains(5, "uber(bar,moo)");
- ensure_message_count(6);
-
metaLogger();
- ensure_message_contains(6, "logging");
- ensure_message_contains(7, "meta(baz)");
- ensure_message_count(8);
+ ensure_message_contains(2, "logging");
+ ensure_message_contains(3, "meta(baz)");
+ ensure_message_count(4);
}
template<> template<>
diff --git a/indra/llcommon/tests/lleventcoro_test.cpp b/indra/llcommon/tests/lleventcoro_test.cpp
index cb5e15eff2..2096807e53 100755
--- a/indra/llcommon/tests/lleventcoro_test.cpp
+++ b/indra/llcommon/tests/lleventcoro_test.cpp
@@ -94,7 +94,6 @@ using coroutines::coroutine;
template<typename Iter>
bool match(Iter first, Iter last, std::string match) {
std::string::iterator i = match.begin();
- i != match.end();
for(; (first != last) && (i != match.end()); ++i) {
if (*first != *i)
return false;
diff --git a/indra/llcommon/tests/llframetimer_test.cpp b/indra/llcommon/tests/llframetimer_test.cpp
index 8ac1c91a3a..be372bb855 100755
--- a/indra/llcommon/tests/llframetimer_test.cpp
+++ b/indra/llcommon/tests/llframetimer_test.cpp
@@ -84,25 +84,34 @@ namespace tut
template<> template<>
void frametimer_object_t::test<3>()
{
+ clock_t t1 = clock();
+ ms_sleep(200);
+ clock_t t2 = clock();
+ clock_t elapsed = t2 - t1 + 1;
+ std::cout << "Note: using clock(), ms_sleep() actually took " << (long)elapsed << "ms" << std::endl;
+
F64 seconds_since_epoch = LLFrameTimer::getTotalSeconds();
seconds_since_epoch += 2.0;
LLFrameTimer timer;
timer.setExpiryAt(seconds_since_epoch);
- ensure("timer not expired on create", !timer.hasExpired());
- int ii;
- for(ii = 0; ii < 10; ++ii)
+ /*
+ * Note that the ms_sleep(200) below is only guaranteed to return
+ * in 200ms _or_more_, so it should be true that by the 10th
+ * iteration we've gotten to the 2 seconds requested above
+ * and the timer should expire, but it can expire in fewer iterations
+ * if one or more of the ms_sleep calls takes longer.
+ * (as it did when we moved to Mac OS X 10.10)
+ */
+ int iterations_until_expiration = 0;
+ while ( !timer.hasExpired() )
{
- ms_sleep(150);
- LLFrameTimer::updateFrameTime();
- }
- ensure("timer not expired after a bit", !timer.hasExpired());
- for(ii = 0; ii < 10; ++ii)
- {
- ms_sleep(100);
- LLFrameTimer::updateFrameTime();
+ ms_sleep(200);
+ LLFrameTimer::updateFrameTime();
+ iterations_until_expiration++;
}
- ensure("timer expired", timer.hasExpired());
+ ensure("timer took too long to expire", iterations_until_expiration <= 10);
}
+
/*
template<> template<>
void frametimer_object_t::test<4>()
diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp
index 9ea822cb8d..2d88e2c676 100755
--- a/indra/llcommon/tests/llleap_test.cpp
+++ b/indra/llcommon/tests/llleap_test.cpp
@@ -17,7 +17,7 @@
// std headers
// external library headers
#include <boost/assign/list_of.hpp>
-#include <boost/lambda/lambda.hpp>
+#include <boost/phoenix/core/argument.hpp>
#include <boost/foreach.hpp>
// other Linden headers
#include "../test/lltut.h"
@@ -38,24 +38,7 @@ StringVec sv(const StringVec& listof) { return listof; }
#define sleep(secs) _sleep((secs) * 1000)
#endif
-#if ! LL_WINDOWS
const size_t BUFFERED_LENGTH = 1023*1024; // try wrangling just under a megabyte of data
-#else
-// "Then there's Windows... sigh." The "very large message" test is flaky in a
-// way that seems to point to either the OS (nonblocking writes to pipes) or
-// possibly the apr_file_write() function. Poring over log messages reveals
-// that at some point along the way apr_file_write() returns 11 (Resource
-// temporarily unavailable, i.e. EAGAIN) and says it wrote 0 bytes -- even
-// though it did write the chunk! Our next write attempt retries the same
-// chunk, resulting in the chunk being duplicated at the child end, corrupting
-// the data stream. Much as I would love to be able to fix it for real, such a
-// fix would appear to require distinguishing bogus EAGAIN returns from real
-// ones -- how?? Empirically this behavior is only observed when writing a
-// "very large message". To be able to move forward at all, try to bypass this
-// particular failure by adjusting the size of a "very large message" on
-// Windows.
-const size_t BUFFERED_LENGTH = 65336;
-#endif // LL_WINDOWS
void waitfor(const std::vector<LLLeap*>& instances, int timeout=60)
{
@@ -109,7 +92,7 @@ namespace tut
llleap_data():
reader(".py",
// This logic is adapted from vita.viewerclient.receiveEvent()
- boost::lambda::_1 <<
+ boost::phoenix::placeholders::arg1 <<
"import re\n"
"import os\n"
"import sys\n"
@@ -403,7 +386,7 @@ namespace tut
AckAPI api;
Result result;
NamedTempFile script("py",
- boost::lambda::_1 <<
+ boost::phoenix::placeholders::arg1 <<
"from " << reader_module << " import *\n"
// make a request on our little API
"request(pump='" << api.getName() << "', data={})\n"
@@ -441,7 +424,7 @@ namespace tut
ReqIDAPI api;
Result result;
NamedTempFile script("py",
- boost::lambda::_1 <<
+ boost::phoenix::placeholders::arg1 <<
"import sys\n"
"from " << reader_module << " import *\n"
// Note that since reader imports llsd, this
@@ -484,7 +467,7 @@ namespace tut
ReqIDAPI api;
Result result;
NamedTempFile script("py",
- boost::lambda::_1 <<
+ boost::phoenix::placeholders::arg1 <<
"import sys\n"
"from " << reader_module << " import *\n"
// Generate a very large string value.
diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp
index e4e766d51b..5ba343b183 100755
--- a/indra/llcommon/tests/llprocess_test.cpp
+++ b/indra/llcommon/tests/llprocess_test.cpp
@@ -85,7 +85,7 @@ static std::string readfile(const std::string& pathname, const std::string& desc
}
std::ifstream inf(pathname.c_str());
std::string output;
- tut::ensure(STRINGIZE("No output " << use_desc), std::getline(inf, output));
+ tut::ensure(STRINGIZE("No output " << use_desc), bool(std::getline(inf, output)));
std::string more;
while (std::getline(inf, more))
{
@@ -154,7 +154,7 @@ struct PythonProcessLauncher
void launch()
{
mPy = LLProcess::create(mParams);
- tut::ensure(STRINGIZE("Couldn't launch " << mDesc << " script"), mPy);
+ tut::ensure(STRINGIZE("Couldn't launch " << mDesc << " script"), bool(mPy));
}
/// Run Python script and wait for it to complete.
@@ -873,7 +873,7 @@ namespace tut
std::string threw; \
/* Both the following calls should work. */ \
(PROCESS).GETPIPE(VALID); \
- ensure(#GETOPTPIPE "(" #VALID ") failed", (PROCESS).GETOPTPIPE(VALID)); \
+ ensure(#GETOPTPIPE "(" #VALID ") failed", bool((PROCESS).GETOPTPIPE(VALID))); \
/* pass obviously bogus PIPESLOT */ \
CATCH_IN(threw, LLProcess::NoPipe, (PROCESS).GETPIPE(LLProcess::FILESLOT(4))); \
ensure_contains("didn't reject bad slot", threw, "no slot"); \
diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp
index b5893135ea..6fbb9abfc0 100755
--- a/indra/llcommon/tests/llsdserialize_test.cpp
+++ b/indra/llcommon/tests/llsdserialize_test.cpp
@@ -46,9 +46,10 @@ typedef U32 uint32_t;
#include "boost/range.hpp"
#include "boost/foreach.hpp"
#include "boost/function.hpp"
-#include "boost/lambda/lambda.hpp"
-#include "boost/lambda/bind.hpp"
-namespace lambda = boost::lambda;
+#include "boost/bind.hpp"
+#include "boost/phoenix/bind/bind_function.hpp"
+#include "boost/phoenix/core/argument.hpp"
+using namespace boost::phoenix;
#include "../llsd.h"
#include "../llsdserialize.h"
@@ -1612,6 +1613,20 @@ namespace tut
"print 'Running on', sys.platform\n");
}
+ // helper for test<3>
+ static void writeLLSDArray(std::ostream& out, const LLSD& array)
+ {
+ BOOST_FOREACH(LLSD item, llsd::inArray(array))
+ {
+ LLSDSerialize::toNotation(item, out);
+ // It's important to separate with newlines because Python's llsd
+ // module doesn't support parsing from a file stream, only from a
+ // string, so we have to know how much of the file to read into a
+ // string.
+ out << '\n';
+ }
+ }
+
template<> template<>
void TestPythonCompatibleObject::test<3>()
{
@@ -1639,26 +1654,16 @@ namespace tut
" assert False, 'Too many data items'\n";
// Create an llsdXXXXXX file containing 'data' serialized to
- // notation. It's important to separate with newlines because Python's
- // llsd module doesn't support parsing from a file stream, only from a
- // string, so we have to know how much of the file to read into a
- // string.
+ // notation.
NamedTempFile file("llsd",
// NamedTempFile's boost::function constructor
// takes a callable. To this callable it passes the
// std::ostream with which it's writing the
- // NamedTempFile. This lambda-based expression
- // first calls LLSD::Serialize() with that ostream,
- // then streams a newline to it, etc.
- (lambda::bind(LLSDSerialize::toNotation, cdata[0], lambda::_1),
- lambda::_1 << '\n',
- lambda::bind(LLSDSerialize::toNotation, cdata[1], lambda::_1),
- lambda::_1 << '\n',
- lambda::bind(LLSDSerialize::toNotation, cdata[2], lambda::_1),
- lambda::_1 << '\n'));
+ // NamedTempFile.
+ boost::bind(writeLLSDArray, _1, cdata));
python("read C++ notation",
- lambda::_1 <<
+ placeholders::arg1 <<
import_llsd <<
"def parse_each(iterable):\n"
" for item in iterable:\n"
@@ -1679,7 +1684,7 @@ namespace tut
NamedTempFile file("llsd", "");
python("write Python notation",
- lambda::_1 <<
+ placeholders::arg1 <<
"from __future__ import with_statement\n" <<
import_llsd <<
"DATA = [\n"
diff --git a/indra/llcommon/tests/llstring_test.cpp b/indra/llcommon/tests/llstring_test.cpp
index 93d3968dbf..a7aa347222 100755
--- a/indra/llcommon/tests/llstring_test.cpp
+++ b/indra/llcommon/tests/llstring_test.cpp
@@ -27,11 +27,11 @@
*/
#include "linden_common.h"
-#include "../test/lltut.h"
#include <boost/assign/list_of.hpp>
#include "../llstring.h"
-#include "StringVec.h"
+#include "StringVec.h" // must come BEFORE lltut.h
+#include "../test/lltut.h"
using boost::assign::list_of;
diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp
index fbbb1614fb..b9632a7921 100755
--- a/indra/llcorehttp/_httpoprequest.cpp
+++ b/indra/llcorehttp/_httpoprequest.cpp
@@ -104,7 +104,6 @@ char * os_strltrim(char * str);
void os_strlower(char * str);
// Error testing and reporting for libcurl status codes
-void check_curl_easy_code(CURLcode code);
void check_curl_easy_code(CURLcode code, int curl_setopt_option);
static const char * const LOG_CORE("CoreHttp");
@@ -588,9 +587,18 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
(mReqLength ? fmt1 : fmt2),
(unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1));
#else
- snprintf(range_line, sizeof(range_line),
- (mReqLength ? fmt1 : fmt2),
- (unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1));
+ if ( mReqLength )
+ {
+ snprintf(range_line, sizeof(range_line),
+ fmt1,
+ (unsigned long) mReqOffset, (unsigned long) (mReqOffset + mReqLength - 1));
+ }
+ else
+ {
+ snprintf(range_line, sizeof(range_line),
+ fmt2,
+ (unsigned long) mReqOffset);
+ }
#endif // LL_WINDOWS
range_line[sizeof(range_line) - 1] = '\0';
mCurlHeaders = curl_slist_append(mCurlHeaders, range_line);
@@ -623,8 +631,23 @@ HttpStatus HttpOpRequest::prepareRequest(HttpService * service)
// a handwave but bump the transfer timeout up by the pipelining
// depth to give some room.
//
+ // BUG-7698, BUG-7688, BUG-7694 (others). Scylla and Charybdis
+ // situation. Operating against a CDN having service issues may
+ // lead to requests stalling for an arbitrarily long time with only
+ // the CURLOPT_TIMEOUT value leading to a closed connection. Sadly
+ // for pipelining, libcurl (7.39.0 and earlier, at minimum) starts
+ // the clock on this value as soon as a request is started down
+ // the wire. We want a short value to recover and retry from the
+ // CDN. We need a long value to safely deal with a succession of
+ // piled-up pipelined requests.
+ //
// *TODO: Find a better scheme than timeouts to guarantee liveness.
- xfer_timeout *= cpolicy.mPipelining;
+ // Progress on the connection is what we really want, not timeouts.
+ // But we don't have access to that and the request progress indicators
+ // (various libcurl callbacks) have the same problem TIMEOUT does.
+ //
+ // xfer_timeout *= cpolicy.mPipelining;
+ xfer_timeout *= 2L;
}
// *DEBUG: Enable following override for timeout handling and "[curl:bugs] #1420" tests
// xfer_timeout = 1L;
@@ -1136,18 +1159,4 @@ void check_curl_easy_code(CURLcode code, int curl_setopt_option)
}
}
-
-void check_curl_easy_code(CURLcode code)
-{
- if (CURLE_OK != code)
- {
- // Comment from old llcurl code which may no longer apply:
- //
- // linux appears to throw a curl error once per session for a bad initialization
- // at a pretty random time (when enabling cookies).
- LL_WARNS(LOG_CORE) << "libcurl error detected: " << curl_easy_strerror(code)
- << LL_ENDL;
- }
-}
-
} // end anonymous namespace
diff --git a/indra/llcorehttp/bufferstream.cpp b/indra/llcorehttp/bufferstream.cpp
index 6553900eef..678bf5ea9f 100755
--- a/indra/llcorehttp/bufferstream.cpp
+++ b/indra/llcorehttp/bufferstream.cpp
@@ -257,8 +257,6 @@ std::streampos BufferArrayStreamBuf::seekoff(std::streamoff off,
return ret;
}
- if (pos < 0)
- return ret;
if (pos > mBufferArray->size())
{
pos = mBufferArray->size();
diff --git a/indra/llcorehttp/examples/http_texture_load.cpp b/indra/llcorehttp/examples/http_texture_load.cpp
index b76c874557..9d9631b980 100755
--- a/indra/llcorehttp/examples/http_texture_load.cpp
+++ b/indra/llcorehttp/examples/http_texture_load.cpp
@@ -212,7 +212,7 @@ int main(int argc, char** argv)
char * end;
value = strtoul(optarg, &end, 10);
- if (value < 0 || value > 100 || *end != '\0')
+ if (value > 100 || *end != '\0')
{
usage(std::cerr);
return 1;
@@ -227,7 +227,7 @@ int main(int argc, char** argv)
char * end;
value = strtoul(optarg, &end, 10);
- if (value < 0 || value > 3 || *end != '\0')
+ if (value > 3 || *end != '\0')
{
usage(std::cerr);
return 1;
diff --git a/indra/llcrashlogger/llcrashlock.cpp b/indra/llcrashlogger/llcrashlock.cpp
index 7fd7860707..7dde1fcd69 100644
--- a/indra/llcrashlogger/llcrashlock.cpp
+++ b/indra/llcrashlogger/llcrashlock.cpp
@@ -106,7 +106,7 @@ LLSD LLCrashLock::getLockFile(std::string filename)
{
LLSD lock_sd = LLSD::emptyMap();
- llifstream ifile(filename);
+ llifstream ifile(filename.c_str());
if (ifile.is_open())
{
@@ -120,7 +120,7 @@ LLSD LLCrashLock::getLockFile(std::string filename)
bool LLCrashLock::putLockFile(std::string filename, const LLSD& data)
{
bool result = true;
- llofstream ofile(filename);
+ llofstream ofile(filename.c_str());
if (!LLSDSerialize::toXML(data,ofile))
{
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index d336eeaabc..16df27bb8e 100755
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -1036,13 +1036,13 @@ void LLImageRaw::copyLineScaled( U8* in, U8* out, S32 in_pixel_len, S32 out_pixe
a *= norm_factor; // skip conditional
S32 t4 = x * out_pixel_step * components;
- out[t4 + 0] = U8(llround(r));
+ out[t4 + 0] = U8(ll_round(r));
if (components >= 2)
- out[t4 + 1] = U8(llround(g));
+ out[t4 + 1] = U8(ll_round(g));
if (components >= 3)
- out[t4 + 2] = U8(llround(b));
+ out[t4 + 2] = U8(ll_round(b));
if( components == 4)
- out[t4 + 3] = U8(llround(a));
+ out[t4 + 3] = U8(ll_round(a));
}
}
}
@@ -1117,10 +1117,10 @@ void LLImageRaw::compositeRowScaled4onto3( U8* in, U8* out, S32 in_pixel_len, S3
b *= norm_factor;
a *= norm_factor;
- in_scaled_r = U8(llround(r));
- in_scaled_g = U8(llround(g));
- in_scaled_b = U8(llround(b));
- in_scaled_a = U8(llround(a));
+ in_scaled_r = U8(ll_round(r));
+ in_scaled_g = U8(ll_round(g));
+ in_scaled_b = U8(ll_round(b));
+ in_scaled_a = U8(ll_round(a));
}
if( in_scaled_a )
@@ -1172,7 +1172,7 @@ static std::string find_file(std::string &name, S8 *codec)
for (int i=0; i<(int)(NUM_FILE_EXTENSIONS); i++)
{
tname = name + "." + std::string(file_extensions[i].exten);
- llifstream ifs(tname, llifstream::binary);
+ llifstream ifs(tname.c_str(), llifstream::binary);
if (ifs.is_open())
{
ifs.close();
@@ -1219,7 +1219,7 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip
return false; // format not recognized
}
- llifstream ifs(name, llifstream::binary);
+ llifstream ifs(name.c_str(), llifstream::binary);
if (!ifs.is_open())
{
// SJB: changed from LL_INFOS() to LL_DEBUGS() to reduce spam
diff --git a/indra/llimage/llimagefilter.cpp b/indra/llimage/llimagefilter.cpp
index 0b9d136910..41adc7be9a 100755
--- a/indra/llimage/llimagefilter.cpp
+++ b/indra/llimage/llimagefilter.cpp
@@ -54,7 +54,7 @@ LLImageFilter::LLImageFilter(const std::string& file_path) :
mStencilMax(1.0)
{
// Load filter description from file
- llifstream filter_xml(file_path);
+ llifstream filter_xml(file_path.c_str());
if (filter_xml.is_open())
{
// Load and parse the file
diff --git a/indra/llimage/llimagepng.cpp b/indra/llimage/llimagepng.cpp
index 294f68b122..7735dc1379 100755
--- a/indra/llimage/llimagepng.cpp
+++ b/indra/llimage/llimagepng.cpp
@@ -67,7 +67,7 @@ BOOL LLImagePNG::updateData()
}
LLPngWrapper::ImageInfo infop;
- if (! pngWrapper.readPng(getData(), NULL, &infop))
+ if (! pngWrapper.readPng(getData(), getDataSize(), NULL, &infop))
{
setLastError(pngWrapper.getErrorMessage());
return FALSE;
@@ -102,7 +102,7 @@ BOOL LLImagePNG::decode(LLImageRaw* raw_image, F32 decode_time)
return FALSE;
}
- if (! pngWrapper.readPng(getData(), raw_image))
+ if (! pngWrapper.readPng(getData(), getDataSize(), raw_image))
{
setLastError(pngWrapper.getErrorMessage());
return FALSE;
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
index c8b0e872f6..4875fe7001 100755
--- a/indra/llimage/llimageworker.cpp
+++ b/indra/llimage/llimageworker.cpp
@@ -143,7 +143,8 @@ bool LLImageDecodeThread::ImageRequest::processRequest()
mFormattedImage->getComponents());
}
done = mFormattedImage->decode(mDecodedImageRaw, decode_time_slice); // 1ms
- mDecodedRaw = done;
+ // some decoders are removing data when task is complete and there were errors
+ mDecodedRaw = done && mDecodedImageRaw->getData();
}
if (done && mNeedsAux && !mDecodedAux && mFormattedImage.notNull())
{
@@ -155,7 +156,7 @@ bool LLImageDecodeThread::ImageRequest::processRequest()
1);
}
done = mFormattedImage->decodeChannels(mDecodedImageAux, decode_time_slice, 4, 4); // 1ms
- mDecodedAux = done;
+ mDecodedAux = done && mDecodedImageAux->getData();
}
return done;
diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp
index 2cc7d3c460..aad139f570 100755
--- a/indra/llimage/llpngwrapper.cpp
+++ b/indra/llimage/llpngwrapper.cpp
@@ -87,6 +87,12 @@ void LLPngWrapper::errorHandler(png_structp png_ptr, png_const_charp msg)
void LLPngWrapper::readDataCallback(png_structp png_ptr, png_bytep dest, png_size_t length)
{
PngDataInfo *dataInfo = (PngDataInfo *) png_get_io_ptr(png_ptr);
+ if(dataInfo->mOffset + length > dataInfo->mDataSize)
+ {
+ png_error(png_ptr, "Data read error. Requested data size exceeds available data size.");
+ return;
+ }
+
U8 *src = &dataInfo->mData[dataInfo->mOffset];
memcpy(dest, src, length);
dataInfo->mOffset += static_cast<U32>(length);
@@ -114,7 +120,7 @@ void LLPngWrapper::writeFlush(png_structp png_ptr)
// The scanline also begins at the bottom of
// the image (per SecondLife conventions) instead of at the top, so we
// must assign row-pointers in "reverse" order.
-BOOL LLPngWrapper::readPng(U8* src, LLImageRaw* rawImage, ImageInfo *infop)
+BOOL LLPngWrapper::readPng(U8* src, S32 dataSize, LLImageRaw* rawImage, ImageInfo *infop)
{
try
{
@@ -133,6 +139,7 @@ BOOL LLPngWrapper::readPng(U8* src, LLImageRaw* rawImage, ImageInfo *infop)
PngDataInfo dataPtr;
dataPtr.mData = src;
dataPtr.mOffset = 0;
+ dataPtr.mDataSize = dataSize;
png_set_read_fn(mReadPngPtr, &dataPtr, &readDataCallback);
png_set_sig_bytes(mReadPngPtr, 0);
diff --git a/indra/llimage/llpngwrapper.h b/indra/llimage/llpngwrapper.h
index 739f435996..27d7df3bef 100755
--- a/indra/llimage/llpngwrapper.h
+++ b/indra/llimage/llpngwrapper.h
@@ -44,7 +44,7 @@ public:
};
BOOL isValidPng(U8* src);
- BOOL readPng(U8* src, LLImageRaw* rawImage, ImageInfo *infop = NULL);
+ BOOL readPng(U8* src, S32 dataSize, LLImageRaw* rawImage, ImageInfo *infop = NULL);
BOOL writePng(const LLImageRaw* rawImage, U8* dst);
U32 getFinalSize();
const std::string& getErrorMessage();
@@ -61,6 +61,7 @@ private:
{
U8 *mData;
U32 mOffset;
+ S32 mDataSize;
};
static void writeFlush(png_structp png_ptr);
diff --git a/indra/llimage/tests/llimageworker_test.cpp b/indra/llimage/tests/llimageworker_test.cpp
index c030b105fb..51c5c63556 100755
--- a/indra/llimage/tests/llimageworker_test.cpp
+++ b/indra/llimage/tests/llimageworker_test.cpp
@@ -67,6 +67,8 @@ LLImageRaw::~LLImageRaw() { }
void LLImageRaw::deleteData() { }
U8* LLImageRaw::allocateData(S32 size) { return NULL; }
U8* LLImageRaw::reallocateData(S32 size) { return NULL; }
+const U8* LLImageBase::getData() const { return NULL; }
+U8* LLImageBase::getData() { return NULL; }
// End Stubbing
// -------------------------------------------------------------------------------------------
diff --git a/indra/llkdu/llimagej2ckdu.h b/indra/llkdu/llimagej2ckdu.h
index fb1f6535ba..02281152bf 100755
--- a/indra/llkdu/llimagej2ckdu.h
+++ b/indra/llkdu/llimagej2ckdu.h
@@ -36,7 +36,17 @@
#include "kdu_elementary.h"
#include "kdu_messaging.h"
#include "kdu_params.h"
+
+// don't *really* want to rebuild KDU so turn off specific warnings for this header
+#if LL_DARWIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-private-field"
+#include "kdu_compressed.h"
+#pragma clang diagnostic pop
+#else
#include "kdu_compressed.h"
+#endif
+
#include "kdu_sample_processing.h"
class LLKDUDecodeState;
diff --git a/indra/llkdu/llkdumem.h b/indra/llkdu/llkdumem.h
index dbdf88b2d9..fab913d93b 100755
--- a/indra/llkdu/llkdumem.h
+++ b/indra/llkdu/llkdumem.h
@@ -29,7 +29,17 @@
// Support classes for reading and writing from memory buffers in KDU
#define KDU_NO_THREADS
+// don't *really* want to rebuild KDU so turn off specific warnings for this header
+#if LL_DARWIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wself-assign-field"
+#pragma clang diagnostic ignored "-Wunused-private-field"
#include "kdu_image.h"
+#pragma clang diagnostic pop
+#else
+#include "kdu_image.h"
+#endif
+
#include "kdu_elementary.h"
#include "kdu_messaging.h"
#include "kdu_params.h"
diff --git a/indra/llkdu/tests/llimagej2ckdu_test.cpp b/indra/llkdu/tests/llimagej2ckdu_test.cpp
index 3f627b65e1..0605fad068 100755
--- a/indra/llkdu/tests/llimagej2ckdu_test.cpp
+++ b/indra/llkdu/tests/llimagej2ckdu_test.cpp
@@ -28,7 +28,16 @@
#include "linden_common.h"
// Class to test
#include "llimagej2ckdu.h"
+
+#if LL_DARWIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-private-field"
+#include "llkdumem.h"
+#pragma clang diagnostic pop
+#else
#include "llkdumem.h"
+#endif
+
#include "kdu_block_coding.h"
// Tut header
#include "lltut.h"
@@ -114,7 +123,6 @@ kdu_block_encoder::kdu_block_encoder() { }
kdu_block_decoder::kdu_block_decoder() { }
void kdu_block::set_max_passes(int , bool ) { }
void kdu_block::set_max_bytes(int , bool ) { }
-void kdu_block::set_max_samples(int ) { }
void kdu_tile::close(kdu_thread_env* ) { }
int kdu_tile::get_num_components() { return 0; }
bool kdu_tile::get_ycc() { return false; }
@@ -157,7 +165,7 @@ void kdu_codestream::get_valid_tiles(kdu_dims& ) { }
void kdu_codestream::create(kdu_compressed_source*, kdu_thread_env*) { }
void kdu_codestream::apply_input_restrictions( int, int, int, int, kdu_dims*, kdu_component_access_mode ) { }
void kdu_codestream::get_subsampling(int , kdu_coords&, bool ) { }
-void kdu_codestream::flush(kdu_long *, int , kdu_uint16 *, bool, bool, double, kdu_thread_env*) { }
+void kdu_codestream::flush(kdu_long *, int, kdu_uint16 *, bool, bool, double, kdu_thread_env*, int) { }
void kdu_codestream::set_resilient(bool ) { }
int kdu_codestream::get_num_components(bool ) { return 0; }
kdu_long kdu_codestream::get_total_bytes(bool ) { return 0; }
@@ -175,8 +183,7 @@ kdu_block* kdu_subband::open_block(kdu_coords, int*, kdu_thread_env*) { return N
bool kdu_codestream_comment::put_text(const char*) { return false; }
void kdu_customize_warnings(kdu_message*) { }
void kdu_customize_errors(kdu_message*) { }
-
-kdu_long kdu_multi_analysis::create(kdu_codestream, kdu_tile, bool, kdu_roi_image*, bool, int, kdu_thread_env*, kdu_thread_queue*, bool ) { kdu_long a = 0; return a; }
+kdu_long kdu_multi_analysis::create(kdu_codestream, kdu_tile, kdu_thread_env*, kdu_thread_queue*, int, kdu_roi_image*, int) { kdu_long a = 0; return a; }
siz_params::siz_params() : kdu_params(NULL, false, false, false, false, false) { }
void siz_params::finalize(bool ) { }
void siz_params::copy_with_xforms(kdu_params*, int, int, bool, bool, bool) { }
@@ -184,20 +191,12 @@ int siz_params::write_marker_segment(kdu_output*, kdu_params*, int) { return 0;
bool siz_params::check_marker_segment(kdu_uint16, int, kdu_byte a[], int&) { return false; }
bool siz_params::read_marker_segment(kdu_uint16, int, kdu_byte a[], int) { return false; }
-#ifdef LL_LINUX
-// Linux use the old pre KDU v7.0.0
-// *TODO: Supress this legacy stubbs once Linux migrates to v7.0.0
-kdu_decoder::kdu_decoder(kdu_subband , kdu_sample_allocator*, bool , float, int, kdu_thread_env*, kdu_thread_queue*) { }
-void kdu_codestream::create(siz_params*, kdu_compressed_target*, kdu_dims*, int, kdu_long ) { }
-void kdu_convert_ycc_to_rgb(kdu_line_buf&, kdu_line_buf&, kdu_line_buf&, int) { }
-#else
kdu_decoder::kdu_decoder(kdu_subband , kdu_sample_allocator*, bool , float, int, kdu_thread_env*, kdu_thread_queue*, int) { }
void kdu_codestream::create(siz_params*, kdu_compressed_target*, kdu_dims*, int, kdu_long, kdu_thread_env* ) { }
void (*kdu_convert_ycc_to_rgb_rev16)(kdu_int16*,kdu_int16*,kdu_int16*,int);
void (*kdu_convert_ycc_to_rgb_irrev16)(kdu_int16*,kdu_int16*,kdu_int16*,int);
void (*kdu_convert_ycc_to_rgb_rev32)(kdu_int32*,kdu_int32*,kdu_int32*,int);
void (*kdu_convert_ycc_to_rgb_irrev32)(float*,float*,float*,int);
-#endif
// -------------------------------------------------------------------------------------------
// TUT
diff --git a/indra/llmath/llline.cpp b/indra/llmath/llline.cpp
index f26231840b..cfee315b55 100755
--- a/indra/llmath/llline.cpp
+++ b/indra/llmath/llline.cpp
@@ -30,7 +30,6 @@
#include "llline.h"
#include "llrand.h"
-const F32 SOME_SMALL_NUMBER = 1.0e-5f;
const F32 SOME_VERY_SMALL_NUMBER = 1.0e-8f;
LLLine::LLLine()
diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h
index a8b27ad189..93b9f22b25 100755
--- a/indra/llmath/llmath.h
+++ b/indra/llmath/llmath.h
@@ -206,16 +206,16 @@ inline S32 llceil( F32 f )
#ifndef BOGUS_ROUND
// Use this round. Does an arithmetic round (0.5 always rounds up)
-inline S32 llround(const F32 val)
+inline S32 ll_round(const F32 val)
{
return llfloor(val + 0.5f);
}
#else // BOGUS_ROUND
-// Old llround implementation - does banker's round (toward nearest even in the case of a 0.5.
+// Old ll_round implementation - does banker's round (toward nearest even in the case of a 0.5.
// Not using this because we don't have a consistent implementation on both platforms, use
// llfloor(val + 0.5f), which is consistent on all platforms.
-inline S32 llround(const F32 val)
+inline S32 ll_round(const F32 val)
{
#if LL_WINDOWS
// Note: assumes that the floating point control word is set to rounding mode (the default)
@@ -254,12 +254,12 @@ inline int round_int(double x)
}
#endif // BOGUS_ROUND
-inline F32 llround( F32 val, F32 nearest )
+inline F32 ll_round( F32 val, F32 nearest )
{
return F32(floor(val * (1.0f / nearest) + 0.5f)) * nearest;
}
-inline F64 llround( F64 val, F64 nearest )
+inline F64 ll_round( F64 val, F64 nearest )
{
return F64(floor(val * (1.0 / nearest) + 0.5)) * nearest;
}
@@ -309,25 +309,6 @@ const S32 LL_SHIFT_AMOUNT = 16; //16.16 fixed point represe
#define LL_MAN_INDEX 1
#endif
-/* Deprecated: use llround(), lltrunc(), or llfloor() instead
-// ================================================================================================
-// Real2Int
-// ================================================================================================
-inline S32 F64toS32(F64 val)
-{
- val = val + LL_DOUBLE_TO_FIX_MAGIC;
- return ((S32*)&val)[LL_MAN_INDEX] >> LL_SHIFT_AMOUNT;
-}
-
-// ================================================================================================
-// Real2Int
-// ================================================================================================
-inline S32 F32toS32(F32 val)
-{
- return F64toS32 ((F64)val);
-}
-*/
-
////////////////////////////////////////////////
//
// Fast exp and log
@@ -351,9 +332,7 @@ static union
#define LL_EXP_A (1048576 * OO_LN2) // use 1512775 for integer
#define LL_EXP_C (60801) // this value of C good for -4 < y < 4
-#define LL_FAST_EXP(y) (LLECO.n.i = llround(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d)
-
-
+#define LL_FAST_EXP(y) (LLECO.n.i = ll_round(F32(LL_EXP_A*(y))) + (1072693248 - LL_EXP_C), LLECO.d)
inline F32 llfastpow(const F32 x, const F32 y)
{
@@ -370,9 +349,6 @@ inline F32 snap_to_sig_figs(F32 foo, S32 sig_figs)
bar *= 10.f;
}
- //F32 new_foo = (F32)llround(foo * bar);
- // the llround() implementation sucks. Don't us it.
-
F32 sign = (foo > 0.f) ? 1.f : -1.f;
F32 new_foo = F32( S64(foo * bar + sign * 0.5f));
new_foo /= bar;
diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h
index 7b5240c651..280d2653d3 100755
--- a/indra/llmath/lloctree.h
+++ b/indra/llmath/lloctree.h
@@ -322,7 +322,7 @@ public:
//is it here?
if (isInside(data->getPositionGroup()))
{
- if (((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius()) ||
+ if ((((getElementCount() < gOctreeMaxCapacity || getSize()[0] <= gOctreeMinSize) && contains(data->getBinRadius())) ||
(data->getBinRadius() > getSize()[0] && parent && parent->getElementCount() >= gOctreeMaxCapacity)))
{ //it belongs here
mData.push_back(NULL);
@@ -445,7 +445,7 @@ public:
mDataEnd = &mData[0];
}
- notifyRemoval(data);
+ this->notifyRemoval(data);
checkAlive();
}
@@ -711,7 +711,7 @@ public:
//(don't notify listeners of addition)
for (U32 i = 0; i < child->getChildCount(); i++)
{
- addChild(child->getChild(i), TRUE);
+ this->addChild(child->getChild(i), TRUE);
}
//destroy child
@@ -755,10 +755,10 @@ public:
return false;
}
- if (this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup()))
+ if (this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup()))
{
//we got it, just act like a branch
- oct_node* node = getNodeAt(data);
+ oct_node* node = this->getNodeAt(data);
if (node == this)
{
LLOctreeNode<T>::insert(data);
@@ -771,7 +771,7 @@ public:
else if (this->getChildCount() == 0)
{
//first object being added, just wrap it up
- while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup())))
+ while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup())))
{
LLVector4a center, size;
center = this->getCenter();
@@ -786,7 +786,7 @@ public:
}
else
{
- while (!(this->getSize()[0] > data->getBinRadius() && isInside(data->getPositionGroup())))
+ while (!(this->getSize()[0] > data->getBinRadius() && this->isInside(data->getPositionGroup())))
{
//the data is outside the root node, we need to grow
LLVector4a center(this->getCenter());
@@ -814,7 +814,7 @@ public:
//clear our children and add the root copy
this->clearChildren();
- addChild(newnode);
+ this->addChild(newnode);
}
//insert the data
diff --git a/indra/llmath/llquantize.h b/indra/llmath/llquantize.h
index 1595dbecf8..10c950abbb 100755
--- a/indra/llmath/llquantize.h
+++ b/indra/llmath/llquantize.h
@@ -52,7 +52,7 @@ inline U16 F32_to_U16_ROUND(F32 val, F32 lower, F32 upper)
val /= (upper - lower);
// round the value. Sreturn the U16
- return (U16)(llround(val*U16MAX));
+ return (U16)(ll_round(val*U16MAX));
}
@@ -92,7 +92,7 @@ inline U8 F32_to_U8_ROUND(F32 val, F32 lower, F32 upper)
val /= (upper - lower);
// return the rounded U8
- return (U8)(llround(val*U8MAX));
+ return (U8)(ll_round(val*U8MAX));
}
diff --git a/indra/llmath/llsphere.cpp b/indra/llmath/llsphere.cpp
index 740047b93a..a8d6200488 100755
--- a/indra/llmath/llsphere.cpp
+++ b/indra/llmath/llsphere.cpp
@@ -248,8 +248,8 @@ LLSphere LLSphere::getBoundingSphere(const std::vector<LLSphere>& sphere_list)
// compute the starting step-size
F32 minimum_radius = 0.5f * llmin(diagonal.mV[VX], llmin(diagonal.mV[VY], diagonal.mV[VZ]));
F32 step_length = bounding_radius - minimum_radius;
- S32 step_count = 0;
- S32 max_step_count = 12;
+ //S32 step_count = 0;
+ //S32 max_step_count = 12;
F32 half_milimeter = 0.0005f;
// wander the center around in search of tighter solutions
@@ -258,7 +258,7 @@ LLSphere LLSphere::getBoundingSphere(const std::vector<LLSphere>& sphere_list)
S32 last_dz = 2;
while (step_length > half_milimeter
- && step_count < max_step_count)
+ /*&& step_count < max_step_count*/)
{
// the algorithm for testing the maximum radius could be expensive enough
// that it makes sense to NOT duplicate testing when possible, so we keep
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index d9a68cb577..c2198b91a7 100755
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -56,8 +56,6 @@
#define DEBUG_SILHOUETTE_NORMALS 0 // TomY: Use this to display normals using the silhouette
#define DEBUG_SILHOUETTE_EDGE_MAP 0 // DaveP: Use this to display edge map using the silhouette
-const F32 CUT_MIN = 0.f;
-const F32 CUT_MAX = 1.f;
const F32 MIN_CUT_DELTA = 0.02f;
const F32 HOLLOW_MIN = 0.f;
@@ -560,7 +558,7 @@ void LLProfile::genNGon(const LLProfileParams& params, S32 sides, F32 offset, F3
// Scale to have size "match" scale. Compensates to get object to generally fill bounding box.
- S32 total_sides = llround(sides / ang_scale); // Total number of sides all around
+ S32 total_sides = ll_round(sides / ang_scale); // Total number of sides all around
if (total_sides < 8)
{
@@ -2076,7 +2074,7 @@ LLVolume::LLVolume(const LLVolumeParams &params, const F32 detail, const BOOL ge
generate();
- if (mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE || mParams.getSculptType() == LL_SCULPT_TYPE_MESH)
+ if ((mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE) || mParams.getSculptType() == LL_SCULPT_TYPE_MESH)
{
createVolumeFaces();
}
@@ -2685,6 +2683,17 @@ void LLVolume::setMeshAssetLoaded(BOOL loaded)
mIsMeshAssetLoaded = loaded;
}
+void LLVolume::copyFacesTo(std::vector<LLVolumeFace> &faces) const
+{
+ faces = mVolumeFaces;
+}
+
+void LLVolume::copyFacesFrom(const std::vector<LLVolumeFace> &faces)
+{
+ mVolumeFaces = faces;
+ mSculptLevel = 0;
+}
+
void LLVolume::copyVolumeFaces(const LLVolume* volume)
{
mVolumeFaces = volume->mVolumeFaces;
@@ -4027,7 +4036,6 @@ LLVertexIndexPair::LLVertexIndexPair(const LLVector3 &vertex, const S32 index)
}
const F32 VERTEX_SLOP = 0.00001f;
-const F32 VERTEX_SLOP_SQRD = VERTEX_SLOP * VERTEX_SLOP;
struct lessVertex
{
@@ -4914,9 +4922,7 @@ F64 find_vertex_score(LLVCacheVertexData& data)
{
F64 score = -1.0;
- if (data.mActiveTriangles >= 0)
- {
- score = 0.0;
+ score = 0.0;
S32 cache_idx = data.mCacheTag;
@@ -4938,9 +4944,8 @@ F64 find_vertex_score(LLVCacheVertexData& data)
}
//bonus points for having low valence
- F64 valence_boost = pow((F64)data.mActiveTriangles, -FindVertexScore_ValenceBoostPower);
+ F64 valence_boost = pow((F64)data.mActiveTriangles, -FindVertexScore_ValenceBoostPower);
score += FindVertexScore_ValenceBoostScale * valence_boost;
- }
return score;
}
@@ -5970,7 +5975,10 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
}
else
{ //degenerate, make up a value
- normal.set(0,0,1);
+ if(normal.getF32ptr()[2] >= 0)
+ normal.set(0.f,0.f,1.f);
+ else
+ normal.set(0.f,0.f,-1.f);
}
llassert(llfinite(normal.getF32ptr()[0]));
@@ -6284,6 +6292,8 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
num_vertices = mNumS*mNumT;
num_indices = (mNumS-1)*(mNumT-1)*6;
+ partial_build = (num_vertices > mNumVertices || num_indices > mNumIndices) ? FALSE : partial_build;
+
if (!partial_build)
{
resizeVertices(num_vertices);
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index 2f38ae7203..c8476f6897 100755
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -993,6 +993,7 @@ public:
void resizePath(S32 length);
const LLAlignedArray<LLVector4a,64>& getMesh() const { return mMesh; }
const LLVector4a& getMeshPt(const U32 i) const { return mMesh[i]; }
+
void setDirty() { mPathp->setDirty(); mProfilep->setDirty(); }
@@ -1045,6 +1046,8 @@ public:
void sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level);
void copyVolumeFaces(const LLVolume* volume);
+ void copyFacesTo(std::vector<LLVolumeFace> &faces) const;
+ void copyFacesFrom(const std::vector<LLVolumeFace> &faces);
void cacheOptimize();
private:
diff --git a/indra/llmath/tests/llquaternion_test.cpp b/indra/llmath/tests/llquaternion_test.cpp
index e69010b2d6..3490829743 100755
--- a/indra/llmath/tests/llquaternion_test.cpp
+++ b/indra/llmath/tests/llquaternion_test.cpp
@@ -175,10 +175,10 @@ namespace tut
void llquat_test_object_t::test<6>()
{
LLQuaternion quat1(3.0f, 2.0f, 6.0f, 0.0f), quat2(1.0f, 1.0f, 1.0f, 1.0f);
- ensure("1. The two values are different", llround(12.000000f, 2) == llround(dot(quat1, quat2), 2));
+ ensure("1. The two values are different", ll_round(12.000000f, 2) == ll_round(dot(quat1, quat2), 2));
LLQuaternion quat0(3.0f, 9.334f, 34.5f, 23.0f), quat(34.5f, 23.23f, 2.0f, 45.5f);
- ensure("2. The two values are different", llround(1435.828807f, 2) == llround(dot(quat0, quat), 2));
+ ensure("2. The two values are different", ll_round(1435.828807f, 2) == ll_round(dot(quat0, quat), 2));
}
//test case for LLQuaternion &LLQuaternion::constrain(F32 radians) fn.
diff --git a/indra/llmath/tests/mathmisc_test.cpp b/indra/llmath/tests/mathmisc_test.cpp
index 91a2e6c009..f12140cf8f 100755
--- a/indra/llmath/tests/mathmisc_test.cpp
+++ b/indra/llmath/tests/mathmisc_test.cpp
@@ -128,33 +128,33 @@ namespace tut
void math_object::test<8>()
{
F32 val = 430903.2f;
- S32 val1 = llround(val);
- ensure("float llround value 1", (430903 == val1));
+ S32 val1 = ll_round(val);
+ ensure("float ll_round value 1", (430903 == val1));
val = -430903.9f;
- val1 = llround(val);
- ensure("float llround value 2", (-430904 == val1));
+ val1 = ll_round(val);
+ ensure("float ll_round value 2", (-430904 == val1));
}
template<> template<>
void math_object::test<9>()
{
F32 val = 430905.2654f, nearest = 100.f;
- val = llround(val, nearest);
- ensure("float llround value 1", (430900 == val));
+ val = ll_round(val, nearest);
+ ensure("float ll_round value 1", (430900 == val));
val = -430905.2654f, nearest = 10.f;
- val = llround(val, nearest);
- ensure("float llround value 1", (-430910 == val));
+ val = ll_round(val, nearest);
+ ensure("float ll_round value 1", (-430910 == val));
}
template<> template<>
void math_object::test<10>()
{
F64 val = 430905.2654, nearest = 100.0;
- val = llround(val, nearest);
- ensure("double llround value 1", (430900 == val));
+ val = ll_round(val, nearest);
+ ensure("double ll_round value 1", (430900 == val));
val = -430905.2654, nearest = 10.0;
- val = llround(val, nearest);
- ensure("double llround value 1", (-430910.00000 == val));
+ val = ll_round(val, nearest);
+ ensure("double ll_round value 1", (-430910.00000 == val));
}
template<> template<>
diff --git a/indra/llmath/tests/v4coloru_test.cpp b/indra/llmath/tests/v4coloru_test.cpp
index 128f6f3564..12e607a820 100755
--- a/indra/llmath/tests/v4coloru_test.cpp
+++ b/indra/llmath/tests/v4coloru_test.cpp
@@ -300,8 +300,8 @@ namespace tut
LLColor4U llcolor4u(r,g,b,a),llcolor4u1;
const F32 fVal = 3.f;
llcolor4u1 = llcolor4u.multAll(fVal);
- ensure("multAll:Fail to multiply ", (((U8)llround(r * fVal) == llcolor4u1.mV[VX]) && (U8)llround(g * fVal) == llcolor4u1.mV[VY]
- && ((U8)llround(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)llround(a * fVal) == llcolor4u1.mV[VW])));
+ ensure("multAll:Fail to multiply ", (((U8)ll_round(r * fVal) == llcolor4u1.mV[VX]) && (U8)ll_round(g * fVal) == llcolor4u1.mV[VY]
+ && ((U8)ll_round(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)ll_round(a * fVal) == llcolor4u1.mV[VW])));
}
template<> template<>
@@ -329,8 +329,8 @@ namespace tut
llcolor4u.setVecScaleClamp(color3);
const S32 MAX_COLOR = 255;
F32 color_scale_factor = MAX_COLOR/r;
- S32 r2 = llround(r * color_scale_factor);
- S32 g2 = llround(g * color_scale_factor);
+ S32 r2 = ll_round(r * color_scale_factor);
+ S32 g2 = ll_round(g * color_scale_factor);
ensure("setVecScaleClamp():Fail to add the value ", ((r2 == llcolor4u.mV[VX]) && (g2 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
}
}
diff --git a/indra/llmath/v4color.cpp b/indra/llmath/v4color.cpp
index cd2be7c8fd..79a64b24f2 100755
--- a/indra/llmath/v4color.cpp
+++ b/indra/llmath/v4color.cpp
@@ -125,10 +125,10 @@ LLColor4 LLColor4::cyan6(0.2f, 0.6f, 0.6f, 1.0f);
LLColor4::operator const LLColor4U() const
{
return LLColor4U(
- (U8)llclampb(llround(mV[VRED]*255.f)),
- (U8)llclampb(llround(mV[VGREEN]*255.f)),
- (U8)llclampb(llround(mV[VBLUE]*255.f)),
- (U8)llclampb(llround(mV[VALPHA]*255.f)));
+ (U8)llclampb(ll_round(mV[VRED]*255.f)),
+ (U8)llclampb(ll_round(mV[VGREEN]*255.f)),
+ (U8)llclampb(ll_round(mV[VBLUE]*255.f)),
+ (U8)llclampb(ll_round(mV[VALPHA]*255.f)));
}
LLColor4::LLColor4(const LLColor3 &vec, F32 a)
diff --git a/indra/llmath/v4coloru.h b/indra/llmath/v4coloru.h
index 12da7e2dd7..fddad34978 100755
--- a/indra/llmath/v4coloru.h
+++ b/indra/llmath/v4coloru.h
@@ -353,10 +353,10 @@ inline LLColor4U LLColor4U::multAll(const F32 k)
{
// Round to nearest
return LLColor4U(
- (U8)llround(mV[VX] * k),
- (U8)llround(mV[VY] * k),
- (U8)llround(mV[VZ] * k),
- (U8)llround(mV[VW] * k));
+ (U8)ll_round(mV[VX] * k),
+ (U8)ll_round(mV[VY] * k),
+ (U8)ll_round(mV[VZ] * k),
+ (U8)ll_round(mV[VW] * k));
}
/*
inline LLColor4U operator*(const LLColor4U &a, U8 k)
@@ -471,7 +471,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)
color_scale_factor /= max_color;
}
const S32 MAX_COLOR = 255;
- S32 r = llround(color.mV[0] * color_scale_factor);
+ S32 r = ll_round(color.mV[0] * color_scale_factor);
if (r > MAX_COLOR)
{
r = MAX_COLOR;
@@ -482,7 +482,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)
}
mV[0] = r;
- S32 g = llround(color.mV[1] * color_scale_factor);
+ S32 g = ll_round(color.mV[1] * color_scale_factor);
if (g > MAX_COLOR)
{
g = MAX_COLOR;
@@ -493,7 +493,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)
}
mV[1] = g;
- S32 b = llround(color.mV[2] * color_scale_factor);
+ S32 b = ll_round(color.mV[2] * color_scale_factor);
if (b > MAX_COLOR)
{
b = MAX_COLOR;
@@ -505,7 +505,7 @@ void LLColor4U::setVecScaleClamp(const LLColor4& color)
mV[2] = b;
// Alpha shouldn't be scaled, just clamped...
- S32 a = llround(color.mV[3] * MAX_COLOR);
+ S32 a = ll_round(color.mV[3] * MAX_COLOR);
if (a > MAX_COLOR)
{
a = MAX_COLOR;
@@ -527,7 +527,7 @@ void LLColor4U::setVecScaleClamp(const LLColor3& color)
}
const S32 MAX_COLOR = 255;
- S32 r = llround(color.mV[0] * color_scale_factor);
+ S32 r = ll_round(color.mV[0] * color_scale_factor);
if (r > MAX_COLOR)
{
r = MAX_COLOR;
@@ -539,7 +539,7 @@ void LLColor4U::setVecScaleClamp(const LLColor3& color)
}
mV[0] = r;
- S32 g = llround(color.mV[1] * color_scale_factor);
+ S32 g = ll_round(color.mV[1] * color_scale_factor);
if (g > MAX_COLOR)
{
g = MAX_COLOR;
@@ -551,7 +551,7 @@ void LLColor4U::setVecScaleClamp(const LLColor3& color)
}
mV[1] = g;
- S32 b = llround(color.mV[2] * color_scale_factor);
+ S32 b = ll_round(color.mV[2] * color_scale_factor);
if (b > MAX_COLOR)
{
b = MAX_COLOR;
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index d02a60b7b2..549708097a 100755
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -355,9 +355,7 @@ void LLAvatarNameCache::requestNamesViaCapability()
if (!url.empty())
{
- LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability requested "
- << ids << " ids"
- << LL_ENDL;
+ LL_INFOS("AvNameCache") << "LLAvatarNameCache::requestNamesViaCapability getting " << ids << " ids" << LL_ENDL;
LLHTTPClient::get(url, new LLAvatarNameResponder(agent_ids));
}
}
@@ -381,8 +379,7 @@ void LLAvatarNameCache::legacyNameFetch(const LLUUID& agent_id,
const std::string& full_name,
bool is_group)
{
- LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::legacyNameFetch "
- << "agent " << agent_id << " "
+ LL_DEBUGS("AvNameCache") << "LLAvatarNameCache agent " << agent_id << " "
<< "full name '" << full_name << "'"
<< ( is_group ? " [group]" : "" )
<< LL_ENDL;
@@ -411,7 +408,7 @@ void LLAvatarNameCache::requestNamesViaLegacy()
// invoked below. This should never happen in practice.
sPendingQueue[agent_id] = now;
- LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::requestNamesViaLegacy agent " << agent_id << LL_ENDL;
+ LL_DEBUGS("AvNameCache") << "agent " << agent_id << LL_ENDL;
gCacheName->get(agent_id, false, // legacy compatibility
boost::bind(&LLAvatarNameCache::legacyNameCallback, _1, _2, _3));
@@ -429,12 +426,13 @@ void LLAvatarNameCache::cleanupClass()
sCache.clear();
}
-void LLAvatarNameCache::importFile(std::istream& istr)
+bool LLAvatarNameCache::importFile(std::istream& istr)
{
LLSD data;
if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(data, istr))
{
- return;
+ LL_WARNS("AvNameCache") << "avatar name cache data xml parse failed" << LL_ENDL;
+ return false;
}
// by convention LLSD storage is a map
@@ -450,17 +448,19 @@ void LLAvatarNameCache::importFile(std::istream& istr)
av_name.fromLLSD( it->second );
sCache[agent_id] = av_name;
}
- LL_INFOS("AvNameCache") << "loaded " << sCache.size() << LL_ENDL;
-
+ LL_INFOS("AvNameCache") << "LLAvatarNameCache loaded " << sCache.size() << LL_ENDL;
// Some entries may have expired since the cache was stored,
// but they will be flushed in the first call to eraseUnrefreshed
// from LLAvatarNameResponder::idle
+
+ return true;
}
void LLAvatarNameCache::exportFile(std::ostream& ostr)
{
LLSD agents;
F64 max_unrefreshed = LLFrameTimer::getTotalSeconds() - MAX_UNREFRESHED_TIME;
+ LL_INFOS("AvNameCache") << "LLAvatarNameCache at exit cache has " << sCache.size() << LL_ENDL;
cache_t::const_iterator it = sCache.begin();
for ( ; it != sCache.end(); ++it)
{
@@ -473,6 +473,7 @@ void LLAvatarNameCache::exportFile(std::ostream& ostr)
agents[agent_id.asString()] = av_name.asLLSD();
}
}
+ LL_INFOS("AvNameCache") << "LLAvatarNameCache returning " << agents.size() << LL_ENDL;
LLSD data;
data["agents"] = agents;
LLSDSerialize::toPrettyXML(data, ostr);
@@ -515,6 +516,7 @@ void LLAvatarNameCache::idle()
}
else
{
+ LL_WARNS_ONCE("AvNameCache") << "LLAvatarNameCache still using legacy api" << LL_ENDL;
requestNamesViaLegacy();
}
}
@@ -552,24 +554,26 @@ void LLAvatarNameCache::eraseUnrefreshed()
if (!sLastExpireCheck || sLastExpireCheck < max_unrefreshed)
{
sLastExpireCheck = now;
-
+ S32 expired = 0;
for (cache_t::iterator it = sCache.begin(); it != sCache.end();)
{
const LLAvatarName& av_name = it->second;
if (av_name.mExpires < max_unrefreshed)
{
- LL_DEBUGS("AvNameCache") << it->first
+ LL_DEBUGS("AvNameCacheExpired") << "LLAvatarNameCache " << it->first
<< " user '" << av_name.getAccountName() << "' "
<< "expired " << now - av_name.mExpires << " secs ago"
<< LL_ENDL;
sCache.erase(it++);
+ expired++;
}
else
{
++it;
}
}
- LL_INFOS("AvNameCache") << sCache.size() << " cached avatar names" << LL_ENDL;
+ LL_INFOS("AvNameCache") << "LLAvatarNameCache expired " << expired << " cached avatar names, "
+ << sCache.size() << " remaining" << LL_ENDL;
}
}
@@ -590,8 +594,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
{
if (!isRequestPending(agent_id))
{
- LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::get "
- << "refresh agent " << agent_id
+ LL_DEBUGS("AvNameCache") << "LLAvatarNameCache refresh agent " << agent_id
<< LL_ENDL;
sAskQueue.insert(agent_id);
}
@@ -603,9 +606,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
if (!isRequestPending(agent_id))
{
- LL_DEBUGS("AvNameCache") << "LLAvatarNameCache::get "
- << "queue request for agent " << agent_id
- << LL_ENDL;
+ LL_DEBUGS("AvNameCache") << "LLAvatarNameCache queue request for agent " << agent_id << LL_ENDL;
sAskQueue.insert(agent_id);
}
@@ -734,7 +735,7 @@ bool LLAvatarNameCache::expirationFromCacheControl(const LLSD& headers, F64 *exp
fromCacheControl = true;
}
}
- LL_DEBUGS("AvNameCache")
+ LL_DEBUGS("AvNameCache") << "LLAvatarNameCache "
<< ( fromCacheControl ? "expires based on cache control " : "default expiration " )
<< "in " << *expires - now << " seconds"
<< LL_ENDL;
diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h
index ea016b3125..5a10053a69 100755
--- a/indra/llmessage/llavatarnamecache.h
+++ b/indra/llmessage/llavatarnamecache.h
@@ -46,7 +46,7 @@ namespace LLAvatarNameCache
void cleanupClass();
// Import/export the name cache to file.
- void importFile(std::istream& istr);
+ bool importFile(std::istream& istr);
void exportFile(std::ostream& ostr);
// On the viewer, usually a simulator capabilitity.
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp
index 4dd8d04656..daf3e0b4de 100755
--- a/indra/llmessage/llcachename.cpp
+++ b/indra/llmessage/llcachename.cpp
@@ -51,9 +51,6 @@ static const std::string NAME("name");
// We won't re-request a name during this time
const U32 PENDING_TIMEOUT_SECS = 5 * 60;
-// File version number
-const S32 CN_FILE_VERSION = 2;
-
// Globals
LLCacheName* gCacheName = NULL;
std::map<std::string, std::string> LLCacheName::sCacheName;
diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp
index 5aaada63b1..8dbe2f8411 100755
--- a/indra/llmessage/llcircuit.cpp
+++ b/indra/llmessage/llcircuit.cpp
@@ -103,6 +103,7 @@ LLCircuitData::LLCircuitData(const LLHost &host, TPACKETID in_id,
mPeakBPSOut(0.f),
mPeriodTime(0.0),
mExistenceTimer(),
+ mAckCreationTime(0.f),
mCurrentResendCount(0),
mLastPacketGap(0),
mHeartbeatInterval(circuit_heartbeat_interval),
@@ -688,7 +689,7 @@ void LLCircuitData::checkPacketInID(TPACKETID id, BOOL receive_resent)
// now, check to see if we've got a gap
U32 gap = 0;
- if ((mPacketsInID == id))
+ if (mPacketsInID == id)
{
// nope! bump and wrap the counter, then return
mPacketsInID++;
@@ -1078,60 +1079,69 @@ BOOL LLCircuitData::collectRAck(TPACKETID packet_num)
}
mAcks.push_back(packet_num);
+ if (mAckCreationTime == 0)
+ {
+ mAckCreationTime = getAgeInSeconds();
+ }
return TRUE;
}
// this method is called during the message system processAcks() to
// send out any acks that did not get sent already.
-void LLCircuit::sendAcks()
+void LLCircuit::sendAcks(F32 collect_time)
{
+ collect_time = llclamp(collect_time, 0.f, LL_COLLECT_ACK_TIME_MAX);
LLCircuitData* cd;
- circuit_data_map::iterator end = mSendAckMap.end();
- for(circuit_data_map::iterator it = mSendAckMap.begin(); it != end; ++it)
+ circuit_data_map::iterator it = mSendAckMap.begin();
+ while (it != mSendAckMap.end())
{
- cd = (*it).second;
-
+ circuit_data_map::iterator cur_it = it++;
+ cd = (*cur_it).second;
S32 count = (S32)cd->mAcks.size();
- if(count > 0)
+ F32 age = cd->getAgeInSeconds() - cd->mAckCreationTime;
+ if (age > collect_time || count == 0)
{
- // send the packet acks
- S32 acks_this_packet = 0;
- for(S32 i = 0; i < count; ++i)
+ if (count>0)
{
- if(acks_this_packet == 0)
+ // send the packet acks
+ S32 acks_this_packet = 0;
+ for(S32 i = 0; i < count; ++i)
{
- gMessageSystem->newMessageFast(_PREHASH_PacketAck);
+ if(acks_this_packet == 0)
+ {
+ gMessageSystem->newMessageFast(_PREHASH_PacketAck);
+ }
+ gMessageSystem->nextBlockFast(_PREHASH_Packets);
+ gMessageSystem->addU32Fast(_PREHASH_ID, cd->mAcks[i]);
+ ++acks_this_packet;
+ if(acks_this_packet > 250)
+ {
+ gMessageSystem->sendMessage(cd->mHost);
+ acks_this_packet = 0;
+ }
}
- gMessageSystem->nextBlockFast(_PREHASH_Packets);
- gMessageSystem->addU32Fast(_PREHASH_ID, cd->mAcks[i]);
- ++acks_this_packet;
- if(acks_this_packet > 250)
+ if(acks_this_packet > 0)
{
gMessageSystem->sendMessage(cd->mHost);
- acks_this_packet = 0;
}
- }
- if(acks_this_packet > 0)
- {
- gMessageSystem->sendMessage(cd->mHost);
- }
- if(gMessageSystem->mVerboseLog)
- {
- std::ostringstream str;
- str << "MSG: -> " << cd->mHost << "\tPACKET ACKS:\t";
- std::ostream_iterator<TPACKETID> append(str, " ");
- std::copy(cd->mAcks.begin(), cd->mAcks.end(), append);
- LL_INFOS() << str.str() << LL_ENDL;
- }
+ if(gMessageSystem->mVerboseLog)
+ {
+ std::ostringstream str;
+ str << "MSG: -> " << cd->mHost << "\tPACKET ACKS:\t";
+ std::ostream_iterator<TPACKETID> append(str, " ");
+ std::copy(cd->mAcks.begin(), cd->mAcks.end(), append);
+ LL_INFOS() << str.str() << LL_ENDL;
+ }
- // empty out the acks list
- cd->mAcks.clear();
+ // empty out the acks list
+ cd->mAcks.clear();
+ cd->mAckCreationTime = 0.f;
+ }
+ // remove data map
+ mSendAckMap.erase(cur_it);
}
}
-
- // All acks have been sent, clear the map
- mSendAckMap.clear();
}
diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h
index 5b109fc218..b8021bc9f0 100755
--- a/indra/llmessage/llcircuit.h
+++ b/indra/llmessage/llcircuit.h
@@ -60,6 +60,7 @@ const U8 LL_PACKET_ID_SIZE = 6;
const S32 LL_MAX_RESENT_PACKETS_PER_FRAME = 100;
const S32 LL_MAX_ACKED_PACKETS_PER_FRAME = 200;
+const F32 LL_COLLECT_ACK_TIME_MAX = 2.f;
//
// Prototypes and Predefines
@@ -237,6 +238,7 @@ protected:
packet_time_map mPotentialLostPackets;
packet_time_map mRecentlyReceivedReliablePackets;
std::vector<TPACKETID> mAcks;
+ F32 mAckCreationTime; // first ack creation time
typedef std::map<TPACKETID, LLReliablePacket *> reliable_map;
typedef reliable_map::iterator reliable_iter;
@@ -302,7 +304,7 @@ public:
// this method is called during the message system processAcks()
// to send out any acks that did not get sent already.
- void sendAcks();
+ void sendAcks(F32 collect_time);
friend std::ostream& operator<<(std::ostream& s, LLCircuit &circuit);
void getInfo(LLSD& info) const;
@@ -333,6 +335,7 @@ protected:
circuit_data_map mCircuitData;
typedef std::set<LLCircuitData *, LLCircuitData::less> ping_set_t; // Circuits sorted by next ping time
+
ping_set_t mPingSet;
// This variable points to the last circuit data we found to
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index a30140e8f3..e202154445 100755
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
@@ -47,8 +47,7 @@
const char* const LOCAL_ASSET_URL_FORMAT = "http://%s:12041/asset";
const U32 MAX_RUNNING_REQUESTS = 1;
-const F32 MAX_PROCESSING_TIME = 0.005f;
-const S32 CURL_XFER_BUFFER_SIZE = 65536;
+
// Try for 30 minutes for now.
const F32 GET_URL_TO_FILE_TIMEOUT = 1800.0f;
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index 200116337d..f8db3dded2 100755
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -157,7 +157,7 @@ namespace
{
LLBufferStream ostream(channels, buffer.get());
- llifstream fstream(mFilename, std::iostream::binary | std::iostream::out);
+ llifstream fstream(mFilename.c_str(), std::iostream::binary | std::iostream::out);
if(fstream.is_open())
{
fstream.seekg(0, std::ios::end);
diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h
index 9a0a427efd..7fd4cee8ba 100755
--- a/indra/llmessage/lliopipe.h
+++ b/indra/llmessage/lliopipe.h
@@ -56,11 +56,8 @@ void pump_debug(const char *file, S32 line);
/**
* intrusive pointer support
*/
-namespace boost
-{
- void intrusive_ptr_add_ref(LLIOPipe* p);
- void intrusive_ptr_release(LLIOPipe* p);
-};
+void intrusive_ptr_add_ref(LLIOPipe* p);
+void intrusive_ptr_release(LLIOPipe* p);
/**
* @class LLIOPipe
@@ -251,68 +248,21 @@ protected:
LLPumpIO* pump) = 0;
private:
- friend void boost::intrusive_ptr_add_ref(LLIOPipe* p);
- friend void boost::intrusive_ptr_release(LLIOPipe* p);
+ friend void intrusive_ptr_add_ref(LLIOPipe* p);
+ friend void intrusive_ptr_release(LLIOPipe* p);
U32 mReferenceCount;
};
-namespace boost
+inline void intrusive_ptr_add_ref(LLIOPipe* p)
{
- inline void intrusive_ptr_add_ref(LLIOPipe* p)
- {
- ++p->mReferenceCount;
- }
- inline void intrusive_ptr_release(LLIOPipe* p)
+ ++p->mReferenceCount;
+}
+inline void intrusive_ptr_release(LLIOPipe* p)
+{
+ if(p && 0 == --p->mReferenceCount)
{
- if(p && 0 == --p->mReferenceCount)
- {
- delete p;
- }
+ delete p;
}
-};
-
-
-#if 0
-/**
- * @class LLIOBoiler
- * @brief This class helps construct new LLIOPipe specializations
- * @see LLIOPipe
- *
- * THOROUGH_DESCRIPTION
- */
-class LLIOBoiler : public LLIOPipe
-{
-public:
- LLIOBoiler();
- virtual ~LLIOBoiler();
-
-protected:
- /* @name LLIOPipe virtual implementations
- */
- //@{
- /**
- * @brief Process the data in buffer
- */
- virtual EStatus process_impl(
- const LLChannelDescriptors& channels,
- buffer_ptr_t& buffer,
- bool& eos,
- LLSD& context,
- LLPumpIO* pump);
- //@}
-};
-
-// virtual
-LLIOPipe::EStatus process_impl(
- const LLChannelDescriptors& channels,
- buffer_ptr_t& buffer,
- bool& eos,
- LLSD& context,
- LLPumpIO* pump)
-{
- return STATUS_NOT_IMPLEMENTED;
}
-#endif // #if 0 - use this block as a boilerplate
-
#endif // LL_LLIOPIPE_H
diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp
index f8b2c8f5a6..64e79d6767 100755
--- a/indra/llmessage/llmessageconfig.cpp
+++ b/indra/llmessage/llmessageconfig.cpp
@@ -96,7 +96,7 @@ bool LLMessageConfigFile::loadFile()
{
LLSD data;
{
- llifstream file(filename());
+ llifstream file(filename().c_str());
if (file.is_open())
{
diff --git a/indra/llmessage/llpartdata.cpp b/indra/llmessage/llpartdata.cpp
index 41a0310ce0..53aa35c0f9 100755
--- a/indra/llmessage/llpartdata.cpp
+++ b/indra/llmessage/llpartdata.cpp
@@ -49,11 +49,6 @@ const S32 PS_MAX_DATA_BLOCK_SIZE = PS_SYS_DATA_BLOCK_SIZE+
const S32 PS_LEGACY_DATA_BLOCK_SIZE = PS_SYS_DATA_BLOCK_SIZE + PS_LEGACY_PART_DATA_BLOCK_SIZE;
-
-const U32 PART_DATA_MASK = LLPartData::LL_PART_DATA_GLOW | LLPartData::LL_PART_DATA_BLEND;
-
-
-
const F32 MAX_PART_SCALE = 4.f;
bool LLPartData::hasGlow() const
diff --git a/indra/llmessage/llregionhandle.h b/indra/llmessage/llregionhandle.h
index e3ddd46acd..085757dcbc 100755
--- a/indra/llmessage/llregionhandle.h
+++ b/indra/llmessage/llregionhandle.h
@@ -73,7 +73,7 @@ inline BOOL to_region_handle(const F32 x_pos, const F32 y_pos, U64 *region_handl
}
else
{
- x_int = (U32)llround(x_pos);
+ x_int = (U32)ll_round(x_pos);
}
if (y_pos < 0.f)
{
@@ -82,7 +82,7 @@ inline BOOL to_region_handle(const F32 x_pos, const F32 y_pos, U64 *region_handl
}
else
{
- y_int = (U32)llround(y_pos);
+ y_int = (U32)ll_round(y_pos);
}
*region_handle = to_region_handle(x_int, y_int);
return TRUE;
diff --git a/indra/llmessage/llservicebuilder.cpp b/indra/llmessage/llservicebuilder.cpp
index 392e7f1091..cf2e42f95c 100755
--- a/indra/llmessage/llservicebuilder.cpp
+++ b/indra/llmessage/llservicebuilder.cpp
@@ -34,7 +34,7 @@
void LLServiceBuilder::loadServiceDefinitionsFromFile(
const std::string& service_filename)
{
- llifstream service_file(service_filename, std::ios::binary);
+ llifstream service_file(service_filename.c_str(), std::ios::binary);
if(service_file.is_open())
{
LLSD service_data;
diff --git a/indra/llmessage/llthrottle.cpp b/indra/llmessage/llthrottle.cpp
index e484bd258d..7605da4d3f 100755
--- a/indra/llmessage/llthrottle.cpp
+++ b/indra/llmessage/llthrottle.cpp
@@ -391,7 +391,7 @@ BOOL LLThrottleGroup::dynamicAdjust()
}
mBitsSentThisPeriod[i] = 0;
- total += llround(mBitsSentHistory[i]);
+ total += ll_round(mBitsSentHistory[i]);
}
// Look for busy channels
diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp
index b518dd1b72..0ab67b8dda 100755
--- a/indra/llmessage/llxfermanager.cpp
+++ b/indra/llmessage/llxfermanager.cpp
@@ -261,7 +261,7 @@ U32 LLXferManager::numActiveListEntries(LLXfer *list_head)
while (list_head)
{
- if ((list_head->mStatus == e_LL_XFER_IN_PROGRESS))
+ if (list_head->mStatus == e_LL_XFER_IN_PROGRESS)
{
num_entries++;
}
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
index cc2d5d66ad..e9ce94ab3b 100755
--- a/indra/llmessage/message.cpp
+++ b/indra/llmessage/message.cpp
@@ -787,7 +787,7 @@ S32 LLMessageSystem::getReceiveBytes() const
}
-void LLMessageSystem::processAcks()
+void LLMessageSystem::processAcks(F32 collect_time)
{
F64Seconds mt_sec = getMessageTimeSeconds();
{
@@ -813,7 +813,7 @@ void LLMessageSystem::processAcks()
mCircuitInfo.resendUnackedPackets(mUnackedListDepth, mUnackedListSize);
//cycle through ack list for each host we need to send acks to
- mCircuitInfo.sendAcks();
+ mCircuitInfo.sendAcks(collect_time);
if (!mDenyTrustedCircuitSet.empty())
{
@@ -2752,7 +2752,7 @@ void LLMessageSystem::dumpReceiveCounts()
if (mt->mReceiveCount > 0)
{
LL_INFOS("Messaging") << "Num: " << std::setw(3) << mt->mReceiveCount << " Bytes: " << std::setw(6) << mt->mReceiveBytes
- << " Invalid: " << std::setw(3) << mt->mReceiveInvalid << " " << mt->mName << " " << llround(100 * mt->mDecodeTimeThisFrame / mReceiveTime.value()) << "%" << LL_ENDL;
+ << " Invalid: " << std::setw(3) << mt->mReceiveInvalid << " " << mt->mName << " " << ll_round(100 * mt->mDecodeTimeThisFrame / mReceiveTime.value()) << "%" << LL_ENDL;
}
}
}
diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h
index da06b64506..348b09b992 100755
--- a/indra/llmessage/message.h
+++ b/indra/llmessage/message.h
@@ -331,7 +331,7 @@ public:
BOOL poll(F32 seconds); // Number of seconds that we want to block waiting for data, returns if data was received
BOOL checkMessages( S64 frame_count = 0 );
- void processAcks();
+ void processAcks(F32 collect_time = 0.f);
BOOL isMessageFast(const char *msg);
BOOL isMessage(const char *msg)
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index 39cfb6019e..a62b9c3227 100755
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -1383,3 +1383,5 @@ char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->
char const* const _PREHASH_AppearanceData = LLMessageStringTable::getInstance()->getString("AppearanceData");
char const* const _PREHASH_AppearanceVersion = LLMessageStringTable::getInstance()->getString("AppearanceVersion");
char const* const _PREHASH_CofVersion = LLMessageStringTable::getInstance()->getString("CofVersion");
+char const* const _PREHASH_AppearanceHover = LLMessageStringTable::getInstance()->getString("AppearanceHover");
+char const* const _PREHASH_HoverHeight = LLMessageStringTable::getInstance()->getString("HoverHeight");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index 573e10dc0b..573c8e466f 100755
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -1383,4 +1383,6 @@ extern char const* const _PREHASH_GroupAVSounds;
extern char const* const _PREHASH_AppearanceData;
extern char const* const _PREHASH_AppearanceVersion;
extern char const* const _PREHASH_CofVersion;
+extern char const* const _PREHASH_AppearanceHover;
+extern char const* const _PREHASH_HoverHeight;
#endif
diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp
index eadf83c428..efca1bbfca 100755
--- a/indra/llmessage/tests/llhost_test.cpp
+++ b/indra/llmessage/tests/llhost_test.cpp
@@ -151,11 +151,31 @@ namespace tut
template<> template<>
void host_object::test<9>()
{
- skip("this test is flaky, but we should figure out why...");
+ skip("this test is irreparably flaky");
// skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\"");
- std::string hostStr = "lindenlab.com";
+ // nat: is it reasonable to expect LLHost::getHostName() to echo
+ // back something resembling the string passed to setHostByName()?
+ //
+ // If that's not even reasonable, would a round trip in the /other/
+ // direction make more sense? (Call getHostName() for something with
+ // known IP address; call setHostByName(); verify IP address)
+ //
+ // Failing that... is there a plausible way to test getHostName() and
+ // setHostByName()? Hopefully without putting up a dummy local DNS
+ // server?
+
+ // monty: If you don't control the DNS server or the DNS configuration
+ // for the test point then, no, none of these will necessarily be
+ // reliable and may start to fail at any time. Forward translation
+ // is subject to CNAME records and round-robin address assignment.
+ // Reverse lookup is 1-to-many and is more and more likely to have
+ // nothing to do with the forward translation.
+ //
+ // So the test is increasingly meaningless on a real network.
+
+ std::string hostStr = "lindenlab.com";
LLHost host;
- host.setHostByName(hostStr);
+ host.setHostByName(hostStr);
// reverse DNS will likely result in appending of some
// sub-domain to the main hostname. so look for
@@ -177,9 +197,9 @@ namespace tut
template<> template<>
void host_object::test<10>()
{
- std::string hostStr = "64.233.167.99";
+ std::string hostStr = "64.233.167.99";
LLHost host;
- host.setHostByName(hostStr);
+ host.setHostByName(hostStr);
ensure("SetHostByName for dotted IP Address failed", host.getAddress() == ip_string_to_u32(hostStr.c_str()));
}
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
index 75d89aac78..05fc12e338 100755
--- a/indra/llplugin/CMakeLists.txt
+++ b/indra/llplugin/CMakeLists.txt
@@ -68,7 +68,7 @@ list(APPEND llplugin_SOURCE_FILES ${llplugin_HEADER_FILES})
add_library (llplugin ${llplugin_SOURCE_FILES})
-add_subdirectory(slplugin)
+##add_subdirectory(slplugin)
# Add tests
if (LL_TESTS)
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 0644d2638c..52626b0302 100755
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -32,8 +32,6 @@
#include "llpluginclassmedia.h"
#include "llpluginmessageclasses.h"
-#include "llqtwebkit.h"
-
static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256;
static int nextPowerOf2( int value )
diff --git a/indra/llplugin/slplugin/slplugin-objc.h b/indra/llplugin/slplugin/slplugin-objc.h
index f2c2b3239c..af0ebe1af2 100755
--- a/indra/llplugin/slplugin/slplugin-objc.h
+++ b/indra/llplugin/slplugin/slplugin-objc.h
@@ -29,7 +29,9 @@
*/
//Protos for ObjectiveC classes (cannot import cocoa here due to BOOL conflict)
+#ifndef __OBJC__
class NSWindow;
+#endif // __OBJC__
/* Defined in slplugin-objc.mm: */
diff --git a/indra/llprimitive/llmaterial.cpp b/indra/llprimitive/llmaterial.cpp
index 7f3c8da434..57ceb3e11b 100644
--- a/indra/llprimitive/llmaterial.cpp
+++ b/indra/llprimitive/llmaterial.cpp
@@ -119,18 +119,18 @@ LLSD LLMaterial::asLLSD() const
LLSD material_data;
material_data[MATERIALS_CAP_NORMAL_MAP_FIELD] = mNormalID;
- material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_X_FIELD] = llround(mNormalOffsetX * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_Y_FIELD] = llround(mNormalOffsetY * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_X_FIELD] = llround(mNormalRepeatX * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_Y_FIELD] = llround(mNormalRepeatY * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_NORMAL_MAP_ROTATION_FIELD] = llround(mNormalRotation * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_X_FIELD] = ll_round(mNormalOffsetX * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_Y_FIELD] = ll_round(mNormalOffsetY * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_X_FIELD] = ll_round(mNormalRepeatX * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_Y_FIELD] = ll_round(mNormalRepeatY * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_NORMAL_MAP_ROTATION_FIELD] = ll_round(mNormalRotation * MATERIALS_MULTIPLIER);
material_data[MATERIALS_CAP_SPECULAR_MAP_FIELD] = mSpecularID;
- material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_X_FIELD] = llround(mSpecularOffsetX * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_Y_FIELD] = llround(mSpecularOffsetY * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_X_FIELD] = llround(mSpecularRepeatX * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_Y_FIELD] = llround(mSpecularRepeatY * MATERIALS_MULTIPLIER);
- material_data[MATERIALS_CAP_SPECULAR_MAP_ROTATION_FIELD] = llround(mSpecularRotation * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_X_FIELD] = ll_round(mSpecularOffsetX * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_Y_FIELD] = ll_round(mSpecularOffsetY * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_X_FIELD] = ll_round(mSpecularRepeatX * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_Y_FIELD] = ll_round(mSpecularRepeatY * MATERIALS_MULTIPLIER);
+ material_data[MATERIALS_CAP_SPECULAR_MAP_ROTATION_FIELD] = ll_round(mSpecularRotation * MATERIALS_MULTIPLIER);
material_data[MATERIALS_CAP_SPECULAR_COLOR_FIELD] = mSpecularLightColor.getValue();
material_data[MATERIALS_CAP_SPECULAR_EXP_FIELD] = mSpecularLightExponent;
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index aa8dd7697c..1571427d51 100755
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -191,7 +191,7 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector<LLVolumeFace>& fa
U32 tc_count = (tc_source && tc_source->getFloat_array()) ? tc.getCount() : 0;
U32 norm_count = (norm_source && norm_source->getFloat_array()) ? n.getCount(): 0;
- if ((vertex_count == 0))
+ if (vertex_count == 0)
{
LL_WARNS() << "Unable to process mesh with empty position array; invalid model." << LL_ENDL;
return LLModel::BAD_ELEMENT;
@@ -1681,11 +1681,11 @@ LLSD LLModel::writeModel(
}
}
- F32* src_tc = (F32*) face.mTexCoords[j].mV;
-
//texcoord
if (face.mTexCoords)
{
+ F32* src_tc = (F32*) face.mTexCoords[j].mV;
+
for (U32 k = 0; k < 2; ++k)
{ //for each component
//convert to 16-bit normalized
@@ -2012,7 +2012,7 @@ bool LLModel::loadModel(std::istream& is)
}
}
- std::string nm[] =
+ static const std::string nm[] =
{
"lowest_lod",
"low_lod",
diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp
index a505ea04a7..29747cb09c 100755
--- a/indra/llprimitive/llprimitive.cpp
+++ b/indra/llprimitive/llprimitive.cpp
@@ -107,8 +107,6 @@ const F32 FLEXIBLE_OBJECT_DEFAULT_LENGTH = 1.0f;
const BOOL FLEXIBLE_OBJECT_DEFAULT_USING_COLLISION_SPHERE = FALSE;
const BOOL FLEXIBLE_OBJECT_DEFAULT_RENDERING_COLLISION_SPHERE = FALSE;
-const S32 MAX_FACE_BITS = 9;
-
const char *SCULPT_DEFAULT_TEXTURE = "be293869-d0d9-0a69-5989-ad27f1946fd4"; // old inverted texture: "7595d345-a24c-e7ef-f0bd-78793792133e";
// Texture rotations are sent over the wire as a S16. This is used to scale the actual float
@@ -324,6 +322,11 @@ S32 LLPrimitive::setTEMaterialParams(const U8 index, const LLMaterialPtr pMateri
return mTextureList.setMaterialParams(index, pMaterialParams);
}
+LLMaterialPtr LLPrimitive::getTEMaterialParams(const U8 index)
+{
+ return mTextureList.getMaterialParams(index);
+}
+
//===============================================================
S32 LLPrimitive::setTEBumpShinyFullbright(const U8 index, const U8 bump)
{
@@ -993,8 +996,6 @@ BOOL LLPrimitive::setMaterial(U8 material)
}
}
-const F32 LL_MAX_SCALE_S = 100.0f;
-const F32 LL_MAX_SCALE_T = 100.0f;
S32 LLPrimitive::packTEField(U8 *cur_ptr, U8 *data_ptr, U8 data_size, U8 last_face_index, EMsgVariableType type) const
{
S32 face_index;
@@ -1148,12 +1149,12 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
const LLTextureEntry* te = getTE(face_index);
scale_s[face_index] = (F32) te->mScaleS;
scale_t[face_index] = (F32) te->mScaleT;
- offset_s[face_index] = (S16) llround((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ;
- offset_t[face_index] = (S16) llround((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ;
- image_rot[face_index] = (S16) llround(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR));
+ offset_s[face_index] = (S16) ll_round((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ;
+ offset_t[face_index] = (S16) ll_round((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ;
+ image_rot[face_index] = (S16) ll_round(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR));
bump[face_index] = te->getBumpShinyFullbright();
media_flags[face_index] = te->getMediaTexGen();
- glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
+ glow[face_index] = (U8) ll_round((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
// Directly sending material_ids is not safe!
memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16); /* Flawfinder: ignore */
@@ -1233,12 +1234,12 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
const LLTextureEntry* te = getTE(face_index);
scale_s[face_index] = (F32) te->mScaleS;
scale_t[face_index] = (F32) te->mScaleT;
- offset_s[face_index] = (S16) llround((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ;
- offset_t[face_index] = (S16) llround((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ;
- image_rot[face_index] = (S16) llround(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR));
+ offset_s[face_index] = (S16) ll_round((llclamp(te->mOffsetS,-1.0f,1.0f) * (F32)0x7FFF)) ;
+ offset_t[face_index] = (S16) ll_round((llclamp(te->mOffsetT,-1.0f,1.0f) * (F32)0x7FFF)) ;
+ image_rot[face_index] = (S16) ll_round(((fmod(te->mRotation, F_TWO_PI)/F_TWO_PI) * TEXTURE_ROTATION_PACK_FACTOR));
bump[face_index] = te->getBumpShinyFullbright();
media_flags[face_index] = te->getMediaTexGen();
- glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
+ glow[face_index] = (U8) ll_round((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
// Directly sending material_ids is not safe!
memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16); /* Flawfinder: ignore */
@@ -1360,9 +1361,8 @@ S32 LLPrimitive::applyParsedTEMessage(LLTEContents& tec)
retval |= setTEBumpShinyFullbright(i, tec.bump[i]);
retval |= setTEMediaTexGen(i, tec.media_flags[i]);
retval |= setTEGlow(i, (F32)tec.glow[i] / (F32)0xFF);
-
- retval |= setTEMaterialID(i, tec.material_ids[i]);
-
+ retval |= setTEMaterialID(i, tec.material_ids[i]);
+
coloru = LLColor4U(tec.colors + 4*i);
// Note: This is an optimization to send common colors (1.f, 1.f, 1.f, 1.f)
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
index cdb3f273c2..1bf83e36b4 100755
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -389,6 +389,8 @@ public:
virtual BOOL setMaterial(const U8 material); // returns TRUE if material changed
virtual void setTESelected(const U8 te, bool sel);
+ LLMaterialPtr getTEMaterialParams(const U8 index);
+
void copyTEs(const LLPrimitive *primitive);
S32 packTEField(U8 *cur_ptr, U8 *data_ptr, U8 data_size, U8 last_face_index, EMsgVariableType type) const;
S32 unpackTEField(U8 *cur_ptr, U8 *buffer_end, U8 *data_ptr, U8 data_size, U8 face_count, EMsgVariableType type);
diff --git a/indra/llprimitive/llprimtexturelist.cpp b/indra/llprimitive/llprimtexturelist.cpp
index dfae9699ec..f4f08248b8 100755
--- a/indra/llprimitive/llprimtexturelist.cpp
+++ b/indra/llprimitive/llprimtexturelist.cpp
@@ -377,6 +377,16 @@ S32 LLPrimTextureList::setMaterialParams(const U8 index, const LLMaterialPtr pMa
return TEM_CHANGE_NONE;
}
+LLMaterialPtr LLPrimTextureList::getMaterialParams(const U8 index)
+{
+ if (index < mEntryList.size())
+ {
+ return mEntryList[index]->getMaterialParams();
+ }
+
+ return LLMaterialPtr();
+}
+
S32 LLPrimTextureList::size() const
{
return mEntryList.size();
diff --git a/indra/llprimitive/llprimtexturelist.h b/indra/llprimitive/llprimtexturelist.h
index d7fabbbb79..49c636e40f 100755
--- a/indra/llprimitive/llprimtexturelist.h
+++ b/indra/llprimitive/llprimtexturelist.h
@@ -107,6 +107,8 @@ public:
S32 setMaterialID(const U8 index, const LLMaterialID& pMaterialID);
S32 setMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams);
+ LLMaterialPtr getMaterialParams(const U8 index);
+
S32 size() const;
// void forceResize(S32 new_size);
diff --git a/indra/llprimitive/llvolumemessage.cpp b/indra/llprimitive/llvolumemessage.cpp
index a2c2666146..8d47a7147f 100755
--- a/indra/llprimitive/llvolumemessage.cpp
+++ b/indra/llprimitive/llvolumemessage.cpp
@@ -52,13 +52,13 @@ bool LLVolumeMessage::packProfileParams(
tempU8 = params->getCurveType();
mesgsys->addU8Fast(_PREHASH_ProfileCurve, tempU8);
- tempU16 = (U16) llround( params->getBegin() / CUT_QUANTA);
+ tempU16 = (U16) ll_round( params->getBegin() / CUT_QUANTA);
mesgsys->addU16Fast(_PREHASH_ProfileBegin, tempU16);
- tempU16 = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ tempU16 = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);
mesgsys->addU16Fast(_PREHASH_ProfileEnd, tempU16);
- tempU16 = (U16) llround(params->getHollow() / HOLLOW_QUANTA);
+ tempU16 = (U16) ll_round(params->getHollow() / HOLLOW_QUANTA);
mesgsys->addU16Fast(_PREHASH_ProfileHollow, tempU16);
return true;
@@ -80,13 +80,13 @@ bool LLVolumeMessage::packProfileParams(
tempU8 = params->getCurveType();
dp.packU8(tempU8, "Curve");
- tempU16 = (U16) llround( params->getBegin() / CUT_QUANTA);
+ tempU16 = (U16) ll_round( params->getBegin() / CUT_QUANTA);
dp.packU16(tempU16, "Begin");
- tempU16 = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ tempU16 = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);
dp.packU16(tempU16, "End");
- tempU16 = (U16) llround(params->getHollow() / HOLLOW_QUANTA);
+ tempU16 = (U16) ll_round(params->getHollow() / HOLLOW_QUANTA);
dp.packU16(tempU16, "Hollow");
return true;
}
@@ -217,46 +217,46 @@ bool LLVolumeMessage::packPathParams(
U8 curve = params->getCurveType();
mesgsys->addU8Fast(_PREHASH_PathCurve, curve);
- U16 begin = (U16) llround(params->getBegin() / CUT_QUANTA);
+ U16 begin = (U16) ll_round(params->getBegin() / CUT_QUANTA);
mesgsys->addU16Fast(_PREHASH_PathBegin, begin);
- U16 end = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ U16 end = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);
mesgsys->addU16Fast(_PREHASH_PathEnd, end);
// Avoid truncation problem with direct F32->U8 cast.
// (e.g., (U8) (0.50 / 0.01) = (U8) 49.9999999 = 49 not 50.
- U8 pack_scale_x = 200 - (U8) llround(params->getScaleX() / SCALE_QUANTA);
+ U8 pack_scale_x = 200 - (U8) ll_round(params->getScaleX() / SCALE_QUANTA);
mesgsys->addU8Fast(_PREHASH_PathScaleX, pack_scale_x );
- U8 pack_scale_y = 200 - (U8) llround(params->getScaleY() / SCALE_QUANTA);
+ U8 pack_scale_y = 200 - (U8) ll_round(params->getScaleY() / SCALE_QUANTA);
mesgsys->addU8Fast(_PREHASH_PathScaleY, pack_scale_y );
- U8 pack_shear_x = (U8) llround(params->getShearX() / SHEAR_QUANTA);
+ U8 pack_shear_x = (U8) ll_round(params->getShearX() / SHEAR_QUANTA);
mesgsys->addU8Fast(_PREHASH_PathShearX, pack_shear_x );
- U8 pack_shear_y = (U8) llround(params->getShearY() / SHEAR_QUANTA);
+ U8 pack_shear_y = (U8) ll_round(params->getShearY() / SHEAR_QUANTA);
mesgsys->addU8Fast(_PREHASH_PathShearY, pack_shear_y );
- S8 twist = (S8) llround(params->getTwist() / SCALE_QUANTA);
+ S8 twist = (S8) ll_round(params->getTwist() / SCALE_QUANTA);
mesgsys->addS8Fast(_PREHASH_PathTwist, twist);
- S8 twist_begin = (S8) llround(params->getTwistBegin() / SCALE_QUANTA);
+ S8 twist_begin = (S8) ll_round(params->getTwistBegin() / SCALE_QUANTA);
mesgsys->addS8Fast(_PREHASH_PathTwistBegin, twist_begin);
- S8 radius_offset = (S8) llround(params->getRadiusOffset() / SCALE_QUANTA);
+ S8 radius_offset = (S8) ll_round(params->getRadiusOffset() / SCALE_QUANTA);
mesgsys->addS8Fast(_PREHASH_PathRadiusOffset, radius_offset);
- S8 taper_x = (S8) llround(params->getTaperX() / TAPER_QUANTA);
+ S8 taper_x = (S8) ll_round(params->getTaperX() / TAPER_QUANTA);
mesgsys->addS8Fast(_PREHASH_PathTaperX, taper_x);
- S8 taper_y = (S8) llround(params->getTaperY() / TAPER_QUANTA);
+ S8 taper_y = (S8) ll_round(params->getTaperY() / TAPER_QUANTA);
mesgsys->addS8Fast(_PREHASH_PathTaperY, taper_y);
- U8 revolutions = (U8) llround( (params->getRevolutions() - 1.0f) / REV_QUANTA);
+ U8 revolutions = (U8) ll_round( (params->getRevolutions() - 1.0f) / REV_QUANTA);
mesgsys->addU8Fast(_PREHASH_PathRevolutions, revolutions);
- S8 skew = (S8) llround(params->getSkew() / SCALE_QUANTA);
+ S8 skew = (S8) ll_round(params->getSkew() / SCALE_QUANTA);
mesgsys->addS8Fast(_PREHASH_PathSkew, skew);
return true;
@@ -274,46 +274,46 @@ bool LLVolumeMessage::packPathParams(
U8 curve = params->getCurveType();
dp.packU8(curve, "Curve");
- U16 begin = (U16) llround(params->getBegin() / CUT_QUANTA);
+ U16 begin = (U16) ll_round(params->getBegin() / CUT_QUANTA);
dp.packU16(begin, "Begin");
- U16 end = 50000 - (U16) llround(params->getEnd() / CUT_QUANTA);
+ U16 end = 50000 - (U16) ll_round(params->getEnd() / CUT_QUANTA);
dp.packU16(end, "End");
// Avoid truncation problem with direct F32->U8 cast.
// (e.g., (U8) (0.50 / 0.01) = (U8) 49.9999999 = 49 not 50.
- U8 pack_scale_x = 200 - (U8) llround(params->getScaleX() / SCALE_QUANTA);
+ U8 pack_scale_x = 200 - (U8) ll_round(params->getScaleX() / SCALE_QUANTA);
dp.packU8(pack_scale_x, "ScaleX");
- U8 pack_scale_y = 200 - (U8) llround(params->getScaleY() / SCALE_QUANTA);
+ U8 pack_scale_y = 200 - (U8) ll_round(params->getScaleY() / SCALE_QUANTA);
dp.packU8(pack_scale_y, "ScaleY");
- S8 pack_shear_x = (S8) llround(params->getShearX() / SHEAR_QUANTA);
+ S8 pack_shear_x = (S8) ll_round(params->getShearX() / SHEAR_QUANTA);
dp.packU8(*(U8 *)&pack_shear_x, "ShearX");
- S8 pack_shear_y = (S8) llround(params->getShearY() / SHEAR_QUANTA);
+ S8 pack_shear_y = (S8) ll_round(params->getShearY() / SHEAR_QUANTA);
dp.packU8(*(U8 *)&pack_shear_y, "ShearY");
- S8 twist = (S8) llround(params->getTwist() / SCALE_QUANTA);
+ S8 twist = (S8) ll_round(params->getTwist() / SCALE_QUANTA);
dp.packU8(*(U8 *)&twist, "Twist");
- S8 twist_begin = (S8) llround(params->getTwistBegin() / SCALE_QUANTA);
+ S8 twist_begin = (S8) ll_round(params->getTwistBegin() / SCALE_QUANTA);
dp.packU8(*(U8 *)&twist_begin, "TwistBegin");
- S8 radius_offset = (S8) llround(params->getRadiusOffset() / SCALE_QUANTA);
+ S8 radius_offset = (S8) ll_round(params->getRadiusOffset() / SCALE_QUANTA);
dp.packU8(*(U8 *)&radius_offset, "RadiusOffset");
- S8 taper_x = (S8) llround(params->getTaperX() / TAPER_QUANTA);
+ S8 taper_x = (S8) ll_round(params->getTaperX() / TAPER_QUANTA);
dp.packU8(*(U8 *)&taper_x, "TaperX");
- S8 taper_y = (S8) llround(params->getTaperY() / TAPER_QUANTA);
+ S8 taper_y = (S8) ll_round(params->getTaperY() / TAPER_QUANTA);
dp.packU8(*(U8 *)&taper_y, "TaperY");
- U8 revolutions = (U8) llround( (params->getRevolutions() - 1.0f) / REV_QUANTA);
+ U8 revolutions = (U8) ll_round( (params->getRevolutions() - 1.0f) / REV_QUANTA);
dp.packU8(*(U8 *)&revolutions, "Revolutions");
- S8 skew = (S8) llround(params->getSkew() / SCALE_QUANTA);
+ S8 skew = (S8) ll_round(params->getSkew() / SCALE_QUANTA);
dp.packU8(*(U8 *)&skew, "Skew");
return true;
diff --git a/indra/llprimitive/object_flags.h b/indra/llprimitive/object_flags.h
index 31dbd15ae0..88eaeb034a 100755
--- a/indra/llprimitive/object_flags.h
+++ b/indra/llprimitive/object_flags.h
@@ -69,6 +69,7 @@ const U32 FLAGS_TEMPORARY_ON_REZ = (1U << 29);
//const U32 FLAGS_UNUSED_007 = (1U << 31); // was FLAGS_ZLIB_COMPRESSED
const U32 FLAGS_LOCAL = FLAGS_ANIM_SOURCE | FLAGS_CAMERA_SOURCE;
+const U32 FLAGS_WORLD = FLAGS_USE_PHYSICS | FLAGS_PHANTOM | FLAGS_TEMPORARY_ON_REZ;
typedef enum e_havok_joint_type
{
diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt
index dba12d048e..331f988382 100755
--- a/indra/llrender/CMakeLists.txt
+++ b/indra/llrender/CMakeLists.txt
@@ -121,7 +121,6 @@ target_link_libraries(llrender
${LLCOMMON_LIBRARIES}
${LLIMAGE_LIBRARIES}
${LLMATH_LIBRARIES}
- ${LLRENDER_LIBRARIES}
${LLVFS_LIBRARIES}
${LLXML_LIBRARIES}
${LLVFS_LIBRARIES}
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index 25b1c533c1..de26d19efc 100755
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -103,7 +103,6 @@ LLFontGlyphInfo::LLFontGlyphInfo(U32 index)
LLFontFreetype::LLFontFreetype()
: LLTrace::MemTrackable<LLFontFreetype>("LLFontFreetype"),
mFontBitmapCachep(new LLFontBitmapCache),
- mValid(FALSE),
mAscender(0.f),
mDescender(0.f),
mLineHeight(0.f),
@@ -184,8 +183,8 @@ BOOL LLFontFreetype::loadFace(const std::string& filename, F32 point_size, F32 v
mDescender = -mFTFace->descender * pixels_per_unit;
mLineHeight = mFTFace->height * pixels_per_unit;
- S32 max_char_width = llround(0.5f + (x_max - x_min));
- S32 max_char_height = llround(0.5f + (y_max - y_min));
+ S32 max_char_width = ll_round(0.5f + (x_max - x_min));
+ S32 max_char_height = ll_round(0.5f + (y_max - y_min));
mFontBitmapCachep->init(components, max_char_width, max_char_height);
claimMem(mFontBitmapCachep);
diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h
index 2963fbd43d..a5ece42b88 100755
--- a/indra/llrender/llfontfreetype.h
+++ b/indra/llrender/llfontfreetype.h
@@ -162,8 +162,6 @@ private:
BOOL mIsFallback;
font_vector_t mFallbackFonts; // A list of fallback fonts to look for glyphs in (for Unicode chars)
- BOOL mValid;
-
typedef boost::unordered_map<llwchar, LLFontGlyphInfo*> char_glyph_info_map_t;
mutable char_glyph_info_map_t mCharGlyphInfoMap; // Information about glyph location in bitmap
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
index 1d181b476a..53ca080d66 100755
--- a/indra/llrender/llfontgl.cpp
+++ b/indra/llrender/llfontgl.cpp
@@ -61,12 +61,6 @@ LLCoordGL LLFontGL::sCurOrigin;
F32 LLFontGL::sCurDepth;
std::vector<std::pair<LLCoordGL, F32> > LLFontGL::sOriginStack;
-const F32 EXT_X_BEARING = 1.f;
-const F32 EXT_Y_BEARING = 0.f;
-const F32 EXT_KERNING = 1.f;
-const F32 PIXEL_BORDER_THRESHOLD = 0.0001f;
-const F32 PIXEL_CORRECTION_DISTANCE = 0.01f;
-
const F32 PAD_UVY = 0.5f; // half of vertical padding between glyphs in the glyph texture
const F32 DROP_SHADOW_SOFT_STRENGTH = 0.3f;
@@ -217,10 +211,10 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
case LEFT:
break;
case RIGHT:
- cur_x -= llmin(scaled_max_pixels, llround(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX));
+ cur_x -= llmin(scaled_max_pixels, ll_round(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX));
break;
case HCENTER:
- cur_x -= llmin(scaled_max_pixels, llround(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX)) / 2;
+ cur_x -= llmin(scaled_max_pixels, ll_round(getWidthF32(wstr.c_str(), begin_offset, length) * sScaleX)) / 2;
break;
default:
break;
@@ -229,7 +223,7 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
cur_render_y = cur_y;
cur_render_x = cur_x;
- F32 start_x = (F32)llround(cur_x);
+ F32 start_x = (F32)ll_round(cur_x);
const LLFontBitmapCache* font_bitmap_cache = mFontFreetype->getFontBitmapCache();
@@ -243,12 +237,12 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
if (use_ellipses)
{
// check for too long of a string
- S32 string_width = llround(getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX);
+ S32 string_width = ll_round(getWidthF32(wstr.c_str(), begin_offset, max_chars) * sScaleX);
if (string_width > scaled_max_pixels)
{
// use four dots for ellipsis width to generate padding
const LLWString dots(utf8str_to_wstring(std::string("....")));
- scaled_max_pixels = llmax(0, scaled_max_pixels - llround(getWidthF32(dots.c_str())));
+ scaled_max_pixels = llmax(0, scaled_max_pixels - ll_round(getWidthF32(dots.c_str())));
draw_ellipses = TRUE;
}
}
@@ -313,10 +307,10 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
(fgi->mXBitmapOffset + fgi->mWidth) * inv_width,
(fgi->mYBitmapOffset - PAD_UVY) * inv_height);
// snap glyph origin to whole screen pixel
- LLRectf screen_rect((F32)llround(cur_render_x + (F32)fgi->mXBearing),
- (F32)llround(cur_render_y + (F32)fgi->mYBearing),
- (F32)llround(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth,
- (F32)llround(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight);
+ LLRectf screen_rect((F32)ll_round(cur_render_x + (F32)fgi->mXBearing),
+ (F32)ll_round(cur_render_y + (F32)fgi->mYBearing),
+ (F32)ll_round(cur_render_x + (F32)fgi->mXBearing) + (F32)fgi->mWidth,
+ (F32)ll_round(cur_render_y + (F32)fgi->mYBearing) - (F32)fgi->mHeight);
if (glyph_count >= GLYPH_BATCH_SIZE)
{
@@ -347,8 +341,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons
// Must do this to cur_x, not just to cur_render_x, otherwise you
// will squish sub-pixel kerned characters too close together.
// For example, "CCCCC" looks bad.
- cur_x = (F32)llround(cur_x);
- //cur_y = (F32)llround(cur_y);
+ cur_x = (F32)ll_round(cur_x);
+ //cur_y = (F32)ll_round(cur_y);
cur_render_x = cur_x;
cur_render_y = cur_y;
@@ -458,7 +452,7 @@ S32 LLFontGL::getWidth(const std::string& utf8text, S32 begin_offset, S32 max_ch
S32 LLFontGL::getWidth(const llwchar* wchars, S32 begin_offset, S32 max_chars) const
{
F32 width = getWidthF32(wchars, begin_offset, max_chars);
- return llround(width);
+ return ll_round(width);
}
F32 LLFontGL::getWidthF32(const std::string& utf8text) const
@@ -520,7 +514,7 @@ F32 LLFontGL::getWidthF32(const llwchar* wchars, S32 begin_offset, S32 max_chars
cur_x += mFontFreetype->getXKerning(fgi, next_glyph);
}
// Round after kerning.
- cur_x = (F32)llround(cur_x);
+ cur_x = (F32)ll_round(cur_x);
}
// add in extra pixels for last character's width past its xadvance
@@ -628,7 +622,7 @@ S32 LLFontGL::maxDrawableChars(const llwchar* wchars, F32 max_pixels, S32 max_ch
}
// Round after kerning.
- cur_x = (F32)llround(cur_x);
+ cur_x = (F32)ll_round(cur_x);
}
if( clip )
@@ -698,7 +692,7 @@ S32 LLFontGL::firstDrawableChar(const llwchar* wchars, F32 max_pixels, S32 text_
}
// Round after kerning.
- total_width = (F32)llround(total_width);
+ total_width = (F32)ll_round(total_width);
}
if (drawable_chars == 0)
@@ -781,7 +775,7 @@ S32 LLFontGL::charFromPixelOffset(const llwchar* wchars, S32 begin_offset, F32 t
// Round after kerning.
- cur_x = (F32)llround(cur_x);
+ cur_x = (F32)ll_round(cur_x);
}
return llmin(max_chars, pos - begin_offset);
diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp
index a95bb7027b..b6ea5aa7f1 100755
--- a/indra/llrender/llpostprocess.cpp
+++ b/indra/llrender/llpostprocess.cpp
@@ -49,17 +49,8 @@ static LLStaticHashedString sBlurWidth("blurWidth");
LLPostProcess * gPostProcess = NULL;
-
static const unsigned int NOISE_SIZE = 512;
-/// CALCULATING LUMINANCE (Using NTSC lum weights)
-/// http://en.wikipedia.org/wiki/Luma_%28video%29
-static const float LUMINANCE_R = 0.299f;
-static const float LUMINANCE_G = 0.587f;
-static const float LUMINANCE_B = 0.114f;
-
-static const char * const XML_FILENAME = "postprocesseffects.xml";
-
LLPostProcess::LLPostProcess(void) :
initialized(false),
mAllEffects(LLSD::emptyMap()),
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 0af402efea..1ca6e99ecf 100755
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -53,7 +53,7 @@ bool LLRender::sGLCoreProfile = false;
static const U32 LL_NUM_TEXTURE_LAYERS = 32;
static const U32 LL_NUM_LIGHT_UNITS = 8;
-static GLenum sGLTextureType[] =
+static const GLenum sGLTextureType[] =
{
GL_TEXTURE_2D,
GL_TEXTURE_RECTANGLE_ARB,
@@ -61,14 +61,14 @@ static GLenum sGLTextureType[] =
GL_TEXTURE_2D_MULTISAMPLE
};
-static GLint sGLAddressMode[] =
+static const GLint sGLAddressMode[] =
{
GL_REPEAT,
GL_MIRRORED_REPEAT,
GL_CLAMP_TO_EDGE
};
-static GLenum sGLCompareFunc[] =
+static const GLenum sGLCompareFunc[] =
{
GL_NEVER,
GL_ALWAYS,
@@ -82,7 +82,7 @@ static GLenum sGLCompareFunc[] =
const U32 immediate_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXCOORD0;
-static GLenum sGLBlendFactor[] =
+static const GLenum sGLBlendFactor[] =
{
GL_ONE,
GL_ZERO,
@@ -99,12 +99,12 @@ static GLenum sGLBlendFactor[] =
};
LLTexUnit::LLTexUnit(S32 index)
-: mCurrTexType(TT_NONE), mCurrBlendType(TB_MULT),
-mCurrColorOp(TBO_MULT), mCurrAlphaOp(TBO_MULT),
-mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR),
-mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA),
-mCurrColorScale(1), mCurrAlphaScale(1), mCurrTexture(0),
-mHasMipMaps(false)
+ : mCurrTexType(TT_NONE), mCurrBlendType(TB_MULT),
+ mCurrColorOp(TBO_MULT), mCurrAlphaOp(TBO_MULT),
+ mCurrColorSrc1(TBS_TEX_COLOR), mCurrColorSrc2(TBS_PREV_COLOR),
+ mCurrAlphaSrc1(TBS_TEX_ALPHA), mCurrAlphaSrc2(TBS_PREV_ALPHA),
+ mCurrColorScale(1), mCurrAlphaScale(1), mCurrTexture(0),
+ mHasMipMaps(false)
{
llassert_always(index < (S32)LL_NUM_TEXTURE_LAYERS);
mIndex = index;
@@ -1189,7 +1189,7 @@ void LLRender::syncMatrices()
if (shader)
{
- llassert(shader);
+ //llassert(shader);
bool mvp_done = false;
@@ -1288,7 +1288,7 @@ void LLRender::syncMatrices()
}
else if (!LLGLSLShader::sNoFixedFunction)
{
- GLenum mode[] =
+ static const GLenum mode[] =
{
GL_MODELVIEW,
GL_PROJECTION,
diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp
index df5d79a436..4e2ebfd51e 100644
--- a/indra/llrender/llrender2dutils.cpp
+++ b/indra/llrender/llrender2dutils.cpp
@@ -433,8 +433,8 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
F32 image_width = image->getWidth(0);
F32 image_height = image->getHeight(0);
- S32 image_natural_width = llround(image_width * uv_width);
- S32 image_natural_height = llround(image_height * uv_height);
+ S32 image_natural_width = ll_round(image_width * uv_width);
+ S32 image_natural_height = ll_round(image_height * uv_height);
LLRectf draw_center_rect( uv_center_rect.mLeft * image_width,
uv_center_rect.mTop * image_height,
@@ -468,10 +468,10 @@ void gl_draw_scaled_image_with_border(S32 x, S32 y, S32 width, S32 height, LLTex
draw_center_rect.setCenterAndSize(uv_center_rect.getCenterX() * width, uv_center_rect.getCenterY() * height, scaled_width, scaled_height);
}
- draw_center_rect.mLeft = llround(ui_translation.mV[VX] + (F32)draw_center_rect.mLeft * ui_scale.mV[VX]);
- draw_center_rect.mTop = llround(ui_translation.mV[VY] + (F32)draw_center_rect.mTop * ui_scale.mV[VY]);
- draw_center_rect.mRight = llround(ui_translation.mV[VX] + (F32)draw_center_rect.mRight * ui_scale.mV[VX]);
- draw_center_rect.mBottom = llround(ui_translation.mV[VY] + (F32)draw_center_rect.mBottom * ui_scale.mV[VY]);
+ draw_center_rect.mLeft = ll_round(ui_translation.mV[VX] + (F32)draw_center_rect.mLeft * ui_scale.mV[VX]);
+ draw_center_rect.mTop = ll_round(ui_translation.mV[VY] + (F32)draw_center_rect.mTop * ui_scale.mV[VY]);
+ draw_center_rect.mRight = ll_round(ui_translation.mV[VX] + (F32)draw_center_rect.mRight * ui_scale.mV[VX]);
+ draw_center_rect.mBottom = ll_round(ui_translation.mV[VY] + (F32)draw_center_rect.mBottom * ui_scale.mV[VY]);
LLRectf draw_outer_rect(ui_translation.mV[VX],
ui_translation.mV[VY] + height * ui_scale.mV[VY],
@@ -703,8 +703,8 @@ void gl_draw_scaled_rotated_image(S32 x, S32 y, S32 width, S32 height, F32 degre
ui_translation.mV[VY] += y;
ui_translation.scaleVec(ui_scale);
S32 index = 0;
- S32 scaled_width = llround(width * ui_scale.mV[VX]);
- S32 scaled_height = llround(height * ui_scale.mV[VY]);
+ S32 scaled_width = ll_round(width * ui_scale.mV[VX]);
+ S32 scaled_height = ll_round(height * ui_scale.mV[VY]);
uv[index] = LLVector2(uv_rect.mRight, uv_rect.mTop);
pos[index] = LLVector3(ui_translation.mV[VX] + scaled_width, ui_translation.mV[VY] + scaled_height, 0.f);
diff --git a/indra/llrender/lluiimage.cpp b/indra/llrender/lluiimage.cpp
index 6f1fae92cd..5d8f92b2e6 100644
--- a/indra/llrender/lluiimage.cpp
+++ b/indra/llrender/lluiimage.cpp
@@ -149,13 +149,13 @@ void LLUIImage::draw3D(const LLVector3& origin_agent, const LLVector3& x_axis, c
S32 LLUIImage::getWidth() const
{
// return clipped dimensions of actual image area
- return llround((F32)mImage->getWidth(0) * mClipRegion.getWidth());
+ return ll_round((F32)mImage->getWidth(0) * mClipRegion.getWidth());
}
S32 LLUIImage::getHeight() const
{
// return clipped dimensions of actual image area
- return llround((F32)mImage->getHeight(0) * mClipRegion.getHeight());
+ return ll_round((F32)mImage->getHeight(0) * mClipRegion.getHeight());
}
S32 LLUIImage::getTextureWidth() const
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
index b787794b95..623f570cef 100755
--- a/indra/llui/llaccordionctrl.cpp
+++ b/indra/llui/llaccordionctrl.cpp
@@ -36,25 +36,17 @@
#include "boost/bind.hpp"
-static const S32 DRAGGER_BAR_MARGIN = 4;
-static const S32 DRAGGER_BAR_HEIGHT = 5;
static const S32 BORDER_MARGIN = 2;
static const S32 PARENT_BORDER_MARGIN = 5;
-
-static const S32 panel_delta = DRAGGER_BAR_MARGIN; // Distanse between two panels
-
-static const S32 HORIZONTAL_MULTIPLE = 8;
static const S32 VERTICAL_MULTIPLE = 16;
static const F32 MIN_AUTO_SCROLL_RATE = 120.f;
static const F32 MAX_AUTO_SCROLL_RATE = 500.f;
static const F32 AUTO_SCROLL_RATE_ACCEL = 120.f;
-
// LLAccordionCtrl =================================================================|
static LLDefaultChildRegistry::Register<LLAccordionCtrl> t2("accordion");
-
LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
, mFitParent(params.fit_parent)
, mAutoScrolling( false )
@@ -613,7 +605,7 @@ BOOL LLAccordionCtrl::autoScroll (S32 x, S32 y)
// autoscroll region should take up no more than one third of visible scroller area
S32 auto_scroll_region_height = llmin(rect_local.getHeight() / 3, 10);
- S32 auto_scroll_speed = llround(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32());
+ S32 auto_scroll_speed = ll_round(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32());
LLRect bottom_scroll_rect = screen_local_extents;
bottom_scroll_rect.mTop = rect_local.mBottom + auto_scroll_region_height;
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
index 30cb18812b..42726de0ad 100755
--- a/indra/llui/llbadge.cpp
+++ b/indra/llui/llbadge.cpp
@@ -196,10 +196,10 @@ void renderBadgeBackground(F32 centerX, F32 centerY, F32 width, F32 height, cons
F32 x = LLFontGL::sCurOrigin.mX + centerX - width * 0.5f;
F32 y = LLFontGL::sCurOrigin.mY + centerY - height * 0.5f;
- LLRectf screen_rect(llround(x),
- llround(y),
- llround(x) + width,
- llround(y) + height);
+ LLRectf screen_rect(ll_round(x),
+ ll_round(y),
+ ll_round(x) + width,
+ ll_round(y) + height);
LLVector3 vertices[4];
vertices[0] = LLVector3(screen_rect.mRight, screen_rect.mTop, 1.0f);
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
index ce8383857c..8c7df45884 100755
--- a/indra/llui/llbutton.cpp
+++ b/indra/llui/llbutton.cpp
@@ -606,8 +606,8 @@ void LLButton::getOverlayImageSize(S32& overlay_width, S32& overlay_height)
overlay_height = mImageOverlay->getHeight();
F32 scale_factor = llmin((F32)getRect().getWidth() / (F32)overlay_width, (F32)getRect().getHeight() / (F32)overlay_height, 1.f);
- overlay_width = llround((F32)overlay_width * scale_factor);
- overlay_height = llround((F32)overlay_height * scale_factor);
+ overlay_width = ll_round((F32)overlay_width * scale_factor);
+ overlay_height = ll_round((F32)overlay_height * scale_factor);
}
@@ -776,7 +776,7 @@ void LLButton::draw()
if (hasFocus())
{
F32 lerp_amt = gFocusMgr.getFocusFlashAmt();
- drawBorder(imagep, gFocusMgr.getFocusColor() % alpha, llround(lerp(1.f, 3.f, lerp_amt)));
+ drawBorder(imagep, gFocusMgr.getFocusColor() % alpha, ll_round(lerp(1.f, 3.f, lerp_amt)));
}
if (use_glow_effect)
@@ -1067,7 +1067,7 @@ void LLButton::resize(LLUIString label)
{
S32 overlay_width = mImageOverlay->getWidth();
F32 scale_factor = (getRect().getHeight() - (mImageOverlayBottomPad + mImageOverlayTopPad)) / (F32)mImageOverlay->getHeight();
- overlay_width = llround((F32)overlay_width * scale_factor);
+ overlay_width = ll_round((F32)overlay_width * scale_factor);
switch(mImageOverlayAlignment)
{
diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp
index 5525520d78..eee6339caf 100755
--- a/indra/llui/llcheckboxctrl.cpp
+++ b/indra/llui/llcheckboxctrl.cpp
@@ -41,8 +41,6 @@
#include "lltextbox.h"
#include "llkeyboard.h"
-const U32 MAX_STRING_LENGTH = 10;
-
static LLDefaultChildRegistry::Register<LLCheckBoxCtrl> r("check_box");
// Compiler optimization, generate extern template
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
index 56be52f69a..b32aea5ffa 100755
--- a/indra/llui/llcombobox.cpp
+++ b/indra/llui/llcombobox.cpp
@@ -788,6 +788,11 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)
// since the dropdown button eats the key
if (key == KEY_RETURN)
{
+ if (mask == MASK_NONE)
+ {
+ mOnReturnSignal(this, getValue());
+ }
+
// don't show list and don't eat key input when committing
// free-form text entry with RETURN since user already knows
// what they are trying to select
diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h
index 67393504e7..c9b1212b70 100755
--- a/indra/llui/llcombobox.h
+++ b/indra/llui/llcombobox.h
@@ -199,6 +199,11 @@ public:
void setTextEntryCallback( commit_callback_t cb ) { mTextEntryCallback = cb; }
void setTextChangedCallback( commit_callback_t cb ) { mTextChangedCallback = cb; }
+ /**
+ * Connects callback to signal called when Return key is pressed.
+ */
+ boost::signals2::connection setReturnCallback( const commit_signal_t::slot_type& cb ) { return mOnReturnSignal.connect(cb); }
+
void setButtonVisible(BOOL visible);
void onButtonMouseDown();
@@ -231,6 +236,7 @@ private:
commit_callback_t mTextChangedCallback;
commit_callback_t mSelectionCallback;
boost::signals2::connection mTopLostSignalConnection;
+ commit_signal_t mOnReturnSignal;
S32 mLastSelectedIndex;
};
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index fdfaf284de..26ae31cac6 100755
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -52,7 +52,6 @@ extern void AddNewDebugConsoleToLCD(const LLWString &newLine);
LLConsole* gConsole = NULL; // Created and destroyed in LLViewerWindow.
const F32 FADE_DURATION = 2.f;
-const S32 MIN_CONSOLE_WIDTH = 200;
static LLDefaultChildRegistry::Register<LLConsole> r("console");
diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp
index 7c6559eddb..48bf5bb80f 100755
--- a/indra/llui/lldraghandle.cpp
+++ b/indra/llui/lldraghandle.cpp
@@ -46,7 +46,6 @@ const S32 LEADING_PAD = 5;
const S32 TITLE_HPAD = 8;
const S32 BORDER_PAD = 1;
const S32 LEFT_PAD = BORDER_PAD + TITLE_HPAD + LEADING_PAD;
-const S32 RIGHT_PAD = BORDER_PAD + 32; // HACK: space for close btn and minimize btn
S32 LLDragHandle::sSnapMargin = 5;
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index 3dbc9a5902..14f75a2352 100755
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -1954,7 +1954,7 @@ void LLFloater::drawShadow(LLPanel* panel)
}
gl_drop_shadow(left, top, right, bottom,
shadow_color % getCurrentTransparency(),
- llround(shadow_offset));
+ ll_round(shadow_offset));
}
void LLFloater::updateTransparency(LLView* view, ETypeTransparency transparency_type)
@@ -2082,16 +2082,16 @@ void LLFloater::updateTitleButtons()
btn_rect.setLeftTopAndSize(
LLPANEL_BORDER_WIDTH,
getRect().getHeight() - close_box_from_top - (floater_close_box_size + 1) * button_count,
- llround((F32)floater_close_box_size * mButtonScale),
- llround((F32)floater_close_box_size * mButtonScale));
+ ll_round((F32)floater_close_box_size * mButtonScale),
+ ll_round((F32)floater_close_box_size * mButtonScale));
}
else
{
btn_rect.setLeftTopAndSize(
getRect().getWidth() - LLPANEL_BORDER_WIDTH - (floater_close_box_size + 1) * button_count,
getRect().getHeight() - close_box_from_top,
- llround((F32)floater_close_box_size * mButtonScale),
- llround((F32)floater_close_box_size * mButtonScale));
+ ll_round((F32)floater_close_box_size * mButtonScale),
+ ll_round((F32)floater_close_box_size * mButtonScale));
}
// first time here, init 'buttons_rect'
@@ -2142,16 +2142,16 @@ void LLFloater::buildButtons(const Params& floater_params)
btn_rect.setLeftTopAndSize(
LLPANEL_BORDER_WIDTH,
getRect().getHeight() - close_box_from_top - (floater_close_box_size + 1) * (i + 1),
- llround(floater_close_box_size * mButtonScale),
- llround(floater_close_box_size * mButtonScale));
+ ll_round(floater_close_box_size * mButtonScale),
+ ll_round(floater_close_box_size * mButtonScale));
}
else
{
btn_rect.setLeftTopAndSize(
getRect().getWidth() - LLPANEL_BORDER_WIDTH - (floater_close_box_size + 1) * (i + 1),
getRect().getHeight() - close_box_from_top,
- llround(floater_close_box_size * mButtonScale),
- llround(floater_close_box_size * mButtonScale));
+ ll_round(floater_close_box_size * mButtonScale),
+ ll_round(floater_close_box_size * mButtonScale));
}
LLButton::Params p;
@@ -3466,28 +3466,28 @@ LLCoordCommon LL_COORD_FLOATER::convertToCommon() const
LLCoordCommon out;
if (self.mX < -0.5f)
{
- out.mX = llround(rescale(self.mX, -1.f, -0.5f, snap_rect.mLeft - (floater_width - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mLeft));
+ out.mX = ll_round(rescale(self.mX, -1.f, -0.5f, snap_rect.mLeft - (floater_width - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mLeft));
}
else if (self.mX > 0.5f)
{
- out.mX = llround(rescale(self.mX, 0.5f, 1.f, snap_rect.mRight - floater_width, snap_rect.mRight - FLOATER_MIN_VISIBLE_PIXELS));
+ out.mX = ll_round(rescale(self.mX, 0.5f, 1.f, snap_rect.mRight - floater_width, snap_rect.mRight - FLOATER_MIN_VISIBLE_PIXELS));
}
else
{
- out.mX = llround(rescale(self.mX, -0.5f, 0.5f, snap_rect.mLeft, snap_rect.mRight - floater_width));
+ out.mX = ll_round(rescale(self.mX, -0.5f, 0.5f, snap_rect.mLeft, snap_rect.mRight - floater_width));
}
if (self.mY < -0.5f)
{
- out.mY = llround(rescale(self.mY, -1.f, -0.5f, snap_rect.mBottom - (floater_height - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mBottom));
+ out.mY = ll_round(rescale(self.mY, -1.f, -0.5f, snap_rect.mBottom - (floater_height - FLOATER_MIN_VISIBLE_PIXELS), snap_rect.mBottom));
}
else if (self.mY > 0.5f)
{
- out.mY = llround(rescale(self.mY, 0.5f, 1.f, snap_rect.mTop - floater_height, snap_rect.mTop - FLOATER_MIN_VISIBLE_PIXELS));
+ out.mY = ll_round(rescale(self.mY, 0.5f, 1.f, snap_rect.mTop - floater_height, snap_rect.mTop - FLOATER_MIN_VISIBLE_PIXELS));
}
else
{
- out.mY = llround(rescale(self.mY, -0.5f, 0.5f, snap_rect.mBottom, snap_rect.mTop - floater_height));
+ out.mY = ll_round(rescale(self.mY, -0.5f, 0.5f, snap_rect.mBottom, snap_rect.mTop - floater_height));
}
// return center point instead of lower left
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index 1c7326260c..afd2a8ce06 100755
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -92,7 +92,7 @@ public:
void setKeystrokesOnly(BOOL keystrokes_only) { mKeystrokesOnly = keystrokes_only; }
F32 getFocusFlashAmt() const;
- S32 getFocusFlashWidth() const { return llround(lerp(1.f, 3.f, getFocusFlashAmt())); }
+ S32 getFocusFlashWidth() const { return ll_round(lerp(1.f, 3.f, getFocusFlashAmt())); }
LLColor4 getFocusColor() const;
void triggerFocusFlash();
BOOL getAppHasFocus() const { return mAppHasFocus; }
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index 474b545f00..f60129e601 100755
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -53,7 +53,6 @@
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
-const S32 RENAME_WIDTH_PAD = 4;
const S32 RENAME_HEIGHT_PAD = 1;
const S32 AUTO_OPEN_STACK_DEPTH = 16;
@@ -307,18 +306,18 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height )
LLFolderViewFolder::arrange(&mMinWidth, &target_height);
LLRect scroll_rect = (mScrollContainer ? mScrollContainer->getContentWindowRect() : LLRect());
- reshape( llmax(scroll_rect.getWidth(), mMinWidth), llround(mCurHeight) );
+ reshape( llmax(scroll_rect.getWidth(), mMinWidth), ll_round(mCurHeight) );
LLRect new_scroll_rect = (mScrollContainer ? mScrollContainer->getContentWindowRect() : LLRect());
if (new_scroll_rect.getWidth() != scroll_rect.getWidth())
{
- reshape( llmax(scroll_rect.getWidth(), mMinWidth), llround(mCurHeight) );
+ reshape( llmax(scroll_rect.getWidth(), mMinWidth), ll_round(mCurHeight) );
}
// move item renamer text field to item's new position
updateRenamerPosition();
- return llround(mTargetHeight);
+ return ll_round(mTargetHeight);
}
static LLTrace::BlockTimerStatHandle FTM_FILTER("Filter Folder View");
@@ -341,7 +340,7 @@ void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent)
scroll_rect = mScrollContainer->getContentWindowRect();
}
width = llmax(mMinWidth, scroll_rect.getWidth());
- height = llmax(llround(mCurHeight), scroll_rect.getHeight());
+ height = llmax(ll_round(mCurHeight), scroll_rect.getHeight());
// Restrict width within scroll container's width
if (mUseEllipses && mScrollContainer)
@@ -1611,7 +1610,7 @@ void LLFolderView::update()
LLFolderViewFilter& filter_object = getFolderViewModel()->getFilter();
- if (filter_object.isModified() && filter_object.isNotDefault())
+ if (filter_object.isModified() && filter_object.isNotDefault() && mParentPanel.get()->getVisible())
{
mNeedsAutoSelect = TRUE;
}
@@ -1653,8 +1652,10 @@ void LLFolderView::update()
scrollToShowSelection();
}
- BOOL filter_finished = getViewModelItem()->passedFilter()
- && mViewModel->contentsReady();
+ BOOL filter_finished = mViewModel->contentsReady()
+ && (getViewModelItem()->passedFilter()
+ || ( getViewModelItem()->getLastFilterGeneration() >= filter_object.getFirstSuccessGeneration()
+ && !filter_object.isModified()));
if (filter_finished
|| gFocusMgr.childHasKeyboardFocus(mParentPanel.get())
|| gFocusMgr.childHasMouseCapture(mParentPanel.get()))
diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp
index 6dd6f94d02..747b472ac2 100644
--- a/indra/llui/llfolderviewitem.cpp
+++ b/indra/llui/llfolderviewitem.cpp
@@ -861,7 +861,7 @@ void LLFolderViewItem::draw()
if (filter_string_length > 0)
{
- S32 left = llround(text_left) + font->getWidth(combined_string, 0, mViewModelItem->getFilterStringOffset()) - 2;
+ S32 left = ll_round(text_left) + font->getWidth(combined_string, 0, mViewModelItem->getFilterStringOffset()) - 2;
S32 right = left + font->getWidth(combined_string, mViewModelItem->getFilterStringOffset(), filter_string_length) + 2;
S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);
S32 top = getRect().getHeight() - TOP_PAD;
@@ -1045,7 +1045,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )
{
S32 child_width = *width;
S32 child_height = 0;
- S32 child_top = parent_item_height - llround(running_height);
+ S32 child_top = parent_item_height - ll_round(running_height);
target_height += folderp->arrange( &child_width, &child_height );
@@ -1064,7 +1064,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )
{
S32 child_width = *width;
S32 child_height = 0;
- S32 child_top = parent_item_height - llround(running_height);
+ S32 child_top = parent_item_height - ll_round(running_height);
target_height += itemp->arrange( &child_width, &child_height );
// don't change width, as this item is as wide as its parent folder by construction
@@ -1101,7 +1101,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )
folders_t::iterator fit = iter++;
// number of pixels that bottom of folder label is from top of parent folder
if (getRect().getHeight() - (*fit)->getRect().mTop + (*fit)->getItemHeight()
- > llround(mCurHeight) + mMaxFolderItemOverlap)
+ > ll_round(mCurHeight) + mMaxFolderItemOverlap)
{
// hide if beyond current folder height
(*fit)->setVisible(FALSE);
@@ -1114,7 +1114,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )
items_t::iterator iit = iter++;
// number of pixels that bottom of item label is from top of parent folder
if (getRect().getHeight() - (*iit)->getRect().mBottom
- > llround(mCurHeight) + mMaxFolderItemOverlap)
+ > ll_round(mCurHeight) + mMaxFolderItemOverlap)
{
(*iit)->setVisible(FALSE);
}
@@ -1126,12 +1126,12 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height )
}
// don't change width as this item is already as wide as its parent folder
- reshape(getRect().getWidth(),llround(mCurHeight));
+ reshape(getRect().getWidth(),ll_round(mCurHeight));
// pass current height value back to parent
- *height = llround(mCurHeight);
+ *height = ll_round(mCurHeight);
- return llround(mTargetHeight);
+ return ll_round(mTargetHeight);
}
BOOL LLFolderViewFolder::needsArrange()
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
index c59286fc60..69246a2f57 100755
--- a/indra/llui/lllayoutstack.cpp
+++ b/indra/llui/lllayoutstack.cpp
@@ -103,7 +103,7 @@ F32 LLLayoutPanel::getVisibleAmount() const
S32 LLLayoutPanel::getLayoutDim() const
{
- return llround((F32)((mOrientation == LLLayoutStack::HORIZONTAL)
+ return ll_round((F32)((mOrientation == LLLayoutStack::HORIZONTAL)
? getRect().getWidth()
: getRect().getHeight()));
}
@@ -130,7 +130,7 @@ void LLLayoutPanel::setTargetDim(S32 value)
S32 LLLayoutPanel::getVisibleDim() const
{
F32 min_dim = getRelevantMinDim();
- return llround(mVisibleAmt
+ return ll_round(mVisibleAmt
* (min_dim
+ (((F32)mTargetDim - min_dim) * (1.f - mCollapseAmt))));
}
@@ -138,7 +138,7 @@ S32 LLLayoutPanel::getVisibleDim() const
void LLLayoutPanel::setOrientation( LLView::EOrientation orientation )
{
mOrientation = orientation;
- S32 layout_dim = llround((F32)((mOrientation == LLLayoutStack::HORIZONTAL)
+ S32 layout_dim = ll_round((F32)((mOrientation == LLLayoutStack::HORIZONTAL)
? getRect().getWidth()
: getRect().getHeight()));
@@ -381,14 +381,14 @@ void LLLayoutStack::updateLayout()
{
panelp->mTargetDim = panelp->getRelevantMinDim();
}
- space_to_distribute -= panelp->getVisibleDim() + llround((F32)mPanelSpacing * panelp->getVisibleAmount());
+ space_to_distribute -= panelp->getVisibleDim() + ll_round((F32)mPanelSpacing * panelp->getVisibleAmount());
total_visible_fraction += panelp->mFractionalSize * panelp->getAutoResizeFactor();
}
llassert(total_visible_fraction < 1.05f);
// don't need spacing after last panel
- space_to_distribute += panelp ? llround((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0;
+ space_to_distribute += panelp ? ll_round((F32)mPanelSpacing * panelp->getVisibleAmount()) : 0;
S32 remaining_space = space_to_distribute;
F32 fraction_distributed = 0.f;
@@ -399,7 +399,7 @@ void LLLayoutStack::updateLayout()
if (panelp->mAutoResize)
{
F32 fraction_to_distribute = (panelp->mFractionalSize * panelp->getAutoResizeFactor()) / (total_visible_fraction);
- S32 delta = llround((F32)space_to_distribute * fraction_to_distribute);
+ S32 delta = ll_round((F32)space_to_distribute * fraction_to_distribute);
fraction_distributed += fraction_to_distribute;
panelp->mTargetDim += delta;
remaining_space -= delta;
@@ -431,23 +431,23 @@ void LLLayoutStack::updateLayout()
LLRect panel_rect;
if (mOrientation == HORIZONTAL)
{
- panel_rect.setLeftTopAndSize(llround(cur_pos),
+ panel_rect.setLeftTopAndSize(ll_round(cur_pos),
getRect().getHeight(),
- llround(panel_dim),
+ ll_round(panel_dim),
getRect().getHeight());
}
else
{
panel_rect.setLeftTopAndSize(0,
- llround(cur_pos),
+ ll_round(cur_pos),
getRect().getWidth(),
- llround(panel_dim));
+ ll_round(panel_dim));
}
LLRect resize_bar_rect(panel_rect);
F32 panel_spacing = (F32)mPanelSpacing * panelp->getVisibleAmount();
F32 panel_visible_dim = panelp->getVisibleDim();
- S32 panel_spacing_round = (S32)(llround(panel_spacing));
+ S32 panel_spacing_round = (S32)(ll_round(panel_spacing));
if (mOrientation == HORIZONTAL)
{
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 45f4272aa7..a08cf91a69 100755
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -88,6 +88,7 @@ LLLineEditor::Params::Params()
background_image("background_image"),
background_image_disabled("background_image_disabled"),
background_image_focused("background_image_focused"),
+ bg_image_always_focused("bg_image_always_focused", false),
select_on_focus("select_on_focus", false),
revert_on_esc("revert_on_esc", true),
spellcheck("spellcheck", false),
@@ -147,6 +148,7 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p)
mBgImage( p.background_image ),
mBgImageDisabled( p.background_image_disabled ),
mBgImageFocused( p.background_image_focused ),
+ mShowImageFocused( p.bg_image_always_focused ),
mHaveHistory(FALSE),
mReplaceNewlinesWithSpaces( TRUE ),
mLabel(p.label),
@@ -829,7 +831,7 @@ BOOL LLLineEditor::handleHover(S32 x, S32 y, MASK mask)
// Scroll if mouse cursor outside of bounds
if (mScrollTimer.hasExpired())
{
- S32 increment = llround(mScrollTimer.getElapsedTimeF32() / AUTO_SCROLL_TIME);
+ S32 increment = ll_round(mScrollTimer.getElapsedTimeF32() / AUTO_SCROLL_TIME);
mScrollTimer.reset();
mScrollTimer.setTimerExpirySec(AUTO_SCROLL_TIME);
if( (x < mTextLeftEdge) && (mScrollHPos > 0 ) )
@@ -1675,7 +1677,7 @@ void LLLineEditor::drawBackground()
{
image = mBgImageDisabled;
}
- else if ( has_focus )
+ else if ( has_focus || mShowImageFocused)
{
image = mBgImageFocused;
}
@@ -1833,7 +1835,7 @@ void LLLineEditor::draw()
0,
LLFontGL::NO_SHADOW,
select_left - mScrollHPos,
- mTextRightEdge - llround(rendered_pixels_right),
+ mTextRightEdge - ll_round(rendered_pixels_right),
&rendered_pixels_right);
}
@@ -1843,8 +1845,8 @@ void LLLineEditor::draw()
color.setAlpha(alpha);
// selected middle
S32 width = mGLFont->getWidth(mText.getWString().c_str(), mScrollHPos + rendered_text, select_right - mScrollHPos - rendered_text);
- width = llmin(width, mTextRightEdge - llround(rendered_pixels_right));
- gl_rect_2d(llround(rendered_pixels_right), cursor_top, llround(rendered_pixels_right)+width, cursor_bottom, color);
+ width = llmin(width, mTextRightEdge - ll_round(rendered_pixels_right));
+ gl_rect_2d(ll_round(rendered_pixels_right), cursor_top, ll_round(rendered_pixels_right)+width, cursor_bottom, color);
LLColor4 tmp_color( 1.f - text_color.mV[0], 1.f - text_color.mV[1], 1.f - text_color.mV[2], alpha );
rendered_text += mGLFont->render(
@@ -1855,7 +1857,7 @@ void LLLineEditor::draw()
0,
LLFontGL::NO_SHADOW,
select_right - mScrollHPos - rendered_text,
- mTextRightEdge - llround(rendered_pixels_right),
+ mTextRightEdge - ll_round(rendered_pixels_right),
&rendered_pixels_right);
}
@@ -1870,7 +1872,7 @@ void LLLineEditor::draw()
0,
LLFontGL::NO_SHADOW,
S32_MAX,
- mTextRightEdge - llround(rendered_pixels_right),
+ mTextRightEdge - ll_round(rendered_pixels_right),
&rendered_pixels_right);
}
}
@@ -1884,7 +1886,7 @@ void LLLineEditor::draw()
0,
LLFontGL::NO_SHADOW,
S32_MAX,
- mTextRightEdge - llround(rendered_pixels_right),
+ mTextRightEdge - ll_round(rendered_pixels_right),
&rendered_pixels_right);
}
#if 1 // for when we're ready for image art.
@@ -2044,7 +2046,7 @@ void LLLineEditor::draw()
0,
LLFontGL::NO_SHADOW,
S32_MAX,
- mTextRightEdge - llround(rendered_pixels_right),
+ mTextRightEdge - ll_round(rendered_pixels_right),
&rendered_pixels_right, FALSE);
}
@@ -2069,7 +2071,7 @@ void LLLineEditor::draw()
0,
LLFontGL::NO_SHADOW,
S32_MAX,
- mTextRightEdge - llround(rendered_pixels_right),
+ mTextRightEdge - ll_round(rendered_pixels_right),
&rendered_pixels_right, FALSE);
}
// Draw children (border)
@@ -2573,7 +2575,7 @@ void LLLineEditor::markAsPreedit(S32 position, S32 length)
S32 LLLineEditor::getPreeditFontSize() const
{
- return llround(mGLFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]);
+ return ll_round(mGLFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]);
}
void LLLineEditor::setReplaceNewlinesWithSpaces(BOOL replace)
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 40f931ecc1..c6d472f59b 100755
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -90,6 +90,7 @@ public:
spellcheck,
commit_on_focus_lost,
ignore_tab,
+ bg_image_always_focused,
is_password;
// colors
@@ -375,6 +376,8 @@ protected:
BOOL mReadOnly;
+ BOOL mShowImageFocused;
+
LLWString mPreeditWString;
LLWString mPreeditOverwrittenWString;
std::vector<S32> mPreeditPositions;
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index d3ed4a1286..7cdbcb0621 100755
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -60,6 +60,7 @@
#include "v2math.h"
#include <set>
#include <boost/tokenizer.hpp>
+#include <boost/foreach.hpp>
// static
LLMenuHolderGL *LLMenuGL::sMenuContainer = NULL;
@@ -100,17 +101,10 @@ const std::string LLMenuGL::ARROW_DOWN("vvvvvvv");
const F32 MAX_MOUSE_SLOPE_SUB_MENU = 0.9f;
-const S32 PIE_GESTURE_ACTIVATE_DISTANCE = 10;
-
BOOL LLMenuGL::sKeyboardMode = FALSE;
LLHandle<LLView> LLMenuHolderGL::sItemLastSelectedHandle;
LLFrameTimer LLMenuHolderGL::sItemActivationTimer;
-//LLColor4 LLMenuGL::sBackgroundColor( 0.8f, 0.8f, 0.0f, 1.0f );
-
-const S32 PIE_CENTER_SIZE = 20; // pixels, radius of center hole
-const F32 PIE_SCALE_FACTOR = 1.7f; // scale factor for pie menu when mouse is initially down
-const F32 PIE_SHRINK_TIME = 0.2f; // time of transition between unbounded and bounded display of pie menu
const F32 ACTIVATE_HIGHLIGHT_TIME = 0.3f;
@@ -1588,7 +1582,7 @@ void LLMenuItemBranchDownGL::draw( void )
std::string::size_type offset = upper_case_label.find(getJumpKey());
if (offset != std::string::npos)
{
- S32 x_offset = llround((F32)getRect().getWidth() / 2.f - getFont()->getWidthF32(mLabel.getString(), 0, S32_MAX) / 2.f);
+ S32 x_offset = ll_round((F32)getRect().getWidth() / 2.f - getFont()->getWidthF32(mLabel.getString(), 0, S32_MAX) / 2.f);
S32 x_begin = x_offset + getFont()->getWidth(mLabel, 0, offset);
S32 x_end = x_offset + getFont()->getWidth(mLabel, 0, offset + 1);
gl_line_2d(x_begin, LABEL_BOTTOM_PAD_PIXELS, x_end, LABEL_BOTTOM_PAD_PIXELS);
@@ -2038,15 +2032,7 @@ void LLMenuGL::arrange( void )
// torn off menus are not constrained to the size of the screen
U32 max_width = getTornOff() ? U32_MAX : menu_region_rect.getWidth();
- U32 max_height = U32_MAX;
- if (!getTornOff())
- {
- max_height = getRect().mTop - menu_region_rect.mBottom;
- if (menu_region_rect.mTop - getRect().mTop > (S32)max_height)
- {
- max_height = menu_region_rect.mTop - getRect().mTop;
- }
- }
+ U32 max_height = getTornOff() ? U32_MAX: menu_region_rect.getHeight();
// *FIX: create the item first and then ask for its dimensions?
S32 spillover_item_width = PLAIN_PAD_PIXELS + LLFontGL::getFontSansSerif()->getWidth( std::string("More") ); // *TODO: Translate
@@ -2104,13 +2090,15 @@ void LLMenuGL::arrange( void )
}
else
{
+ BOOST_FOREACH(LLMenuItemGL* itemp, mItems)
+ {
+ // do first so LLMenuGLItemCall can call on_visible to determine if visible
+ itemp->buildDrawLabel();
+ }
item_list_t::iterator item_iter;
for (item_iter = mItems.begin(); item_iter != mItems.end(); ++item_iter)
{
- // do first so LLMenuGLItemCall can call on_visible to determine if visible
- (*item_iter)->buildDrawLabel();
-
if ((*item_iter)->getVisible())
{
if (!getTornOff()
@@ -2118,34 +2106,43 @@ void LLMenuGL::arrange( void )
&& *item_iter != mSpilloverBranch
&& height + (*item_iter)->getNominalHeight() > max_height - spillover_item_height)
{
- // no room for any more items
- createSpilloverBranch();
-
- std::vector<LLMenuItemGL*> items_to_remove;
- std::copy(item_iter, mItems.end(), std::back_inserter(items_to_remove));
- std::vector<LLMenuItemGL*>::iterator spillover_iter;
- for (spillover_iter= items_to_remove.begin(); spillover_iter != items_to_remove.end(); ++spillover_iter)
+ // don't show only one item
+ int visible_items = 0;
+ item_list_t::iterator count_iter;
+ for (count_iter = item_iter; count_iter != mItems.end(); ++count_iter)
{
- LLMenuItemGL* itemp = (*spillover_iter);
- removeChild(itemp);
- mSpilloverMenu->addChild(itemp);
+ if((*count_iter)->getVisible())
+ visible_items++;
}
+ if (visible_items>1)
+ {
+ // no room for any more items
+ createSpilloverBranch();
+ std::vector<LLMenuItemGL*> items_to_remove;
+ std::copy(item_iter, mItems.end(), std::back_inserter(items_to_remove));
+ std::vector<LLMenuItemGL*>::iterator spillover_iter;
+ for (spillover_iter= items_to_remove.begin(); spillover_iter != items_to_remove.end(); ++spillover_iter)
+ {
+ LLMenuItemGL* itemp = (*spillover_iter);
+ removeChild(itemp);
+ mSpilloverMenu->addChild(itemp);
+ }
- addChild(mSpilloverBranch);
- height += mSpilloverBranch->getNominalHeight();
- width = llmax( width, mSpilloverBranch->getNominalWidth() );
+ addChild(mSpilloverBranch);
- break;
- }
- else
- {
- // track our rect
- height += (*item_iter)->getNominalHeight();
- width = llmax( width, (*item_iter)->getNominalWidth() );
+ height += mSpilloverBranch->getNominalHeight();
+ width = llmax( width, mSpilloverBranch->getNominalWidth() );
+
+ break;
+ }
}
+ // track our rect
+ height += (*item_iter)->getNominalHeight();
+ width = llmax( width, (*item_iter)->getNominalWidth() );
+
if (mScrollable)
{
// Determining visible items boundaries
@@ -2369,7 +2366,9 @@ void LLMenuGL::createSpilloverBranch()
branch_params.label = label;
branch_params.branch = mSpilloverMenu;
branch_params.font.style = "italic";
-
+ branch_params.highlight_bg_color=LLUIColorTable::instance().getColor("MenuItemHighlightBgColor");
+ branch_params.highlight_fg_color=LLUIColorTable::instance().getColor("MenuItemHighlightFgColor");
+ branch_params.enabled_color=LLUIColorTable::instance().getColor("MenuItemEnabledColor");
mSpilloverBranch = LLUICtrlFactory::create<LLMenuItemBranchGL>(branch_params);
}
@@ -3020,8 +3019,8 @@ BOOL LLMenuGL::handleHover( S32 x, S32 y, MASK mask )
LLVector2 mouse_avg_dir((F32)mMouseVelX, (F32)mMouseVelY);
mouse_avg_dir.normVec();
F32 interp = 0.5f * (llclamp(mouse_dir * mouse_avg_dir, 0.f, 1.f));
- mMouseVelX = llround(lerp((F32)mouse_delta_x, (F32)mMouseVelX, interp));
- mMouseVelY = llround(lerp((F32)mouse_delta_y, (F32)mMouseVelY, interp));
+ mMouseVelX = ll_round(lerp((F32)mouse_delta_x, (F32)mMouseVelX, interp));
+ mMouseVelY = ll_round(lerp((F32)mouse_delta_y, (F32)mMouseVelY, interp));
mLastMouseX = x;
mLastMouseY = y;
@@ -3690,7 +3689,7 @@ BOOL LLMenuHolderGL::handleKey(KEY key, MASK mask, BOOL called_from_parent)
{
handled = pMenu->handleKey(key, mask, TRUE);
}
- else
+ else if (mask == MASK_NONE || (key >= KEY_LEFT && key <= KEY_DOWN))
{
//highlight first enabled one
if(pMenu->highlightNextItem(NULL))
diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp
index 33e66add18..8cf88ad5eb 100755
--- a/indra/llui/llmodaldialog.cpp
+++ b/indra/llui/llmodaldialog.cpp
@@ -287,7 +287,7 @@ void LLModalDialog::draw()
void LLModalDialog::centerOnScreen()
{
LLVector2 window_size = LLUI::getWindowSize();
- centerWithin(LLRect(0, 0, llround(window_size.mV[VX]), llround(window_size.mV[VY])));
+ centerWithin(LLRect(0, 0, ll_round(window_size.mV[VX]), ll_round(window_size.mV[VY])));
}
diff --git a/indra/llui/llprogressbar.cpp b/indra/llui/llprogressbar.cpp
index 84a890edfa..209796565c 100755
--- a/indra/llui/llprogressbar.cpp
+++ b/indra/llui/llprogressbar.cpp
@@ -77,7 +77,7 @@ void LLProgressBar::draw()
LLColor4 bar_color = mColorBar.get();
bar_color.mV[VALPHA] *= alpha; // modulate alpha
LLRect progress_rect = getLocalRect();
- progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f));
+ progress_rect.mRight = ll_round(getRect().getWidth() * (mPercentDone / 100.f));
mImageFill->draw(progress_rect, bar_color);
}
diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp
index cd9fe3610e..e4a31d6a79 100755
--- a/indra/llui/llrngwriter.cpp
+++ b/indra/llui/llrngwriter.cpp
@@ -28,7 +28,16 @@
#include "llrngwriter.h"
#include "lluicolor.h"
+
+#if LL_DARWIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdelete-incomplete"
+#include "lluictrlfactory.h"
+#pragma clang diagnostic pop
+#else
#include "lluictrlfactory.h"
+#endif
+
#include "boost/bind.hpp"
static LLInitParam::Parser::parser_read_func_map_t sReadFuncs;
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
index 8c506d76bb..f70eebc594 100755
--- a/indra/llui/llscrollcontainer.cpp
+++ b/indra/llui/llscrollcontainer.cpp
@@ -48,7 +48,6 @@
/// Local function declarations, constants, enums, and typedefs
///----------------------------------------------------------------------------
-static const S32 HORIZONTAL_MULTIPLE = 8;
static const S32 VERTICAL_MULTIPLE = 16;
static const F32 AUTO_SCROLL_RATE_ACCEL = 120.f;
@@ -315,7 +314,7 @@ bool LLScrollContainer::autoScroll(S32 x, S32 y)
// clip rect against root view
inner_rect_local.intersectWith(screen_local_extents);
- S32 auto_scroll_speed = llround(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32());
+ S32 auto_scroll_speed = ll_round(mAutoScrollRate * LLFrameTimer::getFrameDeltaTimeF32());
// autoscroll region should take up no more than one third of visible scroller area
S32 auto_scroll_region_width = llmin(inner_rect_local.getWidth() / 3, 10);
S32 auto_scroll_region_height = llmin(inner_rect_local.getHeight() / 3, 10);
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index 5f72ee3ac6..db8fdc46b7 100755
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -648,7 +648,7 @@ bool LLScrollListCtrl::updateColumnWidths()
S32 new_width = 0;
if (column->mRelWidth >= 0)
{
- new_width = (S32)llround(column->mRelWidth*mItemListRect.getWidth());
+ new_width = (S32)ll_round(column->mRelWidth*mItemListRect.getWidth());
}
else if (column->mDynamicWidth)
{
@@ -1825,6 +1825,7 @@ BOOL LLScrollListCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
return TRUE;
}
}
+ return LLUICtrl::handleRightMouseDown(x, y, mask);
}
return FALSE;
}
@@ -2095,9 +2096,6 @@ BOOL LLScrollListCtrl::handleKeyHere(KEY key,MASK mask )
// not called from parent means we have keyboard focus or a child does
if (mCanSelect)
{
- // Ignore capslock
- mask = mask;
-
if (mask == MASK_NONE)
{
switch(key)
@@ -2682,7 +2680,7 @@ void LLScrollListCtrl::addColumn(const LLScrollListColumn::Params& column_params
}
if (new_column->mRelWidth >= 0)
{
- new_column->setWidth((S32)llround(new_column->mRelWidth*mItemListRect.getWidth()));
+ new_column->setWidth((S32)ll_round(new_column->mRelWidth*mItemListRect.getWidth()));
}
else if(new_column->mDynamicWidth)
{
diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp
index 62c5ecb8f1..0056cb6dc4 100755
--- a/indra/llui/llsliderctrl.cpp
+++ b/indra/llui/llsliderctrl.cpp
@@ -43,8 +43,6 @@
#include "llresmgr.h"
#include "lluictrlfactory.h"
-const U32 MAX_STRING_LENGTH = 10;
-
static LLDefaultChildRegistry::Register<LLSliderCtrl> r("slider");
LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p)
@@ -58,7 +56,8 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p)
mPrecision(p.decimal_digits),
mTextEnabledColor(p.text_color()),
mTextDisabledColor(p.text_disabled_color()),
- mLabelWidth(p.label_width)
+ mLabelWidth(p.label_width),
+ mEditorCommitSignal(NULL)
{
S32 top = getRect().getHeight();
S32 bottom = 0;
@@ -196,6 +195,11 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p)
updateText();
}
+LLSliderCtrl::~LLSliderCtrl()
+{
+ delete mEditorCommitSignal;
+}
+
// static
void LLSliderCtrl::onEditorGainFocus( LLFocusableElement* caller, void *userdata )
{
@@ -308,6 +312,8 @@ void LLSliderCtrl::onEditorCommit( LLUICtrl* ctrl, const LLSD& userdata )
if( success )
{
self->onCommit();
+ if (self->mEditorCommitSignal)
+ (*(self->mEditorCommitSignal))(self, self->getValueF32());
}
else
{
@@ -421,6 +427,11 @@ boost::signals2::connection LLSliderCtrl::setSliderMouseUpCallback( const commit
return mSlider->setMouseUpCallback( cb );
}
+boost::signals2::connection LLSliderCtrl::setSliderEditorCommitCallback( const commit_signal_t::slot_type& cb )
+{
+ if (!mEditorCommitSignal) mEditorCommitSignal = new commit_signal_t();
+ return mEditorCommitSignal->connect(cb);
+}
void LLSliderCtrl::onTabInto()
{
if( mEditor )
diff --git a/indra/llui/llsliderctrl.h b/indra/llui/llsliderctrl.h
index 5153e33f49..67cca9ef04 100755
--- a/indra/llui/llsliderctrl.h
+++ b/indra/llui/llsliderctrl.h
@@ -81,7 +81,7 @@ protected:
LLSliderCtrl(const Params&);
friend class LLUICtrlFactory;
public:
- virtual ~LLSliderCtrl() {} // Children all cleaned up by default view destructor.
+ virtual ~LLSliderCtrl();
/*virtual*/ F32 getValueF32() const { return mSlider->getValueF32(); }
void setValue(F32 v, BOOL from_event = FALSE);
@@ -112,6 +112,7 @@ public:
boost::signals2::connection setSliderMouseDownCallback( const commit_signal_t::slot_type& cb );
boost::signals2::connection setSliderMouseUpCallback( const commit_signal_t::slot_type& cb );
+ boost::signals2::connection setSliderEditorCommitCallback( const commit_signal_t::slot_type& cb );
/*virtual*/ void onTabInto();
@@ -150,6 +151,8 @@ private:
LLUIColor mTextEnabledColor;
LLUIColor mTextDisabledColor;
+
+ commit_signal_t* mEditorCommitSignal;
};
#endif // LL_LLSLIDERCTRL_H
diff --git a/indra/llui/llspellcheck.cpp b/indra/llui/llspellcheck.cpp
index 250372da5b..0db4281059 100755
--- a/indra/llui/llspellcheck.cpp
+++ b/indra/llui/llspellcheck.cpp
@@ -144,12 +144,14 @@ void LLSpellChecker::refreshDictionaryMap()
const std::string user_path = getDictionaryUserPath();
// Load dictionary information (file name, friendly name, ...)
- llifstream user_file(user_path + DICT_FILE_MAIN, std::ios::binary);
+ std::string user_filename(user_path + DICT_FILE_MAIN);
+ llifstream user_file(user_filename.c_str(), std::ios::binary);
if ( (!user_file.is_open())
|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, user_file))
|| (0 == sDictMap.size()) )
{
- llifstream app_file(app_path + DICT_FILE_MAIN, std::ios::binary);
+ std::string app_filename(app_path + DICT_FILE_MAIN);
+ llifstream app_file(app_filename.c_str(), std::ios::binary);
if ( (!app_file.is_open())
|| (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXMLDocument(sDictMap, app_file))
|| (0 == sDictMap.size()) )
@@ -159,7 +161,7 @@ void LLSpellChecker::refreshDictionaryMap()
}
// Load user installed dictionary information
- llifstream custom_file(user_path + DICT_FILE_USER, std::ios::binary);
+ llifstream custom_file(user_filename.c_str(), std::ios::binary);
if (custom_file.is_open())
{
LLSD custom_dict_map;
@@ -215,7 +217,7 @@ void LLSpellChecker::addToDictFile(const std::string& dict_path, const std::stri
if (gDirUtilp->fileExists(dict_path))
{
- llifstream file_in(dict_path, std::ios::in);
+ llifstream file_in(dict_path.c_str(), std::ios::in);
if (file_in.is_open())
{
std::string word; int line_num = 0;
@@ -238,7 +240,7 @@ void LLSpellChecker::addToDictFile(const std::string& dict_path, const std::stri
word_list.push_back(word);
- llofstream file_out(dict_path, std::ios::out | std::ios::trunc);
+ llofstream file_out(dict_path.c_str(), std::ios::out | std::ios::trunc);
if (file_out.is_open())
{
file_out << word_list.size() << std::endl;
@@ -352,7 +354,7 @@ void LLSpellChecker::initHunspell(const std::string& dict_language)
if (gDirUtilp->fileExists(user_path + DICT_FILE_IGNORE))
{
- llifstream file_in(user_path + DICT_FILE_IGNORE, std::ios::in);
+ llifstream file_in((user_path + DICT_FILE_IGNORE).c_str(), std::ios::in);
if (file_in.is_open())
{
std::string word; int idxLine = 0;
@@ -463,7 +465,8 @@ void LLSpellChecker::removeDictionary(const std::string& dict_language)
LLSD LLSpellChecker::loadUserDictionaryMap()
{
LLSD dict_map;
- llifstream dict_file(getDictionaryUserPath() + DICT_FILE_USER, std::ios::binary);
+ std::string dict_filename(getDictionaryUserPath() + DICT_FILE_USER);
+ llifstream dict_file(dict_filename.c_str(), std::ios::binary);
if (dict_file.is_open())
{
LLSDSerialize::fromXMLDocument(dict_map, dict_file);
@@ -475,7 +478,7 @@ LLSD LLSpellChecker::loadUserDictionaryMap()
// static
void LLSpellChecker::saveUserDictionaryMap(const LLSD& dict_map)
{
- llofstream dict_file(getDictionaryUserPath() + DICT_FILE_USER, std::ios::trunc);
+ llofstream dict_file((getDictionaryUserPath() + DICT_FILE_USER).c_str(), std::ios::trunc);
if (dict_file.is_open())
{
LLSDSerialize::toPrettyXML(dict_map, dict_file);
diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp
index ebdbdf59c0..8b1ba406c8 100755
--- a/indra/llui/llspinctrl.cpp
+++ b/indra/llui/llspinctrl.cpp
@@ -153,7 +153,7 @@ F32 clamp_precision(F32 value, S32 decimal_precision)
for (S32 i = 0; i < decimal_precision; i++)
clamped_value *= 10.0;
- clamped_value = llround((F32)clamped_value);
+ clamped_value = ll_round((F32)clamped_value);
for (S32 i = 0; i < decimal_precision; i++)
clamped_value /= 10.0;
diff --git a/indra/llui/llstatbar.cpp b/indra/llui/llstatbar.cpp
index 303417c337..35f5330a3f 100755
--- a/indra/llui/llstatbar.cpp
+++ b/indra/llui/llstatbar.cpp
@@ -711,7 +711,7 @@ void LLStatBar::drawTicks( F32 min, F32 max, F32 value_scale, LLRect &bar_rect )
if (tick_begin > last_label + MIN_LABEL_SPACING)
{
gl_rect_2d(tick_begin, bar_rect.mTop, tick_end, bar_rect.mBottom - TICK_LENGTH, LLColor4(1.f, 1.f, 1.f, 0.25f));
- S32 label_pos = tick_begin - llround((F32)tick_label_width * ((F32)tick_begin / (F32)bar_rect.getWidth()));
+ S32 label_pos = tick_begin - ll_round((F32)tick_label_width * ((F32)tick_begin / (F32)bar_rect.getWidth()));
LLFontGL::getFontMonospace()->renderUTF8(tick_label, 0, label_pos, bar_rect.mBottom - TICK_LENGTH,
LLColor4(1.f, 1.f, 1.f, 0.5f),
LLFontGL::LEFT, LLFontGL::TOP);
diff --git a/indra/llui/llstatbar.h b/indra/llui/llstatbar.h
index 89d7ff24ed..1ff4c67fc5 100755
--- a/indra/llui/llstatbar.h
+++ b/indra/llui/llstatbar.h
@@ -80,7 +80,6 @@ private:
mFloatingTargetMaxBar,
mCurMaxBar,
mCurMinBar,
- mLabelSpacing,
mTickSpacing;
S32 mDecimalDigits,
mNumHistoryFrames,
diff --git a/indra/llui/llstatgraph.cpp b/indra/llui/llstatgraph.cpp
index 98962aff9a..3fe314e77a 100755
--- a/indra/llui/llstatgraph.cpp
+++ b/indra/llui/llstatgraph.cpp
@@ -111,7 +111,7 @@ void LLStatGraph::draw()
color = it->mColor;
gGL.color4fv(color.mV);
- gl_rect_2d(1, llround(frac*getRect().getHeight()), getRect().getWidth() - 1, 0, TRUE);
+ gl_rect_2d(1, ll_round(frac*getRect().getHeight()), getRect().getWidth() - 1, 0, TRUE);
}
void LLStatGraph::setMin(const F32 min)
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 9b125a85b9..602a703450 100755
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1556,7 +1556,7 @@ void LLTextBase::reflow()
line_count));
line_start_index = segment->getStart() + seg_offset;
- cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
+ cur_top -= ll_round((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
remaining_pixels = text_available_width;
line_height = 0;
}
@@ -1568,7 +1568,7 @@ void LLTextBase::reflow()
last_segment_char_on_line,
line_rect,
line_count));
- cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
+ cur_top -= ll_round((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
break;
}
// ...or finished a segment and there are segments remaining on this line
@@ -1583,7 +1583,7 @@ void LLTextBase::reflow()
line_rect,
line_count));
line_start_index = segment->getStart() + seg_offset;
- cur_top -= llround((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
+ cur_top -= ll_round((F32)line_height * mLineSpacingMult) + mLineSpacingPixels;
line_height = 0;
remaining_pixels = text_available_width;
}
@@ -2019,6 +2019,8 @@ static LLUIImagePtr image_from_icon_name(const std::string& icon_name)
static LLTrace::BlockTimerStatHandle FTM_PARSE_HTML("Parse HTML");
+
+
void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Params& input_params)
{
LLStyle::Params style_params(input_params);
@@ -2055,22 +2057,33 @@ void LLTextBase::appendTextImpl(const std::string &new_text, const LLStyle::Para
std::string subtext=text.substr(0,start);
appendAndHighlightText(subtext, part, style_params);
}
+
+ // add icon before url if need
+ LLTextUtil::processUrlMatch(&match, this, isContentTrusted() || match.isTrusted());
+
// output the styled Url
appendAndHighlightTextImpl(match.getLabel(), part, link_params, match.underlineOnHoverOnly());
+
+ // show query part of url with gray color only for LLUrlEntryHTTP and LLUrlEntryHTTPNoProtocol url entries
+ std::string label = match.getQuery();
+ if (label.size())
+ {
+ link_params.color = LLColor4::grey;
+ link_params.readonly_color = LLColor4::grey;
+ appendAndHighlightTextImpl(label, part, link_params, match.underlineOnHoverOnly());
+ }
// set the tooltip for the Url label
if (! match.getTooltip().empty())
{
segment_set_t::iterator it = getSegIterContaining(getLength()-1);
if (it != mSegments.end())
- {
- LLTextSegmentPtr segment = *it;
- segment->setToolTip(match.getTooltip());
- }
+ {
+ LLTextSegmentPtr segment = *it;
+ segment->setToolTip(match.getTooltip());
+ }
}
- LLTextUtil::processUrlMatch(&match,this,isContentTrusted());
-
// move on to the rest of the text after the Url
if (end < (S32)text.length())
{
@@ -2849,13 +2862,44 @@ void LLTextBase::updateRects()
needsReflow();
}
+ // update mTextBoundingRect after mVisibleTextRect took scrolls into account
+ if (!mLineInfoList.empty() && mScroller)
+ {
+ S32 delta_pos = 0;
+
+ switch(mVAlign)
+ {
+ case LLFontGL::TOP:
+ delta_pos = llmax(mVisibleTextRect.getHeight() - mTextBoundingRect.mTop, -mTextBoundingRect.mBottom);
+ break;
+ case LLFontGL::VCENTER:
+ delta_pos = (llmax(mVisibleTextRect.getHeight() - mTextBoundingRect.mTop, -mTextBoundingRect.mBottom) + (mVisibleTextRect.mBottom - mTextBoundingRect.mBottom)) / 2;
+ break;
+ case LLFontGL::BOTTOM:
+ delta_pos = mVisibleTextRect.mBottom - mTextBoundingRect.mBottom;
+ break;
+ case LLFontGL::BASELINE:
+ // do nothing
+ break;
+ }
+ // move line segments to fit new visible rect
+ if (delta_pos != 0)
+ {
+ for (line_list_t::iterator it = mLineInfoList.begin(); it != mLineInfoList.end(); ++it)
+ {
+ it->mRect.translate(0, delta_pos);
+ }
+ mTextBoundingRect.translate(0, delta_pos);
+ }
+ }
+
// update document container again, using new mVisibleTextRect (that has scrollbars enabled as needed)
doc_rect.mBottom = llmin(mVisibleTextRect.mBottom, mTextBoundingRect.mBottom);
doc_rect.mLeft = 0;
doc_rect.mRight = mScroller
? llmax(mVisibleTextRect.getWidth(), mTextBoundingRect.mRight)
: mVisibleTextRect.getWidth();
- doc_rect.mTop = llmax(mVisibleTextRect.mTop, mTextBoundingRect.mTop);
+ doc_rect.mTop = llmax(mVisibleTextRect.getHeight(), mTextBoundingRect.getHeight()) + doc_rect.mBottom;
if (!mScroller)
{
// push doc rect to top of text widget
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index 738b4d5b8e..dfc10923f3 100755
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -590,6 +590,7 @@ protected:
void appendTextImpl(const std::string &new_text, const LLStyle::Params& input_params = LLStyle::Params());
void appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, bool underline_on_hover_only = false);
+ S32 normalizeUri(std::string& uri);
protected:
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index cf5fdef539..926326aaff 100755
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -814,7 +814,7 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
BOOL handled = FALSE;
// if I'm not currently selecting text
- if (!(hasSelection() && hasMouseCapture()))
+ if (!(mIsSelecting && hasMouseCapture()))
{
// let text segments handle mouse event
handled = LLTextBase::handleMouseUp(x, y, mask);
@@ -2448,12 +2448,30 @@ void LLTextEditor::updateLinkSegments()
LLTextSegment *segment = *it;
if (segment && segment->getStyle() && segment->getStyle()->isLink())
{
- // if the link's label (what the user can edit) is a valid Url,
- // then update the link's HREF to be the same as the label text.
- // This lets users edit Urls in-place.
LLStyleConstSP style = segment->getStyle();
LLStyleSP new_style(new LLStyle(*style));
LLWString url_label = wtext.substr(segment->getStart(), segment->getEnd()-segment->getStart());
+
+ segment_set_t::const_iterator next_it = mSegments.upper_bound(segment);
+ LLTextSegment *next_segment = *next_it;
+ if (next_segment)
+ {
+ LLWString next_url_label = wtext.substr(next_segment->getStart(), next_segment->getEnd()-next_segment->getStart());
+ std::string link_check = wstring_to_utf8str(url_label) + wstring_to_utf8str(next_url_label);
+ LLUrlMatch match;
+
+ if ( LLUrlRegistry::instance().findUrl(link_check, match))
+ {
+ if(match.getQuery() == wstring_to_utf8str(next_url_label))
+ {
+ continue;
+ }
+ }
+ }
+
+ // if the link's label (what the user can edit) is a valid Url,
+ // then update the link's HREF to be the same as the label text.
+ // This lets users edit Urls in-place.
if (LLUrlRegistry::instance().hasUrl(url_label))
{
std::string new_url = wstring_to_utf8str(url_label);
@@ -2840,7 +2858,7 @@ void LLTextEditor::markAsPreedit(S32 position, S32 length)
S32 LLTextEditor::getPreeditFontSize() const
{
- return llround((F32)mFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]);
+ return ll_round((F32)mFont->getLineHeight() * LLUI::getScaleFactor().mV[VY]);
}
BOOL LLTextEditor::isDirty() const
diff --git a/indra/llui/lltextutil.h b/indra/llui/lltextutil.h
index 798f14d086..1be81ffd62 100755
--- a/indra/llui/lltextutil.h
+++ b/indra/llui/lltextutil.h
@@ -64,7 +64,15 @@ namespace LLTextUtil
*/
const std::string& formatPhoneNumber(const std::string& phone_str);
- bool processUrlMatch(LLUrlMatch* match,LLTextBase* text_base, bool is_content_trusted);
+ /**
+ * Adds icon before url if need.
+ *
+ * @param[in] match an object with results of matching
+ * @param[in] text_base pointer to UI text object
+ * @param[in] is_content_trusted true if context is trusted
+ * @return reference to string with formatted phone number
+ */
+ bool processUrlMatch(LLUrlMatch* match, LLTextBase* text_base, bool is_content_trusted);
class TextHelpers
{
diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp
index 234e600ccd..324ceb7fba 100755
--- a/indra/llui/lltextvalidate.cpp
+++ b/indra/llui/lltextvalidate.cpp
@@ -336,7 +336,7 @@ namespace LLTextValidate
S32 len = str.length();
while(len--)
{
- if (str[len] < 0x20 && str[len] != 0xA || str[len] > 0x7f)
+ if ((str[len] < 0x20 && str[len] != 0xA) || str[len] > 0x7f)
{
rv = FALSE;
break;
diff --git a/indra/llui/lltimectrl.cpp b/indra/llui/lltimectrl.cpp
index 9ea1e8815e..516057f8fd 100755
--- a/indra/llui/lltimectrl.cpp
+++ b/indra/llui/lltimectrl.cpp
@@ -153,7 +153,7 @@ U32 LLTimeCtrl::getMinutes() const
void LLTimeCtrl::setTime24(F32 time)
{
time = llclamp(time, 0.0f, 23.99f); // fix out of range values
- mTime = llround(time * MINUTES_PER_HOUR); // fixes values like 4.99999
+ mTime = ll_round(time * MINUTES_PER_HOUR); // fixes values like 4.99999
updateText();
}
@@ -381,7 +381,7 @@ bool LLTimeCtrl::isHoursStringValid(const std::string& str)
bool LLTimeCtrl::isMinutesStringValid(const std::string& str)
{
U32 minutes;
- if (!LLStringUtil::convertToU32(str, minutes) || (minutes <= MINUTES_MAX) && str.length() < 3)
+ if (!LLStringUtil::convertToU32(str, minutes) || ((minutes <= MINUTES_MAX) && str.length() < 3))
return true;
return false;
@@ -415,7 +415,8 @@ U32 LLTimeCtrl::parseHours(const std::string& str)
U32 LLTimeCtrl::parseMinutes(const std::string& str)
{
U32 minutes;
- if (LLStringUtil::convertToU32(str, minutes) && (minutes >= MINUTES_MIN) && (minutes <= MINUTES_MAX))
+ // not sure of this fix - clang doesnt like compare minutes U32 to >= MINUTES_MIN (0) but MINUTES_MIN can change
+ if (LLStringUtil::convertToU32(str, minutes) && ((S32)minutes >= MINUTES_MIN) && ((S32)minutes <= MINUTES_MAX))
{
return minutes;
}
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index 1f570edd88..aabc7ed2e4 100755
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -236,8 +236,8 @@ void LLUI::dirtyRect(LLRect rect)
void LLUI::setMousePositionScreen(S32 x, S32 y)
{
S32 screen_x, screen_y;
- screen_x = llround((F32)x * getScaleFactor().mV[VX]);
- screen_y = llround((F32)y * getScaleFactor().mV[VY]);
+ screen_x = ll_round((F32)x * getScaleFactor().mV[VX]);
+ screen_y = ll_round((F32)y * getScaleFactor().mV[VY]);
LLView::getWindow()->setCursorPosition(LLCoordGL(screen_x, screen_y).convert());
}
@@ -248,8 +248,8 @@ void LLUI::getMousePositionScreen(S32 *x, S32 *y)
LLCoordWindow cursor_pos_window;
getWindow()->getCursorPosition(&cursor_pos_window);
LLCoordGL cursor_pos_gl(cursor_pos_window.convert());
- *x = llround((F32)cursor_pos_gl.mX / getScaleFactor().mV[VX]);
- *y = llround((F32)cursor_pos_gl.mY / getScaleFactor().mV[VX]);
+ *x = ll_round((F32)cursor_pos_gl.mX / getScaleFactor().mV[VX]);
+ *y = ll_round((F32)cursor_pos_gl.mY / getScaleFactor().mV[VX]);
}
//static
@@ -369,15 +369,15 @@ LLVector2 LLUI::getWindowSize()
//static
void LLUI::screenPointToGL(S32 screen_x, S32 screen_y, S32 *gl_x, S32 *gl_y)
{
- *gl_x = llround((F32)screen_x * getScaleFactor().mV[VX]);
- *gl_y = llround((F32)screen_y * getScaleFactor().mV[VY]);
+ *gl_x = ll_round((F32)screen_x * getScaleFactor().mV[VX]);
+ *gl_y = ll_round((F32)screen_y * getScaleFactor().mV[VY]);
}
//static
void LLUI::glPointToScreen(S32 gl_x, S32 gl_y, S32 *screen_x, S32 *screen_y)
{
- *screen_x = llround((F32)gl_x / getScaleFactor().mV[VX]);
- *screen_y = llround((F32)gl_y / getScaleFactor().mV[VY]);
+ *screen_x = ll_round((F32)gl_x / getScaleFactor().mV[VX]);
+ *screen_y = ll_round((F32)gl_y / getScaleFactor().mV[VY]);
}
//static
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
index a5796c8af2..3ce39c947f 100755
--- a/indra/llui/lluictrlfactory.h
+++ b/indra/llui/lluictrlfactory.h
@@ -183,7 +183,15 @@ public:
if (!widget)
{
LL_WARNS() << "Widget in " << filename << " was of type " << typeid(view).name() << " instead of expected type " << typeid(T).name() << LL_ENDL;
+
+#if LL_DARWIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdelete-incomplete"
+ delete view;
+#pragma clang diagnostic pop
+#else
delete view;
+#endif
view = NULL;
}
}
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index be583c83d8..5f60d80858 100755
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -31,6 +31,7 @@
#include "lluri.h"
#include "llurlmatch.h"
#include "llurlregistry.h"
+#include "lluriparser.h"
#include "llavatarnamecache.h"
#include "llcachename.h"
@@ -45,7 +46,8 @@ std::string localize_slapp_label(const std::string& url, const std::string& full
LLUrlEntryBase::LLUrlEntryBase()
-{}
+{
+}
LLUrlEntryBase::~LLUrlEntryBase()
{
@@ -184,6 +186,30 @@ bool LLUrlEntryBase::isWikiLinkCorrect(std::string url)
return (LLUrlRegistry::instance().hasUrl(label)) ? false : true;
}
+std::string LLUrlEntryBase::urlToLabelWithGreyQuery(const std::string &url) const
+{
+ LLUriParser up(unescapeUrl(url));
+ up.normalize();
+
+ std::string label;
+ up.extractParts();
+ up.glueFirst(label);
+
+ return label;
+}
+
+std::string LLUrlEntryBase::urlToGreyQuery(const std::string &url) const
+{
+ LLUriParser up(unescapeUrl(url));
+
+ std::string query;
+ up.extractParts();
+ up.glueSecond(query);
+
+ return query;
+}
+
+
static std::string getStringAfterToken(const std::string str, const std::string token)
{
size_t pos = str.find(token);
@@ -200,6 +226,7 @@ static std::string getStringAfterToken(const std::string str, const std::string
// LLUrlEntryHTTP Describes generic http: and https: Urls
//
LLUrlEntryHTTP::LLUrlEntryHTTP()
+ : LLUrlEntryBase()
{
mPattern = boost::regex("https?://([-\\w\\.]+)+(:\\d+)?(:\\w+)?(@\\d+)?(@\\w+)?/?\\S*",
boost::regex::perl|boost::regex::icase);
@@ -209,6 +236,25 @@ LLUrlEntryHTTP::LLUrlEntryHTTP()
std::string LLUrlEntryHTTP::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
+ return urlToLabelWithGreyQuery(url);
+}
+
+std::string LLUrlEntryHTTP::getQuery(const std::string &url) const
+{
+ return urlToGreyQuery(url);
+}
+
+std::string LLUrlEntryHTTP::getUrl(const std::string &string) const
+{
+ if (string.find("://") == std::string::npos)
+ {
+ return "http://" + escapeUrl(string);
+ }
+ return escapeUrl(string);
+}
+
+std::string LLUrlEntryHTTP::getTooltip(const std::string &url) const
+{
return unescapeUrl(url);
}
@@ -244,6 +290,7 @@ std::string LLUrlEntryHTTPLabel::getUrl(const std::string &string) const
// LLUrlEntryHTTPNoProtocol Describes generic Urls like www.google.com
//
LLUrlEntryHTTPNoProtocol::LLUrlEntryHTTPNoProtocol()
+ : LLUrlEntryBase()
{
mPattern = boost::regex("("
"\\bwww\\.\\S+\\.\\S+" // i.e. www.FOO.BAR
@@ -257,7 +304,12 @@ LLUrlEntryHTTPNoProtocol::LLUrlEntryHTTPNoProtocol()
std::string LLUrlEntryHTTPNoProtocol::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
- return unescapeUrl(url);
+ return urlToLabelWithGreyQuery(url);
+}
+
+std::string LLUrlEntryHTTPNoProtocol::getQuery(const std::string &url) const
+{
+ return urlToGreyQuery(url);
}
std::string LLUrlEntryHTTPNoProtocol::getUrl(const std::string &string) const
@@ -269,6 +321,95 @@ std::string LLUrlEntryHTTPNoProtocol::getUrl(const std::string &string) const
return escapeUrl(string);
}
+std::string LLUrlEntryHTTPNoProtocol::getTooltip(const std::string &url) const
+{
+ return unescapeUrl(url);
+}
+
+LLUrlEntryInvalidSLURL::LLUrlEntryInvalidSLURL()
+ : LLUrlEntryBase()
+{
+ mPattern = boost::regex("(http://(maps.secondlife.com|slurl.com)/secondlife/|secondlife://(/app/(worldmap|teleport)/)?)[^ /]+(/-?[0-9]+){1,3}(/?(\\?title|\\?img|\\?msg)=\\S*)?/?",
+ boost::regex::perl|boost::regex::icase);
+ mMenuName = "menu_url_http.xml";
+ mTooltip = LLTrans::getString("TooltipHttpUrl");
+}
+
+std::string LLUrlEntryInvalidSLURL::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+
+ return escapeUrl(url);
+}
+
+std::string LLUrlEntryInvalidSLURL::getUrl(const std::string &string) const
+{
+ return escapeUrl(string);
+}
+
+std::string LLUrlEntryInvalidSLURL::getTooltip(const std::string &url) const
+{
+ return unescapeUrl(url);
+}
+
+bool LLUrlEntryInvalidSLURL::isSLURLvalid(const std::string &url) const
+{
+ S32 actual_parts;
+
+ if(url.find(".com/secondlife/") != std::string::npos)
+ {
+ actual_parts = 5;
+ }
+ else if(url.find("/app/") != std::string::npos)
+ {
+ actual_parts = 6;
+ }
+ else
+ {
+ actual_parts = 3;
+ }
+
+ LLURI uri(url);
+ LLSD path_array = uri.pathArray();
+ S32 path_parts = path_array.size();
+ S32 x,y,z;
+
+ if (path_parts == actual_parts)
+ {
+ // handle slurl with (X,Y,Z) coordinates
+ LLStringUtil::convertToS32(path_array[path_parts-3],x);
+ LLStringUtil::convertToS32(path_array[path_parts-2],y);
+ LLStringUtil::convertToS32(path_array[path_parts-1],z);
+
+ if((x>= 0 && x<= 256) && (y>= 0 && y<= 256) && (z>= 0))
+ {
+ return TRUE;
+ }
+ }
+ else if (path_parts == (actual_parts-1))
+ {
+ // handle slurl with (X,Y) coordinates
+
+ LLStringUtil::convertToS32(path_array[path_parts-2],x);
+ LLStringUtil::convertToS32(path_array[path_parts-1],y);
+ ;
+ if((x>= 0 && x<= 256) && (y>= 0 && y<= 256))
+ {
+ return TRUE;
+ }
+ }
+ else if (path_parts == (actual_parts-2))
+ {
+ // handle slurl with (X) coordinate
+ LLStringUtil::convertToS32(path_array[path_parts-1],x);
+ if(x>= 0 && x<= 256)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
//
// LLUrlEntrySLURL Describes generic http: and https: Urls
//
@@ -290,6 +431,7 @@ std::string LLUrlEntrySLURL::getLabel(const std::string &url, const LLUrlLabelCa
// - http://slurl.com/secondlife/Place/X
// - http://slurl.com/secondlife/Place
//
+
LLURI uri(url);
LLSD path_array = uri.pathArray();
S32 path_parts = path_array.size();
@@ -342,6 +484,56 @@ std::string LLUrlEntrySLURL::getLocation(const std::string &url) const
}
//
+// LLUrlEntrySeconlifeURL Describes *secondlife.com/ and *lindenlab.com/ urls to substitute icon 'hand.png' before link
+//
+LLUrlEntrySecondlifeURL::LLUrlEntrySecondlifeURL()
+{
+ mPattern = boost::regex("(https?://)?([-\\w\\.]*\\.)?(secondlife|lindenlab)\\.com(:\\d{1,5})?\\/\\S*",
+ boost::regex::perl|boost::regex::icase);
+
+ mIcon = "Hand";
+ mMenuName = "menu_url_http.xml";
+ mTooltip = LLTrans::getString("TooltipHttpUrl");
+}
+
+/// Return the url from a string that matched the regex
+std::string LLUrlEntrySecondlifeURL::getUrl(const std::string &string) const
+{
+ if (string.find("://") == std::string::npos)
+ {
+ return "https://" + escapeUrl(string);
+ }
+ return escapeUrl(string);
+}
+
+std::string LLUrlEntrySecondlifeURL::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+ return urlToLabelWithGreyQuery(url);
+}
+
+std::string LLUrlEntrySecondlifeURL::getQuery(const std::string &url) const
+{
+ return urlToGreyQuery(url);
+}
+
+std::string LLUrlEntrySecondlifeURL::getTooltip(const std::string &url) const
+{
+ return url;
+}
+
+//
+// LLUrlEntrySimpleSecondlifeURL Describes *secondlife.com and *lindenlab.com urls to substitute icon 'hand.png' before link
+//
+LLUrlEntrySimpleSecondlifeURL::LLUrlEntrySimpleSecondlifeURL()
+ {
+ mPattern = boost::regex("(https?://)?([-\\w\\.]*\\.)?(secondlife|lindenlab)\\.com(?!\\S)",
+ boost::regex::perl|boost::regex::icase);
+
+ mIcon = "Hand";
+ mMenuName = "menu_url_http.xml";
+}
+
+//
// LLUrlEntryAgent Describes a Second Life agent Url, e.g.,
// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
// x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
@@ -841,9 +1033,9 @@ void LLUrlEntryParcel::processParcelInfo(const LLParcelData& parcel_data)
// If parcel name is empty use Sim_name (x, y, z) for parcel label.
else if (!parcel_data.sim_name.empty())
{
- S32 region_x = llround(parcel_data.global_x) % REGION_WIDTH_UNITS;
- S32 region_y = llround(parcel_data.global_y) % REGION_WIDTH_UNITS;
- S32 region_z = llround(parcel_data.global_z);
+ S32 region_x = ll_round(parcel_data.global_x) % REGION_WIDTH_UNITS;
+ S32 region_y = ll_round(parcel_data.global_y) % REGION_WIDTH_UNITS;
+ S32 region_z = ll_round(parcel_data.global_z);
label = llformat("%s (%d, %d, %d)",
parcel_data.sim_name.c_str(), region_x, region_y, region_z);
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index ffcd45dfde..60a494974f 100755
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -78,6 +78,9 @@ public:
/// Given a matched Url, return a label for the Url
virtual std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) { return url; }
+ /// Return port, query and fragment parts for the Url
+ virtual std::string getQuery(const std::string &url) const { return ""; }
+
/// Return an icon that can be displayed next to Urls of this type
virtual std::string getIcon(const std::string &url);
@@ -96,12 +99,16 @@ public:
/// Should this link text be underlined only when mouse is hovered over it?
virtual bool underlineOnHoverOnly(const std::string &string) const { return false; }
+ virtual bool isTrusted() const { return false; }
+
virtual LLUUID getID(const std::string &string) const { return LLUUID::null; }
bool isLinkDisabled() const;
bool isWikiLinkCorrect(std::string url);
+ virtual bool isSLURLvalid(const std::string &url) const { return TRUE; };
+
protected:
std::string getIDStringFromUrl(const std::string &url) const;
std::string escapeUrl(const std::string &url) const;
@@ -109,6 +116,8 @@ protected:
std::string getLabelFromWikiLink(const std::string &url) const;
std::string getUrlFromWikiLink(const std::string &string) const;
void addObserver(const std::string &id, const std::string &url, const LLUrlLabelCallback &cb);
+ std::string urlToLabelWithGreyQuery(const std::string &url) const;
+ std::string urlToGreyQuery(const std::string &url) const;
virtual void callObservers(const std::string &id, const std::string &label, const std::string& icon);
typedef struct {
@@ -131,6 +140,9 @@ class LLUrlEntryHTTP : public LLUrlEntryBase
public:
LLUrlEntryHTTP();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+ /*virtual*/ std::string getQuery(const std::string &url) const;
+ /*virtual*/ std::string getUrl(const std::string &string) const;
+ /*virtual*/ std::string getTooltip(const std::string &url) const;
};
///
@@ -153,7 +165,20 @@ class LLUrlEntryHTTPNoProtocol : public LLUrlEntryBase
public:
LLUrlEntryHTTPNoProtocol();
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+ /*virtual*/ std::string getQuery(const std::string &url) const;
/*virtual*/ std::string getUrl(const std::string &string) const;
+ /*virtual*/ std::string getTooltip(const std::string &url) const;
+};
+
+class LLUrlEntryInvalidSLURL : public LLUrlEntryBase
+{
+public:
+ LLUrlEntryInvalidSLURL();
+ /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+ /*virtual*/ std::string getUrl(const std::string &string) const;
+ /*virtual*/ std::string getTooltip(const std::string &url) const;
+
+ bool isSLURLvalid(const std::string &url) const;
};
///
@@ -168,6 +193,29 @@ public:
};
///
+/// LLUrlEntrySeconlifeURLs Describes *secondlife.com and *lindenlab.com Urls
+///
+class LLUrlEntrySecondlifeURL : public LLUrlEntryBase
+{
+public:
+ LLUrlEntrySecondlifeURL();
+ /*virtual*/ bool isTrusted() const { return true; }
+ /*virtual*/ std::string getUrl(const std::string &string) const;
+ /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+ /*virtual*/ std::string getQuery(const std::string &url) const;
+ /*virtual*/ std::string getTooltip(const std::string &url) const;
+};
+
+///
+/// LLUrlEntrySeconlifeURLs Describes *secondlife.com and *lindenlab.com Urls
+///
+class LLUrlEntrySimpleSecondlifeURL : public LLUrlEntrySecondlifeURL
+{
+public:
+ LLUrlEntrySimpleSecondlifeURL();
+};
+
+///
/// LLUrlEntryAgent Describes a Second Life agent Url, e.g.,
/// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
class LLUrlEntryAgent : public LLUrlEntryBase
diff --git a/indra/llui/llurlmatch.cpp b/indra/llui/llurlmatch.cpp
index c1f1382a9f..2f2ac969e1 100755
--- a/indra/llui/llurlmatch.cpp
+++ b/indra/llui/llurlmatch.cpp
@@ -37,20 +37,22 @@ LLUrlMatch::LLUrlMatch() :
mIcon(""),
mMenuName(""),
mLocation(""),
- mUnderlineOnHoverOnly(false)
+ mUnderlineOnHoverOnly(false),
+ mTrusted(false)
{
}
-void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,
- const std::string &label, const std::string &tooltip,
+void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url, const std::string &label,
+ const std::string& query, const std::string &tooltip,
const std::string &icon, const LLStyle::Params& style,
const std::string &menu, const std::string &location,
- const LLUUID& id, bool underline_on_hover_only)
+ const LLUUID& id, bool underline_on_hover_only, bool trusted)
{
mStart = start;
mEnd = end;
mUrl = url;
mLabel = label;
+ mQuery = query;
mTooltip = tooltip;
mIcon = icon;
mStyle = style;
@@ -59,4 +61,5 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,
mLocation = location;
mID = id;
mUnderlineOnHoverOnly = underline_on_hover_only;
+ mTrusted = trusted;
}
diff --git a/indra/llui/llurlmatch.h b/indra/llui/llurlmatch.h
index 2818f45207..ff699902ca 100755
--- a/indra/llui/llurlmatch.h
+++ b/indra/llui/llurlmatch.h
@@ -62,6 +62,9 @@ public:
/// return a label that can be used for the display of this Url
std::string getLabel() const { return mLabel; }
+ /// return a right part of url which should be drawn in grey
+ std::string getQuery() const { return mQuery; }
+
/// return a message that could be displayed in a tooltip or status bar
std::string getTooltip() const { return mTooltip; }
@@ -80,12 +83,15 @@ public:
/// Should this link text be underlined only when mouse is hovered over it?
bool underlineOnHoverOnly() const { return mUnderlineOnHoverOnly; }
+ /// Return true if Url is trusted.
+ bool isTrusted() const { return mTrusted; }
+
/// Change the contents of this match object (used by LLUrlRegistry)
void setValues(U32 start, U32 end, const std::string &url, const std::string &label,
- const std::string &tooltip, const std::string &icon,
+ const std::string& query, const std::string &tooltip, const std::string &icon,
const LLStyle::Params& style, const std::string &menu,
const std::string &location, const LLUUID& id,
- bool underline_on_hover_only = false );
+ bool underline_on_hover_only = false, bool trusted = false);
const LLUUID& getID() const { return mID; }
private:
@@ -93,6 +99,7 @@ private:
U32 mEnd;
std::string mUrl;
std::string mLabel;
+ std::string mQuery;
std::string mTooltip;
std::string mIcon;
std::string mMenuName;
@@ -100,6 +107,7 @@ private:
LLUUID mID;
LLStyle::Params mStyle;
bool mUnderlineOnHoverOnly;
+ bool mTrusted;
};
#endif
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index ef0789e0e4..1143574968 100755
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -27,6 +27,7 @@
#include "linden_common.h"
#include "llurlregistry.h"
+#include "lluriparser.h"
#include <boost/regex.hpp>
@@ -43,7 +44,14 @@ LLUrlRegistry::LLUrlRegistry()
registerUrl(new LLUrlEntryNoLink());
mUrlEntryIcon = new LLUrlEntryIcon();
registerUrl(mUrlEntryIcon);
+ mLLUrlEntryInvalidSLURL = new LLUrlEntryInvalidSLURL();
+ registerUrl(mLLUrlEntryInvalidSLURL);
registerUrl(new LLUrlEntrySLURL());
+
+ // decorated links for host names like: secondlife.com and lindenlab.com
+ registerUrl(new LLUrlEntrySecondlifeURL());
+ registerUrl(new LLUrlEntrySimpleSecondlifeURL());
+
registerUrl(new LLUrlEntryHTTP());
mUrlEntryHTTPLabel = new LLUrlEntryHTTPLabel();
registerUrl(mUrlEntryHTTPLabel);
@@ -183,6 +191,14 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
if (start < match_start || match_entry == NULL)
{
+ if (mLLUrlEntryInvalidSLURL == *it)
+ {
+ if(url_entry && url_entry->isSLURLvalid(text.substr(start, end - start + 1)))
+ {
+ continue;
+ }
+ }
+
if((mUrlEntryHTTPLabel == *it) || (mUrlEntrySLLabel == *it))
{
if(url_entry && !url_entry->isWikiLinkCorrect(text.substr(start, end - start + 1)))
@@ -203,16 +219,26 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
{
// fill in the LLUrlMatch object and return it
std::string url = text.substr(match_start, match_end - match_start + 1);
+
+ if (match_entry == mUrlEntryTrusted)
+ {
+ LLUriParser up(url);
+ up.normalize();
+ url = up.normalizedUri();
+ }
+
match.setValues(match_start, match_end,
match_entry->getUrl(url),
match_entry->getLabel(url, cb),
+ match_entry->getQuery(url),
match_entry->getTooltip(url),
match_entry->getIcon(url),
match_entry->getStyle(),
match_entry->getMenuName(),
match_entry->getLocation(url),
match_entry->getID(url),
- match_entry->underlineOnHoverOnly(url));
+ match_entry->underlineOnHoverOnly(url),
+ match_entry->isTrusted());
return true;
}
@@ -232,7 +258,7 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr
// character encoding, so we need to update the start
// and end values to be correct for the wide string.
LLWString wurl = utf8str_to_wstring(match.getUrl());
- S32 start = text.find(wurl);
+ size_t start = text.find(wurl);
if (start == std::string::npos)
{
return false;
@@ -241,6 +267,7 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr
match.setValues(start, end, match.getUrl(),
match.getLabel(),
+ match.getQuery(),
match.getTooltip(),
match.getIcon(),
match.getStyle(),
diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h
index 1cb403dfc9..5ce4048d5d 100755
--- a/indra/llui/llurlregistry.h
+++ b/indra/llui/llurlregistry.h
@@ -93,7 +93,9 @@ private:
friend class LLSingleton<LLUrlRegistry>;
std::vector<LLUrlEntryBase *> mUrlEntry;
+ LLUrlEntryBase* mUrlEntryTrusted;
LLUrlEntryBase* mUrlEntryIcon;
+ LLUrlEntryBase* mLLUrlEntryInvalidSLURL;
LLUrlEntryBase* mUrlEntryHTTPLabel;
LLUrlEntryBase* mUrlEntrySLLabel;
};
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 9e6bebc93b..a8beb9cfc9 100755
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -2164,10 +2164,6 @@ LLControlVariable *LLView::findControl(const std::string& name)
return control_group.getControl(name);
}
-const S32 FLOATER_H_MARGIN = 15;
-const S32 MIN_WIDGET_HEIGHT = 10;
-const S32 VPAD = 4;
-
void LLView::initFromParams(const LLView::Params& params)
{
LLRect required_rect = getRequiredRect();
diff --git a/indra/llui/llviewereventrecorder.cpp b/indra/llui/llviewereventrecorder.cpp
index c5a4354f32..9fe6a542b4 100644
--- a/indra/llui/llviewereventrecorder.cpp
+++ b/indra/llui/llviewereventrecorder.cpp
@@ -50,7 +50,7 @@ bool LLViewerEventRecorder::displayViewerEventRecorderMenuItems() {
void LLViewerEventRecorder::setEventLoggingOn() {
if (! mLog.is_open()) {
- mLog.open(mLogFilename, llofstream::out);
+ mLog.open(mLogFilename.c_str(), std::ios_base::out);
}
logEvents=true;
LL_DEBUGS() << "LLViewerEventRecorder::setEventLoggingOn event logging turned on" << LL_ENDL;
diff --git a/indra/llui/llxuiparser.cpp b/indra/llui/llxuiparser.cpp
index 37d88cb9f9..99a0869ce3 100755
--- a/indra/llui/llxuiparser.cpp
+++ b/indra/llui/llxuiparser.cpp
@@ -58,7 +58,9 @@ static LLInitParam::Parser::parser_inspect_func_map_t sSimpleXUIInspectFuncs;
const char* NO_VALUE_MARKER = "no_value";
+#ifdef LL_WINDOWS
const S32 LINE_NUMBER_HERE = 0;
+#endif
struct MaxOccursValues : public LLInitParam::TypeValuesHelper<U32, MaxOccursValues>
{
diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
index 55c1efefef..843886eb69 100755
--- a/indra/llui/tests/llurlmatch_test.cpp
+++ b/indra/llui/tests/llurlmatch_test.cpp
@@ -151,7 +151,7 @@ namespace tut
LLUrlMatch match;
ensure("empty()", match.empty());
- match.setValues(0, 1, "http://secondlife.com", "Second Life", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(0, 1, "http://secondlife.com", "", "Second Life", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure("! empty()", ! match.empty());
}
@@ -164,7 +164,7 @@ namespace tut
LLUrlMatch match;
ensure_equals("getStart() == 0", match.getStart(), 0);
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getStart() == 10", match.getStart(), 10);
}
@@ -177,7 +177,7 @@ namespace tut
LLUrlMatch match;
ensure_equals("getEnd() == 0", match.getEnd(), 0);
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getEnd() == 20", match.getEnd(), 20);
}
@@ -190,10 +190,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getUrl() == ''", match.getUrl(), "");
- match.setValues(10, 20, "http://slurl.com/", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "http://slurl.com/", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getUrl() == 'http://slurl.com/'", match.getUrl(), "http://slurl.com/");
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getUrl() == '' (2)", match.getUrl(), "");
}
@@ -206,10 +206,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getLabel() == ''", match.getLabel(), "");
- match.setValues(10, 20, "", "Label", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "Label", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getLabel() == 'Label'", match.getLabel(), "Label");
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getLabel() == '' (2)", match.getLabel(), "");
}
@@ -222,10 +222,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getTooltip() == ''", match.getTooltip(), "");
- match.setValues(10, 20, "", "", "Info", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "Info", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getTooltip() == 'Info'", match.getTooltip(), "Info");
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getTooltip() == '' (2)", match.getTooltip(), "");
}
@@ -238,10 +238,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getIcon() == ''", match.getIcon(), "");
- match.setValues(10, 20, "", "", "", "Icon", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "Icon", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getIcon() == 'Icon'", match.getIcon(), "Icon");
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure_equals("getIcon() == '' (2)", match.getIcon(), "");
}
@@ -254,10 +254,10 @@ namespace tut
LLUrlMatch match;
ensure("getMenuName() empty", match.getMenuName().empty());
- match.setValues(10, 20, "", "", "", "Icon", LLStyle::Params(), "xui_file.xml", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "Icon", LLStyle::Params(), "xui_file.xml", "", LLUUID::null);
ensure_equals("getMenuName() == \"xui_file.xml\"", match.getMenuName(), "xui_file.xml");
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure("getMenuName() empty (2)", match.getMenuName().empty());
}
@@ -270,10 +270,10 @@ namespace tut
LLUrlMatch match;
ensure("getLocation() empty", match.getLocation().empty());
- match.setValues(10, 20, "", "", "", "Icon", LLStyle::Params(), "xui_file.xml", "Paris", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "Icon", LLStyle::Params(), "xui_file.xml", "Paris", LLUUID::null);
ensure_equals("getLocation() == \"Paris\"", match.getLocation(), "Paris");
- match.setValues(10, 20, "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
+ match.setValues(10, 20, "", "", "", "", "", LLStyle::Params(), "", "", LLUUID::null);
ensure("getLocation() empty (2)", match.getLocation().empty());
}
}
diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp
index a9d96c9807..76296ff877 100755
--- a/indra/llvfs/lldiriterator.cpp
+++ b/indra/llvfs/lldiriterator.cpp
@@ -127,7 +127,8 @@ bool LLDirIterator::Impl::next(std::string &fname)
{
boost::smatch match;
std::string name = mIter->path().filename().string();
- if (found = boost::regex_match(name, match, mFilterExp))
+ found = boost::regex_match(name, match, mFilterExp);
+ if (found)
{
fname = name;
}
diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp
index e64368e8d7..6572edead3 100644
--- a/indra/llvfs/llpidlock.cpp
+++ b/indra/llvfs/llpidlock.cpp
@@ -95,7 +95,7 @@ LLPidLockFile& LLPidLockFile::instance()
void LLPidLockFile::writeLockFile(LLSD pids)
{
- llofstream ofile(mLockName);
+ llofstream ofile(mLockName.c_str());
if (!LLSDSerialize::toXML(pids,ofile))
{
@@ -119,7 +119,7 @@ bool LLPidLockFile::requestLock(LLNameTable<void *> *name_table, bool autosave,
LLSD out_pids;
out_pids.append( (LLSD::Integer)mPID );
- llifstream ifile(mLockName);
+ llifstream ifile(mLockName.c_str());
if (ifile.is_open())
{ //If file exists, we need to decide whether or not to continue.
@@ -175,7 +175,7 @@ bool LLPidLockFile::checkLock()
void LLPidLockFile::releaseLock()
{
- llifstream ifile(mLockName);
+ llifstream ifile(mLockName.c_str());
LLSD in_pids;
LLSD out_pids;
bool write_file=FALSE;
diff --git a/indra/llvfs/llvfs_objc.h b/indra/llvfs/llvfs_objc.h
index 90101eb2e9..56cdbebfc5 100755
--- a/indra/llvfs/llvfs_objc.h
+++ b/indra/llvfs/llvfs_objc.h
@@ -40,4 +40,4 @@ std::string* getSystemResourceFolder();
std::string* getSystemExecutableFolder();
-#endif LL_LLVFS_OBJC_H
+#endif // LL_LLVFS_OBJC_H
diff --git a/indra/llvfs/llvfs_objc.mm b/indra/llvfs/llvfs_objc.mm
index 47b0e73978..282ea41339 100755
--- a/indra/llvfs/llvfs_objc.mm
+++ b/indra/llvfs/llvfs_objc.mm
@@ -48,7 +48,7 @@ std::string* findSystemDirectory(NSSearchPathDirectory searchPathDirectory,
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- std::string *result;
+ std::string *result = nil;
NSString *path = nil;
// Search for the path
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index 24b8406098..1c9160a42d 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -104,20 +104,20 @@ attributedStringInfo getSegments(NSAttributedString *str)
- (unsigned long)getVramSize
{
CGLRendererInfoObj info = 0;
- GLint vram_mbytes = 0;
+ GLint vram_megabytes = 0;
int num_renderers = 0;
CGLError the_err = CGLQueryRendererInfo (CGDisplayIDToOpenGLDisplayMask(kCGDirectMainDisplay), &info, &num_renderers);
if(0 == the_err)
{
- CGLDescribeRenderer (info, 0, kCGLRPTextureMemoryMegabytes, &vram_mbytes);
+ CGLDescribeRenderer (info, 0, kCGLRPTextureMemoryMegabytes, &vram_megabytes);
CGLDestroyRendererInfo (info);
}
else
{
- vram_mbytes = 256;
+ vram_megabytes = 256;
}
- return (unsigned long)vram_mbytes;
+ return (unsigned long)vram_megabytes; // return value is in megabytes.
}
- (void)viewDidMoveToWindow
@@ -133,6 +133,10 @@ attributedStringInfo getSegments(NSAttributedString *str)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification
object:[self window]];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification
+ object:[self window]];
}
- (void)setOldResize:(bool)oldresize
@@ -159,6 +163,11 @@ attributedStringInfo getSegments(NSAttributedString *str)
callWindowUnhide();
}
+- (void)windowDidBecomeKey:(NSNotification *)notification;
+{
+ mModifiers = [NSEvent modifierFlags];
+}
+
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
diff --git a/indra/llwindow/llwindowheadless.cpp b/indra/llwindow/llwindowheadless.cpp
index e6e6bc67ff..70f473281b 100755
--- a/indra/llwindow/llwindowheadless.cpp
+++ b/indra/llwindow/llwindowheadless.cpp
@@ -51,4 +51,3 @@ LLWindowHeadless::~LLWindowHeadless()
void LLWindowHeadless::swapBuffers()
{
}
-
diff --git a/indra/llwindow/llwindowheadless.h b/indra/llwindow/llwindowheadless.h
index 1f767f4c97..c692666df1 100755
--- a/indra/llwindow/llwindowheadless.h
+++ b/indra/llwindow/llwindowheadless.h
@@ -75,7 +75,8 @@ public:
/*virtual*/ void delayInputProcessing() {};
/*virtual*/ void swapBuffers();
- // handy coordinate space conversion routines
+
+ // handy coordinate space conversion routines
/*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; };
/*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; };
/*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordGL *to) { return FALSE; };
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index d7aa47f378..15e054fb5d 100755
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -44,15 +44,9 @@
extern BOOL gDebugWindowProc;
-// culled from winuser.h
-//const S32 WHEEL_DELTA = 120; /* Value for rolling one detent */
-// On the Mac, the scroll wheel reports a delta of 1 for each detent.
-// There's also acceleration for faster scrolling, based on a slider in the system preferences.
-const S32 WHEEL_DELTA = 1; /* Value for rolling one detent */
const S32 BITS_PER_PIXEL = 32;
const S32 MAX_NUM_RESOLUTIONS = 32;
-
//
// LLWindowMacOSX
//
@@ -244,8 +238,8 @@ void callRightMouseDown(float *pos, MASK mask)
}
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
gWindowImplementation->getCallbacks()->handleRightMouseDown(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));
}
@@ -257,8 +251,8 @@ void callRightMouseUp(float *pos, MASK mask)
}
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
gWindowImplementation->getCallbacks()->handleRightMouseUp(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));
}
@@ -270,8 +264,8 @@ void callLeftMouseDown(float *pos, MASK mask)
}
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
gWindowImplementation->getCallbacks()->handleMouseDown(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));
}
@@ -283,8 +277,8 @@ void callLeftMouseUp(float *pos, MASK mask)
}
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
gWindowImplementation->getCallbacks()->handleMouseUp(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));
}
@@ -297,8 +291,8 @@ void callDoubleClick(float *pos, MASK mask)
}
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
gWindowImplementation->getCallbacks()->handleDoubleClick(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));
}
@@ -313,8 +307,8 @@ void callResize(unsigned int width, unsigned int height)
void callMouseMoved(float *pos, MASK mask)
{
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
float deltas[2];
gWindowImplementation->getMouseDeltas(deltas);
outCoords.mX += deltas[0];
@@ -376,8 +370,8 @@ void callDeltaUpdate(float *delta, MASK mask)
void callMiddleMouseDown(float *pos, MASK mask)
{
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
float deltas[2];
gWindowImplementation->getMouseDeltas(deltas);
outCoords.mX += deltas[0];
@@ -388,8 +382,8 @@ void callMiddleMouseDown(float *pos, MASK mask)
void callMiddleMouseUp(float *pos, MASK mask)
{
LLCoordGL outCoords;
- outCoords.mX = llround(pos[0]);
- outCoords.mY = llround(pos[1]);
+ outCoords.mX = ll_round(pos[0]);
+ outCoords.mY = ll_round(pos[1]);
float deltas[2];
gWindowImplementation->getMouseDeltas(deltas);
outCoords.mX += deltas[0];
@@ -525,8 +519,8 @@ void LLWindowMacOSX::updateMouseDeltas(float* deltas)
{
if (mCursorDecoupled)
{
- mCursorLastEventDeltaX = llround(deltas[0]);
- mCursorLastEventDeltaY = llround(-deltas[1]);
+ mCursorLastEventDeltaX = ll_round(deltas[0]);
+ mCursorLastEventDeltaY = ll_round(-deltas[1]);
if (mCursorIgnoreNextDelta)
{
@@ -904,6 +898,11 @@ void LLWindowMacOSX::swapBuffers()
CGLFlushDrawable(mContext);
}
+void LLWindowMacOSX::restoreGLContext()
+{
+ CGLSetCurrentContext(mContext);
+}
+
F32 LLWindowMacOSX::getGamma()
{
F32 result = 2.2; // Default to something sane
@@ -1158,6 +1157,8 @@ void LLWindowMacOSX::beforeDialog()
void LLWindowMacOSX::afterDialog()
{
+ //For fix problem with Core Flow view on OSX
+ restoreGLContext();
}
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
index 825fd05c5f..9e9bd8ae39 100755
--- a/indra/llwindow/llwindowmacosx.h
+++ b/indra/llwindow/llwindowmacosx.h
@@ -87,7 +87,7 @@ public:
/*virtual*/ void gatherInput();
/*virtual*/ void delayInputProcessing() {};
/*virtual*/ void swapBuffers();
-
+
// handy coordinate space conversion routines
/*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to);
/*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to);
@@ -155,7 +155,9 @@ protected:
//Satisfy MAINT-3135 and MAINT-3288 with a flag.
/*virtual */ void setOldResize(bool oldresize) {setResizeMode(oldresize, mGLView); }
-
+
+private:
+ void restoreGLContext();
protected:
//
diff --git a/indra/llwindow/llwindowmesaheadless.h b/indra/llwindow/llwindowmesaheadless.h
index 8f70aee4f6..00e42240e6 100755
--- a/indra/llwindow/llwindowmesaheadless.h
+++ b/indra/llwindow/llwindowmesaheadless.h
@@ -77,6 +77,7 @@ public:
/*virtual*/ void gatherInput() {};
/*virtual*/ void delayInputProcessing() {};
/*virtual*/ void swapBuffers();
+ /*virtual*/ void restoreGLContext() {};
// handy coordinate space conversion routines
/*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; };
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
index c5ce892a04..7193e6f45a 100755
--- a/indra/llwindow/llwindowsdl.h
+++ b/indra/llwindow/llwindowsdl.h
@@ -97,6 +97,7 @@ public:
/*virtual*/ void processMiscNativeEvents();
/*virtual*/ void gatherInput();
/*virtual*/ void swapBuffers();
+ /*virtual*/ void restoreGLContext() {};
/*virtual*/ void delayInputProcessing() { };
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
index 169d264808..2ca8d48fc7 100755
--- a/indra/llwindow/llwindowwin32.h
+++ b/indra/llwindow/llwindowwin32.h
@@ -83,6 +83,7 @@ public:
/*virtual*/ void gatherInput();
/*virtual*/ void delayInputProcessing();
/*virtual*/ void swapBuffers();
+ /*virtual*/ void restoreGLContext() {};
// handy coordinate space conversion routines
/*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to);
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index 598a802d67..4e3d0ab392 100755
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -833,7 +833,7 @@ U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only
}
}
llofstream file;
- file.open(filename);
+ file.open(filename.c_str());
if (file.is_open())
{
LLSDSerialize::toPrettyXML(settings, file);
@@ -853,7 +853,7 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v
{
LLSD settings;
llifstream infile;
- infile.open(filename);
+ infile.open(filename.c_str());
if(!infile.is_open())
{
LL_WARNS("Settings") << "Cannot find file " << filename << " to load." << LL_ENDL;
diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp
index cb99496ef1..455df13e48 100755
--- a/indra/llxml/llxmlnode.cpp
+++ b/indra/llxml/llxmlnode.cpp
@@ -43,8 +43,6 @@
#include "lluuid.h"
#include "lldir.h"
-const S32 MAX_COLUMN_WIDTH = 80;
-
// static
BOOL LLXMLNode::sStripEscapedStrings = TRUE;
BOOL LLXMLNode::sStripWhitespaceValues = FALSE;
diff --git a/indra/llxml/tests/llcontrol_test.cpp b/indra/llxml/tests/llcontrol_test.cpp
index c273773c9b..2b691ffbb1 100755
--- a/indra/llxml/tests/llcontrol_test.cpp
+++ b/indra/llxml/tests/llcontrol_test.cpp
@@ -80,7 +80,7 @@ namespace tut
}
void writeSettingsFile(const LLSD& config)
{
- llofstream file(mTestConfigFile);
+ llofstream file(mTestConfigFile.c_str());
if (file.is_open())
{
LLSDSerialize::toPrettyXML(config, file);
diff --git a/indra/lscript/lscript_execute/lscript_readlso.cpp b/indra/lscript/lscript_execute/lscript_readlso.cpp
index 7ec56c2409..abcb28e998 100755
--- a/indra/lscript/lscript_execute/lscript_readlso.cpp
+++ b/indra/lscript/lscript_execute/lscript_readlso.cpp
@@ -114,7 +114,7 @@ void LLScriptLSOParse::printRegisters(LLFILE *fp)
else if (gMajorVersion == LSL2_MAJOR_VERSION_TWO)
{
U64 data = get_register_u64(mRawData, (LSCRIPTRegisters)i);
- fprintf(fp, "%s: 0x%X%X\n", gLSCRIPTRegisterNames[i], (U32)(data>>32), (U32)(data && 0xFFFFFFFF));
+ fprintf(fp, "%s: 0x%X%X\n", gLSCRIPTRegisterNames[i], (U32)(data>>32), (U32)(data & 0xFFFFFFFF));
}
}
fprintf(fp, "=============================\n\n");
diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp
index da7de01799..66c00cd58c 100755
--- a/indra/media_plugins/example/media_plugin_example.cpp
+++ b/indra/media_plugins/example/media_plugin_example.cpp
@@ -363,10 +363,10 @@ void MediaPluginExample::update( F64 milliseconds )
};
if ( mXpos[ n ] + mXInc[ n ] < 0 || mXpos[ n ] + mXInc[ n ] >= mWidth - mBlockSize[ n ] )
- mXInc[ n ] =- mXInc[ n ];
+ mXInc[ n ]= -mXInc[ n ];
if ( mYpos[ n ] + mYInc[ n ] < 0 || mYpos[ n ] + mYInc[ n ] >= mHeight - mBlockSize[ n ] )
- mYInc[ n ] =- mYInc[ n ];
+ mYInc[ n ]= -mYInc[ n ];
mXpos[ n ] += mXInc[ n ];
mYpos[ n ] += mYInc[ n ];
diff --git a/indra/media_plugins/winmmshim/forwarding_api.cpp b/indra/media_plugins/winmmshim/forwarding_api.cpp
index 495e08942b..33f0675028 100755
--- a/indra/media_plugins/winmmshim/forwarding_api.cpp
+++ b/indra/media_plugins/winmmshim/forwarding_api.cpp
@@ -1338,7 +1338,7 @@ extern "C" {
return joySetThreshold_orig( uJoyID, uThreshold);
}
- BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus)
+ BOOL WINAPI mciDriverNotify(HANDLE hwndCallback, MCIDEVICEID uDeviceID, UINT uStatus)
{
ll_winmm_shim_initialize();
//OutputDebugString(L"mciDriverNotify\n");
@@ -1610,7 +1610,7 @@ extern "C" {
return mciGetYieldProc_orig( mciId, pdwYieldData);
}
- UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType)
+ UINT WINAPI mciLoadCommandResource(HANDLE hInstance, LPCWSTR lpResName, UINT uType)
{
ll_winmm_shim_initialize();
//OutputDebugString(L"mciLoadCommandResource");
diff --git a/indra/media_plugins/winmmshim/forwarding_api.h b/indra/media_plugins/winmmshim/forwarding_api.h
index 076a08f769..1418fc9e1d 100755
--- a/indra/media_plugins/winmmshim/forwarding_api.h
+++ b/indra/media_plugins/winmmshim/forwarding_api.h
@@ -306,7 +306,7 @@ typedef MMRESULT (WINAPI *joySetCapture_type)( HWND hwnd, UINT uJoyID, UINT uPer
extern joySetCapture_type joySetCapture_orig;
typedef MMRESULT (WINAPI *joySetThreshold_type)( UINT uJoyID, UINT uThreshold);
extern joySetThreshold_type joySetThreshold_orig;
-typedef BOOL (WINAPI *mciDriverNotify_type)(HWND hwndCallback, UINT uDeviceID, UINT uStatus);
+typedef BOOL(WINAPI *mciDriverNotify_type)(HANDLE hwndCallback, MCIDEVICEID uDeviceID, UINT uStatus);
extern mciDriverNotify_type mciDriverNotify_orig;
typedef UINT (WINAPI *mciDriverYield_type)(UINT uDeviceID);
extern mciDriverYield_type mciDriverYield_orig;
@@ -384,7 +384,7 @@ typedef HTASK (WINAPI *mciGetCreatorTask_type)( MCIDEVICEID mciId);
extern mciGetCreatorTask_type mciGetCreatorTask_orig;
typedef YIELDPROC (WINAPI *mciGetYieldProc_type)( MCIDEVICEID mciId, LPDWORD pdwYieldData);
extern mciGetYieldProc_type mciGetYieldProc_orig;
-typedef UINT (WINAPI *mciLoadCommandResource_type)(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType);
+typedef UINT (WINAPI *mciLoadCommandResource_type)(HANDLE hInstance, LPCWSTR lpResName, UINT uType);
extern mciLoadCommandResource_type mciLoadCommandResource_orig;
typedef BOOL (WINAPI *mciExecute_type)(LPCSTR pszCommand);
extern mciExecute_type mciExecute_orig;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 4bf92f0f4e..45d5f0681c 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,19 +40,18 @@ 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)
if (NOT HAVOK_TPV)
# When using HAVOK_TPV, the library is precompiled, so no need for this
@@ -59,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}
@@ -244,6 +250,7 @@ set(viewer_SOURCE_FILES
llfloaterhandler.cpp
llfloaterhardwaresettings.cpp
llfloaterhelpbrowser.cpp
+ llfloaterhoverheight.cpp
llfloaterhud.cpp
llfloaterimagepreview.cpp
llfloaterimsessiontab.cpp
@@ -852,6 +859,7 @@ set(viewer_HEADER_FILES
llfloaterhandler.h
llfloaterhardwaresettings.h
llfloaterhelpbrowser.h
+ llfloaterhoverheight.h
llfloaterhud.h
llfloaterimagepreview.h
llfloaterimnearbychat.h
@@ -1304,7 +1312,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
@@ -1375,6 +1383,9 @@ if (LINUX)
set(viewer_LIBRARIES
Xinerama
)
+ if (OPENAL)
+ LIST(APPEND viewer_LIBRARIES ${OPENAL_LIBRARIES})
+ endif (OPENAL)
endif (LINUX)
if (WINDOWS)
@@ -1589,6 +1600,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})
@@ -1669,6 +1681,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}
@@ -1804,7 +1819,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"
@@ -1818,10 +1832,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)
@@ -1876,10 +1890,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...
@@ -1930,6 +1943,7 @@ endif (WINDOWS)
target_link_libraries(${VIEWER_BINARY_NAME}
${PNG_PRELOAD_ARCHIVES}
${ZLIB_PRELOAD_ARCHIVES}
+ ${URIPARSER_PRELOAD_ARCHIVES}
${UPDATER_LIBRARIES}
${GOOGLE_PERFTOOLS_LIBRARIES}
${LLAUDIO_LIBRARIES}
@@ -1988,12 +2002,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}
@@ -2012,7 +2028,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}
)
@@ -2037,7 +2052,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"
)
@@ -2045,10 +2059,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)
@@ -2079,6 +2093,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}
@@ -2098,10 +2114,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}")
@@ -2110,11 +2126,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
@@ -2133,7 +2149,6 @@ if (DARWIN)
${SIGNING_SETTING}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
- generate_viewer_version
)
endif (PACKAGE)
endif (DARWIN)
@@ -2156,19 +2171,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)
@@ -2196,7 +2213,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)
@@ -2374,11 +2391,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 f36181278b..1523336b0d 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.7.24
+3.7.29
diff --git a/indra/newview/app_settings/keywords_lsl_default.xml b/indra/newview/app_settings/keywords_lsl_default.xml
index 37dd2db93f..cea7a58949 100755
--- a/indra/newview/app_settings/keywords_lsl_default.xml
+++ b/indra/newview/app_settings/keywords_lsl_default.xml
@@ -10980,7 +10980,7 @@
</map>
</array>
<key>tooltip</key>
- <string>Rez directly off of a UUID if owner has dog-bit set.</string>
+ <string>Rez directly off of a UUID if owner has god-bit set.</string>
</map>
<key>llGround</key>
<map>
diff --git a/indra/newview/app_settings/logcontrol.xml b/indra/newview/app_settings/logcontrol.xml
index 15cb5bc0eb..de3732f339 100755
--- a/indra/newview/app_settings/logcontrol.xml
+++ b/indra/newview/app_settings/logcontrol.xml
@@ -43,6 +43,7 @@
<key>tags</key>
<array>
<!-- sample entry for debugging specific items
+ <string>Avatar</string>
<string>Inventory</string>
<string>SceneLoadTiming</string>
<string>Avatar</string>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 94d3c8a59f..845cb5ae96 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -49,6 +49,17 @@
<key>Value</key>
<real>300</real>
</map>
+ <key>AckCollectTime</key>
+ <map>
+ <key>Comment</key>
+ <string>Ack messages collection and grouping time</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.1</real>
+ </map>
<key>AdminMenu</key>
<map>
<key>Comment</key>
@@ -654,6 +665,21 @@
<key>Value</key>
<integer>2</integer>
</map>
+ <key>AvatarPosFinalOffset</key>
+ <map>
+ <key>Comment</key>
+ <string>After-everything-else fixup for avatar position.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Vector3</string>
+ <key>Value</key>
+ <array>
+ <real>0.0</real>
+ <real>0.0</real>
+ <real>0.0</real>
+ </array>
+ </map>
<key>AvatarPickerURL</key>
<map>
<key>Comment</key>
@@ -5004,6 +5030,7 @@
<key>Type</key>
<string>LLSD</string>
<key>Value</key>
+ <array/>
</map>
<key>LSLFindCaseInsensitivity</key>
<map>
@@ -11759,7 +11786,7 @@
<key>Type</key>
<string>F32</string>
<key>Value</key>
- <integer>0.0</integer>
+ <real>0.0</real>
</map>
<key>TextureFetchSource</key>
<map>
@@ -13202,6 +13229,17 @@
<key>Value</key>
<integer>1</integer>
</map>
+ <key>EnvironmentPersistAcrossLogin</key>
+ <map>
+ <key>Comment</key>
+ <string>Keep Environment settings consistent across sessions</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>UseDayCycle</key>
<map>
<key>Comment</key>
@@ -14093,17 +14131,6 @@
<key>Value</key>
<integer>-1</integer>
</map>
- <key>MaxFPS</key>
- <map>
- <key>Comment</key>
- <string>Yield some time to the local host if we reach a threshold framerate.</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>Type</key>
- <string>F32</string>
- <key>Value</key>
- <real>-1.0</real>
- </map>
<key>ForcePeriodicRenderingTime</key>
<map>
<key>Comment</key>
@@ -14676,17 +14703,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>
@@ -15595,7 +15611,6 @@
<key>Value</key>
<integer>0</integer>
</map>
-
</map>
</llsd>
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
index fc6f1f6395..c62b45ed81 100755
--- a/indra/newview/app_settings/settings_per_account.xml
+++ b/indra/newview/app_settings/settings_per_account.xml
@@ -1,5 +1,16 @@
<llsd>
<map>
+ <key>AvatarHoverOffsetZ</key>
+ <map>
+ <key>Comment</key>
+ <string>After-everything-else fixup for avatar Z position.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>F32</string>
+ <key>Value</key>
+ <real>0.0</real>
+ </map>
<key>DoNotDisturbResponseChanged</key>
<map>
<key>Comment</key>
@@ -86,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.nsi
index 2352649b4b..83e1a3ea94 100755
--- a/indra/newview/installers/windows/lang_da.nsi
+++ b/indra/newview/installers/windows/lang_da.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi
index 397262afe1..866accae99 100755
--- a/indra/newview/installers/windows/lang_de.nsi
+++ b/indra/newview/installers/windows/lang_de.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi
index df0d55d9e0..343c312ddc 100755
--- a/indra/newview/installers/windows/lang_en-us.nsi
+++ b/indra/newview/installers/windows/lang_en-us.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi
index 32967a0dfa..f4f0786332 100755
--- a/indra/newview/installers/windows/lang_es.nsi
+++ b/indra/newview/installers/windows/lang_es.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi
index 7c75e25360..1b5dbfc975 100755
--- a/indra/newview/installers/windows/lang_fr.nsi
+++ b/indra/newview/installers/windows/lang_fr.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi
index ce66b61f9f..a456e6e417 100755
--- a/indra/newview/installers/windows/lang_it.nsi
+++ b/indra/newview/installers/windows/lang_it.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi
index e68830123a..5b1c5f4ce9 100755
--- a/indra/newview/installers/windows/lang_ja.nsi
+++ b/indra/newview/installers/windows/lang_ja.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi
index 7883819190..a172f0cdeb 100755
--- a/indra/newview/installers/windows/lang_pl.nsi
+++ b/indra/newview/installers/windows/lang_pl.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi
index eb3fb2386c..9ef252d232 100755
--- a/indra/newview/installers/windows/lang_pt-br.nsi
+++ b/indra/newview/installers/windows/lang_pt-br.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi
index 3b0042fbf5..d7c728d3e2 100755
--- a/indra/newview/installers/windows/lang_ru.nsi
+++ b/indra/newview/installers/windows/lang_ru.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi
index b9be1eab08..97c602f4fc 100755
--- a/indra/newview/installers/windows/lang_tr.nsi
+++ b/indra/newview/installers/windows/lang_tr.nsi
Binary files differ
diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi
index 3c6f6fd289..39c005a683 100755
--- a/indra/newview/installers/windows/lang_zh.nsi
+++ b/indra/newview/installers/windows/lang_zh.nsi
Binary files differ
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 5cb03cd2ae..359171c5bd 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -398,6 +398,8 @@ LLAgent::LLAgent() :
mAutoPilotFinishedCallback(NULL),
mAutoPilotCallbackData(NULL),
+ mMovementKeysLocked(FALSE),
+
mEffectColor(new LLUIColor(LLColor4(0.f, 1.f, 1.f, 1.f))),
mHaveHomePosition(FALSE),
@@ -408,10 +410,8 @@ LLAgent::LLAgent() :
mCurrentFidget(0),
mFirstLogin(FALSE),
mOutfitChosen(FALSE),
-
- mVoiceConnected(false),
- mAppearanceSerialNum(0),
+ mVoiceConnected(false),
mMouselookModeInSignal(NULL),
mMouselookModeOutSignal(NULL)
@@ -2260,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 a2e9cedd88..4830cb754b 100755
--- a/indra/newview/llagent.h
+++ b/indra/newview/llagent.h
@@ -515,6 +515,9 @@ public:
void moveYaw(F32 mag, bool reset_view = true);
void movePitch(F32 mag);
+ BOOL isMovementLocked() const { return mMovementKeysLocked; }
+ void setMovementLocked(BOOL set_locked) { mMovementKeysLocked = set_locked; }
+
//--------------------------------------------------------------------
// Move the avatar's frame
//--------------------------------------------------------------------
@@ -569,6 +572,7 @@ private:
void (*mAutoPilotFinishedCallback)(BOOL, void *);
void* mAutoPilotCallbackData;
LLUUID mLeaderID;
+ BOOL mMovementKeysLocked;
/** Movement
** **
@@ -787,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 2356a84688..7f0330ee99 100755
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -35,6 +35,7 @@
#include "llfloaterreg.h"
#include "llhudmanager.h"
#include "lljoystickbutton.h"
+#include "llmorphview.h"
#include "llmoveview.h"
#include "llselectmgr.h"
#include "llsmoothstep.h"
@@ -885,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();
@@ -957,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;
@@ -2269,7 +2268,10 @@ void LLAgentCamera::changeCameraToCustomizeAvatar()
gFocusMgr.setKeyboardFocus( NULL );
gFocusMgr.setMouseCapture( NULL );
-
+ if( gMorphView )
+ {
+ gMorphView->setVisible( TRUE );
+ }
// Remove any pitch or rotation from the avatar
LLVector3 at = gAgent.getAtAxis();
at.mV[VZ] = 0.f;
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 f6b6c71cfc..6dc71bc94e 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -685,6 +685,8 @@ LLAppViewer::LLAppViewer()
mQuitRequested(false),
mLogoutRequestSent(false),
mYieldTime(-1),
+ mLastAgentControlFlags(0),
+ mLastAgentForceUpdate(0),
mMainloopTimeout(NULL),
mAgentRegionLastAlive(false),
mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
@@ -745,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);
@@ -801,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"));
@@ -1679,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())
@@ -2036,7 +2040,7 @@ bool LLAppViewer::cleanup()
sImageDecodeThread = NULL;
delete mFastTimerLogThread;
mFastTimerLogThread = NULL;
-
+
if (LLFastTimerView::sAnalyzePerformance)
{
LL_INFOS() << "Analyzing performance" << LL_ENDL;
@@ -3271,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);
@@ -3760,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;
@@ -4648,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;
@@ -4666,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);
+ }
}
}
@@ -4811,22 +4822,24 @@ void LLAppViewer::idle()
gAgentPilot.updateTarget();
gAgent.autoPilot(&yaw);
}
-
- static LLFrameTimer agent_update_timer;
- static U32 last_control_flags;
-
- // When appropriate, update agent location to the simulator.
- F32 agent_update_time = agent_update_timer.getElapsedTimeF32();
- BOOL flags_changed = gAgent.controlFlagsDirty() || (last_control_flags != gAgent.getControlFlags());
-
- if (flags_changed || (agent_update_time > (1.0f / (F32) AGENT_UPDATES_PER_SECOND)))
- {
- LL_RECORD_BLOCK_TIME(FTM_AGENT_UPDATE);
- // Send avatar and camera info
- last_control_flags = gAgent.getControlFlags();
- send_agent_update(TRUE);
- agent_update_timer.reset();
- }
+
+ static LLFrameTimer agent_update_timer;
+
+ // When appropriate, update agent location to the simulator.
+ F32 agent_update_time = agent_update_timer.getElapsedTimeF32();
+ F32 agent_force_update_time = mLastAgentForceUpdate + agent_update_time;
+ BOOL force_update = gAgent.controlFlagsDirty()
+ || (mLastAgentControlFlags != gAgent.getControlFlags())
+ || (agent_force_update_time > (1.0f / (F32) AGENT_FORCE_UPDATES_PER_SECOND));
+ if (force_update || (agent_update_time > (1.0f / (F32) AGENT_UPDATES_PER_SECOND)))
+ {
+ LL_RECORD_BLOCK_TIME(FTM_AGENT_UPDATE);
+ // Send avatar and camera info
+ mLastAgentControlFlags = gAgent.getControlFlags();
+ mLastAgentForceUpdate = force_update ? 0 : agent_force_update_time;
+ send_agent_update(force_update);
+ agent_update_timer.reset();
+ }
}
//////////////////////////////////////
@@ -5374,7 +5387,7 @@ void LLAppViewer::idleNetwork()
}
// Handle per-frame message system processing.
- gMessageSystem->processAcks();
+ gMessageSystem->processAcks(gSavedSettings.getF32("AckCollectTime"));
#ifdef TIME_THROTTLE_MESSAGES
if (total_time >= CheckMessagesMaxTime)
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index e0f3f326c7..e8a1ca036b 100755
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -275,6 +275,8 @@ private:
bool mQuitRequested; // User wants to quit, may have modified documents open.
bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
S32 mYieldTime;
+ U32 mLastAgentControlFlags;
+ F32 mLastAgentForceUpdate;
struct SettingsFiles* mSettingsLocationList;
LLWatchdogTimeout* mMainloopTimeout;
@@ -314,6 +316,7 @@ public:
// consts from viewer.h
const S32 AGENT_UPDATES_PER_SECOND = 10;
+const S32 AGENT_FORCE_UPDATES_PER_SECOND = 1;
// Globals with external linkage. From viewer.h
// *NOTE:Mani - These will be removed as the Viewer App Cleanup project continues.
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 a98ff64d0a..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(
@@ -229,21 +226,34 @@ void LLAssetUploadResponder::httpFailure()
{
// *TODO: Add adaptive retry policy?
LL_WARNS() << dumpResponse() << LL_ENDL;
- LLSD args;
+ std::string reason;
if (isHttpClientErrorStatus(getStatus()))
{
- args["FILE"] = (mFileName.empty() ? mVFileID.asString() : mFileName);
- args["REASON"] = "Error in upload request. Please visit "
+ reason = "Error in upload request. Please visit "
"http://secondlife.com/support for help fixing this problem.";
- LLNotificationsUtil::add("CannotUploadReason", args);
}
else
{
- args["FILE"] = (mFileName.empty() ? mVFileID.asString() : mFileName);
- args["REASON"] = "The server is experiencing unexpected "
+ reason = "The server is experiencing unexpected "
"difficulties.";
- LLNotificationsUtil::add("CannotUploadReason", args);
}
+ LLSD args;
+ args["FILE"] = (mFileName.empty() ? mVFileID.asString() : mFileName);
+ args["REASON"] = reason;
+ LLNotificationsUtil::add("CannotUploadReason", args);
+
+ // unfreeze script preview
+ if(mAssetType == LLAssetType::AT_LSL_TEXT)
+ {
+ LLPreviewLSL* preview = LLFloaterReg::findTypedInstance<LLPreviewLSL>("preview_script", mPostData["item_id"]);
+ if (preview)
+ {
+ LLSD errors;
+ errors.append(LLTrans::getString("UploadFailed") + reason);
+ preview->callbackLSLCompileFailed(errors);
+ }
+ }
+
LLUploadDialog::modalUploadFinished();
LLFilePicker::instance().reset(); // unlock file picker when bulk upload fails
}
@@ -298,8 +308,22 @@ void LLAssetUploadResponder::uploadUpload(const LLSD& content)
void LLAssetUploadResponder::uploadFailure(const LLSD& content)
{
LL_WARNS() << dumpResponse() << LL_ENDL;
+
+ // unfreeze script preview
+ if(mAssetType == LLAssetType::AT_LSL_TEXT)
+ {
+ LLPreviewLSL* preview = LLFloaterReg::findTypedInstance<LLPreviewLSL>("preview_script", mPostData["item_id"]);
+ if (preview)
+ {
+ LLSD errors;
+ errors.append(LLTrans::getString("UploadFailed") + content["message"].asString());
+ preview->callbackLSLCompileFailed(errors);
+ }
+ }
+
// remove the "Uploading..." message
LLUploadDialog::modalUploadFinished();
+
LLFloater* floater_snapshot = LLFloaterReg::findInstance("snapshot");
if (floater_snapshot)
{
@@ -625,7 +649,10 @@ void LLUpdateTaskInventoryResponder::uploadComplete(const LLSD& content)
}
else
{
- LLLiveLSLEditor* preview = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", LLSD(item_id));
+ LLSD floater_key;
+ floater_key["taskid"] = task_id;
+ floater_key["itemid"] = item_id;
+ LLLiveLSLEditor* preview = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", floater_key);
if (preview)
{
// Bytecode save completed
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 8235b13118..8dc8a2ff20 100755
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -745,7 +745,7 @@ namespace action_give_inventory
}
std::string residents;
- LLAvatarActions::buildResidentsString(avatar_names, residents);
+ LLAvatarActions::buildResidentsString(avatar_names, residents, true);
std::string items;
build_items_string(inventory_selected_uuids, items);
@@ -777,7 +777,7 @@ namespace action_give_inventory
}
// static
-void LLAvatarActions::buildResidentsString(std::vector<LLAvatarName> avatar_names, std::string& residents_string)
+void LLAvatarActions::buildResidentsString(std::vector<LLAvatarName> avatar_names, std::string& residents_string, bool complete_name)
{
llassert(avatar_names.size() > 0);
@@ -785,7 +785,15 @@ void LLAvatarActions::buildResidentsString(std::vector<LLAvatarName> avatar_name
const std::string& separator = LLTrans::getString("words_separator");
for (std::vector<LLAvatarName>::const_iterator it = avatar_names.begin(); ; )
{
- residents_string.append((*it).getDisplayName());
+ if(complete_name)
+ {
+ residents_string.append((*it).getCompleteName());
+ }
+ else
+ {
+ residents_string.append((*it).getDisplayName());
+ }
+
if (++it == avatar_names.end())
{
break;
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 85813f2152..bd0ac24e93 100755
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -221,7 +221,7 @@ public:
* @param avatar_names - a vector of given avatar names from which resulting string is built
* @param residents_string - the resulting string
*/
- static void buildResidentsString(std::vector<LLAvatarName> avatar_names, std::string& residents_string);
+ static void buildResidentsString(std::vector<LLAvatarName> avatar_names, std::string& residents_string, bool complete_name = false);
/**
* Builds a string of residents' display names separated by "words_separator" string.
diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp
index d7c959ccd6..25a5df9781 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/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
index afbb73ee08..b6c5496c17 100755
--- a/indra/newview/llcallingcard.cpp
+++ b/indra/newview/llcallingcard.cpp
@@ -860,7 +860,7 @@ bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship
{
LLAvatarName av_name;
LLAvatarNameCache::get( buddy_id, &av_name);
- buddy_map_t::value_type value(av_name.getDisplayName(), buddy_id);
+ buddy_map_t::value_type value(buddy_id, av_name.getDisplayName());
if(buddy->isOnline() && buddy->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION))
{
mMappable.insert(value);
@@ -871,7 +871,7 @@ bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship
bool LLCollectOnlineBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy)
{
gCacheName->getFullName(buddy_id, mFullName);
- buddy_map_t::value_type value(mFullName, buddy_id);
+ buddy_map_t::value_type value(buddy_id, mFullName);
if(buddy->isOnline())
{
mOnline.insert(value);
@@ -883,8 +883,8 @@ bool LLCollectAllBuddies::operator()(const LLUUID& buddy_id, LLRelationship* bud
{
LLAvatarName av_name;
LLAvatarNameCache::get(buddy_id, &av_name);
- mFullName = av_name.getDisplayName();
- buddy_map_t::value_type value(mFullName, buddy_id);
+ mFullName = av_name.getCompleteName();
+ buddy_map_t::value_type value(buddy_id, mFullName);
if(buddy->isOnline())
{
mOnline.insert(value);
diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h
index 8803cce59d..6e5fc01cd8 100755
--- a/indra/newview/llcallingcard.h
+++ b/indra/newview/llcallingcard.h
@@ -233,7 +233,7 @@ public:
LLCollectMappableBuddies() {}
virtual ~LLCollectMappableBuddies() {}
virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
- typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
+ typedef std::map<LLUUID, std::string> buddy_map_t;
buddy_map_t mMappable;
std::string mFullName;
};
@@ -245,7 +245,7 @@ public:
LLCollectOnlineBuddies() {}
virtual ~LLCollectOnlineBuddies() {}
virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
- typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
+ typedef std::map<LLUUID, std::string> buddy_map_t;
buddy_map_t mOnline;
std::string mFullName;
};
@@ -258,7 +258,7 @@ public:
LLCollectAllBuddies() {}
virtual ~LLCollectAllBuddies() {}
virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
- typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
+ typedef std::map<LLUUID, std::string> buddy_map_t;
buddy_map_t mOnline;
buddy_map_t mOffline;
std::string mFullName;
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 84b9ac756a..f0bd63ba46 100755
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -1113,7 +1113,15 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
if (irc_me && !use_plain_text_chat_history)
{
- message = chat.mFromName + message;
+ std::string from_name = chat.mFromName;
+ LLAvatarName av_name;
+ if (!chat.mFromID.isNull() &&
+ LLAvatarNameCache::get(chat.mFromID, &av_name) &&
+ !av_name.isDisplayNameDefault())
+ {
+ from_name = av_name.getCompleteName();
+ }
+ message = from_name + message;
}
if (square_brackets)
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index ce8878b849..dedb06c945 100755
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -378,6 +378,14 @@ BOOL LLIMChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
return TRUE;
}
+void LLIMChiclet::hidePopupMenu()
+{
+ if (mPopupMenu)
+ {
+ mPopupMenu->setVisible(FALSE);
+ }
+}
+
bool LLIMChiclet::canCreateMenu()
{
if(mPopupMenu)
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index d5e3a55fdf..9201c6bc00 100755
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -305,6 +305,8 @@ public:
*/
virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
+ void hidePopupMenu();
+
protected:
LLIMChiclet(const LLIMChiclet::Params& p);
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
index 8d1a8c58f3..254e3f61a8 100755
--- a/indra/newview/llchicletbar.cpp
+++ b/indra/newview/llchicletbar.cpp
@@ -36,16 +36,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/llconversationview.cpp b/indra/newview/llconversationview.cpp
index 4250aeacd6..b18e543f0a 100644
--- a/indra/newview/llconversationview.cpp
+++ b/indra/newview/llconversationview.cpp
@@ -296,7 +296,7 @@ BOOL LLConversationViewSession::handleMouseUp( S32 x, S32 y, MASK mask )
LLFloater* volume_floater = LLFloaterReg::findInstance("floater_voice_volume");
LLFloater* chat_volume_floater = LLFloaterReg::findInstance("chat_voice");
if (result
- && getRoot()
+ && getRoot() && (getRoot()->getCurSelectedItem() == this)
&& !(volume_floater && volume_floater->isShown() && volume_floater->hasFocus())
&& !(chat_volume_floater && chat_volume_floater->isShown() && chat_volume_floater->hasFocus()))
{
diff --git a/indra/newview/lldaycyclemanager.cpp b/indra/newview/lldaycyclemanager.cpp
index 131675310e..803e2b2fb2 100755
--- a/indra/newview/lldaycyclemanager.cpp
+++ b/indra/newview/lldaycyclemanager.cpp
@@ -207,7 +207,7 @@ bool LLDayCycleManager::addPreset(const std::string& name, const LLSD& data)
{
if (name.empty())
{
- llassert(name.empty());
+ //llassert(name.empty());
return false;
}
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index c56006d9a3..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();
}
}
@@ -1117,7 +1116,14 @@ LLSpatialPartition* LLDrawable::getSpatialPartition()
retval = gPipeline.getSpatialPartition((LLViewerObject*) mVObjp);
}
else if (isRoot())
- { //must be an active volume
+ {
+ if (mSpatialBridge && (mSpatialBridge->asPartition()->mPartitionType == LLViewerRegion::PARTITION_HUD) != mVObjp->isHUDAttachment())
+ {
+ // remove obsolete bridge
+ mSpatialBridge->markDead();
+ setSpatialBridge(NULL);
+ }
+ //must be an active volume
if (!mSpatialBridge)
{
if (mVObjp->isHUDAttachment())
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/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
index 41d378fea1..a626ad1bff 100755
--- a/indra/newview/llenvmanager.cpp
+++ b/indra/newview/llenvmanager.cpp
@@ -303,7 +303,8 @@ void LLEnvManagerNew::loadUserPrefs()
mUserPrefs.mSkyPresetName = gSavedSettings.getString("SkyPresetName");
mUserPrefs.mDayCycleName = gSavedSettings.getString("DayCycleName");
- mUserPrefs.mUseRegionSettings = gSavedSettings.getBOOL("UseEnvironmentFromRegion");
+ bool use_region_settings = gSavedSettings.getBOOL("EnvironmentPersistAcrossLogin") ? gSavedSettings.getBOOL("UseEnvironmentFromRegion") : true;
+ mUserPrefs.mUseRegionSettings = use_region_settings;
mUserPrefs.mUseDayCycle = gSavedSettings.getBOOL("UseDayCycle");
if (mUserPrefs.mUseRegionSettings)
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 32b510b21a..de349a03d4 100755
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -330,24 +330,52 @@ void LLFace::dirtyTexture()
{
vobj->mLODChanged = TRUE;
- LLVOAvatar* avatar = vobj->getAvatar();
- if (avatar)
- { //avatar render cost may have changed
- avatar->updateVisualComplexity();
- }
+ LLVOAvatar* avatar = vobj->getAvatar();
+ if (avatar)
+ { //avatar render cost may have changed
+ avatar->updateVisualComplexity();
+ }
}
gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME, FALSE);
}
}
}
-
+
gPipeline.markTextured(drawablep);
}
+void LLFace::notifyAboutCreatingTexture(LLViewerTexture *texture)
+{
+ LLDrawable* drawablep = getDrawable();
+ if(mVObjp.notNull() && mVObjp->getVolume())
+ {
+ LLVOVolume *vobj = drawablep->getVOVolume();
+ if(vobj && vobj->notifyAboutCreatingTexture(texture))
+ {
+ gPipeline.markTextured(drawablep);
+ gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME);
+ }
+ }
+}
+
+void LLFace::notifyAboutMissingAsset(LLViewerTexture *texture)
+{
+ LLDrawable* drawablep = getDrawable();
+ if(mVObjp.notNull() && mVObjp->getVolume())
+ {
+ LLVOVolume *vobj = drawablep->getVOVolume();
+ if(vobj && vobj->notifyAboutMissingAsset(texture))
+ {
+ gPipeline.markTextured(drawablep);
+ gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME);
+ }
+ }
+}
+
void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)
{
llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);
-
+
if(mTexture[ch] == new_texture)
{
return ;
@@ -956,6 +984,10 @@ void LLFace::getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_po
const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset);
const LLVector4a& normal4a = vf.mNormals[0];
const LLVector4a& tangent = vf.mTangents[0];
+ if (!&tangent)
+ {
+ return;
+ }
LLVector4a binormal4a;
binormal4a.setCross3(normal4a, tangent);
@@ -1299,15 +1331,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
}
if (shiny_in_alpha)
- {
-
- GLfloat alpha[4] =
{
- 0.00f,
- 0.25f,
- 0.5f,
- 0.75f
- };
+
+ static const GLfloat alpha[4] =
+ {
+ 0.00f,
+ 0.25f,
+ 0.5f,
+ 0.75f
+ };
llassert(tep->getShiny() <= 3);
color.mV[3] = U8 (alpha[tep->getShiny()] * 255);
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
index d3a561facc..ee545acb94 100755
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -218,7 +218,7 @@ public:
void setHasMedia(bool has_media) { mHasMedia = has_media ;}
BOOL hasMedia() const ;
- BOOL switchTexture() ;
+ BOOL switchTexture() ;
//vertex buffer tracking
void setVertexBuffer(LLVertexBuffer* buffer);
@@ -230,10 +230,13 @@ public:
static U32 getRiggedDataMask(U32 type);
+ void notifyAboutCreatingTexture(LLViewerTexture *texture);
+ void notifyAboutMissingAsset(LLViewerTexture *texture);
+
public: //aligned members
LLVector4a mExtents[2];
-private:
+private:
F32 adjustPartialOverlapPixelArea(F32 cos_angle_to_view_dir, F32 radius );
BOOL calcPixelArea(F32& cos_angle_to_view_dir, F32& radius) ;
public:
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/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
index 513c33e60d..566a3c9cd3 100755
--- a/indra/newview/llfloateravatarpicker.cpp
+++ b/indra/newview/llfloateravatarpicker.cpp
@@ -348,11 +348,11 @@ void LLFloaterAvatarPicker::populateFriend()
for(it = collector.mOnline.begin(); it!=collector.mOnline.end(); it++)
{
- friends_scroller->addStringUUIDItem(it->first, it->second);
+ friends_scroller->addStringUUIDItem(it->second, it->first);
}
for(it = collector.mOffline.begin(); it!=collector.mOffline.end(); it++)
{
- friends_scroller->addStringUUIDItem(it->first, it->second);
+ friends_scroller->addStringUUIDItem(it->second, it->first);
}
friends_scroller->sortByColumnIndex(0, TRUE);
}
diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
index ad44c509d9..34904cf7ed 100755
--- a/indra/newview/llfloaterbump.cpp
+++ b/indra/newview/llfloaterbump.cpp
@@ -30,10 +30,17 @@
#include "llsd.h"
#include "mean_collision_data.h"
+#include "llavataractions.h"
#include "llfloaterbump.h"
+#include "llfloaterreporter.h"
+#include "llmutelist.h"
+#include "llpanelblockedlist.h"
#include "llscrolllistctrl.h"
+#include "lltrans.h"
#include "lluictrlfactory.h"
#include "llviewermessage.h"
+#include "llviewermenu.h"
+#include "llviewerobjectlist.h"
///----------------------------------------------------------------------------
/// Class LLFloaterBump
@@ -43,6 +50,18 @@
LLFloaterBump::LLFloaterBump(const LLSD& key)
: LLFloater(key)
{
+ mCommitCallbackRegistrar.add("Avatar.SendIM", boost::bind(&LLFloaterBump::startIM, this));
+ mCommitCallbackRegistrar.add("Avatar.ReportAbuse", boost::bind(&LLFloaterBump::reportAbuse, this));
+ mCommitCallbackRegistrar.add("ShowAgentProfile", boost::bind(&LLFloaterBump::showProfile, this));
+ mCommitCallbackRegistrar.add("Avatar.InviteToGroup", boost::bind(&LLFloaterBump::inviteToGroup, this));
+ mCommitCallbackRegistrar.add("Avatar.Call", boost::bind(&LLFloaterBump::startCall, this));
+ mEnableCallbackRegistrar.add("Avatar.EnableCall", boost::bind(&LLAvatarActions::canCall));
+ mCommitCallbackRegistrar.add("Avatar.AddFriend", boost::bind(&LLFloaterBump::addFriend, this));
+ mEnableCallbackRegistrar.add("Avatar.EnableAddFriend", boost::bind(&LLFloaterBump::enableAddFriend, this));
+ mCommitCallbackRegistrar.add("Avatar.Mute", boost::bind(&LLFloaterBump::muteAvatar, this));
+ mEnableCallbackRegistrar.add("Avatar.EnableMute", boost::bind(&LLFloaterBump::enableMute, this));
+ mCommitCallbackRegistrar.add("PayObject", boost::bind(&LLFloaterBump::payAvatar, this));
+ mCommitCallbackRegistrar.add("Tools.LookAtSelection", boost::bind(&LLFloaterBump::zoomInAvatar, this));
}
@@ -51,13 +70,25 @@ LLFloaterBump::~LLFloaterBump()
{
}
+BOOL LLFloaterBump::postBuild()
+{
+ mList = getChild<LLScrollListCtrl>("bump_list");
+ mList->setAllowMultipleSelection(false);
+ mList->setRightMouseDownCallback(boost::bind(&LLFloaterBump::onScrollListRightClicked, this, _1, _2, _3));
+
+ mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>("menu_avatar_other.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ mPopupMenu->setItemVisible(std::string("Normal"), false);
+ mPopupMenu->setItemVisible(std::string("Always use impostor"), false);
+ mPopupMenu->setItemVisible(std::string("Never use impostor"), false);
+ mPopupMenu->setItemVisible(std::string("Impostor seperator"), false);
+
+ return TRUE;
+}
// virtual
void LLFloaterBump::onOpen(const LLSD& key)
{
- LLScrollListCtrl* list = getChild<LLScrollListCtrl>("bump_list");
- if (!list)
- return;
- list->deleteAllItems();
+ mNames.clear();
+ mList->deleteAllItems();
if (gMeanCollisionList.empty())
{
@@ -65,7 +96,7 @@ void LLFloaterBump::onOpen(const LLSD& key)
LLSD row;
row["columns"][0]["value"] = none_detected;
row["columns"][0]["font"] = "SansSerifBold";
- list->addElement(row);
+ mList->addElement(row);
}
else
{
@@ -73,7 +104,7 @@ void LLFloaterBump::onOpen(const LLSD& key)
iter != gMeanCollisionList.end(); ++iter)
{
LLMeanCollisionData *mcd = *iter;
- add(list, mcd);
+ add(mList, mcd);
}
}
}
@@ -125,4 +156,94 @@ void LLFloaterBump::add(LLScrollListCtrl* list, LLMeanCollisionData* mcd)
row["columns"][0]["value"] = text;
row["columns"][0]["font"] = "SansSerifBold";
list->addElement(row);
+
+
+ mNames[mcd->mPerp] = mcd->mFullName;
+}
+
+
+void LLFloaterBump::onScrollListRightClicked(LLUICtrl* ctrl, S32 x, S32 y)
+{
+ if (!gMeanCollisionList.empty())
+ {
+ LLScrollListItem* item = mList->hitItem(x, y);
+ if (item && mPopupMenu)
+ {
+ mItemUUID = item->getUUID();
+ mPopupMenu->buildDrawLabels();
+ mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
+
+ std::string mute_msg = (LLMuteList::getInstance()->isMuted(mItemUUID, mNames[mItemUUID])) ? "UnmuteAvatar" : "MuteAvatar";
+ mPopupMenu->getChild<LLUICtrl>("Avatar Mute")->setValue(LLTrans::getString(mute_msg));
+ mPopupMenu->setItemEnabled(std::string("Zoom In"), (BOOL)gObjectList.findObject(mItemUUID));
+
+ ((LLContextMenu*)mPopupMenu)->show(x, y);
+ LLMenuGL::showPopup(ctrl, mPopupMenu, x, y);
+ }
+ }
+}
+
+
+void LLFloaterBump::startIM()
+{
+ LLAvatarActions::startIM(mItemUUID);
+}
+
+void LLFloaterBump::startCall()
+{
+ LLAvatarActions::startCall(mItemUUID);
+}
+
+void LLFloaterBump::reportAbuse()
+{
+ LLFloaterReporter::showFromAvatar(mItemUUID, "av_name");
+}
+
+void LLFloaterBump::showProfile()
+{
+ LLAvatarActions::showProfile(mItemUUID);
+}
+
+void LLFloaterBump::addFriend()
+{
+ LLAvatarActions::requestFriendshipDialog(mItemUUID);
+}
+
+bool LLFloaterBump::enableAddFriend()
+{
+ return !LLAvatarActions::isFriend(mItemUUID);
+}
+
+void LLFloaterBump::muteAvatar()
+{
+ LLMute mute(mItemUUID, mNames[mItemUUID], LLMute::AGENT);
+ if (LLMuteList::getInstance()->isMuted(mute.mID))
+ {
+ LLMuteList::getInstance()->remove(mute);
+ }
+ else
+ {
+ LLMuteList::getInstance()->add(mute);
+ LLPanelBlockedList::showPanelAndSelect(mute.mID);
+ }
+}
+
+void LLFloaterBump::payAvatar()
+{
+ LLAvatarActions::pay(mItemUUID);
+}
+
+void LLFloaterBump::zoomInAvatar()
+{
+ handle_zoom_to_object(mItemUUID);
+}
+
+bool LLFloaterBump::enableMute()
+{
+ return LLAvatarActions::canBlock(mItemUUID);
+}
+
+void LLFloaterBump::inviteToGroup()
+{
+ LLAvatarActions::inviteToGroup(mItemUUID);
}
diff --git a/indra/newview/llfloaterbump.h b/indra/newview/llfloaterbump.h
index 5acab6da8c..11b7db9fee 100755
--- a/indra/newview/llfloaterbump.h
+++ b/indra/newview/llfloaterbump.h
@@ -29,6 +29,7 @@
#define LL_LLFLOATERBUMP_H
#include "llfloater.h"
+#include "llmenugl.h"
class LLMeanCollisionData;
class LLScrollListCtrl;
@@ -39,14 +40,36 @@ class LLFloaterBump
friend class LLFloaterReg;
protected:
void add(LLScrollListCtrl* list, LLMeanCollisionData *mcd);
+ void onScrollListRightClicked(LLUICtrl* ctrl, S32 x, S32 y);
public:
+ /*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
+ void startIM();
+ void startCall();
+ void reportAbuse();
+ void showProfile();
+ void addFriend();
+ void inviteToGroup();
+ bool enableAddFriend();
+ void muteAvatar();
+ void payAvatar();
+ void zoomInAvatar();
+ bool enableMute();
+
private:
LLFloaterBump(const LLSD& key);
virtual ~LLFloaterBump();
+
+ LLScrollListCtrl* mList;
+ LLMenuGL* mPopupMenu;
+ LLUUID mItemUUID;
+
+ typedef std::map<LLUUID, std::string> uuid_map_t;
+ uuid_map_t mNames;
+
};
#endif
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 d0939b3eee..20d650fa37 100755
--- a/indra/newview/llfloatercamera.cpp
+++ b/indra/newview/llfloatercamera.cpp
@@ -32,6 +32,7 @@
#include "llfloaterreg.h"
// Viewer includes
+#include "llagent.h"
#include "llagentcamera.h"
#include "lljoystickbutton.h"
#include "llviewercontrol.h"
@@ -47,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"
@@ -342,6 +341,8 @@ void LLFloaterCamera::onClose(bool app_quitting)
switchMode(CAMERA_CTRL_MODE_PAN);
mClosed = TRUE;
+
+ gAgent.setMovementLocked(FALSE);
}
LLFloaterCamera::LLFloaterCamera(const LLSD& val)
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 0c59ba9a6d..535cb368bd 100755
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -342,11 +342,6 @@ void LLFloaterColorPicker::setCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn )
curG = curGIn;
curB = curBIn;
- if (mApplyImmediateCheck->get())
- {
- LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
- }
-
// update corresponding HSL values and
LLColor3(curRIn, curGIn, curBIn).calcHSL(&curH, &curS, &curL);
@@ -374,11 +369,6 @@ void LLFloaterColorPicker::setCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn )
// update corresponding RGB values and
hslToRgb ( curH, curS, curL, curR, curG, curB );
-
- if (mApplyImmediateCheck->get())
- {
- LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
- }
}
//////////////////////////////////////////////////////////////////////////////
@@ -467,7 +457,8 @@ void LLFloaterColorPicker::onImmediateCheck( LLUICtrl* ctrl, void* data)
void LLFloaterColorPicker::onColorSelect( const LLTextureEntry& te )
{
- setCurRgb(te.getColor().mV[VRED], te.getColor().mV[VGREEN], te.getColor().mV[VBLUE]);
+ // Pipete
+ selectCurRgb(te.getColor().mV[VRED], te.getColor().mV[VGREEN], te.getColor().mV[VBLUE]);
}
void LLFloaterColorPicker::onMouseCaptureLost()
@@ -643,6 +634,28 @@ const LLColor4& LLFloaterColorPicker::getComplimentaryColor ( const LLColor4& ba
}
//////////////////////////////////////////////////////////////////////////////
+// set current RGB and rise change event if needed.
+void LLFloaterColorPicker::selectCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn )
+{
+ setCurRgb(curRIn, curGIn, curBIn);
+ if (mApplyImmediateCheck->get())
+ {
+ LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
+// set current HSL and rise change event if needed.
+void LLFloaterColorPicker::selectCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn )
+{
+ setCurHsl(curHIn, curSIn, curLIn);
+ if (mApplyImmediateCheck->get())
+ {
+ LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////////
// draw color palette
void LLFloaterColorPicker::drawPalette ()
{
@@ -736,7 +749,7 @@ void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl )
}
// update current RGB (and implicitly HSL)
- setCurRgb ( rVal, gVal, bVal );
+ selectCurRgb ( rVal, gVal, bVal );
updateTextEntry ();
}
@@ -759,15 +772,10 @@ void LLFloaterColorPicker::onTextEntryChanged ( LLUICtrl* ctrl )
lVal = (F32)ctrl->getValue().asReal() / 100.0f;
// update current HSL (and implicitly RGB)
- setCurHsl ( hVal, sVal, lVal );
+ selectCurHsl ( hVal, sVal, lVal );
updateTextEntry ();
}
-
- if (mApplyImmediateCheck->get())
- {
- LLColorSwatchCtrl::onColorChanged ( getSwatch (), LLColorSwatchCtrl::COLOR_CHANGE );
- }
}
//////////////////////////////////////////////////////////////////////////////
@@ -780,7 +788,7 @@ BOOL LLFloaterColorPicker::updateRgbHslFromPoint ( S32 xPosIn, S32 yPosIn )
yPosIn >= mRGBViewerImageTop - mRGBViewerImageHeight )
{
// update HSL (and therefore RGB) based on new H & S and current L
- setCurHsl ( ( ( F32 )xPosIn - ( F32 )mRGBViewerImageLeft ) / ( F32 )mRGBViewerImageWidth,
+ selectCurHsl ( ( ( F32 )xPosIn - ( F32 )mRGBViewerImageLeft ) / ( F32 )mRGBViewerImageWidth,
( ( F32 )yPosIn - ( ( F32 )mRGBViewerImageTop - ( F32 )mRGBViewerImageHeight ) ) / ( F32 )mRGBViewerImageHeight,
getCurL () );
@@ -795,7 +803,7 @@ BOOL LLFloaterColorPicker::updateRgbHslFromPoint ( S32 xPosIn, S32 yPosIn )
{
// update HSL (and therefore RGB) based on current HS and new L
- setCurHsl ( getCurH (),
+ selectCurHsl ( getCurH (),
getCurS (),
( ( F32 )yPosIn - ( ( F32 )mRGBViewerImageTop - ( F32 )mRGBViewerImageHeight ) ) / ( F32 )mRGBViewerImageHeight );
@@ -887,7 +895,7 @@ BOOL LLFloaterColorPicker::handleMouseDown ( S32 x, S32 y, MASK mask )
{
LLColor4 selected = *mPalette [ index ];
- setCurRgb ( selected [ 0 ], selected [ 1 ], selected [ 2 ] );
+ selectCurRgb ( selected [ 0 ], selected [ 1 ], selected [ 2 ] );
if (mApplyImmediateCheck->get())
{
diff --git a/indra/newview/llfloatercolorpicker.h b/indra/newview/llfloatercolorpicker.h
index d4d22b643a..8c16ebdf03 100755
--- a/indra/newview/llfloatercolorpicker.h
+++ b/indra/newview/llfloatercolorpicker.h
@@ -122,6 +122,9 @@ class LLFloaterColorPicker
static void onImmediateCheck ( LLUICtrl* ctrl, void* data );
void onColorSelect( const class LLTextureEntry& te );
private:
+ // mutators for color values, can raise event to preview changes at object
+ void selectCurRgb ( F32 curRIn, F32 curGIn, F32 curBIn );
+ void selectCurHsl ( F32 curHIn, F32 curSIn, F32 curLIn );
// draws color selection palette
void drawPalette ();
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 36afab86b7..cd132b843d 100644
--- a/indra/newview/llfloaterflickr.cpp
+++ b/indra/newview/llfloaterflickr.cpp
@@ -51,11 +51,10 @@
#include "lltabcontainer.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
-
+#include <boost/regex.hpp>
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";
@@ -345,7 +344,12 @@ void LLFlickrPhotoPanel::sendPhoto()
std::string parcel_name = LLViewerParcelMgr::getInstance()->getAgentParcelName();
if (!parcel_name.empty())
{
- photo_link_text += " at " + parcel_name;
+ boost::regex pattern = boost::regex("\\S\\.[a-zA-Z]{2,}");
+ boost::match_results<std::string::const_iterator> matches;
+ if(!boost::regex_search(parcel_name, matches, pattern))
+ {
+ photo_link_text += " at " + parcel_name;
+ }
}
photo_link_text += " in Second Life";
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/llfloaterhoverheight.cpp b/indra/newview/llfloaterhoverheight.cpp
new file mode 100755
index 0000000000..8908626de6
--- /dev/null
+++ b/indra/newview/llfloaterhoverheight.cpp
@@ -0,0 +1,157 @@
+/**
+* @file llfloaterhoverheight.cpp
+* @brief Controller for self avatar hover height
+* @author vir@lindenlab.com
+*
+* $LicenseInfo:firstyear=2014&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2014, 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
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+* $/LicenseInfo$
+*/
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterhoverheight.h"
+#include "llsliderctrl.h"
+#include "llviewercontrol.h"
+#include "llsdserialize.h"
+#include "llhttpclient.h"
+#include "llagent.h"
+#include "llviewerregion.h"
+#include "llvoavatarself.h"
+
+LLFloaterHoverHeight::LLFloaterHoverHeight(const LLSD& key) : LLFloater(key)
+{
+}
+
+void LLFloaterHoverHeight::syncFromPreferenceSetting(void *user_data)
+{
+ F32 value = gSavedPerAccountSettings.getF32("AvatarHoverOffsetZ");
+
+ LLFloaterHoverHeight *self = static_cast<LLFloaterHoverHeight*>(user_data);
+ LLSliderCtrl* sldrCtrl = self->getChild<LLSliderCtrl>("HoverHeightSlider");
+ sldrCtrl->setValue(value,FALSE);
+
+ if (isAgentAvatarValid())
+ {
+ LLVector3 offset(0.0, 0.0, llclamp(value,MIN_HOVER_Z,MAX_HOVER_Z));
+ LL_INFOS("Avatar") << "setting hover from preference setting " << offset[2] << LL_ENDL;
+ gAgentAvatarp->setHoverOffset(offset);
+ //gAgentAvatarp->sendHoverHeight();
+ }
+}
+
+BOOL LLFloaterHoverHeight::postBuild()
+{
+ LLSliderCtrl* sldrCtrl = getChild<LLSliderCtrl>("HoverHeightSlider");
+ sldrCtrl->setMinValue(MIN_HOVER_Z);
+ sldrCtrl->setMaxValue(MAX_HOVER_Z);
+ sldrCtrl->setSliderMouseUpCallback(boost::bind(&LLFloaterHoverHeight::onFinalCommit,this));
+ sldrCtrl->setSliderEditorCommitCallback(boost::bind(&LLFloaterHoverHeight::onFinalCommit,this));
+ childSetCommitCallback("HoverHeightSlider", &LLFloaterHoverHeight::onSliderMoved, NULL);
+
+ // Initialize slider from pref setting.
+ syncFromPreferenceSetting(this);
+ // Update slider on future pref changes.
+ if (gSavedPerAccountSettings.getControl("AvatarHoverOffsetZ"))
+ {
+ gSavedPerAccountSettings.getControl("AvatarHoverOffsetZ")->getCommitSignal()->connect(boost::bind(&syncFromPreferenceSetting, this));
+ }
+ else
+ {
+ LL_WARNS() << "Control not found for AvatarHoverOffsetZ" << LL_ENDL;
+ }
+
+ updateEditEnabled();
+
+ if (!mRegionChangedSlot.connected())
+ {
+ mRegionChangedSlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterHoverHeight::onRegionChanged,this));
+ }
+ // Set up based on initial region.
+ onRegionChanged();
+
+ return TRUE;
+}
+
+void LLFloaterHoverHeight::onClose(bool app_quitting)
+{
+ if (mRegionChangedSlot.connected())
+ {
+ mRegionChangedSlot.disconnect();
+ }
+}
+
+// static
+void LLFloaterHoverHeight::onSliderMoved(LLUICtrl* ctrl, void* userData)
+{
+ LLSliderCtrl* sldrCtrl = static_cast<LLSliderCtrl*>(ctrl);
+ F32 value = sldrCtrl->getValueF32();
+ LLVector3 offset(0.0, 0.0, llclamp(value,MIN_HOVER_Z,MAX_HOVER_Z));
+ LL_INFOS("Avatar") << "setting hover from slider moved" << offset[2] << LL_ENDL;
+ gAgentAvatarp->setHoverOffset(offset, false);
+}
+
+// Do send-to-the-server work when slider drag completes, or new
+// value entered as text.
+void LLFloaterHoverHeight::onFinalCommit()
+{
+ LLSliderCtrl* sldrCtrl = getChild<LLSliderCtrl>("HoverHeightSlider");
+ F32 value = sldrCtrl->getValueF32();
+ gSavedPerAccountSettings.setF32("AvatarHoverOffsetZ",value);
+
+ LLVector3 offset(0.0, 0.0, llclamp(value,MIN_HOVER_Z,MAX_HOVER_Z));
+ LL_INFOS("Avatar") << "setting hover from slider final commit " << offset[2] << LL_ENDL;
+ gAgentAvatarp->setHoverOffset(offset, true); // will send update this time.
+}
+
+void LLFloaterHoverHeight::onRegionChanged()
+{
+ LLViewerRegion *region = gAgent.getRegion();
+ if (region && region->simulatorFeaturesReceived())
+ {
+ updateEditEnabled();
+ }
+ else if (region)
+ {
+ region->setSimulatorFeaturesReceivedCallback(boost::bind(&LLFloaterHoverHeight::onSimulatorFeaturesReceived,this,_1));
+ }
+}
+
+void LLFloaterHoverHeight::onSimulatorFeaturesReceived(const LLUUID &region_id)
+{
+ LLViewerRegion *region = gAgent.getRegion();
+ if (region && (region->getRegionID()==region_id))
+ {
+ updateEditEnabled();
+ }
+}
+
+void LLFloaterHoverHeight::updateEditEnabled()
+{
+ bool enabled = gAgent.getRegion() && gAgent.getRegion()->avatarHoverHeightEnabled();
+ LLSliderCtrl* sldrCtrl = getChild<LLSliderCtrl>("HoverHeightSlider");
+ sldrCtrl->setEnabled(enabled);
+ if (enabled)
+ {
+ syncFromPreferenceSetting(this);
+ }
+}
+
+
diff --git a/indra/newview/llfloaterhoverheight.h b/indra/newview/llfloaterhoverheight.h
new file mode 100755
index 0000000000..ee065bc184
--- /dev/null
+++ b/indra/newview/llfloaterhoverheight.h
@@ -0,0 +1,52 @@
+/**
+* @file llfloaterhoverheight.h
+* @brief Controller for self avatar hover height.
+* @author vir@lindenlab.com
+*
+* $LicenseInfo:firstyear=2014&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2014, 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
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+* $/LicenseInfo$
+*/
+#ifndef LL_LLFLOATERHOVERHEIGHT_H
+#define LL_LLFLOATERHOVERHEIGHT_H
+
+#include "llfloater.h"
+
+class LLFloaterHoverHeight: public LLFloater
+{
+public:
+ LLFloaterHoverHeight(const LLSD& key);
+ BOOL postBuild();
+
+ static void onSliderMoved(LLUICtrl* ctrl, void* userData);
+
+ void onFinalCommit();
+
+ static void syncFromPreferenceSetting(void *user_data);
+
+ void onRegionChanged();
+ void onSimulatorFeaturesReceived(const LLUUID &region_id);
+ void updateEditEnabled();
+
+ /*virtual*/ void onClose(bool app_quitting);
+ boost::signals2::connection mRegionChangedSlot;
+};
+
+#endif
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/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
index 2864f018b2..357b635594 100755
--- a/indra/newview/llfloaterimsessiontab.cpp
+++ b/indra/newview/llfloaterimsessiontab.cpp
@@ -118,6 +118,7 @@ LLFloaterIMSessionTab* LLFloaterIMSessionTab::getConversation(const LLUUID& uuid
else
{
conv = LLFloaterReg::getTypedInstance<LLFloaterIMSessionTab>("impanel", LLSD(uuid));
+ conv->setOpenPositioning(LLFloaterEnums::POSITIONING_RELATIVE);
}
return conv;
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index 5a1dfc99ab..10088d20c2 100755
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -32,6 +32,7 @@
#include "llfloatertools.h"
#include "llavataractions.h"
#include "llavatarnamecache.h"
+#include "llgroupactions.h"
#include "llscrolllistctrl.h"
#include "llscrolllistitem.h"
#include "llselectmgr.h"
@@ -147,8 +148,17 @@ void LLFloaterInspect::onClickOwnerProfile()
LLSelectNode* node = mObjectSelection->getFirstNode(&func);
if(node)
{
- const LLUUID& owner_id = node->mPermissions->getOwner();
- LLAvatarActions::showProfile(owner_id);
+ if(node->mPermissions->isGroupOwned())
+ {
+ const LLUUID& idGroup = node->mPermissions->getGroup();
+ LLGroupActions::show(idGroup);
+ }
+ else
+ {
+ const LLUUID& owner_id = node->mPermissions->getOwner();
+ LLAvatarActions::showProfile(owner_id);
+ }
+
}
}
}
@@ -219,21 +229,42 @@ void LLFloaterInspect::refresh()
const LLUUID& idCreator = obj->mPermissions->getCreator();
LLAvatarName av_name;
- // Only work with the names if we actually get a result
- // from the name cache. If not, defer setting the
- // actual name and set a placeholder.
- if (LLAvatarNameCache::get(idOwner, &av_name))
+ if(obj->mPermissions->isGroupOwned())
{
- owner_name = av_name.getCompleteName();
+ std::string group_name;
+ const LLUUID& idGroup = obj->mPermissions->getGroup();
+ if(gCacheName->getGroupName(idGroup, group_name))
+ {
+ owner_name = "[" + group_name + "] (group)";
+ }
+ else
+ {
+ owner_name = LLTrans::getString("RetrievingData");
+ if (mOwnerNameCacheConnection.connected())
+ {
+ mOwnerNameCacheConnection.disconnect();
+ }
+ mOwnerNameCacheConnection = gCacheName->getGroup(idGroup, boost::bind(&LLFloaterInspect::onGetOwnerNameCallback, this));
+ }
}
else
{
- owner_name = LLTrans::getString("RetrievingData");
- if (mOwnerNameCacheConnection.connected())
+ // Only work with the names if we actually get a result
+ // from the name cache. If not, defer setting the
+ // actual name and set a placeholder.
+ if (LLAvatarNameCache::get(idOwner, &av_name))
+ {
+ owner_name = av_name.getCompleteName();
+ }
+ else
{
- mOwnerNameCacheConnection.disconnect();
+ owner_name = LLTrans::getString("RetrievingData");
+ if (mOwnerNameCacheConnection.connected())
+ {
+ mOwnerNameCacheConnection.disconnect();
+ }
+ mOwnerNameCacheConnection = LLAvatarNameCache::get(idOwner, boost::bind(&LLFloaterInspect::onGetOwnerNameCallback, this));
}
- mOwnerNameCacheConnection = LLAvatarNameCache::get(idOwner, boost::bind(&LLFloaterInspect::onGetOwnerNameCallback, this));
}
if (LLAvatarNameCache::get(idCreator, &av_name))
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 7621c35ed2..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();
@@ -1983,6 +1983,7 @@ void LLPanelLandOptions::refresh()
else
{
// something selected, hooray!
+ LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
// Display options
BOOL can_change_options = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, GP_LAND_OPTIONS);
@@ -1998,8 +1999,9 @@ void LLPanelLandOptions::refresh()
mCheckGroupObjectEntry ->set( parcel->getAllowGroupObjectEntry() || parcel->getAllowAllObjectEntry());
mCheckGroupObjectEntry ->setEnabled( can_change_options && !parcel->getAllowAllObjectEntry() );
+ BOOL region_damage = regionp ? regionp->getAllowDamage() : FALSE;
mCheckSafe ->set( !parcel->getAllowDamage() );
- mCheckSafe ->setEnabled( can_change_options );
+ mCheckSafe ->setEnabled( can_change_options && region_damage );
mCheckFly ->set( parcel->getAllowFly() );
mCheckFly ->setEnabled( can_change_options );
@@ -2049,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));
}
@@ -2079,7 +2081,6 @@ void LLPanelLandOptions::refresh()
// they can see the checkbox, but its disposition depends on the
// state of the region
- LLViewerRegion* regionp = LLViewerParcelMgr::getInstance()->getSelectionRegion();
if (regionp)
{
if (regionp->getSimAccess() == SIM_ACCESS_PG)
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/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 0c81ab7e79..72c9170b06 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -121,12 +121,6 @@ S32 LLFloaterModelPreview::sUploadAmount = 10;
LLFloaterModelPreview* LLFloaterModelPreview::sInstance = NULL;
std::list<LLModelLoader*> LLModelLoader::sActiveLoaderList;
-const S32 PREVIEW_BORDER_WIDTH = 2;
-const S32 PREVIEW_RESIZE_HANDLE_SIZE = S32(RESIZE_HANDLE_WIDTH * OO_SQRT2) + PREVIEW_BORDER_WIDTH;
-const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE;
-const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16;
-const S32 PREVIEW_TEXTURE_HEIGHT = 300;
-
// "Retain%" decomp parameter has values from 0.0 to 1.0 by 0.01
// But according to the UI spec for upload model floater, this parameter
// should be represented by Retain spinner with values from 1 to 100 by 1.
@@ -738,6 +732,11 @@ void LLFloaterModelPreview::toggleGenarateNormals()
{
bool enabled = childGetValue("gen_normals").asBoolean();
childSetEnabled("crease_angle", enabled);
+ if(enabled) {
+ mModelPreview->generateNormals();
+ } else {
+ mModelPreview->restoreNormals();
+ }
}
//static
@@ -2161,7 +2160,7 @@ bool LLModelLoader::loadFromSLM(const std::string& filename)
S32 file_size = (S32) stat.st_size;
- llifstream ifstream(filename, std::ifstream::in | std::ifstream::binary);
+ llifstream ifstream(filename.c_str(), std::ifstream::in | std::ifstream::binary);
LLSD data;
LLSDSerialize::fromBinary(data, ifstream, file_size);
ifstream.close();
@@ -3519,7 +3518,7 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw
data["instance"][i] = instance.asLLSD();
}
- llofstream out(filename, std::ios_base::out | std::ios_base::binary);
+ llofstream out(filename.c_str(), std::ios_base::out | std::ios_base::binary);
LLSDSerialize::toBinary(data, out);
out.flush();
out.close();
@@ -3840,7 +3839,6 @@ void LLModelPreview::generateNormals()
S32 which_lod = mPreviewLOD;
-
if (which_lod > 4 || which_lod < 0 ||
mModel[which_lod].empty())
{
@@ -3855,17 +3853,40 @@ void LLModelPreview::generateNormals()
if (which_lod == 3 && !mBaseModel.empty())
{
- for (LLModelLoader::model_list::iterator iter = mBaseModel.begin(); iter != mBaseModel.end(); ++iter)
+ if(mBaseModelFacesCopy.empty())
{
- (*iter)->generateNormals(angle_cutoff);
+ mBaseModelFacesCopy.reserve(mBaseModel.size());
+ for (LLModelLoader::model_list::iterator it = mBaseModel.begin(), itE = mBaseModel.end(); it != itE; ++it)
+ {
+ v_LLVolumeFace_t faces;
+ (*it)->copyFacesTo(faces);
+ mBaseModelFacesCopy.push_back(faces);
+ }
+ }
+
+ for (LLModelLoader::model_list::iterator it = mBaseModel.begin(), itE = mBaseModel.end(); it != itE; ++it)
+ {
+ (*it)->generateNormals(angle_cutoff);
}
mVertexBuffer[5].clear();
}
- for (LLModelLoader::model_list::iterator iter = mModel[which_lod].begin(); iter != mModel[which_lod].end(); ++iter)
+ bool perform_copy = mModelFacesCopy[which_lod].empty();
+ if(perform_copy) {
+ mModelFacesCopy[which_lod].reserve(mModel[which_lod].size());
+ }
+
+ for (LLModelLoader::model_list::iterator it = mModel[which_lod].begin(), itE = mModel[which_lod].end(); it != itE; ++it)
{
- (*iter)->generateNormals(angle_cutoff);
+ if(perform_copy)
+ {
+ v_LLVolumeFace_t faces;
+ (*it)->copyFacesTo(faces);
+ mModelFacesCopy[which_lod].push_back(faces);
+ }
+
+ (*it)->generateNormals(angle_cutoff);
}
mVertexBuffer[which_lod].clear();
@@ -3873,6 +3894,45 @@ void LLModelPreview::generateNormals()
updateStatusMessages();
}
+void LLModelPreview::restoreNormals()
+{
+ S32 which_lod = mPreviewLOD;
+
+ if (which_lod > 4 || which_lod < 0 ||
+ mModel[which_lod].empty())
+ {
+ return;
+ }
+
+ if(!mBaseModelFacesCopy.empty())
+ {
+ llassert(mBaseModelFacesCopy.size() == mBaseModel.size());
+
+ vv_LLVolumeFace_t::const_iterator itF = mBaseModelFacesCopy.begin();
+ for (LLModelLoader::model_list::iterator it = mBaseModel.begin(), itE = mBaseModel.end(); it != itE; ++it, ++itF)
+ {
+ (*it)->copyFacesFrom((*itF));
+ }
+
+ mBaseModelFacesCopy.clear();
+ }
+
+ if(!mModelFacesCopy[which_lod].empty())
+ {
+ vv_LLVolumeFace_t::const_iterator itF = mModelFacesCopy[which_lod].begin();
+ for (LLModelLoader::model_list::iterator it = mModel[which_lod].begin(), itE = mModel[which_lod].end(); it != itE; ++it, ++itF)
+ {
+ (*it)->copyFacesFrom((*itF));
+ }
+
+ mModelFacesCopy[which_lod].clear();
+ }
+
+ mVertexBuffer[which_lod].clear();
+ refresh();
+ updateStatusMessages();
+}
+
void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit)
{
// Allow LoD from -1 to LLModel::LOD_PHYSICS
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 6c0c60b87f..618748bd4e 100755
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -343,6 +343,7 @@ public:
void loadModelCallback(S32 lod);
void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);
void generateNormals();
+ void restoreNormals();
U32 calcResourceCost();
void rebuildUploadData();
void saveUploadData(bool save_skinweights, bool save_joint_poisitions);
@@ -447,6 +448,12 @@ private:
LLModelLoader::model_list mModel[LLModel::NUM_LODS];
LLModelLoader::model_list mBaseModel;
+ typedef std::vector<LLVolumeFace> v_LLVolumeFace_t;
+ typedef std::vector<v_LLVolumeFace_t> vv_LLVolumeFace_t;
+
+ vv_LLVolumeFace_t mModelFacesCopy[LLModel::NUM_LODS];
+ vv_LLVolumeFace_t mBaseModelFacesCopy;
+
U32 mGroup;
std::map<LLPointer<LLModel>, U32> mObject;
U32 mMaxTriangleLimit;
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/llfloaternotificationstabbed.cpp b/indra/newview/llfloaternotificationstabbed.cpp
index fd5f1486d9..70213680f3 100644
--- a/indra/newview/llfloaternotificationstabbed.cpp
+++ b/indra/newview/llfloaternotificationstabbed.cpp
@@ -402,7 +402,7 @@ void LLFloaterNotificationsTabbed::onStoreToast(LLPanel* info_panel, LLUUID id)
void LLFloaterNotificationsTabbed::onItemClick(LLNotificationListItem* item)
{
LLUUID id = item->getID();
- LLFloaterReg::showInstance("inspect_toast", id);
+ //LLFloaterReg::showInstance("inspect_toast", id);
}
//---------------------------------------------------------------------------------
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 0880a5f35a..042cf47070 100755
--- a/indra/newview/llfloaterperms.cpp
+++ b/indra/newview/llfloaterperms.cpp
@@ -35,6 +35,8 @@
#include "llagent.h"
#include "llviewerregion.h"
#include "llnotificationsutil.h"
+#include "llsdserialize.h"
+#include "llvoavatar.h"
LLFloaterPerms::LLFloaterPerms(const LLSD& seed)
: LLFloater(seed)
@@ -171,8 +173,9 @@ public:
private:
static std::string sPreviousReason;
- void error(U32 status, const std::string& reason)
+ void httpFailure()
{
+ const std::string& reason = getReason();
// Do not display the same error more than once in a row
if (reason != sPreviousReason)
{
@@ -182,13 +185,17 @@ private:
LLNotificationsUtil::add("DefaultObjectPermissions", args);
}
}
- void result(const LLSD& content)
+
+ void httpSuccess()
{
+ //const LLSD& content = getContent();
+ //dump_sequential_xml("perms_responder_result.xml", content);
+
// Since we have had a successful POST call be sure to display the next error message
// 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;
}
};
@@ -216,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 d3773767d0..ee4396758e 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -37,6 +37,7 @@
#include "message.h"
#include "llfloaterautoreplacesettings.h"
#include "llagent.h"
+#include "llagentcamera.h"
#include "llcheckboxctrl.h"
#include "llcolorswatch.h"
#include "llcombobox.h"
@@ -74,6 +75,7 @@
#include "llviewermessage.h"
#include "llviewershadermgr.h"
#include "llviewerthrottle.h"
+#include "llvoavatarself.h"
#include "llvotree.h"
#include "llvosky.h"
#include "llfloaterpathfindingconsole.h"
@@ -109,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";
@@ -251,6 +249,14 @@ void handleDisplayNamesOptionChanged(const LLSD& newvalue)
LLVOAvatar::invalidateNameTags();
}
+void handleAppearanceCameraMovementChanged(const LLSD& newvalue)
+{
+ if(!newvalue.asBoolean() && gAgentCamera.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR)
+ {
+ gAgentCamera.changeCameraToDefault();
+ gAgentCamera.resetView();
+ }
+}
/*bool callback_skip_dialogs(const LLSD& notification, const LLSD& response, LLFloaterPreference* floater)
{
@@ -291,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;
}
}
@@ -361,6 +367,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
gSavedSettings.getControl("NameTagShowFriends")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged, _2));
gSavedSettings.getControl("UseDisplayNames")->getCommitSignal()->connect(boost::bind(&handleDisplayNamesOptionChanged, _2));
+ gSavedSettings.getControl("AppearanceCameraMovement")->getCommitSignal()->connect(boost::bind(&handleAppearanceCameraMovementChanged, _2));
+
LLAvatarPropertiesProcessor::getInstance()->addObserver( gAgent.getID(), this );
mCommitCallbackRegistrar.add("Pref.ClearLog", boost::bind(&LLConversationLog::onClearLog, &LLConversationLog::instance()));
@@ -701,13 +709,13 @@ void LLFloaterPreference::onOpen(const LLSD& key)
maturity_list->deleteItems(LLSD(SIM_ACCESS_ADULT));
}
}
- getChildView("maturity_desired_combobox")->setVisible( true);
+ getChildView("maturity_desired_combobox")->setEnabled( true);
getChildView("maturity_desired_textbox")->setVisible( false);
}
else
{
getChild<LLUICtrl>("maturity_desired_textbox")->setValue(maturity_combo->getSelectedItemLabel());
- getChildView("maturity_desired_combobox")->setVisible( false);
+ getChildView("maturity_desired_combobox")->setEnabled( false);
}
// Forget previous language changes.
@@ -2011,6 +2019,12 @@ void LLPanelPreference::cancel()
{
LLControlVariable* control = iter->first;
LLSD ctrl_value = iter->second;
+
+ if((control->getName() == "InstantMessageLogPath") && (ctrl_value.asString() == ""))
+ {
+ continue;
+ }
+
control->set(ctrl_value);
}
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
index a3bf99f054..6bfc780722 100755
--- a/indra/newview/llfloaterproperties.cpp
+++ b/indra/newview/llfloaterproperties.cpp
@@ -36,6 +36,7 @@
#include "llagent.h"
#include "llbutton.h"
#include "llcheckboxctrl.h"
+#include "llcombobox.h"
#include "llavataractions.h"
#include "llinventorydefines.h"
#include "llinventoryobserver.h"
@@ -143,7 +144,7 @@ BOOL LLFloaterProperties::postBuild()
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitPermissions, this));
// Mark for sale or not, and sale info
getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitSaleInfo, this));
- getChild<LLUICtrl>("RadioSaleType")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitSaleType, this));
+ getChild<LLUICtrl>("ComboBoxSaleType")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitSaleType, this));
// "Price" label for edit
getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLFloaterProperties::onCommitSaleInfo, this));
// The UI has been built, now fill in all the values
@@ -188,7 +189,7 @@ void LLFloaterProperties::refresh()
"CheckNextOwnerCopy",
"CheckNextOwnerTransfer",
"CheckPurchase",
- "RadioSaleType",
+ "ComboBoxSaleType",
"Edit Cost"
};
for(size_t t=0; t<LL_ARRAY_SIZE(enableNames); ++t)
@@ -479,6 +480,9 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
const LLSaleInfo& sale_info = item->getSaleInfo();
BOOL is_for_sale = sale_info.isForSale();
+ LLComboBox* combo_sale_type = getChild<LLComboBox>("ComboBoxSaleType");
+ LLUICtrl* edit_cost = getChild<LLUICtrl>("Edit Cost");
+
// Check for ability to change values.
if (is_obj_modify && can_agent_sell
&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
@@ -491,9 +495,9 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
getChildView("CheckNextOwnerCopy")->setEnabled((base_mask & PERM_COPY) && !cannot_restrict_permissions);
getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
- getChildView("RadioSaleType")->setEnabled(is_complete && is_for_sale);
getChildView("TextPrice")->setEnabled(is_complete && is_for_sale);
- getChildView("Edit Cost")->setEnabled(is_complete && is_for_sale);
+ combo_sale_type->setEnabled(is_complete && is_for_sale);
+ edit_cost->setEnabled(is_complete && is_for_sale);
}
else
{
@@ -505,31 +509,28 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
getChildView("CheckNextOwnerCopy")->setEnabled(FALSE);
getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE);
- getChildView("RadioSaleType")->setEnabled(FALSE);
getChildView("TextPrice")->setEnabled(FALSE);
- getChildView("Edit Cost")->setEnabled(FALSE);
+ combo_sale_type->setEnabled(FALSE);
+ edit_cost->setEnabled(FALSE);
}
// Set values.
getChild<LLUICtrl>("CheckPurchase")->setValue(is_for_sale);
- getChildView("combobox sale copy")->setEnabled(is_for_sale);
- getChildView("Edit Cost")->setEnabled(is_for_sale);
getChild<LLUICtrl>("CheckNextOwnerModify")->setValue(LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
getChild<LLUICtrl>("CheckNextOwnerCopy")->setValue(LLSD(BOOL(next_owner_mask & PERM_COPY)));
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setValue(LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
- LLRadioGroup* radioSaleType = getChild<LLRadioGroup>("RadioSaleType");
if (is_for_sale)
{
- radioSaleType->setSelectedIndex((S32)sale_info.getSaleType() - 1);
S32 numerical_price;
numerical_price = sale_info.getSalePrice();
- getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",numerical_price));
+ edit_cost->setValue(llformat("%d",numerical_price));
+ combo_sale_type->setValue(sale_info.getSaleType());
}
else
{
- radioSaleType->setSelectedIndex(-1);
- getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",0));
+ edit_cost->setValue(llformat("%d",0));
+ combo_sale_type->setValue(LLSaleInfo::FS_COPY);
}
}
@@ -757,25 +758,11 @@ void LLFloaterProperties::updateSaleInfo()
{
// turn on sale info
LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
-
- LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("RadioSaleType");
- if(RadioSaleType)
+
+ LLComboBox* combo_sale_type = getChild<LLComboBox>("ComboBoxSaleType");
+ if (combo_sale_type)
{
- switch (RadioSaleType->getSelectedIndex())
- {
- case 0:
- sale_type = LLSaleInfo::FS_ORIGINAL;
- break;
- case 1:
- sale_type = LLSaleInfo::FS_COPY;
- break;
- case 2:
- sale_type = LLSaleInfo::FS_CONTENTS;
- break;
- default:
- sale_type = LLSaleInfo::FS_COPY;
- break;
- }
+ sale_type = static_cast<LLSaleInfo::EForSale>(combo_sale_type->getValue().asInteger());
}
if (sale_type == LLSaleInfo::FS_COPY
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 8677028942..b27a42cb8e 100755
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -367,8 +367,6 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
LLViewerWindow::ESnapshotType layer_type = getLayerType(floater);
floater->getChild<LLComboBox>("local_format_combo")->selectNthItem(gSavedSettings.getS32("SnapshotFormat"));
- enableAspectRatioCheckbox(floater, !floater->impl.mAspectRatioCheckOff);
- setAspectRatioCheckboxValue(floater, gSavedSettings.getBOOL("KeepAspectForSnapshot"));
floater->getChildView("layer_types")->setEnabled(shot_type == LLSnapshotLivePreview::SNAPSHOT_LOCAL);
LLPanelSnapshot* active_panel = getActivePanel(floater);
@@ -383,12 +381,20 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
S32 w = gViewerWindow->getWindowWidthRaw();
LL_DEBUGS() << "Initializing width spinner (" << width_ctrl->getName() << "): " << w << LL_ENDL;
width_ctrl->setValue(w);
+ if(getActiveSnapshotType(floater) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ width_ctrl->setIncrement(w >> 1);
+ }
}
if (height_ctrl->getValue().asInteger() == 0)
{
S32 h = gViewerWindow->getWindowHeightRaw();
LL_DEBUGS() << "Initializing height spinner (" << height_ctrl->getName() << "): " << h << LL_ENDL;
height_ctrl->setValue(h);
+ if(getActiveSnapshotType(floater) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ height_ctrl->setIncrement(h >> 1);
+ }
}
// Clamp snapshot resolution to window size when showing UI or HUD in snapshot.
@@ -470,8 +476,9 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
default:
break;
}
-
- if (previewp)
+ setAspectRatioCheckboxValue(floater, !floater->impl.mAspectRatioCheckOff && gSavedSettings.getBOOL("KeepAspectForSnapshot"));
+
+ if (previewp)
{
previewp->setSnapshotType(shot_type);
previewp->setSnapshotFormat(shot_format);
@@ -546,7 +553,7 @@ void LLFloaterSnapshot::Impl::onClickNewSnapshot(void* data)
{
view->impl.setStatus(Impl::STATUS_READY);
LL_DEBUGS() << "updating snapshot" << LL_ENDL;
- previewp->updateSnapshot(TRUE);
+ previewp->mForceUpdateSnapshot = TRUE;
}
}
@@ -619,6 +626,13 @@ void LLFloaterSnapshot::Impl::applyKeepAspectCheck(LLFloaterSnapshot* view, BOOL
if (view)
{
+ LLPanelSnapshot* active_panel = getActivePanel(view);
+ if (checked && active_panel)
+ {
+ LLComboBox* combo = view->getChild<LLComboBox>(active_panel->getImageSizeComboName());
+ combo->setCurrentByIndex(combo->getItemCount() - 1); // "custom" is always the last index
+ }
+
LLSnapshotLivePreview* previewp = getPreviewView(view) ;
if(previewp)
{
@@ -683,7 +697,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde
}
view->impl.mAspectRatioCheckOff = !enable_cb;
- enableAspectRatioCheckbox(view, enable_cb);
+
if (previewp)
{
previewp->mKeepAspectRatio = keep_aspect;
@@ -823,6 +837,11 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
{
getWidthSpinner(view)->setValue(width);
getHeightSpinner(view)->setValue(height);
+ if (getActiveSnapshotType(view) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ getWidthSpinner(view)->setIncrement(width >> 1);
+ getHeightSpinner(view)->setIncrement(height >> 1);
+ }
}
if(original_width != width || original_height != height)
@@ -911,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
@@ -942,6 +961,11 @@ void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view
{
getWidthSpinner(view)->forceSetValue(width);
getHeightSpinner(view)->forceSetValue(height);
+ if (getActiveSnapshotType(view) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ getWidthSpinner(view)->setIncrement(width >> 1);
+ getHeightSpinner(view)->setIncrement(height >> 1);
+ }
}
// static
@@ -1175,6 +1199,22 @@ void LLFloaterSnapshot::onOpen(const LLSD& key)
void LLFloaterSnapshot::onClose(bool app_quitting)
{
getParent()->setMouseOpaque(FALSE);
+
+ //unfreeze everything, hide fullscreen preview
+ LLSnapshotLivePreview* previewp = LLFloaterSnapshot::Impl::getPreviewView(this);
+ if (previewp)
+ {
+ previewp->setVisible(FALSE);
+ previewp->setEnabled(FALSE);
+ }
+
+ gSavedSettings.setBOOL("FreezeTime", FALSE);
+ impl.mAvatarPauseHandles.clear();
+
+ if (impl.mLastToolset)
+ {
+ LLToolMgr::getInstance()->setCurrentToolset(impl.mLastToolset);
+ }
}
// virtual
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 ff66bdedb0..1b1c24b19a 100755
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -63,6 +63,7 @@
#include "llviewerregion.h"
#include "llviewerstats.h"
#include "llviewertexture.h"
+#include "llviewerwindow.h"
#include "llworldmap.h"
#include "llworldmapmessage.h"
#include "llworldmapview.h"
@@ -659,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;
@@ -890,7 +891,7 @@ void LLFloaterWorldMap::buildAvatarIDList()
end = collector.mMappable.end();
for( ; it != end; ++it)
{
- list->addSimpleElement((*it).first, ADD_BOTTOM, (*it).second);
+ list->addSimpleElement((*it).second, ADD_BOTTOM, (*it).first);
}
list->setCurrentByID( LLAvatarTracker::instance().getAvatarID() );
@@ -1634,3 +1635,10 @@ void LLFloaterWorldMap::onChangeMaturity()
gSavedSettings.setBOOL("ShowAdultEvents", FALSE);
}
}
+
+void LLFloaterWorldMap::onFocusLost()
+{
+ gViewerWindow->showCursor();
+ LLWorldMapView* map_panel = (LLWorldMapView*)gFloaterWorldMap->mPanel;
+ map_panel->mPanning = FALSE;
+}
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 84ca5a7a71..7ce8dae9a9 100755
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -68,6 +68,8 @@ public:
/*virtual*/ BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
/*virtual*/ void draw();
+ /*virtual*/ void onFocusLost();
+
// methods for dealing with inventory. The observe() method is
// called during program startup. inventoryUpdated() will be
// called by a helper object when an interesting change has
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/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index f3a48625a4..73120a0242 100755
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -39,8 +39,6 @@
#include "llrendersphere.h"
#include "llselectmgr.h"
#include "llglheaders.h"
-
-
#include "llxmltree.h"
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/llimview.cpp b/indra/newview/llimview.cpp
index 8d8239611c..5d3a11e245 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -3061,6 +3061,24 @@ void LLIMMgr::inviteToSession(
{
if (gAgent.isDoNotDisturb() && !isRejectGroupCall && !isRejectNonFriendCall)
{
+ if (!hasSession(session_id) && (type == IM_SESSION_P2P_INVITE))
+ {
+ std::string fixed_session_name = caller_name;
+ if(!session_name.empty() && session_name.size()>1)
+ {
+ fixed_session_name = session_name;
+ }
+ else
+ {
+ LLAvatarName av_name;
+ if (LLAvatarNameCache::get(caller_id, &av_name))
+ {
+ fixed_session_name = av_name.getDisplayName();
+ }
+ }
+ LLIMModel::getInstance()->newSession(session_id, fixed_session_name, IM_NOTHING_SPECIAL, caller_id, false, false);
+ }
+
LLSD args;
addSystemMessage(session_id, "you_auto_rejected_call", args);
send_do_not_disturb_message(gMessageSystem, caller_id, session_id);
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
index a7b93b8030..46019557f8 100755
--- a/indra/newview/llinspectobject.cpp
+++ b/indra/newview/llinspectobject.cpp
@@ -219,7 +219,7 @@ void LLInspectObject::onOpen(const LLSD& data)
LLViewerMediaFocus::getInstance()->clearFocus();
LLSelectMgr::instance().deselectAll();
- mObjectSelection = LLSelectMgr::instance().selectObjectAndFamily(obj);
+ mObjectSelection = LLSelectMgr::instance().selectObjectAndFamily(obj,FALSE,TRUE);
// Mark this as a transient selection
struct SetTransient : public LLSelectedNodeFunctor
diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp
index 0bc7bd188d..d04378daaf 100755
--- a/indra/newview/llinspecttoast.cpp
+++ b/indra/newview/llinspecttoast.cpp
@@ -89,6 +89,11 @@ void LLInspectToast::onOpen(const LLSD& notification_id)
mConnection = toast->setOnToastDestroyedCallback(boost::bind(&LLInspectToast::onToastDestroy, this, _1));
LLPanel * panel = toast->getPanel();
+ if (panel == NULL)
+ {
+ LL_WARNS() << "Could not get toast's panel." << LL_ENDL;
+ return;
+ }
panel->setVisible(TRUE);
panel->setMouseOpaque(FALSE);
if(mPanel != NULL && mPanel->getParent() == this)
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 1910656066..1dc5558555 100755
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4462,11 +4462,11 @@ void LLTextureBridge::performAction(LLInventoryModel* model, std::string action)
{
if ("save_as" == action)
{
- LLFloaterReg::showInstance("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
- LLPreviewTexture* preview_texture = LLFloaterReg::findTypedInstance<LLPreviewTexture>("preview_texture", mUUID);
+ LLPreviewTexture* preview_texture = LLFloaterReg::getTypedInstance<LLPreviewTexture>("preview_texture", mUUID);
if (preview_texture)
{
preview_texture->openToSave();
+ preview_texture->saveAs();
}
}
else LLItemBridge::performAction(model, action);
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/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
index d38f90015e..59e14e6cc0 100755
--- a/indra/newview/lljoystickbutton.cpp
+++ b/indra/newview/lljoystickbutton.cpp
@@ -424,6 +424,7 @@ void LLJoystickCameraRotate::updateSlop()
BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask)
{
+ gAgent.setMovementLocked(TRUE);
updateSlop();
// Set initial offset based on initial click location
@@ -465,6 +466,11 @@ BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask)
return LLJoystick::handleMouseDown(x, y, mask);
}
+BOOL LLJoystickCameraRotate::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ gAgent.setMovementLocked(FALSE);
+ return LLJoystick::handleMouseUp(x, y, mask);
+}
void LLJoystickCameraRotate::onHeldDown()
{
diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h
index 8d76aa9531..4e6c774cad 100755
--- a/indra/newview/lljoystickbutton.h
+++ b/indra/newview/lljoystickbutton.h
@@ -146,6 +146,7 @@ public:
virtual void setToggleState( BOOL left, BOOL top, BOOL right, BOOL bottom );
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual void onHeldDown();
virtual void draw();
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 897ee8429a..8fb7550169 100755
--- a/indra/newview/lllocalbitmaps.cpp
+++ b/indra/newview/lllocalbitmaps.cpp
@@ -64,6 +64,8 @@
#include "llimagedimensionsinfo.h"
#include "llviewercontrol.h"
#include "lltrans.h"
+#include "llviewerdisplay.h"
+
/*=======================================*/
/* Formal declarations, constants, etc. */
/*=======================================*/
@@ -74,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 2810941d83..407613d32c 100755
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -85,7 +85,6 @@ const LLManip::EManipPart MANIPULATOR_IDS[LLManipScale::NUM_MANIPULATORS] =
LLManip::LL_FACE_NEGZ
};
-
F32 get_default_max_prim_scale(bool is_flora)
{
// a bit of a hack, but if it's foilage, we don't want to use the
@@ -229,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++)
@@ -292,10 +289,6 @@ void LLManipScale::render()
LLGLEnable poly_offset(GL_POLYGON_OFFSET_FILL);
glPolygonOffset( -2.f, -2.f);
- // JC - Band-aid until edge stretch working similar to side stretch
- // in non-uniform.
- // renderEdges( bbox );
-
renderCorners( bbox );
renderFaces( bbox );
@@ -352,6 +345,10 @@ BOOL LLManipScale::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
updateSnapGuides(bbox);
+ mFirstClickX = x;
+ mFirstClickY = y;
+ mIsFirstClick = true;
+
mDragStartPointGlobal = gAgent.getPosGlobalFromAgent(box_corner_agent);
mDragStartCenterGlobal = gAgent.getPosGlobalFromAgent(box_center_agent);
LLVector3 far_corner_agent = bbox.localToAgent( unitVectorToLocalBBoxExtent( -1.f * partToUnitVector( mManipPart ), bbox ) );
@@ -415,7 +412,15 @@ BOOL LLManipScale::handleHover(S32 x, S32 y, MASK mask)
}
else
{
- drag( x, y );
+ if((mFirstClickX != x) || (mFirstClickY != y))
+ {
+ mIsFirstClick = false;
+ }
+
+ if(!mIsFirstClick)
+ {
+ drag( x, y );
+ }
}
LL_DEBUGS("UserInput") << "hover handled by LLManipScale (active)" << LL_ENDL;
}
@@ -681,63 +686,38 @@ void LLManipScale::renderFaces( const LLBBox& bbox )
{
case 0:
conditionalHighlight( LL_FACE_POSZ, &z_highlight_color, &z_normal_color );
- renderAxisHandle( LL_FACE_POSZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );
+ renderAxisHandle( 8, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );
break;
case 1:
conditionalHighlight( LL_FACE_POSX, &x_highlight_color, &x_normal_color );
- renderAxisHandle( LL_FACE_POSX, ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 9, ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
break;
case 2:
conditionalHighlight( LL_FACE_POSY, &y_highlight_color, &y_normal_color );
- renderAxisHandle( LL_FACE_POSY, ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 10, ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );
break;
case 3:
conditionalHighlight( LL_FACE_NEGX, &x_highlight_color, &x_normal_color );
- renderAxisHandle( LL_FACE_NEGX, ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 11, ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
break;
case 4:
conditionalHighlight( LL_FACE_NEGY, &y_highlight_color, &y_normal_color );
- renderAxisHandle( LL_FACE_NEGY, ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 12, ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );
break;
case 5:
conditionalHighlight( LL_FACE_NEGZ, &z_highlight_color, &z_normal_color );
- renderAxisHandle( LL_FACE_NEGZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );
+ renderAxisHandle( 13, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );
break;
}
}
}
}
-void LLManipScale::renderEdges( const LLBBox& bbox )
-{
- LLVector3 extent = bbox.getExtentLocal();
-
- for( U32 part = LL_EDGE_MIN; part <= LL_EDGE_MAX; part++ )
- {
- F32 edge_width = mBoxHandleSize[part] * .6f;
- LLVector3 direction = edgeToUnitVector( part );
- LLVector3 center_to_edge = unitVectorToLocalBBoxExtent( direction, bbox );
-
- gGL.pushMatrix();
- {
- gGL.translatef( center_to_edge.mV[0], center_to_edge.mV[1], center_to_edge.mV[2] );
- conditionalHighlight( part );
- gGL.scalef(
- direction.mV[0] ? edge_width : extent.mV[VX],
- direction.mV[1] ? edge_width : extent.mV[VY],
- direction.mV[2] ? edge_width : extent.mV[VZ] );
- gBox.render();
- }
- gGL.popMatrix();
- }
-}
-
-
void LLManipScale::renderCorners( const LLBBox& bbox )
{
U32 part = LL_CORNER_NNN;
@@ -780,14 +760,14 @@ void LLManipScale::renderBoxHandle( F32 x, F32 y, F32 z )
}
-void LLManipScale::renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end )
+void LLManipScale::renderAxisHandle( U32 handle_index, const LLVector3& start, const LLVector3& end )
{
if( getShowAxes() )
{
// Draws a single "jacks" style handle: a long, retangular box from start to end.
LLVector3 offset_start = end - start;
offset_start.normalize();
- offset_start = start + mBoxHandleSize[part] * offset_start;
+ offset_start = start + mBoxHandleSize[handle_index] * offset_start;
LLVector3 delta = end - offset_start;
LLVector3 pos = offset_start + 0.5f * delta;
@@ -796,9 +776,9 @@ void LLManipScale::renderAxisHandle( U32 part, const LLVector3& start, const LLV
{
gGL.translatef( pos.mV[VX], pos.mV[VY], pos.mV[VZ] );
gGL.scalef(
- mBoxHandleSize[part] + llabs(delta.mV[VX]),
- mBoxHandleSize[part] + llabs(delta.mV[VY]),
- mBoxHandleSize[part] + llabs(delta.mV[VZ]));
+ mBoxHandleSize[handle_index] + llabs(delta.mV[VX]),
+ mBoxHandleSize[handle_index] + llabs(delta.mV[VY]),
+ mBoxHandleSize[handle_index] + llabs(delta.mV[VZ]));
gBox.render();
}
gGL.popMatrix();
@@ -1554,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)
{
@@ -1626,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));
@@ -1681,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++)
{
@@ -1761,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/llmanipscale.h b/indra/newview/llmanipscale.h
index 7cc3c99810..11ade9b7d0 100755
--- a/indra/newview/llmanipscale.h
+++ b/indra/newview/llmanipscale.h
@@ -96,7 +96,6 @@ public:
private:
void renderCorners( const LLBBox& local_bbox );
void renderFaces( const LLBBox& local_bbox );
- void renderEdges( const LLBBox& local_bbox );
void renderBoxHandle( F32 x, F32 y, F32 z );
void renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end );
void renderGuidelinesPart( const LLBBox& local_bbox );
@@ -172,6 +171,9 @@ private:
ESnapRegimes mSnapRegime; //<! Which, if any, snap regime the cursor is currently residing in.
F32 mManipulatorScales[NUM_MANIPULATORS];
F32 mBoxHandleSize[NUM_MANIPULATORS]; // The size of the handles at the corners of the bounding box
+ S32 mFirstClickX;
+ S32 mFirstClickY;
+ bool mIsFirstClick;
};
#endif // LL_MANIPSCALE_H
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/llnotificationlistitem.cpp b/indra/newview/llnotificationlistitem.cpp
index 6b674fcc7d..8e7671897d 100644
--- a/indra/newview/llnotificationlistitem.cpp
+++ b/indra/newview/llnotificationlistitem.cpp
@@ -57,7 +57,7 @@ BOOL LLNotificationListItem::postBuild()
BOOL rv = LLPanel::postBuild();
mTitleBox = getChild<LLTextBox>("notification_title");
mTitleBoxExp = getChild<LLTextBox>("notification_title_exp");
- mNoticeTextExp = getChild<LLTextBox>("notification_text_exp");
+ mNoticeTextExp = getChild<LLViewerTextEditor>("notification_text_exp");
mTimeBox = getChild<LLTextBox>("notification_time");
mTimeBoxExp = getChild<LLTextBox>("notification_time_exp");
@@ -115,6 +115,7 @@ std::string LLNotificationListItem::buildNotificationDate(const LLDate& time_sta
void LLNotificationListItem::onClickCloseBtn()
{
mOnItemClose(this);
+ close();
}
BOOL LLNotificationListItem::handleMouseUp(S32 x, S32 y, MASK mask)
@@ -278,14 +279,17 @@ BOOL LLGroupNoticeNotificationListItem::postBuild()
if (mInventoryOffer != NULL)
{
mAttachmentTextBox->setValue(mInventoryOffer->mDesc);
+ mAttachmentTextBox->setVisible(TRUE);
mAttachmentIcon->setVisible(TRUE);
std::string icon_name = LLInventoryIcon::getIconName(mInventoryOffer->mType,
LLInventoryType::IT_TEXTURE);
-
mAttachmentIconExp->setValue(icon_name);
mAttachmentIconExp->setVisible(TRUE);
+ mAttachmentTextBox->setClickedCallback(boost::bind(
+ &LLGroupNoticeNotificationListItem::onClickAttachment, this));
+
std::string expanded_height_resize_str = getString("expanded_height_resize_for_attachment");
mExpandedHeightResize = (S32)atoi(expanded_height_resize_str.c_str());
@@ -388,6 +392,53 @@ void LLGroupNoticeNotificationListItem::setSender(std::string sender)
mSenderOrFeeBoxExp->setVisible(FALSE);
}
}
+void LLGroupNoticeNotificationListItem::close()
+{
+ // The group notice dialog may be an inventory offer.
+ // If it has an inventory save button and that button is still enabled
+ // Then we need to send the inventory declined message
+ if (mInventoryOffer != NULL)
+ {
+ mInventoryOffer->forceResponse(IOR_DECLINE);
+ mInventoryOffer = NULL;
+ }
+}
+
+void LLGroupNoticeNotificationListItem::onClickAttachment()
+{
+ if (mInventoryOffer != NULL) {
+ mInventoryOffer->forceResponse(IOR_ACCEPT);
+
+ static const LLUIColor textColor = LLUIColorTable::instance().getColor(
+ "GroupNotifyDimmedTextColor");
+ mAttachmentTextBox->setColor(textColor);
+ mAttachmentIconExp->setEnabled(FALSE);
+
+ //if attachment isn't openable - notify about saving
+ if (!isAttachmentOpenable(mInventoryOffer->mType)) {
+ LLNotifications::instance().add("AttachmentSaved", LLSD(), LLSD());
+ }
+
+ mInventoryOffer = NULL;
+ }
+}
+
+//static
+bool LLGroupNoticeNotificationListItem::isAttachmentOpenable(LLAssetType::EType type)
+{
+ switch (type)
+ {
+ case LLAssetType::AT_LANDMARK:
+ case LLAssetType::AT_NOTECARD:
+ case LLAssetType::AT_IMAGE_JPEG:
+ case LLAssetType::AT_IMAGE_TGA:
+ case LLAssetType::AT_TEXTURE:
+ case LLAssetType::AT_TEXTURE_TGA:
+ return true;
+ default:
+ return false;
+ }
+}
LLTransactionNotificationListItem::LLTransactionNotificationListItem(const Params& p)
: LLNotificationListItem(p),
diff --git a/indra/newview/llnotificationlistitem.h b/indra/newview/llnotificationlistitem.h
index bd76d17fe8..f8d9fc0330 100644
--- a/indra/newview/llnotificationlistitem.h
+++ b/indra/newview/llnotificationlistitem.h
@@ -30,6 +30,7 @@
#include "llpanel.h"
#include "lllayoutstack.h"
#include "lltextbox.h"
+#include "llviewertexteditor.h"
#include "llbutton.h"
#include "llgroupiconctrl.h"
#include "llavatariconctrl.h"
@@ -95,24 +96,25 @@ protected:
void onClickExpandBtn();
void onClickCondenseBtn();
void onClickCloseBtn();
-
- Params mParams;
- LLTextBox* mTitleBox;
- LLTextBox* mTitleBoxExp;
- LLTextBox* mNoticeTextExp;
- LLTextBox* mTimeBox;
- LLTextBox* mTimeBoxExp;
- LLButton* mExpandBtn;
- LLButton* mCondenseBtn;
- LLButton* mCloseBtn;
- LLButton* mCloseBtnExp;
- LLPanel* mCondensedViewPanel;
- LLPanel* mExpandedViewPanel;
- std::string mTitle;
- std::string mNotificationName;
- S32 mCondensedHeight;
- S32 mExpandedHeight;
- S32 mExpandedHeightResize;
+ virtual void close() {};
+
+ Params mParams;
+ LLTextBox* mTitleBox;
+ LLTextBox* mTitleBoxExp;
+ LLViewerTextEditor* mNoticeTextExp;
+ LLTextBox* mTimeBox;
+ LLTextBox* mTimeBoxExp;
+ LLButton* mExpandBtn;
+ LLButton* mCondenseBtn;
+ LLButton* mCloseBtn;
+ LLButton* mCloseBtnExp;
+ LLPanel* mCondensedViewPanel;
+ LLPanel* mExpandedViewPanel;
+ std::string mTitle;
+ std::string mNotificationName;
+ S32 mCondensedHeight;
+ S32 mExpandedHeight;
+ S32 mExpandedHeightResize;
};
class LLGroupNotificationListItem
@@ -174,12 +176,16 @@ private:
LLGroupNoticeNotificationListItem & operator=(LLGroupNoticeNotificationListItem &);
void setSender(std::string sender);
+ void onClickAttachment();
+ /*virtual*/ void close();
+
+ static bool isAttachmentOpenable(LLAssetType::EType);
- LLPanel* mAttachmentPanel;
- LLTextBox* mAttachmentTextBox;
- LLIconCtrl* mAttachmentIcon;
- LLIconCtrl* mAttachmentIconExp;
- LLOfferInfo* mInventoryOffer;
+ LLPanel* mAttachmentPanel;
+ LLTextBox* mAttachmentTextBox;
+ LLIconCtrl* mAttachmentIcon;
+ LLIconCtrl* mAttachmentIconExp;
+ LLOfferInfo* mInventoryOffer;
};
class LLTransactionNotificationListItem : public LLNotificationListItem
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/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index 407cbfc47b..451f41cd3b 100755
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -197,9 +197,6 @@ void LLPanelContents::onClickNewScript(void *userdata)
// *TODO: The script creation should round-trip back to the
// viewer so the viewer can auto-open the script and start
// editing ASAP.
-#if 0
- LLFloaterReg::showInstance("preview_scriptedit", LLSD(inv_item->getUUID()), TAKE_FOCUS_YES);
-#endif
}
}
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index 02e05d3d9a..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
@@ -242,6 +240,8 @@ BOOL LLPanelFace::postBuild()
if(mShinyColorSwatch)
{
mShinyColorSwatch->setCommitCallback(boost::bind(&LLPanelFace::onCommitShinyColor, this, _2));
+ mShinyColorSwatch->setOnCancelCallback(boost::bind(&LLPanelFace::onCancelShinyColor, this, _2));
+ mShinyColorSwatch->setOnSelectCallback(boost::bind(&LLPanelFace::onSelectShinyColor, this, _2));
mShinyColorSwatch->setFollowsTop();
mShinyColorSwatch->setFollowsLeft();
mShinyColorSwatch->setCanApplyImmediately(TRUE);
@@ -900,52 +900,22 @@ void LLPanelFace::updateUI()
getChildView("label maskcutoff")->setEnabled(editable && mIsAlpha);
}
}
-
- if (shinytexture_ctrl)
- {
- if (identical_spec && (shiny == SHINY_TEXTURE))
- {
- shinytexture_ctrl->setTentative( FALSE );
- shinytexture_ctrl->setEnabled( editable );
- shinytexture_ctrl->setImageAssetID( specmap_id );
- }
- else if (specmap_id.isNull())
- {
- shinytexture_ctrl->setTentative( FALSE );
- shinytexture_ctrl->setEnabled( editable );
- shinytexture_ctrl->setImageAssetID( LLUUID::null );
- }
- else
- {
- shinytexture_ctrl->setTentative( TRUE );
- shinytexture_ctrl->setEnabled( editable );
- shinytexture_ctrl->setImageAssetID( specmap_id );
+
+ if (shinytexture_ctrl)
+ {
+ shinytexture_ctrl->setTentative( !identical_spec );
+ shinytexture_ctrl->setEnabled( editable );
+ shinytexture_ctrl->setImageAssetID( specmap_id );
}
- }
- if (bumpytexture_ctrl)
- {
- if (identical_norm && (bumpy == BUMPY_TEXTURE))
- {
- bumpytexture_ctrl->setTentative( FALSE );
- bumpytexture_ctrl->setEnabled( editable );
- bumpytexture_ctrl->setImageAssetID( normmap_id );
- }
- else if (normmap_id.isNull())
- {
- bumpytexture_ctrl->setTentative( FALSE );
- bumpytexture_ctrl->setEnabled( editable );
- bumpytexture_ctrl->setImageAssetID( LLUUID::null );
- }
- else
- {
- bumpytexture_ctrl->setTentative( TRUE );
- bumpytexture_ctrl->setEnabled( editable );
- bumpytexture_ctrl->setImageAssetID( normmap_id );
- }
+ if (bumpytexture_ctrl)
+ {
+ bumpytexture_ctrl->setTentative( !identical_norm );
+ bumpytexture_ctrl->setEnabled( editable );
+ bumpytexture_ctrl->setImageAssetID( normmap_id );
}
}
-
+
// planar align
bool align_planar = false;
bool identical_planar_aligned = false;
@@ -1463,12 +1433,23 @@ void LLPanelFace::onCancelColor(const LLSD& data)
LLSelectMgr::getInstance()->selectionRevertColors();
}
+void LLPanelFace::onCancelShinyColor(const LLSD& data)
+{
+ LLSelectMgr::getInstance()->selectionRevertShinyColors();
+}
+
void LLPanelFace::onSelectColor(const LLSD& data)
{
LLSelectMgr::getInstance()->saveSelectedObjectColors();
sendColor();
}
+void LLPanelFace::onSelectShinyColor(const LLSD& data)
+{
+ LLSelectedTEMaterial::setSpecularLightColor(this, getChild<LLColorSwatchCtrl>("shinycolorswatch")->get());
+ LLSelectMgr::getInstance()->saveSelectedShinyColors();
+}
+
// static
void LLPanelFace::onCommitMaterialsMedia(LLUICtrl* ctrl, void* userdata)
{
diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h
index e32f039921..9823e84cd9 100755
--- a/indra/newview/llpanelface.h
+++ b/indra/newview/llpanelface.h
@@ -143,7 +143,9 @@ protected:
void onCommitShinyColor(const LLSD& data);
void onCommitAlpha(const LLSD& data);
void onCancelColor(const LLSD& data);
+ void onCancelShinyColor(const LLSD& data);
void onSelectColor(const LLSD& data);
+ void onSelectShinyColor(const LLSD& data);
void onCloseTexturePicker(const LLSD& data);
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 375c54479d..a2e136bd5a 100755
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -421,20 +421,51 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
msg->getUUID("QueryData", "OwnerID", owner_id, 0);
msg->getUUID("TransactionData", "TransactionID", trans_id);
- S32 total_contribution = 0;
if(owner_id.isNull())
{
// special block which has total contribution
++first_block;
+ S32 committed = 0;
+ S32 billable_area = 0;
+
+ if(count == 1)
+ {
+ msg->getS32("QueryData", "BillableArea", committed, 0);
+ }
+ else
+ {
+ for(S32 i = first_block; i < count; ++i)
+ {
+ msg->getS32("QueryData", "BillableArea", billable_area, i);
+ committed+=billable_area;
+ }
+ }
+
+ S32 total_contribution;
msg->getS32("QueryData", "ActualArea", total_contribution, 0);
mPanel.getChild<LLUICtrl>("total_contributed_land_value")->setTextArg("[AREA]", llformat("%d", total_contribution));
+
+ mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed));
+ S32 available = total_contribution - committed;
+ mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available));
+
+
+ if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
+
+ {
+ mGroupOverLimitIconp->setVisible(available < 0);
+ mGroupOverLimitTextp->setVisible(available < 0);
+ }
+
}
if ( trans_id != mTransID ) return;
+
// This power was removed to make group roles simpler
//if ( !gAgent.hasPowerInGroup(mGroupID, GP_LAND_VIEW_OWNED) ) return;
if (!gAgent.isInGroup(mPanel.mGroupID)) return;
+
mGroupParcelsp->setCommentText(mEmptyParcelsText);
std::string name;
@@ -447,7 +478,6 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
std::string sim_name;
std::string land_sku;
std::string land_type;
- S32 committed = 0;
for(S32 i = first_block; i < count; ++i)
{
@@ -473,11 +503,10 @@ 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;
- committed+=billable_area;
if(billable_area == actual_area)
@@ -516,16 +545,6 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
mGroupParcelsp->addElement(row);
}
-
- mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed));
-
- S32 available = total_contribution - committed;
- mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available));
- if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
- {
- mGroupOverLimitIconp->setVisible(available < 0);
- mGroupOverLimitTextp->setVisible(available < 0);
- }
}
}
diff --git a/indra/newview/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/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
index 75a3584a1e..1d73d4bd6e 100755
--- a/indra/newview/llpanellandmarks.cpp
+++ b/indra/newview/llpanellandmarks.cpp
@@ -1173,7 +1173,8 @@ bool LLLandmarksPanel::canItemBeModified(const std::string& command_name, LLFold
if ("copy" == command_name)
{
- return root_folder->canCopy();
+ // we shouldn't be able to copy folders from My Inventory Panel
+ return can_be_modified && root_folder->canCopy();
}
else if ("collapse" == command_name)
{
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 bbc3b85bf0..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);
@@ -291,45 +281,19 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
loadLoginPage();
- // Show last logged in user favorites in "Start at" combo.
- addUsersWithFavoritesToUsername();
LLComboBox* username_combo(getChild<LLComboBox>("username_combo"));
username_combo->setTextChangedCallback(boost::bind(&LLPanelLogin::addFavoritesToStartLocation, this));
// STEAM-14: When user presses Enter with this field in focus, initiate login
username_combo->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this));
}
-void LLPanelLogin::addUsersWithFavoritesToUsername()
-{
- LLComboBox* combo = getChild<LLComboBox>("username_combo");
- if (!combo) return;
- std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml");
- std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
- LLSD fav_llsd;
- llifstream file;
- file.open(filename);
- if (!file.is_open())
- {
- file.open(old_filename);
- if (!file.is_open()) return;
- }
- LLSDSerialize::fromXML(fav_llsd, file);
- for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
- iter != fav_llsd.endMap(); ++iter)
- {
- combo->add(iter->first);
- mUsernameLength = iter->first.length();
- updateLoginButtons();
- }
-}
-
void LLPanelLogin::addFavoritesToStartLocation()
{
// Clear the combo.
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);
}
@@ -344,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);
@@ -377,6 +341,10 @@ void LLPanelLogin::addFavoritesToStartLocation()
{
mShowFavorites = true;
combo->add(label, value);
+ if ( LLStartUp::getStartSLURL().getSLURLString() == value)
+ {
+ combo->selectByValue(value);
+ }
}
}
break;
@@ -691,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.
*
@@ -723,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();
}
@@ -862,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)
@@ -1036,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");
-
- // 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;
+ LLButton* login_btn = getChild<LLButton>("connect_btn");
- // 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()
@@ -1134,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 9123252f4c..dcd0aab3ab 100755
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -285,7 +285,8 @@ LLPanelObject::LLPanelObject()
mIsPhantom(FALSE),
mSelectedType(MI_BOX),
mSculptTextureRevert(LLUUID::null),
- mSculptTypeRevert(0)
+ mSculptTypeRevert(0),
+ mSizeChanged(FALSE)
{
}
@@ -411,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)
{
@@ -1567,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;
@@ -1620,9 +1621,10 @@ void LLPanelObject::sendScale(BOOL btn_down)
LLVector3 newscale(mCtrlScaleX->get(), mCtrlScaleY->get(), mCtrlScaleZ->get());
LLVector3 delta = newscale - mObject->getScale();
- if (delta.magVec() >= 0.0005f)
+ if (delta.magVec() >= 0.0005f || (mSizeChanged && !btn_down))
{
// scale changed by more than 1/2 millimeter
+ mSizeChanged = btn_down;
// check to see if we aren't scaling the textures
// (in which case the tex coord's need to be recomputed)
diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h
index c4cf27ab1a..8829f493fa 100755
--- a/indra/newview/llpanelobject.h
+++ b/indra/newview/llpanelobject.h
@@ -140,6 +140,7 @@ protected:
LLSpinCtrl* mCtrlScaleX;
LLSpinCtrl* mCtrlScaleY;
LLSpinCtrl* mCtrlScaleZ;
+ BOOL mSizeChanged;
LLTextBox* mLabelRotation;
LLSpinCtrl* mCtrlRotX;
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 6354b5a02b..bf15f56b44 100755
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -654,7 +654,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
return;
}
- if(gAgent.allowOperation(PERM_OWNER, item->getPermissions(),
+ if(!gAgent.allowOperation(PERM_OWNER, item->getPermissions(),
GP_OBJECT_MANIPULATE)
&& item->getSaleInfo().isForSale())
{
@@ -689,10 +689,6 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
else if (canOpenItem())
{
items.push_back(std::string("Task Open"));
- if (!isItemCopyable())
- {
- disabled_items.push_back(std::string("Task Open"));
- }
}
items.push_back(std::string("Task Properties"));
if(isItemRenameable())
@@ -909,6 +905,7 @@ void LLTaskTextureBridge::openItem()
LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(mUUID), TAKE_FOCUS_YES);
if(preview)
{
+ preview->setAuxItem(findItem());
preview->setObjectID(mPanel->getTaskUUID());
}
}
@@ -1107,7 +1104,10 @@ void LLTaskLSLBridge::openItem()
}
if (object->permModify() || gAgent.isGodlike())
{
- LLLiveLSLEditor* preview = LLFloaterReg::showTypedInstance<LLLiveLSLEditor>("preview_scriptedit", LLSD(mUUID), TAKE_FOCUS_YES);
+ LLSD floater_key;
+ floater_key["taskid"] = mPanel->getTaskUUID();
+ floater_key["itemid"] = mUUID;
+ LLLiveLSLEditor* preview = LLFloaterReg::showTypedInstance<LLLiveLSLEditor>("preview_scriptedit", floater_key, TAKE_FOCUS_YES);
if (preview)
{
preview->setObjectID(mPanel->getTaskUUID());
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/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
index 58055d98c6..ce9231d6f2 100755
--- a/indra/newview/llpanelpermissions.cpp
+++ b/indra/newview/llpanelpermissions.cpp
@@ -851,6 +851,14 @@ void LLPanelPermissions::refresh()
combo_click_action->setValue(LLSD(combo_value));
}
}
+
+ if(LLSelectMgr::getInstance()->getSelection()->isAttachment())
+ {
+ getChildView("checkbox for sale")->setEnabled(FALSE);
+ getChildView("Edit Cost")->setEnabled(FALSE);
+ getChild<LLComboBox>("sale type")->setEnabled(FALSE);
+ }
+
getChildView("label click action")->setEnabled(is_perm_modify && is_nonpermanent_enforced && all_volume);
getChildView("clickaction")->setEnabled(is_perm_modify && is_nonpermanent_enforced && all_volume);
}
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/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp
index 56569e3207..106fb4997e 100755
--- a/indra/newview/llpanelsnapshot.cpp
+++ b/indra/newview/llpanelsnapshot.cpp
@@ -37,6 +37,19 @@
#include "llsidetraypanelcontainer.h"
#include "llviewercontrol.h" // gSavedSettings
+const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
+
+S32 power_of_two(S32 sz, S32 upper)
+{
+ S32 res = upper;
+ while( upper >= sz)
+ {
+ res = upper;
+ upper >>= 1;
+ }
+ return res;
+}
+
// virtual
BOOL LLPanelSnapshot::postBuild()
{
@@ -164,8 +177,26 @@ void LLPanelSnapshot::cancel()
void LLPanelSnapshot::onCustomResolutionCommit()
{
LLSD info;
- info["w"] = getChild<LLUICtrl>(getWidthSpinnerName())->getValue().asInteger();
- info["h"] = getChild<LLUICtrl>(getHeightSpinnerName())->getValue().asInteger();
+ LLSpinCtrl *widthSpinner = getChild<LLSpinCtrl>(getWidthSpinnerName());
+ LLSpinCtrl *heightSpinner = getChild<LLSpinCtrl>(getHeightSpinnerName());
+ if (getName() == "panel_snapshot_inventory")
+ {
+ S32 width = widthSpinner->getValue().asInteger();
+ width = power_of_two(width, MAX_TEXTURE_SIZE);
+ info["w"] = width;
+ widthSpinner->setIncrement(width >> 1);
+ widthSpinner->forceSetValue(width);
+ S32 height = heightSpinner->getValue().asInteger();
+ height = power_of_two(height, MAX_TEXTURE_SIZE);
+ heightSpinner->setIncrement(height >> 1);
+ heightSpinner->forceSetValue(height);
+ info["h"] = height;
+ }
+ else
+ {
+ info["w"] = widthSpinner->getValue().asInteger();
+ info["h"] = heightSpinner->getValue().asInteger();
+ }
LLFloaterSnapshot::getInstance()->notify(LLSD().with("custom-res-change", info));
}
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/llpostcard.cpp b/indra/newview/llpostcard.cpp
index 649bb2fb2c..5987044bff 100755
--- a/indra/newview/llpostcard.cpp
+++ b/indra/newview/llpostcard.cpp
@@ -95,6 +95,12 @@ public:
{
}
+ /*virtual*/ void httpFailure()
+ {
+ LL_WARNS() << "Sending postcard failed, status: " << getStatus() << LL_ENDL;
+ LLPostCard::reportPostResult(false);
+ }
+
/*virtual*/ void uploadComplete(const LLSD& content)
{
LL_INFOS() << "Postcard sent" << LL_ENDL;
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
index 398f4e6e42..bf2652cb49 100755
--- a/indra/newview/llpreview.cpp
+++ b/indra/newview/llpreview.cpp
@@ -39,6 +39,7 @@
#include "llradiogroup.h"
#include "llassetstorage.h"
#include "llviewerassettype.h"
+#include "llviewermessage.h"
#include "llviewerobject.h"
#include "llviewerobjectlist.h"
#include "lldbstrings.h"
@@ -53,7 +54,7 @@
LLPreview::LLPreview(const LLSD& key)
: LLFloater(key),
- mItemUUID(key.asUUID()),
+ mItemUUID(key.has("itemid") ? key.get("itemid").asUUID() : key.asUUID()),
mObjectUUID(), // set later by setObjectID()
mCopyToInvBtn( NULL ),
mForceClose(FALSE),
@@ -369,6 +370,20 @@ void LLPreview::onBtnCopyToInv(void* userdata)
self->mNotecardInventoryID,
item);
}
+ else if (self->mObjectUUID.notNull())
+ {
+ // item is in in-world inventory
+ LLViewerObject* object = gObjectList.findObject(self->mObjectUUID);
+ LLPermissions perm(item->getPermissions());
+ if(object
+ &&(perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID())
+ && perm.allowTransferTo(gAgent.getID())))
+ {
+ // copy to default folder
+ set_dad_inventory_item(item, LLUUID::null);
+ object->moveInventory(LLUUID::null, item->getUUID());
+ }
+ }
else
{
LLPointer<LLInventoryCallback> cb = NULL;
@@ -453,7 +468,6 @@ LLMultiPreview::LLMultiPreview()
setTitle(LLTrans::getString("MultiPreviewTitle"));
buildTabContainer();
setCanResize(TRUE);
- mAutoResize = FALSE;
}
void LLMultiPreview::onOpen(const LLSD& key)
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index 337a63e627..1308d1e9a7 100755
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -215,9 +215,12 @@ void LLPreviewNotecard::loadAsset()
if(item)
{
- if (gAgent.allowOperation(PERM_COPY, item->getPermissions(),
- GP_OBJECT_MANIPULATE)
- || gAgent.isGodlike())
+ LLPermissions perm(item->getPermissions());
+ BOOL is_owner = gAgent.allowOperation(PERM_OWNER, perm, GP_OBJECT_MANIPULATE);
+ BOOL allow_copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE);
+ BOOL allow_modify = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE);
+
+ if (allow_copy || gAgent.isGodlike())
{
mAssetID = item->getAssetUUID();
if(mAssetID.isNull())
@@ -271,12 +274,17 @@ void LLPreviewNotecard::loadAsset()
editor->setEnabled(FALSE);
mAssetStatus = PREVIEW_ASSET_LOADED;
}
- if(!gAgent.allowOperation(PERM_MODIFY, item->getPermissions(),
- GP_OBJECT_MANIPULATE))
+
+ if(!allow_modify)
{
editor->setEnabled(FALSE);
getChildView("lock")->setVisible( TRUE);
}
+
+ if(allow_modify || is_owner)
+ {
+ getChildView("Delete")->setEnabled(TRUE);
+ }
}
else
{
@@ -492,14 +500,7 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
void LLPreviewNotecard::deleteNotecard()
{
- LLViewerInventoryItem* item = gInventory.getItem(mItemUUID);
- if (item != NULL)
- {
- const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- gInventory.changeItemParent(item, trash_id, FALSE);
- }
-
- closeFloater();
+ LLNotificationsUtil::add("DeleteNotecard", LLSD(), LLSD(), boost::bind(&LLPreviewNotecard::handleConfirmDeleteDialog,this, _1, _2));
}
// static
@@ -605,4 +606,43 @@ bool LLPreviewNotecard::handleSaveChangesDialog(const LLSD& notification, const
return false;
}
+bool LLPreviewNotecard::handleConfirmDeleteDialog(const LLSD& notification, const LLSD& response)
+{
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if (option != 0)
+ {
+ // canceled
+ return false;
+ }
+
+ if (mObjectUUID.isNull())
+ {
+ // move item from agent's inventory into trash
+ LLViewerInventoryItem* item = gInventory.getItem(mItemUUID);
+ if (item != NULL)
+ {
+ const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ gInventory.changeItemParent(item, trash_id, FALSE);
+ }
+ }
+ else
+ {
+ // delete item from inventory of in-world object
+ LLViewerObject* object = gObjectList.findObject(mObjectUUID);
+ if(object)
+ {
+ LLViewerInventoryItem* item = dynamic_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemUUID));
+ if (item != NULL)
+ {
+ object->removeInventory(mItemUUID);
+ }
+ }
+ }
+
+ // close floater, ignore unsaved changes
+ mForceClose = TRUE;
+ closeFloater();
+ return false;
+}
+
// EOF
diff --git a/indra/newview/llpreviewnotecard.h b/indra/newview/llpreviewnotecard.h
index b53c0da6be..1cf08dedd6 100755
--- a/indra/newview/llpreviewnotecard.h
+++ b/indra/newview/llpreviewnotecard.h
@@ -93,6 +93,7 @@ protected:
S32 status, LLExtStat ext_status);
bool handleSaveChangesDialog(const LLSD& notification, const LLSD& response);
+ bool handleConfirmDeleteDialog(const LLSD& notification, const LLSD& response);
protected:
LLViewerTextEditor* mEditor;
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index a41986373e..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;
@@ -1840,7 +1837,8 @@ void LLLiveLSLEditor::loadAsset()
else if(item && mItem.notNull())
{
// request the text from the object
- LLUUID* user_data = new LLUUID(mItemUUID); // ^ mObjectUUID
+ LLSD* user_data = new LLSD();
+ user_data->with("taskid", mObjectUUID).with("itemid", mItemUUID);
gAssetStorage->getInvItemAsset(object->getRegion()->getHost(),
gAgent.getID(),
gAgent.getSessionID(),
@@ -1917,9 +1915,9 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id,
{
LL_DEBUGS() << "LLLiveLSLEditor::onLoadComplete: got uuid " << asset_id
<< LL_ENDL;
- LLUUID* xored_id = (LLUUID*)user_data;
+ LLSD* floater_key = (LLSD*)user_data;
- LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", *xored_id);
+ LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", *floater_key);
if(instance )
{
@@ -1948,7 +1946,7 @@ void LLLiveLSLEditor::onLoadComplete(LLVFS *vfs, const LLUUID& asset_id,
}
}
- delete xored_id;
+ delete floater_key;
}
void LLLiveLSLEditor::loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type)
@@ -2307,7 +2305,10 @@ void LLLiveLSLEditor::onSaveTextComplete(const LLUUID& asset_uuid, void* user_da
}
else
{
- LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", data->mItem->getUUID()); // ^ data->mSaveObjectID
+ LLSD floater_key;
+ floater_key["taskid"] = data->mSaveObjectID;
+ floater_key["itemid"] = data->mItem->getUUID();
+ LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", floater_key);
if (self)
{
self->getWindow()->decBusyCount();
@@ -2332,7 +2333,10 @@ void LLLiveLSLEditor::onSaveBytecodeComplete(const LLUUID& asset_uuid, void* use
if(0 ==status)
{
LL_INFOS() << "LSL Bytecode saved" << LL_ENDL;
- LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", data->mItem->getUUID()); // ^ data->mSaveObjectID
+ LLSD floater_key;
+ floater_key["taskid"] = data->mSaveObjectID;
+ floater_key["itemid"] = data->mItem->getUUID();
+ LLLiveLSLEditor* self = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", floater_key);
if (self)
{
// Tell the user that the compile worked.
@@ -2410,7 +2414,10 @@ void LLLiveLSLEditor::processScriptRunningReply(LLMessageSystem* msg, void**)
msg->getUUIDFast(_PREHASH_Script, _PREHASH_ObjectID, object_id);
msg->getUUIDFast(_PREHASH_Script, _PREHASH_ItemID, item_id);
- LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", item_id); // ^ object_id
+ LLSD floater_key;
+ floater_key["taskid"] = object_id;
+ floater_key["itemid"] = item_id;
+ LLLiveLSLEditor* instance = LLFloaterReg::findTypedInstance<LLLiveLSLEditor>("preview_scriptedit", floater_key);
if(instance)
{
instance->mHaveRunningInfo = TRUE;
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 5c41c5ad97..f91a18d8d3 100755
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -65,6 +65,7 @@ LLPreviewTexture::LLPreviewTexture(const LLSD& key)
mShowKeepDiscard(FALSE),
mCopyToInv(FALSE),
mIsCopyable(FALSE),
+ mIsFullPerm(FALSE),
mUpdateDimensions(TRUE),
mLastHeight(0),
mLastWidth(0),
@@ -182,12 +183,6 @@ void LLPreviewTexture::draw()
if ( mImage.notNull() )
{
- // Automatically bring up SaveAs dialog if we opened this to save the texture.
- if (mPreviewToSave)
- {
- mPreviewToSave = FALSE;
- saveAs();
- }
// Draw the texture
gGL.diffuseColor3f( 1.f, 1.f, 1.f );
gl_draw_scaled_image(interior.mLeft,
@@ -269,7 +264,7 @@ void LLPreviewTexture::draw()
// virtual
BOOL LLPreviewTexture::canSaveAs() const
{
- return mIsCopyable && !mLoadingFullImage && mImage.notNull() && !mImage->isMissingAsset();
+ return mIsFullPerm && !mLoadingFullImage && mImage.notNull() && !mImage->isMissingAsset();
}
@@ -286,6 +281,12 @@ void LLPreviewTexture::saveAs()
// User canceled or we failed to acquire save file.
return;
}
+ if(mPreviewToSave)
+ {
+ mPreviewToSave = FALSE;
+ LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", item->getUUID());
+ }
+
// remember the user-approved/edited file name.
mSaveFileName = file_picker.getFirstFile();
mLoadingFullImage = TRUE;
@@ -516,6 +517,11 @@ void LLPreviewTexture::loadAsset()
mUpdateDimensions = TRUE;
updateDimensions();
getChildView("save_tex_btn")->setEnabled(canSaveAs());
+ if (mObjectUUID.notNull())
+ {
+ // check that we can copy inworld items into inventory
+ getChildView("Keep")->setEnabled(mIsCopyable);
+ }
}
LLPreview::EAssetStatus LLPreviewTexture::getAssetStatus()
@@ -580,7 +586,9 @@ void LLPreviewTexture::updateImageID()
mShowKeepDiscard = TRUE;
mCopyToInv = FALSE;
- mIsCopyable = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
+ LLPermissions perm(item->getPermissions());
+ mIsCopyable = perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID()) && perm.allowTransferTo(gAgent.getID());
+ mIsFullPerm = item->checkPermissionsSet(PERM_ITEM_UNRESTRICTED);
}
else // not an item, assume it's an asset id
{
@@ -588,6 +596,7 @@ void LLPreviewTexture::updateImageID()
mShowKeepDiscard = FALSE;
mCopyToInv = TRUE;
mIsCopyable = TRUE;
+ mIsFullPerm = TRUE;
}
}
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
index 97e74706cc..b104a91c75 100755
--- a/indra/newview/llpreviewtexture.h
+++ b/indra/newview/llpreviewtexture.h
@@ -90,6 +90,7 @@ private:
// This is stored off in a member variable, because the save-as
// button and drag and drop functionality need to know.
BOOL mIsCopyable;
+ BOOL mIsFullPerm;
BOOL mUpdateDimensions;
S32 mLastHeight;
S32 mLastWidth;
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/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 590a1c2647..1d021ec28f 100755
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -378,6 +378,7 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
{
// Pass the new_message icon state further.
set_new_message = chicletp->getShowNewMessagesIcon();
+ chicletp->hidePopupMenu();
}
}
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 eb3a4c37d9..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
@@ -368,7 +365,7 @@ LLObjectSelectionHandle LLSelectMgr::selectObjectOnly(LLViewerObject* object, S3
//-----------------------------------------------------------------------------
// Select the object, parents and children.
//-----------------------------------------------------------------------------
-LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(LLViewerObject* obj, BOOL add_to_end)
+LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(LLViewerObject* obj, BOOL add_to_end, BOOL ignore_select_owned)
{
llassert( obj );
@@ -385,7 +382,7 @@ LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(LLViewerObject* obj,
return NULL;
}
- if (!canSelectObject(obj))
+ if (!canSelectObject(obj,ignore_select_owned))
{
//make_ui_sound("UISndInvalidOp");
return NULL;
@@ -1766,6 +1763,40 @@ void LLSelectMgr::selectionRevertColors()
getSelection()->applyToObjects(&sendfunc);
}
+void LLSelectMgr::selectionRevertShinyColors()
+{
+ struct f : public LLSelectedTEFunctor
+ {
+ LLObjectSelectionHandle mSelectedObjects;
+ f(LLObjectSelectionHandle sel) : mSelectedObjects(sel) {}
+ bool apply(LLViewerObject* object, S32 te)
+ {
+ if (object->permModify())
+ {
+ LLSelectNode* nodep = mSelectedObjects->findNode(object);
+ if (nodep && te < (S32)nodep->mSavedShinyColors.size())
+ {
+ LLColor4 color = nodep->mSavedShinyColors[te];
+ // update viewer side color in anticipation of update from simulator
+ LLMaterialPtr old_mat = object->getTE(te)->getMaterialParams();
+ if (!old_mat.isNull())
+ {
+ LLMaterialPtr new_mat = gFloaterTools->getPanelFace()->createDefaultMaterial(old_mat);
+ new_mat->setSpecularLightColor(color);
+ object->getTE(te)->setMaterialParams(new_mat);
+ LLMaterialMgr::getInstance()->put(object->getID(), te, *new_mat);
+ }
+ }
+ }
+ return true;
+ }
+ } setfunc(mSelectedObjects);
+ getSelection()->applyToTEs(&setfunc);
+
+ LLSelectMgrSendFunctor sendfunc;
+ getSelection()->applyToObjects(&sendfunc);
+}
+
BOOL LLSelectMgr::selectionRevertTextures()
{
struct f : public LLSelectedTEFunctor
@@ -1941,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
}
@@ -4501,6 +4532,19 @@ void LLSelectMgr::saveSelectedObjectColors()
getSelection()->applyToNodes(&func);
}
+void LLSelectMgr::saveSelectedShinyColors()
+{
+ struct f : public LLSelectedNodeFunctor
+ {
+ virtual bool apply(LLSelectNode* node)
+ {
+ node->saveShinyColors();
+ return true;
+ }
+ } func;
+ getSelection()->applyToNodes(&func);
+}
+
void LLSelectMgr::saveSelectedObjectTextures()
{
// invalidate current selection so we update saved textures
@@ -4596,11 +4640,18 @@ struct LLSelectMgrApplyFlags : public LLSelectedObjectFunctor
BOOL mState;
virtual bool apply(LLViewerObject* object)
{
- if ( object->permModify() && // preemptive permissions check
- object->isRoot()) // don't send for child objects
+ if ( object->permModify())
{
- object->setFlags( mFlags, mState);
- }
+ if (object->isRoot()) // don't send for child objects
+ {
+ object->setFlags( mFlags, mState);
+ }
+ else if (FLAGS_WORLD & mFlags && ((LLViewerObject*)object->getRoot())->isSelected())
+ {
+ // FLAGS_WORLD are shared by all items in linkset
+ object->setFlagsWithoutUpdate(FLAGS_WORLD & mFlags, mState);
+ }
+ };
return true;
}
};
@@ -5752,6 +5803,7 @@ LLSelectNode::LLSelectNode(LLViewerObject* object, BOOL glow)
mCreationDate(0)
{
saveColors();
+ saveShinyColors();
}
LLSelectNode::LLSelectNode(const LLSelectNode& nodep)
@@ -5797,6 +5849,11 @@ LLSelectNode::LLSelectNode(const LLSelectNode& nodep)
{
mSavedColors.push_back(*color_iter);
}
+ mSavedShinyColors.clear();
+ for (color_iter = nodep.mSavedShinyColors.begin(); color_iter != nodep.mSavedShinyColors.end(); ++color_iter)
+ {
+ mSavedShinyColors.push_back(*color_iter);
+ }
saveTextures(nodep.mSavedTextures);
}
@@ -5880,6 +5937,26 @@ void LLSelectNode::saveColors()
}
}
+void LLSelectNode::saveShinyColors()
+{
+ if (mObject.notNull())
+ {
+ mSavedShinyColors.clear();
+ for (S32 i = 0; i < mObject->getNumTEs(); i++)
+ {
+ const LLMaterialPtr mat = mObject->getTE(i)->getMaterialParams();
+ if (!mat.isNull())
+ {
+ mSavedShinyColors.push_back(mat->getSpecularLightColor());
+ }
+ else
+ {
+ mSavedShinyColors.push_back(LLColor4::white);
+ }
+ }
+ }
+}
+
void LLSelectNode::saveTextures(const uuid_vec_t& textures)
{
if (mObject.notNull())
@@ -6698,29 +6775,32 @@ void LLSelectMgr::validateSelection()
getSelection()->applyToObjects(&func);
}
-BOOL LLSelectMgr::canSelectObject(LLViewerObject* object)
+BOOL LLSelectMgr::canSelectObject(LLViewerObject* object, BOOL ignore_select_owned)
{
// Never select dead objects
if (!object || object->isDead())
{
return FALSE;
}
-
+
if (mForceSelection)
{
return TRUE;
}
- if ((gSavedSettings.getBOOL("SelectOwnedOnly") && !object->permYouOwner()) ||
- (gSavedSettings.getBOOL("SelectMovableOnly") && (!object->permMove() || object->isPermanentEnforced())))
+ if(!ignore_select_owned)
{
- // only select my own objects
- return FALSE;
+ if ((gSavedSettings.getBOOL("SelectOwnedOnly") && !object->permYouOwner()) ||
+ (gSavedSettings.getBOOL("SelectMovableOnly") && (!object->permMove() || object->isPermanentEnforced())))
+ {
+ // only select my own objects
+ return FALSE;
+ }
}
// Can't select orphans
if (object->isOrphaned()) return FALSE;
-
+
// Can't select avatars
if (object->isAvatar()) return FALSE;
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
index a68328167a..23c41e4cc1 100755
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -179,6 +179,7 @@ public:
void setObject(LLViewerObject* object);
// *NOTE: invalidate stored textures and colors when # faces change
void saveColors();
+ void saveShinyColors();
void saveTextures(const uuid_vec_t& textures);
void saveTextureScaleRatios(LLRender::eTexIndex index_to_query);
@@ -215,6 +216,7 @@ public:
std::string mSitName;
U64 mCreationDate;
std::vector<LLColor4> mSavedColors;
+ std::vector<LLColor4> mSavedShinyColors;
uuid_vec_t mSavedTextures;
std::vector<LLVector3> mTextureScaleRatios;
std::vector<LLVector3> mSilhouetteVertices; // array of vertices to render silhouette of object
@@ -452,7 +454,7 @@ public:
//
// *NOTE: You must hold on to the object selection handle, otherwise
// the objects will be automatically deselected in 1 frame.
- LLObjectSelectionHandle selectObjectAndFamily(LLViewerObject* object, BOOL add_to_end = FALSE);
+ LLObjectSelectionHandle selectObjectAndFamily(LLViewerObject* object, BOOL add_to_end = FALSE, BOOL ignore_select_owned = FALSE);
// For when you want just a child object.
LLObjectSelectionHandle selectObjectOnly(LLViewerObject* object, S32 face = SELECT_ALL_TES);
@@ -545,6 +547,7 @@ public:
////////////////////////////////////////////////////////////////
void saveSelectedObjectTransform(EActionType action_type);
void saveSelectedObjectColors();
+ void saveSelectedShinyColors();
void saveSelectedObjectTextures();
// Sets which texture channel to query for scale and rot of display
@@ -573,6 +576,7 @@ public:
void selectionSetColorOnly(const LLColor4 &color); // Set only the RGB channels
void selectionSetAlphaOnly(const F32 alpha); // Set only the alpha channel
void selectionRevertColors();
+ void selectionRevertShinyColors();
BOOL selectionRevertTextures();
void selectionSetBumpmap( U8 bumpmap );
void selectionSetTexGen( U8 texgen );
@@ -605,7 +609,7 @@ public:
void validateSelection();
// returns TRUE if it is possible to select this object
- BOOL canSelectObject(LLViewerObject* object);
+ BOOL canSelectObject(LLViewerObject* object, BOOL ignore_select_owned = FALSE);
// Returns TRUE if the viewer has information on all selected objects
BOOL selectGetAllRootsValid();
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/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 1d20b7bed5..126f1fb9de 100755
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -32,6 +32,7 @@
#include "llagent.h"
#include "llavataractions.h"
#include "llbutton.h"
+#include "llcombobox.h"
#include "llfloaterreg.h"
#include "llgroupactions.h"
#include "llinventorydefines.h"
@@ -173,6 +174,8 @@ BOOL LLSidepanelItemInfo::postBuild()
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
// Mark for sale or not, and sale info
getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
+ // Change sale type, and sale info
+ getChild<LLUICtrl>("ComboBoxSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
// "Price" label for edit
getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
refresh();
@@ -435,7 +438,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
"CheckNextOwnerTransfer",
"CheckPurchase",
"SaleLabel",
- "combobox sale copy",
+ "ComboBoxSaleType",
"Edit Cost",
"TextPrice"
};
@@ -617,6 +620,9 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
const LLSaleInfo& sale_info = item->getSaleInfo();
BOOL is_for_sale = sale_info.isForSale();
+ LLComboBox* combo_sale_type = getChild<LLComboBox>("ComboBoxSaleType");
+ LLUICtrl* edit_cost = getChild<LLUICtrl>("Edit Cost");
+
// Check for ability to change values.
if (is_obj_modify && can_agent_sell
&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))
@@ -630,7 +636,8 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions);
getChildView("TextPrice")->setEnabled(is_complete && is_for_sale);
- getChildView("Edit Cost")->setEnabled(is_complete && is_for_sale);
+ combo_sale_type->setEnabled(is_complete && is_for_sale);
+ edit_cost->setEnabled(is_complete && is_for_sale);
}
else
{
@@ -643,13 +650,12 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE);
getChildView("TextPrice")->setEnabled(FALSE);
- getChildView("Edit Cost")->setEnabled(FALSE);
+ combo_sale_type->setEnabled(FALSE);
+ edit_cost->setEnabled(FALSE);
}
// Set values.
getChild<LLUICtrl>("CheckPurchase")->setValue(is_for_sale);
- getChildView("combobox sale copy")->setEnabled(is_for_sale);
- getChildView("Edit Cost")->setEnabled(is_for_sale);
getChild<LLUICtrl>("CheckNextOwnerModify")->setValue(LLSD(BOOL(next_owner_mask & PERM_MODIFY)));
getChild<LLUICtrl>("CheckNextOwnerCopy")->setValue(LLSD(BOOL(next_owner_mask & PERM_COPY)));
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setValue(LLSD(BOOL(next_owner_mask & PERM_TRANSFER)));
@@ -658,11 +664,13 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
{
S32 numerical_price;
numerical_price = sale_info.getSalePrice();
- getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",numerical_price));
+ edit_cost->setValue(llformat("%d",numerical_price));
+ combo_sale_type->setValue(sale_info.getSaleType());
}
else
{
- getChild<LLUICtrl>("Edit Cost")->setValue(llformat("%d",0));
+ edit_cost->setValue(llformat("%d",0));
+ combo_sale_type->setValue(LLSaleInfo::FS_COPY);
}
}
@@ -918,24 +926,10 @@ void LLSidepanelItemInfo::updateSaleInfo()
// turn on sale info
LLSaleInfo::EForSale sale_type = LLSaleInfo::FS_COPY;
- LLRadioGroup* RadioSaleType = getChild<LLRadioGroup>("RadioSaleType");
- if(RadioSaleType)
+ LLComboBox* combo_sale_type = getChild<LLComboBox>("ComboBoxSaleType");
+ if (combo_sale_type)
{
- switch (RadioSaleType->getSelectedIndex())
- {
- case 0:
- sale_type = LLSaleInfo::FS_ORIGINAL;
- break;
- case 1:
- sale_type = LLSaleInfo::FS_COPY;
- break;
- case 2:
- sale_type = LLSaleInfo::FS_CONTENTS;
- break;
- default:
- sale_type = LLSaleInfo::FS_COPY;
- break;
- }
+ sale_type = static_cast<LLSaleInfo::EForSale>(combo_sale_type->getValue().asInteger());
}
if (sale_type == LLSaleInfo::FS_COPY
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 636654ad23..17ecfab4fb 100755
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -499,17 +499,19 @@ void LLSidepanelTaskInfo::refresh()
// You own these objects.
else if (self_owned || (group_owned && gAgent.hasPowerInGroup(group_id,GP_OBJECT_SET_SALE)))
{
+ LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
+
// If there are multiple items for sale then set text to PRICE PER UNIT.
if (num_for_sale > 1)
{
- getChild<LLUICtrl>("Cost")->setValue(getString("Cost Per Unit"));
+ std::string label_text = is_sale_price_mixed? "Cost Mixed" :"Cost Per Unit";
+ edit_price->setLabel(getString(label_text));
}
else
{
- getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
+ edit_price->setLabel(getString("Cost Default"));
}
- LLSpinCtrl *edit_price = getChild<LLSpinCtrl>("Edit Cost");
if (!edit_price->hasFocus())
{
// If the sale price is mixed then set the cost to MIXED, otherwise
@@ -547,16 +549,15 @@ void LLSidepanelTaskInfo::refresh()
// If multiple items are for sale, set text to TOTAL PRICE.
if (num_for_sale > 1)
- getChild<LLUICtrl>("Cost")->setValue(getString("Cost Total"));
+ getChild<LLSpinCtrl>("Edit Cost")->setLabel(getString("Cost Total"));
else
- getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
+ getChild<LLSpinCtrl>("Edit Cost")->setLabel(getString("Cost Default"));
}
// This is a public object.
else
{
getChildView("Cost")->setEnabled(FALSE);
- getChild<LLUICtrl>("Cost")->setValue(getString("Cost Default"));
-
+ getChild<LLSpinCtrl>("Edit Cost")->setLabel(getString("Cost Default"));
getChild<LLUICtrl>("Edit Cost")->setValue(LLStringUtil::null);
getChildView("Edit Cost")->setEnabled(FALSE);
}
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 600ebf5914..0ae8a338e0 100644
--- a/indra/newview/llsnapshotlivepreview.cpp
+++ b/indra/newview/llsnapshotlivepreview.cpp
@@ -116,6 +116,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLSnapshotLivePreview::Param
mThumbnailUpdateLock = FALSE ;
mThumbnailUpToDate = FALSE ;
mBigThumbnailUpToDate = FALSE ;
+
+ mForceUpdateSnapshot = FALSE;
}
LLSnapshotLivePreview::~LLSnapshotLivePreview()
@@ -177,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;
}
@@ -345,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();
@@ -429,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);
{
@@ -483,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)
@@ -671,18 +673,19 @@ BOOL LLSnapshotLivePreview::onIdle( void* snapshot_preview )
// If we're in freeze-frame mode and camera has moved, update snapshot.
LLVector3 new_camera_pos = LLViewerCamera::getInstance()->getOrigin();
LLQuaternion new_camera_rot = LLViewerCamera::getInstance()->getQuaternion();
- if (gSavedSettings.getBOOL("FreezeTime") && previewp->mAllowFullScreenPreview &&
- (new_camera_pos != previewp->mCameraPos || dot(new_camera_rot, previewp->mCameraRot) < 0.995f))
+ if (previewp->mForceUpdateSnapshot || (gSavedSettings.getBOOL("FreezeTime") && previewp->mAllowFullScreenPreview &&
+ (new_camera_pos != previewp->mCameraPos || dot(new_camera_rot, previewp->mCameraRot) < 0.995f)))
{
previewp->mCameraPos = new_camera_pos;
previewp->mCameraRot = new_camera_rot;
// request a new snapshot whenever the camera moves, with a time delay
- BOOL autosnap = gSavedSettings.getBOOL("AutoSnapshot");
+ BOOL new_snapshot = gSavedSettings.getBOOL("AutoSnapshot") || previewp->mForceUpdateSnapshot;
LL_DEBUGS() << "camera moved, updating thumbnail" << LL_ENDL;
previewp->updateSnapshot(
- autosnap, // whether a new snapshot is needed or merely invalidate the existing one
+ new_snapshot, // whether a new snapshot is needed or merely invalidate the existing one
FALSE, // or if 1st arg is false, whether to produce a new thumbnail image.
- autosnap ? AUTO_SNAPSHOT_TIME_DELAY : 0.f); // shutter delay if 1st arg is true.
+ new_snapshot ? AUTO_SNAPSHOT_TIME_DELAY : 0.f); // shutter delay if 1st arg is true.
+ previewp->mForceUpdateSnapshot = FALSE;
}
// see if it's time yet to snap the shot and bomb out otherwise.
diff --git a/indra/newview/llsnapshotlivepreview.h b/indra/newview/llsnapshotlivepreview.h
index e1937187a3..fed33bf37c 100644
--- a/indra/newview/llsnapshotlivepreview.h
+++ b/indra/newview/llsnapshotlivepreview.h
@@ -182,6 +182,7 @@ private:
public:
static std::set<LLSnapshotLivePreview*> sList;
BOOL mKeepAspectRatio ;
+ BOOL mForceUpdateSnapshot;
};
#endif // LL_LLSNAPSHOTLIVEPREVIEW_H
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index e80756e4de..7867e1573c 100755
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -611,11 +611,14 @@ void LLSpeakerMgr::updateSpeakerList()
setSpeaker(gAgentID, "", LLSpeaker::STATUS_VOICE_ACTIVE, LLSpeaker::SPEAKER_AGENT);
}
-void LLSpeakerMgr::setSpeakerNotInChannel(LLSpeaker* speakerp)
+void LLSpeakerMgr::setSpeakerNotInChannel(LLPointer<LLSpeaker> speakerp)
{
- speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL;
- speakerp->mDotColor = INACTIVE_COLOR;
- mSpeakerDelayRemover->setActionTimer(speakerp->mID);
+ if (speakerp.notNull())
+ {
+ speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL;
+ speakerp->mDotColor = INACTIVE_COLOR;
+ mSpeakerDelayRemover->setActionTimer(speakerp->mID);
+ }
}
bool LLSpeakerMgr::removeSpeaker(const LLUUID& speaker_id)
@@ -795,7 +798,7 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
if (agent_data.isMap() && agent_data.has("transition"))
{
- if (agent_data["transition"].asString() == "LEAVE" && speakerp.notNull())
+ if (agent_data["transition"].asString() == "LEAVE")
{
setSpeakerNotInChannel(speakerp);
}
@@ -806,7 +809,7 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
}
else
{
- LL_WARNS() << "bad membership list update " << ll_print_sd(agent_data["transition"]) << LL_ENDL;
+ LL_WARNS() << "bad membership list update from 'agent_updates' for agent " << agent_id << ", transition " << ll_print_sd(agent_data["transition"]) << LL_ENDL;
}
}
@@ -848,7 +851,7 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
LLPointer<LLSpeaker> speakerp = findSpeaker(agent_id);
std::string agent_transition = update_it->second.asString();
- if (agent_transition == "LEAVE" && speakerp.notNull())
+ if (agent_transition == "LEAVE")
{
setSpeakerNotInChannel(speakerp);
}
@@ -859,8 +862,7 @@ void LLIMSpeakerMgr::updateSpeakers(const LLSD& update)
}
else
{
- LL_WARNS() << "bad membership list update "
- << agent_transition << LL_ENDL;
+ LL_WARNS() << "bad membership list update from 'updates' for agent " << agent_id << ", transition " << agent_transition << LL_ENDL;
}
}
}
@@ -1041,8 +1043,8 @@ void LLLocalSpeakerMgr::updateSpeakerList()
for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); ++speaker_it)
{
LLUUID speaker_id = speaker_it->first;
- LLSpeaker* speakerp = speaker_it->second;
- if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY)
+ LLPointer<LLSpeaker> speakerp = speaker_it->second;
+ if (speakerp.notNull() && speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY)
{
LLVOAvatar* avatarp = (LLVOAvatar*)gObjectList.findObject(speaker_id);
if (!avatarp || dist_vec_squared(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS * CHAT_NORMAL_RADIUS)
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index e953dd0e1a..0e69184125 100755
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -258,7 +258,7 @@ public:
protected:
virtual void updateSpeakerList();
- void setSpeakerNotInChannel(LLSpeaker* speackerp);
+ void setSpeakerNotInChannel(LLPointer<LLSpeaker> speackerp);
bool removeSpeaker(const LLUUID& speaker_id);
typedef std::map<LLUUID, LLPointer<LLSpeaker> > speaker_map_t;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 9da7717b74..42fc300187 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1352,11 +1352,11 @@ bool idle_startup()
{
LLStringUtil::format_map_t args;
args["[NUMBER]"] = llformat("%d", num_retries + 1);
- set_startup_status(0.4f, LLTrans::getString("LoginRetrySeedCapGrant", args), gAgent.mMOTD);
+ set_startup_status(0.4f, LLTrans::getString("LoginRetrySeedCapGrant", args), gAgent.mMOTD.c_str());
}
else
{
- set_startup_status(0.4f, LLTrans::getString("LoginRequestSeedCapGrant"), gAgent.mMOTD);
+ set_startup_status(0.4f, LLTrans::getString("LoginRequestSeedCapGrant"), gAgent.mMOTD.c_str());
}
}
display_startup();
@@ -2070,7 +2070,7 @@ bool idle_startup()
update_texture_fetch();
set_startup_status(0.60f + 0.30f * timeout_frac,
LLTrans::getString("LoginPrecaching"),
- gAgent.mMOTD);
+ gAgent.mMOTD.c_str());
display_startup();
}
@@ -2210,6 +2210,8 @@ bool idle_startup()
llassert(LLPathfindingManager::getInstance() != NULL);
LLPathfindingManager::getInstance()->initSystem();
+ gAgentAvatarp->sendHoverHeight();
+
return TRUE;
}
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 a426669b5e..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;
@@ -586,9 +580,9 @@ void LLFloaterTexturePicker::draw()
mTentativeLabel->setVisible( FALSE );
}
- getChildView("Default")->setEnabled(mImageAssetID != mOwner->getDefaultImageAssetID());
- getChildView("Blank")->setEnabled(mImageAssetID != mOwner->getBlankImageAssetID());
- getChildView("None")->setEnabled(mOwner->getAllowNoTexture() && !mImageAssetID.isNull() );
+ getChildView("Default")->setEnabled(mImageAssetID != mOwner->getDefaultImageAssetID() || mOwner->getTentative());
+ getChildView("Blank")->setEnabled(mImageAssetID != mOwner->getBlankImageAssetID() || mOwner->getTentative());
+ getChildView("None")->setEnabled(mOwner->getAllowNoTexture() && (!mImageAssetID.isNull() || mOwner->getTentative()));
LLFloater::draw();
@@ -1511,8 +1505,8 @@ void LLTextureCtrl::draw()
gl_draw_x( interior, LLColor4::black );
}
- mTentativeLabel->setVisible( !mTexturep.isNull() && getTentative() );
-
+ mTentativeLabel->setVisible( getTentative() );
+
// Show "Loading..." string on the top left corner while this texture is loading.
// Using the discard level, do not show the string if the texture is almost but not
// fully loaded.
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 8561d265de..526f8d1cd8 100755
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -34,6 +34,7 @@
#include "llagentcamera.h"
#include "llagentwearables.h"
#include "llappearancemgr.h"
+#include "llavatarnamecache.h"
#include "lldictionary.h"
#include "llfloaterreg.h"
#include "llfloatertools.h"
@@ -947,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);
}
}
@@ -1705,9 +1705,14 @@ bool LLToolDragAndDrop::handleGiveDragAndDrop(LLUUID dest_agent, LLUUID session_
return true;
}
-
+ std::string dest_name = session->mName;
+ LLAvatarName av_name;
+ if(LLAvatarNameCache::get(dest_agent, &av_name))
+ {
+ dest_name = av_name.getCompleteName();
+ }
// If an IM session with destination agent is found item offer will be logged in this session.
- show_object_sharing_confirmation(session->mName, inv_obj, dest, dest_agent, session_id);
+ show_object_sharing_confirmation(dest_name, inv_obj, dest, dest_agent, session_id);
}
}
else
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
index 58073d1186..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
@@ -136,7 +135,7 @@ BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask)
gViewerWindow->hideCursor();
- gViewerWindow->pickAsync(x, y, mask, pickCallback);
+ gViewerWindow->pickAsync(x, y, mask, pickCallback, FALSE, TRUE);
return TRUE;
}
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 981e4c40aa..afa00e3e6e 100755
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -930,8 +930,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
if (gSavedSettings.getBOOL("RenderDepthPrePass") && LLGLSLShader::sNoFixedFunction)
{
gGL.setColorMask(false, false);
-
- U32 types[] = {
+
+ static const U32 types[] = {
LLRenderPass::PASS_SIMPLE,
LLRenderPass::PASS_FULLBRIGHT,
LLRenderPass::PASS_SHINY
@@ -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/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index a197c1fe1a..af04122f8b 100755
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -70,6 +70,7 @@
#include "llfloatergroups.h"
#include "llfloaterhardwaresettings.h"
#include "llfloaterhelpbrowser.h"
+#include "llfloaterhoverheight.h"
#include "llfloaterhud.h"
#include "llfloaterimagepreview.h"
#include "llfloaterimsession.h"
@@ -222,7 +223,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("god_tools", "floater_god_tools.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGodTools>);
LLFloaterReg::add("group_picker", "floater_choose_group.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterGroupPicker>);
- LLFloaterReg::add("help_browser", "floater_help_browser.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHelpBrowser>);
+ LLFloaterReg::add("help_browser", "floater_help_browser.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHelpBrowser>);
+ LLFloaterReg::add("edit_hover_height", "floater_edit_hover_height.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHoverHeight>);
LLFloaterReg::add("hud", "floater_hud.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterHUD>);
LLFloaterReg::add("impanel", "floater_im_session.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterIMSession>);
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index a4a05587d3..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)
{
@@ -149,6 +148,8 @@ void camera_move_forward( EKeystate s );
void agent_push_forward( EKeystate s )
{
+ if(gAgent.isMovementLocked()) return;
+
//in free camera control mode we need to intercept keyboard events for avatar movements
if (LLFloaterCamera::inFreeCameraMode())
{
@@ -164,6 +165,8 @@ void camera_move_backward( EKeystate s );
void agent_push_backward( EKeystate s )
{
+ if(gAgent.isMovementLocked()) return;
+
//in free camera control mode we need to intercept keyboard events for avatar movements
if (LLFloaterCamera::inFreeCameraMode())
{
@@ -184,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)
{
@@ -199,12 +202,14 @@ static void agent_slide_leftright( EKeystate s, S32 direction, LLAgent::EDoubleT
void agent_slide_left( EKeystate s )
{
+ if(gAgent.isMovementLocked()) return;
agent_slide_leftright(s, 1, LLAgent::DOUBLETAP_SLIDELEFT);
}
void agent_slide_right( EKeystate s )
{
+ if(gAgent.isMovementLocked()) return;
agent_slide_leftright(s, -1, LLAgent::DOUBLETAP_SLIDERIGHT);
}
@@ -219,6 +224,8 @@ void agent_turn_left( EKeystate s )
return;
}
+ if(gAgent.isMovementLocked()) return;
+
if (LLToolCamera::getInstance()->mouseSteerMode())
{
agent_slide_left(s);
@@ -247,6 +254,8 @@ void agent_turn_right( EKeystate s )
return;
}
+ if(gAgent.isMovementLocked()) return;
+
if (LLToolCamera::getInstance()->mouseSteerMode())
{
agent_slide_right(s);
@@ -320,8 +329,8 @@ void camera_spin_around_cw( EKeystate s )
void camera_spin_around_ccw_sitting( EKeystate s )
{
- if( KEYSTATE_UP == s ) return;
- if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled())
+ if( KEYSTATE_UP == s && gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_SLIDERIGHT ) return;
+ if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled() || gAgent.getRunning())
{
//send keystrokes, but do not change camera
agent_turn_right(s);
@@ -336,8 +345,8 @@ void camera_spin_around_ccw_sitting( EKeystate s )
void camera_spin_around_cw_sitting( EKeystate s )
{
- if( KEYSTATE_UP == s ) return;
- if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled())
+ if( KEYSTATE_UP == s && gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_SLIDELEFT ) return;
+ if (gAgent.rotateGrabbed() || gAgentCamera.sitCameraEnabled() || gAgent.getRunning())
{
//send keystrokes, but do not change camera
agent_turn_left(s);
@@ -413,8 +422,8 @@ void camera_move_backward( EKeystate s )
void camera_move_forward_sitting( EKeystate s )
{
- if( KEYSTATE_UP == s ) return;
- if (gAgent.forwardGrabbed() || gAgentCamera.sitCameraEnabled())
+ if( KEYSTATE_UP == s && gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_FORWARD ) return;
+ if (gAgent.forwardGrabbed() || gAgentCamera.sitCameraEnabled() || gAgent.getRunning())
{
agent_push_forward(s);
}
@@ -427,9 +436,9 @@ void camera_move_forward_sitting( EKeystate s )
void camera_move_backward_sitting( EKeystate s )
{
- if( KEYSTATE_UP == s ) return;
+ if( KEYSTATE_UP == s && gAgent.mDoubleTapRunMode != LLAgent::DOUBLETAP_BACKWARD ) return;
- if (gAgent.backwardGrabbed() || gAgentCamera.sitCameraEnabled())
+ if (gAgent.backwardGrabbed() || gAgentCamera.sitCameraEnabled() || gAgent.getRunning())
{
agent_push_backward(s);
}
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 8499012cfc..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());
@@ -2703,7 +2703,7 @@ bool LLViewerMediaImpl::handleKeyHere(KEY key, MASK mask)
{
// FIXME: THIS IS SO WRONG.
// Menu keys should be handled by the menu system and not passed to UI elements, but this is how LLTextEditor and LLLineEditor do it...
- if( MASK_CONTROL & mask )
+ if( MASK_CONTROL & mask && key != KEY_LEFT && key != KEY_RIGHT && key != KEY_HOME && key != KEY_END)
{
result = true;
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 3abeba4b43..3b0adcf7f4 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2580,9 +2580,13 @@ static LLStringExplicit get_default_item_label(const std::string& item_name)
bool enable_object_touch(LLUICtrl* ctrl)
{
+ bool new_value = false;
LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
-
- bool new_value = obj && obj->flagHandleTouch();
+ if (obj)
+ {
+ LLViewerObject* parent = (LLViewerObject*)obj->getParent();
+ new_value = obj->flagHandleTouch() || (parent && parent->flagHandleTouch());
+ }
std::string item_name = ctrl->getName();
init_default_item_label(item_name);
@@ -2867,6 +2871,11 @@ bool enable_object_select_in_pathfinding_linksets()
return LLPathfindingManager::getInstance()->isPathfindingEnabledForCurrentRegion() && LLSelectMgr::getInstance()->selectGetEditableLinksets();
}
+bool visible_object_select_in_pathfinding_linksets()
+{
+ return LLPathfindingManager::getInstance()->isPathfindingEnabledForCurrentRegion();
+}
+
bool enable_object_select_in_pathfinding_characters()
{
return LLPathfindingManager::getInstance()->isPathfindingEnabledForCurrentRegion() && LLSelectMgr::getInstance()->selectGetViewableCharacters();
@@ -3590,7 +3599,7 @@ class LLSelfSitDown : public view_listener_t
bool enable_sitdown_self()
{
- return isAgentAvatarValid() && !gAgentAvatarp->isSitting() && !gAgent.getFlying();
+ return isAgentAvatarValid() && !gAgentAvatarp->isSitting() && !gAgentAvatarp->isEditingAppearance() && !gAgent.getFlying();
}
class LLCheckPanelPeopleTab : public view_listener_t
@@ -3881,6 +3890,14 @@ class LLEnableEditShape : public view_listener_t
}
};
+class LLEnableHoverHeight : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ return gAgent.getRegion() && gAgent.getRegion()->avatarHoverHeightEnabled();
+ }
+};
+
class LLEnableEditPhysics : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -4354,7 +4371,10 @@ static bool get_derezzable_objects(
break;
case DRD_RETURN_TO_OWNER:
- can_derez_current = TRUE;
+ if(!object->isAttachment())
+ {
+ can_derez_current = TRUE;
+ }
break;
default:
@@ -4762,7 +4782,7 @@ BOOL enable_take()
&& object->permModify())
|| (node->mPermissions->getOwner() == gAgent.getID())))
{
- return TRUE;
+ return !object->isAttachment();
}
#endif
}
@@ -6075,6 +6095,11 @@ void handle_edit_shape()
LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_shape"));
}
+void handle_hover_height()
+{
+ LLFloaterReg::showInstance("edit_hover_height");
+}
+
void handle_edit_physics()
{
LLFloaterSidePanelContainer::showPanel("appearance", LLSD().with("type", "edit_physics"));
@@ -7021,10 +7046,6 @@ void handle_selected_texture_info(void*)
std::string msg;
msg.assign("Texture info for: ");
msg.append(node->mName);
-
- LLSD args;
- args["MESSAGE"] = msg;
- LLNotificationsUtil::add("SystemMessage", args);
U8 te_count = node->getObject()->getNumTEs();
// map from texture ID to list of faces using it
@@ -7048,10 +7069,10 @@ void handle_selected_texture_info(void*)
S32 height = img->getHeight();
S32 width = img->getWidth();
S32 components = img->getComponents();
- msg = llformat("%dx%d %s on face ",
+ msg.append(llformat("\n%dx%d %s on face ",
width,
height,
- (components == 4 ? "alpha" : "opaque"));
+ (components == 4 ? "alpha" : "opaque")));
for (U8 i = 0; i < it->second.size(); ++i)
{
msg.append( llformat("%d ", (S32)(it->second[i])));
@@ -8285,6 +8306,10 @@ class LLWorldEnableEnvSettings : public view_listener_t
{
result = (LLEnvManagerNew::instance().getSkyPresetName() == "Midnight");
}
+ else if (tod == "region")
+ {
+ return false;
+ }
else
{
LL_WARNS() << "Unknown time-of-day item: " << tod << LL_ENDL;
@@ -8571,10 +8596,12 @@ void initialize_menus()
view_listener_t::addMenu(new LLEditEnableTakeOff(), "Edit.EnableTakeOff");
view_listener_t::addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar");
view_listener_t::addMenu(new LLEnableEditShape(), "Edit.EnableEditShape");
+ view_listener_t::addMenu(new LLEnableHoverHeight(), "Edit.EnableHoverHeight");
view_listener_t::addMenu(new LLEnableEditPhysics(), "Edit.EnableEditPhysics");
commit.add("CustomizeAvatar", boost::bind(&handle_customize_avatar));
commit.add("EditOutfit", boost::bind(&handle_edit_outfit));
commit.add("EditShape", boost::bind(&handle_edit_shape));
+ commit.add("HoverHeight", boost::bind(&handle_hover_height));
commit.add("EditPhysics", boost::bind(&handle_edit_physics));
// View menu
@@ -8983,6 +9010,7 @@ void initialize_menus()
enable.add("VisibleBuild", boost::bind(&enable_object_build));
commit.add("Pathfinding.Linksets.Select", boost::bind(&LLFloaterPathfindingLinksets::openLinksetsWithSelectedObjects));
enable.add("EnableSelectInPathfindingLinksets", boost::bind(&enable_object_select_in_pathfinding_linksets));
+ enable.add("VisibleSelectInPathfindingLinksets", boost::bind(&visible_object_select_in_pathfinding_linksets));
commit.add("Pathfinding.Characters.Select", boost::bind(&LLFloaterPathfindingCharacters::openCharactersWithSelectedObjects));
enable.add("EnableSelectInPathfindingCharacters", boost::bind(&enable_object_select_in_pathfinding_characters));
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index b2a37694fe..f8e50ba463 100755
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -503,6 +503,7 @@ class LLFileCloseWindow : public view_listener_t
{
LLFloater::closeFrontmostFloater();
}
+ if (gMenuHolder) gMenuHolder->hideMenus();
return true;
}
};
@@ -525,6 +526,7 @@ class LLFileCloseAllWindows : public view_listener_t
bool app_quitting = false;
gFloaterView->closeAllChildren(app_quitting);
LLFloaterSnapshot::getInstance()->closeFloater(app_quitting);
+ if (gMenuHolder) gMenuHolder->hideMenus();
return true;
}
};
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 99db3ff093..d4330cedd0 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");
@@ -2690,7 +2687,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
LLSD args;
args["SUBJECT"] = subj;
args["MESSAGE"] = mes;
- LLNotifications::instance().add(LLNotification::Params("GroupNotice").substitutions(args).payload(payload).time_stamp(LLDate(timestamp)));
+ LLDate notice_date = LLDate(timestamp).notNull() ? LLDate(timestamp) : LLDate::now();
+ LLNotifications::instance().add(LLNotification::Params("GroupNotice").substitutions(args).payload(payload).time_stamp(notice_date));
}
// Also send down the old path for now.
@@ -5117,7 +5115,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
}
@@ -7119,8 +7117,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 820249e181..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 */
@@ -3374,8 +3374,17 @@ void LLViewerObject::setLinksetCost(F32 cost)
{
mLinksetCost = cost;
mCostStale = false;
-
- if (isSelected())
+
+ BOOL needs_refresh = isSelected();
+ child_list_t::iterator iter = mChildList.begin();
+ while(iter != mChildList.end() && !needs_refresh)
+ {
+ LLViewerObject* child = *iter;
+ needs_refresh = child->isSelected();
+ iter++;
+ }
+
+ if (needs_refresh)
{
gFloaterTools->dirty();
}
@@ -5205,7 +5214,6 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow
{
if (!gAudiop)
{
- LL_WARNS("AudioEngine") << "LLAudioEngine instance doesn't exist!" << LL_ENDL;
return;
}
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 7c94442f09..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 );
@@ -705,7 +705,7 @@ bool LLViewerParcelMgr::allowAgentScripts(const LLViewerRegion* region, const LL
bool LLViewerParcelMgr::allowAgentDamage(const LLViewerRegion* region, const LLParcel* parcel) const
{
return (region && region->getAllowDamage())
- || (parcel && parcel->getAllowDamage());
+ && (parcel && parcel->getAllowDamage());
}
BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const
@@ -1562,6 +1562,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
if (parcel == parcel_mgr.mAgentParcel)
{
+ // new agent parcel
S32 bitmap_size = parcel_mgr.mParcelsPerEdge
* parcel_mgr.mParcelsPerEdge
/ 8;
@@ -1591,6 +1592,11 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
}
}
+ else if (local_id == parcel_mgr.mAgentParcel->getLocalID())
+ {
+ // updated agent parcel
+ parcel_mgr.mAgentParcel->unpackMessage(msg);
+ }
}
// Handle updating selections, if necessary.
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 11cbf3fc24..92e07c52a5 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -66,6 +66,7 @@
#include "llviewerstatsrecorder.h"
#include "llvlmanager.h"
#include "llvlcomposition.h"
+#include "llvoavatarself.h"
#include "llvocache.h"
#include "llworld.h"
#include "llspatialpartition.h"
@@ -87,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.
@@ -424,6 +423,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
mCacheDirty(FALSE),
mReleaseNotesRequested(FALSE),
mCapabilitiesReceived(false),
+ mSimulatorFeaturesReceived(false),
mBitsReceived(0.f),
mPacketsReceived(0.f),
mDead(FALSE),
@@ -1485,16 +1485,27 @@ void LLViewerRegion::killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>&
if(drawablep && !drawablep->getParent())
{
- LLViewerObject::const_child_list_t& child_list = drawablep->getVObj()->getChildren();
+ LLViewerObject* v_obj = drawablep->getVObj();
+ if (v_obj->isSelected()
+ || (v_obj->flagAnimSource() && isAgentAvatarValid() && gAgentAvatarp->hasMotionFromSource(v_obj->getID())))
+ {
+ // do not remove objects user is interacting with
+ ((LLViewerOctreeEntryData*)drawablep)->setVisible();
+ return;
+ }
+ LLViewerObject::const_child_list_t& child_list = v_obj->getChildren();
for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
iter != child_list.end(); iter++)
{
LLViewerObject* child = *iter;
if(child->mDrawable)
{
- if(!child->mDrawable->getEntry() || !child->mDrawable->getEntry()->hasVOCacheEntry())
+ if( !child->mDrawable->getEntry()
+ || !child->mDrawable->getEntry()->hasVOCacheEntry()
+ || child->isSelected()
+ || (child->flagAnimSource() && isAgentAvatarValid() && gAgentAvatarp->hasMotionFromSource(child->getID())))
{
- //do not remove parent if any of its children non-cacheable
+ //do not remove parent if any of its children non-cacheable, animating or selected
//especially for the case that an avatar sits on a cache-able object
((LLViewerOctreeEntryData*)drawablep)->setVisible();
return;
@@ -1924,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;
@@ -2027,6 +2037,26 @@ void LLViewerRegion::getInfo(LLSD& info)
info["Region"]["Handle"]["y"] = (LLSD::Integer)y;
}
+boost::signals2::connection LLViewerRegion::setSimulatorFeaturesReceivedCallback(const caps_received_signal_t::slot_type& cb)
+{
+ return mSimulatorFeaturesReceivedSignal.connect(cb);
+}
+
+void LLViewerRegion::setSimulatorFeaturesReceived(bool received)
+{
+ mSimulatorFeaturesReceived = received;
+ if (received)
+ {
+ mSimulatorFeaturesReceivedSignal(getRegionID());
+ mSimulatorFeaturesReceivedSignal.disconnect_all_slots();
+ }
+}
+
+bool LLViewerRegion::simulatorFeaturesReceived() const
+{
+ return mSimulatorFeaturesReceived;
+}
+
void LLViewerRegion::getSimulatorFeatures(LLSD& sim_features) const
{
sim_features = mSimulatorFeatures;
@@ -2040,6 +2070,9 @@ void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features)
LLSDSerialize::toPrettyXML(sim_features, str);
LL_INFOS() << str.str() << LL_ENDL;
mSimulatorFeatures = sim_features;
+
+ setSimulatorFeaturesReceived(true);
+
}
//this is called when the parent is not cacheable.
@@ -2692,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");
@@ -3088,6 +3118,12 @@ bool LLViewerRegion::dynamicPathfindingEnabled() const
return ( mSimulatorFeatures.has("DynamicPathfindingEnabled") &&
mSimulatorFeatures["DynamicPathfindingEnabled"].asBoolean());
}
+
+bool LLViewerRegion::avatarHoverHeightEnabled() const
+{
+ return ( mSimulatorFeatures.has("AvatarHoverHeightEnabled") &&
+ mSimulatorFeatures["AvatarHoverHeightEnabled"].asBoolean());
+}
/* Static Functions */
void log_capabilities(const CapabilityMap &capmap)
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index 1e225553b8..c14fa5aee8 100755
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -309,12 +309,19 @@ public:
bool meshRezEnabled() const;
bool meshUploadEnabled() const;
+ // has region received its simulator features list? Requires an additional query after caps received.
+ void setSimulatorFeaturesReceived(bool);
+ bool simulatorFeaturesReceived() const;
+ boost::signals2::connection setSimulatorFeaturesReceivedCallback(const caps_received_signal_t::slot_type& cb);
+
void getSimulatorFeatures(LLSD& info) const;
void setSimulatorFeatures(const LLSD& info);
bool dynamicPathfindingEnabled() const;
+ bool avatarHoverHeightEnabled() const;
+
typedef enum
{
CACHE_MISS_TYPE_FULL = 0,
@@ -385,7 +392,7 @@ public:
private:
void addToVOCacheTree(LLVOCacheEntry* entry);
LLViewerObject* addNewObject(LLVOCacheEntry* entry);
- void killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>& delete_list);
+ void killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>& delete_list); //adds entry into list if it is safe to move into cache
void removeFromVOCacheTree(LLVOCacheEntry* entry);
void killCacheEntry(LLVOCacheEntry* entry, bool for_rendering = false); //physically delete the cache entry
void killInvisibleObjects(F32 max_time);
@@ -512,6 +519,7 @@ private:
BOOL mCacheDirty;
BOOL mAlive; // can become false if circuit disconnects
BOOL mCapabilitiesReceived;
+ BOOL mSimulatorFeaturesReceived;
BOOL mReleaseNotesRequested;
BOOL mDead; //if true, this region is in the process of deleting.
BOOL mPaused; //pause processing the objects in the region
@@ -532,11 +540,13 @@ private:
CacheMissItem::cache_miss_list_t mCacheMissList;
caps_received_signal_t mCapabilitiesReceivedSignal;
+ caps_received_signal_t mSimulatorFeaturesReceivedSignal;
+
LLSD mSimulatorFeatures;
// the materials capability throttle
LLFrameTimer mMaterialsCapThrottleTimer;
-LLFrameTimer mRenderInfoRequestTimer;
+ LLFrameTimer mRenderInfoRequestTimer;
};
inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const
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 4e2eef39d6..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;
@@ -655,12 +654,36 @@ S8 LLViewerTexture::getType() const
void LLViewerTexture::cleanup()
{
+ notifyAboutMissingAsset();
+
mFaceList[LLRender::DIFFUSE_MAP].clear();
mFaceList[LLRender::NORMAL_MAP].clear();
mFaceList[LLRender::SPECULAR_MAP].clear();
mVolumeList.clear();
}
+void LLViewerTexture::notifyAboutCreatingTexture()
+{
+ for(U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)
+ {
+ for(U32 f = 0; f < mNumFaces[ch]; f++)
+ {
+ mFaceList[ch][f]->notifyAboutCreatingTexture(this);
+ }
+ }
+}
+
+void LLViewerTexture::notifyAboutMissingAsset()
+{
+ for(U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)
+ {
+ for(U32 f = 0; f < mNumFaces[ch]; f++)
+ {
+ mFaceList[ch][f]->notifyAboutMissingAsset(this);
+ }
+ }
+}
+
// virtual
void LLViewerTexture::dump()
{
@@ -1281,7 +1304,7 @@ void LLViewerFetchedTexture::addToCreateTexture()
llassert(mNumFaces[j] <= mFaceList[j].size());
for(U32 i = 0; i < mNumFaces[j]; i++)
- {
+ {
mFaceList[j][i]->dirtyTexture();
}
}
@@ -1431,9 +1454,11 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
destroyRawImage();
return FALSE;
}
-
- res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
-
+
+ res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
+
+ notifyAboutCreatingTexture();
+
setActive();
if (!needsToSaveRawImage())
@@ -1441,6 +1466,7 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
mNeedsAux = FALSE;
destroyRawImage();
}
+
return res;
}
@@ -2132,6 +2158,8 @@ void LLViewerFetchedTexture::setIsMissingAsset(BOOL is_missing)
}
if (is_missing)
{
+ notifyAboutMissingAsset();
+
if (mUrl.empty())
{
LL_WARNS() << mID << ": Marking image as missing" << LL_ENDL;
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 05912404e4..aed7e94945 100755
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -169,9 +169,13 @@ public:
/*virtual*/ void updateBindStatsForTester() ;
protected:
void cleanup() ;
- void init(bool firstinit) ;
+ void init(bool firstinit) ;
void reorganizeFaceList() ;
void reorganizeVolumeList() ;
+
+ void notifyAboutMissingAsset();
+ void notifyAboutCreatingTexture();
+
private:
friend class LLBumpImageList;
friend class LLUIImageList;
@@ -307,10 +311,11 @@ public:
void addToCreateTexture();
+
// ONLY call from LLViewerTextureList
BOOL createTexture(S32 usename = 0);
- void destroyTexture() ;
-
+ void destroyTexture() ;
+
virtual void processTextureStats() ;
F32 calcDecodePriority() ;
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 b98726900f..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));
}
@@ -622,7 +634,7 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image)
{
return;
}
- llassert(new_image);
+ //llassert(new_image);
LLUUID image_id = new_image->getID();
LLViewerFetchedTexture *image = findImage(image_id);
@@ -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 9dcd0b81e0..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)
@@ -3757,7 +3757,12 @@ BOOL LLViewerWindow::clickPointOnSurfaceGlobal(const S32 x, const S32 y, LLViewe
return intersect;
}
-void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& info), BOOL pick_transparent)
+void LLViewerWindow::pickAsync( S32 x,
+ S32 y_from_bot,
+ MASK mask,
+ void (*callback)(const LLPickInfo& info),
+ BOOL pick_transparent,
+ BOOL pick_unselectable)
{
BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)
@@ -3767,7 +3772,7 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback
pick_transparent = TRUE;
}
- LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, FALSE, TRUE, callback);
+ LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, FALSE, TRUE, pick_unselectable, callback);
schedulePick(pick_info);
}
@@ -3835,7 +3840,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_trans
// shortcut queueing in mPicks and just update mLastPick in place
MASK key_mask = gKeyboard->currentMask(TRUE);
- mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_particle, TRUE, NULL);
+ mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_particle, TRUE, FALSE, NULL);
mLastPick.fetchResults();
return mLastPick;
@@ -4084,7 +4089,7 @@ BOOL LLViewerWindow::mousePointOnPlaneGlobal(LLVector3d& point, const S32 x, con
// Returns global position
-BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d *land_position_global)
+BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d *land_position_global, BOOL ignore_distance)
{
LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y);
F32 mouse_dir_scale;
@@ -4093,6 +4098,7 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
F32 land_z;
const F32 FIRST_PASS_STEP = 1.0f; // meters
const F32 SECOND_PASS_STEP = 0.1f; // meters
+ const F32 draw_distance = ignore_distance ? MAX_FAR_CLIP : gAgentCamera.mDrawDistance;
LLVector3d camera_pos_global;
camera_pos_global = gAgentCamera.getCameraPositionGlobal();
@@ -4100,7 +4106,7 @@ BOOL LLViewerWindow::mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d
LLVector3 probe_point_region;
// walk forwards to find the point
- for (mouse_dir_scale = FIRST_PASS_STEP; mouse_dir_scale < gAgentCamera.mDrawDistance; mouse_dir_scale += FIRST_PASS_STEP)
+ for (mouse_dir_scale = FIRST_PASS_STEP; mouse_dir_scale < draw_distance; mouse_dir_scale += FIRST_PASS_STEP)
{
LLVector3d mouse_direction_global_d;
mouse_direction_global_d.setVec(mouse_direction_global * mouse_dir_scale);
@@ -5140,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;
}
@@ -5247,6 +5253,7 @@ LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
BOOL pick_transparent,
BOOL pick_particle,
BOOL pick_uv_coords,
+ BOOL pick_unselectable,
void (*pick_callback)(const LLPickInfo& pick_info))
: mMousePt(mouse_pos),
mKeyMask(keyboard_mask),
@@ -5262,7 +5269,8 @@ LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
mBinormal(),
mHUDIcon(NULL),
mPickTransparent(pick_transparent),
- mPickParticle(pick_particle)
+ mPickParticle(pick_particle),
+ mPickUnselectable(pick_unselectable)
{
}
@@ -5337,7 +5345,7 @@ void LLPickInfo::fetchResults()
// put global position into land_pos
LLVector3d land_pos;
- if (!gViewerWindow->mousePointOnLandGlobal(mPickPt.mX, mPickPt.mY, &land_pos))
+ if (!gViewerWindow->mousePointOnLandGlobal(mPickPt.mX, mPickPt.mY, &land_pos, mPickUnselectable))
{
// The selected point is beyond the draw distance or is otherwise
// not selectable. Return before calling mPickCallback().
@@ -5406,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());
}
}
}
@@ -5436,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,
@@ -5478,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/llviewerwindow.h b/indra/newview/llviewerwindow.h
index 5d2df2dfd7..7fde52d4e1 100755
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -91,6 +91,7 @@ public:
BOOL pick_transparent,
BOOL pick_particle,
BOOL pick_surface_info,
+ BOOL pick_unselectable,
void (*pick_callback)(const LLPickInfo& pick_info));
void fetchResults();
@@ -123,6 +124,7 @@ public:
LLVector3 mBinormal;
BOOL mPickTransparent;
BOOL mPickParticle;
+ BOOL mPickUnselectable;
void getSurfaceInfo();
private:
@@ -360,7 +362,12 @@ public:
void performPick();
void returnEmptyPicks();
- void pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& pick_info), BOOL pick_transparent = FALSE);
+ void pickAsync( S32 x,
+ S32 y_from_bot,
+ MASK mask,
+ void (*callback)(const LLPickInfo& pick_info),
+ BOOL pick_transparent = FALSE,
+ BOOL pick_unselectable = FALSE);
LLPickInfo pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_particle = FALSE);
LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,
LLVector4a* intersection);
@@ -386,7 +393,7 @@ public:
//const LLVector3d& lastNonFloraObjectHitOffset();
// mousePointOnLand() returns true if found point
- BOOL mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d *land_pos_global);
+ BOOL mousePointOnLandGlobal(const S32 x, const S32 y, LLVector3d *land_pos_global, BOOL ignore_distance = FALSE);
BOOL mousePointOnPlaneGlobal(LLVector3d& point, const S32 x, const S32 y, const LLVector3d &plane_point, const LLVector3 &plane_normal);
LLVector3d clickPointInWorldGlobal(const S32 x, const S32 y_from_bot, LLViewerObject* clicked_object) const;
BOOL clickPointOnSurfaceGlobal(const S32 x, const S32 y, LLViewerObject *objectp, LLVector3d &point_global) const;
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 b54f341c31..6e0d77b10a 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -111,6 +111,9 @@ extern F32 ANIM_SPEED_MAX;
extern F32 ANIM_SPEED_MIN;
extern U32 JOINT_COUNT_REQUIRED_FOR_FULLRIG;
+const F32 MAX_HOVER_Z = 2.0;
+const F32 MIN_HOVER_Z = -2.0;
+
// #define OUTPUT_BREAST_DATA
using namespace LLAvatarAppearanceDefines;
@@ -134,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.
@@ -145,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;
@@ -252,6 +244,8 @@ struct LLAppearanceMessageContents
//U32 appearance_flags = 0;
std::vector<F32> mParamWeights;
std::vector<LLVisualParam*> mParams;
+ LLVector3 mHoverOffset;
+ bool mHoverOffsetWasSet;
};
struct LLVOAvatarChildJoint : public LLInitParam::ChoiceBlock<LLVOAvatarChildJoint>
@@ -716,10 +710,13 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
mIsEditingAppearance(FALSE),
mUseLocalAppearance(FALSE),
mLastUpdateRequestCOFVersion(-1),
- mLastUpdateReceivedCOFVersion(-1)
+ mLastUpdateReceivedCOFVersion(-1),
+ mCachedMuteListUpdateTime(0),
+ mCachedInMuteList(false)
{
//VTResume(); // VTune
-
+ setHoverOffset(LLVector3(0.0, 0.0, 0.0));
+
// mVoiceVisualizer is created by the hud effects manager and uses the HUD Effects pipeline
const BOOL needsSendToSim = false; // currently, this HUD effect doesn't need to pack and unpack data to do its job
mVoiceVisualizer = ( LLVoiceVisualizer *)LLHUDManager::getInstance()->createViewerEffect( LLHUDObject::LL_HUD_EFFECT_VOICE_VISUALIZER, needsSendToSim );
@@ -772,6 +769,7 @@ LLVOAvatar::LLVOAvatar(const LLUUID& id,
mRuthTimer.reset();
mRuthDebugTimer.reset();
mDebugExistenceTimer.reset();
+ mLastAppearanceMessageTimer.reset();
if(LLSceneMonitor::getInstance()->isEnabled())
{
@@ -1955,6 +1953,11 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys,
// Do base class updates...
U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp);
+ //LLTEContents tec;
+ //S32 te_retval = parseTEMessage(mesgsys, _PREHASH_ObjectData, block_num, tec);
+
+ LL_DEBUGS("Avatar") << avString() << update_type << LL_ENDL;
+
// Print out arrival information once we have name of avatar.
if (has_name && getNVPair("FirstName"))
{
@@ -3121,10 +3124,9 @@ bool LLVOAvatar::isVisuallyMuted()
U32 max_cost = (U32) (max_render_cost*(LLVOAvatar::sLODFactor+0.5));
- muted = LLMuteList::getInstance()->isMuted(getID()) ||
- (mAttachmentGeometryBytes > max_attachment_bytes && max_attachment_bytes > 0) ||
- (mAttachmentSurfaceArea > max_attachment_area && max_attachment_area > 0.f) ||
- (mVisualComplexity > max_cost && max_render_cost > 0);
+ muted = (mAttachmentGeometryBytes > max_attachment_bytes && max_attachment_bytes > 0) ||
+ (mAttachmentSurfaceArea > max_attachment_area && max_attachment_area > 0.f) ||
+ (mVisualComplexity > max_cost && max_render_cost > 0);
// Could be part of the grand || collection above, but yanked out to make the logic visible
if (!muted)
@@ -3156,7 +3158,7 @@ bool LLVOAvatar::isVisuallyMuted()
}
}
- return muted;
+ return muted || isInMuteList();
}
void LLVOAvatar::forceUpdateVisualMuteSettings()
@@ -3165,13 +3167,27 @@ void LLVOAvatar::forceUpdateVisualMuteSettings()
mCachedVisualMuteUpdateTime = LLFrameTimer::getTotalSeconds() - 1.0;
}
+bool LLVOAvatar::isInMuteList()
+{
+ bool muted = false;
+ F64 now = LLFrameTimer::getTotalSeconds();
+ if (now < mCachedMuteListUpdateTime)
+ {
+ muted = mCachedInMuteList;
+ }
+ else
+ {
+ muted = LLMuteList::getInstance()->isMuted(getID());
-//------------------------------------------------------------------------
-// updateCharacter()
-// called on both your avatar and other avatars
-//------------------------------------------------------------------------
-BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
-{
+ const F64 SECONDS_BETWEEN_MUTE_UPDATES = 1;
+ mCachedMuteListUpdateTime = now + SECONDS_BETWEEN_MUTE_UPDATES;
+ mCachedInMuteList = muted;
+ }
+ return muted;
+}
+
+void LLVOAvatar::updateDebugText()
+{
// clear debug text
mDebugText.clear();
@@ -3208,6 +3224,22 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
debug_line += llformat(" - cof rcv:%d", last_received_cof_version);
}
debug_line += llformat(" bsz-z: %f avofs-z: %f", mBodySize[2], mAvatarOffset[2]);
+ bool hover_enabled = getRegion() && getRegion()->avatarHoverHeightEnabled();
+ debug_line += hover_enabled ? " H" : " h";
+ const LLVector3& hover_offset = getHoverOffset();
+ if (hover_offset[2] != 0.0)
+ {
+ debug_line += llformat(" hov_z: %f", hover_offset[2]);
+ debug_line += llformat(" %s", (mIsSitting ? "S" : "T"));
+ debug_line += llformat("%s", (isMotionActive(ANIM_AGENT_SIT_GROUND_CONSTRAINED) ? "G" : "-"));
+ }
+ F32 elapsed = mLastAppearanceMessageTimer.getElapsedTimeF32();
+ static const char *elapsed_chars = "Xx*...";
+ U32 bucket = U32(elapsed*2);
+ if (bucket < strlen(elapsed_chars))
+ {
+ debug_line += llformat(" %c", elapsed_chars[bucket]);
+ }
addDebugText(debug_line);
}
if (gSavedSettings.getBOOL("DebugAvatarCompositeBaked"))
@@ -3215,7 +3247,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
if (!mBakedTextureDebugText.empty())
addDebugText(mBakedTextureDebugText);
}
-
+
if (LLVOAvatar::sShowAnimationDebug)
{
for (LLMotionController::motion_list_t::iterator iter = mMotionController.getActiveMotions().begin();
@@ -3244,6 +3276,27 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
}
}
+ if (!mDebugText.size() && mText.notNull())
+ {
+ mText->markDead();
+ mText = NULL;
+ }
+ else if (mDebugText.size())
+ {
+ setDebugText(mDebugText);
+ }
+ mDebugText.clear();
+
+}
+
+//------------------------------------------------------------------------
+// updateCharacter()
+// called on both your avatar and other avatars
+//------------------------------------------------------------------------
+BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
+{
+ updateDebugText();
+
if (!mIsBuilt)
{
return FALSE;
@@ -3352,9 +3405,15 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
LLVector3 xyVel = getVelocity();
xyVel.mV[VZ] = 0.0f;
speed = xyVel.length();
-
+ // remembering the value here prevents a display glitch if the
+ // animation gets toggled during this update.
+ bool was_sit_ground_constrained = isMotionActive(ANIM_AGENT_SIT_GROUND_CONSTRAINED);
+
if (!(mIsSitting && getParent()))
{
+ // This case includes all configurations except sitting on an
+ // object, so does include ground sit.
+
//--------------------------------------------------------------------
// get timing info
// handle initial condition case
@@ -3408,9 +3467,14 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
// correct for the fact that the pelvis is not necessarily the center
// of the agent's physical representation
root_pos.mdV[VZ] -= (0.5f * mBodySize.mV[VZ]) - mPelvisToFoot;
+ if (!mIsSitting && !was_sit_ground_constrained)
+ {
+ root_pos += LLVector3d(getHoverOffset());
+ }
LLVector3 newPosition = gAgent.getPosAgentFromGlobal(root_pos);
+
if (newPosition != mRoot->getXform()->getWorldPosition())
{
mRoot->touch();
@@ -3575,7 +3639,9 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
}
else if (mDrawable.notNull())
{
- mRoot->setPosition(mDrawable->getPosition());
+ LLVector3 pos = mDrawable->getPosition();
+ pos += getHoverOffset() * mDrawable->getRotation();
+ mRoot->setPosition(pos);
mRoot->setRotation(mDrawable->getRotation());
}
@@ -3594,7 +3660,21 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
{
updateMotions(LLCharacter::NORMAL_UPDATE);
}
-
+
+ // Special handling for sitting on ground.
+ if (!getParent() && (mIsSitting || was_sit_ground_constrained))
+ {
+
+ F32 off_z = LLVector3d(getHoverOffset()).mdV[VZ];
+ if (off_z != 0.0)
+ {
+ LLVector3 pos = mRoot->getWorldPosition();
+ pos.mV[VZ] += off_z;
+ mRoot->touch();
+ mRoot->setWorldPosition(pos);
+ }
+ }
+
// update head position
updateHeadOffset();
@@ -3678,17 +3758,6 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
mRoot->updateWorldMatrixChildren();
- if (!mDebugText.size() && mText.notNull())
- {
- mText->markDead();
- mText = NULL;
- }
- else if (mDebugText.size())
- {
- setDebugText(mDebugText);
- }
- mDebugText.clear();
-
//mesh vertices need to be reskinned
mNeedsSkin = TRUE;
return TRUE;
@@ -4127,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)
@@ -4988,6 +5057,15 @@ BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate)
}
//-----------------------------------------------------------------------------
+// hasMotionFromSource()
+//-----------------------------------------------------------------------------
+// virtual
+bool LLVOAvatar::hasMotionFromSource(const LLUUID& source_id)
+{
+ return false;
+}
+
+//-----------------------------------------------------------------------------
// stopMotionFromSource()
//-----------------------------------------------------------------------------
// virtual
@@ -7117,6 +7195,17 @@ void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMe
// For future use:
//mesgsys->getU32Fast(_PREHASH_AppearanceData, _PREHASH_Flags, appearance_flags, 0);
}
+
+ // Parse the AppearanceData field, if any.
+ contents.mHoverOffsetWasSet = false;
+ if (mesgsys->has(_PREHASH_AppearanceHover))
+ {
+ LLVector3 hover;
+ mesgsys->getVector3Fast(_PREHASH_AppearanceHover, _PREHASH_HoverHeight, hover);
+ LL_DEBUGS("Avatar") << avString() << " hover received " << hover.mV[ VX ] << "," << hover.mV[ VY ] << "," << hover.mV[ VZ ] << LL_ENDL;
+ contents.mHoverOffset = hover;
+ contents.mHoverOffsetWasSet = true;
+ }
// Parse visual params, if any.
S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_VisualParam);
@@ -7183,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;
}
}
@@ -7234,6 +7323,8 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
return;
}
+ mLastAppearanceMessageTimer.reset();
+
ESex old_sex = getSex();
LLAppearanceMessageContents contents;
@@ -7418,6 +7509,22 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
}
}
+ if (contents.mHoverOffsetWasSet && !isSelf())
+ {
+ // Got an update for some other avatar
+ // Ignore updates for self, because we have a more authoritative value in the preferences.
+ setHoverOffset(contents.mHoverOffset);
+ LL_INFOS("Avatar") << avString() << "setting hover from message" << contents.mHoverOffset[2] << LL_ENDL;
+ }
+
+ if (!contents.mHoverOffsetWasSet && !isSelf())
+ {
+ // If we don't get a value at all, we are presumably in a
+ // region that does not support hover height.
+ LL_WARNS() << avString() << "zeroing hover because not defined in appearance message" << LL_ENDL;
+ setHoverOffset(LLVector3(0.0, 0.0, 0.0));
+ }
+
setCompositeUpdatesEnabled( TRUE );
// If all of the avatars are completely baked, release the global image caches to conserve memory.
@@ -8040,7 +8147,7 @@ void LLVOAvatar::updateImpostors()
BOOL LLVOAvatar::isImpostor()
{
- return sUseImpostors && (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD)) ? TRUE : FALSE;
+ return (sUseImpostors && (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD))) || isInMuteList() ? TRUE : FALSE;
}
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 9a2aaf8aa3..1c3f4f2aa7 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -191,6 +191,7 @@ public:
/*virtual*/ LLUUID remapMotionID(const LLUUID& id);
/*virtual*/ BOOL startMotion(const LLUUID& id, F32 time_offset = 0.f);
/*virtual*/ BOOL stopMotion(const LLUUID& id, BOOL stop_immediate = FALSE);
+ virtual bool hasMotionFromSource(const LLUUID& source_id);
virtual void stopMotionFromSource(const LLUUID& source_id);
virtual void requestStopMotion(LLMotion* motion);
LLMotion* findMotion(const LLUUID& id) const;
@@ -213,7 +214,6 @@ public:
/*virtual*/ LLVector3 getPosAgentFromGlobal(const LLVector3d &position);
virtual void updateVisualParams();
-
/** Inherited
** **
*******************************************************************************/
@@ -233,6 +233,7 @@ private: //aligned members
// Updates
//--------------------------------------------------------------------
public:
+ void updateDebugText();
virtual BOOL updateCharacter(LLAgent &agent);
void idleUpdateVoiceVisualizer(bool voice_enabled);
void idleUpdateMisc(bool detailed_update);
@@ -382,6 +383,7 @@ public:
public:
U32 renderImpostor(LLColor4U color = LLColor4U(255,255,255,255), S32 diffuse_channel = 0);
bool isVisuallyMuted();
+ bool isInMuteList();
void setCachedVisualMute(bool muted) { mCachedVisualMute = muted; };
void forceUpdateVisualMuteSettings();
@@ -421,6 +423,9 @@ private:
bool mCachedVisualMute; // cached return value for isVisuallyMuted()
F64 mCachedVisualMuteUpdateTime; // Time to update mCachedVisualMute
+ bool mCachedInMuteList;
+ F64 mCachedMuteListUpdateTime;
+
VisualMuteSettings mVisuallyMuteSetting; // Always or never visually mute this AV
//--------------------------------------------------------------------
@@ -987,6 +992,7 @@ public:
protected:
LLFrameTimer mRuthDebugTimer; // For tracking how long it takes for av to rez
LLFrameTimer mDebugExistenceTimer; // Debugging for how long the avatar has been in memory.
+ LLFrameTimer mLastAppearanceMessageTimer; // Time since last appearance message received.
//--------------------------------------------------------------------
// COF monitoring
@@ -1019,6 +1025,9 @@ protected: // Shared with LLVOAvatarSelf
extern const F32 SELF_ADDITIONAL_PRI;
extern const S32 MAX_TEXTURE_VIRTUAL_SIZE_RESET_INTERVAL;
+extern const F32 MAX_HOVER_Z;
+extern const F32 MIN_HOVER_Z;
+
std::string get_sequential_numbered_file_name(const std::string& prefix,
const std::string& suffix);
void dump_sequential_xml(const std::string outprefix, const LLSD& content);
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 0be8df349d..1e9945b514 100755
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -127,6 +127,25 @@ struct LocalTextureData
LLTextureEntry *mTexEntry;
};
+// TODO - this class doesn't really do anything, could just use a base
+// class responder if nothing else gets added.
+class LLHoverHeightResponder: public LLHTTPClient::Responder
+{
+public:
+ LLHoverHeightResponder(): LLHTTPClient::Responder() {}
+
+private:
+ void httpFailure()
+ {
+ LL_WARNS() << dumpResponse() << LL_ENDL;
+ }
+
+ void httpSuccess()
+ {
+ LL_INFOS() << dumpResponse() << LL_ENDL;
+ }
+};
+
//-----------------------------------------------------------------------------
// Callback data
//-----------------------------------------------------------------------------
@@ -159,7 +178,9 @@ 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))
{
mMotionController.mIsSelf = TRUE;
@@ -220,11 +241,40 @@ void LLVOAvatarSelf::initInstance()
return;
}
+ setHoverIfRegionEnabled();
+
//doPeriodically(output_self_av_texture_diagnostics, 30.0);
doPeriodically(update_avatar_rez_metrics, 5.0);
doPeriodically(boost::bind(&LLVOAvatarSelf::checkStuckAppearance, this), 30.0);
}
+void LLVOAvatarSelf::setHoverIfRegionEnabled()
+{
+ if (getRegion() && getRegion()->simulatorFeaturesReceived())
+ {
+ if (getRegion()->avatarHoverHeightEnabled())
+ {
+ F32 hover_z = gSavedPerAccountSettings.getF32("AvatarHoverOffsetZ");
+ setHoverOffset(LLVector3(0.0, 0.0, llclamp(hover_z,MIN_HOVER_Z,MAX_HOVER_Z)));
+ LL_INFOS("Avatar") << avString() << " set hover height from debug setting " << hover_z << LL_ENDL;
+ }
+ else
+ {
+ setHoverOffset(LLVector3(0.0, 0.0, 0.0));
+ LL_INFOS("Avatar") << avString() << " zeroing hover height, region does not support" << LL_ENDL;
+ }
+ }
+ else
+ {
+ LL_INFOS("Avatar") << avString() << " region or simulator features not known, no change on hover" << LL_ENDL;
+ if (getRegion())
+ {
+ getRegion()->setSimulatorFeaturesReceivedCallback(boost::bind(&LLVOAvatarSelf::onSimulatorFeaturesReceived,this,_1));
+ }
+
+ }
+}
+
bool LLVOAvatarSelf::checkStuckAppearance()
{
const F32 CONDITIONAL_UNSTICK_INTERVAL = 300.0;
@@ -755,6 +805,13 @@ void LLVOAvatarSelf::requestStopMotion(LLMotion* motion)
}
// virtual
+bool LLVOAvatarSelf::hasMotionFromSource(const LLUUID& source_id)
+{
+ AnimSourceIterator motion_it = mAnimationSources.find(source_id);
+ return motion_it != mAnimationSources.end();
+}
+
+// virtual
void LLVOAvatarSelf::stopMotionFromSource(const LLUUID& source_id)
{
for (AnimSourceIterator motion_it = mAnimationSources.find(source_id); motion_it != mAnimationSources.end(); )
@@ -763,6 +820,7 @@ void LLVOAvatarSelf::stopMotionFromSource(const LLUUID& source_id)
mAnimationSources.erase(motion_it++);
}
+
LLViewerObject* object = gObjectList.findObject(source_id);
if (object)
{
@@ -827,6 +885,12 @@ void LLVOAvatarSelf::removeMissingBakedTextures()
}
}
+void LLVOAvatarSelf::onSimulatorFeaturesReceived(const LLUUID& region_id)
+{
+ LL_INFOS("Avatar") << "simulator features received, setting hover based on region props" << LL_ENDL;
+ setHoverIfRegionEnabled();
+}
+
//virtual
void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
{
@@ -845,6 +909,17 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
//LL_INFOS() << "pos_from_old_region is " << global_pos_from_old_region
// << " while pos_from_new_region is " << pos_from_new_region
// << LL_ENDL;
+
+ // Update hover height, or schedule callback, based on whether
+ // it's supported in this region.
+ if (regionp->simulatorFeaturesReceived())
+ {
+ setHoverIfRegionEnabled();
+ }
+ else
+ {
+ regionp->setSimulatorFeaturesReceivedCallback(boost::bind(&LLVOAvatarSelf::onSimulatorFeaturesReceived,this,_1));
+ }
}
if (!regionp || (regionp->getHandle() != mLastRegionHandle))
@@ -2701,6 +2776,39 @@ bool LLVOAvatarSelf::sendAppearanceMessage(LLMessageSystem *mesgsys) const
return success;
}
+//------------------------------------------------------------------------
+// sendHoverHeight()
+//------------------------------------------------------------------------
+void LLVOAvatarSelf::sendHoverHeight() const
+{
+ std::string url = gAgent.getRegion()->getCapability("AgentPreferences");
+
+ if (!url.empty())
+ {
+ LLSD update = LLSD::emptyMap();
+ const LLVector3& hover_offset = getHoverOffset();
+ update["hover_height"] = hover_offset[2];
+
+ LL_DEBUGS("Avatar") << avString() << "sending hover height value " << hover_offset[2] << LL_ENDL;
+ LLHTTPClient::post(url, update, new LLHoverHeightResponder);
+
+ mLastHoverOffsetSent = hover_offset;
+ }
+}
+
+void LLVOAvatarSelf::setHoverOffset(const LLVector3& hover_offset, bool send_update)
+{
+ if (getHoverOffset() != hover_offset)
+ {
+ LL_INFOS("Avatar") << avString() << " setting hover due to change " << hover_offset[2] << LL_ENDL;
+ LLVOAvatar::setHoverOffset(hover_offset, send_update);
+ }
+ if (send_update && (hover_offset != mLastHoverOffsetSent))
+ {
+ LL_INFOS("Avatar") << avString() << " sending hover due to change " << hover_offset[2] << LL_ENDL;
+ sendHoverHeight();
+ }
+}
//------------------------------------------------------------------------
// needsRenderBeam()
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 13ffc057b0..dc5e64d547 100755
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -75,6 +75,9 @@ protected:
// LLViewerObject interface and related
//--------------------------------------------------------------------
public:
+ boost::signals2::connection mRegionChangedSlot;
+
+ void onSimulatorFeaturesReceived(const LLUUID& region_id);
/*virtual*/ void updateRegion(LLViewerRegion *regionp);
/*virtual*/ void idleUpdate(LLAgent &agent, const F64 &time);
@@ -82,6 +85,7 @@ public:
// LLCharacter interface and related
//--------------------------------------------------------------------
public:
+ /*virtual*/ bool hasMotionFromSource(const LLUUID& source_id);
/*virtual*/ void stopMotionFromSource(const LLUUID& source_id);
/*virtual*/ void requestStopMotion(LLMotion* motion);
/*virtual*/ LLJoint* getJoint(const std::string &name);
@@ -105,7 +109,6 @@ private:
private:
LLUUID mInitialBakeIDs[6];
- bool mInitialBakesLoaded;
/********************************************************************************
@@ -327,6 +330,14 @@ public:
public:
bool sendAppearanceMessage(LLMessageSystem *mesgsys) const;
+ // -- care and feeding of hover height.
+ void setHoverIfRegionEnabled();
+ void sendHoverHeight() const;
+ /*virtual*/ void setHoverOffset(const LLVector3& hover_offset, bool send_update=true);
+
+private:
+ mutable LLVector3 mLastHoverOffsetSent;
+
/** Appearance
** **
*******************************************************************************/
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 66ee386874..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;
}
@@ -1742,6 +1740,8 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)
}
}
}
+
+ genBBoxes(FALSE);
}
// it has its own drawable (it's moved) or it has changed UVs or it has changed xforms from global<->local
else
@@ -2038,21 +2038,235 @@ S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
return res;
}
-S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)
-{
- S32 res = 0;
-
- if (pMaterialParams && getTEImage(te) && 3 == getTEImage(te)->getComponents() && pMaterialParams->getDiffuseAlphaMode())
+bool LLVOVolume::notifyAboutCreatingTexture(LLViewerTexture *texture)
+{ //Ok, here we have confirmation about texture creation, check our wait-list
+ //and make changes, or return false
+
+ std::pair<mmap_UUID_MAP_t::iterator, mmap_UUID_MAP_t::iterator> range = mWaitingTextureInfo.equal_range(texture->getID());
+
+ typedef std::map<U8, LLMaterialPtr> map_te_material;
+ map_te_material new_material;
+
+ for(mmap_UUID_MAP_t::iterator range_it = range.first; range_it != range.second; ++range_it)
+ {
+ LLMaterialPtr cur_material = getTEMaterialParams(range_it->second.te);
+
+ //here we just interesting in DIFFUSE_MAP only!
+ if(NULL != cur_material.get() && LLRender::DIFFUSE_MAP == range_it->second.map && GL_RGBA != texture->getPrimaryFormat())
+ { //ok let's check the diffuse mode
+ switch(cur_material->getDiffuseAlphaMode())
+ {
+ case LLMaterial::DIFFUSE_ALPHA_MODE_BLEND:
+ case LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE:
+ case LLMaterial::DIFFUSE_ALPHA_MODE_MASK:
+ { //uups... we have non 32 bit texture with LLMaterial::DIFFUSE_ALPHA_MODE_* => LLMaterial::DIFFUSE_ALPHA_MODE_NONE
+
+ LLMaterialPtr mat = NULL;
+ map_te_material::iterator it = new_material.find(range_it->second.te);
+ if(new_material.end() == it) {
+ mat = new LLMaterial(cur_material->asLLSD());
+ new_material.insert(map_te_material::value_type(range_it->second.te, mat));
+ } else {
+ mat = it->second;
+ }
+
+ mat->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
+
+ } break;
+ } //switch
+ } //if
+ } //for
+
+ //setup new materials
+ for(map_te_material::const_iterator it = new_material.begin(), end = new_material.end(); it != end; ++it)
{
- LLViewerObject::setTEMaterialID(te, LLMaterialID::null);
- res = LLViewerObject::setTEMaterialParams(te, NULL);
+ LLMaterialMgr::getInstance()->put(getID(), it->first, *it->second);
+ LLViewerObject::setTEMaterialParams(it->first, it->second);
}
- else
+
+ //clear wait-list
+ mWaitingTextureInfo.erase(range.first, range.second);
+
+ return 0 != new_material.size();
+}
+
+bool LLVOVolume::notifyAboutMissingAsset(LLViewerTexture *texture)
+{ //Ok, here if we wait information about texture and it's missing
+ //then depending from the texture map (diffuse, normal, or specular)
+ //make changes in material and confirm it. If not return false.
+ std::pair<mmap_UUID_MAP_t::iterator, mmap_UUID_MAP_t::iterator> range = mWaitingTextureInfo.equal_range(texture->getID());
+ if(range.first == range.second) return false;
+
+ typedef std::map<U8, LLMaterialPtr> map_te_material;
+ map_te_material new_material;
+
+ for(mmap_UUID_MAP_t::iterator range_it = range.first; range_it != range.second; ++range_it)
{
- res = LLViewerObject::setTEMaterialParams(te, pMaterialParams);
+ LLMaterialPtr cur_material = getTEMaterialParams(range_it->second.te);
+
+ switch(range_it->second.map)
+ {
+ case LLRender::DIFFUSE_MAP:
+ {
+ if(LLMaterial::DIFFUSE_ALPHA_MODE_NONE != cur_material->getDiffuseAlphaMode())
+ { //missing texture + !LLMaterial::DIFFUSE_ALPHA_MODE_NONE => LLMaterial::DIFFUSE_ALPHA_MODE_NONE
+ LLMaterialPtr mat = NULL;
+ map_te_material::iterator it = new_material.find(range_it->second.te);
+ if(new_material.end() == it) {
+ mat = new LLMaterial(cur_material->asLLSD());
+ new_material.insert(map_te_material::value_type(range_it->second.te, mat));
+ } else {
+ mat = it->second;
+ }
+
+ mat->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
+ }
+ } break;
+ case LLRender::NORMAL_MAP:
+ { //missing texture => reset material texture id
+ LLMaterialPtr mat = NULL;
+ map_te_material::iterator it = new_material.find(range_it->second.te);
+ if(new_material.end() == it) {
+ mat = new LLMaterial(cur_material->asLLSD());
+ new_material.insert(map_te_material::value_type(range_it->second.te, mat));
+ } else {
+ mat = it->second;
+ }
+
+ mat->setNormalID(LLUUID::null);
+ } break;
+ case LLRender::SPECULAR_MAP:
+ { //missing texture => reset material texture id
+ LLMaterialPtr mat = NULL;
+ map_te_material::iterator it = new_material.find(range_it->second.te);
+ if(new_material.end() == it) {
+ mat = new LLMaterial(cur_material->asLLSD());
+ new_material.insert(map_te_material::value_type(range_it->second.te, mat));
+ } else {
+ mat = it->second;
+ }
+
+ mat->setSpecularID(LLUUID::null);
+ } break;
+ case LLRender::NUM_TEXTURE_CHANNELS:
+ //nothing to do, make compiler happy
+ break;
+ } //switch
+ } //for
+
+ //setup new materials
+ for(map_te_material::const_iterator it = new_material.begin(), end = new_material.end(); it != end; ++it)
+ {
+ LLMaterialMgr::getInstance()->put(getID(), it->first, *it->second);
+ LLViewerObject::setTEMaterialParams(it->first, it->second);
+ }
+
+ //clear wait-list
+ mWaitingTextureInfo.erase(range.first, range.second);
+
+ return 0 != new_material.size();
+}
+
+S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)
+{
+ LLMaterialPtr pMaterial = const_cast<LLMaterialPtr&>(pMaterialParams);
+
+ if(pMaterialParams)
+ { //check all of them according to material settings
+
+ LLViewerTexture *img_diffuse = getTEImage(te);
+ LLViewerTexture *img_normal = getTENormalMap(te);
+ LLViewerTexture *img_specular = getTESpecularMap(te);
+
+ llassert(NULL != img_diffuse);
+
+ LLMaterialPtr new_material = NULL;
+
+ //diffuse
+ if(NULL != img_diffuse)
+ { //guard
+ if(0 == img_diffuse->getPrimaryFormat() && !img_diffuse->isMissingAsset())
+ { //ok here we don't have information about texture, let's belief and leave material settings
+ //but we remember this case
+ mWaitingTextureInfo.insert(mmap_UUID_MAP_t::value_type(img_diffuse->getID(), material_info(LLRender::DIFFUSE_MAP, te)));
+ }
+ else
+ {
+ bool bSetDiffuseNone = false;
+ if(img_diffuse->isMissingAsset())
+ {
+ bSetDiffuseNone = true;
+ }
+ else
+ {
+ switch(pMaterialParams->getDiffuseAlphaMode())
+ {
+ case LLMaterial::DIFFUSE_ALPHA_MODE_BLEND:
+ case LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE:
+ case LLMaterial::DIFFUSE_ALPHA_MODE_MASK:
+ { //all of them modes available only for 32 bit textures
+ if(GL_RGBA != img_diffuse->getPrimaryFormat())
+ {
+ bSetDiffuseNone = true;
+ }
+ } break;
+ }
+ } //else
+
+
+ if(bSetDiffuseNone)
+ { //upps... we should substitute this material with LLMaterial::DIFFUSE_ALPHA_MODE_NONE
+ new_material = new LLMaterial(pMaterialParams->asLLSD());
+ new_material->setDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
+ }
+ }
+ }
+
+ //normal
+ if(LLUUID::null != pMaterialParams->getNormalID())
+ {
+ if(img_normal && img_normal->isMissingAsset() && img_normal->getID() == pMaterialParams->getNormalID())
+ {
+ if(!new_material) {
+ new_material = new LLMaterial(pMaterialParams->asLLSD());
+ }
+ new_material->setNormalID(LLUUID::null);
+ }
+ else if(NULL == img_normal || 0 == img_normal->getPrimaryFormat())
+ { //ok here we don't have information about texture, let's belief and leave material settings
+ //but we remember this case
+ mWaitingTextureInfo.insert(mmap_UUID_MAP_t::value_type(pMaterialParams->getNormalID(), material_info(LLRender::NORMAL_MAP,te)));
+ }
+
+ }
+
+
+ //specular
+ if(LLUUID::null != pMaterialParams->getSpecularID())
+ {
+ if(img_specular && img_specular->isMissingAsset() && img_specular->getID() == pMaterialParams->getSpecularID())
+ {
+ if(!new_material) {
+ new_material = new LLMaterial(pMaterialParams->asLLSD());
+ }
+ new_material->setSpecularID(LLUUID::null);
+ }
+ else if(NULL == img_specular || 0 == img_specular->getPrimaryFormat())
+ { //ok here we don't have information about texture, let's belief and leave material settings
+ //but we remember this case
+ mWaitingTextureInfo.insert(mmap_UUID_MAP_t::value_type(pMaterialParams->getSpecularID(), material_info(LLRender::SPECULAR_MAP, te)));
+ }
+ }
+
+ if(new_material) {
+ pMaterial = new_material;
+ LLMaterialMgr::getInstance()->put(getID(),te,*pMaterial);
+ }
}
- LL_DEBUGS("MaterialTEs") << "te " << (S32)te << " material " << ((pMaterialParams) ? pMaterialParams->asLLSD() : LLSD("null")) << " res " << res
+ S32 res = LLViewerObject::setTEMaterialParams(te, pMaterial);
+
+ LL_DEBUGS("MaterialTEs") << "te " << (S32)te << " material " << ((pMaterial) ? pMaterial->asLLSD() : LLSD("null")) << " res " << res
<< ( LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this), te) ? " selected" : " not selected" )
<< LL_ENDL;
setChanged(ALL_CHANGED);
@@ -4960,7 +5174,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
facep->clearVertexBuffer();
}
}
-
+
if (is_rigged)
{
if (!drawablep->isState(LLDrawable::RIGGED))
@@ -4976,7 +5190,6 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
{
drawablep->clearState(LLDrawable::RIGGED);
}
-
}
}
@@ -5451,8 +5664,8 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFac
flexi = flexi || facep->getViewerObject()->getVolume()->isUnique();
}
- }
}
+ }
if (flexi && buffer_usage && buffer_usage != GL_STREAM_DRAW_ARB)
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
index 7503f8c5aa..bbaca316b0 100755
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -372,17 +372,37 @@ private:
// statics
public:
- static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop
+ static F32 sLODSlopDistanceFactor;// Changing this to zero, effectively disables the LOD transition slop
static F32 sLODFactor; // LOD scale factor
static F32 sDistanceFactor; // LOD distance factor
-
+
static LLPointer<LLObjectMediaDataClient> sObjectMediaClient;
static LLPointer<LLObjectMediaNavigateClient> sObjectMediaNavigateClient;
protected:
static S32 sNumLODChanges;
-
+
friend class LLVolumeImplFlexible;
+
+public:
+ bool notifyAboutCreatingTexture(LLViewerTexture *texture);
+ bool notifyAboutMissingAsset(LLViewerTexture *texture);
+
+private:
+ struct material_info
+ {
+ LLRender::eTexIndex map;
+ U8 te;
+
+ material_info(LLRender::eTexIndex map_, U8 te_)
+ : map(map_)
+ , te(te_)
+ {}
+ };
+
+ typedef std::multimap<LLUUID, material_info> mmap_UUID_MAP_t;
+ mmap_UUID_MAP_t mWaitingTextureInfo;
+
};
#endif // LL_LLVOVOLUME_H
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 0312972a22..0be6e49834 100755
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -49,6 +49,8 @@
#include "llviewerregion.h"
#include "llviewerwindow.h"
#include "llnotificationsutil.h"
+#include "lluriparser.h"
+#include "uriparser/Uri.h"
#include <boost/regex.hpp>
@@ -238,9 +240,14 @@ bool LLWeb::useExternalBrowser(const std::string &url)
}
else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS)
{
- boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)\\b", boost::regex::perl|boost::regex::icase);
+ 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;
- return !(boost::regex_search(url, matches, pattern));
+ return !(boost::regex_search(uri_string, matches, pattern));
}
return false;
}
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 b4e8114a5f..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;
@@ -796,9 +795,12 @@ void LLWorld::updateNetStats()
add(LLStatViewer::PACKETS_IN, packets_in);
add(LLStatViewer::PACKETS_OUT, packets_out);
add(LLStatViewer::PACKETS_LOST, packets_lost);
- if (packets_in)
+
+ F32 total_packets_in = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_IN);
+ if (total_packets_in > 0)
{
- sample(LLStatViewer::PACKETS_LOST_PERCENT, LLUnits::Ratio::fromValue((F32)packets_lost/(F32)packets_in));
+ F32 total_packets_lost = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_LOST);
+ sample(LLStatViewer::PACKETS_LOST_PERCENT, LLUnits::Ratio::fromValue((F32)total_packets_lost/(F32)total_packets_in));
}
mLastPacketsIn = gMessageSystem->mPacketsIn;
@@ -978,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/textures/icons/hand.png b/indra/newview/skins/default/textures/icons/hand.png
new file mode 100644
index 0000000000..41b9600da6
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/hand.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 4f8962182e..8c20fe2e4b 100755
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -229,6 +229,8 @@ with the same filename but different name
<texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />
<texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" />
+ <texture name="Hand" file_name="icons/hand.png" preload="false" />
+
<texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" />
<texture name="Hierarchy_View_Disabled" file_name="icons/Hierarchy_View_Disabled.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
index f2ed7c2e64..aa6bc53672 100755
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -128,6 +128,7 @@
<menu_item_check label="Aktiver tips" name="Enable Hints"/>
<menu_item_call label="Rapporter misbrug" name="Report Abuse"/>
<menu_item_call label="Rapportér fejl" name="Report Bug"/>
+ <menu_item_call label="Stød, skub &amp; slag" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="Om [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Avanceret" name="Advanced">
@@ -261,8 +262,7 @@
<menu label="Netværk" name="Network">
<menu_item_check label="Pause avatar" name="AgentPause"/>
<menu_item_call label="Mist en netværkspakke" name="Drop a Packet"/>
- </menu>
- <menu_item_call label="Stød, skub &amp; slag" name="Bumps, Pushes &amp;amp; Hits"/>
+ </menu>
<menu label="Verden" name="DevelopWorld">
<menu_item_check label="Vælg anden sol end region" name="Sim Sun Override"/>
<menu_item_check label="Fast vejr" name="Fixed Weather"/>
diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml
index 993316134a..4e6f56cd94 100755
--- a/indra/newview/skins/default/xui/de/floater_stats.xml
+++ b/indra/newview/skins/default/xui/de/floater_stats.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Statistics" title="STATISTIKEN" width="280">
- <scroll_container name="statistics_scroll" width="280">
- <container_view name="statistics_view" width="280">
+<floater name="Statistics" title="STATISTIKEN">
+ <scroll_container name="statistics_scroll">
+ <container_view name="statistics_view">
<stat_view label="Basic" name="basic">
<stat_bar label="FPS" name="fps"/>
<stat_bar label="Empfangene UDP-Daten" name="bandwidth"/>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index c9fad9c9d3..50a6dafa91 100755
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -176,6 +176,7 @@
<menu_item_call label="[SECOND_LIFE]-Blogs" name="Second Life Blogs"/>
<menu_item_call label="Missbrauch melden" name="Report Abuse"/>
<menu_item_call label="Fehler melden" name="Report Bug"/>
+ <menu_item_call label="Rempler, Stöße &amp; Schläge" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="INFO ÜBER [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Erweitert" name="Advanced">
@@ -352,8 +353,7 @@
<menu_item_check label="Positionen der interpolierten Objekte anfragen" name="Ping Interpolate Object Positions"/>
<menu_item_call label="Ein Paket fallenlassen" name="Drop a Packet"/>
</menu>
- <menu_item_call label="Geskriptete Kamera ausgeben" name="Dump Scripted Camera"/>
- <menu_item_call label="Rempler, Stöße &amp; Schläge" name="Bumps, Pushes &amp;amp; Hits"/>
+ <menu_item_call label="Geskriptete Kamera ausgeben" name="Dump Scripted Camera"/>
<menu label="Rekorder" name="Recorder">
<menu_item_call label="Wiedergabe starten" name="Start Playback"/>
<menu_item_call label="Wiedergabe stoppen" name="Stop Playback"/>
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/floater_edit_hover_height.xml b/indra/newview/skins/default/xui/en/floater_edit_hover_height.xml
new file mode 100755
index 0000000000..8ec6735a01
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_edit_hover_height.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ positioning="cascading"
+ ignore_ui_scale="false"
+ legacy_header_height="225"
+ can_minimize="true"
+ can_close="true"
+ can_resize="true"
+ min_height="65"
+ min_width="515"
+ height="65"
+ layout="topleft"
+ name="HoverHeight"
+ single_instance="true"
+ help_topic="hover_height"
+ save_rect="true"
+ save_visibility="true"
+ title="SET HOVER HEIGHT"
+ width="515">
+ <slider
+ enabled="false"
+ control_name="HoverHeightSlider"
+ decimal_digits="3"
+ follows="top|left"
+ height="15"
+ increment="0.001"
+ initial_value="0.0"
+ label="Height"
+ label_width="60"
+ left="10"
+ width="501"
+ layout="topleft"
+ name="HoverHeightSlider"
+ top="35"
+ can_edit_text="true"
+ >
+ </slider>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
index adef066aef..6667238232 100755
--- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
@@ -304,16 +304,20 @@
left_pad="5"
layout="topleft"
follows="left|top"
- name="combobox sale copy"
+ name="ComboBoxSaleType"
width="110">
- <combo_box.item
- label="Copy"
+ <combo_box.item
name="Copy"
- value="Copy" />
- <combo_box.item
- label="Original"
+ label="Copy"
+ value="2" />
+ <combo_box.item
+ name="Contents"
+ label="Contents"
+ value="3" />
+ <combo_box.item
name="Original"
- value="Original" />
+ label="Original"
+ value="1" />
</combo_box>
<spinner
follows="left|top"
@@ -427,34 +431,6 @@
Mark Item:
</text-->
-
- <!--radio_group
- draw_border="false"
- follows="left|top|right"
- height="16"
- layout="topleft"
- left_delta="78"
- name="RadioSaleType"
- top_delta="0"
- width="252">
- <radio_item
- height="16"
- label="Original"
- layout="topleft"
- left="0"
- name="radio"
- top="0"
- width="70" />
- <radio_item
- height="16"
- label="Copy"
- layout="topleft"
- left_delta="60"
- name="radio2"
- top_delta="0"
- width="70" />
- </radio_group-->
-
<!--text
type="string"
length="1"
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
index 8baa0a56f7..c4ac936334 100755
--- a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
@@ -2,10 +2,12 @@
<floater
legacy_header_height="18"
height="460"
+ min_height="460"
layout="topleft"
name="gesture_preview"
help_topic="gesture_preview"
- width="280">
+ width="280"
+ min_width="280">
<floater.string
name="step_anim">
Animation to play:
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
index fbf262441f..90f9591f29 100755
--- a/indra/newview/skins/default/xui/en/floater_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_stats.xml
@@ -37,9 +37,11 @@
<stat_bar name="bandwidth"
label="UDP Data Received"
stat="activemessagedatareceived"
+ decimal_digits="0"
show_bar="true"/>
<stat_bar name="packet_loss"
label="Packet Loss"
+ decimal_digits="1"
stat="packetslostpercentstat"/>
<stat_bar name="ping"
label="Ping Sim"
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
index bcbc8d5b86..c6ae844d67 100755
--- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
@@ -91,6 +91,14 @@ name="Edit Outfit">
<menu_item_call.on_enable
function="Edit.EnableEditShape" />
</menu_item_call>
+ <menu_item_call label="Hover Height"
+ layout="topleft"
+ name="Hover Height">
+ <menu_item_call.on_click
+ function="HoverHeight" />
+ <menu_item_call.on_enable
+ function="Edit.EnableHoverHeight" />
+ </menu_item_call>
<menu_item_call
label="My Friends"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
index 8bd013f14b..cfbbe41f95 100755
--- a/indra/newview/skins/default/xui/en/menu_avatar_other.xml
+++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
@@ -96,14 +96,11 @@
function="Tools.LookAtSelection"
parameter="zoom" />
</menu_item_call>
- <menu_item_call
- enabled="false"
+ <menu_item_call
label="Pay"
name="Pay...">
<menu_item_call.on_click
- function="PayObject" />
- <menu_item_call.on_enable
- function="EnablePayAvatar" />
+ function="PayObject" />
</menu_item_call>
<menu_item_separator />
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
index ca0c9bd5e4..d3b0b07f70 100755
--- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
@@ -229,6 +229,14 @@
<menu_item_call.on_enable
function="Edit.EnableEditShape" />
</menu_item_call>
+ <menu_item_call label="Hover Height"
+ layout="topleft"
+ name="Hover Height">
+ <menu_item_call.on_click
+ function="HoverHeight" />
+ <menu_item_call.on_enable
+ function="Edit.EnableHoverHeight" />
+ </menu_item_call>
<menu_item_call
label="My Friends"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
index 5c98a98d3d..dc9622a27d 100755
--- a/indra/newview/skins/default/xui/en/menu_object.xml
+++ b/indra/newview/skins/default/xui/en/menu_object.xml
@@ -78,7 +78,7 @@
<menu_item_call.on_enable
function="EnableSelectInPathfindingLinksets"/>
<menu_item_call.on_visible
- function="EnableSelectInPathfindingLinksets"/>
+ function="VisibleSelectInPathfindingLinksets"/>
</menu_item_call>
<menu_item_call
label="Show in characters"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 560f81a6fd..b75d614dcc 100755
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1417,7 +1417,14 @@
</menu_item_call>
<menu_item_separator/>
-
+ <menu_item_call
+ label="Bumps, Pushes &amp; Hits"
+ name="Bumps, Pushes &amp;amp; Hits">
+ <menu_item_call.on_click
+ function="Floater.Show"
+ parameter="bumps" />
+ </menu_item_call>
+ <menu_item_separator/>
<menu_item_call
label="About [APP_NAME]"
name="About Second Life">
@@ -3031,15 +3038,7 @@
name="Dump Scripted Camera">
<menu_item_call.on_click
function="Advanced.DumpScriptedCamera" />
- </menu_item_call>
- <menu_item_call
- label="Bumps, Pushes &amp; Hits"
- name="Bumps, Pushes &amp;amp; Hits">
- <menu_item_call.on_click
- function="Floater.Show"
- parameter="bumps" />
- </menu_item_call>
-
+ </menu_item_call>
<menu
create_jump_keys="true"
label="Recorder"
@@ -3591,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 ea1bc66236..28565a85c6 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -34,6 +34,12 @@
</form>
</template>
+ <template name="notifyignore">
+ <form>
+ <ignore text="$ignoretext"/>
+ </form>
+ </template>
+
<template name="okcancelbuttons">
<form>
<button
@@ -1191,6 +1197,18 @@ Save Changes?
<notification
icon="alertmodal.tga"
+ name="DeleteNotecard"
+ type="alertmodal">
+Delete Notecard?
+ <tag>confirm</tag>
+ <usetemplate
+ name="okcancelbuttons"
+ notext="Cancel"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="GestureSaveFailedTooManySteps"
type="alertmodal">
Gesture save failed.
@@ -5259,6 +5277,17 @@ Warning: The &apos;Pay object&apos; 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.
@@ -9490,6 +9519,9 @@ You have been teleported home by the object '[OBJECT_NAME]'
type="notify">
<tag>fail</tag>
You have been teleported by an attachment on [ITEM_ID]
+ <usetemplate
+ ignoretext="Teleport: You have been teleported by an attachment"
+ name="notifyignore"/>
</notification>
<notification
@@ -9498,6 +9530,9 @@ You have been teleported by an attachment on [ITEM_ID]
type="notify">
<tag>fail</tag>
You have been teleported by the object '[OBJECT_NAME]' on the parcel '[PARCEL_NAME]'
+ <usetemplate
+ ignoretext="Teleport: You have been teleported by an object on a parcel"
+ name="notifyignore"/>
</notification>
<notification
@@ -10386,7 +10421,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/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml
index 84753c55a3..d1416ece82 100644
--- a/indra/newview/skins/default/xui/en/panel_login_first.xml
+++ b/indra/newview/skins/default/xui/en/panel_login_first.xml
@@ -102,7 +102,7 @@
allow_text_entry="true"
follows="left|bottom"
height="32"
- left="0"
+ left="2"
label="Username"
combo_editor.font="SansSerifLarge"
max_chars="128"
@@ -163,7 +163,7 @@
text_color="EmphasisColor"
height="16"
name="forgot_password_text"
- left="216"
+ left="219"
top="34"
width="200">
Forgotten password
diff --git a/indra/newview/skins/default/xui/en/panel_notification_list_item.xml b/indra/newview/skins/default/xui/en/panel_notification_list_item.xml
index 56f3c36df6..3dbe11387a 100644
--- a/indra/newview/skins/default/xui/en/panel_notification_list_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification_list_item.xml
@@ -11,10 +11,10 @@
height="202"
can_resize="true"
layout="topleft"
- follows="left|top|right|bottom"
- background_opaque="false"
- background_visible="true"
- bg_alpha_color="PanelNotificationListItem" >
+ follows="left|top|right|bottom" >
+ <!-- background_opaque="false" -->
+ <!-- background_visible="true"> -->
+ <!-- bg_alpha_color="PanelNotificationListItem"> -->
<panel.string
name="sender_resident_text">
Sender: "[SENDER_RESIDENT]"
@@ -41,105 +41,103 @@
</panel.string>
<panel top="0" left="0" width="331" height="196" bevel_style="none" layout="topleft" follows="left|top|right|bottom" name="panel_total_view">
- <layout_stack top="0" left="0" width="331" height="196" orientation="vertical" follows="left|top|right|bottom" name="item_vertical_stack">
- <layout_panel top="0" left="0" height="30" follows="left|top|right|bottom" layout="topleft" name="layout_panel_condensed_view" visible="false">
- <panel border="true" top="0" left="5" height="30" bevel_style="none" layout="topleft" follows="left|top|right|bottom" name="panel_condensed_view">
- <layout_stack top="0" left="0" width="325" height="50" orientation="horizontal" follows="left|top|right|bottom" name="horizontal_stack">
- <layout_panel width="30" height="39" orientation="horizontal" follows="left|top|right|bottom" name="layout_panel_right">
- <group_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="group_icon" tool_tip="Group" default_icon_name="Generic_Group" visible="true"/>
- <avatar_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="avatar_icon" tool_tip="Avatar" default_icon_name="Generic_Person" visible="false"/>
- <icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="system_notification_icon" tool_tip="Icon" image_name="System_Notification" visible="false"/>
- </layout_panel>
- <layout_panel width="260" height="50" orientation="horizontal" name="layout_panel_middle">
- <panel border="false" top="0" width="260" height="38" bevel_style="none" follows="left|top|right" layout="topleft" name="main_info_panel">
- <panel border="false" top="0" left="0" width="260" height="19" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="notification_title_panel">
- <text allow_scroll="false" font="SansSerifSmall" top="6" left="0" width="260" height="12" layout="topleft" follows="right|left" text_color="White"
- use_ellipses="true" word_wrap="true" mouse_opaque="false" name="notification_title" >
- Group Name:Notice Title N o t i c e T i t l e N o t i c e T i t l e N o t i c e T i t l e N oticeTitle
- </text>
- <icon top="1" left="242" width="21" height="21" image_name="Icon_Attachment_Small" follows="right" mouse_opaque="true" name="attachment_icon" tool_tip="Attachment" visible="false"/>
- </panel>
- <panel border="false" top="23" left="0" width="260" height="15" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="sender_time_panel">
- <text allow_scroll="false" font="SansSerifSmall" top="0" left="0" width="170" height="13" layout="topleft" follows="right|left"
- use_ellipses="true" word_wrap="false" mouse_opaque="false" name="sender_or_fee_box" visible="false">
- Sender: "Resident R e s i d e n t R e s i d e n t"
- </text>
- <text allow_scroll="false" font="SansSerifSmall" top="0" right="-5" width="95" height="13" follows="right" halign="right" layout="topleft" left_pad="5"
- name="notification_time" value="2014/12/24 23:30" />
- </panel>
- </panel>
- </layout_panel>
- <layout_panel width="18" height="48" orientation="horizontal" follows="right|top|bottom" name="layout_panel_right">
- <panel top="0" left="0" width="17" height="39" follows="left|top|right|bottom" layout="topleft" name="close_expand_panel">
- <button top="0" left="0" width="17" height="17" layout="topleft" follows="top" name="close_btn" mouse_opaque="true"
- tab_stop="false" image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press" />
- <button bottom="-16" right="15" width="17" height="17" layout="topleft" follows="bottom" name="expand_btn" mouse_opaque="true"
- tab_stop="false" image_unselected="Notification_Expand" image_selected="Notification_Expand" />
- </panel>
- </layout_panel>
- </layout_stack>
- </panel>
- </layout_panel>
- <layout_panel top="0" left="0" height="196" follows="left|top|right|bottom" layout="topleft" name="layout_panel_expanded_view" visible="true">
- <panel border="true" top="0" left="5" height="196" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="panel_expanded_view">
- <layout_stack top="0" left="0" width="325" height="196" orientation="horizontal" follows="left|top|right|bottom" name="horizontal_stack">
- <layout_panel width="30" height="170" orientation="horizontal" follows="left|top|bottom" name="layout_panel_right_exp">
- <group_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="group_icon_exp" tool_tip="Group" default_icon_name="Generic_Group" visible="true"/>
- <avatar_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="avatar_icon_exp" tool_tip="Avatar" default_icon_name="Generic_Person" visible="false"/>
- <icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="system_notification_icon_exp" tool_tip="Icon" image_name="System_Notification" visible="false"/>
- <icon left="12" top="144" width="20" height="20" name="attachment_icon_exp" tool_tip="Attachment" image_name="Icon_Attachment_Large" follows="left" mouse_opaque="true" visible="false"/>
- </layout_panel>
- <layout_panel width="230" height="196" orientation="horizontal" follows="left|top|right|bottom" name="layout_panel_middle_exp">
- <panel border="false" top="0" width="230" height="196" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="main_info_panel_expanded">
- <layout_stack top="0" left="0" width="230" height="196" orientation="vertical" follows="left|top|right|bottom" name="main_info_panel_vertical_stack">
- <layout_panel top="0" left="0" width="230" height="30" layout="topleft" follows="left|top|right|bottom" name="notification_title_layout_panel" visible="true">
- <panel border="false" top="0" left="0" width="230" height="30" bevel_style="none" follows="left|top|right" layout="topleft" name="notification_title_panel_exp">
- <text allow_scroll="false" font="SansSerif" top="6" left="0" width="233" height="10" layout="topleft" follows="right|left" text_color="White"
- use_ellipses="true" word_wrap="false" mouse_opaque="false" name="notification_title_exp">
- Notice Title Notice Title N o t i c e T i t l e N o t i c e T i t l e
- </text>
- <text allow_scroll="false" font="SansSerif" left="0" width="233" height="10" layout="topleft" follows="right|left" text_color="White"
- use_ellipses="true" word_wrap="false" mouse_opaque="false" name="group_name_exp" visible="false">
- Group Name Group Name Group Na m e e
- </text>
- </panel>
- <panel border="false" left="0" width="230" height="12" bevel_style="none" follows="left|top|right" layout="topleft" name="sender_time_panel_exp">
- <text allow_scroll="false" font="SansSerifSmall" top="0" left="0" width="145" height="13" layout="topleft" follows="right|left"
- use_ellipses="true" word_wrap="false" mouse_opaque="false" name="sender_or_fee_box_exp" visible="false">
- Sender: "Resident R e s i d e n t R e s i d e n t"
- </text>
- <text allow_scroll="false" font="SansSerifSmall" top="0" right="-1" width="95" height="13" follows="right" halign="right" layout="topleft" left_pad="5"
- name="notification_time_exp" value="2014/12/24 23:30" />
- </panel>
- <panel border="true" left="1" height="115" width="230" bevel_style="none" follows="left|top|right" layout="topleft" name="notification_text_panel_exp" visible="true"
- bg_visible="true">
- <text allow_scroll="false" font="SansSerifSmall" top="4" left="5" width="220" height="70" layout="topleft" follows="left|top|right|bottom"
- use_ellipses="true" word_wrap="true" mouse_opaque="false" max_length="370" name="notification_text_exp" >
- Notice text goes here b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla. bla bla bla bla bla bla bla bla bla bla bla bla bla .
- </text>
- </panel>
- <panel border="true" left="1" bottom="-5" width="230" height="22" bevel_style="none" follows="left|right|bottom" layout="topleft" name="attachment_panel" visible="false"
- bg_visible="true">
- <text allow_scroll="false" font="SansSerifSmall" top="4" left="5" width="220" height="12" layout="topleft" follows="left|top|right|bottom"
- use_ellipses="true" word_wrap="true" mouse_opaque="false" max_length="96" name="attachment_text">
- Attachment goes here b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla. bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla .
- </text>
- </panel>
- </layout_panel>
+ <layout_stack top="0" left="0" width="331" height="196" orientation="vertical" follows="left|top|right|bottom" name="item_vertical_stack">
+ <layout_panel top="0" left="0" height="30" follows="left|top|right|bottom" layout="topleft" name="layout_panel_condensed_view" visible="false">
+ <panel border="true" top="0" left="5" height="30" bevel_style="none" layout="topleft" follows="left|top|right|bottom" name="panel_condensed_view">
+ <layout_stack top="0" left="0" width="325" height="50" orientation="horizontal" follows="left|top|right|bottom" name="horizontal_stack">
+ <layout_panel width="30" height="39" orientation="horizontal" follows="left|top|right|bottom" name="layout_panel_right">
+ <group_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="group_icon" tool_tip="Group" default_icon_name="Generic_Group" visible="true"/>
+ <avatar_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="avatar_icon" tool_tip="Avatar" default_icon_name="Generic_Person" visible="false"/>
+ <icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="system_notification_icon" tool_tip="Icon" image_name="System_Notification" visible="false"/>
+ </layout_panel>
+ <layout_panel width="260" height="50" orientation="horizontal" name="layout_panel_middle">
+ <panel border="false" top="0" width="260" height="38" bevel_style="none" follows="left|top|right" layout="topleft" name="main_info_panel">
+ <panel border="false" top="0" left="0" width="260" height="19" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="notification_title_panel">
+ <text allow_scroll="false" font="SansSerifSmall" top="6" left="0" width="260" height="12" layout="topleft" follows="right|left" text_color="White"
+ use_ellipses="true" word_wrap="true" mouse_opaque="false" name="notification_title" >
+ Group Name:Notice Title N o t i c e T i t l e N o t i c e T i t l e N o t i c e T i t l e N oticeTitle
+ </text>
+ <icon top="1" left="242" width="21" height="21" image_name="Icon_Attachment_Small" follows="right" mouse_opaque="true" name="attachment_icon" tool_tip="Attachment" visible="false"/>
+ </panel>
+ <panel border="false" top="23" left="0" width="260" height="15" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="sender_time_panel">
+ <text allow_scroll="false" font="SansSerifSmall" top="0" left="0" width="170" height="13" layout="topleft" follows="right|left"
+ use_ellipses="true" word_wrap="false" mouse_opaque="false" name="sender_or_fee_box" visible="false">
+ Sender: "Resident R e s i d e n t R e s i d e n t"
+ </text>
+ <text allow_scroll="false" font="SansSerifSmall" top="0" right="-5" width="95" height="13" follows="right" halign="right" layout="topleft" left_pad="5"
+ name="notification_time" value="2014/12/24 23:30" />
+ </panel>
+ </panel>
+ </layout_panel>
+ <layout_panel width="18" height="48" orientation="horizontal" follows="right|top|bottom" name="layout_panel_right">
+ <panel top="0" left="0" width="17" height="39" follows="left|top|right|bottom" layout="topleft" name="close_expand_panel">
+ <button top="0" left="0" width="17" height="17" layout="topleft" follows="top" name="close_btn" mouse_opaque="true"
+ tab_stop="false" image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press" />
+ <button bottom="-16" right="15" width="17" height="17" layout="topleft" follows="bottom" name="expand_btn" mouse_opaque="true"
+ tab_stop="false" image_unselected="Notification_Expand" image_selected="Notification_Expand" />
+ </panel>
+ </layout_panel>
</layout_stack>
</panel>
</layout_panel>
- <layout_panel width="18" orientation="horizontal" follows="right|top|bottom" name="layout_panel_left_exp">
- <panel top="0" left="0" width="17" follows="left|top|right|bottom" layout="topleft" name="close_expand_panel_exp">
- <button top="0" left="2" width="17" height="17" layout="topleft" follows="top" name="close_expanded_btn" mouse_opaque="true"
- tab_stop="false" image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press" />
- <button bottom="5" left="0" width="17" height="17" layout="topleft" follows="bottom" name="condense_btn" mouse_opaque="true"
- tab_stop="false" image_unselected="Notification_Condense" image_selected="Notification_Condense" />
+ <layout_panel top="0" left="0" height="196" follows="left|top|right|bottom" layout="topleft" name="layout_panel_expanded_view" visible="true">
+ <panel border="true" top="0" left="5" height="196" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="panel_expanded_view">
+ <layout_stack top="0" left="0" width="325" height="196" orientation="horizontal" follows="left|top|right|bottom" name="horizontal_stack">
+ <layout_panel width="30" height="170" orientation="horizontal" follows="left|top|bottom" name="layout_panel_right_exp">
+ <group_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="group_icon_exp" tool_tip="Group" default_icon_name="Generic_Group" visible="true"/>
+ <avatar_icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="avatar_icon_exp" tool_tip="Avatar" default_icon_name="Generic_Person" visible="false"/>
+ <icon left="5" top="6" width="25" height="25" mouse_opaque="true" name="system_notification_icon_exp" tool_tip="Icon" image_name="System_Notification" visible="false"/>
+ <icon left="12" top="144" width="20" height="20" name="attachment_icon_exp" tool_tip="Attachment" image_name="Icon_Attachment_Large" follows="left" mouse_opaque="true" visible="false"/>
+ </layout_panel>
+ <layout_panel width="230" height="196" orientation="horizontal" follows="left|top|right|bottom" name="layout_panel_middle_exp">
+ <panel border="false" top="0" width="230" height="196" bevel_style="none" follows="left|top|right|bottom" layout="topleft" name="main_info_panel_expanded">
+ <layout_stack top="0" left="0" width="230" height="196" orientation="vertical" follows="left|top|right|bottom" name="main_info_panel_vertical_stack">
+ <layout_panel top="0" left="0" width="230" height="30" layout="topleft" follows="left|top|right|bottom" name="notification_title_layout_panel" visible="true">
+ <panel border="false" top="0" left="0" width="230" height="30" bevel_style="none" follows="left|top|right" layout="topleft" name="notification_title_panel_exp">
+ <text allow_scroll="false" font="SansSerif" top="6" left="0" width="233" height="10" layout="topleft" follows="right|left" text_color="White"
+ use_ellipses="true" word_wrap="false" mouse_opaque="false" name="notification_title_exp">
+ Notice Title Notice Title N o t i c e T i t l e N o t i c e T i t l e
+ </text>
+ <text allow_scroll="false" font="SansSerif" left="0" width="233" height="10" layout="topleft" follows="right|left" text_color="White"
+ use_ellipses="true" word_wrap="false" mouse_opaque="false" name="group_name_exp" visible="false">
+ Group Name Group Name Group Na m e e
+ </text>
+ </panel>
+ <panel border="false" left="0" width="230" height="12" bevel_style="none" follows="left|top|right" layout="topleft" name="sender_time_panel_exp">
+ <text allow_scroll="false" font="SansSerifSmall" top="0" left="0" width="145" height="13" layout="topleft" follows="right|left"
+ use_ellipses="true" word_wrap="false" mouse_opaque="false" name="sender_or_fee_box_exp" visible="false">
+ Sender: "Resident R e s i d e n t R e s i d e n t"
+ </text>
+ <text allow_scroll="false" font="SansSerifSmall" top="0" right="-1" width="95" height="13" follows="right" halign="right" layout="topleft" left_pad="5"
+ name="notification_time_exp" value="2014/12/24 23:30" />
+ </panel>
+ <panel border="false" left="0" height="115" width="230" bevel_style="none" follows="left|top|right" layout="topleft" name="notification_text_panel_exp" visible="true">
+ <text_editor enabled="false" top="0" left="0" width="230" height="110" layout="topleft" follows="left|top|right|bottom"
+ word_wrap="true" max_length="65536" name="notification_text_exp" >
+ Notice text goes here b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla. bla bla bla bla bla bla bla bla bla bla bla bla bla .
+ </text_editor>
+ </panel>
+ <panel border="false" left="1" bottom="-5" width="230" height="22" bevel_style="none" follows="left|right|bottom" layout="topleft" name="attachment_panel" visible="false">
+ <text allow_scroll="false" font="SansSerifSmall" top="4" left="5" width="220" height="12" layout="topleft" follows="left|top|right|bottom"
+ use_ellipses="true" word_wrap="true" max_length="96" name="attachment_text">
+ Attachment goes here b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a b l a bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla. bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla .
+ </text>
+ </panel>
+ </layout_panel>
+ </layout_stack>
+ </panel>
+ </layout_panel>
+ <layout_panel width="18" orientation="horizontal" follows="right|top|bottom" name="layout_panel_left_exp">
+ <panel top="0" left="0" width="17" follows="left|top|right|bottom" layout="topleft" name="close_expand_panel_exp">
+ <button top="0" left="2" width="17" height="17" layout="topleft" follows="top" name="close_expanded_btn" mouse_opaque="true"
+ tab_stop="false" image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press" />
+ <button bottom="5" left="0" width="17" height="17" layout="topleft" follows="bottom" name="condense_btn" mouse_opaque="true"
+ tab_stop="false" image_unselected="Notification_Condense" image_selected="Notification_Condense" />
+ </panel>
+ </layout_panel>
+ </layout_stack>
</panel>
</layout_panel>
- </layout_stack>
- </panel>
- </layout_panel>
- </layout_stack>
+ </layout_stack>
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 9da044ab64..f6665a1d5d 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -39,12 +39,7 @@
enabled="true"
label="English"
name="English"
- value="en" />
- <combo_box.item
- enabled="true"
- label="Dansk (Danish) - Beta"
- name="Danish"
- value="da" />
+ value="en" />
<combo_box.item
enabled="true"
label="Deutsch (German) - Beta"
@@ -64,12 +59,7 @@
enabled="true"
label="Italiano (Italian) - Beta"
name="Italian"
- value="it" />
- <combo_box.item
- enabled="true"
- label="Polski (Polish) - Beta"
- name="Polish"
- value="pl" />
+ value="it" />
<combo_box.item
enabled="true"
label="Português (Portuguese) - Beta"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index b71586aab1..615abbaa89 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -398,7 +398,7 @@
follows="left|top"
layout="topleft"
left_delta="-168"
- width="221"
+ width="360"
height="20"
name="ear_location">
<radio_item
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 064ece6e4b..dbf7bc031f 100755
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -51,7 +51,7 @@
v_pad="4"
top="0"
wrap="false"
- value="L$20"
+ value="L$??"
width="40" />
<button
halign="center"
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index 26cac06648..5c728718ef 100755
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -60,7 +60,7 @@
text_color="White"
top="4"
value="..."
- width="45" />
+ width="49" />
<button
follows="right"
height="20"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
index c5dfb703e5..9be01c5d4f 100755
--- a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
@@ -395,16 +395,20 @@
left_pad="0"
layout="topleft"
follows="left|top"
- name="combobox sale copy"
+ name="ComboBoxSaleType"
width="170">
- <combo_box.item
- label="Copy"
- name="Copy"
- value="Copy" />
- <combo_box.item
- label="Original"
- name="Original"
- value="Original" />
+ <combo_box.item
+ name="Copy"
+ label="Copy"
+ value="2" />
+ <combo_box.item
+ name="Contents"
+ label="Contents"
+ value="3" />
+ <combo_box.item
+ name="Original"
+ label="Original"
+ value="1" />
</combo_box>
<spinner
follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
index 6ee8fc3a4c..b84dce222f 100755
--- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
@@ -48,7 +48,7 @@
</panel.string>
<panel.string
name="Cost Total">
- Total Price: L$
+ Sum Price: L$
</panel.string>
<panel.string
name="Cost Per Unit">
@@ -444,7 +444,7 @@
control_name="Edit Cost"
name="Edit Cost"
label="Price: L$"
- label_width="65"
+ label_width="73"
width="150"
min_val="1"
height="20"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 945a77c071..f77678e5f8 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2513,6 +2513,7 @@ The [[MARKETPLACE_CREATE_STORE_URL] Marketplace store] is returning errors.
<string name="CompileSuccessful">Compile successful!</string>
<string name="CompileSuccessfulSaving">Compile successful, saving...</string>
<string name="SaveComplete">Save complete.</string>
+ <string name="UploadFailed">File upload failed: </string>
<string name="ObjectOutOfRange">Script (object out of range)</string>
<!-- god tools -->
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index d2117f08b6..9596a8277e 100755
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -175,6 +175,7 @@
<menu_item_call label="Blogs de [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Denunciar una infracción" name="Report Abuse"/>
<menu_item_call label="Informar de un fallo" name="Report Bug"/>
+ <menu_item_call label="Bumps, Pushes &amp; Hits" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Avanzado" name="Advanced">
@@ -322,8 +323,7 @@
<menu label="Red" name="Network">
<menu_item_check label="Pause Avatar" name="AgentPause"/>
<menu_item_call label="Drop a Packet" name="Drop a Packet"/>
- </menu>
- <menu_item_call label="Bumps, Pushes &amp; Hits" name="Bumps, Pushes &amp;amp; Hits"/>
+ </menu>
<menu label="Mundo virtual" name="DevelopWorld">
<menu_item_check label="Anular el sol del Sim" name="Sim Sun Override"/>
<menu_item_check label="Meteorología fija" name="Fixed Weather"/>
diff --git a/indra/newview/skins/default/xui/es/panel_region_debug.xml b/indra/newview/skins/default/xui/es/panel_region_debug.xml
index f6676967f5..2a98fb808d 100755
--- a/indra/newview/skins/default/xui/es/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/es/panel_region_debug.xml
@@ -27,9 +27,9 @@
<check_box label="En el terreno de otros" name="return_other_land" tool_tip="Devolver sólo los objetos que están en terreno de otro"/>
<check_box label="En cada región de este estado" name="return_estate_wide" tool_tip="Devolver los objetos de todas las regiones que forman este estado"/>
<button label="Devolver" name="return_btn"/>
- <button label="Listar los objetos que colisionan..." name="top_colliders_btn" tool_tip="Lista de los objetos con más posibles colisiones potenciales" width="280"/>
- <button label="Reiniciar la región" name="restart_btn" tool_tip="Cuenta atrás de 2 minutos y reiniciar la región"/>
- <button label="Listar los scripts según su uso..." name="top_scripts_btn" tool_tip="Lista de los objetos que más tiempo emplean ejecutando scripts" width="280"/>
- <button label="Cancelar reinicio" name="cancel_restart_btn" tool_tip="Cancelar el reinicio de región"/>
- <button label="Consola de depuración de región" name="region_debug_console_btn" tool_tip="Abrir consola de depuración de región"/>
+ <button label="Listar los objetos que colisionan..." name="top_colliders_btn" tool_tip="Lista de los objetos con más posibles colisiones potenciales" width="240"/>
+ <button label="Reiniciar la región" name="restart_btn" tool_tip="Cuenta atrás de 2 minutos y reiniciar la región" left_pad="90" width="160"/>
+ <button label="Listar los scripts según su uso..." name="top_scripts_btn" tool_tip="Lista de los objetos que más tiempo emplean ejecutando scripts" width="240"/>
+ <button label="Cancelar reinicio" name="cancel_restart_btn" tool_tip="Cancelar el reinicio de región" left_pad="90" width="160"/>
+ <button label="Consola de depuración de región" name="region_debug_console_btn" tool_tip="Abrir consola de depuración de región" width="240"/>
</panel>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 6e36d19ba9..2c30fe07b4 100755
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -176,6 +176,7 @@
<menu_item_call label="Blogs [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Signaler une infraction" name="Report Abuse"/>
<menu_item_call label="Signaler un bug" name="Report Bug"/>
+ <menu_item_call label="Collisions, coups et bousculades" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="À propos de [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Avancé" name="Advanced">
@@ -352,8 +353,7 @@
<menu_item_check label="Interpolation ping des positions des objets" name="Ping Interpolate Object Positions"/>
<menu_item_call label="Abandonner un paquet" name="Drop a Packet"/>
</menu>
- <menu_item_call label="Dump caméra scriptée" name="Dump Scripted Camera"/>
- <menu_item_call label="Collisions, coups et bousculades" name="Bumps, Pushes &amp;amp; Hits"/>
+ <menu_item_call label="Dump caméra scriptée" name="Dump Scripted Camera"/>
<menu label="Enregistreur" name="Recorder">
<menu_item_call label="Commencer la lecture" name="Start Playback"/>
<menu_item_call label="Arrêter la lecture" name="Stop Playback"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_region_debug.xml b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
index d21695e9aa..461ada3108 100755
--- a/indra/newview/skins/default/xui/fr/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
@@ -27,9 +27,9 @@
<check_box label="Sur le terrain d&apos;un autre résident" name="return_other_land" tool_tip="Ne renvoyer que les objets se trouvant sur le terrain de quelqu&apos;un d&apos;autre"/>
<check_box label="Dans toutes les régions de ce domaine" name="return_estate_wide" tool_tip="Renvoyer les objets dans toutes les régions qui constituent ce domaine"/>
<button label="Renvoyer" name="return_btn"/>
- <button label="Collisions les plus consommatrices" name="top_colliders_btn" tool_tip="Liste des objets avec le plus de collisions potentielles" width="320"/>
- <button label="Redémarrer la région" name="restart_btn" tool_tip="Redémarrer la région au bout de 2 minutes" width="160"/>
- <button label="Scripts les plus consommateurs" name="top_scripts_btn" tool_tip="Liste des objets passant le plus de temps à exécuter des scripts" width="320"/>
- <button label="Annuler le redémarrage" name="cancel_restart_btn" tool_tip="Annuler le redémarrage de la région." width="160"/>
- <button label="Console de débogage de région" name="region_debug_console_btn" tool_tip="Ouvrir la console de débogage de région"/>
+ <button label="Collisions les plus consommatrices" name="top_colliders_btn" tool_tip="Liste des objets avec le plus de collisions potentielles" width="240"/>
+ <button label="Redémarrer la région" name="restart_btn" tool_tip="Redémarrer la région au bout de 2 minutes" left_pad="90" width="160"/>
+ <button label="Scripts les plus consommateurs" name="top_scripts_btn" tool_tip="Liste des objets passant le plus de temps à exécuter des scripts" width="240"/>
+ <button label="Annuler le redémarrage" name="cancel_restart_btn" tool_tip="Annuler le redémarrage de la région." left_pad="90" width="160"/>
+ <button label="Console de débogage de région" name="region_debug_console_btn" tool_tip="Ouvrir la console de débogage de région" width="240"/>
</panel>
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
index f535a53e66..d25e11e7a4 100755
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -176,6 +176,7 @@
<menu_item_call label="[SECOND_LIFE] Blog" name="Second Life Blogs"/>
<menu_item_call label="Segnala abuso" name="Report Abuse"/>
<menu_item_call label="Segnala bug" name="Report Bug"/>
+ <menu_item_call label="Urti, spinte e contatti" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="Informazioni su [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Avanzate" name="Advanced">
@@ -323,8 +324,7 @@
<menu label="Rete" name="Network">
<menu_item_check label="Metti in pausa" name="AgentPause"/>
<menu_item_call label="Lascia un pacchetto" name="Drop a Packet"/>
- </menu>
- <menu_item_call label="Urti, spinte e contatti" name="Bumps, Pushes &amp;amp; Hits"/>
+ </menu>
<menu label="Mondo" name="DevelopWorld">
<menu_item_check label="Esclusione al sole della simulazione" name="Sim Sun Override"/>
<menu_item_check label="Clima fisso" name="Fixed Weather"/>
diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml
index 88c056bf5e..ca39cf6d05 100755
--- a/indra/newview/skins/default/xui/it/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_debug.xml
@@ -27,9 +27,9 @@
<check_box label="Sul terreno di un altro residente" name="return_other_land" tool_tip="Restituisci solo gli oggetti che sono in terreni appartenenti a qualcun altro"/>
<check_box label="In tutte le regioni di questa proprietà" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l&apos;insieme dei possedimenti terrieri"/>
<button label="Restituisci" name="return_btn"/>
- <button label="Visualizza l&apos;elenco dei maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni" width="280"/>
- <button label="Riavvia la regione" name="restart_btn" tool_tip="Dai 2 minuti di tempo massimo e fai riavviare la regione"/>
- <button label="Visualizza l&apos;elenco degli script più pesanti..." name="top_scripts_btn" tool_tip="Elenco degli oggetti che impiegano più tempo a far girare gli script" width="280"/>
- <button label="Annulla riavvio" name="cancel_restart_btn" tool_tip="Annulla riavvio regione"/>
- <button label="Console di debug regione" name="region_debug_console_btn" tool_tip="Apri console di debug regione"/>
+ <button label="Visualizza l&apos;elenco dei maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni" width="270"/>
+ <button label="Riavvia la regione" name="restart_btn" tool_tip="Dai 2 minuti di tempo massimo e fai riavviare la regione" left_pad="90" width="140"/>
+ <button label="Visualizza l&apos;elenco degli script più pesanti..." name="top_scripts_btn" tool_tip="Elenco degli oggetti che impiegano più tempo a far girare gli script" width="270"/>
+ <button label="Annulla riavvio" name="cancel_restart_btn" tool_tip="Annulla riavvio regione" left_pad="90" width="140"/>
+ <button label="Console di debug regione" name="region_debug_console_btn" tool_tip="Apri console di debug regione" width="270"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
index 4e6c6808c6..0b85c693f0 100755
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -176,6 +176,7 @@
<menu_item_call label="[SECOND_LIFE] ブログ" name="Second Life Blogs"/>
<menu_item_call label="嫌がらせを報告する" name="Report Abuse"/>
<menu_item_call label="バグを報告する" name="Report Bug"/>
+ <menu_item_call label="衝突・プッシュ・打撃" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="[APP_NAME] について" name="About Second Life"/>
</menu>
<menu label="アドバンス" name="Advanced">
@@ -352,8 +353,7 @@
<menu_item_check label="挿入されたオブジェクトの位置の Ping" name="Ping Interpolate Object Positions"/>
<menu_item_call label="パケットドロップ" name="Drop a Packet"/>
</menu>
- <menu_item_call label="スクリプト付きカメラをダンプ" name="Dump Scripted Camera"/>
- <menu_item_call label="衝突・プッシュ・打撃" name="Bumps, Pushes &amp;amp; Hits"/>
+ <menu_item_call label="スクリプト付きカメラをダンプ" name="Dump Scripted Camera"/>
<menu label="レコーダー" name="Recorder">
<menu_item_call label="再生開始" name="Start Playback"/>
<menu_item_call label="再生停止" name="Stop Playback"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
index e1725fc308..a354cca9ad 100755
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -126,6 +126,7 @@
<menu_item_check label="Włącz podpowiedzi" name="Enable Hints"/>
<menu_item_call label="Złóż Raport o Nadużyciu" name="Report Abuse"/>
<menu_item_call label="Zgłoś błędy klienta" name="Report Bug"/>
+ <menu_item_call label="Zderzenia, popchnięcia &amp; uderzenia" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="O [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Zaawansowane" name="Advanced">
@@ -252,8 +253,7 @@
<menu label="Sieć" name="Network">
<menu_item_check label="Zatrzymaj awatara" name="AgentPause"/>
<menu_item_call label="Upuść pakiet pamięci" name="Drop a Packet"/>
- </menu>
- <menu_item_call label="Zderzenia, popchnięcia &amp; uderzenia" name="Bumps, Pushes &amp;amp; Hits"/>
+ </menu>
<menu label="Świat" name="DevelopWorld">
<menu_item_check label="Domyślne ustawienia środowiska Regionu" name="Sim Sun Override"/>
<menu_item_check label="Ustalona pogoda" name="Fixed Weather"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index a761cfa177..0bbb9683a0 100755
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -176,6 +176,7 @@
<menu_item_call label="Blogs do [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Denunciar abuso" name="Report Abuse"/>
<menu_item_call label="Relatar bug" name="Report Bug"/>
+ <menu_item_call label="Empurrões, trombadas e tapas" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="Sobre [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Avançado" name="Advanced">
@@ -323,8 +324,7 @@
<menu label="Rede" name="Network">
<menu_item_check label="Pausar avatar" name="AgentPause"/>
<menu_item_call label="Drop a Packet" name="Drop a Packet"/>
- </menu>
- <menu_item_call label="Empurrões, trombadas e tapas" name="Bumps, Pushes &amp;amp; Hits"/>
+ </menu>
<menu label="Mundo" name="DevelopWorld">
<menu_item_check label="Impor sobre sol de simulação" name="Sim Sun Override"/>
<menu_item_check label="Clima fixo" name="Fixed Weather"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_region_debug.xml b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
index 9070563fd0..2647c7a1e2 100755
--- a/indra/newview/skins/default/xui/pt/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
@@ -27,9 +27,9 @@
<check_box label="No terreno de outra pessoa" name="return_other_land" tool_tip="Devolver apenas objetos que estejam em terrenos de outra pessoa"/>
<check_box label="Em todas as regiões desta propriedade" name="return_estate_wide" tool_tip="Devolver objetos em todas as regiões que constituem esta propriedade"/>
<button label="Devolver" name="return_btn"/>
- <button label="Principais colidentes..." name="top_colliders_btn" tool_tip="Lista dos objetos com maior potencial de colisão" width="280"/>
- <button label="Reiniciar a região" name="restart_btn" tool_tip="Após 2 minutos de contagem regressiva, reiniciar a região"/>
- <button label="Principais scripts..." name="top_scripts_btn" tool_tip="Lista de objetos que mais passam tempo executando scripts" width="280"/>
- <button label="Cancelar reinício" name="cancel_restart_btn" tool_tip="Cancelar reinício da região"/>
- <button label="Console de depuração de região" name="region_debug_console_btn" tool_tip="Abrir console de depuração de região"/>
+ <button label="Principais colidentes..." name="top_colliders_btn" tool_tip="Lista dos objetos com maior potencial de colisão" width="240"/>
+ <button label="Reiniciar a região" name="restart_btn" tool_tip="Após 2 minutos de contagem regressiva, reiniciar a região" left_pad="90" width="160"/>
+ <button label="Principais scripts..." name="top_scripts_btn" tool_tip="Lista de objetos que mais passam tempo executando scripts" width="240"/>
+ <button label="Cancelar reinício" name="cancel_restart_btn" tool_tip="Cancelar reinício da região" left_pad="90" width="160"/>
+ <button label="Console de depuração de região" name="region_debug_console_btn" tool_tip="Abrir console de depuração de região" width="240"/>
</panel>
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index fad1ea51e0..266a1fb877 100755
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -165,8 +165,15 @@
</menu>
<menu label="Справка" name="Help">
<menu_item_call label="Инструкции..." name="How To"/>
+ <menu_item_call label="База знаний" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="Форумы сообщества" name="Community Forums"/>
+ <menu_item_call label="Портал поддержки" name="Support portal"/>
+ <menu_item_call label="Новости [SECOND_LIFE]" name="Second Life News"/>
+ <menu_item_call label="Блоги [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Жалоба" name="Report Abuse"/>
<menu_item_call label="Сообщить об ошибке" name="Report Bug"/>
+ <menu_item_call label="Столкновения, толчки и удары" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="О [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="Дополнительно" name="Advanced">
@@ -343,8 +350,7 @@
<menu_item_check label="Прикрепить объекты для интерполяции" name="Ping Interpolate Object Positions"/>
<menu_item_call label="Опустить пакет" name="Drop a Packet"/>
</menu>
- <menu_item_call label="Дамп камеры со скриптами" name="Dump Scripted Camera"/>
- <menu_item_call label="Столкновения, толчки и удары" name="Bumps, Pushes &amp;amp; Hits"/>
+ <menu_item_call label="Дамп камеры со скриптами" name="Dump Scripted Camera"/>
<menu label="Диктофон" name="Recorder">
<menu_item_call label="Начать воспроизведение" name="Start Playback"/>
<menu_item_call label="Остановить воспроизведение" name="Stop Playback"/>
@@ -396,6 +402,12 @@
<menu_item_call label="Проверка женщины" name="Test Female"/>
<menu_item_check label="Разрешить выбор аватара" name="Allow Select Avatar"/>
</menu>
+ <menu label="Скорость анимации" name="Animation Speed">
+ <menu_item_call label="Ускорить все анимации на 10%" name="All Animations 10 Faster"/>
+ <menu_item_call label="Замедлить все анимации на 10%" name="All Animations 10 Slower"/>
+ <menu_item_call label="Восстановить скорость анимаций" name="Reset All Animation Speed"/>
+ <menu_item_check label="Анимация медленных движений" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="Скинуть параметры" name="Force Params to Default"/>
<menu_item_check label="Данные об анимации" name="Animation Info"/>
<menu_item_check label="Показать взгляд" name="Show Look At"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_region_debug.xml b/indra/newview/skins/default/xui/ru/panel_region_debug.xml
index d294a9e22e..3eaa0b19e0 100755
--- a/indra/newview/skins/default/xui/ru/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_debug.xml
@@ -27,9 +27,9 @@
<check_box label="На чужой земле" name="return_other_land" tool_tip="Возвращаются только объекты, расположенные на чужой земле"/>
<check_box label="С каждого региона этого землевладения" name="return_estate_wide" tool_tip="Возвращаются объекты со всех регионов, образующих это землевладение"/>
<button label="Возврат" name="return_btn"/>
- <button label="Самые активные участники столкновений..." name="top_colliders_btn" tool_tip="Список объектов, для которых столкновения наиболее вероятны"/>
- <button label="Перезагрузить регион" name="restart_btn" tool_tip="Отсчитать 2 минуты и перезагрузить регион"/>
- <button label="Список лучших скриптов..." name="top_scripts_btn" tool_tip="Объекты, в которых скрипты выполняются дольше всего"/>
- <button label="Отменить перезапуск" name="cancel_restart_btn" tool_tip="Отменить перезапуск региона"/>
- <button label="Консоль отладки региона" name="region_debug_console_btn" tool_tip="Открыть консоль отладки региона"/>
+ <button label="Самые активные участники столкновений..." name="top_colliders_btn" tool_tip="Список объектов, для которых столкновения наиболее вероятны" width="255"/>
+ <button label="Перезагрузить регион" name="restart_btn" tool_tip="Отсчитать 2 минуты и перезагрузить регион" left_pad="85"/>
+ <button label="Список лучших скриптов..." name="top_scripts_btn" tool_tip="Объекты, в которых скрипты выполняются дольше всего" width="255"/>
+ <button label="Отменить перезапуск" name="cancel_restart_btn" tool_tip="Отменить перезапуск региона" left_pad="85"/>
+ <button label="Консоль отладки региона" name="region_debug_console_btn" tool_tip="Открыть консоль отладки региона" width="255"/>
</panel>
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 23e2903e03..a488a0916f 100755
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -174,6 +174,7 @@
<menu_item_call label="[SECOND_LIFE] Blogları" name="Second Life Blogs"/>
<menu_item_call label="Kötüye Kullanımı Bildir" name="Report Abuse"/>
<menu_item_call label="Hata Bildir" name="Report Bug"/>
+ <menu_item_call label="Toslamalar, İtmeler ve Vurmalar" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="[APP_NAME] Hakkında" name="About Second Life"/>
</menu>
<menu label="Gelişmiş" name="Advanced">
@@ -350,8 +351,7 @@
<menu_item_check label="Nesne Konumlarını Ping İle İnterpole Edin" name="Ping Interpolate Object Positions"/>
<menu_item_call label="Paket Bırakın" name="Drop a Packet"/>
</menu>
- <menu_item_call label="Komut Dosyalı Kameranın Dökümünü Al" name="Dump Scripted Camera"/>
- <menu_item_call label="Toslamalar, İtmeler ve Vurmalar" name="Bumps, Pushes &amp;amp; Hits"/>
+ <menu_item_call label="Komut Dosyalı Kameranın Dökümünü Al" name="Dump Scripted Camera"/>
<menu label="Kaydedici" name="Recorder">
<menu_item_call label="Oynatmayı Başlat" name="Start Playback"/>
<menu_item_call label="Oynatmayı Durdur" name="Stop Playback"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_region_debug.xml b/indra/newview/skins/default/xui/tr/panel_region_debug.xml
index 74a0a1569e..ec654aae82 100755
--- a/indra/newview/skins/default/xui/tr/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_debug.xml
@@ -27,9 +27,9 @@
<check_box label="Başkasına ait arazi üzerinde" name="return_other_land" tool_tip="Sadece başkasına ait arazi üzerinde olan nesneler iade edilsin"/>
<check_box label="Bu gayrimenkulu oluşturan bölgelerin tümünde" name="return_estate_wide" tool_tip="Bu gayrimenkulu oluşturan bölgelerin tümündeki nesneler iade edilsin"/>
<button label="İade Et" name="return_btn"/>
- <button label="En Çok Çarpışanlar..." name="top_colliders_btn" tool_tip="En çok potansiyel çarpışma yaşayan nesnelerin listesi"/>
- <button label="Bölgeyi Yeniden Başlat" name="restart_btn" tool_tip="2 dakikalık bir geri sayımdan sonra bölgeyi yeniden başlat"/>
- <button label="En Çok Komut Dsy. Çalştr...." name="top_scripts_btn" tool_tip="Komut dosyalarını çalıştırırken en çok zaman harcayan nesnelerin listesi"/>
- <button label="Yeniden Başlatmayı İptal Et" name="cancel_restart_btn" tool_tip="Bölge yeniden başlatmasını iptal et"/>
- <button label="Bölge Hata Ayıklama Konsolu" name="region_debug_console_btn" tool_tip="Açık Bölge Hata Ayıklama Konsolu"/>
+ <button label="En Çok Çarpışanlar..." name="top_colliders_btn" tool_tip="En çok potansiyel çarpışma yaşayan nesnelerin listesi" width="180"/>
+ <button label="Bölgeyi Yeniden Başlat" name="restart_btn" tool_tip="2 dakikalık bir geri sayımdan sonra bölgeyi yeniden başlat" width="160"/>
+ <button label="En Çok Komut Dsy. Çalştr...." name="top_scripts_btn" tool_tip="Komut dosyalarını çalıştırırken en çok zaman harcayan nesnelerin listesi" width="180"/>
+ <button label="Yeniden Başlatmayı İptal Et" name="cancel_restart_btn" tool_tip="Bölge yeniden başlatmasını iptal et" width="160"/>
+ <button label="Bölge Hata Ayıklama Konsolu" name="region_debug_console_btn" tool_tip="Açık Bölge Hata Ayıklama Konsolu" width="180"/>
</panel>
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
index 46d46e901c..adc29a3944 100755
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -174,6 +174,7 @@
<menu_item_call label="[SECOND_LIFE] 部落格" name="Second Life Blogs"/>
<menu_item_call label="違規舉報" name="Report Abuse"/>
<menu_item_call label="回報臭蟲" name="Report Bug"/>
+ <menu_item_call label="碰撞、推擠與打擊" name="Bumps, Pushes &amp;amp; Hits"/>
<menu_item_call label="關於 [APP_NAME]" name="About Second Life"/>
</menu>
<menu label="進階" name="Advanced">
@@ -350,8 +351,7 @@
<menu_item_check label="探詢內插物件位置" name="Ping Interpolate Object Positions"/>
<menu_item_call label="丟出一個封包" name="Drop a Packet"/>
</menu>
- <menu_item_call label="傾印腳本控制的攝影機" name="Dump Scripted Camera"/>
- <menu_item_call label="碰撞、推擠與打擊" name="Bumps, Pushes &amp;amp; Hits"/>
+ <menu_item_call label="傾印腳本控制的攝影機" name="Dump Scripted Camera"/>
<menu label="錄製器" name="Recorder">
<menu_item_call label="開始播放" name="Start Playback"/>
<menu_item_call label="停止播放" name="Stop Playback"/>
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")
diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt
index 62b1d9db62..01d1d830a2 100755
--- a/indra/test/CMakeLists.txt
+++ b/indra/test/CMakeLists.txt
@@ -1,6 +1,6 @@
# -*- cmake -*-
-project (test)
+project (lltest)
include(00-Common)
include(LLCommon)
@@ -80,9 +80,9 @@ set_source_files_properties(${test_HEADER_FILES}
list(APPEND test_SOURCE_FILES ${test_HEADER_FILES})
-add_executable(test ${test_SOURCE_FILES})
+add_executable(lltest ${test_SOURCE_FILES})
-target_link_libraries(test
+target_link_libraries(lltest
${LLDATABASE_LIBRARIES}
${LLINVENTORY_LIBRARIES}
${LLMESSAGE_LIBRARIES}
@@ -102,14 +102,14 @@ target_link_libraries(test
)
if (WINDOWS)
- set_target_properties(test
+ set_target_properties(lltest
PROPERTIES
LINK_FLAGS "/NODEFAULTLIB:LIBCMT"
LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\""
)
endif (WINDOWS)
-get_target_property(TEST_EXE test LOCATION)
+set(TEST_EXE $<TARGET_FILE:lltest>)
SET_TEST_PATH(DYLD_LIBRARY_PATH)
@@ -122,7 +122,7 @@ LL_TEST_COMMAND(command
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt
COMMAND ${command}
- DEPENDS test
+ DEPENDS lltest
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "C++ unit tests"
)
diff --git a/indra/test/llbuffer_tut.cpp b/indra/test/llbuffer_tut.cpp
index a25fdebb7f..9b8aae6a73 100755
--- a/indra/test/llbuffer_tut.cpp
+++ b/indra/test/llbuffer_tut.cpp
@@ -27,6 +27,7 @@
*/
#include <tut/tut.hpp>
+
#include "linden_common.h"
#include "lltut.h"
#include "llbuffer.h"
diff --git a/indra/test/llevents_tut.cpp b/indra/test/llevents_tut.cpp
index a9114075fc..16edab6282 100755
--- a/indra/test/llevents_tut.cpp
+++ b/indra/test/llevents_tut.cpp
@@ -48,10 +48,10 @@
#include <boost/shared_ptr.hpp>
#include <boost/assign/list_of.hpp>
// other Linden headers
+#include "tests/listener.h" // must PRECEDE lltut.h
#include "lltut.h"
#include "catch_and_store_what_in.h"
#include "stringize.h"
-#include "tests/listener.h"
using boost::assign::list_of;
diff --git a/indra/test/llmessageconfig_tut.cpp b/indra/test/llmessageconfig_tut.cpp
index 8088ce8558..df2151b1b1 100755
--- a/indra/test/llmessageconfig_tut.cpp
+++ b/indra/test/llmessageconfig_tut.cpp
@@ -68,7 +68,7 @@ namespace tut
void writeConfigFile(const LLSD& config)
{
- llofstream file((mTestConfigDir + "/message.xml"));
+ llofstream file((mTestConfigDir + "/message.xml").c_str());
if (file.is_open())
{
LLSDSerialize::toPrettyXML(config, file);
diff --git a/indra/test/llpermissions_tut.cpp b/indra/test/llpermissions_tut.cpp
index 8d8d47a667..fa4b085fd3 100755
--- a/indra/test/llpermissions_tut.cpp
+++ b/indra/test/llpermissions_tut.cpp
@@ -28,7 +28,9 @@
#include <tut/tut.hpp>
#include "linden_common.h"
+
#include "lltut.h"
+
#include "message.h"
#include "llpermissions.h"
diff --git a/indra/test/llsd_new_tut.cpp b/indra/test/llsd_new_tut.cpp
index 03df1d339b..458df3361e 100755
--- a/indra/test/llsd_new_tut.cpp
+++ b/indra/test/llsd_new_tut.cpp
@@ -33,18 +33,7 @@
#include "llsdtraits.h"
#include "llstring.h"
-#if LL_WINDOWS
-#include <float.h>
-namespace
-{
- int fpclassify(double x)
- {
- return _fpclass(x);
- }
-}
-#else
using std::fpclassify;
-#endif
namespace tut
{
@@ -112,15 +101,15 @@ namespace tut
SDTestGroup sdTestGroup("LLSD(new)");
- template<> template<>
- void SDTestObject::test<1>()
- // construction and test of undefined
- {
- SDCleanupCheck check;
-
- LLSD u;
- ensure("is undefined", u.isUndefined());
- }
+ // template<> template<>
+ // void SDTestObject::test<1>()
+ // // construction and test of undefined
+ // {
+ // SDCleanupCheck check;
+
+ // LLSD u;
+ // ensure("is undefined", u.isUndefined());
+ // }
template<> template<>
void SDTestObject::test<2>()
@@ -277,8 +266,18 @@ namespace tut
v = 0.5; checkConversions("point5", v, true, 0, 0.5, "0.5");
v = 0.9; checkConversions("point9", v, true, 0, 0.9, "0.9");
v = -3.9; checkConversions("neg3dot9", v, true, -3, -3.9, "-3.9");
- v = sqrt(-1.0); checkConversions("NaN", v, false, 0, sqrt(-1.0), "nan");
-
+ // Get rid of NaN test. First, some libraries don't reliably return
+ // NaN for sqrt(-1.0) -- meaning that I don't even know how to
+ // portably, reliably produce a NaN value. Second, we observe failures
+ // on different platforms in the asString() test. But LLSD's
+ // ImplReal::asString() does not itself recognize NaN! It merely
+ // passes the value through to llformat(), which passes it through to
+ // the library vsnprintf(). That is, even when we do produce NaN,
+ // we're not testing any LLSD code: we're testing the local library's
+ // vsnprintf() function, which (empirically) produces idiosyncratic
+ // results. This is just not a good test case.
+// v = sqrt(-1.0); checkConversions("NaN", v, false, 0, sqrt(-1.0), "nan");
+
v = ""; checkConversions("empty", v, false, 0, 0.0, "");
v = "0"; checkConversions("digit0", v, true, 0, 0.0, "0");
v = "10"; checkConversions("digit10", v, true, 10, 10.0, "10");
diff --git a/indra/test/lltranscode_tut.cpp b/indra/test/lltranscode_tut.cpp
index 2431afad27..3fce6e0e2b 100755
--- a/indra/test/lltranscode_tut.cpp
+++ b/indra/test/lltranscode_tut.cpp
@@ -49,9 +49,6 @@ namespace tut
template<> template<>
void LLTranscodeTestObject::test<1>()
{
-#if LL_WINDOWS
- skip("Windows APR libs can't transcode.");
-#endif
// Test utf8
std::stringstream input;
std::stringstream output;
diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp
index c43a8f0c7d..5a8ee87afd 100755
--- a/indra/test/lltut.cpp
+++ b/indra/test/lltut.cpp
@@ -38,43 +38,44 @@
namespace tut
{
- void ensure_equals(const char* msg, const LLDate& actual,
+ void ensure_equals(const std::string& msg, const LLDate& actual,
const LLDate& expected)
{
ensure_equals(msg,
actual.secondsSinceEpoch(), expected.secondsSinceEpoch());
}
- void ensure_equals(const char* msg, const LLURI& actual,
+ void ensure_equals(const std::string& msg, const LLURI& actual,
const LLURI& expected)
{
ensure_equals(msg,
actual.asString(), expected.asString());
}
- void ensure_equals(const char* msg,
- const std::vector<U8>& actual, const std::vector<U8>& expected)
+ // The lexical param types here intentionally diverge from the declaration
+ // in our header file. In lltut.h, LLSD is only a forward-declared type;
+ // we have no access to its LLSD::Binary nested type, and so must restate
+ // it explicitly to declare this overload. However, an overload that does
+ // NOT match LLSD::Binary does us no good whatsoever: it would never be
+ // engaged. Stating LLSD::Binary for this definition at least means that
+ // if the LLSD::Binary type ever diverges from what we expect in lltut.h,
+ // that divergence will produce an error: no definition will match that
+ // declaration.
+ void ensure_equals(const std::string& msg,
+ const LLSD::Binary& actual, const LLSD::Binary& expected)
{
- std::string s(msg);
+ ensure_equals(msg + " size", actual.size(), expected.size());
- ensure_equals(s + " size", actual.size(), expected.size());
-
- std::vector<U8>::const_iterator i, j;
+ LLSD::Binary::const_iterator i, j;
int k;
for (i = actual.begin(), j = expected.begin(), k = 0;
i != actual.end();
++i, ++j, ++k)
{
- ensure_equals(s + " field", *i, *j);
+ ensure_equals(msg + " field", *i, *j);
}
}
- void ensure_equals(const char* m, const LLSD& actual,
- const LLSD& expected)
- {
- ensure_equals(std::string(m), actual, expected);
- }
-
void ensure_equals(const std::string& msg, const LLSD& actual,
const LLSD& expected)
{
@@ -158,8 +159,8 @@ namespace tut
if( actual.find(expectedStart, 0) != 0 )
{
std::stringstream ss;
- ss << msg << ": " << "expected to find " << expectedStart
- << " at start of actual " << actual;
+ ss << msg << ": " << "expected to find '" << expectedStart
+ << "' at start of actual '" << actual << "'";
throw failure(ss.str().c_str());
}
}
@@ -172,8 +173,8 @@ namespace tut
!= (actual.size() - expectedEnd.size()) )
{
std::stringstream ss;
- ss << msg << ": " << "expected to find " << expectedEnd
- << " at end of actual " << actual;
+ ss << msg << ": " << "expected to find '" << expectedEnd
+ << "' at end of actual '" << actual << "'";
throw failure(ss.str().c_str());
}
}
@@ -184,8 +185,8 @@ namespace tut
if( actual.find(expectedSubString, 0) == std::string::npos )
{
std::stringstream ss;
- ss << msg << ": " << "expected to find " << expectedSubString
- << " in actual " << actual;
+ ss << msg << ": " << "expected to find '" << expectedSubString
+ << "' in actual '" << actual << "'";
throw failure(ss.str().c_str());
}
}
diff --git a/indra/test/lltut.h b/indra/test/lltut.h
index 243e869be7..9835565bb6 100755
--- a/indra/test/lltut.h
+++ b/indra/test/lltut.h
@@ -30,8 +30,6 @@
#define LL_LLTUT_H
#include "is_approx_equal_fraction.h" // instead of llmath.h
-
-#include <tut/tut.hpp>
#include <cstring>
class LLDate;
@@ -40,6 +38,55 @@ class LLURI;
namespace tut
{
+ void ensure_equals(const std::string& msg,
+ const LLDate& actual, const LLDate& expected);
+
+ void ensure_equals(const std::string& msg,
+ const LLURI& actual, const LLURI& expected);
+
+ // std::vector<U8> is the current definition of LLSD::Binary. Because
+ // we're only forward-declaring LLSD in this header file, we can't
+ // directly reference that nested type. If the build complains that
+ // there's no definition for this declaration, it could be that
+ // LLSD::Binary has changed, and that this declaration must be adjusted to
+ // match.
+ void ensure_equals(const std::string& msg,
+ const std::vector<U8>& actual, const std::vector<U8>& expected);
+
+ void ensure_equals(const std::string& msg,
+ const LLSD& actual, const LLSD& expected);
+
+ void ensure_starts_with(const std::string& msg,
+ const std::string& actual, const std::string& expectedStart);
+
+ void ensure_ends_with(const std::string& msg,
+ const std::string& actual, const std::string& expectedEnd);
+
+ void ensure_contains(const std::string& msg,
+ const std::string& actual, const std::string& expectedSubString);
+
+ void ensure_does_not_contain(const std::string& msg,
+ const std::string& actual, const std::string& expectedSubString);
+}
+
+// This is an odd place to #include an important contributor -- but the usual
+// rules are reversed here. Instead of the overloads above referencing tut.hpp
+// features, we need calls in tut.hpp template functions to dispatch to our
+// overloads declared above.
+
+// turn off warnings about unused functions from clang for tut package
+#if __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+#include <tut/tut.hpp>
+#if __clang__
+#pragma clang diagnostic pop
+#endif
+
+// The functions BELOW this point actually consume tut.hpp functionality.
+namespace tut
+{
inline void ensure_approximately_equals(const char* msg, F64 actual, F64 expected, U32 frac_bits)
{
if(!is_approx_equal_fraction(actual, expected, frac_bits))
@@ -107,40 +154,6 @@ namespace tut
{
ensure_not_equals(NULL, actual, expected);
}
-
-
- template <class T,class Q>
- void ensure_equals(const std::string& msg,
- const Q& actual,const T& expected)
- { ensure_equals(msg.c_str(), actual, expected); }
-
- void ensure_equals(const char* msg,
- const LLDate& actual, const LLDate& expected);
-
- void ensure_equals(const char* msg,
- const LLURI& actual, const LLURI& expected);
-
- void ensure_equals(const char* msg,
- const std::vector<U8>& actual, const std::vector<U8>& expected);
-
- void ensure_equals(const char* msg,
- const LLSD& actual, const LLSD& expected);
-
- void ensure_equals(const std::string& msg,
- const LLSD& actual, const LLSD& expected);
-
- void ensure_starts_with(const std::string& msg,
- const std::string& actual, const std::string& expectedStart);
-
- void ensure_ends_with(const std::string& msg,
- const std::string& actual, const std::string& expectedEnd);
-
- void ensure_contains(const std::string& msg,
- const std::string& actual, const std::string& expectedSubString);
-
- void ensure_does_not_contain(const std::string& msg,
- const std::string& actual, const std::string& expectedSubString);
}
-
#endif // LL_LLTUT_H
diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp
index 57e423e550..aa23699de0 100755
--- a/indra/test/message_tut.cpp
+++ b/indra/test/message_tut.cpp
@@ -119,9 +119,8 @@ namespace tut
void writeConfigFile(const LLSD& config)
{
- std::ostringstream ostr;
- ostr << mTestConfigDir << mSep << "message.xml";
- llofstream file(ostr.str());
+ std::string ostr(mTestConfigDir + mSep + "message.xml");
+ llofstream file(ostr.c_str());
if (file.is_open())
{
LLSDSerialize::toPrettyXML(config, file);
diff --git a/indra/test/namedtempfile.h b/indra/test/namedtempfile.h
index 6069064627..7d59cad32c 100755
--- a/indra/test/namedtempfile.h
+++ b/indra/test/namedtempfile.h
@@ -17,8 +17,8 @@
#include "apr_file_io.h"
#include <string>
#include <boost/function.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lambda/bind.hpp>
+#include <boost/phoenix/core/argument.hpp>
+#include <boost/phoenix/operator/bitwise.hpp>
#include <boost/noncopyable.hpp>
#include <iostream>
#include <sstream>
@@ -34,19 +34,19 @@ public:
NamedTempFile(const std::string& pfx, const std::string& content, apr_pool_t* pool=gAPRPoolp):
mPool(pool)
{
- createFile(pfx, boost::lambda::_1 << content);
+ createFile(pfx, boost::phoenix::placeholders::arg1 << content);
}
// Disambiguate when passing string literal
NamedTempFile(const std::string& pfx, const char* content, apr_pool_t* pool=gAPRPoolp):
mPool(pool)
{
- createFile(pfx, boost::lambda::_1 << content);
+ createFile(pfx, boost::phoenix::placeholders::arg1 << content);
}
// Function that accepts an ostream ref and (presumably) writes stuff to
// it, e.g.:
- // (boost::lambda::_1 << "the value is " << 17 << '\n')
+ // (boost::phoenix::placeholders::arg1 << "the value is " << 17 << '\n')
typedef boost::function<void(std::ostream&)> Streamer;
NamedTempFile(const std::string& pfx, const Streamer& func, apr_pool_t* pool=gAPRPoolp):
diff --git a/indra/test_apps/llfbconnecttest/CMakeLists.txt b/indra/test_apps/llfbconnecttest/CMakeLists.txt
index 512bf202ae..25aaebb783 100644
--- a/indra/test_apps/llfbconnecttest/CMakeLists.txt
+++ b/indra/test_apps/llfbconnecttest/CMakeLists.txt
@@ -109,27 +109,27 @@ else (DARWIN)
)
endif (DARWIN)
-get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
+set(BUILT_SLPLUGIN $<TARGET_FILE:SLPlugin>)
add_custom_command(TARGET llfbconnecttest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_SLPLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_SLPLUGIN}
)
-get_target_property(BUILT_LLCOMMON llcommon LOCATION)
+set(BUILT_LLCOMMON $<TARGET_FILE:llcommon>)
add_custom_command(TARGET llfbconnecttest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_LLCOMMON}
)
-get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
+set(BUILT_WEBKIT_PLUGIN $<TARGET_FILE:media_plugin_webkit>)
add_custom_command(TARGET llfbconnecttest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_WEBKIT_PLUGIN}
)
# copy over bookmarks file if llfbconnecttest gets built
-get_target_property(BUILT_LLFBCONNECTTEST llfbconnecttest LOCATION)
+set(BUILT_LLFBCONNECTTEST $<TARGET_FILE:llfbconnecttest>)
add_custom_command(TARGET llfbconnecttest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
DEPENDS ${BUILT_LLFBCONNECTTEST}
diff --git a/indra/test_apps/llfbconnecttest/llfbconnecttest.h b/indra/test_apps/llfbconnecttest/llfbconnecttest.h
index 6f442a55b3..77e4d096d0 100644
--- a/indra/test_apps/llfbconnecttest/llfbconnecttest.h
+++ b/indra/test_apps/llfbconnecttest/llfbconnecttest.h
@@ -144,43 +144,14 @@ class LLFBConnectTest : public LLPluginClassMediaOwner
float mDistanceCameraToSelectedGeometry;
- int mIdControlAddPanel;
- int mIdControlRemPanel;
-
std::vector< std::pair< std::string, std::string > > mBookmarks;
GLUI_Listbox* mBookmarkList;
int mIdBookmarks;
int mIdUrlEdit;
GLUI_EditText* mUrlEdit;
- //int mIdUrlInitHistoryEdit;
- //GLUI_EditText* mUrlInitHistoryEdit;
int mSelBookmark;
- //int mIdRandomPanelCount;
- //int mRandomPanelCount;
- //int mIdRandomBookmarks;
- //int mRandomBookmarks;
- //int mIdDisableTimeout;
- //int mDisableTimeout;
- //int mIdUsePluginReadThread;
- //int mUsePluginReadThread;
- //int mIdLargePanelSpacing;
- //int mLargePanelSpacing;
- //int mIdControlCrashPlugin;
- //int mIdControlHangPlugin;
- int mIdControlExitApp;
- //GLUI* mGluiMediaTimeControlWindow;
- //int mIdMediaTimeControlPlay;
- //int mIdMediaTimeControlLoop;
- //int mIdMediaTimeControlPause;
- //int mIdMediaTimeControlStop;
- //int mIdMediaTimeControlSeek;
- //int mIdMediaTimeControlVolume;
- //int mMediaTimeControlVolume;
- //int mIdMediaTimeControlSeekSeconds;
- //int mMediaTimeControlSeekSeconds;
- //int mIdMediaTimeControlRewind;
- //int mIdMediaTimeControlFastForward;
+ int mIdControlExitApp;
GLUI* mGluiMediaBrowserControlWindow;
int mIdMediaBrowserControlBack;
@@ -188,16 +159,11 @@ class LLFBConnectTest : public LLPluginClassMediaOwner
int mIdMediaBrowserControlStop;
int mIdMediaBrowserControlForward;
GLUI_Button* mMediaBrowserControlForwardButton;
- bool mGluiMediaTimeControlWindowFlag;
bool mGluiMediaBrowserControlWindowFlag;
bool mMediaBrowserControlBackButtonFlag;
bool mMediaBrowserControlForwardButtonFlag;
int mIdMediaBrowserControlHome;
int mIdMediaBrowserControlReload;
- int mIdMediaBrowserControlClearCache;
- int mIdMediaBrowserControlClearCookies;
- int mIdMediaBrowserControlEnableCookies;
- int mMediaBrowserControlEnableCookies;
GLUI* mBottomGLUIWindow;
GLUI_StaticText* mStatusText;
diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt
index 9d44563e26..0c8bdc464d 100755
--- a/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/indra/test_apps/llplugintest/CMakeLists.txt
@@ -334,40 +334,40 @@ else (DARWIN)
)
endif (DARWIN)
-get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
+set(BUILT_SLPLUGIN $<TARGET_FILE:SLPlugin>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_SLPLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_SLPLUGIN}
)
-get_target_property(BUILT_LLCOMMON llcommon LOCATION)
+set(BUILT_LLCOMMON $<TARGET_FILE:llcommon>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_LLCOMMON}
)
-get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
+set(BUILT_WEBKIT_PLUGIN $<TARGET_FILE:media_plugin_webkit>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_WEBKIT_PLUGIN}
)
if (DARWIN OR WINDOWS)
- get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
+ set(BUILT_QUICKTIME_PLUGIN $<TARGET_FILE:media_plugin_quicktime>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_QUICKTIME_PLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_QUICKTIME_PLUGIN}
)
endif (DARWIN OR WINDOWS)
-get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION)
+set(BUILT_EXAMPLE_PLUGIN $<TARGET_FILE:media_plugin_example>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_EXAMPLE_PLUGIN}
)
# copy over bookmarks file if llmediaplugintest gets built
-get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)
+set(BUILT_LLMEDIAPLUGINTEST $<TARGET_FILE:llmediaplugintest>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
diff --git a/indra/tools/vstool/VSTool.exe b/indra/tools/vstool/VSTool.exe
index 8be428614e..854290b90a 100755
--- a/indra/tools/vstool/VSTool.exe
+++ b/indra/tools/vstool/VSTool.exe
Binary files differ
diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs
index cc73261e30..ef2e582b90 100755
--- a/indra/tools/vstool/main.cs
+++ b/indra/tools/vstool/main.cs
@@ -555,6 +555,10 @@ namespace VSTool
version = "VC100";
break;
+ case "12.00":
+ version = "VC120";
+ break;
+
default:
throw new ApplicationException("Unknown .sln version: " + format);
}
@@ -595,6 +599,10 @@ namespace VSTool
progid = "VisualStudio.DTE.10.0";
break;
+ case "VC120":
+ progid = "VisualStudio.DTE.12.0";
+ break;
+
default:
throw new ApplicationException("Can't handle VS version: " + version);
}
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
index ce80d55829..c152f7c0a6 100755
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -46,6 +46,7 @@ target_link_libraries(lllogin
${LLMATH_LIBRARIES}
${LLXML_LIBRARIES}
${BOOST_CONTEXT_LIBRARY}
+ ${BOOST_THREAD_LIBRARY}
${BOOST_COROUTINE_LIBRARY}
${BOOST_SYSTEM_LIBRARY}
)
@@ -57,7 +58,7 @@ if(LL_TESTS)
set_source_files_properties(
lllogin.cpp
PROPERTIES
- LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY};${BOOST_COROUTINE_LIBRARY};${BOOST_SYSTEM_LIBRARY}"
+ LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_COROUTINE_LIBRARY};${BOOST_CONTEXT_LIBRARY};${BOOST_THREAD_LIBRARY};${BOOST_SYSTEM_LIBRARY}"
)
LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp
index c42112af80..f868e5cc2c 100755
--- a/indra/viewer_components/updater/llupdatedownloader.cpp
+++ b/indra/viewer_components/updater/llupdatedownloader.cpp
@@ -270,7 +270,7 @@ void LLUpdateDownloader::Implementation::resume(void)
}
mDownloadRecordPath = downloadMarkerPath();
- llifstream dataStream(mDownloadRecordPath);
+ llifstream dataStream(mDownloadRecordPath.c_str());
if(!dataStream)
{
mClient.downloadError("no download marker");
@@ -362,7 +362,7 @@ size_t LLUpdateDownloader::Implementation::onHeader(void * buffer, size_t size)
LL_INFOS("UpdaterService") << "download size is " << size << LL_ENDL;
mDownloadData["size"] = LLSD(LLSD::Integer(size));
- llofstream odataStream(mDownloadRecordPath);
+ llofstream odataStream(mDownloadRecordPath.c_str());
LLSDSerialize::toPrettyXML(mDownloadData, odataStream);
} catch (std::exception const & e) {
LL_WARNS("UpdaterService") << "unable to read content length ("
@@ -513,7 +513,7 @@ void LLUpdateDownloader::Implementation::resumeDownloading(size_t startByte)
}
throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_HTTPHEADER, mHeaderList));
- mDownloadStream.open(mDownloadData["path"].asString(),
+ mDownloadStream.open(mDownloadData["path"].asString().c_str(),
std::ios_base::out | std::ios_base::binary | std::ios_base::app);
start();
}
@@ -534,10 +534,10 @@ void LLUpdateDownloader::Implementation::startDownloading(LLURI const & uri, std
<< " from " << uri.asString() << LL_ENDL;
LL_INFOS("UpdaterService") << "hash of file is " << hash << LL_ENDL;
- llofstream dataStream(mDownloadRecordPath);
+ llofstream dataStream(mDownloadRecordPath.c_str());
LLSDSerialize::toPrettyXML(mDownloadData, dataStream);
- mDownloadStream.open(filePath, std::ios_base::out | std::ios_base::binary);
+ mDownloadStream.open(filePath.c_str(), std::ios_base::out | std::ios_base::binary);
initializeCurlGet(uri.asString(), true);
start();
}
@@ -570,7 +570,7 @@ bool LLUpdateDownloader::Implementation::validateOrRemove(const std::string& fil
bool LLUpdateDownloader::Implementation::validateDownload(const std::string& filePath)
{
- llifstream fileStream(filePath, std::ios_base::in | std::ios_base::binary);
+ llifstream fileStream(filePath.c_str(), std::ios_base::in | std::ios_base::binary);
if(!fileStream)
{
LL_INFOS("UpdaterService") << "can't open " << filePath << ", invalid" << LL_ENDL;
diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp
index cb3be5bbdc..c152493a51 100755
--- a/indra/viewer_components/updater/llupdaterservice.cpp
+++ b/indra/viewer_components/updater/llupdaterservice.cpp
@@ -285,7 +285,7 @@ bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller)
{
bool foundInstall = false; // return true if install is found.
- llifstream update_marker(update_marker_path(),
+ llifstream update_marker(update_marker_path().c_str(),
std::ios::in | std::ios::binary);
if(update_marker.is_open())
@@ -365,7 +365,7 @@ bool LLUpdaterServiceImpl::checkForResume()
std::string download_marker_path = mUpdateDownloader.downloadMarkerPath();
if(LLFile::isfile(download_marker_path))
{
- llifstream download_marker_stream(download_marker_path,
+ llifstream download_marker_stream(download_marker_path.c_str(),
std::ios::in | std::ios::binary);
if(download_marker_stream.is_open())
{
@@ -460,7 +460,7 @@ void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)
// Save out the download data to the SecondLifeUpdateReady
// marker file.
- llofstream update_marker(update_marker_path());
+ llofstream update_marker(update_marker_path().c_str());
LLSDSerialize::toPrettyXML(data, update_marker);
LLSD event;
@@ -558,7 +558,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)
LL_DEBUGS("UpdaterService") << "found marker " << ll_install_failed_marker_path() << LL_ENDL;
int requiredValue = 0;
{
- llifstream stream(ll_install_failed_marker_path());
+ llifstream stream(ll_install_failed_marker_path().c_str());
stream >> requiredValue;
if(stream.fail())
{
diff --git a/scripts/automated_build_scripts/opensrc-build.sh b/scripts/automated_build_scripts/opensrc-build.sh
deleted file mode 100755
index c1b592a972..0000000000
--- a/scripts/automated_build_scripts/opensrc-build.sh
+++ /dev/null
@@ -1,391 +0,0 @@
-#!/bin/sh
-
-# This is the build script used by Linden Lab's autmated build system.
-#
-
-set -x
-
-export PATH=/bin:/usr/bin:$PATH
-arch=`uname | cut -b-6`
-here=`echo $0 | sed 's:[^/]*$:.:'`
-year=`date +%Y`
-branch=`svn info | grep '^URL:' | sed 's:.*/::'`
-revision=`svn info | grep '^Revision:' | sed 's/.*: //'`
-
-[ x"$WGET_CACHE" = x ] && export WGET_CACHE=/var/tmp/parabuild/wget
-[ x"$S3GET_URL" = x ] && export S3GET_URL=http://viewer-source-downloads.s3.amazonaws.com/$year
-[ x"$S3PUT_URL" = x ] && export S3PUT_URL=https://s3.amazonaws.com/viewer-source-downloads/$year
-[ x"$PUBLIC_URL" = x ] && export PUBLIC_URL=http://secondlife.com/developers/opensource/downloads/$year
-[ x"$PUBLIC_EMAIL" = x ] && export PUBLIC_EMAIL=sldev-commits@lists.secondlife.com
-
-# Make sure command worked and bail out if not, reporting failure to parabuild
-fail()
-{
- release_lock
- echo "BUILD FAILED" $@
- exit 1
-}
-
-pass()
-{
- release_lock
- echo "BUILD SUCCESSFUL"
- exit 0
-}
-
-# Locking to avoid contention with u-s-c
-LOCK_CREATE=/usr/bin/lockfile-create
-LOCK_TOUCH=/usr/bin/lockfile-touch
-LOCK_REMOVE=/usr/bin/lockfile-remove
-LOCK_PROCESS=
-
-locking_available()
-{
- test -x "$LOCK_CREATE"\
- -a -x "$LOCK_TOUCH"\
- -a -x "$LOCK_REMOVE"
-}
-
-acquire_lock()
-{
- if locking_available
- then
- if "$LOCK_CREATE" /var/lock/update-system-config --retry 99
- then
- "$LOCK_TOUCH" /var/lock/update-system-config &
- LOCK_PROCESS="$!"
- else
- fail acquire lock
- fi
- else
- true
- fi
-}
-
-release_lock()
-{
- if locking_available
- then
- if test x"$LOCK_PROCESS" != x
- then
- kill "$LOCK_PROCESS"
- "$LOCK_REMOVE" /var/lock/update-system-config
- else
- echo No Lock Acquired >&2
- fi
- else
- true
- fi
-}
-
-get_asset()
-{
- mkdir -p "$WGET_CACHE" || fail creating WGET_CACHE
- local tarball=`basename "$1"`
- test -r "$WGET_CACHE/$tarball" || ( cd "$WGET_CACHE" && curl --location --remote-name "$1" || fail getting $1 )
- case "$tarball" in
- *.zip) unzip -qq -d .. -o "$WGET_CACHE/$tarball" || fail unzip $tarball ;;
- *.tar.gz|*.tgz) tar -C .. -xzf "$WGET_CACHE/$tarball" || fail untar $tarball ;;
- *) fail unrecognized filetype: $tarball ;;
- esac
-}
-
-s3_available()
-{
- test -x "$helpers/s3get.sh" -a -x "$helpers/s3put.sh" -a -r "$helpers/s3curl.pl"
-}
-
-build_dir_Darwin()
-{
- echo build-darwin-universal
-}
-
-build_dir_Linux()
-{
- echo viewer-linux-i686-`echo $1 | tr A-Z a-z`
-}
-
-build_dir_CYGWIN()
-{
- echo build-vc80
-}
-
-installer_Darwin()
-{
- ls -1td "`build_dir_Darwin Release`/newview/"*.dmg 2>/dev/null | sed 1q
-}
-
-installer_Linux()
-{
- ls -1td "`build_dir_Linux Release`/newview/"*.tar.bz2 2>/dev/null | sed 1q
-}
-
-installer_CYGWIN()
-{
- d=`build_dir_CYGWIN Release`
- p=`sed 's:.*=::' "$d/newview/Release/touched.bat"`
- echo "$d/newview/Release/$p"
-}
-
-# deal with aborts etc..
-trap fail 1 2 3 14 15
-
-# Check location
-cd "$here/../.."
-
-test -x ../linden/scripts/automated_build_scripts/opensrc-build.sh\
- || fail 'The parent dir of your checkout needs to be named "linden"'
-
-. doc/asset_urls.txt
-get_asset "$SLASSET_ART"
-
-
-# Set up platform specific stuff
-case "$arch" in
-
-# Note that we can only build the "Release" variant for Darwin, because of a compiler bug:
-# ld: bl out of range (-16777272 max is +/-16M)
-# from __static_initialization_and_destruction_0(int, int)at 0x033D319C
-# in __StaticInit of
-# indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/llvoicevisualizer.o
-# to ___cxa_atexit$island_2 at 0x023D50F8
-# in __text of
-# indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/Second Life
-# in __static_initialization_and_destruction_0(int, int)
-# from indra/build-darwin-universal/newview/SecondLife.build/Debug/Second Life.build/Objects-normal/ppc/llvoicevisualizer.o
-
-Darwin)
- helpers=/usr/local/buildscripts/generic_vc
- variants="Release"
- cmake_generator="Xcode"
- fmod=fmodapi375mac
- fmod_tar="$fmod.zip"
- fmod_so=libfmod.a
- fmod_lib=lib
- target_dirs="libraries/universal-darwin/lib_debug
- libraries/universal-darwin/lib_release
- libraries/universal-darwin/lib_release_client"
- other_archs="$S3GET_URL/$branch/$revision/CYGWIN $S3GET_URL/$branch/$revision/Linux"
- mail="$helpers"/mail.py
- all_done="$helpers"/all_done.py
- get_asset "$SLASSET_LIBS_DARWIN"
- ;;
-
-CYGWIN)
- helpers=/cygdrive/c/buildscripts
- variants="Debug RelWithDebInfo Release"
- #variants="Release"
- cmake_generator="vc80"
- fmod=fmodapi375win
- fmod_tar=fmodapi375win.zip
- fmod_so=fmodvc.lib
- fmod_lib=lib
- target_dirs="libraries/i686-win32/lib/debug
- libraries/i686-win32/lib/release"
- other_archs="$S3GET_URL/$branch/$revision/Darwin $S3GET_URL/$branch/$revision/Linux"
- export PATH="/cygdrive/c/Python25:/cygdrive/c/Program Files/Cmake 2.6/bin":$PATH
- export PERL="/cygdrive/c/Perl/bin/perl.exe"
- export S3CURL="C:\\buildscripts\s3curl.pl"
- export CURL="C:\\cygwin\\bin\\curl.exe"
- mail="C:\\buildscripts\\mail.py"
- all_done="C:\\buildscripts\\all_done.py"
- get_asset "$SLASSET_LIBS_WIN32"
- ;;
-
-Linux)
- helpers=/var/opt/parabuild/buildscripts/generic_vc
- [ x"$CXX" = x ] && test -x /usr/bin/g++-4.1 && export CXX=/usr/bin/g++-4.1
- acquire_lock
- variants="Debug RelWithDebInfo Release"
- #variants="Release"
- cmake_generator="Unix Makefiles"
- fmod=fmodapi375linux
- fmod_tar="$fmod".tar.gz
- fmod_so=libfmod-3.75.so
- fmod_lib=.
- target_dirs="libraries/i686-linux/lib_debug
- libraries/i686-linux/lib_release
- libraries/i686-linux/lib_release_client"
- other_archs="$S3GET_URL/$branch/$revision/Darwin $S3GET_URL/$branch/$revision/CYGWIN"
- mail="$helpers"/mail.py
- all_done="$helpers"/all_done.py
- # Change the DISTCC_DIR to be somewhere that the parabuild process can write to
- if test -r /etc/debian_version
- then
- [ x"$DISTCC_DIR" = x ] && export DISTCC_DIR=/var/tmp/parabuild
- case `cat /etc/debian_version` in
- 3.*) [ x"$DISTCC_HOSTS" = x ]\
- && export DISTCC_HOSTS="build-linux-1
- build-linux-2
- build-linux-3
- build-linux-4
- build-linux-5" ;;
- 4.*) [ x"$DISTCC_HOSTS" = x ]\
- && export DISTCC_HOSTS="build-linux-6
- build-linux-7
- build-linux-8
- build-linux-9" ;;
- esac
- fi
-
- get_asset "$SLASSET_LIBS_LINUXI386"
- ;;
-
-*) fail undefined $arch ;;
-esac
-
-get_asset "http://www.fmod.org/index.php/release/version/$fmod_tar"
-
-# Special case for Mac...
-case "$arch" in
-
-Darwin)
- if lipo -create -output "../$fmod"/api/$fmod_lib/libfmod-universal.a\
- "../$fmod"/api/$fmod_lib/libfmod.a\
- "../$fmod"/api/$fmod_lib/libfmodx86.a
- then
- mv "../$fmod"/api/$fmod_lib/libfmod.a "../$fmod"/api/$fmod_lib/libfmodppc.a
- mv "../$fmod"/api/$fmod_lib/libfmod-universal.a "../$fmod"/api/$fmod_lib/libfmod.a
- echo Created fat binary
- else
- fail running lipo
- fi
- ;;
-
-esac
-
-# ensure helpers are up to date
-( cd "$helpers" && svn up )
-
-# First, go into the directory where the code was checked out by Parabuild
-cd indra
-
-# This is the way it works now, but it will soon work on a variant dependent way
-for target_dir in $target_dirs
-do
- mkdir -p "../$target_dir"
- cp -f "../../$fmod/api/$fmod_lib/$fmod_so" "../$target_dir"
-done
-mkdir -p "../libraries/include"
-cp -f "../../$fmod/api/inc/"* "../libraries/include"
-
-# Special Windows case
-test -r "../../$fmod/api/fmod.dll" && cp -f "../../$fmod/api/fmod.dll" newview
-
-# Now run the build command over all variants
-succeeded=true
-cp /dev/null build.log
-
-### TEST CODE - remove when done
-### variants=
-### echo "Artificial build failure to test notifications" > build.log
-### succeeded=false
-### END TEST CODE
-
-for variant in $variants
-do
- build_dir=`build_dir_$arch $variant`
- rm -rf "$build_dir"
- # This is the way it will work in future
- #for target_dir in $target_dirs
- #do
- # mkdir -p "$build_dir/$target_dir"
- # cp "../../$fmod/api/$fmod_lib/$fmod_so" "$build_dir/$target_dir"
- #done
- #mkdir -p "$build_dir/libraries/include"
- #cp "../../$fmod/api/inc/"* "$build_dir/libraries/include"
- echo "==== $variant ====" >> build.log
- if ./develop.py \
- --unattended \
- --incredibuild \
- -t $variant \
- -G "$cmake_generator" \
- configure \
- -DPACKAGE:BOOL=ON >>build.log 2>&1
- then
- if ./develop.py\
- --unattended\
- --incredibuild \
- -t $variant\
- -G "$cmake_generator" \
- build package >>build.log 2>&1
- then
- # run tests if needed
- true
- else
- succeeded=false
- fi
- else
- succeeded=false
- fi
-done
-
-# check statuis and upload results to S3
-subject=
-if $succeeded
-then
- package=`installer_$arch`
- test -r "$package" || fail not found: $package
- package_file=`echo $package | sed 's:.*/::'`
- if s3_available
- then
- echo "$PUBLIC_URL/$branch/$revision/$package_file" > "$arch"
- echo "$PUBLIC_URL/$branch/$revision/good-build.$arch" >> "$arch"
- "$helpers/s3put.sh" "$package" "$S3PUT_URL/$branch/$revision/$package_file" binary/octet-stream\
- || fail Uploading "$package"
- "$helpers/s3put.sh" build.log "$S3PUT_URL/$branch/$revision/good-build.$arch" text/plain\
- || fail Uploading build.log
- "$helpers/s3put.sh" "$arch" "$S3PUT_URL/$branch/$revision/$arch" text/plain\
- || fail Uploading token file
- if python "$all_done"\
- curl\
- "$S3GET_URL/$branch/$revision/$arch"\
- $other_archs > message
- then
- subject="Successful Build for $branch ($revision)"
- fi
- else
- true s3 is not available
- fi
-else
- if s3_available
- then
- "$helpers/s3put.sh" build.log "$S3PUT_URL/$branch/$revision/failed-build.$arch" text/plain\
- || fail Uploading build.log
- subject="Failed Build for $branch ($revision) on $arch"
- cat >message <<EOF
-Build for $branch ($revision) failed for $arch.
-Please see the build log for details:
-
-$PUBLIC_URL/$branch/$revision/failed-build.$arch
-
-EOF
- else
- true s3 is not available
- fi
-fi
-
-# We have something to say...
-if [ x"$subject" != x ]
-then
- # Extract change list since last build
- if [ x"$PARABUILD_CHANGE_LIST_NUMBER" = x ]
- then
- echo "No change information available" >> message
- elif [ x"$PARABUILD_PREVIOUS_CHANGE_LIST_NUMBER" = x ]
- then
- ( cd .. && svn log --verbose --stop-on-copy --limit 50 ) >>message
- else
- ( cd .. && svn log --verbose -r"$PARABUILD_PREVIOUS_CHANGE_LIST_NUMBER":"$PARABUILD_CHANGE_LIST_NUMBER" ) >>message
- fi
- # $PUBLIC_EMAIL can be a list, so no quotes
- python "$mail" "$subject" $PUBLIC_EMAIL <message
-fi
-
-if $succeeded
-then
- pass
-else
- fail
-fi
-
diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg
index 6702de9b4a..3cec4ada1c 100755
--- a/scripts/messages/message_template.msg
+++ b/scripts/messages/message_template.msg
@@ -3594,6 +3594,10 @@ version 2.0
{ CofVersion S32 }
{ Flags U32 }
}
+ {
+ AppearanceHover Variable
+ { HoverHeight LLVector3 }
+ }
}
// AvatarSitResponse - response to a request to sit on an object
diff --git a/scripts/messages/message_template.msg.sha1 b/scripts/messages/message_template.msg.sha1
index 7a31177f11..e699efb03c 100755
--- a/scripts/messages/message_template.msg.sha1
+++ b/scripts/messages/message_template.msg.sha1
@@ -1 +1 @@
-4dbf88396c3188ad4c54c4f847a7d8817793668d \ No newline at end of file
+2286adc795b1b06eb86fdda431a71a6f0874b4f1 \ No newline at end of file
diff --git a/scripts/packages-formatter.py b/scripts/packages-formatter.py
new file mode 100755
index 0000000000..4e66cf9ed4
--- /dev/null
+++ b/scripts/packages-formatter.py
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+"""\
+This module formats the package version and copyright information for the
+viewer and its dependent packages.
+
+$LicenseInfo:firstyear=2014&license=viewerlgpl$
+Second Life Viewer Source Code
+Copyright (C) 2014, 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
+License as published by the Free Software Foundation;
+version 2.1 of the License only.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+$/LicenseInfo$
+"""
+import os
+import sys
+import errno
+import re
+import subprocess
+
+_autobuild=os.getenv('AUTOBUILD', 'autobuild')
+
+pkg_line=re.compile('^([\w-]+):\s+(.*)$')
+
+def autobuild(*args):
+ """
+ Launch autobuild with specified command-line arguments.
+ Return its stdout pipe from which the caller can read.
+ """
+ # subprocess wants a list, not a tuple
+ command = [_autobuild] + list(args)
+ try:
+ child = subprocess.Popen(command,
+ stdin=None, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ except OSError as err:
+ if err.errno != errno.ENOENT:
+ # Don't attempt to interpret anything but ENOENT
+ raise
+ # Here it's ENOENT: subprocess can't find the autobuild executable.
+ print >>sys.stderr, "packages-formatter on %s: can't run autobuild:\n%s\n%s" % \
+ (sys.platform, ' '.join(command), err)
+ sys.exit(1)
+
+ # no exceptions yet, let caller read stdout
+ return child.stdout
+
+version={}
+versions=autobuild('install', '--versions')
+for line in versions:
+ pkg_info = pkg_line.match(line)
+ if pkg_info:
+ pkg = pkg_info.group(1)
+ if pkg not in version:
+ version[pkg] = pkg_info.group(2).strip()
+ else:
+ sys.exit("Duplicate version for %s" % pkg)
+ else:
+ sys.exit("Unrecognized --versions output: %s" % line)
+
+copyright={}
+copyrights=autobuild('install', '--copyrights')
+viewer_copyright = copyrights.readline() # first line is the copyright for the viewer itself
+for line in copyrights:
+ pkg_info = pkg_line.match(line)
+ if pkg_info:
+ pkg = pkg_info.group(1)
+ if pkg not in copyright:
+ copyright[pkg] = pkg_info.group(2).strip()
+ else:
+ sys.exit("Duplicate copyright for %s" % pkg)
+ else:
+ sys.exit("Unrecognized --copyrights output: %s" % line)
+
+print viewer_copyright
+for pkg in sorted(version):
+ print ': '.join([pkg, version[pkg]])
+ if pkg in copyright:
+ print copyright[pkg]
+ else:
+ sys.exit("No copyright for %s" % pkg)