aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--linden/doc/contributions.txt30
-rw-r--r--linden/indra/SConstruct218
-rw-r--r--linden/indra/indra_complete/indra_complete.sln4
-rw-r--r--linden/indra/llcharacter/llmotioncontroller.cpp3
-rw-r--r--linden/indra/llcommon/llapr.h2
-rw-r--r--linden/indra/llcommon/llavatarconstants.h2
-rw-r--r--linden/indra/llcommon/llchat.h3
-rw-r--r--linden/indra/llcommon/lldefs.h33
-rw-r--r--linden/indra/llcommon/llfile.cpp1
-rw-r--r--linden/indra/llcommon/llmortician.cpp1
-rw-r--r--linden/indra/llcommon/llprocessor.cpp12
-rw-r--r--linden/indra/llcommon/llsd.cpp1
-rw-r--r--linden/indra/llcommon/llsdserialize_xml.cpp5
-rw-r--r--linden/indra/llcommon/llsdutil.cpp2
-rw-r--r--linden/indra/llcommon/llstreamtools.cpp2
-rw-r--r--linden/indra/llcommon/llstring.cpp20
-rw-r--r--linden/indra/llcommon/llstring.h3
-rw-r--r--linden/indra/llcommon/lluri.cpp78
-rw-r--r--linden/indra/llcommon/lluri.h15
-rw-r--r--linden/indra/llcommon/llversion.h4
-rw-r--r--linden/indra/llcommon/processor.h2
-rw-r--r--linden/indra/llcommon/string_table.h2
-rw-r--r--linden/indra/llcommon/timer.h2
-rw-r--r--linden/indra/llcommon/timing.cpp2
-rw-r--r--linden/indra/llimage/files.lst2
-rw-r--r--linden/indra/llimage/llimage.cpp3
-rw-r--r--linden/indra/llimage/llimage.h3
-rw-r--r--linden/indra/llimage/llimage.vcproj12
-rw-r--r--linden/indra/llimage/llimage_vc8.vcproj16
-rw-r--r--linden/indra/llimage/llimageworker.cpp2
-rw-r--r--linden/indra/llinventory/llparcel.cpp18
-rw-r--r--linden/indra/llinventory/llparcel.h1
-rw-r--r--linden/indra/llinventory/llpermissions.h2
-rw-r--r--linden/indra/llinventory/lluserrelations.cpp2
-rw-r--r--linden/indra/llinventory/lluserrelations.h4
-rw-r--r--linden/indra/llmath/camera.h2
-rw-r--r--linden/indra/llmath/coordframe.h2
-rw-r--r--linden/indra/llmath/llquaternion.cpp2
-rw-r--r--linden/indra/llmath/llrand.h4
-rw-r--r--linden/indra/llmath/llvolume.cpp193
-rw-r--r--linden/indra/llmath/llvolume.h6
-rw-r--r--linden/indra/llmath/v3color.cpp2
-rw-r--r--linden/indra/llmedia/llmediaengine.cpp1
-rw-r--r--linden/indra/llmessage/llassetstorage.cpp18
-rw-r--r--linden/indra/llmessage/llassetstorage.h19
-rw-r--r--linden/indra/llmessage/llblowfishcipher.cpp56
-rw-r--r--linden/indra/llmessage/llcachename.cpp196
-rw-r--r--linden/indra/llmessage/llcurl.cpp2
-rw-r--r--linden/indra/llmessage/llhttpassetstorage.cpp68
-rw-r--r--linden/indra/llmessage/llhttpassetstorage.h8
-rw-r--r--linden/indra/llmessage/llhttpnode.cpp2
-rw-r--r--linden/indra/llmessage/lliohttpserver.cpp2
-rw-r--r--linden/indra/llmessage/lliosocket.cpp2
-rw-r--r--linden/indra/llmessage/llmessagethrottle.cpp2
-rw-r--r--linden/indra/llmessage/llservicebuilder.cpp1
-rw-r--r--linden/indra/llmessage/lltemplatemessagereader.cpp2
-rw-r--r--linden/indra/llmessage/message.cpp16
-rw-r--r--linden/indra/llmessage/net.cpp12
-rw-r--r--linden/indra/llmessage/net.h2
-rw-r--r--linden/indra/llrender/llvertexbuffer.cpp50
-rw-r--r--linden/indra/llui/llalertdialog.h9
-rw-r--r--linden/indra/llui/llcombobox.cpp2
-rw-r--r--linden/indra/llui/llctrlselectioninterface.cpp1
-rw-r--r--linden/indra/llui/lleditmenuhandler.cpp2
-rw-r--r--linden/indra/llui/lllineeditor.cpp23
-rw-r--r--linden/indra/llui/llrootview.cpp1
-rw-r--r--linden/indra/llui/llscrollcontainer.cpp19
-rw-r--r--linden/indra/llui/llscrollcontainer.h12
-rw-r--r--linden/indra/llui/llscrolllistctrl.cpp15
-rw-r--r--linden/indra/llui/llscrolllistctrl.h2
-rw-r--r--linden/indra/llui/lltabcontainer.cpp81
-rw-r--r--linden/indra/llui/lltabcontainer.h6
-rw-r--r--linden/indra/llui/lltexteditor.cpp21
-rw-r--r--linden/indra/llui/llviewquery.cpp2
-rw-r--r--linden/indra/llvfs/llvfs.cpp71
-rw-r--r--linden/indra/llwindow/llwindow.cpp50
-rw-r--r--linden/indra/llwindow/llwindow.h13
-rw-r--r--linden/indra/llwindow/llwindowmacosx.cpp75
-rw-r--r--linden/indra/llwindow/llwindowmacosx.h8
-rw-r--r--linden/indra/llwindow/llwindowsdl.cpp7
-rw-r--r--linden/indra/llwindow/llwindowwin32.cpp172
-rw-r--r--linden/indra/llwindow/llwindowwin32.h11
-rw-r--r--linden/indra/llxml/llxmlnode.cpp3
-rw-r--r--linden/indra/llxml/llxmlparser.cpp2
-rw-r--r--linden/indra/lscript/lscript_compile/indra.l17
-rw-r--r--linden/indra/lscript/lscript_compile/indra.y44
-rw-r--r--linden/indra/lscript/lscript_execute/lscript_execute.cpp2
-rw-r--r--linden/indra/mac_updater/GenLinkedList.c2
-rw-r--r--linden/indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--linden/indra/newview/Info-SecondLife.plist2
-rw-r--r--linden/indra/newview/app_settings/colors_base.xml6
-rw-r--r--linden/indra/newview/files.lst1
-rw-r--r--linden/indra/newview/fmodwrapper.cpp2
-rw-r--r--linden/indra/newview/installers/windows/installer_template.nsi27
-rw-r--r--linden/indra/newview/licenses-linux.txt93
-rw-r--r--linden/indra/newview/licenses-mac.txt93
-rw-r--r--linden/indra/newview/licenses-win32.txt93
-rwxr-xr-xlinden/indra/newview/linux_tools/wrapper.sh2
-rw-r--r--linden/indra/newview/llagent.cpp7
-rw-r--r--linden/indra/newview/llagent.h2
-rw-r--r--linden/indra/newview/llassetuploadresponders.cpp2
-rw-r--r--linden/indra/newview/llcape.h2
-rw-r--r--linden/indra/newview/llchatbar.cpp2
-rw-r--r--linden/indra/newview/llcontroldef.cpp18
-rw-r--r--linden/indra/newview/lldebugmessagebox.cpp13
-rw-r--r--linden/indra/newview/lldrawable.cpp2
-rw-r--r--linden/indra/newview/lldrawable.h4
-rw-r--r--linden/indra/newview/lldrawpool.cpp17
-rw-r--r--linden/indra/newview/lldrawpoolavatar.cpp4
-rw-r--r--linden/indra/newview/lldrawpooltree.cpp2
-rw-r--r--linden/indra/newview/lldriverparam.h2
-rw-r--r--linden/indra/newview/lleventpoll.cpp6
-rw-r--r--linden/indra/newview/llface.cpp2
-rw-r--r--linden/indra/newview/llfilepicker.cpp8
-rw-r--r--linden/indra/newview/llfirstuse.cpp34
-rw-r--r--linden/indra/newview/llfirstuse.h7
-rw-r--r--linden/indra/newview/llflexibleobject.cpp18
-rw-r--r--linden/indra/newview/llflexibleobject.h2
-rw-r--r--linden/indra/newview/llfloateranimpreview.h2
-rw-r--r--linden/indra/newview/llfloaterchat.cpp26
-rw-r--r--linden/indra/newview/llfloatercustomize.cpp12
-rw-r--r--linden/indra/newview/llfloaterhtmlhelp.cpp61
-rw-r--r--linden/indra/newview/llfloaterimagepreview.cpp20
-rw-r--r--linden/indra/newview/llfloaterinspect.cpp2
-rw-r--r--linden/indra/newview/llfloaterinspect.h4
-rw-r--r--linden/indra/newview/llfloaterland.cpp7
-rw-r--r--linden/indra/newview/llfloaterpostcard.cpp148
-rw-r--r--linden/indra/newview/llfloaterpostcard.h8
-rw-r--r--linden/indra/newview/llfloaterreporter.cpp6
-rw-r--r--linden/indra/newview/llfloaterreporter.h2
-rw-r--r--linden/indra/newview/llfloatertools.cpp10
-rw-r--r--linden/indra/newview/llfolderview.cpp37
-rw-r--r--linden/indra/newview/llfolderview.h7
-rw-r--r--linden/indra/newview/llgenepool.cpp1
-rw-r--r--linden/indra/newview/llhudeffectlookat.cpp1
-rw-r--r--linden/indra/newview/llhudicon.cpp6
-rw-r--r--linden/indra/newview/llhudicon.h4
-rw-r--r--linden/indra/newview/llhudtext.cpp5
-rw-r--r--linden/indra/newview/llhudtext.h4
-rw-r--r--linden/indra/newview/llimpanel.cpp18
-rw-r--r--linden/indra/newview/llinventoryactions.cpp8
-rw-r--r--linden/indra/newview/llinventorybridge.cpp32
-rw-r--r--linden/indra/newview/llinventoryview.cpp113
-rw-r--r--linden/indra/newview/llinventoryview.h9
-rw-r--r--linden/indra/newview/lllogchat.cpp26
-rw-r--r--linden/indra/newview/lllogchat.h1
-rw-r--r--linden/indra/newview/llmanip.cpp2
-rw-r--r--linden/indra/newview/llmaniprotate.cpp2
-rw-r--r--linden/indra/newview/llmanipscale.cpp2
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp2
-rw-r--r--linden/indra/newview/llmapresponders.cpp2
-rw-r--r--linden/indra/newview/llmutelist.cpp4
-rw-r--r--linden/indra/newview/llnotify.cpp145
-rw-r--r--linden/indra/newview/llnotify.h12
-rw-r--r--linden/indra/newview/llpaneldirbrowser.cpp7
-rw-r--r--linden/indra/newview/llpaneldirclassified.cpp18
-rw-r--r--linden/indra/newview/llpanelgroupvoting.cpp2
-rw-r--r--linden/indra/newview/llpanelinventory.cpp57
-rw-r--r--linden/indra/newview/llpanelmsgs.cpp48
-rw-r--r--linden/indra/newview/llpanelmsgs.h4
-rw-r--r--linden/indra/newview/llpanelobject.cpp64
-rw-r--r--linden/indra/newview/llpolymesh.h4
-rw-r--r--linden/indra/newview/llprefschat.cpp3
-rw-r--r--linden/indra/newview/llprefsim.cpp31
-rw-r--r--linden/indra/newview/llselectmgr.cpp22
-rw-r--r--linden/indra/newview/llselectmgr.h2
-rw-r--r--linden/indra/newview/llspatialpartition.cpp2
-rw-r--r--linden/indra/newview/llsrv.cpp213
-rw-r--r--linden/indra/newview/llsrv.h66
-rw-r--r--linden/indra/newview/llstartup.cpp43
-rw-r--r--linden/indra/newview/lltexlayer.cpp2
-rw-r--r--linden/indra/newview/lltexlayer.h8
-rw-r--r--linden/indra/newview/lltexturecache.cpp4
-rw-r--r--linden/indra/newview/lltexturectrl.cpp21
-rw-r--r--linden/indra/newview/lltexturefetch.cpp2
-rw-r--r--linden/indra/newview/lltoolcomp.cpp12
-rw-r--r--linden/indra/newview/lltoolpie.cpp2
-rw-r--r--linden/indra/newview/lltoolpie.h2
-rw-r--r--linden/indra/newview/lltoolselect.cpp2
-rw-r--r--linden/indra/newview/llviewerassetstorage.cpp8
-rw-r--r--linden/indra/newview/llviewerassetstorage.h8
-rw-r--r--linden/indra/newview/llviewerimage.cpp2
-rw-r--r--linden/indra/newview/llviewerimage.h1
-rw-r--r--linden/indra/newview/llviewerimagelist.cpp16
-rw-r--r--linden/indra/newview/llviewerinventory.cpp2
-rw-r--r--linden/indra/newview/llviewerjointattachment.h4
-rw-r--r--linden/indra/newview/llviewerkeyboard.cpp12
-rw-r--r--linden/indra/newview/llviewermenu.cpp32
-rw-r--r--linden/indra/newview/llviewermenufile.cpp15
-rw-r--r--linden/indra/newview/llviewermessage.cpp199
-rw-r--r--linden/indra/newview/llviewerobject.cpp85
-rw-r--r--linden/indra/newview/llviewerpartsource.cpp4
-rw-r--r--linden/indra/newview/llviewerpartsource.h8
-rw-r--r--linden/indra/newview/llviewertexteditor.cpp3
-rw-r--r--linden/indra/newview/llviewerwindow.cpp18
-rw-r--r--linden/indra/newview/llvoavatar.cpp23
-rw-r--r--linden/indra/newview/llvoavatar.h3
-rw-r--r--linden/indra/newview/llvoinventorylistener.cpp4
-rw-r--r--linden/indra/newview/llvoinventorylistener.h2
-rw-r--r--linden/indra/newview/llvopartgroup.cpp2
-rw-r--r--linden/indra/newview/llvopartgroup.h5
-rw-r--r--linden/indra/newview/llvosurfacepatch.h5
-rw-r--r--linden/indra/newview/llvotree.h5
-rw-r--r--linden/indra/newview/llvovolume.cpp14
-rw-r--r--linden/indra/newview/llvovolume.h3
-rw-r--r--linden/indra/newview/llvowater.h3
-rw-r--r--linden/indra/newview/llwebbrowserctrl.h4
-rw-r--r--linden/indra/newview/llworld.cpp8
-rw-r--r--linden/indra/newview/llxmlrpctransaction.cpp16
-rw-r--r--linden/indra/newview/macview.xcodeproj/project.pbxproj392
-rw-r--r--linden/indra/newview/newview.vcproj22
-rw-r--r--linden/indra/newview/newview_vc8.vcproj16
-rw-r--r--linden/indra/newview/pipeline.cpp6
-rw-r--r--linden/indra/newview/releasenotes.txt68
-rw-r--r--linden/indra/newview/res/newViewRes.rc8
-rw-r--r--linden/indra/newview/skins/textures/textures.xml1
-rw-r--r--linden/indra/newview/skins/xui/en-us/alerts.xml69
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_about_land.xml70
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_directory.xml7
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_image_preview.xml6
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_inventory.xml17
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_postcard.xml12
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_texture_ctrl.xml1
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_tools.xml7
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_viewer.xml7
-rw-r--r--linden/indra/newview/skins/xui/en-us/notify.xml51
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml13
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_im.xml59
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml14
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_debug.xml4
-rw-r--r--linden/indra/newview/viewer.cpp93
-rw-r--r--linden/indra/newview/viewer.h4
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py4
-rw-r--r--linden/indra/test/llhttpnode_tut.cpp2
-rw-r--r--linden/indra/test/llmessageconfig_tut.cpp4
-rw-r--r--linden/indra/test/llsdserialize_tut.cpp8
-rw-r--r--linden/indra/test/test.vcproj2
-rw-r--r--linden/libraries/include/llmozlib.h556
238 files changed, 4225 insertions, 1536 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index 72e79f3..cd9745b 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -4,30 +4,40 @@ along with the issue identifier corresponding to the patches we've
4received from them. To see more about these contributions, visit 4received from them. To see more about these contributions, visit
5http://jira.secondlife.com/ and enter the issue identifier. 5http://jira.secondlife.com/ and enter the issue identifier.
6 6
7Alissa Sabre - VWR-81, VWR-83, VWR-414, VWR-415 7Able Whitman - VWR-650
8Alissa Sabre - VWR-81, VWR-83, VWR-171, VWR-251, VWR-414, VWR-415, VWR-459, VWR-606, VWR-652
9Argent Stonecutter - VWR-68
10Benja Kepler - VWR-746
8Blakar Ogre - VWR-881 11Blakar Ogre - VWR-881
9blino Nakamura - VWR-17 12blino Nakamura - VWR-17
10bushing Spatula - VWR-424 13bushing Spatula - VWR-424, VWR-119
11Drewan Keats - VWR-28, VWR-412 14Dale Glass - VWR-120, VWR-560
15Drewan Keats - VWR-28, VWR-248, VWR-412
16Duckless Vandyke - VWR-383
12Dylan Haskell - VWR-72 17Dylan Haskell - VWR-72
13Dzonatas Sol - VWR-198, VWR-878 18Dzonatas Sol - VWR-198, VWR-878
14Eddy Stryker - VWR-15, VWR-23 19Eddy Stryker - VWR-15, VWR-23
15Gigs Taggart - VWR-71, VWR-326 20Gigs Taggart - VWR-71, VWR-326, VWR-1217
16Ginko Bayliss - VWR-4 21Ginko Bayliss - VWR-4
17Hikkoshi Sakai - VWR-429 22Hikkoshi Sakai - VWR-429
18Hiro Sommambulist - VWR-66, VWR-97, VWR-100, VWR-105, VWR-108, VWR-118, VWR-136 23Hiro Sommambulist - VWR-66, VWR-97, VWR-100, VWR-105, VWR-108, VWR-118, VWR-132, VWR-136, VWR-143
19Jacek Antonelli - VWR-165, VWR-188 24Jacek Antonelli - VWR-165, VWR-188, VWR-427, VWR-597
20Joghert LeSabre - VWR-64 25Joghert LeSabre - VWR-64
21Kage Pixel - VWR-11 26Kage Pixel - VWR-11
22Kunnis Basiat - VWR-82 27Kunnis Basiat - VWR-82
23Nicholaz Beresford - VWR-793, VWR-794, VWR-802, VWR-803, VWR-804, VWR-805, VWR-808, VWR-809, VWR-810, VWR-823, VWR-869, VWR-870, VWR-871, VWR-908, VWR-966 28Nicholaz Beresford - VWR-132, VWR-176, VWR-793, VWR-794, VWR-802, VWR-803, VWR-804, VWR-805, VWR-808, VWR-809, VWR-810, VWR-823, VWR-869, VWR-870, VWR-871, VWR-873, VWR-908, VWR-966
24Paul Churchill - VWR-20 29Paul Churchill - VWR-20
25Paula Innis - VWR-30 30Paula Innis - VWR-30, VWR-1049
26Peekay Semyorka - VWR-7, VWR-19, VWR-49 31Peekay Semyorka - VWR-7, VWR-19, VWR-49, VWR-79
32Ryozu Kojima - VWR-287
27SignpostMarv Martin - VWR-154, VWR-155 33SignpostMarv Martin - VWR-154, VWR-155
28Simon Nolan - VWR-409 34Simon Nolan - VWR-409
29SpacedOut Frye - VWR-57, VWR-94, VWR-121, VWR-123 35SpacedOut Frye - VWR-57, VWR-94, VWR-121, VWR-123
36Stevex Janus - VWR-1182
37Still Defiant - VWR-207, VWR-446
30Strife Onizuka - SVC-9, VWR-74, VWR-85, VWR-148 38Strife Onizuka - SVC-9, VWR-74, VWR-85, VWR-148
31Zi Ree - VWR-671, VWR-682 39tenebrous pau - VWR-247
40TBBle Kurosawa - VWR-938, VWR-941, VWR-944
41Zi Ree - VWR-671, VWR-682, VWR-1140
32Zipherius Turas - VWR-76, VWR-77 42Zipherius Turas - VWR-76, VWR-77
33 43
diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct
index 39b50bc..68c8fc7 100644
--- a/linden/indra/SConstruct
+++ b/linden/indra/SConstruct
@@ -1,12 +1,21 @@
1################################################# -*- python -*- 1################################################# -*- python -*-
2# 2#
3# SConstruct makefile for Second Life viewer 3# SConstruct makefile for Second Life viewer and servers.
4# and servers.
5# 4#
6# To build everything: 5# To build everything:
7# 6#
8# scons ARCH=all BTARGET=all DISTCC=yes 7# scons ARCH=all BTARGET=all DISTCC=yes
9# 8#
9# To build a standalone viewer, you'll need the following packages
10# installed, with headers. We pick up the correct flags to use for
11# these libraries using the "pkg-config" command.
12#
13# cairo glib-2.0 gtk+-2.0 sdl vorbis vorbisenc vorbisfile
14#
15# Then build as follows:
16#
17# scons BTARGET=client STANDALONE=yes MOZLIB=no ELFIO=no DISTCC=no
18#
10# For help on options: 19# For help on options:
11# 20#
12# scons -h 21# scons -h
@@ -73,6 +82,8 @@ try:
73except: 82except:
74 debian_sarge = False 83 debian_sarge = False
75 84
85fedora = os.path.exists('/etc/fedora-release')
86
76######################### 87#########################
77# COMMAND LINE OPTIONS # 88# COMMAND LINE OPTIONS #
78######################### 89#########################
@@ -91,6 +102,8 @@ opts.AddOptions(
91 BoolOption('COLORGCC', 'Enabled colorgcc', True), 102 BoolOption('COLORGCC', 'Enabled colorgcc', True),
92 EnumOption('GRID', 'Client package\'s default grid', 'default', 103 EnumOption('GRID', 'Client package\'s default grid', 'default',
93 allowed_values=('default', 'aditi', 'agni', 'dmz', 'durga', 'firstlook', 'ganga', 'shakti', 'siva', 'soma', 'uma', 'vaak')), 104 allowed_values=('default', 'aditi', 'agni', 'dmz', 'durga', 'firstlook', 'ganga', 'shakti', 'siva', 'soma', 'uma', 'vaak')),
105 BoolOption('ELFIO', 'Enabled enhanced backtraces with libELFIO symbol extraction support', True),
106 BoolOption('STANDALONE', 'Build using system packages (implies OPENSOURCE)', False),
94 BoolOption('OPENSOURCE', 'Build using only non-proprietary dependencies', True) # OPENSOURCE: do not edit this line 107 BoolOption('OPENSOURCE', 'Build using only non-proprietary dependencies', True) # OPENSOURCE: do not edit this line
95) 108)
96optenv = Environment(options = opts) 109optenv = Environment(options = opts)
@@ -101,16 +114,39 @@ arch = optenv['ARCH']
101target_param = optenv['BTARGET'] 114target_param = optenv['BTARGET']
102enable_distcc = optenv['DISTCC'] 115enable_distcc = optenv['DISTCC']
103enable_mozlib = optenv['MOZLIB'] 116enable_mozlib = optenv['MOZLIB']
104enable_fmod = optenv['FMOD']
105enable_colorgcc = optenv['COLORGCC'] 117enable_colorgcc = optenv['COLORGCC']
106grid = optenv['GRID'] 118grid = optenv['GRID']
107opensource = optenv['OPENSOURCE'] 119standalone = optenv['STANDALONE']
120opensource = standalone or optenv['OPENSOURCE']
121enable_fmod = not opensource and optenv['FMOD']
122elfio = optenv['ELFIO']
108 123
109targets = [ target_param ] 124targets = [ target_param ]
110 125
111if target_param == 'all': 126if target_param == 'all':
112 targets = [ 'client', 'server' ] 127 targets = [ 'client', 'server' ]
113 128
129# Set this to False if you don't want your source files copied into
130# the object directory in /tmp.
131duplicate = True
132
133if standalone and platform != 'linux':
134 print >> sys.stderr, 'Warning: standalone builds have only been tested on Linux'
135
136standalone_pkgs = 'cairo glib-2.0 gtk+-2.0 sdl vorbis vorbisenc vorbisfile'
137
138def pkgconfig(opt, pkgs=None):
139 return os.popen('pkg-config %s %s' %
140 (opt, pkgs or standalone_pkgs)).read().strip()
141
142if standalone:
143 missing = [pkg for pkg in standalone_pkgs.split()
144 if os.system('pkg-config --exists ' + pkg)]
145 if missing:
146 print >> sys.stderr, ('Error: pkg-config cannot find these '
147 'packages: %s' % ' '.join(missing))
148 sys.exit(2)
149
114##################### 150#####################
115# ITERATE TARGETS # 151# ITERATE TARGETS #
116##################### 152#####################
@@ -125,6 +161,7 @@ for build_target in targets:
125 print 'Building ' + build_target + ' ' + version + ' on ' + system_str + ' (' + buildtype + ')' 161 print 'Building ' + build_target + ' ' + version + ' on ' + system_str + ' (' + buildtype + ')'
126 162
127 system_lib_dir = '../libraries/' + system_str 163 system_lib_dir = '../libraries/' + system_str
164
128 if build_target == 'client': 165 if build_target == 'client':
129 system_lib_dir += '/lib_release_client' 166 system_lib_dir += '/lib_release_client'
130 elif buildtype == 'debug': 167 elif buildtype == 'debug':
@@ -153,7 +190,7 @@ for build_target in targets:
153 """ + 190 """ +
154 '../libraries/' + system_str + '/include' ) 191 '../libraries/' + system_str + '/include' )
155 192
156 client_external_libs = [] 193 client_external_libs = ['resolv']
157 system_link_flags = '' 194 system_link_flags = ''
158 195
159 if platform != 'linux' and build_target == 'client' and enable_mozlib: 196 if platform != 'linux' and build_target == 'client' and enable_mozlib:
@@ -184,74 +221,94 @@ for build_target in targets:
184 ############## 221 ##############
185 222
186 # Generic GCC flags 223 # Generic GCC flags
187 flags = '-g -pipe -Wall -Wno-trigraphs ' 224 cflags = '-g -pipe -Wall -Wno-trigraphs -Wno-sign-compare -Werror '
188 225 cxxflags = ''
189 if opensource: 226 cppflags = ''
190 flags += '-DLL_USE_KDU=0 '
191 else:
192 flags += '-DLL_USE_KDU=1 '
193 227
194 if build_target == 'server': 228 if build_target == 'server':
195 # Server flags 229 # Server flags
196 flags += '-D_GNU_SOURCE -ftemplate-depth-60 -DLL_MESA_HEADLESS=1 -DLL_MESA=1 ' 230 cppflags += '-D_GNU_SOURCE -DLL_MESA_HEADLESS=1 -DLL_MESA=1 '
231 cxxflags += '-ftemplate-depth-60 '
197 if arch == 'i686': 232 if arch == 'i686':
198 flags += '-march=pentiumpro ' 233 cflags += '-march=pentiumpro '
199 if debian_sarge: 234 if debian_sarge:
200 def_server_cppflags = '' 235 def_server_cppflags = ''
201 else: 236 else:
202 def_server_cppflags = '-DCTYPE_WORKAROUND' 237 def_server_cppflags = '-DCTYPE_WORKAROUND'
203 server_cppflags = os.environ.get('SERVER_CPPFLAGS', 238 server_cppflags = os.environ.get('SERVER_CPPFLAGS',
204 def_server_cppflags) 239 def_server_cppflags)
205 flags += server_cppflags + ' ' 240 cppflags += server_cppflags + ' '
206 else: 241 else:
207 # Viewer flags 242 # Viewer flags
208 flags += '-falign-loops=16 -fno-math-errno -fexceptions -fsigned-char -fno-strict-aliasing -ffast-math ' 243 cflags += '-falign-loops=16 -fno-math-errno -fexceptions -fsigned-char -fno-strict-aliasing -ffast-math '
209 flags += '-DLL_MESA_HEADLESS=0 -DLL_MESA=0 ' 244 cppflags += '-DLL_MESA_HEADLESS=0 -DLL_MESA=0 '
210 try: 245 try:
211 client_cppflags = os.environ['CLIENT_CPPFLAGS'] 246 client_cppflags = os.environ['CLIENT_CPPFLAGS']
212 except: 247 except:
213 client_cppflags = '' 248 client_cppflags = ''
214 flags += client_cppflags + ' ' 249 cppflags += client_cppflags + ' '
215 250
216 if platform == 'linux': 251 if platform == 'linux':
217 # Linux-only flags 252 # Linux-only flags
218 flags += '-DLL_LINUX=1 ' 253 cppflags += '-DLL_LINUX=1 '
219 if build_target == 'client': 254 if build_target == 'client':
220 flags += '-DAPPID=secondlife -DLL_SDL=1 ' 255 cppflags += '-DAPPID=secondlife -DLL_SDL=1 '
221 if arch == 'x86_64' or arch == 'x86_64cross' or not enable_fmod: 256 if arch == 'x86_64' or arch == 'x86_64cross' or not enable_fmod:
222 flags += '-DLL_FMOD=0 ' 257 cppflags += '-DLL_FMOD=0 '
223 flags += '-DLL_X11=1 -DLL_GTK=1 ' 258 cppflags += '-DLL_X11=1 -DLL_GTK=1 '
224 client_external_libs += [ 'gtk-x11-2.0', 'elfio' ] 259 if standalone:
225 include_dirs += [ '../libraries/' + system_str + '/include/gtk-2.0' ] 260 include_dirs += [d[2:] for d in
226 include_dirs += [ '../libraries/' + system_str + '/include/glib-2.0'] 261 pkgconfig('--cflags-only-I').split()]
227 include_dirs += [ '../libraries/' + system_str + '/include/pango-1.0' ] 262 else:
228 include_dirs += [ '../libraries/' + system_str + '/include/atk-1.0' ] 263 client_external_libs += [ 'gtk-x11-2.0' ]
229 include_dirs += [ '../libraries/' + system_str + '/include/ELFIO' ] 264 incdirs = [ 'ELFIO', 'atk-1.0', 'glib-2.0', 'gtk-2.0',
230 include_dirs += [ '../libraries/' + system_str + '/include/llfreetype2' ] 265 'llfreetype2', 'pango-1.0' ]
266 include_dirs += ['../libraries/' + system_str + '/include/' + d
267 for d in incdirs]
268
269 if elfio:
270 client_external_libs += [ 'elfio' ]
271 else:
272 cppflags += '-DLL_ELFBIN=0 '
231 273
232 # llmozlib stuff 274 # llmozlib stuff
233 if enable_mozlib: 275 if enable_mozlib:
234 flags += '-DLL_LIBXUL_ENABLED=1 ' 276 cppflags += '-DLL_LIBXUL_ENABLED=1 '
235 client_external_libs += [ 'llmozlib' ] 277 client_external_libs += [ 'llmozlib' ]
236 client_external_libs += [ 'mozjs', 'nspr4', 'plc4', 'plds4', 'profdirserviceprovider_s', 'xpcom', 'xul' ] 278 client_external_libs += [ 'mozjs', 'nspr4', 'plc4', 'plds4', 'profdirserviceprovider_s', 'xpcom', 'xul' ]
237 else: 279 else:
238 flags += '-DLL_LIBXUL_ENABLED=0 ' 280 cppflags += '-DLL_LIBXUL_ENABLED=0 '
239 else: 281 else:
240 # Mac-only flags 282 # Mac-only flags
241 flags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -DLL_DARWIN=1 -Wmost -Wno-sign-compare -Wno-switch -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -ffor-scope -Wno-reorder -isysroot /Developer/SDKs/MacOSX10.3.9.sdk ' 283 cflags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -Wmost -Wno-sign-compare -Wno-switch -fconstant-cfstrings -ffor-scope -Wno-reorder '
284 cppflags += '-x c++ -DLL_DARWIN=1 -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -isysroot /Developer/SDKs/MacOSX10.3.9.sdk '
285
286 cxxflags += cflags
242 287
243 ### Build type-specific flags ### 288 ### Build type-specific flags ###
244 289
245 debug_opts = flags + '-fno-inline -O0 -D_DEBUG -DLL_DEBUG=1 ' 290 debug_cflags = cflags + '-fno-inline -O0 '
246 release_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 ' 291 debug_cppflags = cppflags + '-D_DEBUG -DLL_DEBUG=1 '
247 releasenoopt_opts = flags + '-O0 -DNDEBUG -DLL_RELEASE=1 ' 292 debug_cxxflags = cxxflags
248 releasefordownload_opts = flags + '-O2 -DNDEBUG -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 ' 293 release_cflags = cflags + '-O2 '
294 release_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 '
295 release_cxxflags = cxxflags
296 releasenoopt_cflags = cflags + '-O0 '
297 releasenoopt_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 '
298 releasenoopt_cxxflags = cxxflags
299 releasefordownload_cflags = cflags + '-O2 '
300 releasefordownload_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 '
301 releasefordownload_cxxflags = cxxflags
249 302
250 ################ 303 ################
251 # ENVIRONMENT # 304 # ENVIRONMENT #
252 ################ 305 ################
253 306
254 gcc_bin = 'g++-3.4' 307 if standalone:
308 gcc_bin = 'g++'
309 else:
310 gcc_bin = 'g++-3.4'
311
255 # If you strip more aggressively than -S then the quality of crash- 312 # If you strip more aggressively than -S then the quality of crash-
256 # logger backtraces deteriorates. 313 # logger backtraces deteriorates.
257 strip_cmd = 'strip -S -o $TARGET $SOURCE' 314 strip_cmd = 'strip -S -o $TARGET $SOURCE'
@@ -285,6 +342,10 @@ for build_target in targets:
285 if os.path.isdir(mysql_lib_dir): 342 if os.path.isdir(mysql_lib_dir):
286 lib_path.append(mysql_lib_dir) 343 lib_path.append(mysql_lib_dir)
287 344
345 if standalone:
346 system_link_flags += pkgconfig('--libs-only-L') + ' '
347 system_link_flags += pkgconfig('--libs-only-other') + ' '
348
288 base_env = Environment(CXX = compiler, 349 base_env = Environment(CXX = compiler,
289 CPPPATH = include_dirs, 350 CPPPATH = include_dirs,
290 LIBPATH = lib_path, 351 LIBPATH = lib_path,
@@ -292,16 +353,24 @@ for build_target in targets:
292 353
293 ### Environments for various build types ### 354 ### Environments for various build types ###
294 355
295 env = base_env.Copy(CPPFLAGS = releasefordownload_opts) 356 env = base_env.Copy(CFLAGS=releasefordownload_cflags,
357 CPPFLAGS=releasefordownload_cppflags,
358 CXXFLAGS=releasefordownload_cxxflags)
296 359
297 if buildtype == 'debug': 360 if buildtype == 'debug':
298 env = base_env.Copy(CPPFLAGS = debug_opts) 361 env = base_env.Copy(CFLAGS=debug_cflags,
362 CPPFLAGS=debug_cppflags,
363 CXXFLAGS=debug_cxxflags)
299 364
300 if buildtype == 'release': 365 if buildtype == 'release':
301 env = base_env.Copy(CPPFLAGS = release_opts) 366 env = base_env.Copy(CFLAGS=release_cflags,
367 CPPFLAGS=release_cppflags,
368 CXXFLAGS=release_cxxflags)
302 369
303 if buildtype == 'releasenoopt': 370 if buildtype == 'releasenoopt':
304 env = base_env.Copy(CPPFLAGS = releasenoopt_opts) 371 env = base_env.Copy(CFLAGS=releasenoopt_cflags,
372 CPPFLAGS=releasenoopt_cppflags,
373 CXXFLAGS=releasenoopt_cxxflags)
305 374
306 # ccache needs this to be set 375 # ccache needs this to be set
307 try: 376 try:
@@ -381,7 +450,7 @@ for build_target in targets:
381 source_files = 'files.lst', 450 source_files = 'files.lst',
382 extra_depends=None): 451 extra_depends=None):
383 files_list = load_files(input_dir, source_files) 452 files_list = load_files(input_dir, source_files)
384 BuildDir(build_dir + '/' + input_dir, input_dir) 453 BuildDir(build_dir + '/' + input_dir, input_dir, duplicate=duplicate)
385 local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags) 454 local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags)
386 if extra_depends: 455 if extra_depends:
387 for x in files_list: 456 for x in files_list:
@@ -395,20 +464,26 @@ for build_target in targets:
395 def create_dynamic_module( 464 def create_dynamic_module(
396 module, 465 module,
397 local_flags="", 466 local_flags="",
398 module_libs = None, 467 module_libs = [],
399 source_files = 'files.lst'): 468 source_files = 'files.lst'):
400 files_list = load_files(module, source_files) 469 files_list = load_files(module, source_files)
401 BuildDir(build_dir + '/' + module, module) 470 BuildDir(build_dir + '/' + module, module, duplicate=duplicate)
402 local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags) 471 local_env = env.Copy(CPPFLAGS = env['CPPFLAGS'] + ' ' + local_flags)
403 tgt = local_env.SharedLibrary(lib_dir + '/' + module, files_list, LIBS = module_libs) 472 tgt = local_env.SharedLibrary(lib_dir + '/' + module, files_list, LIBS = module_libs)
404 Default(tgt) 473 Default(tgt)
405 474
475 def create_cond_module(module, module_libs=[]):
476 if build_target != 'client' or not opensource:
477 create_static_module(module=module)
478 else:
479 create_dynamic_module(module=module, module_libs=module_libs)
480
406 ### Create an executable from the module ### 481 ### Create an executable from the module ###
407 482
408 def create_executable( 483 def create_executable(
409 exec_file, module, module_libs, source_files = 'files.lst'): 484 exec_file, module, module_libs, source_files = 'files.lst'):
410 files_list = load_files(module, source_files) 485 files_list = load_files(module, source_files)
411 BuildDir(build_dir + '/' + module, module) 486 BuildDir(build_dir + '/' + module, module, duplicate=duplicate)
412 tgt = env.Program(exec_file, files_list, LIBS = module_libs) 487 tgt = env.Program(exec_file, files_list, LIBS = module_libs)
413 Default(tgt) 488 Default(tgt)
414 489
@@ -417,11 +492,12 @@ for build_target in targets:
417 # BUILD LIBRARIES # 492 # BUILD LIBRARIES #
418 #################### 493 ####################
419 494
420 create_static_module('llcommon') 495 create_cond_module('llcommon')
421 create_static_module('llmath') 496 create_cond_module('llmath')
497 create_cond_module('llvfs')
498 create_cond_module('llimagej2coj', module_libs=['openjpeg'])
499 create_cond_module('llimage', module_libs=['llimagej2coj', 'jpeg', 'png12'])
422 create_static_module('llmessage') 500 create_static_module('llmessage')
423 create_static_module('llvfs')
424 create_static_module('llimage')
425 create_static_module('llinventory') 501 create_static_module('llinventory')
426 create_static_module('llcharacter') 502 create_static_module('llcharacter')
427 create_static_module('llprimitive') 503 create_static_module('llprimitive')
@@ -431,7 +507,11 @@ for build_target in targets:
431 create_static_module('lscript', extra_depends=build_dir + '/lscript/lscript_compile/indra.y.h') 507 create_static_module('lscript', extra_depends=build_dir + '/lscript/lscript_compile/indra.y.h')
432 508
433 net_external_libs = [ 'curl', 'cares', 'ssl', 'crypto', 'expat', 'aprutil-1', 'apr-1' ] 509 net_external_libs = [ 'curl', 'cares', 'ssl', 'crypto', 'expat', 'aprutil-1', 'apr-1' ]
434 common_external_libs = net_external_libs + [ 'xmlrpc', 'z' ] 510 common_external_libs = net_external_libs + [ 'z' ]
511 if standalone and fedora:
512 common_external_libs += [ 'xmlrpc-epi' ]
513 else:
514 common_external_libs += [ 'xmlrpc' ]
435 515
436 if build_target == 'client': 516 if build_target == 'client':
437 if platform == 'linux': 517 if platform == 'linux':
@@ -439,16 +519,22 @@ for build_target in targets:
439 # BUILD LINUX_CRASH_LOGGER # 519 # BUILD LINUX_CRASH_LOGGER #
440 ############################# 520 #############################
441 output_crashlogger_bin = 'linux_crash_logger/linux-crash-logger-' + arch + '-bin' 521 output_crashlogger_bin = 'linux_crash_logger/linux-crash-logger-' + arch + '-bin'
442 external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ] 522 if standalone:
523 external_libs = net_external_libs + [ 'db' ]
524 external_libs += [d[2:] for d in
525 pkgconfig('--libs-only-l', 'gtk+-2.0').split()]
526 else:
527 external_libs = net_external_libs + [ 'db-4.2', 'gtk-x11-2.0' ]
443 external_libs.remove('cares') 528 external_libs.remove('cares')
444 internal_libs = [ 'llvfs', 'llmath', 'llcommon' ] 529 internal_libs = [ 'llvfs', 'llmath', 'llcommon' ]
445 create_executable(output_crashlogger_bin + '-globalsyms', 'linux_crash_logger', internal_libs + external_libs) 530 create_executable(output_crashlogger_bin + '-globalsyms',
531 'linux_crash_logger',
532 internal_libs + external_libs)
446 env.Command(output_crashlogger_bin, output_crashlogger_bin + '-globalsyms', hidesyms_cmd) 533 env.Command(output_crashlogger_bin, output_crashlogger_bin + '-globalsyms', hidesyms_cmd)
447 534
448 create_static_module('llaudio') 535 create_static_module('llaudio')
449 create_static_module('llmedia') 536 create_static_module('llmedia')
450 create_static_module('llui') 537 create_static_module('llui')
451 create_static_module('llimagej2coj')
452 538
453 if not opensource: 539 if not opensource:
454 create_dynamic_module('llkdu', '', ['llimage', 'llvfs', 'llmath', 'llcommon', 'apr-1', 'kdu_v42R']) 540 create_dynamic_module('llkdu', '', ['llimage', 'llvfs', 'llmath', 'llcommon', 'apr-1', 'kdu_v42R'])
@@ -458,7 +544,17 @@ for build_target in targets:
458 ################## 544 ##################
459 output_bin = 'newview/secondlife-' + arch + '-bin' 545 output_bin = 'newview/secondlife-' + arch + '-bin'
460 546
461 external_libs = client_external_libs + common_external_libs + [ 'freetype', 'jpeg', 'SDL', 'GL', 'GLU', 'ogg', 'vorbisenc', 'vorbisfile', 'vorbis', 'db-4.2', 'openjpeg' ] 547 external_libs = client_external_libs + common_external_libs
548
549 if standalone:
550 external_libs += [ 'db' ]
551 external_libs += [ d[2:] for d in
552 pkgconfig('--libs-only-l').split() ]
553 else:
554 external_libs += [ 'freetype', 'SDL', 'ogg', 'vorbisenc',
555 'vorbisfile', 'vorbis', 'db-4.2' ]
556
557 external_libs += [ 'jpeg', 'openjpeg', 'png12', 'GL', 'GLU' ]
462 558
463 if arch != 'x86_64' and arch != 'x86_64cross': 559 if arch != 'x86_64' and arch != 'x86_64cross':
464 if enable_fmod: 560 if enable_fmod:
@@ -540,7 +636,7 @@ for build_target in targets:
540 # Dataserver 636 # Dataserver
541 Depends('dataserver/dataserver', 'launcher/launcher' + file_suffix) 637 Depends('dataserver/dataserver', 'launcher/launcher' + file_suffix)
542 external_libs = common_external_libs + ['boost_regex-gcc-mt', 'mysqlclient', 'tcmalloc', 'stacktrace'] 638 external_libs = common_external_libs + ['boost_regex-gcc-mt', 'mysqlclient', 'tcmalloc', 'stacktrace']
543 internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llinventory', 639 internal_libs = [ 'llcharacter', 'lldatabase', 'llimage', 'llimagej2coj', 'llinventory',
544 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ] 640 'llscene', 'llmessage', 'llvfs', 'llxml', 'llcommon', 'llmath' ]
545 create_executable('dataserver/dataserver' + file_suffix, 'dataserver', 641 create_executable('dataserver/dataserver' + file_suffix, 'dataserver',
546 internal_libs + external_libs) 642 internal_libs + external_libs)
@@ -563,8 +659,7 @@ for build_target in targets:
563 659
564 # Rpcserver 660 # Rpcserver
565 Depends('rpcserver/rpcserver', 'userserver/userserver' + file_suffix) 661 Depends('rpcserver/rpcserver', 'userserver/userserver' + file_suffix)
566 external_libs = common_external_libs + ['xmlrpc', 662 external_libs = common_external_libs + ['xmlrpc', 'mysqlclient']
567 'mysqlclient']
568 internal_libs = ['llscene', 'llmessage', 'lldatabase', 'llvfs', 663 internal_libs = ['llscene', 'llmessage', 'lldatabase', 'llvfs',
569 'llmath', 'llcommon'] 664 'llmath', 'llcommon']
570 create_executable('rpcserver/rpcserver' + file_suffix, 'rpcserver', 665 create_executable('rpcserver/rpcserver' + file_suffix, 'rpcserver',
@@ -573,27 +668,28 @@ for build_target in targets:
573 # Mapserver 668 # Mapserver
574 Depends('mapserver/mapserver', 'rpcserver/rpcserver' + file_suffix) 669 Depends('mapserver/mapserver', 'rpcserver/rpcserver' + file_suffix)
575 external_libs = common_external_libs + ['OSMesa16', 'kdu', 670 external_libs = common_external_libs + ['OSMesa16', 'kdu',
576 'boost_regex-gcc-mt', 'iconv', 'jpeg', 'GL', 671 'boost_regex-gcc-mt', 'iconv', 'jpeg', 'openjpeg', 'GL',
577 'mysqlclient', 'pthread', 'dl'] 672 'mysqlclient', 'pthread', 'dl']
578 internal_libs = ['llrender', 'llwindow', 'llimage', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic', 673 internal_libs = ['llrender', 'llwindow', 'llimage', 'llimagej2coj', 'lldatabase', 'llprimitive', 'llmessage', 'llkdustatic',
579 'llxml', 'llvfs', 'llmath', 'llcommon'] 674 'llxml', 'llvfs', 'llmath', 'llcommon']
580 create_executable('mapserver/mapserver' + file_suffix, 'mapserver', 675 create_executable('mapserver/mapserver' + file_suffix, 'mapserver',
581 internal_libs + external_libs) 676 internal_libs + external_libs)
582 677
583 # Simulator 678 # Simulator
584 Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix) 679 Depends('newsim/simulator' + file_suffix, 'mapserver/mapserver' + file_suffix)
585 external_libs = common_external_libs + ['hkdynamics', 'hkgeometry', 'hkmath', 'hkbase', 'hkcollide', 'hkactions', 'boost_regex-gcc-mt', 'dl', 'kdu', 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace'] 680 external_libs = common_external_libs + ['hkdynamics', 'hkgeometry', 'hkmath', 'hkbase', 'hkcollide', 'hkactions', 'boost_regex-gcc-mt', 'openjpeg', 'dl', 'kdu', 'mysqlclient', 'iconv', 'tcmalloc', 'stacktrace']
586 internal_libs = [ 'lscript', 'llprimitive', 681 internal_libs = [ 'lscript', 'llprimitive',
587 'llscene', 'llhavok', 'llinventory', 'llimage', 682 'llscene', 'llhavok', 'llinventory', 'llimage', 'llimagej2coj',
588 'llcharacter', 'llxml', 'lldatabase', 'llkdustatic', 683 'llcharacter', 'llxml', 'lldatabase', 'llkdustatic',
589 'llmessage', 'llvfs', 'llmath', 'llcommon' ] 684 'llmessage', 'llvfs', 'llmath', 'llcommon' ]
590 create_executable('newsim/simulator' + file_suffix, 'newsim', 685 create_executable('newsim/simulator' + file_suffix, 'newsim',
591 internal_libs + external_libs) 686 internal_libs + external_libs)
592 687
593 # texture upload verifier 688 # texture upload verifier
594 external_libs = common_external_libs + [ 'kdu', 'dl' ] 689 external_libs = common_external_libs + [ 'kdu', 'openjpeg', 'dl' ]
595 internal_libs = [ 690 internal_libs = [
596 'llimage', 691 'llimage',
692 'llimagej2coj',
597 'llkdustatic', 693 'llkdustatic',
598 'llinventory', 694 'llinventory',
599 'llmessage', 695 'llmessage',
diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln
index 80bb436..a56a889 100644
--- a/linden/indra/indra_complete/indra_complete.sln
+++ b/linden/indra/indra_complete/indra_complete.sln
@@ -257,10 +257,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "llimagej2coj", "..\llimagej
257EndProject 257EndProject
258Global 258Global
259 GlobalSection(SolutionConfiguration) = preSolution 259 GlobalSection(SolutionConfiguration) = preSolution
260 ReleaseNoOpt = ReleaseNoOpt
261 ReleaseForDownload = ReleaseForDownload
260 Debug = Debug 262 Debug = Debug
261 Release = Release 263 Release = Release
262 ReleaseForDownload = ReleaseForDownload
263 ReleaseNoOpt = ReleaseNoOpt
264 EndGlobalSection 264 EndGlobalSection
265 GlobalSection(ProjectConfiguration) = postSolution 265 GlobalSection(ProjectConfiguration) = postSolution
266 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32 266 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32
diff --git a/linden/indra/llcharacter/llmotioncontroller.cpp b/linden/indra/llcharacter/llmotioncontroller.cpp
index e2453c9..3ef35ec 100644
--- a/linden/indra/llcharacter/llmotioncontroller.cpp
+++ b/linden/indra/llcharacter/llmotioncontroller.cpp
@@ -546,6 +546,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
546 { 546 {
547 if (motionp->isStopped() && mTime > motionp->getStopTime() + motionp->getEaseOutDuration()) 547 if (motionp->isStopped() && mTime > motionp->getStopTime() + motionp->getEaseOutDuration())
548 { 548 {
549 posep->setWeight(0.f);
549 deactivateMotion(motionp); 550 deactivateMotion(motionp);
550 } 551 }
551 continue; 552 continue;
@@ -572,6 +573,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
572 } 573 }
573 else 574 else
574 { 575 {
576 posep->setWeight(0.f);
575 deactivateMotion(motionp); 577 deactivateMotion(motionp);
576 continue; 578 continue;
577 } 579 }
@@ -822,7 +824,6 @@ BOOL LLMotionController::activateMotion(LLMotion *motion, F32 time)
822//----------------------------------------------------------------------------- 824//-----------------------------------------------------------------------------
823BOOL LLMotionController::deactivateMotion(LLMotion *motion) 825BOOL LLMotionController::deactivateMotion(LLMotion *motion)
824{ 826{
825 motion->getPose()->setWeight(0.f);
826 motion->deactivate(); 827 motion->deactivate();
827 mActiveMotions.remove(motion); 828 mActiveMotions.remove(motion);
828 829
diff --git a/linden/indra/llcommon/llapr.h b/linden/indra/llcommon/llapr.h
index a36b177..e7b12d5 100644
--- a/linden/indra/llcommon/llapr.h
+++ b/linden/indra/llcommon/llapr.h
@@ -35,7 +35,7 @@
35#include <sys/param.h> // Need PATH_MAX in APR headers... 35#include <sys/param.h> // Need PATH_MAX in APR headers...
36#endif 36#endif
37 37
38#include "boost/noncopyable.hpp" 38#include <boost/noncopyable.hpp>
39 39
40#include "apr-1/apr_thread_proc.h" 40#include "apr-1/apr_thread_proc.h"
41#include "apr-1/apr_thread_mutex.h" 41#include "apr-1/apr_thread_mutex.h"
diff --git a/linden/indra/llcommon/llavatarconstants.h b/linden/indra/llcommon/llavatarconstants.h
index 3eedf4e..ab49368 100644
--- a/linden/indra/llcommon/llavatarconstants.h
+++ b/linden/indra/llcommon/llavatarconstants.h
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file indra_constants.h 2 * @file llavatarconstants.h
3 * @brief some useful short term constants for Indra 3 * @brief some useful short term constants for Indra
4 * 4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc. 5 * Copyright (c) 2001-2007, Linden Research, Inc.
diff --git a/linden/indra/llcommon/llchat.h b/linden/indra/llcommon/llchat.h
index bb2610b..7339e9a 100644
--- a/linden/indra/llcommon/llchat.h
+++ b/linden/indra/llcommon/llchat.h
@@ -50,7 +50,8 @@ typedef enum e_chat_type
50 CHAT_TYPE_START = 4, 50 CHAT_TYPE_START = 4,
51 CHAT_TYPE_STOP = 5, 51 CHAT_TYPE_STOP = 5,
52 CHAT_TYPE_DEBUG_MSG = 6, 52 CHAT_TYPE_DEBUG_MSG = 6,
53 CHAT_TYPE_REGION = 7 53 CHAT_TYPE_REGION = 7,
54 CHAT_TYPE_OWNER = 8
54} EChatType; 55} EChatType;
55 56
56typedef enum e_chat_audible_level 57typedef enum e_chat_audible_level
diff --git a/linden/indra/llcommon/lldefs.h b/linden/indra/llcommon/lldefs.h
index a3651ff..25f4e73 100644
--- a/linden/indra/llcommon/lldefs.h
+++ b/linden/indra/llcommon/lldefs.h
@@ -55,13 +55,15 @@ const U32 SOUTHWEST = 6;
55const U32 SOUTHEAST = 7; 55const U32 SOUTHEAST = 7;
56const U32 MIDDLE = 8; 56const U32 MIDDLE = 8;
57 57
58const U8 LL_SOUND_FLAG_NONE = 0x00; 58const U8 EAST_MASK = 0x1<<EAST;
59const U8 LL_SOUND_FLAG_LOOP = 0x01; 59const U8 NORTH_MASK = 0x1<<NORTH;
60const U8 LL_SOUND_FLAG_SYNC_MASTER = 0x02; 60const U8 WEST_MASK = 0x1<<WEST;
61const U8 LL_SOUND_FLAG_SYNC_SLAVE = 0x04; 61const U8 SOUTH_MASK = 0x1<<SOUTH;
62const U8 LL_SOUND_FLAG_SYNC_PENDING = 0x08; 62
63const U8 LL_SOUND_FLAG_SYNC_MASK = LL_SOUND_FLAG_SYNC_MASTER | LL_SOUND_FLAG_SYNC_SLAVE | LL_SOUND_FLAG_SYNC_PENDING; 63const U8 NORTHEAST_MASK = NORTH_MASK | EAST_MASK;
64const U8 LL_SOUND_FLAG_QUEUE = 0x10; 64const U8 NORTHWEST_MASK = NORTH_MASK | WEST_MASK;
65const U8 SOUTHWEST_MASK = SOUTH_MASK | WEST_MASK;
66const U8 SOUTHEAST_MASK = SOUTH_MASK | EAST_MASK;
65 67
66const U32 gDirOpposite[8] = {2, 3, 0, 1, 6, 7, 4, 5}; 68const U32 gDirOpposite[8] = {2, 3, 0, 1, 6, 7, 4, 5};
67const U32 gDirAdjacent[8][2] = { 69const U32 gDirAdjacent[8][2] = {
@@ -87,15 +89,6 @@ const S32 gDirAxes[8][2] = {
87 { 1,-1}, // se 89 { 1,-1}, // se
88 }; 90 };
89 91
90const U8 EAST_MASK = 1;
91const U8 NORTH_MASK = 2;
92const U8 WEST_MASK = 4;
93const U8 SOUTH_MASK = 8;
94const U8 NORTHEAST_MASK = NORTH_MASK | EAST_MASK;
95const U8 NORTHWEST_MASK = NORTH_MASK | WEST_MASK;
96const U8 SOUTHWEST_MASK = SOUTH_MASK | WEST_MASK;
97const U8 SOUTHEAST_MASK = SOUTH_MASK | EAST_MASK;
98
99const S32 gDirMasks[8] = { 92const S32 gDirMasks[8] = {
100 EAST_MASK, 93 EAST_MASK,
101 NORTH_MASK, 94 NORTH_MASK,
@@ -133,6 +126,14 @@ const U32 RIGHT_SIDE = 4;
133const U32 TOP_SIDE = 5; 126const U32 TOP_SIDE = 5;
134const U32 BOTTOM_SIDE = 6; 127const U32 BOTTOM_SIDE = 6;
135 128
129const U8 LL_SOUND_FLAG_NONE = 0x0;
130const U8 LL_SOUND_FLAG_LOOP = 1<<0;
131const U8 LL_SOUND_FLAG_SYNC_MASTER = 1<<1;
132const U8 LL_SOUND_FLAG_SYNC_SLAVE = 1<<2;
133const U8 LL_SOUND_FLAG_SYNC_PENDING = 1<<3;
134const U8 LL_SOUND_FLAG_QUEUE = 1<<4;
135const U8 LL_SOUND_FLAG_STOP = 1<<5;
136const U8 LL_SOUND_FLAG_SYNC_MASK = LL_SOUND_FLAG_SYNC_MASTER | LL_SOUND_FLAG_SYNC_SLAVE | LL_SOUND_FLAG_SYNC_PENDING;
136 137
137// 138//
138// *NOTE: These values may be used as hard-coded numbers in scanf() variants. 139// *NOTE: These values may be used as hard-coded numbers in scanf() variants.
diff --git a/linden/indra/llcommon/llfile.cpp b/linden/indra/llcommon/llfile.cpp
index 4520fd1..6fcfc42 100644
--- a/linden/indra/llcommon/llfile.cpp
+++ b/linden/indra/llcommon/llfile.cpp
@@ -29,6 +29,7 @@
29 * COMPLETENESS OR PERFORMANCE. 29 * COMPLETENESS OR PERFORMANCE.
30 */ 30 */
31 31
32#include "linden_common.h"
32#include "llfile.h" 33#include "llfile.h"
33#include "llstring.h" 34#include "llstring.h"
34#include "llerror.h" 35#include "llerror.h"
diff --git a/linden/indra/llcommon/llmortician.cpp b/linden/indra/llcommon/llmortician.cpp
index ec1383f..be362bf 100644
--- a/linden/indra/llcommon/llmortician.cpp
+++ b/linden/indra/llcommon/llmortician.cpp
@@ -25,6 +25,7 @@
25 * COMPLETENESS OR PERFORMANCE. 25 * COMPLETENESS OR PERFORMANCE.
26 */ 26 */
27 27
28#include "linden_common.h"
28#include "llmortician.h" 29#include "llmortician.h"
29 30
30#include <list> 31#include <list>
diff --git a/linden/indra/llcommon/llprocessor.cpp b/linden/indra/llcommon/llprocessor.cpp
index 40dc00c..bd21351 100644
--- a/linden/indra/llcommon/llprocessor.cpp
+++ b/linden/indra/llcommon/llprocessor.cpp
@@ -453,7 +453,7 @@ bool CProcessor::AnalyzeIntelProcessor()
453 case 3: // Model = 8, Brand id = 3: Pentium III Xeon (on-die L2 cache) processor model 453 case 3: // Model = 8, Brand id = 3: Pentium III Xeon (on-die L2 cache) processor model
454 strncat(strCPUName, "Intel Pentium III Xeon (0.18 micron process) with internal L2 cache", sizeof(strCPUName)-(strlen(strCPUName)-1)); /*Flawfinder: ignore*/ 454 strncat(strCPUName, "Intel Pentium III Xeon (0.18 micron process) with internal L2 cache", sizeof(strCPUName)-(strlen(strCPUName)-1)); /*Flawfinder: ignore*/
455 break; 455 break;
456 default: // ...² 456 default: // ...
457 strncat(strCPUName, "Intel Pentium III core (unknown model, 0.18 micron process) with internal L2 cache", sizeof(strCPUName)-(strlen(strCPUName)-1)); /*Flawfinder: ignore*/ 457 strncat(strCPUName, "Intel Pentium III core (unknown model, 0.18 micron process) with internal L2 cache", sizeof(strCPUName)-(strlen(strCPUName)-1)); /*Flawfinder: ignore*/
458 break; 458 break;
459 } 459 }
@@ -664,8 +664,8 @@ bool CProcessor::AnalyzeAMDProcessor()
664 mov dword ptr [tmp+44], edx 664 mov dword ptr [tmp+44], edx
665 } 665 }
666 // And copy it to the brand id string 666 // And copy it to the brand id string
667 strncpy(CPUInfo.strBrandID, tmp,sizeof(CPUInfo.strBrandID-1)); /* Flawfinder: ignore */ 667 strncpy(CPUInfo.strBrandID, tmp,sizeof(CPUInfo.strBrandID)-1);
668 CPUInfo.strBrandID[sizeof(CPUInfo.strBrandID-1)]='\0'; 668 CPUInfo.strBrandID[sizeof(CPUInfo.strBrandID)-1]='\0';
669 } 669 }
670 else 670 else
671 { 671 {
@@ -1280,17 +1280,17 @@ void CProcessor::DecodeProcessorConfiguration(unsigned int cfg)
1280 CPUInfo._L1.Data.uiAssociativeWays = 4; 1280 CPUInfo._L1.Data.uiAssociativeWays = 4;
1281 CPUInfo._L1.Data.uiLineSize = 64; 1281 CPUInfo._L1.Data.uiLineSize = 64;
1282 break; 1282 break;
1283 case 0x70: // cfg = 0x70: trace L1 cache present, 12 KµOPs, 4 ways 1283 case 0x70: // cfg = 0x70: trace L1 cache present, 12 KuOPs, 4 ways
1284 CPUInfo._Trace.bPresent = true; 1284 CPUInfo._Trace.bPresent = true;
1285 strcpy(CPUInfo._Trace.strSize, "12 K-micro-ops"); /* Flawfinder: ignore */ 1285 strcpy(CPUInfo._Trace.strSize, "12 K-micro-ops"); /* Flawfinder: ignore */
1286 CPUInfo._Trace.uiAssociativeWays = 4; 1286 CPUInfo._Trace.uiAssociativeWays = 4;
1287 break; 1287 break;
1288 case 0x71: // cfg = 0x71: trace L1 cache present, 16 KµOPs, 4 ways 1288 case 0x71: // cfg = 0x71: trace L1 cache present, 16 KuOPs, 4 ways
1289 CPUInfo._Trace.bPresent = true; 1289 CPUInfo._Trace.bPresent = true;
1290 strcpy(CPUInfo._Trace.strSize, "16 K-micro-ops"); /* Flawfinder: ignore */ 1290 strcpy(CPUInfo._Trace.strSize, "16 K-micro-ops"); /* Flawfinder: ignore */
1291 CPUInfo._Trace.uiAssociativeWays = 4; 1291 CPUInfo._Trace.uiAssociativeWays = 4;
1292 break; 1292 break;
1293 case 0x72: // cfg = 0x72: trace L1 cache present, 32 KµOPs, 4 ways 1293 case 0x72: // cfg = 0x72: trace L1 cache present, 32 KuOPs, 4 ways
1294 CPUInfo._Trace.bPresent = true; 1294 CPUInfo._Trace.bPresent = true;
1295 strcpy(CPUInfo._Trace.strSize, "32 K-micro-ops"); /* Flawfinder: ignore */ 1295 strcpy(CPUInfo._Trace.strSize, "32 K-micro-ops"); /* Flawfinder: ignore */
1296 CPUInfo._Trace.uiAssociativeWays = 4; 1296 CPUInfo._Trace.uiAssociativeWays = 4;
diff --git a/linden/indra/llcommon/llsd.cpp b/linden/indra/llcommon/llsd.cpp
index 376a0de..f6d8d0e 100644
--- a/linden/indra/llcommon/llsd.cpp
+++ b/linden/indra/llcommon/llsd.cpp
@@ -26,6 +26,7 @@
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28 28
29#include "linden_common.h"
29#include "llsd.h" 30#include "llsd.h"
30 31
31#include <sstream> 32#include <sstream>
diff --git a/linden/indra/llcommon/llsdserialize_xml.cpp b/linden/indra/llcommon/llsdserialize_xml.cpp
index 04cdd57..85d3883 100644
--- a/linden/indra/llcommon/llsdserialize_xml.cpp
+++ b/linden/indra/llcommon/llsdserialize_xml.cpp
@@ -398,7 +398,10 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
398 status = XML_ParseBuffer(mParser, 0, true); 398 status = XML_ParseBuffer(mParser, 0, true);
399 if (status == XML_STATUS_ERROR && !mGracefullStop) 399 if (status == XML_STATUS_ERROR && !mGracefullStop)
400 { 400 {
401 ((char*) buffer)[count? count - 1 : 0] = '\0'; 401 if (buffer)
402 {
403 ((char*) buffer)[count ? count - 1 : 0] = '\0';
404 }
402 llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl; 405 llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl;
403 data = LLSD(); 406 data = LLSD();
404 return -1; 407 return -1;
diff --git a/linden/indra/llcommon/llsdutil.cpp b/linden/indra/llcommon/llsdutil.cpp
index 85718ba..e8b3ac5 100644
--- a/linden/indra/llcommon/llsdutil.cpp
+++ b/linden/indra/llcommon/llsdutil.cpp
@@ -297,4 +297,4 @@ char* ll_pretty_print_sd(const LLSD& sd)
297 strncpy(buffer, stream.str().c_str(), bufferSize); 297 strncpy(buffer, stream.str().c_str(), bufferSize);
298 buffer[bufferSize - 1] = '\0'; 298 buffer[bufferSize - 1] = '\0';
299 return buffer; 299 return buffer;
300} \ No newline at end of file 300}
diff --git a/linden/indra/llcommon/llstreamtools.cpp b/linden/indra/llcommon/llstreamtools.cpp
index d70fa60..e6cd909 100644
--- a/linden/indra/llcommon/llstreamtools.cpp
+++ b/linden/indra/llcommon/llstreamtools.cpp
@@ -26,6 +26,8 @@
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28 28
29#include "linden_common.h"
30
29#include <iostream> 31#include <iostream>
30#include <string> 32#include <string>
31 33
diff --git a/linden/indra/llcommon/llstring.cpp b/linden/indra/llcommon/llstring.cpp
index 22d7b47..b5e307f 100644
--- a/linden/indra/llcommon/llstring.cpp
+++ b/linden/indra/llcommon/llstring.cpp
@@ -673,6 +673,26 @@ std::string mbcsstring_makeASCII(const std::string& wstr)
673 } 673 }
674 return out_str; 674 return out_str;
675} 675}
676std::string utf8str_removeCRLF(const std::string& utf8str)
677{
678 if (0 == utf8str.length())
679 {
680 return std::string();
681 }
682 const char CR = 13;
683
684 std::string out;
685 out.reserve(utf8str.length());
686 const S32 len = (S32)utf8str.length();
687 for( S32 i = 0; i < len; i++ )
688 {
689 if( utf8str[i] != CR )
690 {
691 out.push_back(utf8str[i]);
692 }
693 }
694 return out;
695}
676 696
677#if LL_WINDOWS 697#if LL_WINDOWS
678/* If the size of the passed in buffer is not large enough to hold the string, 698/* If the size of the passed in buffer is not large enough to hold the string,
diff --git a/linden/indra/llcommon/llstring.h b/linden/indra/llcommon/llstring.h
index 8a2c24c..a24f944 100644
--- a/linden/indra/llcommon/llstring.h
+++ b/linden/indra/llcommon/llstring.h
@@ -457,6 +457,9 @@ std::string utf8str_makeASCII(const std::string& utf8str);
457// Hack - used for evil notecards. 457// Hack - used for evil notecards.
458std::string mbcsstring_makeASCII(const std::string& str); 458std::string mbcsstring_makeASCII(const std::string& str);
459 459
460std::string utf8str_removeCRLF(const std::string& utf8str);
461
462
460template <class T> 463template <class T>
461std::ostream& operator<<(std::ostream &s, const LLStringBase<T> &str) 464std::ostream& operator<<(std::ostream &s, const LLStringBase<T> &str)
462{ 465{
diff --git a/linden/indra/llcommon/lluri.cpp b/linden/indra/llcommon/lluri.cpp
index c838b25..83de022 100644
--- a/linden/indra/llcommon/lluri.cpp
+++ b/linden/indra/llcommon/lluri.cpp
@@ -188,6 +188,55 @@ LLURI::LLURI(const std::string& escaped_str)
188 } 188 }
189} 189}
190 190
191static BOOL isDefault(const std::string& scheme, U16 port)
192{
193 if (scheme == "http")
194 return port == 80;
195 if (scheme == "https")
196 return port == 443;
197 if (scheme == "ftp")
198 return port == 21;
199
200 return FALSE;
201}
202
203LLURI::LLURI(const std::string& scheme,
204 const std::string& userName,
205 const std::string& password,
206 const std::string& hostName,
207 U16 port,
208 const std::string& escapedPath,
209 const std::string& escapedQuery)
210 : mScheme(scheme),
211 mEscapedPath(escapedPath),
212 mEscapedQuery(escapedQuery)
213{
214 std::ostringstream auth;
215 std::ostringstream opaque;
216
217 opaque << "//";
218
219 if (!userName.empty())
220 {
221 auth << escape(userName);
222 if (!password.empty())
223 {
224 auth << ':' << escape(password);
225 }
226 auth << '@';
227 }
228 auth << hostName;
229 if (!isDefault(scheme, port))
230 {
231 auth << ':' << port;
232 }
233 mEscapedAuthority = auth.str();
234
235 opaque << mEscapedAuthority << escapedPath << escapedQuery;
236
237 mEscapedOpaque = opaque.str();
238}
239
191LLURI::~LLURI() 240LLURI::~LLURI()
192{ 241{
193} 242}
@@ -447,6 +496,35 @@ std::string LLURI::hostName() const
447 return unescape(host); 496 return unescape(host);
448} 497}
449 498
499std::string LLURI::userName() const
500{
501 std::string user, userPass, host, port;
502 findAuthorityParts(mEscapedAuthority, userPass, host, port);
503 std::string::size_type pos = userPass.find(':');
504 if (pos != std::string::npos)
505 {
506 user = userPass.substr(0, pos);
507 }
508 return unescape(user);
509}
510
511std::string LLURI::password() const
512{
513 std::string pass, userPass, host, port;
514 findAuthorityParts(mEscapedAuthority, userPass, host, port);
515 std::string::size_type pos = userPass.find(':');
516 if (pos != std::string::npos)
517 {
518 pass = userPass.substr(pos + 1);
519 }
520 return unescape(pass);
521}
522
523BOOL LLURI::defaultPort() const
524{
525 return isDefault(mScheme, hostPort());
526}
527
450U16 LLURI::hostPort() const 528U16 LLURI::hostPort() const
451{ 529{
452 std::string user, host, port; 530 std::string user, host, port;
diff --git a/linden/indra/llcommon/lluri.h b/linden/indra/llcommon/lluri.h
index d1499b8..3f24799 100644
--- a/linden/indra/llcommon/lluri.h
+++ b/linden/indra/llcommon/lluri.h
@@ -48,6 +48,14 @@ class LLURI
48public: 48public:
49 LLURI(); 49 LLURI();
50 LLURI(const std::string& escaped_str); 50 LLURI(const std::string& escaped_str);
51 LLURI(const std::string& scheme,
52 const std::string& userName,
53 const std::string& password,
54 const std::string& hostName,
55 U16 hostPort,
56 const std::string& escapedPath,
57 const std::string& escapedQuery);
58
51 // construct from escaped string, as would be transmitted on the net 59 // construct from escaped string, as would be transmitted on the net
52 60
53 ~LLURI(); 61 ~LLURI();
@@ -68,8 +76,6 @@ public:
68 const U32& port, 76 const U32& port,
69 const LLSD& path, 77 const LLSD& path,
70 const LLSD& query); 78 const LLSD& query);
71
72
73 std::string asString() const; 79 std::string asString() const;
74 // the whole URI, escaped as needed 80 // the whole URI, escaped as needed
75 81
@@ -84,10 +90,15 @@ public:
84 // for schemes that follow path like syntax (http, https, ftp) 90 // for schemes that follow path like syntax (http, https, ftp)
85 std::string authority() const; // ex.: "host.com:80" 91 std::string authority() const; // ex.: "host.com:80"
86 std::string hostName() const; // ex.: "host.com" 92 std::string hostName() const; // ex.: "host.com"
93 std::string userName() const;
94 std::string password() const;
87 U16 hostPort() const; // ex.: 80, will include implicit port 95 U16 hostPort() const; // ex.: 80, will include implicit port
96 BOOL defaultPort() const; // true if port is default for scheme
97 const std::string& escapedPath() const { return mEscapedPath; }
88 std::string path() const; // ex.: "/abc/def", includes leading slash 98 std::string path() const; // ex.: "/abc/def", includes leading slash
89 // LLSD pathArray() const; // above decoded into an array of strings 99 // LLSD pathArray() const; // above decoded into an array of strings
90 std::string query() const; // ex.: "x=34", section after "?" 100 std::string query() const; // ex.: "x=34", section after "?"
101 const std::string& escapedQuery() const { return mEscapedQuery; }
91 LLSD queryMap() const; // above decoded into a map 102 LLSD queryMap() const; // above decoded into a map
92 static LLSD queryMap(std::string escaped_query_string); 103 static LLSD queryMap(std::string escaped_query_string);
93 static std::string mapToQueryString(const LLSD& queryMap); 104 static std::string mapToQueryString(const LLSD& queryMap);
diff --git a/linden/indra/llcommon/llversion.h b/linden/indra/llcommon/llversion.h
index 57b1512..2623c3a 100644
--- a/linden/indra/llcommon/llversion.h
+++ b/linden/indra/llcommon/llversion.h
@@ -31,7 +31,7 @@
31 31
32const S32 LL_VERSION_MAJOR = 1; 32const S32 LL_VERSION_MAJOR = 1;
33const S32 LL_VERSION_MINOR = 17; 33const S32 LL_VERSION_MINOR = 17;
34const S32 LL_VERSION_PATCH = 0; 34const S32 LL_VERSION_PATCH = 1;
35const S32 LL_VERSION_BUILD = 12; 35const S32 LL_VERSION_BUILD = 0;
36 36
37#endif 37#endif
diff --git a/linden/indra/llcommon/processor.h b/linden/indra/llcommon/processor.h
index 367d540..34d970e 100644
--- a/linden/indra/llcommon/processor.h
+++ b/linden/indra/llcommon/processor.h
@@ -2,7 +2,7 @@
2 * @file processor.h 2 * @file processor.h
3 * @brief Legacy wrapper header. 3 * @brief Legacy wrapper header.
4 * 4 *
5 * Copyright (c) 2000-2007 Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/llcommon/string_table.h b/linden/indra/llcommon/string_table.h
index 790741d..3d30c9f 100644
--- a/linden/indra/llcommon/string_table.h
+++ b/linden/indra/llcommon/string_table.h
@@ -2,7 +2,7 @@
2 * @file string_table.h 2 * @file string_table.h
3 * @brief Legacy wrapper header. 3 * @brief Legacy wrapper header.
4 * 4 *
5 * Copyright (c) 2000-2007 Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/llcommon/timer.h b/linden/indra/llcommon/timer.h
index 31e6db6..3a098ec 100644
--- a/linden/indra/llcommon/timer.h
+++ b/linden/indra/llcommon/timer.h
@@ -2,7 +2,7 @@
2 * @file timer.h 2 * @file timer.h
3 * @brief Legacy wrapper header. 3 * @brief Legacy wrapper header.
4 * 4 *
5 * Copyright (c) 2000-2007 Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/llcommon/timing.cpp b/linden/indra/llcommon/timing.cpp
index 342bf19..0737beb 100644
--- a/linden/indra/llcommon/timing.cpp
+++ b/linden/indra/llcommon/timing.cpp
@@ -2,7 +2,7 @@
2 * @file timing.cpp 2 * @file timing.cpp
3 * @brief This file will be deprecated in the future. 3 * @brief This file will be deprecated in the future.
4 * 4 *
5 * Copyright (c) 2000-2007 Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/llimage/files.lst b/linden/indra/llimage/files.lst
index 9e14118..a6ac342 100644
--- a/linden/indra/llimage/files.lst
+++ b/linden/indra/llimage/files.lst
@@ -3,5 +3,7 @@ llimage/llimage.cpp
3llimage/llimagedxt.cpp 3llimage/llimagedxt.cpp
4llimage/llimagej2c.cpp 4llimage/llimagej2c.cpp
5llimage/llimagejpeg.cpp 5llimage/llimagejpeg.cpp
6llimage/llimagepng.cpp
6llimage/llimagetga.cpp 7llimage/llimagetga.cpp
7llimage/llimageworker.cpp 8llimage/llimageworker.cpp
9llimage/llpngwrapper.cpp
diff --git a/linden/indra/llimage/llimage.cpp b/linden/indra/llimage/llimage.cpp
index 5175314..b846606 100644
--- a/linden/indra/llimage/llimage.cpp
+++ b/linden/indra/llimage/llimage.cpp
@@ -1105,7 +1105,8 @@ file_extensions[] =
1105 { "jpg", IMG_CODEC_JPEG }, 1105 { "jpg", IMG_CODEC_JPEG },
1106 { "jpeg", IMG_CODEC_JPEG }, 1106 { "jpeg", IMG_CODEC_JPEG },
1107 { "mip", IMG_CODEC_DXT }, 1107 { "mip", IMG_CODEC_DXT },
1108 { "dxt", IMG_CODEC_DXT } 1108 { "dxt", IMG_CODEC_DXT },
1109 { "png", IMG_CODEC_PNG }
1109}; 1110};
1110#define NUM_FILE_EXTENSIONS sizeof(file_extensions)/sizeof(file_extensions[0]) 1111#define NUM_FILE_EXTENSIONS sizeof(file_extensions)/sizeof(file_extensions[0])
1111 1112
diff --git a/linden/indra/llimage/llimage.h b/linden/indra/llimage/llimage.h
index 489fb27..cd559ec 100644
--- a/linden/indra/llimage/llimage.h
+++ b/linden/indra/llimage/llimage.h
@@ -67,7 +67,8 @@ enum
67 IMG_CODEC_TGA = 4, 67 IMG_CODEC_TGA = 4,
68 IMG_CODEC_JPEG = 5, 68 IMG_CODEC_JPEG = 5,
69 IMG_CODEC_DXT = 6, 69 IMG_CODEC_DXT = 6,
70 IMG_CODEC_EOF = 7 70 IMG_CODEC_PNG = 7,
71 IMG_CODEC_EOF = 8
71}; 72};
72 73
73//============================================================================ 74//============================================================================
diff --git a/linden/indra/llimage/llimage.vcproj b/linden/indra/llimage/llimage.vcproj
index 1f8a6ad..984d84e 100644
--- a/linden/indra/llimage/llimage.vcproj
+++ b/linden/indra/llimage/llimage.vcproj
@@ -169,11 +169,17 @@
169 RelativePath=".\llimagejpeg.cpp"> 169 RelativePath=".\llimagejpeg.cpp">
170 </File> 170 </File>
171 <File 171 <File
172 RelativePath=".\llimagepng.cpp">
173 </File>
174 <File
172 RelativePath=".\llimagetga.cpp"> 175 RelativePath=".\llimagetga.cpp">
173 </File> 176 </File>
174 <File 177 <File
175 RelativePath=".\llimageworker.cpp"> 178 RelativePath=".\llimageworker.cpp">
176 </File> 179 </File>
180 <File
181 RelativePath=".\llpngwrapper.cpp">
182 </File>
177 </Filter> 183 </Filter>
178 <Filter 184 <Filter
179 Name="Header Files" 185 Name="Header Files"
@@ -198,11 +204,17 @@
198 RelativePath=".\llimagejpeg.h"> 204 RelativePath=".\llimagejpeg.h">
199 </File> 205 </File>
200 <File 206 <File
207 RelativePath=".\llimagepng.h">
208 </File>
209 <File
201 RelativePath=".\llimagetga.h"> 210 RelativePath=".\llimagetga.h">
202 </File> 211 </File>
203 <File 212 <File
204 RelativePath=".\llimageworker.h"> 213 RelativePath=".\llimageworker.h">
205 </File> 214 </File>
215 <File
216 RelativePath=".\llpngwrapper.h">
217 </File>
206 </Filter> 218 </Filter>
207 <Filter 219 <Filter
208 Name="Resource Files" 220 Name="Resource Files"
diff --git a/linden/indra/llimage/llimage_vc8.vcproj b/linden/indra/llimage/llimage_vc8.vcproj
index 052a28f..dd15d59 100644
--- a/linden/indra/llimage/llimage_vc8.vcproj
+++ b/linden/indra/llimage/llimage_vc8.vcproj
@@ -248,6 +248,10 @@
248 > 248 >
249 </File> 249 </File>
250 <File 250 <File
251 RelativePath=".\llimagepng.cpp"
252 >
253 </File>
254 <File
251 RelativePath=".\llimagetga.cpp" 255 RelativePath=".\llimagetga.cpp"
252 > 256 >
253 </File> 257 </File>
@@ -255,6 +259,10 @@
255 RelativePath=".\llimageworker.cpp" 259 RelativePath=".\llimageworker.cpp"
256 > 260 >
257 </File> 261 </File>
262 <File
263 RelativePath=".\llpngwrapper.cpp"
264 >
265 </File>
258 </Filter> 266 </Filter>
259 <Filter 267 <Filter
260 Name="Header Files" 268 Name="Header Files"
@@ -286,6 +294,10 @@
286 > 294 >
287 </File> 295 </File>
288 <File 296 <File
297 RelativePath=".\llimagepng.h"
298 >
299 </File>
300 <File
289 RelativePath=".\llimagetga.h" 301 RelativePath=".\llimagetga.h"
290 > 302 >
291 </File> 303 </File>
@@ -293,6 +305,10 @@
293 RelativePath=".\llimageworker.h" 305 RelativePath=".\llimageworker.h"
294 > 306 >
295 </File> 307 </File>
308 <File
309 RelativePath=".\llpngwrapper.h"
310 >
311 </File>
296 </Filter> 312 </Filter>
297 <Filter 313 <Filter
298 Name="Resource Files" 314 Name="Resource Files"
diff --git a/linden/indra/llimage/llimageworker.cpp b/linden/indra/llimage/llimageworker.cpp
index c59eac2..9affd59 100644
--- a/linden/indra/llimage/llimageworker.cpp
+++ b/linden/indra/llimage/llimageworker.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file llimage.cpp 2 * @file llimageworker.cpp
3 * @brief Base class for images. 3 * @brief Base class for images.
4 * 4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc. 5 * Copyright (c) 2001-2007, Linden Research, Inc.
diff --git a/linden/indra/llinventory/llparcel.cpp b/linden/indra/llinventory/llparcel.cpp
index 990e77d..5902acd 100644
--- a/linden/indra/llinventory/llparcel.cpp
+++ b/linden/indra/llinventory/llparcel.cpp
@@ -1231,24 +1231,6 @@ BOOL LLParcel::exportStream(std::ostream& output_stream)
1231 return TRUE; 1231 return TRUE;
1232} 1232}
1233 1233
1234// virtual
1235LLSD LLParcel::asLLSD() const
1236{
1237 LLSD p;
1238 p["parcel-id"] = getID();
1239 p["name"] = getName();
1240 p["desc"] = getDesc();
1241 p["owner-id"] = getOwnerID();
1242 p["group-id"] = getGroupID();
1243 p["group-owned"] = (bool)getIsGroupOwned();
1244 p["auction-id"] = (S32)getAuctionID();
1245 p["snapshot-id"] = getSnapshotID();
1246 p["authorized-buyer-id"] = getAuthorizedBuyerID();
1247 p["sale-price"] = getSalePrice();
1248 p["parcel-flags"] = (S32)getParcelFlags();
1249 // NOTE: This list is incomplete, as this is used only for search. JC
1250 return p;
1251}
1252 1234
1253// Assumes we are in a block "ParcelData" 1235// Assumes we are in a block "ParcelData"
1254void LLParcel::packMessage(LLMessageSystem* msg) 1236void LLParcel::packMessage(LLMessageSystem* msg)
diff --git a/linden/indra/llinventory/llparcel.h b/linden/indra/llinventory/llparcel.h
index 371b802..a33ffad 100644
--- a/linden/indra/llinventory/llparcel.h
+++ b/linden/indra/llinventory/llparcel.h
@@ -264,7 +264,6 @@ public:
264 BOOL importStream(std::istream& input_stream); 264 BOOL importStream(std::istream& input_stream);
265 BOOL importAccessEntry(std::istream& input_stream, LLAccessEntry* entry); 265 BOOL importAccessEntry(std::istream& input_stream, LLAccessEntry* entry);
266 BOOL exportStream(std::ostream& output_stream); 266 BOOL exportStream(std::ostream& output_stream);
267 virtual LLSD asLLSD() const;
268 267
269 void packMessage(LLMessageSystem* msg); 268 void packMessage(LLMessageSystem* msg);
270 void unpackMessage(LLMessageSystem* msg); 269 void unpackMessage(LLMessageSystem* msg);
diff --git a/linden/indra/llinventory/llpermissions.h b/linden/indra/llinventory/llpermissions.h
index 608f4b2..9607a9b 100644
--- a/linden/indra/llinventory/llpermissions.h
+++ b/linden/indra/llinventory/llpermissions.h
@@ -140,7 +140,7 @@ public:
140 const LLUUID& getOwner() const { return mOwner; } 140 const LLUUID& getOwner() const { return mOwner; }
141 141
142 // return the group_id of the group associated with the 142 // return the group_id of the group associated with the
143 // object. group_id == owner_id if the object is group owned. 143 // object.
144 const LLUUID& getGroup() const { return mGroup; } 144 const LLUUID& getGroup() const { return mGroup; }
145 145
146 // return the agent_id of the last agent owner. Only returns 146 // return the agent_id of the last agent owner. Only returns
diff --git a/linden/indra/llinventory/lluserrelations.cpp b/linden/indra/llinventory/lluserrelations.cpp
index fc8e510..5f01e51 100644
--- a/linden/indra/llinventory/lluserrelations.cpp
+++ b/linden/indra/llinventory/lluserrelations.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file lluserrealations.cpp 2 * @file lluserrelations.cpp
3 * @author Phoenix 3 * @author Phoenix
4 * @date 2006-10-12 4 * @date 2006-10-12
5 * @brief Implementation of a simple cache of user relations. 5 * @brief Implementation of a simple cache of user relations.
diff --git a/linden/indra/llinventory/lluserrelations.h b/linden/indra/llinventory/lluserrelations.h
index 3895533..69f5966 100644
--- a/linden/indra/llinventory/lluserrelations.h
+++ b/linden/indra/llinventory/lluserrelations.h
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file llluserrelations.h 2 * @file lluserrelations.h
3 * @author Phoenix 3 * @author Phoenix
4 * @date 2006-10-12 4 * @date 2006-10-12
5 * @brief Declaration of a class for handling granted rights. 5 * @brief Declaration of a class for handling granted rights.
@@ -38,7 +38,7 @@
38 * @class LLRelationship 38 * @class LLRelationship
39 * 39 *
40 * This class represents a relationship between two agents, where the 40 * This class represents a relationship between two agents, where the
41 * related agent is stored and the other agent in the relationship is 41 * related agent is stored and the other agent is the relationship is
42 * implicit by container ownership. 42 * implicit by container ownership.
43 * This is merely a cache of this information used by the sim 43 * This is merely a cache of this information used by the sim
44 * and viewer. 44 * and viewer.
diff --git a/linden/indra/llmath/camera.h b/linden/indra/llmath/camera.h
index 3aa86d5..be8c711 100644
--- a/linden/indra/llmath/camera.h
+++ b/linden/indra/llmath/camera.h
@@ -2,7 +2,7 @@
2 * @file camera.h 2 * @file camera.h
3 * @brief Legacy wrapper header. 3 * @brief Legacy wrapper header.
4 * 4 *
5 * Copyright (c) 2000-2007 Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/llmath/coordframe.h b/linden/indra/llmath/coordframe.h
index 611387d..01d3031 100644
--- a/linden/indra/llmath/coordframe.h
+++ b/linden/indra/llmath/coordframe.h
@@ -2,7 +2,7 @@
2 * @file coordframe.h 2 * @file coordframe.h
3 * @brief Legacy wrapper header. 3 * @brief Legacy wrapper header.
4 * 4 *
5 * Copyright (c) 2000-2007 Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/llmath/llquaternion.cpp b/linden/indra/llmath/llquaternion.cpp
index abc9e42..06e34af 100644
--- a/linden/indra/llmath/llquaternion.cpp
+++ b/linden/indra/llmath/llquaternion.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file qmath.cpp 2 * @file llquaternion.cpp
3 * @brief LLQuaternion class implementation. 3 * @brief LLQuaternion class implementation.
4 * 4 *
5 * Copyright (c) 2000-2007, Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
diff --git a/linden/indra/llmath/llrand.h b/linden/indra/llmath/llrand.h
index 4a3dca6..c5ab7e3 100644
--- a/linden/indra/llmath/llrand.h
+++ b/linden/indra/llmath/llrand.h
@@ -29,8 +29,8 @@
29#ifndef LL_LLRAND_H 29#ifndef LL_LLRAND_H
30#define LL_LLRAND_H 30#define LL_LLRAND_H
31 31
32#include "boost/random/lagged_fibonacci.hpp" 32#include <boost/random/lagged_fibonacci.hpp>
33#include "boost/random/mersenne_twister.hpp" 33#include <boost/random/mersenne_twister.hpp>
34 34
35/** 35/**
36 * Use the boost random number generators if you want a stateful 36 * Use the boost random number generators if you want a stateful
diff --git a/linden/indra/llmath/llvolume.cpp b/linden/indra/llmath/llvolume.cpp
index 327f1bf..5764c38 100644
--- a/linden/indra/llmath/llvolume.cpp
+++ b/linden/indra/llmath/llvolume.cpp
@@ -1799,6 +1799,8 @@ void LLVolume::createVolumeFaces()
1799// sculpt replaces generate() for sculpted surfaces 1799// sculpt replaces generate() for sculpted surfaces
1800void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level) 1800void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components, const U8* sculpt_data, S32 sculpt_level)
1801{ 1801{
1802 U8 sculpt_type = mParams.getSculptType();
1803
1802 BOOL data_is_empty = FALSE; 1804 BOOL data_is_empty = FALSE;
1803 1805
1804 if (sculpt_width == 0 || sculpt_height == 0 || sculpt_data == NULL) 1806 if (sculpt_width == 0 || sculpt_height == 0 || sculpt_data == NULL)
@@ -1880,6 +1882,7 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components,
1880 line += sizeT; 1882 line += sizeT;
1881 } 1883 }
1882 } 1884 }
1885
1883 else 1886 else
1884 { 1887 {
1885 S32 line = 0; 1888 S32 line = 0;
@@ -1894,18 +1897,52 @@ void LLVolume::sculpt(U16 sculpt_width, U16 sculpt_height, S8 sculpt_components,
1894 U32 x = (U32) ((F32)t/(sizeT-1) * (F32) sculpt_width); 1897 U32 x = (U32) ((F32)t/(sizeT-1) * (F32) sculpt_width);
1895 U32 y = (U32) ((F32)s/(sizeS-1) * (F32) sculpt_height); 1898 U32 y = (U32) ((F32)s/(sizeS-1) * (F32) sculpt_height);
1896 1899
1897 if (y == sculpt_height) // stitch bottom row 1900 if (y == 0) // top row stitching
1898 { 1901 {
1899 y = sculpt_height - 1; 1902 // pinch?
1900 x = sculpt_width / 2; 1903 if (sculpt_type == LL_SCULPT_TYPE_SPHERE)
1904 {
1905 x = sculpt_width / 2;
1906 }
1901 } 1907 }
1902 1908
1903 if (x == sculpt_width) // stitch sides 1909 if (y == sculpt_height) // bottom row stitching
1904 x = 0; 1910 {
1911 // wrap?
1912 if (sculpt_type == LL_SCULPT_TYPE_TORUS)
1913 {
1914 y = 0;
1915 }
1916 else
1917 {
1918 y = sculpt_height - 1;
1919 }
1905 1920
1906 if (y == 0) // stitch top row 1921 // pinch?
1907 x = sculpt_width / 2; 1922 if (sculpt_type == LL_SCULPT_TYPE_SPHERE)
1908 1923 {
1924 x = sculpt_width / 2;
1925 }
1926 }
1927
1928 if (x == sculpt_width) // side stitching
1929 {
1930 // wrap?
1931 if ((sculpt_type == LL_SCULPT_TYPE_SPHERE) ||
1932 (sculpt_type == LL_SCULPT_TYPE_TORUS) ||
1933 (sculpt_type == LL_SCULPT_TYPE_CYLINDER))
1934 {
1935 x = 0;
1936 }
1937
1938 else
1939 {
1940 x = sculpt_width - 1;
1941 }
1942 }
1943
1944
1945
1909 U32 index = (x + y * sculpt_width) * sculpt_components; 1946 U32 index = (x + y * sculpt_width) * sculpt_components;
1910 pt.mPos.mV[0] = sculpt_data[index ] / 256.f - 0.5f; 1947 pt.mPos.mV[0] = sculpt_data[index ] / 256.f - 0.5f;
1911 pt.mPos.mV[1] = sculpt_data[index+1] / 256.f - 0.5f; 1948 pt.mPos.mV[1] = sculpt_data[index+1] / 256.f - 0.5f;
@@ -4615,82 +4652,130 @@ BOOL LLVolumeFace::createSide()
4615 } 4652 }
4616 } 4653 }
4617 4654
4655 // adjust normals based on wrapping and stitching
4656
4618 BOOL s_bottom_converges = ((mVertices[0].mPosition - mVertices[mNumS*(mNumT-2)].mPosition).magVecSquared() < 0.000001f); 4657 BOOL s_bottom_converges = ((mVertices[0].mPosition - mVertices[mNumS*(mNumT-2)].mPosition).magVecSquared() < 0.000001f);
4619 BOOL s_top_converges = ((mVertices[mNumS-1].mPosition - mVertices[mNumS*(mNumT-2)+mNumS-1].mPosition).magVecSquared() < 0.000001f); 4658 BOOL s_top_converges = ((mVertices[mNumS-1].mPosition - mVertices[mNumS*(mNumT-2)+mNumS-1].mPosition).magVecSquared() < 0.000001f);
4620 4659 U8 sculpt_type = mVolumep->getParams().getSculptType();
4621 if (mVolumep->getPath().isOpen() == FALSE) { //wrap normals on T 4660
4622 for (S32 i = 0; i < mNumS; i++) { 4661 if (sculpt_type == LL_SCULPT_TYPE_NONE) // logic for non-sculpt volumes
4623 LLVector3 norm = mVertices[i].mNormal + mVertices[mNumS*(mNumT-1)+i].mNormal; 4662 {
4624 mVertices[i].mNormal = norm; 4663 if (mVolumep->getPath().isOpen() == FALSE)
4625 mVertices[mNumS*(mNumT-1)+i].mNormal = norm; 4664 { //wrap normals on T
4665 for (S32 i = 0; i < mNumS; i++)
4666 {
4667 LLVector3 norm = mVertices[i].mNormal + mVertices[mNumS*(mNumT-1)+i].mNormal;
4668 mVertices[i].mNormal = norm;
4669 mVertices[mNumS*(mNumT-1)+i].mNormal = norm;
4670 }
4626 } 4671 }
4627 }
4628 4672
4629 if ((mVolumep->getProfile().isOpen() == FALSE) && 4673 if ((mVolumep->getProfile().isOpen() == FALSE) && !(s_bottom_converges))
4630 !(s_bottom_converges))
4631 { //wrap normals on S 4674 { //wrap normals on S
4632 for (S32 i = 0; i < mNumT; i++) { 4675 for (S32 i = 0; i < mNumT; i++)
4676 {
4633 LLVector3 norm = mVertices[mNumS*i].mNormal + mVertices[mNumS*i+mNumS-1].mNormal; 4677 LLVector3 norm = mVertices[mNumS*i].mNormal + mVertices[mNumS*i+mNumS-1].mNormal;
4634 mVertices[mNumS * i].mNormal = norm; 4678 mVertices[mNumS * i].mNormal = norm;
4635 mVertices[mNumS * i+mNumS-1].mNormal = norm; 4679 mVertices[mNumS * i+mNumS-1].mNormal = norm;
4636 } 4680 }
4637 } 4681 }
4638 4682
4639 if (mVolumep->getPathType() == LL_PCODE_PATH_CIRCLE && 4683 if (mVolumep->getPathType() == LL_PCODE_PATH_CIRCLE &&
4640 ((mVolumep->getProfileType() & LL_PCODE_PROFILE_MASK) == LL_PCODE_PROFILE_CIRCLE_HALF)) 4684 ((mVolumep->getProfileType() & LL_PCODE_PROFILE_MASK) == LL_PCODE_PROFILE_CIRCLE_HALF))
4641 { 4685 {
4642 if (s_bottom_converges) 4686 if (s_bottom_converges)
4643 { //all lower S have same normal 4687 { //all lower S have same normal
4644 for (S32 i = 0; i < mNumT; i++) { 4688 for (S32 i = 0; i < mNumT; i++)
4645 mVertices[mNumS*i].mNormal = LLVector3(1,0,0); 4689 {
4690 mVertices[mNumS*i].mNormal = LLVector3(1,0,0);
4691 }
4646 } 4692 }
4647 }
4648 4693
4649 if (s_top_converges) 4694 if (s_top_converges)
4650 { //all upper S have same normal 4695 { //all upper S have same normal
4651 for (S32 i = 0; i < mNumT; i++) { 4696 for (S32 i = 0; i < mNumT; i++)
4652 mVertices[mNumS*i+mNumS-1].mNormal = LLVector3(-1,0,0); 4697 {
4698 mVertices[mNumS*i+mNumS-1].mNormal = LLVector3(-1,0,0);
4699 }
4653 } 4700 }
4654 } 4701 }
4655 } 4702 }
4656
4657 U8 sculpt_type = mVolumep->getParams().getSculptType();
4658 4703
4659 if (sculpt_type == LL_SCULPT_TYPE_SPHERE) 4704 else // logic for sculpt volumes
4660 { 4705 {
4661 // average normals for north pole 4706 BOOL average_poles = FALSE;
4707 BOOL wrap_s = FALSE;
4708 BOOL wrap_t = FALSE;
4709
4710 if (sculpt_type == LL_SCULPT_TYPE_SPHERE)
4711 average_poles = TRUE;
4712
4713 if ((sculpt_type == LL_SCULPT_TYPE_SPHERE) ||
4714 (sculpt_type == LL_SCULPT_TYPE_TORUS) ||
4715 (sculpt_type == LL_SCULPT_TYPE_CYLINDER))
4716 wrap_s = TRUE;
4717
4718 if (sculpt_type == LL_SCULPT_TYPE_TORUS)
4719 wrap_t = TRUE;
4720
4662 4721
4663 LLVector3 average(0.0, 0.0, 0.0); 4722 if (average_poles)
4664 for (S32 i = 0; i < mNumS; i++)
4665 { 4723 {
4666 average += mVertices[i].mNormal; 4724 // average normals for north pole
4667 } 4725
4726 LLVector3 average(0.0, 0.0, 0.0);
4727 for (S32 i = 0; i < mNumS; i++)
4728 {
4729 average += mVertices[i].mNormal;
4730 }
4731
4732 // set average
4733 for (S32 i = 0; i < mNumS; i++)
4734 {
4735 mVertices[i].mNormal = average;
4736 }
4737
4738 // average normals for south pole
4739
4740 average = LLVector3(0.0, 0.0, 0.0);
4741 for (S32 i = 0; i < mNumS; i++)
4742 {
4743 average += mVertices[i + mNumS * (mNumT - 1)].mNormal;
4744 }
4745
4746 // set average
4747 for (S32 i = 0; i < mNumS; i++)
4748 {
4749 mVertices[i + mNumS * (mNumT - 1)].mNormal = average;
4750 }
4668 4751
4669 // set average
4670 for (S32 i = 0; i < mNumS; i++)
4671 {
4672 mVertices[i].mNormal = average;
4673 } 4752 }
4674 }
4675 4753
4676
4677 if (sculpt_type == LL_SCULPT_TYPE_SPHERE)
4678 {
4679 // average normals for south pole
4680 4754
4681 LLVector3 average(0.0, 0.0, 0.0); 4755 if (wrap_s)
4682 for (S32 i = 0; i < mNumS; i++)
4683 { 4756 {
4684 average += mVertices[i + mNumS * (mNumT - 1)].mNormal; 4757 for (S32 i = 0; i < mNumT; i++)
4758 {
4759 LLVector3 norm = mVertices[mNumS*i].mNormal + mVertices[mNumS*i+mNumS-1].mNormal;
4760 mVertices[mNumS * i].mNormal = norm;
4761 mVertices[mNumS * i+mNumS-1].mNormal = norm;
4762 }
4685 } 4763 }
4686 4764
4687 // set average 4765
4688 for (S32 i = 0; i < mNumS; i++) 4766
4767 if (wrap_t)
4689 { 4768 {
4690 mVertices[i + mNumS * (mNumT - 1)].mNormal = average; 4769 for (S32 i = 0; i < mNumS; i++)
4770 {
4771 LLVector3 norm = mVertices[i].mNormal + mVertices[mNumS*(mNumT-1)+i].mNormal;
4772 mVertices[i].mNormal = norm;
4773 mVertices[mNumS*(mNumT-1)+i].mNormal = norm;
4774 }
4775
4691 } 4776 }
4692 }
4693 4777
4778 }
4694 4779
4695 4780
4696 //normalize normals and binormals here so the meshes that reference 4781 //normalize normals and binormals here so the meshes that reference
diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h
index 6ac07f5..3973f70 100644
--- a/linden/indra/llmath/llvolume.h
+++ b/linden/indra/llmath/llvolume.h
@@ -174,7 +174,7 @@ const LLFaceID LL_FACE_OUTER_SIDE_3 = 0x1 << 8;
174const U8 LL_SCULPT_TYPE_NONE = 0; 174const U8 LL_SCULPT_TYPE_NONE = 0;
175const U8 LL_SCULPT_TYPE_SPHERE = 1; 175const U8 LL_SCULPT_TYPE_SPHERE = 1;
176const U8 LL_SCULPT_TYPE_TORUS = 2; 176const U8 LL_SCULPT_TYPE_TORUS = 2;
177const U8 LL_SCULPT_TYPE_PLAIN = 3; 177const U8 LL_SCULPT_TYPE_PLANE = 3;
178const U8 LL_SCULPT_TYPE_CYLINDER = 4; 178const U8 LL_SCULPT_TYPE_CYLINDER = 4;
179 179
180 180
@@ -860,9 +860,6 @@ public:
860 BOOL isUnique() const { return mUnique; } 860 BOOL isUnique() const { return mUnique; }
861 861
862 S32 getSculptLevel() const { return mSculptLevel; } 862 S32 getSculptLevel() const { return mSculptLevel; }
863 void setSculptLevel(S32 level) { mSculptLevel = level; }
864
865 U8 getSculptType() const { return mSculptType; }
866 863
867 S32 *getTriangleIndices(U32 &num_indices) const; 864 S32 *getTriangleIndices(U32 &num_indices) const;
868 void generateSilhouetteVertices(std::vector<LLVector3> &vertices, std::vector<LLVector3> &normals, std::vector<S32> &segments, const LLVector3& view_vec, 865 void generateSilhouetteVertices(std::vector<LLVector3> &vertices, std::vector<LLVector3> &normals, std::vector<S32> &segments, const LLVector3& view_vec,
@@ -908,7 +905,6 @@ protected:
908 BOOL mUnique; 905 BOOL mUnique;
909 F32 mDetail; 906 F32 mDetail;
910 S32 mSculptLevel; 907 S32 mSculptLevel;
911 U8 mSculptType;
912 908
913 LLVolumeParams mParams; 909 LLVolumeParams mParams;
914 LLPath *mPathp; 910 LLPath *mPathp;
diff --git a/linden/indra/llmath/v3color.cpp b/linden/indra/llmath/v3color.cpp
index 5464a0b..5378bc5 100644
--- a/linden/indra/llmath/v3color.cpp
+++ b/linden/indra/llmath/v3color.cpp
@@ -110,4 +110,4 @@ void LLColor3::calcHSL(F32* hue, F32* saturation, F32* luminance) const
110 if (hue) *hue = H; 110 if (hue) *hue = H;
111 if (saturation) *saturation = S; 111 if (saturation) *saturation = S;
112 if (luminance) *luminance = L; 112 if (luminance) *luminance = L;
113} \ No newline at end of file 113}
diff --git a/linden/indra/llmedia/llmediaengine.cpp b/linden/indra/llmedia/llmediaengine.cpp
index 34f63b7..c75ed32 100644
--- a/linden/indra/llmedia/llmediaengine.cpp
+++ b/linden/indra/llmedia/llmediaengine.cpp
@@ -26,6 +26,7 @@
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28 28
29#include "linden_common.h"
29#include "llmediaengine.h" 30#include "llmediaengine.h"
30 31
31#include "indra_constants.h" 32#include "indra_constants.h"
diff --git a/linden/indra/llmessage/llassetstorage.cpp b/linden/indra/llmessage/llassetstorage.cpp
index c8610a7..8696438 100644
--- a/linden/indra/llmessage/llassetstorage.cpp
+++ b/linden/indra/llmessage/llassetstorage.cpp
@@ -162,6 +162,8 @@ LLAssetRequest::LLAssetRequest(const LLUUID &uuid, const LLAssetType::EType type
162 mHost(), 162 mHost(),
163 mIsTemp( FALSE ), 163 mIsTemp( FALSE ),
164 mIsLocal(FALSE), 164 mIsLocal(FALSE),
165 mIsUserWaiting(FALSE),
166 mTimeout(LL_ASSET_STORAGE_TIMEOUT),
165 mIsPriority(FALSE), 167 mIsPriority(FALSE),
166 mDataSentInFirstPacket(FALSE), 168 mDataSentInFirstPacket(FALSE),
167 mDataIsInVFS( FALSE ) 169 mDataIsInVFS( FALSE )
@@ -1270,7 +1272,9 @@ void LLAssetStorage::storeAssetData(
1270 void* user_data, 1272 void* user_data,
1271 bool temp_file, 1273 bool temp_file,
1272 bool is_priority, 1274 bool is_priority,
1273 bool store_local) 1275 bool store_local,
1276 bool user_waiting,
1277 F64 timeout)
1274{ 1278{
1275 llwarns << "storeAssetData: wrong version called" << llendl; 1279 llwarns << "storeAssetData: wrong version called" << llendl;
1276} 1280}
@@ -1285,7 +1289,9 @@ void LLAssetStorage::storeAssetData(
1285 bool temp_file , 1289 bool temp_file ,
1286 bool is_priority, 1290 bool is_priority,
1287 bool store_local, 1291 bool store_local,
1288 const LLUUID& requesting_agent_id) 1292 const LLUUID& requesting_agent_id,
1293 bool user_waiting,
1294 F64 timeout)
1289{ 1295{
1290 llwarns << "storeAssetData: wrong version called" << llendl; 1296 llwarns << "storeAssetData: wrong version called" << llendl;
1291} 1297}
@@ -1299,7 +1305,9 @@ void LLAssetStorage::storeAssetData(
1299 LLStoreAssetCallback callback, 1305 LLStoreAssetCallback callback,
1300 void* user_data, 1306 void* user_data,
1301 bool temp_file, 1307 bool temp_file,
1302 bool is_priority) 1308 bool is_priority,
1309 bool user_waiting,
1310 F64 timeout)
1303{ 1311{
1304 llwarns << "storeAssetData: wrong version called" << llendl; 1312 llwarns << "storeAssetData: wrong version called" << llendl;
1305} 1313}
@@ -1313,7 +1321,9 @@ void LLAssetStorage::storeAssetData(
1313 LLStoreAssetCallback callback, 1321 LLStoreAssetCallback callback,
1314 void* user_data, 1322 void* user_data,
1315 bool temp_file, 1323 bool temp_file,
1316 bool is_priority) 1324 bool is_priority,
1325 bool user_waiting,
1326 F64 timeout)
1317{ 1327{
1318 llwarns << "storeAssetData: wrong version called" << llendl; 1328 llwarns << "storeAssetData: wrong version called" << llendl;
1319} 1329}
diff --git a/linden/indra/llmessage/llassetstorage.h b/linden/indra/llmessage/llassetstorage.h
index f80a77d..ab12b7a 100644
--- a/linden/indra/llmessage/llassetstorage.h
+++ b/linden/indra/llmessage/llassetstorage.h
@@ -95,6 +95,7 @@ public:
95 95
96 void setUUID(const LLUUID& id) { mUUID = id; } 96 void setUUID(const LLUUID& id) { mUUID = id; }
97 void setType(LLAssetType::EType type) { mType = type; } 97 void setType(LLAssetType::EType type) { mType = type; }
98 void setTimeout (F64 timeout) { mTimeout = timeout; }
98 99
99protected: 100protected:
100 LLUUID mUUID; 101 LLUUID mUUID;
@@ -109,7 +110,9 @@ public:
109 LLHost mHost; 110 LLHost mHost;
110 BOOL mIsTemp; 111 BOOL mIsTemp;
111 BOOL mIsLocal; 112 BOOL mIsLocal;
113 BOOL mIsUserWaiting; // We don't want to try forever if a user is waiting for a result.
112 F64 mTime; // Message system time 114 F64 mTime; // Message system time
115 F64 mTimeout; // Amount of time before timing out.
113 BOOL mIsPriority; 116 BOOL mIsPriority;
114 BOOL mDataSentInFirstPacket; 117 BOOL mDataSentInFirstPacket;
115 BOOL mDataIsInVFS; 118 BOOL mDataIsInVFS;
@@ -252,7 +255,9 @@ public:
252 void* user_data, 255 void* user_data,
253 bool temp_file = false, 256 bool temp_file = false,
254 bool is_priority = false, 257 bool is_priority = false,
255 bool store_local = false); 258 bool store_local = false,
259 bool user_waiting= false,
260 F64 timeout=LL_ASSET_STORAGE_TIMEOUT);
256 261
257 /* 262 /*
258 * AssetID version 263 * AssetID version
@@ -266,7 +271,9 @@ public:
266 bool temp_file = false, 271 bool temp_file = false,
267 bool is_priority = false, 272 bool is_priority = false,
268 bool store_local = false, 273 bool store_local = false,
269 const LLUUID& requesting_agent_id = LLUUID::null); 274 const LLUUID& requesting_agent_id = LLUUID::null,
275 bool user_waiting= false,
276 F64 timeout=LL_ASSET_STORAGE_TIMEOUT);
270 277
271 virtual void checkForTimeouts(); 278 virtual void checkForTimeouts();
272 279
@@ -360,7 +367,9 @@ public:
360 LLStoreAssetCallback callback, 367 LLStoreAssetCallback callback,
361 void* user_data, 368 void* user_data,
362 bool temp_file = false, 369 bool temp_file = false,
363 bool is_priority = false); 370 bool is_priority = false,
371 bool user_waiting = false,
372 F64 timeout = LL_ASSET_STORAGE_TIMEOUT);
364 373
365 /* 374 /*
366 * TransactionID version 375 * TransactionID version
@@ -372,7 +381,9 @@ public:
372 LLStoreAssetCallback callback, 381 LLStoreAssetCallback callback,
373 void *user_data, 382 void *user_data,
374 bool temp_file = false, 383 bool temp_file = false,
375 bool is_priority = false); 384 bool is_priority = false,
385 bool user_waiting = false,
386 F64 timeout = LL_ASSET_STORAGE_TIMEOUT);
376 387
377 static void legacyGetDataCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType, void *user_data, S32 status); 388 static void legacyGetDataCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType, void *user_data, S32 status);
378 static void legacyStoreDataCallback(const LLUUID &uuid, void *user_data, S32 status); 389 static void legacyStoreDataCallback(const LLUUID &uuid, void *user_data, S32 status);
diff --git a/linden/indra/llmessage/llblowfishcipher.cpp b/linden/indra/llmessage/llblowfishcipher.cpp
index 1772078..62464de 100644
--- a/linden/indra/llmessage/llblowfishcipher.cpp
+++ b/linden/indra/llmessage/llblowfishcipher.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file llblowcipher.cpp 2 * @file llblowfishcipher.cpp
3 * @brief Wrapper around OpenSSL Blowfish encryption algorithm. 3 * @brief Wrapper around OpenSSL Blowfish encryption algorithm.
4 * 4 *
5 * We do not have OpenSSL headers or libraries on Windows, so this 5 * We do not have OpenSSL headers or libraries on Windows, so this
@@ -85,33 +85,33 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
85 << " iv_len " << iv_length 85 << " iv_len " << iv_length
86 << llendl; 86 << llendl;
87 87
88 int output_len = 0; 88 int output_len = 0;
89 int temp_len = 0; 89 int temp_len = 0;
90 if (!EVP_EncryptUpdate(&context, 90 if (!EVP_EncryptUpdate(&context,
91 dst, 91 dst,
92 &output_len, 92 &output_len,
93 src, 93 src,
94 src_len)) 94 src_len))
95 { 95 {
96 llwarns << "LLBlowfishCipher::encrypt EVP_EncryptUpdate failure" << llendl; 96 llwarns << "LLBlowfishCipher::encrypt EVP_EncryptUpdate failure" << llendl;
97 goto ERROR; 97 goto ERROR;
98 } 98 }
99 99
100 // There may be some final data left to encrypt if the input is 100 // There may be some final data left to encrypt if the input is
101 // not an exact multiple of the block size. 101 // not an exact multiple of the block size.
102 if (!EVP_EncryptFinal_ex(&context, (unsigned char*)(dst + output_len), &temp_len)) 102 if (!EVP_EncryptFinal_ex(&context, (unsigned char*)(dst + output_len), &temp_len))
103 { 103 {
104 llwarns << "LLBlowfishCipher::encrypt EVP_EncryptFinal failure" << llendl; 104 llwarns << "LLBlowfishCipher::encrypt EVP_EncryptFinal failure" << llendl;
105 goto ERROR; 105 goto ERROR;
106 } 106 }
107 output_len += temp_len; 107 output_len += temp_len;
108 108
109 EVP_CIPHER_CTX_cleanup(&context); 109 EVP_CIPHER_CTX_cleanup(&context);
110 return output_len; 110 return output_len;
111 111
112ERROR: 112ERROR:
113 EVP_CIPHER_CTX_cleanup(&context); 113 EVP_CIPHER_CTX_cleanup(&context);
114 return 0; 114 return 0;
115} 115}
116 116
117// virtual 117// virtual
diff --git a/linden/indra/llmessage/llcachename.cpp b/linden/indra/llmessage/llcachename.cpp
index 2a21b5a..d960429 100644
--- a/linden/indra/llmessage/llcachename.cpp
+++ b/linden/indra/llmessage/llcachename.cpp
@@ -66,132 +66,130 @@ LLCacheName* gCacheName = NULL;
66/// class LLCacheNameEntry 66/// class LLCacheNameEntry
67/// --------------------------------------------------------------------------- 67/// ---------------------------------------------------------------------------
68 68
69namespace { 69class LLCacheNameEntry
70 class LLCacheNameEntry 70{
71 { 71public:
72 public: 72 LLCacheNameEntry();
73 LLCacheNameEntry();
74 73
75 public: 74public:
76 bool mIsGroup; 75 bool mIsGroup;
77 U32 mCreateTime; // unix time_t 76 U32 mCreateTime; // unix time_t
78 char mFirstName[DB_FIRST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/ 77 char mFirstName[DB_FIRST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
79 char mLastName[DB_LAST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/ 78 char mLastName[DB_LAST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
80 char mGroupName[DB_GROUP_NAME_BUF_SIZE]; /*Flawfinder: ignore*/ 79 char mGroupName[DB_GROUP_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
81 }; 80};
82 81
83 LLCacheNameEntry::LLCacheNameEntry() 82LLCacheNameEntry::LLCacheNameEntry()
84 { 83{
85 mFirstName[0] = '\0'; 84 mFirstName[0] = '\0';
86 mLastName[0] = '\0'; 85 mLastName[0] = '\0';
87 mGroupName[0] = '\0'; 86 mGroupName[0] = '\0';
88 } 87}
89 88
90 89
91 class PendingReply 90class PendingReply
92 { 91{
93 public: 92public:
94 LLUUID mID; 93 LLUUID mID;
95 LLCacheNameCallback mCallback; 94 LLCacheNameCallback mCallback;
96 LLHost mHost; 95 LLHost mHost;
97 void* mData; 96 void* mData;
98 PendingReply(const LLUUID& id, LLCacheNameCallback callback, void* data = NULL) 97 PendingReply(const LLUUID& id, LLCacheNameCallback callback, void* data = NULL)
99 : mID(id), mCallback(callback), mData(data) 98 : mID(id), mCallback(callback), mData(data)
100 { } 99 { }
101 100
102 PendingReply(const LLUUID& id, const LLHost& host) 101 PendingReply(const LLUUID& id, const LLHost& host)
103 : mID(id), mCallback(0), mHost(host) 102 : mID(id), mCallback(0), mHost(host)
104 { } 103 { }
105 104
106 void done() { mID.setNull(); } 105 void done() { mID.setNull(); }
107 bool isDone() const { return mID.isNull() != FALSE; } 106 bool isDone() const { return mID.isNull() != FALSE; }
108 }; 107};
109 108
110 class ReplySender 109class ReplySender
111 { 110{
112 public: 111public:
113 ReplySender(LLMessageSystem* msg); 112 ReplySender(LLMessageSystem* msg);
114 ~ReplySender(); 113 ~ReplySender();
115 114
116 void send(const LLUUID& id, 115 void send(const LLUUID& id,
117 const LLCacheNameEntry& entry, const LLHost& host); 116 const LLCacheNameEntry& entry, const LLHost& host);
118 117
119 private: 118private:
120 void flush(); 119 void flush();
121 120
122 LLMessageSystem* mMsg; 121 LLMessageSystem* mMsg;
123 bool mPending; 122 bool mPending;
124 bool mCurrIsGroup; 123 bool mCurrIsGroup;
125 LLHost mCurrHost; 124 LLHost mCurrHost;
126 }; 125};
127 126
128 ReplySender::ReplySender(LLMessageSystem* msg) 127ReplySender::ReplySender(LLMessageSystem* msg)
129 : mMsg(msg), mPending(false) 128 : mMsg(msg), mPending(false)
130 { } 129{ }
131 130
132 ReplySender::~ReplySender() 131ReplySender::~ReplySender()
133 { 132{
134 flush(); 133 flush();
135 } 134}
136 135
137 void ReplySender::send(const LLUUID& id, 136void ReplySender::send(const LLUUID& id,
138 const LLCacheNameEntry& entry, const LLHost& host) 137 const LLCacheNameEntry& entry, const LLHost& host)
138{
139 if (mPending)
139 { 140 {
140 if (mPending) 141 if (mCurrIsGroup != entry.mIsGroup
142 || mCurrHost != host)
141 { 143 {
142 if (mCurrIsGroup != entry.mIsGroup 144 flush();
143 || mCurrHost != host)
144 {
145 flush();
146 }
147 } 145 }
146 }
148 147
149 if (!mPending) 148 if (!mPending)
150 { 149 {
151 mPending = true; 150 mPending = true;
152 mCurrIsGroup = entry.mIsGroup; 151 mCurrIsGroup = entry.mIsGroup;
153 mCurrHost = host; 152 mCurrHost = host;
154
155 if(mCurrIsGroup)
156 mMsg->newMessageFast(_PREHASH_UUIDGroupNameReply);
157 else
158 mMsg->newMessageFast(_PREHASH_UUIDNameReply);
159 }
160 153
161 mMsg->nextBlockFast(_PREHASH_UUIDNameBlock);
162 mMsg->addUUIDFast(_PREHASH_ID, id);
163 if(mCurrIsGroup) 154 if(mCurrIsGroup)
164 { 155 mMsg->newMessageFast(_PREHASH_UUIDGroupNameReply);
165 mMsg->addStringFast(_PREHASH_GroupName, entry.mGroupName);
166 }
167 else 156 else
168 { 157 mMsg->newMessageFast(_PREHASH_UUIDNameReply);
169 mMsg->addStringFast(_PREHASH_FirstName, entry.mFirstName); 158 }
170 mMsg->addStringFast(_PREHASH_LastName, entry.mLastName);
171 }
172 159
173 if(mMsg->isSendFullFast(_PREHASH_UUIDNameBlock)) 160 mMsg->nextBlockFast(_PREHASH_UUIDNameBlock);
174 { 161 mMsg->addUUIDFast(_PREHASH_ID, id);
175 flush(); 162 if(mCurrIsGroup)
176 } 163 {
164 mMsg->addStringFast(_PREHASH_GroupName, entry.mGroupName);
165 }
166 else
167 {
168 mMsg->addStringFast(_PREHASH_FirstName, entry.mFirstName);
169 mMsg->addStringFast(_PREHASH_LastName, entry.mLastName);
177 } 170 }
178 171
179 void ReplySender::flush() 172 if(mMsg->isSendFullFast(_PREHASH_UUIDNameBlock))
180 { 173 {
181 if (mPending) 174 flush();
182 {
183 mMsg->sendReliable(mCurrHost);
184 mPending = false;
185 }
186 } 175 }
176}
187 177
178void ReplySender::flush()
179{
180 if (mPending)
181 {
182 mMsg->sendReliable(mCurrHost);
183 mPending = false;
184 }
185}
188 186
189 typedef std::set<LLUUID> AskQueue; 187
190 typedef std::vector<PendingReply> ReplyQueue; 188typedef std::set<LLUUID> AskQueue;
191 typedef std::map<LLUUID,U32> PendingQueue; 189typedef std::vector<PendingReply> ReplyQueue;
192 typedef std::map<LLUUID, LLCacheNameEntry*> Cache; 190typedef std::map<LLUUID,U32> PendingQueue;
193 typedef std::vector<LLCacheNameCallback> Observers; 191typedef std::map<LLUUID, LLCacheNameEntry*> Cache;
194}; 192typedef std::vector<LLCacheNameCallback> Observers;
195 193
196class LLCacheName::Impl 194class LLCacheName::Impl
197{ 195{
diff --git a/linden/indra/llmessage/llcurl.cpp b/linden/indra/llmessage/llcurl.cpp
index 5eaaab0..362204a 100644
--- a/linden/indra/llmessage/llcurl.cpp
+++ b/linden/indra/llmessage/llcurl.cpp
@@ -28,6 +28,8 @@
28 * COMPLETENESS OR PERFORMANCE. 28 * COMPLETENESS OR PERFORMANCE.
29 */ 29 */
30 30
31#include "linden_common.h"
32
31#include "llcurl.h" 33#include "llcurl.h"
32 34
33#include <iomanip> 35#include <iomanip>
diff --git a/linden/indra/llmessage/llhttpassetstorage.cpp b/linden/indra/llmessage/llhttpassetstorage.cpp
index 5a0cdad..d83349b 100644
--- a/linden/indra/llmessage/llhttpassetstorage.cpp
+++ b/linden/indra/llmessage/llhttpassetstorage.cpp
@@ -428,14 +428,18 @@ void LLHTTPAssetStorage::storeAssetData(
428 bool temp_file, 428 bool temp_file,
429 bool is_priority, 429 bool is_priority,
430 bool store_local, 430 bool store_local,
431 const LLUUID& requesting_agent_id) 431 const LLUUID& requesting_agent_id,
432 bool user_waiting,
433 F64 timeout)
432{ 434{
433 if (mVFS->getExists(uuid, type)) 435 if (mVFS->getExists(uuid, type))
434 { 436 {
435 LLAssetRequest *req = new LLAssetRequest(uuid, type); 437 LLAssetRequest *req = new LLAssetRequest(uuid, type);
436 req->mUpCallback = callback; 438 req->mUpCallback = callback;
437 req->mUserData = user_data; 439 req->mUserData = user_data;
438 req->mRequestingAgentID = requesting_agent_id; 440 req->mRequestingAgentID = requesting_agent_id;
441 req->mIsUserWaiting = user_waiting;
442 req->mTimeout = timeout;
439 443
440 // this will get picked up and transmitted in checkForTimeouts 444 // this will get picked up and transmitted in checkForTimeouts
441 if(store_local) 445 if(store_local)
@@ -469,7 +473,9 @@ void LLHTTPAssetStorage::storeAssetData(
469 LLStoreAssetCallback callback, 473 LLStoreAssetCallback callback,
470 void* user_data, 474 void* user_data,
471 bool temp_file, 475 bool temp_file,
472 bool is_priority) 476 bool is_priority,
477 bool user_waiting,
478 F64 timeout)
473{ 479{
474 llinfos << "LLAssetStorage::storeAssetData (legacy)" << asset_id << ":" << LLAssetType::lookup(asset_type) << llendl; 480 llinfos << "LLAssetStorage::storeAssetData (legacy)" << asset_id << ":" << LLAssetType::lookup(asset_type) << llendl;
475 481
@@ -509,7 +515,11 @@ void LLHTTPAssetStorage::storeAssetData(
509 legacyStoreDataCallback, 515 legacyStoreDataCallback,
510 (void**)legacy, 516 (void**)legacy,
511 temp_file, 517 temp_file,
512 is_priority); 518 is_priority,
519 false,
520 LLUUID::null,
521 user_waiting,
522 timeout);
513 } 523 }
514 else 524 else
515 { 525 {
@@ -608,7 +618,19 @@ bool LLHTTPAssetStorage::deletePendingRequest(LLAssetStorage::ERequestType rt,
608 // This request was found in the pending list. Move it to the end! 618 // This request was found in the pending list. Move it to the end!
609 LLAssetRequest* pending_req = *result; 619 LLAssetRequest* pending_req = *result;
610 pending->remove(pending_req); 620 pending->remove(pending_req);
611 pending->push_back(pending_req); 621
622 if (!pending_req->mIsUserWaiting) //A user is waiting on this request. Toss it.
623 {
624 pending->push_back(pending_req);
625 }
626 else
627 {
628 if (pending_req->mUpCallback) //Clean up here rather than _callUploadCallbacks because this request is already cleared the req.
629 {
630 pending_req->mUpCallback(pending_req->getUUID(), pending_req->mUserData, -1);
631 }
632
633 }
612 634
613 llinfos << "Asset " << getRequestName(rt) << " request for " 635 llinfos << "Asset " << getRequestName(rt) << " request for "
614 << asset_id << "." << LLAssetType::lookup(asset_type) 636 << asset_id << "." << LLAssetType::lookup(asset_type)
@@ -744,6 +766,14 @@ void LLHTTPAssetStorage::checkForTimeouts()
744 766
745 LLHTTPAssetRequest *new_req = new LLHTTPAssetRequest(this, req->getUUID(), 767 LLHTTPAssetRequest *new_req = new LLHTTPAssetRequest(this, req->getUUID(),
746 req->getType(), RT_UPLOAD, tmp_url, mCurlMultiHandle); 768 req->getType(), RT_UPLOAD, tmp_url, mCurlMultiHandle);
769
770 if (req->mIsUserWaiting) //If a user is waiting on a realtime response, we want to perserve information across upload attempts.
771 {
772 new_req->mTime = req->mTime;
773 new_req->mTimeout = req->mTimeout;
774 new_req->mIsUserWaiting = req->mIsUserWaiting;
775 }
776
747 if (do_compress) 777 if (do_compress)
748 { 778 {
749 new_req->prepareCompressedUpload(); 779 new_req->prepareCompressedUpload();
@@ -839,11 +869,12 @@ void LLHTTPAssetStorage::checkForTimeouts()
839 if (curl_msg && curl_msg->msg == CURLMSG_DONE) 869 if (curl_msg && curl_msg->msg == CURLMSG_DONE)
840 { 870 {
841 long curl_result = 0; 871 long curl_result = 0;
842 S32 xfer_result = 0; 872 S32 xfer_result = LL_ERR_NOERR;
843 873
844 LLHTTPAssetRequest *req = NULL; 874 LLHTTPAssetRequest *req = NULL;
845 curl_easy_getinfo(curl_msg->easy_handle, CURLINFO_PRIVATE, &req); 875 curl_easy_getinfo(curl_msg->easy_handle, CURLINFO_PRIVATE, &req);
846 876
877 // TODO: Throw curl_result at all callbacks.
847 curl_easy_getinfo(curl_msg->easy_handle, CURLINFO_HTTP_CODE, &curl_result); 878 curl_easy_getinfo(curl_msg->easy_handle, CURLINFO_HTTP_CODE, &curl_result);
848 if (RT_UPLOAD == req->mRequestType || RT_LOCALUPLOAD == req->mRequestType) 879 if (RT_UPLOAD == req->mRequestType || RT_LOCALUPLOAD == req->mRequestType)
849 { 880 {
@@ -865,6 +896,12 @@ void LLHTTPAssetStorage::checkForTimeouts()
865 { 896 {
866 llwarns << "Re-requesting upload for " << req->getUUID() << ". Received upload error to " << req->mURLBuffer << 897 llwarns << "Re-requesting upload for " << req->getUUID() << ". Received upload error to " << req->mURLBuffer <<
867 " with result " << curl_easy_strerror(curl_msg->data.result) << ", http result " << curl_result << llendl; 898 " with result " << curl_easy_strerror(curl_msg->data.result) << ", http result " << curl_result << llendl;
899
900 ////HACK (probably) I am sick of this getting requeued and driving me mad.
901 //if (req->mIsUserWaiting)
902 //{
903 // deletePendingRequest(RT_UPLOAD, req->getType(), req->getUUID());
904 //}
868 } 905 }
869 else 906 else
870 { 907 {
@@ -949,14 +986,23 @@ void LLHTTPAssetStorage::checkForTimeouts()
949 986
950void LLHTTPAssetStorage::bumpTimedOutUploads() 987void LLHTTPAssetStorage::bumpTimedOutUploads()
951{ 988{
989 bool user_waiting=FALSE;
990
991 F64 mt_secs = LLMessageSystem::getMessageTimeSeconds();
992
993 if (mPendingUploads.size())
994 {
995 request_list_t::iterator it = mPendingUploads.begin();
996 LLAssetRequest* req = *it;
997 user_waiting=req->mIsUserWaiting;
998 }
999
952 // No point bumping currently running uploads if there are no others in line. 1000 // No point bumping currently running uploads if there are no others in line.
953 if (!(mPendingUploads.size() > mRunningUploads.size())) 1001 if (!(mPendingUploads.size() > mRunningUploads.size()) && !user_waiting)
954 { 1002 {
955 return; 1003 return;
956 } 1004 }
957 1005
958 F64 mt_secs = LLMessageSystem::getMessageTimeSeconds();
959
960 // deletePendingRequest will modify the mRunningUploads list so we don't want to iterate over it. 1006 // deletePendingRequest will modify the mRunningUploads list so we don't want to iterate over it.
961 request_list_t temp_running = mRunningUploads; 1007 request_list_t temp_running = mRunningUploads;
962 1008
@@ -967,7 +1013,7 @@ void LLHTTPAssetStorage::bumpTimedOutUploads()
967 //request_list_t::iterator curiter = iter++; 1013 //request_list_t::iterator curiter = iter++;
968 LLAssetRequest* req = *it; 1014 LLAssetRequest* req = *it;
969 1015
970 if ( LL_ASSET_STORAGE_TIMEOUT < (mt_secs - req->mTime) ) 1016 if ( req->mTimeout < (mt_secs - req->mTime) )
971 { 1017 {
972 llwarns << "Asset upload request timed out for " 1018 llwarns << "Asset upload request timed out for "
973 << req->getUUID() << "." 1019 << req->getUUID() << "."
diff --git a/linden/indra/llmessage/llhttpassetstorage.h b/linden/indra/llmessage/llhttpassetstorage.h
index 2977301..962bece 100644
--- a/linden/indra/llmessage/llhttpassetstorage.h
+++ b/linden/indra/llmessage/llhttpassetstorage.h
@@ -66,7 +66,9 @@ public:
66 bool temp_file = false, 66 bool temp_file = false,
67 bool is_priority = false, 67 bool is_priority = false,
68 bool store_local = false, 68 bool store_local = false,
69 const LLUUID& requesting_agent_id = LLUUID::null); 69 const LLUUID& requesting_agent_id = LLUUID::null,
70 bool user_waiting=FALSE,
71 F64 timeout=LL_ASSET_STORAGE_TIMEOUT);
70 72
71 virtual void storeAssetData( 73 virtual void storeAssetData(
72 const char* filename, 74 const char* filename,
@@ -75,7 +77,9 @@ public:
75 LLStoreAssetCallback callback, 77 LLStoreAssetCallback callback,
76 void* user_data, 78 void* user_data,
77 bool temp_file, 79 bool temp_file,
78 bool is_priority); 80 bool is_priority,
81 bool user_waiting=FALSE,
82 F64 timeout=LL_ASSET_STORAGE_TIMEOUT);
79 83
80 virtual LLSD getPendingDetails(ERequestType rt, 84 virtual LLSD getPendingDetails(ERequestType rt,
81 LLAssetType::EType asset_type, 85 LLAssetType::EType asset_type,
diff --git a/linden/indra/llmessage/llhttpnode.cpp b/linden/indra/llmessage/llhttpnode.cpp
index 97064a1..25413b4 100644
--- a/linden/indra/llmessage/llhttpnode.cpp
+++ b/linden/indra/llmessage/llhttpnode.cpp
@@ -29,7 +29,7 @@
29#include "linden_common.h" 29#include "linden_common.h"
30#include "llhttpnode.h" 30#include "llhttpnode.h"
31 31
32#include "boost/tokenizer.hpp" 32#include <boost/tokenizer.hpp>
33 33
34#include "llstl.h" 34#include "llstl.h"
35 35
diff --git a/linden/indra/llmessage/lliohttpserver.cpp b/linden/indra/llmessage/lliohttpserver.cpp
index d7fc54e..5c96102 100644
--- a/linden/indra/llmessage/lliohttpserver.cpp
+++ b/linden/indra/llmessage/lliohttpserver.cpp
@@ -49,7 +49,7 @@
49 49
50#include <sstream> 50#include <sstream>
51 51
52#include "boost/tokenizer.hpp" 52#include <boost/tokenizer.hpp>
53 53
54static const char HTTP_VERSION_STR[] = "HTTP/1.0"; 54static const char HTTP_VERSION_STR[] = "HTTP/1.0";
55static const std::string CONTEXT_REQUEST("request"); 55static const std::string CONTEXT_REQUEST("request");
diff --git a/linden/indra/llmessage/lliosocket.cpp b/linden/indra/llmessage/lliosocket.cpp
index 0ceb436..8bc347c 100644
--- a/linden/indra/llmessage/lliosocket.cpp
+++ b/linden/indra/llmessage/lliosocket.cpp
@@ -441,6 +441,8 @@ LLIOPipe::EStatus LLIOSocketWriter::process_impl(
441#if LL_WINDOWS 441#if LL_WINDOWS
442 if (status == 730035) 442 if (status == 730035)
443 break; 443 break;
444#else
445 (void) status;
444#endif 446#endif
445 mLastWritten = segment.data() + len - 1; 447 mLastWritten = segment.data() + len - 1;
446 448
diff --git a/linden/indra/llmessage/llmessagethrottle.cpp b/linden/indra/llmessage/llmessagethrottle.cpp
index 07c22a5..bbaa9d8 100644
--- a/linden/indra/llmessage/llmessagethrottle.cpp
+++ b/linden/indra/llmessage/llmessagethrottle.cpp
@@ -26,6 +26,8 @@
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28 28
29#include "linden_common.h"
30
29#include "llhash.h" 31#include "llhash.h"
30 32
31#include "llmessagethrottle.h" 33#include "llmessagethrottle.h"
diff --git a/linden/indra/llmessage/llservicebuilder.cpp b/linden/indra/llmessage/llservicebuilder.cpp
index 86b7d9d..91040c0 100644
--- a/linden/indra/llmessage/llservicebuilder.cpp
+++ b/linden/indra/llmessage/llservicebuilder.cpp
@@ -26,6 +26,7 @@
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27*/ 27*/
28 28
29#include "linden_common.h"
29#include "llapp.h" 30#include "llapp.h"
30#include "llfile.h" 31#include "llfile.h"
31#include "llservicebuilder.h" 32#include "llservicebuilder.h"
diff --git a/linden/indra/llmessage/lltemplatemessagereader.cpp b/linden/indra/llmessage/lltemplatemessagereader.cpp
index 892efb8..bb3f4f4 100644
--- a/linden/indra/llmessage/lltemplatemessagereader.cpp
+++ b/linden/indra/llmessage/lltemplatemessagereader.cpp
@@ -594,7 +594,7 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
594 tsize = tsizeh; 594 tsize = tsizeh;
595 break; 595 break;
596 case 4: 596 case 4:
597 htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U32, 4); 597 htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4);
598 break; 598 break;
599 default: 599 default:
600 llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl; 600 llerrs << "Attempting to read variable field with unknown size of " << data_size << llendl;
diff --git a/linden/indra/llmessage/message.cpp b/linden/indra/llmessage/message.cpp
index ab41cca..d1c2875 100644
--- a/linden/indra/llmessage/message.cpp
+++ b/linden/indra/llmessage/message.cpp
@@ -1341,7 +1341,7 @@ LLMessageSystem::~LLMessageSystem()
1341 1341
1342 if (!mbError) 1342 if (!mbError)
1343 { 1343 {
1344 end_net(); 1344 end_net(mSocket);
1345 } 1345 }
1346 1346
1347 delete mTemplateMessageReader; 1347 delete mTemplateMessageReader;
@@ -1355,6 +1355,9 @@ LLMessageSystem::~LLMessageSystem()
1355 delete mLLSDMessageReader; 1355 delete mLLSDMessageReader;
1356 mLLSDMessageReader = NULL; 1356 mLLSDMessageReader = NULL;
1357 1357
1358 delete mLLSDMessageBuilder;
1359 mLLSDMessageBuilder = NULL;
1360
1358 delete mPollInfop; 1361 delete mPollInfop;
1359 mPollInfop = NULL; 1362 mPollInfop = NULL;
1360 1363
@@ -4164,11 +4167,13 @@ void LLMessageSystem::dumpPacketToLog()
4164 char line_buffer[256]; /* Flawfinder: ignore */ 4167 char line_buffer[256]; /* Flawfinder: ignore */
4165 S32 i; 4168 S32 i;
4166 S32 cur_line_pos = 0; 4169 S32 cur_line_pos = 0;
4167
4168 S32 cur_line = 0; 4170 S32 cur_line = 0;
4171
4169 for (i = 0; i < mTrueReceiveSize; i++) 4172 for (i = 0; i < mTrueReceiveSize; i++)
4170 { 4173 {
4171 snprintf(line_buffer + cur_line_pos*3, sizeof(line_buffer),"%02x ", mTrueReceiveBuffer[i]); /* Flawfinder: ignore */ 4174 S32 offset = cur_line_pos * 3;
4175 snprintf(line_buffer + offset, sizeof(line_buffer) - offset,
4176 "%02x ", mTrueReceiveBuffer[i]); /* Flawfinder: ignore */
4172 cur_line_pos++; 4177 cur_line_pos++;
4173 if (cur_line_pos >= 16) 4178 if (cur_line_pos >= 16)
4174 { 4179 {
@@ -4345,11 +4350,6 @@ std::string get_shared_secret()
4345 4350
4346typedef std::map<const char*, LLMessageBuilder*> BuilderMap; 4351typedef std::map<const char*, LLMessageBuilder*> BuilderMap;
4347 4352
4348static void setBuilder(BuilderMap& map, const char* name, LLMessageBuilder* builder)
4349{
4350 map[gMessageStringTable.getString(name)] = builder;
4351}
4352
4353void LLMessageSystem::newMessageFast(const char *name) 4353void LLMessageSystem::newMessageFast(const char *name)
4354{ 4354{
4355 if(LLMessageConfig::isMessageBuiltTemplate(name)) 4355 if(LLMessageConfig::isMessageBuiltTemplate(name))
diff --git a/linden/indra/llmessage/net.cpp b/linden/indra/llmessage/net.cpp
index c61f4a2..1395093 100644
--- a/linden/indra/llmessage/net.cpp
+++ b/linden/indra/llmessage/net.cpp
@@ -289,8 +289,12 @@ S32 start_net(S32& socket_out, int& nPort)
289 return 0; 289 return 0;
290} 290}
291 291
292void end_net() 292void end_net(S32& socket_out)
293{ 293{
294 if (socket_out < 0)
295 {
296 closesocket(socket_out);
297 }
294 WSACleanup(); 298 WSACleanup();
295} 299}
296 300
@@ -457,8 +461,12 @@ S32 start_net(S32& socket_out, int& nPort)
457 return 0; 461 return 0;
458} 462}
459 463
460void end_net() 464void end_net(S32& socket_out)
461{ 465{
466 if (socket_out < 0)
467 {
468 close(socket_out);
469 }
462} 470}
463 471
464int receive_packet(int hSocket, char * receiveBuffer) 472int receive_packet(int hSocket, char * receiveBuffer)
diff --git a/linden/indra/llmessage/net.h b/linden/indra/llmessage/net.h
index b2f931f..cfc1f88 100644
--- a/linden/indra/llmessage/net.h
+++ b/linden/indra/llmessage/net.h
@@ -40,7 +40,7 @@ class LLHost;
40// Returns 0 on success, non-zero on error. 40// Returns 0 on success, non-zero on error.
41// Sets socket handler/descriptor, changes nPort if port requested is unavailable. 41// Sets socket handler/descriptor, changes nPort if port requested is unavailable.
42S32 start_net(S32& socket_out, int& nPort); 42S32 start_net(S32& socket_out, int& nPort);
43void end_net(); 43void end_net(S32& socket_out);
44 44
45// returns size of packet or -1 in case of error 45// returns size of packet or -1 in case of error
46S32 receive_packet(int hSocket, char * receiveBuffer); 46S32 receive_packet(int hSocket, char * receiveBuffer);
diff --git a/linden/indra/llrender/llvertexbuffer.cpp b/linden/indra/llrender/llvertexbuffer.cpp
index 45d706f..7f24313 100644
--- a/linden/indra/llrender/llvertexbuffer.cpp
+++ b/linden/indra/llrender/llvertexbuffer.cpp
@@ -164,56 +164,6 @@ void LLVertexBuffer::clientCopy(F64 max_time)
164 164
165//---------------------------------------------------------------------------- 165//----------------------------------------------------------------------------
166 166
167// For debugging
168struct VTNC /// Simple
169{
170 F32 v1,v2,v3;
171 F32 n1,n2,n3;
172 F32 t1,t2;
173 U32 c;
174};
175static VTNC dbg_vtnc;
176
177struct VTUNCB // Simple + Bump
178{
179 F32 v1,v2,v3;
180 F32 n1,n2,n3;
181 F32 t1,t2;
182 F32 u1,u2;
183 F32 b1,b2,b3;
184 U32 c;
185};
186static VTUNCB dbg_vtuncb;
187
188struct VTUNC // Surfacepatch
189{
190 F32 v1,v2,v3;
191 F32 n1,n2,n3;
192 F32 t1,t2;
193 F32 u1,u2;
194 U32 c;
195};
196static VTUNC dbg_vtunc;
197
198struct VTNW /// Avatar
199{
200 F32 v1,v2,v3;
201 F32 n1,n2,n3;
202 F32 t1,t2;
203 F32 w;
204};
205static VTNW dbg_vtnw;
206
207struct VTNPAD /// Avatar Output
208{
209 F32 v1,v2,v3,p1;
210 F32 n1,n2,n3,p2;
211 F32 t1,t2,p3,p4;
212};
213static VTNPAD dbg_vtnpad;
214
215//----------------------------------------------------------------------------
216
217LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) : 167LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :
218 LLRefCount(), 168 LLRefCount(),
219 mNumVerts(0), mNumIndices(0), mUsage(usage), mGLBuffer(0), mGLIndices(0), 169 mNumVerts(0), mNumIndices(0), mUsage(usage), mGLBuffer(0), mGLIndices(0),
diff --git a/linden/indra/llui/llalertdialog.h b/linden/indra/llui/llalertdialog.h
index d389236..1add4a4 100644
--- a/linden/indra/llui/llalertdialog.h
+++ b/linden/indra/llui/llalertdialog.h
@@ -162,6 +162,15 @@ public:
162 return FALSE; 162 return FALSE;
163 } 163 }
164 } 164 }
165
166 void setIgnore(bool state)
167 {
168 if (mIgnorable)
169 {
170 LLAlertDialog::sSettings->setWarning(mIgnoreLabel, !state);
171 }
172 }
173
165 174
166public: 175public:
167 LLString mLabel; // Handle for access from code, etc 176 LLString mLabel; // Handle for access from code, etc
diff --git a/linden/indra/llui/llcombobox.cpp b/linden/indra/llui/llcombobox.cpp
index e00454a..27df619 100644
--- a/linden/indra/llui/llcombobox.cpp
+++ b/linden/indra/llui/llcombobox.cpp
@@ -66,8 +66,8 @@ LLComboBox::LLComboBox( const LLString& name, const LLRect &rect, const LLString
66 mAllowTextEntry(FALSE), 66 mAllowTextEntry(FALSE),
67 mMaxChars(20), 67 mMaxChars(20),
68 mTextEntryTentative(TRUE), 68 mTextEntryTentative(TRUE),
69 mPrearrangeCallback( NULL ),
70 mListPosition(BELOW), 69 mListPosition(BELOW),
70 mPrearrangeCallback( NULL ),
71 mTextEntryCallback( NULL ) 71 mTextEntryCallback( NULL )
72{ 72{
73 // For now, all comboboxes don't take keyboard focus when clicked. 73 // For now, all comboboxes don't take keyboard focus when clicked.
diff --git a/linden/indra/llui/llctrlselectioninterface.cpp b/linden/indra/llui/llctrlselectioninterface.cpp
index 3b71942..d3b83a2 100644
--- a/linden/indra/llui/llctrlselectioninterface.cpp
+++ b/linden/indra/llui/llctrlselectioninterface.cpp
@@ -25,6 +25,7 @@
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28#include "linden_common.h"
28 29
29#include "llctrlselectioninterface.h" 30#include "llctrlselectioninterface.h"
30 31
diff --git a/linden/indra/llui/lleditmenuhandler.cpp b/linden/indra/llui/lleditmenuhandler.cpp
index 85b4464..559cef4 100644
--- a/linden/indra/llui/lleditmenuhandler.cpp
+++ b/linden/indra/llui/lleditmenuhandler.cpp
@@ -26,7 +26,7 @@
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27*/ 27*/
28 28
29#include "stdtypes.h" 29#include "linden_common.h"
30 30
31#include "lleditmenuhandler.h" 31#include "lleditmenuhandler.h"
32 32
diff --git a/linden/indra/llui/lllineeditor.cpp b/linden/indra/llui/lllineeditor.cpp
index 44616b9..98286fa 100644
--- a/linden/indra/llui/lllineeditor.cpp
+++ b/linden/indra/llui/lllineeditor.cpp
@@ -220,6 +220,9 @@ LLString LLLineEditor::getWidgetTag() const
220 220
221void LLLineEditor::onFocusLost() 221void LLLineEditor::onFocusLost()
222{ 222{
223 // Need to notify early when loosing focus.
224 getWindow()->allowLanguageTextInput(FALSE);
225
223 LLUICtrl::onFocusLost(); 226 LLUICtrl::onFocusLost();
224 227
225 if( mCommitOnFocusLost && mText.getString() != mPrevText) 228 if( mCommitOnFocusLost && mText.getString() != mPrevText)
@@ -1130,7 +1133,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
1130 1133
1131 // handle ctrl-uparrow if we have a history enabled line editor. 1134 // handle ctrl-uparrow if we have a history enabled line editor.
1132 case KEY_UP: 1135 case KEY_UP:
1133 if( mHaveHistory && ( MASK_CONTROL & mask ) ) 1136 if( mHaveHistory && ( MASK_CONTROL == mask ) )
1134 { 1137 {
1135 if( mCurrentHistoryLine > 0 ) 1138 if( mCurrentHistoryLine > 0 )
1136 { 1139 {
@@ -1147,7 +1150,7 @@ BOOL LLLineEditor::handleSpecialKey(KEY key, MASK mask)
1147 1150
1148 // handle ctrl-downarrow if we have a history enabled line editor 1151 // handle ctrl-downarrow if we have a history enabled line editor
1149 case KEY_DOWN: 1152 case KEY_DOWN:
1150 if( mHaveHistory && ( MASK_CONTROL & mask ) ) 1153 if( mHaveHistory && ( MASK_CONTROL == mask ) )
1151 { 1154 {
1152 if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.size() - 1 ) 1155 if( !mLineHistory.empty() && mCurrentHistoryLine < mLineHistory.size() - 1 )
1153 { 1156 {
@@ -1646,6 +1649,12 @@ void LLLineEditor::setFocus( BOOL new_state )
1646{ 1649{
1647 BOOL old_state = hasFocus(); 1650 BOOL old_state = hasFocus();
1648 1651
1652 if (!new_state)
1653 {
1654 getWindow()->allowLanguageTextInput(FALSE);
1655 }
1656
1657
1649 // getting focus when we didn't have it before, and we want to select all 1658 // getting focus when we didn't have it before, and we want to select all
1650 if (!old_state && new_state && mSelectAllonFocusReceived) 1659 if (!old_state && new_state && mSelectAllonFocusReceived)
1651 { 1660 {
@@ -1676,6 +1685,16 @@ void LLLineEditor::setFocus( BOOL new_state )
1676 } 1685 }
1677 1686
1678 LLUICtrl::setFocus( new_state ); 1687 LLUICtrl::setFocus( new_state );
1688
1689 if (new_state)
1690 {
1691 // Allow Language Text Input only when this LineEditor has
1692 // no prevalidate function attached. This criterion works
1693 // fine on 1.15.0.2, since all prevalidate func reject any
1694 // non-ASCII characters. I'm not sure on future versions,
1695 // however.
1696 getWindow()->allowLanguageTextInput(mPrevalidateFunc == NULL);
1697 }
1679} 1698}
1680 1699
1681//virtual 1700//virtual
diff --git a/linden/indra/llui/llrootview.cpp b/linden/indra/llui/llrootview.cpp
index d78244d..bf231f1 100644
--- a/linden/indra/llui/llrootview.cpp
+++ b/linden/indra/llui/llrootview.cpp
@@ -25,6 +25,7 @@
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28#include "linden_common.h"
28 29
29#include "llrootview.h" 30#include "llrootview.h"
30 31
diff --git a/linden/indra/llui/llscrollcontainer.cpp b/linden/indra/llui/llscrollcontainer.cpp
index cf43ee1..be41aa8 100644
--- a/linden/indra/llui/llscrollcontainer.cpp
+++ b/linden/indra/llui/llscrollcontainer.cpp
@@ -292,7 +292,26 @@ BOOL LLScrollableContainerView::handleScrollWheel( S32 x, S32 y, S32 clicks )
292 // Opaque 292 // Opaque
293 return TRUE; 293 return TRUE;
294} 294}
295BOOL LLScrollableContainerView::needsToScroll(S32 x, S32 y, LLScrollableContainerView::SCROLL_ORIENTATION axis)
296{
297 if(mScrollbar[axis]->getVisible())
298 {
299 LLRect inner_rect_local( 0, mInnerRect.getHeight(), mInnerRect.getWidth(), 0 );
300 const S32 AUTOSCROLL_SIZE = 10;
301 if(mScrollbar[axis]->getVisible())
302 {
303 inner_rect_local.mRight -= SCROLLBAR_SIZE;
304 inner_rect_local.mTop += AUTOSCROLL_SIZE;
305 inner_rect_local.mBottom = inner_rect_local.mTop - AUTOSCROLL_SIZE;
306 }
307 if( inner_rect_local.pointInRect( x, y ) && (mScrollbar[axis]->getDocPos() > 0) )
308 {
309 return TRUE;
310 }
295 311
312 }
313 return FALSE;
314}
296BOOL LLScrollableContainerView::handleDragAndDrop(S32 x, S32 y, MASK mask, 315BOOL LLScrollableContainerView::handleDragAndDrop(S32 x, S32 y, MASK mask,
297 BOOL drop, 316 BOOL drop,
298 EDragAndDropType cargo_type, 317 EDragAndDropType cargo_type,
diff --git a/linden/indra/llui/llscrollcontainer.h b/linden/indra/llui/llscrollcontainer.h
index 3b3bbef..34fff9c 100644
--- a/linden/indra/llui/llscrollcontainer.h
+++ b/linden/indra/llui/llscrollcontainer.h
@@ -35,6 +35,7 @@
35#endif 35#endif
36#include "stdenums.h" 36#include "stdenums.h"
37#include "llcoord.h" 37#include "llcoord.h"
38#include "llscrollbar.h"
38 39
39//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 40//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40// Class LLScrollableContainerView 41// Class LLScrollableContainerView
@@ -47,7 +48,6 @@
47// This class is a decorator class. 48// This class is a decorator class.
48//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 49//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49 50
50class LLScrollbar;
51class LLViewBorder; 51class LLViewBorder;
52class LLUICtrlFactory; 52class LLUICtrlFactory;
53 53
@@ -55,6 +55,10 @@ class LLUICtrlFactory;
55class LLScrollableContainerView : public LLUICtrl 55class LLScrollableContainerView : public LLUICtrl
56{ 56{
57public: 57public:
58 // Note: vertical comes before horizontal because vertical
59 // scrollbars have priority for mouse and keyboard events.
60 enum SCROLL_ORIENTATION { VERTICAL, HORIZONTAL, SCROLLBAR_COUNT };
61
58 LLScrollableContainerView( const LLString& name, const LLRect& rect, 62 LLScrollableContainerView( const LLString& name, const LLRect& rect,
59 LLView* scrolled_view, BOOL is_opaque = FALSE, 63 LLView* scrolled_view, BOOL is_opaque = FALSE,
60 const LLColor4& bg_color = LLColor4(0,0,0,0) ); 64 const LLColor4& bg_color = LLColor4(0,0,0,0) );
@@ -88,6 +92,8 @@ public:
88 void goToBottom(); 92 void goToBottom();
89 S32 getBorderWidth(); 93 S32 getBorderWidth();
90 94
95 BOOL needsToScroll(S32 x, S32 y, SCROLL_ORIENTATION axis);
96
91 // LLView functionality 97 // LLView functionality
92 virtual void reshape(S32 width, S32 height, BOOL called_from_parent); 98 virtual void reshape(S32 width, S32 height, BOOL called_from_parent);
93 virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent); 99 virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
@@ -110,10 +116,6 @@ protected:
110 virtual void scrollVertical( S32 new_pos ); 116 virtual void scrollVertical( S32 new_pos );
111 void updateScroll(); 117 void updateScroll();
112 118
113 // Note: vertical comes before horizontal because vertical
114 // scrollbars have priority for mouse and keyboard events.
115 enum { VERTICAL, HORIZONTAL, SCROLLBAR_COUNT };
116
117 LLScrollbar* mScrollbar[SCROLLBAR_COUNT]; 119 LLScrollbar* mScrollbar[SCROLLBAR_COUNT];
118 LLView* mScrolledView; 120 LLView* mScrolledView;
119 S32 mSize; 121 S32 mSize;
diff --git a/linden/indra/llui/llscrolllistctrl.cpp b/linden/indra/llui/llscrolllistctrl.cpp
index fd98bd5..5571d39 100644
--- a/linden/indra/llui/llscrolllistctrl.cpp
+++ b/linden/indra/llui/llscrolllistctrl.cpp
@@ -98,8 +98,10 @@ protected:
98// 98//
99// LLScrollListIcon 99// LLScrollListIcon
100// 100//
101LLScrollListIcon::LLScrollListIcon(LLImageGL* icon, S32 width, LLUUID image_id) : 101LLScrollListIcon::LLScrollListIcon(LLImageGL* icon, S32 width, LLUUID image_id)
102mIcon(icon), mColor(LLColor4::white), mImageUUID(image_id.asString()) 102 : mIcon(icon),
103 mImageUUID(image_id.asString()),
104 mColor(LLColor4::white)
103{ 105{
104 if (width) 106 if (width)
105 { 107 {
@@ -431,21 +433,20 @@ LLScrollListCtrl::LLScrollListCtrl(const LLString& name, const LLRect& rect,
431 mFgUnselectedColor( LLUI::sColorsGroup->getColor("ScrollUnselectedColor") ), 433 mFgUnselectedColor( LLUI::sColorsGroup->getColor("ScrollUnselectedColor") ),
432 mFgDisabledColor( LLUI::sColorsGroup->getColor("ScrollDisabledColor") ), 434 mFgDisabledColor( LLUI::sColorsGroup->getColor("ScrollDisabledColor") ),
433 mHighlightedColor( LLUI::sColorsGroup->getColor("ScrollHighlightedColor") ), 435 mHighlightedColor( LLUI::sColorsGroup->getColor("ScrollHighlightedColor") ),
434 mHighlightedItem(-1),
435 mBorderThickness( 2 ), 436 mBorderThickness( 2 ),
436 mOnDoubleClickCallback( NULL ), 437 mOnDoubleClickCallback( NULL ),
437 mOnMaximumSelectCallback( NULL ), 438 mOnMaximumSelectCallback( NULL ),
438 mOnSortChangedCallback( NULL ), 439 mOnSortChangedCallback( NULL ),
439 mDrewSelected(FALSE), 440 mHighlightedItem(-1),
440 mBorder(NULL), 441 mBorder(NULL),
441 mSearchColumn(0),
442 mDefaultColumn("SIMPLE"), 442 mDefaultColumn("SIMPLE"),
443 443 mSearchColumn(0),
444 mNumDynamicWidthColumns(0), 444 mNumDynamicWidthColumns(0),
445 mTotalStaticColumnWidth(0), 445 mTotalStaticColumnWidth(0),
446 mSortColumn(-1), 446 mSortColumn(-1),
447 mSortAscending(TRUE),
447 mSorted(TRUE), 448 mSorted(TRUE),
448 mSortAscending(TRUE) 449 mDrewSelected(FALSE)
449{ 450{
450 mItemListRect.setOriginAndSize( 451 mItemListRect.setOriginAndSize(
451 mBorderThickness + LIST_BORDER_PAD, 452 mBorderThickness + LIST_BORDER_PAD,
diff --git a/linden/indra/llui/llscrolllistctrl.h b/linden/indra/llui/llscrolllistctrl.h
index 429985b..9829832 100644
--- a/linden/indra/llui/llscrolllistctrl.h
+++ b/linden/indra/llui/llscrolllistctrl.h
@@ -328,7 +328,7 @@ public:
328 328
329 S32 getNumColumns() const { return mColumns.size(); } 329 S32 getNumColumns() const { return mColumns.size(); }
330 330
331 LLScrollListCell *getColumn(const S32 i) const { if (i < (S32)mColumns.size()) { return mColumns[i]; } return NULL; } 331 LLScrollListCell *getColumn(const S32 i) const { if (0 <= i && i < (S32)mColumns.size()) { return mColumns[i]; } return NULL; }
332 332
333 virtual BOOL handleClick(S32 x, S32 y, MASK mask); 333 virtual BOOL handleClick(S32 x, S32 y, MASK mask);
334 334
diff --git a/linden/indra/llui/lltabcontainer.cpp b/linden/indra/llui/lltabcontainer.cpp
index 44940ae..01c06c3 100644
--- a/linden/indra/llui/lltabcontainer.cpp
+++ b/linden/indra/llui/lltabcontainer.cpp
@@ -51,6 +51,7 @@
51#include "llglheaders.h" 51#include "llglheaders.h"
52 52
53const F32 SCROLL_STEP_TIME = 0.4f; 53const F32 SCROLL_STEP_TIME = 0.4f;
54const F32 SCROLL_DELAY_TIME = 0.5f;
54const S32 TAB_PADDING = 15; 55const S32 TAB_PADDING = 15;
55const S32 TABCNTR_TAB_MIN_WIDTH = 60; 56const S32 TABCNTR_TAB_MIN_WIDTH = 60;
56const S32 TABCNTR_TAB_MAX_WIDTH = 150; 57const S32 TABCNTR_TAB_MAX_WIDTH = 150;
@@ -81,6 +82,7 @@ LLTabContainerCommon::LLTabContainerCommon(
81 mLockedTabCount(0) 82 mLockedTabCount(0)
82{ 83{
83 setMouseOpaque(FALSE); 84 setMouseOpaque(FALSE);
85 mDragAndDropDelayTimer.stop();
84} 86}
85 87
86 88
@@ -101,9 +103,11 @@ LLTabContainerCommon::LLTabContainerCommon(
101 mCallbackUserdata( callback_userdata ), 103 mCallbackUserdata( callback_userdata ),
102 mTitleBox(NULL), 104 mTitleBox(NULL),
103 mTopBorderHeight(LLPANEL_BORDER_WIDTH), 105 mTopBorderHeight(LLPANEL_BORDER_WIDTH),
104 mTabPosition(pos) 106 mTabPosition(pos),
107 mLockedTabCount(0)
105{ 108{
106 setMouseOpaque(FALSE); 109 setMouseOpaque(FALSE);
110 mDragAndDropDelayTimer.stop();
107} 111}
108 112
109 113
@@ -731,8 +735,8 @@ LLTabContainer::LLTabContainer(
731 : 735 :
732 LLTabContainerCommon(name, rect, pos, close_callback, callback_userdata, bordered), 736 LLTabContainerCommon(name, rect, pos, close_callback, callback_userdata, bordered),
733 mLeftArrowBtn(NULL), 737 mLeftArrowBtn(NULL),
734 mRightArrowBtn(NULL),
735 mJumpLeftArrowBtn(NULL), 738 mJumpLeftArrowBtn(NULL),
739 mRightArrowBtn(NULL),
736 mJumpRightArrowBtn(NULL), 740 mJumpRightArrowBtn(NULL),
737 mRightTabBtnOffset(0), 741 mRightTabBtnOffset(0),
738 mMinTabWidth(TABCNTR_TAB_MIN_WIDTH), 742 mMinTabWidth(TABCNTR_TAB_MIN_WIDTH),
@@ -749,8 +753,8 @@ LLTabContainer::LLTabContainer(
749 : 753 :
750 LLTabContainerCommon(name, rect_control, pos, close_callback, callback_userdata, bordered), 754 LLTabContainerCommon(name, rect_control, pos, close_callback, callback_userdata, bordered),
751 mLeftArrowBtn(NULL), 755 mLeftArrowBtn(NULL),
752 mRightArrowBtn(NULL),
753 mJumpLeftArrowBtn(NULL), 756 mJumpLeftArrowBtn(NULL),
757 mRightArrowBtn(NULL),
754 mJumpRightArrowBtn(NULL), 758 mJumpRightArrowBtn(NULL),
755 mRightTabBtnOffset(0), 759 mRightTabBtnOffset(0),
756 mMinTabWidth(TABCNTR_TAB_MIN_WIDTH), 760 mMinTabWidth(TABCNTR_TAB_MIN_WIDTH),
@@ -1576,43 +1580,48 @@ BOOL LLTabContainer::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDrag
1576{ 1580{
1577 BOOL has_scroll_arrows = (mMaxScrollPos > 0); 1581 BOOL has_scroll_arrows = (mMaxScrollPos > 0);
1578 1582
1579 if (has_scroll_arrows) 1583 if( mDragAndDropDelayTimer.getElapsedTimeF32() > SCROLL_DELAY_TIME )
1580 { 1584 {
1581 if (mJumpLeftArrowBtn->getRect().pointInRect(x, y)) 1585
1582 { 1586 if (has_scroll_arrows)
1583 S32 local_x = x - mJumpLeftArrowBtn->getRect().mLeft;
1584 S32 local_y = y - mJumpLeftArrowBtn->getRect().mBottom;
1585 mJumpLeftArrowBtn->handleHover(local_x, local_y, mask);
1586 }
1587 if (mJumpRightArrowBtn->getRect().pointInRect(x, y))
1588 {
1589 S32 local_x = x - mJumpRightArrowBtn->getRect().mLeft;
1590 S32 local_y = y - mJumpRightArrowBtn->getRect().mBottom;
1591 mJumpRightArrowBtn->handleHover(local_x, local_y, mask);
1592 }
1593 if (mLeftArrowBtn->getRect().pointInRect(x, y))
1594 {
1595 S32 local_x = x - mLeftArrowBtn->getRect().mLeft;
1596 S32 local_y = y - mLeftArrowBtn->getRect().mBottom;
1597 mLeftArrowBtn->handleHover(local_x, local_y, mask);
1598 }
1599 else if (mRightArrowBtn->getRect().pointInRect(x, y))
1600 { 1587 {
1601 S32 local_x = x - mRightArrowBtn->getRect().mLeft; 1588 if (mJumpLeftArrowBtn->getRect().pointInRect(x, y))
1602 S32 local_y = y - mRightArrowBtn->getRect().mBottom; 1589 {
1603 mRightArrowBtn->handleHover(local_x, local_y, mask); 1590 S32 local_x = x - mJumpLeftArrowBtn->getRect().mLeft;
1591 S32 local_y = y - mJumpLeftArrowBtn->getRect().mBottom;
1592 mJumpLeftArrowBtn->handleHover(local_x, local_y, mask);
1593 }
1594 if (mJumpRightArrowBtn->getRect().pointInRect(x, y))
1595 {
1596 S32 local_x = x - mJumpRightArrowBtn->getRect().mLeft;
1597 S32 local_y = y - mJumpRightArrowBtn->getRect().mBottom;
1598 mJumpRightArrowBtn->handleHover(local_x, local_y, mask);
1599 }
1600 if (mLeftArrowBtn->getRect().pointInRect(x, y))
1601 {
1602 S32 local_x = x - mLeftArrowBtn->getRect().mLeft;
1603 S32 local_y = y - mLeftArrowBtn->getRect().mBottom;
1604 mLeftArrowBtn->handleHover(local_x, local_y, mask);
1605 }
1606 else if (mRightArrowBtn->getRect().pointInRect(x, y))
1607 {
1608 S32 local_x = x - mRightArrowBtn->getRect().mLeft;
1609 S32 local_y = y - mRightArrowBtn->getRect().mBottom;
1610 mRightArrowBtn->handleHover(local_x, local_y, mask);
1611 }
1604 } 1612 }
1605 }
1606 1613
1607 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter) 1614 for(tuple_list_t::iterator iter = mTabList.begin(); iter != mTabList.end(); ++iter)
1608 {
1609 LLTabTuple* tuple = *iter;
1610 tuple->mButton->setVisible( TRUE );
1611 S32 local_x = x - tuple->mButton->getRect().mLeft;
1612 S32 local_y = y - tuple->mButton->getRect().mBottom;
1613 if (tuple->mButton->pointInView(local_x, local_y) && tuple->mButton->getEnabled() && !tuple->mTabPanel->getVisible())
1614 { 1615 {
1615 tuple->mButton->onCommit(); 1616 LLTabTuple* tuple = *iter;
1617 tuple->mButton->setVisible( TRUE );
1618 S32 local_x = x - tuple->mButton->getRect().mLeft;
1619 S32 local_y = y - tuple->mButton->getRect().mBottom;
1620 if (tuple->mButton->pointInView(local_x, local_y) && tuple->mButton->getEnabled() && !tuple->mTabPanel->getVisible())
1621 {
1622 tuple->mButton->onCommit();
1623 mDragAndDropDelayTimer.stop();
1624 }
1616 } 1625 }
1617 } 1626 }
1618 1627
@@ -1641,4 +1650,4 @@ void LLTabContainer::setTabImage(LLPanel* child, std::string image_name)
1641 // tabs have changed size, might need to scroll to see current tab 1650 // tabs have changed size, might need to scroll to see current tab
1642 updateMaxScrollPos(); 1651 updateMaxScrollPos();
1643 } 1652 }
1644} \ No newline at end of file 1653}
diff --git a/linden/indra/llui/lltabcontainer.h b/linden/indra/llui/lltabcontainer.h
index 7d501d2..f3365c3 100644
--- a/linden/indra/llui/lltabcontainer.h
+++ b/linden/indra/llui/lltabcontainer.h
@@ -117,7 +117,9 @@ public:
117 virtual void setTabImage(LLPanel* child, std::string img_name); 117 virtual void setTabImage(LLPanel* child, std::string img_name);
118 void setTitle( const LLString& title ); 118 void setTitle( const LLString& title );
119 const LLString getPanelTitle(S32 index); 119 const LLString getPanelTitle(S32 index);
120 120
121 void setDragAndDropDelayTimer() { mDragAndDropDelayTimer.start(); }
122
121 virtual void setTopBorderHeight(S32 height); 123 virtual void setTopBorderHeight(S32 height);
122 124
123 virtual void setTabChangeCallback(LLPanel* tab, void (*on_tab_clicked)(void*,bool)); 125 virtual void setTabChangeCallback(LLPanel* tab, void (*on_tab_clicked)(void*,bool));
@@ -175,6 +177,8 @@ protected:
175 S32 mScrollPosPixels; 177 S32 mScrollPosPixels;
176 S32 mMaxScrollPos; 178 S32 mMaxScrollPos;
177 179
180 LLFrameTimer mDragAndDropDelayTimer;
181
178 void (*mCloseCallback)(void*); 182 void (*mCloseCallback)(void*);
179 void* mCallbackUserdata; 183 void* mCallbackUserdata;
180 184
diff --git a/linden/indra/llui/lltexteditor.cpp b/linden/indra/llui/lltexteditor.cpp
index 80205d3..513670b 100644
--- a/linden/indra/llui/lltexteditor.cpp
+++ b/linden/indra/llui/lltexteditor.cpp
@@ -46,6 +46,7 @@
46#include "llclipboard.h" 46#include "llclipboard.h"
47#include "llscrollbar.h" 47#include "llscrollbar.h"
48#include "llstl.h" 48#include "llstl.h"
49#include "llstring.h"
49#include "llkeyboard.h" 50#include "llkeyboard.h"
50#include "llkeywords.h" 51#include "llkeywords.h"
51#include "llundo.h" 52#include "llundo.h"
@@ -514,8 +515,10 @@ void LLTextEditor::truncate()
514 515
515void LLTextEditor::setText(const LLString &utf8str) 516void LLTextEditor::setText(const LLString &utf8str)
516{ 517{
517 mUTF8Text = utf8str; 518 // LLString::removeCRLF(utf8str);
518 mWText = utf8str_to_wstring(utf8str); 519 mUTF8Text = utf8str_removeCRLF(utf8str);
520 // mUTF8Text = utf8str;
521 mWText = utf8str_to_wstring(mUTF8Text);
519 mTextIsUpToDate = TRUE; 522 mTextIsUpToDate = TRUE;
520 523
521 truncate(); 524 truncate();
@@ -2491,6 +2494,8 @@ void LLTextEditor::redo()
2491// virtual, from LLView 2494// virtual, from LLView
2492void LLTextEditor::onFocusLost() 2495void LLTextEditor::onFocusLost()
2493{ 2496{
2497 getWindow()->allowLanguageTextInput(FALSE);
2498
2494 // Route menu back to the default 2499 // Route menu back to the default
2495 if( gEditMenuHandler == this ) 2500 if( gEditMenuHandler == this )
2496 { 2501 {
@@ -3057,6 +3062,12 @@ void LLTextEditor::setFocus( BOOL new_state )
3057 // Don't change anything if the focus state didn't change 3062 // Don't change anything if the focus state didn't change
3058 if (new_state == old_state) return; 3063 if (new_state == old_state) return;
3059 3064
3065 // Notify early if we are loosing focus.
3066 if (!new_state)
3067 {
3068 getWindow()->allowLanguageTextInput(FALSE);
3069 }
3070
3060 LLUICtrl::setFocus( new_state ); 3071 LLUICtrl::setFocus( new_state );
3061 3072
3062 if( new_state ) 3073 if( new_state )
@@ -3077,6 +3088,12 @@ void LLTextEditor::setFocus( BOOL new_state )
3077 3088
3078 endSelection(); 3089 endSelection();
3079 } 3090 }
3091
3092 // Notify late if we are gaining focus.
3093 if (new_state && !mReadOnly)
3094 {
3095 getWindow()->allowLanguageTextInput(TRUE);
3096 }
3080} 3097}
3081 3098
3082BOOL LLTextEditor::acceptsTextInput() const 3099BOOL LLTextEditor::acceptsTextInput() const
diff --git a/linden/indra/llui/llviewquery.cpp b/linden/indra/llui/llviewquery.cpp
index 3f9ccf4..65f191b 100644
--- a/linden/indra/llui/llviewquery.cpp
+++ b/linden/indra/llui/llviewquery.cpp
@@ -26,6 +26,8 @@
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28 28
29#include "linden_common.h"
30
29#include "llview.h" 31#include "llview.h"
30#include "lluictrl.h" 32#include "lluictrl.h"
31#include "llviewquery.h" 33#include "llviewquery.h"
diff --git a/linden/indra/llvfs/llvfs.cpp b/linden/indra/llvfs/llvfs.cpp
index b83d12c..dd5854c 100644
--- a/linden/indra/llvfs/llvfs.cpp
+++ b/linden/indra/llvfs/llvfs.cpp
@@ -504,7 +504,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
504 } 504 }
505 505
506 // Figure out where the last block ended. 506 // Figure out where the last block ended.
507 U32 loc = last_file_block->mLocation+last_file_block->mLength; 507 S32 loc = last_file_block->mLocation+last_file_block->mLength;
508 508
509 // Figure out how much space there is between where 509 // Figure out how much space there is between where
510 // the last block ended and this block begins. 510 // the last block ended and this block begins.
@@ -512,7 +512,7 @@ LLVFS::LLVFS(const char *index_filename, const char *data_filename, const BOOL r
512 512
513 // Check for more errors... Seeing if the current 513 // Check for more errors... Seeing if the current
514 // entry and the last entry make sense together. 514 // entry and the last entry make sense together.
515 if (length < 0 || loc < 0 || loc > data_size) 515 if (length < 0 || loc < 0 || (U32)loc > data_size)
516 { 516 {
517 // Invalid VFS 517 // Invalid VFS
518 unlockAndClose( mIndexFP ); 518 unlockAndClose( mIndexFP );
@@ -1790,53 +1790,46 @@ void LLVFS::audit()
1790 1790
1791 delete[] buffer; 1791 delete[] buffer;
1792 1792
1793 if (vfs_corrupt) 1793 if (!vfs_corrupt)
1794 { 1794 {
1795 for (std::vector<LLVFSFileBlock*>::iterator iter = audit_blocks.begin(); 1795 for (fileblock_map::iterator it = mFileBlocks.begin(); it != mFileBlocks.end(); ++it)
1796 iter != audit_blocks.end(); ++iter)
1797 { 1796 {
1798 delete *iter; 1797 LLVFSFileBlock* block = (*it).second;
1799 }
1800 audit_blocks.clear();
1801 return;
1802 }
1803
1804 for (fileblock_map::iterator it = mFileBlocks.begin(); it != mFileBlocks.end(); ++it)
1805 {
1806 LLVFSFileBlock* block = (*it).second;
1807 1798
1808 if (block->mSize > 0) 1799 if (block->mSize > 0)
1809 {
1810 if (! found_files.count(*block))
1811 { 1800 {
1812 llwarns << "VFile " << block->mFileID << ":" << block->mFileType << " in memory, not on disk, loc " << block->mIndexLocation<< llendl; 1801 if (! found_files.count(*block))
1813 fseek(mIndexFP, block->mIndexLocation, SEEK_SET); 1802 {
1814 U8 buf[LLVFSFileBlock::SERIAL_SIZE]; 1803 llwarns << "VFile " << block->mFileID << ":" << block->mFileType << " in memory, not on disk, loc " << block->mIndexLocation<< llendl;
1815 fread(buf, LLVFSFileBlock::SERIAL_SIZE, 1, mIndexFP); 1804 fseek(mIndexFP, block->mIndexLocation, SEEK_SET);
1805 U8 buf[LLVFSFileBlock::SERIAL_SIZE];
1806 fread(buf, LLVFSFileBlock::SERIAL_SIZE, 1, mIndexFP);
1816 1807
1817 LLVFSFileBlock disk_block; 1808 LLVFSFileBlock disk_block;
1818 disk_block.deserialize(buf, block->mIndexLocation); 1809 disk_block.deserialize(buf, block->mIndexLocation);
1819 1810
1820 llwarns << "Instead found " << disk_block.mFileID << ":" << block->mFileType << llendl; 1811 llwarns << "Instead found " << disk_block.mFileID << ":" << block->mFileType << llendl;
1821 } 1812 }
1822 else 1813 else
1823 { 1814 {
1824 block = found_files.find(*block)->second; 1815 block = found_files.find(*block)->second;
1825 found_files.erase(*block); 1816 found_files.erase(*block);
1826 delete block; 1817 }
1827 } 1818 }
1828 } 1819 }
1829 }
1830 1820
1831 for (std::map<LLVFSFileSpecifier, LLVFSFileBlock*>::iterator iter = found_files.begin(); 1821 for (std::map<LLVFSFileSpecifier, LLVFSFileBlock*>::iterator iter = found_files.begin();
1832 iter != found_files.end(); iter++) 1822 iter != found_files.end(); iter++)
1833 { 1823 {
1834 LLVFSFileBlock* block = iter->second; 1824 LLVFSFileBlock* block = iter->second;
1835 llwarns << "VFile " << block->mFileID << ":" << block->mFileType << " szie:" << block->mSize << " leftover" << llendl; 1825 llwarns << "VFile " << block->mFileID << ":" << block->mFileType << " szie:" << block->mSize << " leftover" << llendl;
1836 } 1826 }
1837 1827
1838 llinfos << "VFS: audit OK" << llendl; 1828 llinfos << "VFS: audit OK" << llendl;
1839 // mutex released by LLMutexLock() destructor. 1829 // mutex released by LLMutexLock() destructor.
1830 }
1831
1832 for_each(audit_blocks.begin(), audit_blocks.end(), DeletePointer());
1840} 1833}
1841 1834
1842 1835
diff --git a/linden/indra/llwindow/llwindow.cpp b/linden/indra/llwindow/llwindow.cpp
index cad1dc4..faa5e61 100644
--- a/linden/indra/llwindow/llwindow.cpp
+++ b/linden/indra/llwindow/llwindow.cpp
@@ -241,7 +241,8 @@ LLWindow::LLWindow(BOOL fullscreen, U32 flags)
241 mIsMouseClipping(FALSE), 241 mIsMouseClipping(FALSE),
242 mSwapMethod(SWAP_METHOD_UNDEFINED), 242 mSwapMethod(SWAP_METHOD_UNDEFINED),
243 mHideCursorPermanent(FALSE), 243 mHideCursorPermanent(FALSE),
244 mFlags(flags) 244 mFlags(flags),
245 mHighSurrogate(0)
245{ 246{
246 for (U32 i = 0; i < 6; i++) 247 for (U32 i = 0; i < 6; i++)
247 { 248 {
@@ -296,6 +297,53 @@ void LLWindow::setCallbacks(LLWindowCallbacks *callbacks)
296 } 297 }
297} 298}
298 299
300#define UTF16_IS_HIGH_SURROGATE(U) ((U16)((U) - 0xD800) < 0x0400)
301#define UTF16_IS_LOW_SURROGATE(U) ((U16)((U) - 0xDC00) < 0x0400)
302#define UTF16_SURROGATE_PAIR_TO_UTF32(H,L) (((H) << 10) + (L) - (0xD800 << 10) - 0xDC00 + 0x00010000)
303
304void LLWindow::handleUnicodeUTF16(U16 utf16, MASK mask)
305{
306 // Note that we could discard unpaired surrogates, but I'm
307 // following the Unicode Consortium's recommendation here;
308 // that is, to preserve those unpaired surrogates in UTF-32
309 // values. _To_preserve_ means to pass to the callback in our
310 // context.
311
312 if (mHighSurrogate == 0)
313 {
314 if (UTF16_IS_HIGH_SURROGATE(utf16))
315 {
316 mHighSurrogate = utf16;
317 }
318 else
319 {
320 mCallbacks->handleUnicodeChar(utf16, mask);
321 }
322 }
323 else
324 {
325 if (UTF16_IS_LOW_SURROGATE(utf16))
326 {
327 /* A legal surrogate pair. */
328 mCallbacks->handleUnicodeChar(UTF16_SURROGATE_PAIR_TO_UTF32(mHighSurrogate, utf16), mask);
329 mHighSurrogate = 0;
330 }
331 else if (UTF16_IS_HIGH_SURROGATE(utf16))
332 {
333 /* Two consecutive high surrogates. */
334 mCallbacks->handleUnicodeChar(mHighSurrogate, mask);
335 mHighSurrogate = utf16;
336 }
337 else
338 {
339 /* A non-low-surrogate preceeded by a high surrogate. */
340 mCallbacks->handleUnicodeChar(mHighSurrogate, mask);
341 mHighSurrogate = 0;
342 mCallbacks->handleUnicodeChar(utf16, mask);
343 }
344 }
345}
346
299// 347//
300// LLSplashScreen 348// LLSplashScreen
301// 349//
diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h
index 2bb49e9..1016bce 100644
--- a/linden/indra/llwindow/llwindow.h
+++ b/linden/indra/llwindow/llwindow.h
@@ -218,6 +218,10 @@ public:
218// return a platform-specific window reference (HWND on Windows, WindowRef on the Mac) 218// return a platform-specific window reference (HWND on Windows, WindowRef on the Mac)
219 virtual void *getPlatformWindow() = 0; 219 virtual void *getPlatformWindow() = 0;
220 220
221 // control platform's Language Text Input mechanisms.
222 virtual void allowLanguageTextInput( BOOL b ) {};
223 virtual void setLanguageTextInput( LLCoordWindow pos ) {};
224
221protected: 225protected:
222 LLWindow(BOOL fullscreen, U32 flags); 226 LLWindow(BOOL fullscreen, U32 flags);
223 virtual ~LLWindow() {} 227 virtual ~LLWindow() {}
@@ -246,6 +250,15 @@ protected:
246 U32 mFlags; 250 U32 mFlags;
247 F32 mJoyAxis[6]; 251 F32 mJoyAxis[6];
248 U8 mJoyButtonState[16]; 252 U8 mJoyButtonState[16];
253 U16 mHighSurrogate;
254
255 // Handle a UTF-16 encoding unit received from keyboard.
256 // Converting the series of UTF-16 encoding units to UTF-32 data,
257 // this method passes the resulting UTF-32 data to mCallback's
258 // handleUnicodeChar. The mask should be that to be passed to the
259 // callback. This method uses mHighSurrogate as a dedicated work
260 // variable.
261 void handleUnicodeUTF16(U16 utf16, MASK mask);
249 262
250 friend class LLWindowManager; 263 friend class LLWindowManager;
251}; 264};
diff --git a/linden/indra/llwindow/llwindowmacosx.cpp b/linden/indra/llwindow/llwindowmacosx.cpp
index 0c5d6ed..021d7a4 100644
--- a/linden/indra/llwindow/llwindowmacosx.cpp
+++ b/linden/indra/llwindow/llwindowmacosx.cpp
@@ -239,6 +239,10 @@ LLWindowMacOSX::LLWindowMacOSX(char *title, char *name, S32 x, S32 y, S32 width,
239 mNeedsResize = FALSE; 239 mNeedsResize = FALSE;
240 mOverrideAspectRatio = 0.f; 240 mOverrideAspectRatio = 0.f;
241 mMinimized = FALSE; 241 mMinimized = FALSE;
242 mTSMDocument = NULL; // Just in case.
243 mLanguageTextInputAllowed = FALSE;
244 mTSMScriptCode = 0;
245 mTSMLangCode = 0;
242 246
243 // For reasons that aren't clear to me, LLTimers seem to be created in the "started" state. 247 // For reasons that aren't clear to me, LLTimers seem to be created in the "started" state.
244 // Since the started state of this one is used to track whether the NMRec has been installed, it wants to start out in the "stopped" state. 248 // Since the started state of this one is used to track whether the NMRec has been installed, it wants to start out in the "stopped" state.
@@ -479,6 +483,29 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
479 483
480 } 484 }
481 485
486 {
487 // Create and initialize our TSM document for language text input.
488 // If an error occured, we can do nothing better than simply ignore it.
489 // mTSMDocument will be kept NULL in case.
490 if (mTSMDocument)
491 {
492 DeactivateTSMDocument(mTSMDocument);
493 DeleteTSMDocument(mTSMDocument);
494 mTSMDocument = NULL;
495 }
496 static InterfaceTypeList types = { kUnicodeDocument };
497 OSErr err = NewTSMDocument(1, types, &mTSMDocument, 0);
498 if (err != noErr)
499 {
500 llwarns << "createContext: couldn't create a TSMDocument (" << err << ")" << llendl;
501 }
502 if (mTSMDocument)
503 {
504 UseInputWindow(mTSMDocument, TRUE);
505 ActivateTSMDocument(mTSMDocument);
506 }
507 }
508
482 if(mContext == NULL) 509 if(mContext == NULL)
483 { 510 {
484 AGLRendererInfo rendererInfo = NULL; 511 AGLRendererInfo rendererInfo = NULL;
@@ -924,6 +951,15 @@ void LLWindowMacOSX::destroyContext()
924 mWindowHandlerRef = NULL; 951 mWindowHandlerRef = NULL;
925 } 952 }
926 953
954 // Cleanup any TSM document we created.
955 if(mTSMDocument != NULL)
956 {
957 llinfos << "destroyContext: deleting TSM document" << llendl;
958 DeactivateTSMDocument(mTSMDocument);
959 DeleteTSMDocument(mTSMDocument);
960 mTSMDocument = NULL;
961 }
962
927 // Close the window 963 // Close the window
928 if(mWindow != NULL) 964 if(mWindow != NULL)
929 { 965 {
@@ -1529,7 +1565,7 @@ void LLWindowMacOSX::flashIcon(F32 seconds)
1529 OSErr err; 1565 OSErr err;
1530 1566
1531 mBounceTime = seconds; 1567 mBounceTime = seconds;
1532 memset(&mBounceRec, sizeof(mBounceRec), 0); 1568 memset(&mBounceRec, 0, sizeof(mBounceRec));
1533 mBounceRec.qType = nmType; 1569 mBounceRec.qType = nmType;
1534 mBounceRec.nmMark = 1; 1570 mBounceRec.nmMark = 1;
1535 err = NMInstall(&mBounceRec); 1571 err = NMInstall(&mBounceRec);
@@ -2241,6 +2277,10 @@ OSStatus LLWindowMacOSX::eventHandler (EventHandlerCallRef myHandler, EventRef e
2241 switch(evtKind) 2277 switch(evtKind)
2242 { 2278 {
2243 case kEventWindowActivated: 2279 case kEventWindowActivated:
2280 if (mTSMDocument)
2281 {
2282 ActivateTSMDocument(mTSMDocument);
2283 }
2244 mCallbacks->handleFocus(this); 2284 mCallbacks->handleFocus(this);
2245 break; 2285 break;
2246 case kEventWindowDeactivated: 2286 case kEventWindowDeactivated:
@@ -2952,4 +2992,37 @@ static long getDictLong (CFDictionaryRef refDict, CFStringRef key)
2952 return int_value; // otherwise return the long value 2992 return int_value; // otherwise return the long value
2953} 2993}
2954 2994
2995void LLWindowMacOSX::allowLanguageTextInput(BOOL b)
2996{
2997 ScriptLanguageRecord script_language;
2998
2999 if (b == mLanguageTextInputAllowed)
3000 {
3001 return;
3002 }
3003 mLanguageTextInputAllowed = b;
3004
3005 if (b)
3006 {
3007 if (mTSMScriptCode != smRoman)
3008 {
3009 script_language.fScript = mTSMScriptCode;
3010 script_language.fLanguage = mTSMLangCode;
3011 SetTextServiceLanguage(&script_language);
3012 }
3013 }
3014 else
3015 {
3016 GetTextServiceLanguage(&script_language);
3017 mTSMScriptCode = script_language.fScript;
3018 mTSMLangCode = script_language.fLanguage;
3019 if (mTSMScriptCode != smRoman)
3020 {
3021 script_language.fScript = smRoman;
3022 script_language.fLanguage = langEnglish;
3023 SetTextServiceLanguage(&script_language);
3024 }
3025 }
3026}
3027
2955#endif // LL_DARWIN 3028#endif // LL_DARWIN
diff --git a/linden/indra/llwindow/llwindowmacosx.h b/linden/indra/llwindow/llwindowmacosx.h
index 63d846e..01b9303 100644
--- a/linden/indra/llwindow/llwindowmacosx.h
+++ b/linden/indra/llwindow/llwindowmacosx.h
@@ -108,6 +108,8 @@ public:
108 /*virtual*/ void *getPlatformWindow(); 108 /*virtual*/ void *getPlatformWindow();
109 /*virtual*/ void bringToFront() {}; 109 /*virtual*/ void bringToFront() {};
110 110
111 /*virtual*/ void allowLanguageTextInput(BOOL b);
112
111protected: 113protected:
112 LLWindowMacOSX( 114 LLWindowMacOSX(
113 char *title, char *name, int x, int y, int width, int height, U32 flags, 115 char *title, char *name, int x, int y, int width, int height, U32 flags,
@@ -183,6 +185,12 @@ protected:
183 NMRec mBounceRec; 185 NMRec mBounceRec;
184 LLTimer mBounceTimer; 186 LLTimer mBounceTimer;
185 187
188 // Imput method management through Text Service Manager.
189 TSMDocumentID mTSMDocument;
190 BOOL mLanguageTextInputAllowed;
191 ScriptCode mTSMScriptCode;
192 LangCode mTSMLangCode;
193
186 friend class LLWindowManager; 194 friend class LLWindowManager;
187}; 195};
188 196
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index a1cdeb3..94111e7 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -42,7 +42,9 @@
42#include "indra_constants.h" 42#include "indra_constants.h"
43 43
44#if LL_GTK 44#if LL_GTK
45extern "C" {
45# include "gtk/gtk.h" 46# include "gtk/gtk.h"
47}
46#endif // LL_GTK 48#endif // LL_GTK
47 49
48#if LL_LINUX 50#if LL_LINUX
@@ -1984,7 +1986,10 @@ void LLWindowSDL::gatherInput()
1984 SDLReallyCaptureInput(TRUE); 1986 SDLReallyCaptureInput(TRUE);
1985 1987
1986 if (event.key.keysym.unicode) 1988 if (event.key.keysym.unicode)
1987 mCallbacks->handleUnicodeChar(event.key.keysym.unicode, gKeyboard->currentMask(FALSE)); 1989 {
1990 handleUnicodeUTF16(event.key.keysym.unicode,
1991 gKeyboard->currentMask(FALSE));
1992 }
1988 break; 1993 break;
1989 1994
1990 case SDL_KEYUP: 1995 case SDL_KEYUP:
diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp
index 2cd1353..0b3cdd4 100644
--- a/linden/indra/llwindow/llwindowwin32.cpp
+++ b/linden/indra/llwindow/llwindowwin32.cpp
@@ -37,6 +37,7 @@
37#include <mapi.h> 37#include <mapi.h>
38#include <process.h> // for _spawn 38#include <process.h> // for _spawn
39#include <shellapi.h> 39#include <shellapi.h>
40#include <Imm.h>
40 41
41// Require DirectInput version 8 42// Require DirectInput version 8
42#define DIRECTINPUT_VERSION 0x0800 43#define DIRECTINPUT_VERSION 0x0800
@@ -84,6 +85,98 @@ void show_window_creation_error(const char* title)
84//static 85//static
85BOOL LLWindowWin32::sIsClassRegistered = FALSE; 86BOOL LLWindowWin32::sIsClassRegistered = FALSE;
86 87
88BOOL LLWindowWin32::sLanguageTextInputAllowed = TRUE; /* XXX */
89BOOL LLWindowWin32::sWinIMEOpened = FALSE;
90HKL LLWindowWin32::sWinInputLocale;
91DWORD LLWindowWin32::sWinIMEConversionMode;
92DWORD LLWindowWin32::sWinIMESentenceMode;
93
94// The following class LLWinImm delegates Windows IMM APIs.
95// We need this because some language versions of Windows,
96// e.g., US version of Windows XP, doesn't install IMM32.DLL
97// as a default, and we can't link against imm32.lib statically.
98// I believe DLL loading of this type is best suited to do
99// in a static initialization of a class. What I'm not sure is
100// whether it follows the Linden Conding Standard...
101// See http://wiki.secondlife.com/wiki/Coding_standards#Static_Members
102
103class LLWinImm
104{
105public:
106 static bool isAvailable() { return sTheInstance.mHImmDll != NULL; }
107
108public:
109 // Wrappers for IMM API.
110 static BOOL isIME(HKL hkl) { return sTheInstance.mImmIsIME(hkl); }
111 static HIMC getContext(HWND hwnd) { return sTheInstance.mImmGetContext(hwnd); }
112 static BOOL releaseContext(HWND hwnd, HIMC himc) { return sTheInstance.mImmReleaseContext(hwnd, himc); }
113 static BOOL getOpenStatus(HIMC himc) { return sTheInstance.mImmGetOpenStatus(himc); }
114 static BOOL setOpenStatus(HIMC himc, BOOL status) { return sTheInstance.mImmSetOpenStatus(himc, status); }
115 static BOOL getConversionStatus(HIMC himc, LPDWORD conversion, LPDWORD sentence) { return sTheInstance.mImmGetConversionStatus(himc, conversion, sentence); }
116 static BOOL setConversionStatus(HIMC himc, DWORD conversion, DWORD sentence) { return sTheInstance.mImmSetConversionStatus(himc, conversion, sentence); }
117
118private:
119 LLWinImm();
120 ~LLWinImm();
121
122private:
123 // Pointers to IMM API.
124 BOOL (WINAPI *mImmIsIME)(HKL);
125 HIMC (WINAPI *mImmGetContext)(HWND);
126 BOOL (WINAPI *mImmReleaseContext)(HWND, HIMC);
127 BOOL (WINAPI *mImmGetOpenStatus)(HIMC);
128 BOOL (WINAPI *mImmSetOpenStatus)(HIMC, BOOL);
129 BOOL (WINAPI *mImmGetConversionStatus)(HIMC, LPDWORD, LPDWORD);
130 BOOL (WINAPI *mImmSetConversionStatus)(HIMC, DWORD, DWORD);
131
132private:
133 HMODULE mHImmDll;
134 static LLWinImm sTheInstance;
135};
136
137LLWinImm LLWinImm::sTheInstance;
138
139LLWinImm::LLWinImm()
140{
141 mHImmDll = LoadLibraryA("Imm32");
142 if (mHImmDll != NULL)
143 {
144 mImmIsIME = (BOOL (WINAPI *)(HKL)) GetProcAddress(mHImmDll, "ImmIsIME");
145 mImmGetContext = (HIMC (WINAPI *)(HWND)) GetProcAddress(mHImmDll, "ImmGetContext");
146 mImmReleaseContext = (BOOL (WINAPI *)(HWND, HIMC)) GetProcAddress(mHImmDll, "ImmReleaseContext");
147 mImmGetOpenStatus = (BOOL (WINAPI *)(HIMC)) GetProcAddress(mHImmDll, "ImmGetOpenStatus");
148 mImmSetOpenStatus = (BOOL (WINAPI *)(HIMC, BOOL)) GetProcAddress(mHImmDll, "ImmSetOpenStatus");
149 mImmGetConversionStatus = (BOOL (WINAPI *)(HIMC, LPDWORD, LPDWORD)) GetProcAddress(mHImmDll, "ImmGetConversionStatus");
150 mImmSetConversionStatus = (BOOL (WINAPI *)(HIMC, DWORD, DWORD)) GetProcAddress(mHImmDll, "ImmSetConversionStatus");
151 if (mImmIsIME == NULL ||
152 mImmGetContext == NULL ||
153 mImmReleaseContext == NULL ||
154 mImmGetOpenStatus == NULL ||
155 mImmSetOpenStatus == NULL ||
156 mImmGetConversionStatus == NULL ||
157 mImmSetConversionStatus == NULL)
158 {
159 // If any of the above API entires are not found, we can't use IMM API.
160 // So, turn off the IMM support. We should log some warning message in
161 // the case, since it is very unusual; these APIs are available from
162 // the beginning, and all versions of IMM32.DLL should have them all.
163 // Unfortunately, this code may be executed before initialization of
164 // the logging channel (llwarns), and we can't do it here... Yes, this
165 // is one of disadvantages to use static constraction to DLL loading.
166 FreeLibrary(mHImmDll);
167 mHImmDll = NULL;
168 }
169 }
170}
171
172LLWinImm::~LLWinImm()
173{
174 if (mHImmDll != NULL)
175 {
176 FreeLibrary(mHImmDll);
177 mHImmDll = NULL;
178 }
179}
87 180
88 181
89LPDIRECTINPUT8 g_pDI = NULL; 182LPDIRECTINPUT8 g_pDI = NULL;
@@ -111,6 +204,10 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
111 // Initialize the keyboard 204 // Initialize the keyboard
112 gKeyboard = new LLKeyboardWin32(); 205 gKeyboard = new LLKeyboardWin32();
113 206
207 // Initialize (boot strap) the Language text input management,
208 // based on the system's (user's) default settings.
209 allowLanguageTextInput(FALSE);
210
114 GLuint pixel_format; 211 GLuint pixel_format;
115 WNDCLASS wc; 212 WNDCLASS wc;
116 DWORD dw_ex_style; 213 DWORD dw_ex_style;
@@ -347,7 +444,6 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
347 444
348 if (!mWindowHandle) 445 if (!mWindowHandle)
349 { 446 {
350 DestroyWindow(mWindowHandle);
351 OSMessageBox("Window creation error", "Error", OSMB_OK); 447 OSMessageBox("Window creation error", "Error", OSMB_OK);
352 return; 448 return;
353 } 449 }
@@ -1926,6 +2022,15 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1926 case WM_CHAR: 2022 case WM_CHAR:
1927 // Should really use WM_UNICHAR eventually, but it requires a specific Windows version and I need 2023 // Should really use WM_UNICHAR eventually, but it requires a specific Windows version and I need
1928 // to figure out how that works. - Doug 2024 // to figure out how that works. - Doug
2025 //
2026 // ... Well, I don't think so.
2027 // How it works is explained in Win32 API document, but WM_UNICHAR didn't work
2028 // as specified at least on Windows XP SP1 Japanese version. I have never used
2029 // it since then, and I'm not sure whether it has been fixed now, but I don't think
2030 // it is worth trying. The good old WM_CHAR works just fine even for supplementary
2031 // characters. We just need to take care of surrogate pairs sent as two WM_CHAR's
2032 // by ourselves. It is not that tough. -- Alissa Sabre @ SL
2033 //
1929 // llinfos << "WM_CHAR: " << w_param << llendl; 2034 // llinfos << "WM_CHAR: " << w_param << llendl;
1930 if (gDebugWindowProc) 2035 if (gDebugWindowProc)
1931 { 2036 {
@@ -1933,11 +2038,10 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1933 << " key " << S32(w_param) 2038 << " key " << S32(w_param)
1934 << llendl; 2039 << llendl;
1935 } 2040 }
1936 if (window_imp->mCallbacks->handleUnicodeChar(w_param, gKeyboard->currentMask(FALSE))) 2041 // Even if LLWindowCallbacks::handleUnicodeChar(llwchar, BOOL) returned FALSE,
1937 { 2042 // we *did* processed the event, so I believe we should not pass it to DefWindowProc...
1938 return 0; 2043 window_imp->handleUnicodeUTF16((U16)w_param, gKeyboard->currentMask(FALSE));
1939 } 2044 return 0;
1940 break;
1941 2045
1942 case WM_LBUTTONDOWN: 2046 case WM_LBUTTONDOWN:
1943 { 2047 {
@@ -2971,7 +3075,7 @@ void spawn_web_browser(const char* escaped_url )
2971 char reg_path_str[256]; /* Flawfinder: ignore */ 3075 char reg_path_str[256]; /* Flawfinder: ignore */
2972 snprintf(reg_path_str, sizeof(reg_path_str), "%s\\shell\\open\\command", gURLProtocolWhitelistHandler[i]); /* Flawfinder: ignore */ 3076 snprintf(reg_path_str, sizeof(reg_path_str), "%s\\shell\\open\\command", gURLProtocolWhitelistHandler[i]); /* Flawfinder: ignore */
2973 WCHAR reg_path_wstr[256]; 3077 WCHAR reg_path_wstr[256];
2974 mbstowcs(reg_path_wstr, reg_path_str, 1024); 3078 mbstowcs(reg_path_wstr, reg_path_str, sizeof(reg_path_wstr)/sizeof(reg_path_wstr[0]));
2975 3079
2976 HKEY key; 3080 HKEY key;
2977 WCHAR browser_open_wstr[1024]; 3081 WCHAR browser_open_wstr[1024];
@@ -3102,6 +3206,58 @@ void LLWindowWin32::bringToFront()
3102void LLWindowWin32::focusClient() 3206void LLWindowWin32::focusClient()
3103{ 3207{
3104 SetFocus ( mWindowHandle ); 3208 SetFocus ( mWindowHandle );
3105}; 3209}
3210
3211void LLWindowWin32::allowLanguageTextInput(BOOL b)
3212{
3213 if (b == sLanguageTextInputAllowed || !LLWinImm::isAvailable())
3214 {
3215 /* Not actually allowing/disallowing. Do nothing. */
3216 return;
3217 }
3218 sLanguageTextInputAllowed = b;
3219
3220 if (b)
3221 {
3222 /* Allowing: Restore the previous IME status,
3223 so that the user has a feeling that the previous
3224 text input continues naturally. Be careful, however,
3225 the IME status is meaningful only during the user keeps
3226 using same Input Locale (aka Keyboard Layout). */
3227 if (sWinIMEOpened && GetKeyboardLayout(0) == sWinInputLocale)
3228 {
3229 HIMC himc = LLWinImm::getContext(mWindowHandle);
3230 LLWinImm::setOpenStatus(himc, TRUE);
3231 LLWinImm::setConversionStatus(himc, sWinIMEConversionMode, sWinIMESentenceMode);
3232 LLWinImm::releaseContext(mWindowHandle, himc);
3233 }
3234 }
3235 else
3236 {
3237 /* Disallowing: Turn off the IME so that succeeding
3238 key events bypass IME and come to us directly.
3239 However, do it after saving the current IME
3240 status. We need to restore the status when
3241 allowing language text input again. */
3242 sWinInputLocale = GetKeyboardLayout(0);
3243 sWinIMEOpened = LLWinImm::isIME(sWinInputLocale);
3244 if (sWinIMEOpened)
3245 {
3246 HIMC himc = LLWinImm::getContext(mWindowHandle);
3247 sWinIMEOpened = LLWinImm::getOpenStatus(himc);
3248 if (sWinIMEOpened)
3249 {
3250 LLWinImm::getConversionStatus(himc, &sWinIMEConversionMode, &sWinIMESentenceMode);
3251
3252 /* We need both ImmSetConversionStatus and ImmSetOpenStatus here
3253 to surely disable IME's keyboard hooking, because Some IME reacts
3254 only on the former and some other on the latter... */
3255 LLWinImm::setConversionStatus(himc, IME_CMODE_NOCONVERSION, sWinIMESentenceMode);
3256 LLWinImm::setOpenStatus(himc, FALSE);
3257 }
3258 LLWinImm::releaseContext(mWindowHandle, himc);
3259 }
3260 }
3261}
3106 3262
3107#endif // LL_WINDOWS 3263#endif // LL_WINDOWS
diff --git a/linden/indra/llwindow/llwindowwin32.h b/linden/indra/llwindow/llwindowwin32.h
index 691c648..0f0cf7c 100644
--- a/linden/indra/llwindow/llwindowwin32.h
+++ b/linden/indra/llwindow/llwindowwin32.h
@@ -106,6 +106,8 @@ public:
106 /*virtual*/ void bringToFront(); 106 /*virtual*/ void bringToFront();
107 /*virtual*/ void focusClient(); 107 /*virtual*/ void focusClient();
108 108
109 /*virtual*/ void allowLanguageTextInput(BOOL b);
110
109protected: 111protected:
110 LLWindowWin32( 112 LLWindowWin32(
111 char *title, char *name, int x, int y, int width, int height, U32 flags, 113 char *title, char *name, int x, int y, int width, int height, U32 flags,
@@ -174,6 +176,15 @@ protected:
174 BOOL mMousePositionModified; 176 BOOL mMousePositionModified;
175 BOOL mInputProcessingPaused; 177 BOOL mInputProcessingPaused;
176 178
179 // The following five variables are for Language Text Input control.
180 // They are all static, since one context is shared by all LLWindowWin32
181 // instances.
182 static BOOL sLanguageTextInputAllowed;
183 static BOOL sWinIMEOpened;
184 static HKL sWinInputLocale;
185 static DWORD sWinIMEConversionMode;
186 static DWORD sWinIMESentenceMode;
187
177 friend class LLWindowManager; 188 friend class LLWindowManager;
178}; 189};
179 190
diff --git a/linden/indra/llxml/llxmlnode.cpp b/linden/indra/llxml/llxmlnode.cpp
index 26906a4..bdbb606 100644
--- a/linden/indra/llxml/llxmlnode.cpp
+++ b/linden/indra/llxml/llxmlnode.cpp
@@ -41,6 +41,7 @@
41#include "v3dmath.h" 41#include "v3dmath.h"
42#include "v4math.h" 42#include "v4math.h"
43#include "llquaternion.h" 43#include "llquaternion.h"
44#include "llstring.h"
44#include "lluuid.h" 45#include "lluuid.h"
45 46
46const S32 MAX_COLUMN_WIDTH = 80; 47const S32 MAX_COLUMN_WIDTH = 80;
@@ -3088,6 +3089,8 @@ LLString LLXMLNode::getTextContents() const
3088 msg = mValue.substr(start); 3089 msg = mValue.substr(start);
3089 } 3090 }
3090 } 3091 }
3092 // Convert any internal CR to LF
3093 msg = utf8str_removeCRLF(msg);
3091 } 3094 }
3092 } 3095 }
3093 return msg; 3096 return msg;
diff --git a/linden/indra/llxml/llxmlparser.cpp b/linden/indra/llxml/llxmlparser.cpp
index 4162e7d..5f931d9 100644
--- a/linden/indra/llxml/llxmlparser.cpp
+++ b/linden/indra/llxml/llxmlparser.cpp
@@ -2,7 +2,7 @@
2 * @file llxmlparser.cpp 2 * @file llxmlparser.cpp
3 * @brief LLXmlParser implementation 3 * @brief LLXmlParser implementation
4 * 4 *
5 * Copyright (c) 2002-2007`, Linden Research, Inc. 5 * Copyright (c) 2002-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/lscript/lscript_compile/indra.l b/linden/indra/lscript/lscript_compile/indra.l
index 6b4e67d..c219cec 100644
--- a/linden/indra/lscript/lscript_compile/indra.l
+++ b/linden/indra/lscript/lscript_compile/indra.l
@@ -1,8 +1,7 @@
1D [-]?[0-9]
2N [0-9] 1N [0-9]
3L [a-zA-Z_] 2L [a-zA-Z_]
4H [a-fA-F0-9] 3H [a-fA-F0-9]
5E [Ee][+-]?{D}+ 4E [Ee][+-]?{N}+
6FS (f|F) 5FS (f|F)
7%e 10000 6%e 10000
8%n 4000 7%n 4000
@@ -41,7 +40,7 @@ void parse_string();
41 40
42#define YYLMAX 16384 41#define YYLMAX 16384
43#define YY_NEVER_INTERACTIVE 1 /* stops flex from calling isatty() */ 42#define YY_NEVER_INTERACTIVE 1 /* stops flex from calling isatty() */
44 43
45#if defined(__cplusplus) 44#if defined(__cplusplus)
46extern "C" { int yylex( void ); } 45extern "C" { int yylex( void ); }
47extern "C" { int yyparse( void ); } 46extern "C" { int yyparse( void ); }
@@ -111,7 +110,7 @@ extern "C" { int yyerror(const char *fmt, ...); }
111 110
112 111
1130[xX]{H}+ { count(); yylval.ival = strtoul(yytext, NULL, 0); return(INTEGER_CONSTANT); } 1120[xX]{H}+ { count(); yylval.ival = strtoul(yytext, NULL, 0); return(INTEGER_CONSTANT); }
114{D}+ { count(); yylval.ival = strtoul(yytext, NULL, 10); return(INTEGER_CONSTANT); } 113{N}+ { count(); yylval.ival = strtoul(yytext, NULL, 10); return(INTEGER_CONSTANT); }
115"TRUE" { count(); yylval.ival = 1; return(INTEGER_TRUE); } 114"TRUE" { count(); yylval.ival = 1; return(INTEGER_TRUE); }
116"FALSE" { count(); yylval.ival = 0; return(INTEGER_FALSE); } 115"FALSE" { count(); yylval.ival = 0; return(INTEGER_FALSE); }
117"STATUS_PHYSICS" { count(); yylval.ival = 0x1; return(INTEGER_CONSTANT); } 116"STATUS_PHYSICS" { count(); yylval.ival = 0x1; return(INTEGER_CONSTANT); }
@@ -571,9 +570,9 @@ extern "C" { int yyerror(const char *fmt, ...); }
571 570
572{L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); } 571{L}({L}|{N})* { count(); yylval.sval = new char[strlen(yytext) + 1]; strcpy(yylval.sval, yytext); return(IDENTIFIER); }
573 572
574{D}+{E} { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); } 573{N}+{E} { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); }
575{D}*"."{D}+({E})?{FS}? { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); } 574{N}*"."{N}+({E})?{FS}? { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); }
576{D}+"."{D}*({E})?{FS}? { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); } 575{N}+"."{N}*({E})?{FS}? { count(); yylval.fval = (F32)atof(yytext); return(FP_CONSTANT); }
577 576
578L?\"(\\.|[^\\"])*\" { parse_string(); count(); return(STRING_CONSTANT); } 577L?\"(\\.|[^\\"])*\" { parse_string(); count(); return(STRING_CONSTANT); }
579 578
@@ -751,6 +750,10 @@ BOOL lscript_compile(char *filename, BOOL is_god_like = FALSE)
751 750
752S32 yywrap() 751S32 yywrap()
753{ 752{
753#ifdef FLEX_SCANNER
754 // get gcc to stop complaining about lack of use of yyunput
755 (void) yyunput;
756#endif
754 return(1); 757 return(1);
755} 758}
756 759
diff --git a/linden/indra/lscript/lscript_compile/indra.y b/linden/indra/lscript/lscript_compile/indra.y
index 7744649..c7a4fd6 100644
--- a/linden/indra/lscript/lscript_compile/indra.y
+++ b/linden/indra/lscript/lscript_compile/indra.y
@@ -143,6 +143,8 @@
143%type <assignable> simple_assignable 143%type <assignable> simple_assignable
144%type <assignable> simple_assignable_no_list 144%type <assignable> simple_assignable_no_list
145%type <constant> constant 145%type <constant> constant
146%type <ival> integer_constant
147%type <fval> fp_constant
146%type <assignable> special_constant 148%type <assignable> special_constant
147%type <assignable> vector_constant 149%type <assignable> vector_constant
148%type <assignable> quaternion_constant 150%type <assignable> quaternion_constant
@@ -352,30 +354,50 @@ simple_assignable_no_list
352 ; 354 ;
353 355
354constant 356constant
355 : INTEGER_CONSTANT 357 : integer_constant
356 { 358 {
357 $$ = new LLScriptConstantInteger(gLine, gColumn, $1); 359 $$ = new LLScriptConstantInteger(gLine, gColumn, $1);
358 gAllocationManager->addAllocation($$); 360 gAllocationManager->addAllocation($$);
359 } 361 }
360 | INTEGER_TRUE 362 | fp_constant
361 { 363 {
362 $$ = new LLScriptConstantInteger(gLine, gColumn, $1); 364 $$ = new LLScriptConstantFloat(gLine, gColumn, $1);
363 gAllocationManager->addAllocation($$); 365 gAllocationManager->addAllocation($$);
364 } 366 }
365 | INTEGER_FALSE 367 | STRING_CONSTANT
366 { 368 {
367 $$ = new LLScriptConstantInteger(gLine, gColumn, $1); 369 $$ = new LLScriptConstantString(gLine, gColumn, $1);
368 gAllocationManager->addAllocation($$); 370 gAllocationManager->addAllocation($$);
369 } 371 }
370 | FP_CONSTANT 372 ;
373
374fp_constant
375 : FP_CONSTANT
371 { 376 {
372 $$ = new LLScriptConstantFloat(gLine, gColumn, $1); 377 $$ = $1;
373 gAllocationManager->addAllocation($$);
374 } 378 }
375 | STRING_CONSTANT 379 | '-' FP_CONSTANT
376 { 380 {
377 $$ = new LLScriptConstantString(gLine, gColumn, $1); 381 $$ = -$2;
378 gAllocationManager->addAllocation($$); 382 }
383 ;
384
385integer_constant
386 : INTEGER_CONSTANT
387 {
388 $$ = $1;
389 }
390 | INTEGER_TRUE
391 {
392 $$ = $1;
393 }
394 | INTEGER_FALSE
395 {
396 $$ = $1;
397 }
398 | '-' INTEGER_CONSTANT
399 {
400 $$ = -$2;
379 } 401 }
380 ; 402 ;
381 403
diff --git a/linden/indra/lscript/lscript_execute/lscript_execute.cpp b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
index 4d8389a..2f81416 100644
--- a/linden/indra/lscript/lscript_execute/lscript_execute.cpp
+++ b/linden/indra/lscript/lscript_execute/lscript_execute.cpp
@@ -1387,7 +1387,7 @@ void integer_integer_operation(U8 *buffer, LSCRIPTOpCodesEnum opcode)
1387 break; 1387 break;
1388 case LOPC_DIV: 1388 case LOPC_DIV:
1389 if (rside){ 1389 if (rside){
1390 if( ( rside == -1 ) || ( rside == 0xffffffff ) )// division by -1 can have funny results: multiplication is OK: SL-31252 1390 if( ( rside == -1 ) || ( rside == (S32) 0xffffffff ) )// division by -1 can have funny results: multiplication is OK: SL-31252
1391 { 1391 {
1392 result = -1 * lside; 1392 result = -1 * lside;
1393 } 1393 }
diff --git a/linden/indra/mac_updater/GenLinkedList.c b/linden/indra/mac_updater/GenLinkedList.c
index f1cde85..50a3761 100644
--- a/linden/indra/mac_updater/GenLinkedList.c
+++ b/linden/indra/mac_updater/GenLinkedList.c
@@ -209,4 +209,4 @@ void Next( GenIteratorPtr *pIter )
209GenDataPtr GetData( GenIteratorPtr pIter ) 209GenDataPtr GetData( GenIteratorPtr pIter )
210{ 210{
211 return ( pIter != NULL ) ? ((GenNode*)pIter)->pData : NULL; 211 return ( pIter != NULL ) ? ((GenNode*)pIter)->pData : NULL;
212} \ No newline at end of file 212}
diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings
index 9df6a82..318a129 100644
--- a/linden/indra/newview/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
1/* Localized versions of Info.plist keys */ 1/* Localized versions of Info.plist keys */
2 2
3CFBundleName = "Second Life"; 3CFBundleName = "Second Life";
4CFBundleShortVersionString = "Second Life version 1.17.0.12"; 4CFBundleShortVersionString = "Second Life version 1.17.1.0";
5CFBundleGetInfoString = "Second Life version 1.17.0.12, Copyright 2004-2007 Linden Research, Inc."; 5CFBundleGetInfoString = "Second Life version 1.17.1.0, Copyright 2004-2007 Linden Research, Inc.";
diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist
index a02f664..080f898 100644
--- a/linden/indra/newview/Info-SecondLife.plist
+++ b/linden/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
32 </dict> 32 </dict>
33 </array> 33 </array>
34 <key>CFBundleVersion</key> 34 <key>CFBundleVersion</key>
35 <string>1.17.0.12</string> 35 <string>1.17.1.0</string>
36 <key>CSResourcesFileMapped</key> 36 <key>CSResourcesFileMapped</key>
37 <true/> 37 <true/>
38</dict> 38</dict>
diff --git a/linden/indra/newview/app_settings/colors_base.xml b/linden/indra/newview/app_settings/colors_base.xml
index 2ef8908..5a9261b 100644
--- a/linden/indra/newview/app_settings/colors_base.xml
+++ b/linden/indra/newview/app_settings/colors_base.xml
@@ -10,6 +10,8 @@
10<!-- usually be left as opaque white. --> 10<!-- usually be left as opaque white. -->
11<ButtonColor value="255, 255, 255, 255"/> 11<ButtonColor value="255, 255, 255, 255"/>
12<ButtonImageColor value="255, 255, 255, 255"/> 12<ButtonImageColor value="255, 255, 255, 255"/>
13<!-- Match the caution dialog buttons to the default -->
14<ButtonCautionImageColor value="255, 255, 255, 255"/>
13 15
14<!-- Text labels for buttons, like the "OK" text --> 16<!-- Text labels for buttons, like the "OK" text -->
15<ButtonLabelColor value="220, 220, 220, 255"/> 17<ButtonLabelColor value="220, 220, 220, 255"/>
@@ -95,6 +97,10 @@
95<!-- top-right of the screen. --> 97<!-- top-right of the screen. -->
96<NotifyBoxColor value="58, 147, 242, 255"/> 98<NotifyBoxColor value="58, 147, 242, 255"/>
97<NotifyTextColor value="0, 0, 0, 255"/> 99<NotifyTextColor value="0, 0, 0, 255"/>
100<!-- the background color of caution permissions prompts -->
101<NotifyCautionBoxColor value="254, 209, 118, 255"/>
102<!-- the foreground color of the special title text in caution permissions prompts -->
103<NotifyCautionWarnColor value="0, 0, 0, 255"/>
98<!-- Background color of focused floaters --> 104<!-- Background color of focused floaters -->
99<FocusBackgroundColor value="62, 62, 62, 255"/> 105<FocusBackgroundColor value="62, 62, 62, 255"/>
100<GroupNotifyBoxColor value="70, 170, 255, 255"/> 106<GroupNotifyBoxColor value="70, 170, 255, 255"/>
diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst
index 2967bed..d6794d7 100644
--- a/linden/indra/newview/files.lst
+++ b/linden/indra/newview/files.lst
@@ -225,6 +225,7 @@ newview/llsky.cpp
225newview/llspatialpartition.cpp 225newview/llspatialpartition.cpp
226newview/llsphere.cpp 226newview/llsphere.cpp
227newview/llsprite.cpp 227newview/llsprite.cpp
228newview/llsrv.cpp
228newview/llstartup.cpp 229newview/llstartup.cpp
229newview/llstatbar.cpp 230newview/llstatbar.cpp
230newview/llstatgraph.cpp 231newview/llstatgraph.cpp
diff --git a/linden/indra/newview/fmodwrapper.cpp b/linden/indra/newview/fmodwrapper.cpp
index 6d74325..b6f1dc7 100644
--- a/linden/indra/newview/fmodwrapper.cpp
+++ b/linden/indra/newview/fmodwrapper.cpp
@@ -36,4 +36,4 @@ void* fmodwrapper(void)
36 // When building the fmodwrapper library, the linker doesn't seem to want to bring in libfmod.a unless I explicitly 36 // When building the fmodwrapper library, the linker doesn't seem to want to bring in libfmod.a unless I explicitly
37 // reference at least one symbol in the library. This seemed like the simplest way. 37 // reference at least one symbol in the library. This seemed like the simplest way.
38 return (void*)&FSOUND_Init; 38 return (void*)&FSOUND_Init;
39} \ No newline at end of file 39}
diff --git a/linden/indra/newview/installers/windows/installer_template.nsi b/linden/indra/newview/installers/windows/installer_template.nsi
index 1b5226c..7a225fa 100644
--- a/linden/indra/newview/installers/windows/installer_template.nsi
+++ b/linden/indra/newview/installers/windows/installer_template.nsi
@@ -37,9 +37,9 @@ XPStyle on ; add an XP manifest to the installer
37;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the 37;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
38;; application directory so we have to add a path to these include files) 38;; application directory so we have to add a path to these include files)
39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
40#!include "installers\windows\lang_de.nsi" 40!include "installers\windows\lang_de.nsi"
41!include "installers\windows\lang_en-us.nsi" 41!include "installers\windows\lang_en-us.nsi"
42#!include "installers\windows\lang_ja.nsi" 42!include "installers\windows\lang_ja.nsi"
43!include "installers\windows\lang_ko.nsi" 43!include "installers\windows\lang_ko.nsi"
44 44
45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -890,10 +890,10 @@ Function .onInit
890 Push "" 890 Push ""
891 Push ${LANG_ENGLISH} 891 Push ${LANG_ENGLISH}
892 Push English 892 Push English
893# Push ${LANG_GERMAN} 893 Push ${LANG_GERMAN}
894# Push German 894 Push German
895# Push ${LANG_JAPANESE} 895 Push ${LANG_JAPANESE}
896# Push Japanese 896 Push Japanese
897 Push ${LANG_KOREAN} 897 Push ${LANG_KOREAN}
898 Push Korean 898 Push Korean
899 Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain 899 Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
@@ -909,12 +909,15 @@ Function .onInit
909 StrCmp $LANGUAGE "1042" 0 +3 909 StrCmp $LANGUAGE "1042" 0 +3
910 StrCpy $LANGFLAGS " -set SystemLanguage ko" 910 StrCpy $LANGFLAGS " -set SystemLanguage ko"
911 Goto EndOfFunc 911 Goto EndOfFunc
912# StrCmp $LANGUAGE "1041" 0 +3 912
913# StrCpy $LANGFLAGS " -set SystemLanguage ja" 913 StrCmp $LANGUAGE "1041" 0 +3
914# Goto EndOfFunc 914 StrCpy $LANGFLAGS " -set SystemLanguage ja"
915# StrCmp $LANGUAGE "1031" 0 +3 915 Goto EndOfFunc
916# StrCpy $LANGFLAGS " -set SystemLanguage de" 916
917# Goto EndOfFunc 917 StrCmp $LANGUAGE "1031" 0 +3
918 StrCpy $LANGFLAGS " -set SystemLanguage de"
919 Goto EndOfFunc
920
918 StrCmp $LANGUAGE "1033" 0 +3 921 StrCmp $LANGUAGE "1033" 0 +3
919 StrCpy $LANGFLAGS " -set SystemLanguage en-us" 922 StrCpy $LANGFLAGS " -set SystemLanguage en-us"
920 Goto EndOfFunc 923 Goto EndOfFunc
diff --git a/linden/indra/newview/licenses-linux.txt b/linden/indra/newview/licenses-linux.txt
index 1892b81..826e044 100644
--- a/linden/indra/newview/licenses-linux.txt
+++ b/linden/indra/newview/licenses-linux.txt
@@ -547,3 +547,96 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
547THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 547THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
548(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 548(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
549OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 549OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
550
551==============
552libpng license
553==============
554
555COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
556
557If you modify libpng you may insert additional notices immediately following
558this sentence.
559
560libpng versions 1.2.6, August 15, 2004, through 1.2.18, May 15, 2007, are
561Copyright (c) 2004, 2006-2007 Glenn Randers-Pehrson, and are
562distributed according to the same disclaimer and license as libpng-1.2.5
563with the following individual added to the list of Contributing Authors:
564
565 Cosmin Truta
566
567libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
568Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
569distributed according to the same disclaimer and license as libpng-1.0.6
570with the following individuals added to the list of Contributing Authors:
571
572 Simon-Pierre Cadieux
573 Eric S. Raymond
574 Gilles Vollant
575
576and with the following additions to the disclaimer:
577
578 There is no warranty against interference with your enjoyment of the
579 library or against infringement. There is no warranty that our
580 efforts or the library will fulfill any of your particular purposes
581 or needs. This library is provided with all faults, and the entire
582 risk of satisfactory quality, performance, accuracy, and effort is with
583 the user.
584
585libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
586Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
587distributed according to the same disclaimer and license as libpng-0.96,
588with the following individuals added to the list of Contributing Authors:
589
590 Tom Lane
591 Glenn Randers-Pehrson
592 Willem van Schaik
593
594libpng versions 0.89, June 1996, through 0.96, May 1997, are
595Copyright (c) 1996, 1997 Andreas Dilger
596Distributed according to the same disclaimer and license as libpng-0.88,
597with the following individuals added to the list of Contributing Authors:
598
599 John Bowler
600 Kevin Bracey
601 Sam Bushell
602 Magnus Holmgren
603 Greg Roelofs
604 Tom Tanner
605
606libpng versions 0.5, May 1995, through 0.88, January 1996, are
607Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
608
609For the purposes of this copyright and license, "Contributing Authors"
610is defined as the following set of individuals:
611
612 Andreas Dilger
613 Dave Martindale
614 Guy Eric Schalnat
615 Paul Schmidt
616 Tim Wegner
617
618The PNG Reference Library is supplied "AS IS". The Contributing Authors
619and Group 42, Inc. disclaim all warranties, expressed or implied,
620including, without limitation, the warranties of merchantability and of
621fitness for any purpose. The Contributing Authors and Group 42, Inc.
622assume no liability for direct, indirect, incidental, special, exemplary,
623or consequential damages, which may result from the use of the PNG
624Reference Library, even if advised of the possibility of such damage.
625
626Permission is hereby granted to use, copy, modify, and distribute this
627source code, or portions hereof, for any purpose, without fee, subject
628to the following restrictions:
629
6301. The origin of this source code must not be misrepresented.
631
6322. Altered versions must be plainly marked as such and
633must not be misrepresented as being the original source.
634
6353. This Copyright notice may not be removed or altered from
636 any source or altered source distribution.
637
638The Contributing Authors and Group 42, Inc. specifically permit, without
639fee, and encourage the use of this source code as a component to
640supporting the PNG file format in commercial products. If you use this
641source code in a product, acknowledgment is not required but would be
642appreciated.
diff --git a/linden/indra/newview/licenses-mac.txt b/linden/indra/newview/licenses-mac.txt
index 6fcf461..24539e5 100644
--- a/linden/indra/newview/licenses-mac.txt
+++ b/linden/indra/newview/licenses-mac.txt
@@ -432,3 +432,96 @@ jloup@gzip.org
432 432
433Mark Adler 433Mark Adler
434madler@alumni.caltech.edu 434madler@alumni.caltech.edu
435
436==============
437libpng license
438==============
439
440COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
441
442If you modify libpng you may insert additional notices immediately following
443this sentence.
444
445libpng versions 1.2.6, August 15, 2004, through 1.2.18, May 15, 2007, are
446Copyright (c) 2004, 2006-2007 Glenn Randers-Pehrson, and are
447distributed according to the same disclaimer and license as libpng-1.2.5
448with the following individual added to the list of Contributing Authors:
449
450 Cosmin Truta
451
452libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
453Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
454distributed according to the same disclaimer and license as libpng-1.0.6
455with the following individuals added to the list of Contributing Authors:
456
457 Simon-Pierre Cadieux
458 Eric S. Raymond
459 Gilles Vollant
460
461and with the following additions to the disclaimer:
462
463 There is no warranty against interference with your enjoyment of the
464 library or against infringement. There is no warranty that our
465 efforts or the library will fulfill any of your particular purposes
466 or needs. This library is provided with all faults, and the entire
467 risk of satisfactory quality, performance, accuracy, and effort is with
468 the user.
469
470libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
471Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
472distributed according to the same disclaimer and license as libpng-0.96,
473with the following individuals added to the list of Contributing Authors:
474
475 Tom Lane
476 Glenn Randers-Pehrson
477 Willem van Schaik
478
479libpng versions 0.89, June 1996, through 0.96, May 1997, are
480Copyright (c) 1996, 1997 Andreas Dilger
481Distributed according to the same disclaimer and license as libpng-0.88,
482with the following individuals added to the list of Contributing Authors:
483
484 John Bowler
485 Kevin Bracey
486 Sam Bushell
487 Magnus Holmgren
488 Greg Roelofs
489 Tom Tanner
490
491libpng versions 0.5, May 1995, through 0.88, January 1996, are
492Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
493
494For the purposes of this copyright and license, "Contributing Authors"
495is defined as the following set of individuals:
496
497 Andreas Dilger
498 Dave Martindale
499 Guy Eric Schalnat
500 Paul Schmidt
501 Tim Wegner
502
503The PNG Reference Library is supplied "AS IS". The Contributing Authors
504and Group 42, Inc. disclaim all warranties, expressed or implied,
505including, without limitation, the warranties of merchantability and of
506fitness for any purpose. The Contributing Authors and Group 42, Inc.
507assume no liability for direct, indirect, incidental, special, exemplary,
508or consequential damages, which may result from the use of the PNG
509Reference Library, even if advised of the possibility of such damage.
510
511Permission is hereby granted to use, copy, modify, and distribute this
512source code, or portions hereof, for any purpose, without fee, subject
513to the following restrictions:
514
5151. The origin of this source code must not be misrepresented.
516
5172. Altered versions must be plainly marked as such and
518must not be misrepresented as being the original source.
519
5203. This Copyright notice may not be removed or altered from
521 any source or altered source distribution.
522
523The Contributing Authors and Group 42, Inc. specifically permit, without
524fee, and encourage the use of this source code as a component to
525supporting the PNG file format in commercial products. If you use this
526source code in a product, acknowledgment is not required but would be
527appreciated.
diff --git a/linden/indra/newview/licenses-win32.txt b/linden/indra/newview/licenses-win32.txt
index 6fcf461..24539e5 100644
--- a/linden/indra/newview/licenses-win32.txt
+++ b/linden/indra/newview/licenses-win32.txt
@@ -432,3 +432,96 @@ jloup@gzip.org
432 432
433Mark Adler 433Mark Adler
434madler@alumni.caltech.edu 434madler@alumni.caltech.edu
435
436==============
437libpng license
438==============
439
440COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
441
442If you modify libpng you may insert additional notices immediately following
443this sentence.
444
445libpng versions 1.2.6, August 15, 2004, through 1.2.18, May 15, 2007, are
446Copyright (c) 2004, 2006-2007 Glenn Randers-Pehrson, and are
447distributed according to the same disclaimer and license as libpng-1.2.5
448with the following individual added to the list of Contributing Authors:
449
450 Cosmin Truta
451
452libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
453Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
454distributed according to the same disclaimer and license as libpng-1.0.6
455with the following individuals added to the list of Contributing Authors:
456
457 Simon-Pierre Cadieux
458 Eric S. Raymond
459 Gilles Vollant
460
461and with the following additions to the disclaimer:
462
463 There is no warranty against interference with your enjoyment of the
464 library or against infringement. There is no warranty that our
465 efforts or the library will fulfill any of your particular purposes
466 or needs. This library is provided with all faults, and the entire
467 risk of satisfactory quality, performance, accuracy, and effort is with
468 the user.
469
470libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
471Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
472distributed according to the same disclaimer and license as libpng-0.96,
473with the following individuals added to the list of Contributing Authors:
474
475 Tom Lane
476 Glenn Randers-Pehrson
477 Willem van Schaik
478
479libpng versions 0.89, June 1996, through 0.96, May 1997, are
480Copyright (c) 1996, 1997 Andreas Dilger
481Distributed according to the same disclaimer and license as libpng-0.88,
482with the following individuals added to the list of Contributing Authors:
483
484 John Bowler
485 Kevin Bracey
486 Sam Bushell
487 Magnus Holmgren
488 Greg Roelofs
489 Tom Tanner
490
491libpng versions 0.5, May 1995, through 0.88, January 1996, are
492Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
493
494For the purposes of this copyright and license, "Contributing Authors"
495is defined as the following set of individuals:
496
497 Andreas Dilger
498 Dave Martindale
499 Guy Eric Schalnat
500 Paul Schmidt
501 Tim Wegner
502
503The PNG Reference Library is supplied "AS IS". The Contributing Authors
504and Group 42, Inc. disclaim all warranties, expressed or implied,
505including, without limitation, the warranties of merchantability and of
506fitness for any purpose. The Contributing Authors and Group 42, Inc.
507assume no liability for direct, indirect, incidental, special, exemplary,
508or consequential damages, which may result from the use of the PNG
509Reference Library, even if advised of the possibility of such damage.
510
511Permission is hereby granted to use, copy, modify, and distribute this
512source code, or portions hereof, for any purpose, without fee, subject
513to the following restrictions:
514
5151. The origin of this source code must not be misrepresented.
516
5172. Altered versions must be plainly marked as such and
518must not be misrepresented as being the original source.
519
5203. This Copyright notice may not be removed or altered from
521 any source or altered source distribution.
522
523The Contributing Authors and Group 42, Inc. specifically permit, without
524fee, and encourage the use of this source code as a component to
525supporting the PNG file format in commercial products. If you use this
526source code in a product, acknowledgment is not required but would be
527appreciated.
diff --git a/linden/indra/newview/linux_tools/wrapper.sh b/linden/indra/newview/linux_tools/wrapper.sh
index 048aaf6..d77da88 100755
--- a/linden/indra/newview/linux_tools/wrapper.sh
+++ b/linden/indra/newview/linux_tools/wrapper.sh
@@ -38,7 +38,7 @@ export LL_GL_BASICEXT=x
38## you're building your own viewer, bear in mind that the executable 38## you're building your own viewer, bear in mind that the executable
39## in the bin directory will be stripped: you should replace it with 39## in the bin directory will be stripped: you should replace it with
40## an unstripped binary before you run. 40## an unstripped binary before you run.
41#export LL_WRAPPER='valgrind --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' 41#export LL_WRAPPER='valgrind --smc-check=all --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp'
42 42
43## - Avoids an often-buggy X feature that doesn't really benefit us anyway. 43## - Avoids an often-buggy X feature that doesn't really benefit us anyway.
44export SDL_VIDEO_X11_DGAMOUSE=0 44export SDL_VIDEO_X11_DGAMOUSE=0
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 83b8c0c..150e35f 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -2019,11 +2019,6 @@ void LLAgent::setAFK()
2019 return; 2019 return;
2020 } 2020 }
2021 2021
2022 if (!gAllowAFK)
2023 {
2024 return;
2025 }
2026
2027 if (!gAgent.getRegion()) 2022 if (!gAgent.getRegion())
2028 { 2023 {
2029 // Don't set AFK if we're not talking to a region yet. 2024 // Don't set AFK if we're not talking to a region yet.
@@ -4983,7 +4978,7 @@ BOOL LLAgent::allowOperation(PermissionBit op,
4983 const LLPermissions& perm, 4978 const LLPermissions& perm,
4984 U64 group_proxy_power, 4979 U64 group_proxy_power,
4985 U8 god_minimum) 4980 U8 god_minimum)
4986 { 4981{
4987 // Check god level. 4982 // Check god level.
4988 if (getGodLevel() >= god_minimum) return TRUE; 4983 if (getGodLevel() >= god_minimum) return TRUE;
4989 4984
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h
index e375227..0ca9f22 100644
--- a/linden/indra/newview/llagent.h
+++ b/linden/indra/newview/llagent.h
@@ -240,7 +240,7 @@ public:
240 const LLUUID &getGroupID() const { return mGroupID; } 240 const LLUUID &getGroupID() const { return mGroupID; }
241 ECameraMode getCameraMode() const { return mCameraMode; } 241 ECameraMode getCameraMode() const { return mCameraMode; }
242 BOOL getFocusOnAvatar() const { return mFocusOnAvatar; } 242 BOOL getFocusOnAvatar() const { return mFocusOnAvatar; }
243 LLViewerObject* getFocusObject() const { return mFocusObject; } 243 LLPointer<LLViewerObject>& getFocusObject() { return mFocusObject; }
244 F32 getFocusObjectDist() const { return mFocusObjectDist; } 244 F32 getFocusObjectDist() const { return mFocusObjectDist; }
245 BOOL inPrelude(); 245 BOOL inPrelude();
246 BOOL canManageEstate() const; 246 BOOL canManageEstate() const;
diff --git a/linden/indra/newview/llassetuploadresponders.cpp b/linden/indra/newview/llassetuploadresponders.cpp
index 789beaa..79faec1 100644
--- a/linden/indra/newview/llassetuploadresponders.cpp
+++ b/linden/indra/newview/llassetuploadresponders.cpp
@@ -122,7 +122,7 @@ void LLAssetUploadResponder::uploadUpload(const LLSD& content)
122 else 122 else
123 { 123 {
124 LLHTTPClient::postFile(uploader, mFileName, this); 124 LLHTTPClient::postFile(uploader, mFileName, this);
125 } 125 }
126} 126}
127 127
128void LLAssetUploadResponder::uploadFailure(const LLSD& content) 128void LLAssetUploadResponder::uploadFailure(const LLSD& content)
diff --git a/linden/indra/newview/llcape.h b/linden/indra/newview/llcape.h
index 64cf2c4..1ccdc9c 100644
--- a/linden/indra/newview/llcape.h
+++ b/linden/indra/newview/llcape.h
@@ -211,7 +211,7 @@ class LLVOCloth : public LLViewerObject
211 //-------------------------------------- 211 //--------------------------------------
212 LLClothAttributes mAttributes; // these determine the characteristics of the cloth 212 LLClothAttributes mAttributes; // these determine the characteristics of the cloth
213 LLVector3 mAvatarCollisionSpherePosition; // derived from the avatar 213 LLVector3 mAvatarCollisionSpherePosition; // derived from the avatar
214 LLViewerObject* mDummyVO [ CLOTH_MAX_STRANDS ]; 214 LLPointer<LLViewerObject> mDummyVO [ CLOTH_MAX_STRANDS ];
215 LLVolumeImplFlexible* mStrand [ CLOTH_MAX_STRANDS ]; // the array of strands that make up the cloth 215 LLVolumeImplFlexible* mStrand [ CLOTH_MAX_STRANDS ]; // the array of strands that make up the cloth
216 216
217 217
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index 539c935..66ffdc4 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -447,7 +447,7 @@ void LLChatBar::sendChat( EChatType type )
447 if (!text.empty()) 447 if (!text.empty())
448 { 448 {
449 // store sent line in history, duplicates will get filtered 449 // store sent line in history, duplicates will get filtered
450 mInputEditor->updateHistory(); 450 if (mInputEditor) mInputEditor->updateHistory();
451 // Check if this is destined for another channel 451 // Check if this is destined for another channel
452 S32 channel = 0; 452 S32 channel = 0;
453 stripChannelNumber(text, &channel); 453 stripChannelNumber(text, &channel);
diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp
index 2b394e9..7481d99 100644
--- a/linden/indra/newview/llcontroldef.cpp
+++ b/linden/indra/newview/llcontroldef.cpp
@@ -61,6 +61,7 @@ void declare_settings()
61 gSavedSettings.declareColor4("SystemChatColor", LLColor4(0.8f, 1.f, 1.f, 1.f), "Color of chat messages from SL System"); 61 gSavedSettings.declareColor4("SystemChatColor", LLColor4(0.8f, 1.f, 1.f, 1.f), "Color of chat messages from SL System");
62 gSavedSettings.declareColor4("AgentChatColor", LLColor4(1.0f, 1.0f, 1.0f, 1.0f), "Color of chat messages from other residents"); 62 gSavedSettings.declareColor4("AgentChatColor", LLColor4(1.0f, 1.0f, 1.0f, 1.0f), "Color of chat messages from other residents");
63 gSavedSettings.declareColor4("ObjectChatColor", LLColor4(0.7f, 0.9f, 0.7f, 1.0f), "Color of chat messages from objects"); 63 gSavedSettings.declareColor4("ObjectChatColor", LLColor4(0.7f, 0.9f, 0.7f, 1.0f), "Color of chat messages from objects");
64 gSavedSettings.declareColor4("llOwnerSayChatColor", LLColor4(0.7f, 0.0f, 0.7f, 1.0f), "Color of chat messages from objects only visible to the owner");
64 gSavedSettings.declareColor4("BackgroundChatColor", LLColor4(0.f, 0.f, 0.f, 1.0f), "Color of chat bubble background"); 65 gSavedSettings.declareColor4("BackgroundChatColor", LLColor4(0.f, 0.f, 0.f, 1.0f), "Color of chat bubble background");
65 gSavedSettings.declareColor4("ScriptErrorColor", LLColor4(0.82f, 0.82f, 0.99f, 1.0f), "Color of script error messages"); 66 gSavedSettings.declareColor4("ScriptErrorColor", LLColor4(0.82f, 0.82f, 0.99f, 1.0f), "Color of script error messages");
66 gSavedSettings.declareColor4("HTMLLinkColor", LLColor4(0.6f, 0.6f, 1.0f, 1.0f), "Color of hyperlinks"); 67 gSavedSettings.declareColor4("HTMLLinkColor", LLColor4(0.6f, 0.6f, 1.0f, 1.0f), "Color of hyperlinks");
@@ -228,7 +229,7 @@ void declare_settings()
228 gSavedSettings.declareBOOL("UseChatBubbles", FALSE, "Show chat above avatars head in chat bubbles"); 229 gSavedSettings.declareBOOL("UseChatBubbles", FALSE, "Show chat above avatars head in chat bubbles");
229 gSavedSettings.declareF32("ChatBubbleOpacity", 0.5f, "Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)"); 230 gSavedSettings.declareF32("ChatBubbleOpacity", 0.5f, "Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)");
230 231
231 gSavedSettings.declareBOOL("AllowAFK", TRUE, "Automatically set AFK (away from keyboard) mode when idle"); 232 gSavedSettings.declareBOOL("AllowIdleAFK", TRUE, "Automatically set AFK (away from keyboard) mode when idle");
232 gSavedSettings.declareF32("AFKTimeout", 300.f, "Time before automatically setting AFK (away from keyboard) mode (seconds)"); // 5 minutes 233 gSavedSettings.declareF32("AFKTimeout", 300.f, "Time before automatically setting AFK (away from keyboard) mode (seconds)"); // 5 minutes
233 234
234 gSavedSettings.declareBOOL("SmallAvatarNames", TRUE, "Display avatar name text in smaller font"); 235 gSavedSettings.declareBOOL("SmallAvatarNames", TRUE, "Display avatar name text in smaller font");
@@ -237,6 +238,13 @@ void declare_settings()
237 gSavedSettings.declareBOOL("ChatShowTimestamps", TRUE, "Show timestamps in chat"); 238 gSavedSettings.declareBOOL("ChatShowTimestamps", TRUE, "Show timestamps in chat");
238 239
239 //------------------------------------------------------------------------ 240 //------------------------------------------------------------------------
241 // Caution Script Permission Prompts
242 //------------------------------------------------------------------------
243
244 gSavedSettings.declareBOOL("PermissionsCautionEnabled", TRUE, "When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission", NO_PERSIST);
245 gSavedSettings.declareS32("PermissionsCautionNotifyBoxHeight", 344, "Height of caution-style notification messages", NO_PERSIST);
246
247 //------------------------------------------------------------------------
240 // Other.... 248 // Other....
241 //------------------------------------------------------------------------ 249 //------------------------------------------------------------------------
242 250
@@ -624,8 +632,10 @@ void declare_settings()
624 LLFirstUse::addConfigVariable("FirstInventory"); 632 LLFirstUse::addConfigVariable("FirstInventory");
625 LLFirstUse::addConfigVariable("FirstSandbox"); 633 LLFirstUse::addConfigVariable("FirstSandbox");
626 LLFirstUse::addConfigVariable("FirstFlexible"); 634 LLFirstUse::addConfigVariable("FirstFlexible");
635 LLFirstUse::addConfigVariable("FirstDebugMenus");
627 LLFirstUse::addConfigVariable("FirstStreamingMusic"); 636 LLFirstUse::addConfigVariable("FirstStreamingMusic");
628 LLFirstUse::addConfigVariable("FirstStreamingVideo"); 637 LLFirstUse::addConfigVariable("FirstStreamingVideo");
638 LLFirstUse::addConfigVariable("FirstSculptedPrim");
629 639
630 gSavedSettings.declareBOOL("ShowDebugConsole", FALSE, "Show log in SL window"); 640 gSavedSettings.declareBOOL("ShowDebugConsole", FALSE, "Show log in SL window");
631 gSavedSettings.declareBOOL("ShowDebugStats", FALSE, "Show performance stats display"); 641 gSavedSettings.declareBOOL("ShowDebugStats", FALSE, "Show performance stats display");
@@ -826,6 +836,10 @@ void declare_settings()
826 gSavedPerAccountSettings.declareBOOL("LogInstantMessages", FALSE, "Log Instant Messages"); 836 gSavedPerAccountSettings.declareBOOL("LogInstantMessages", FALSE, "Log Instant Messages");
827 gSavedPerAccountSettings.declareBOOL("LogChat", FALSE, "Log Chat"); 837 gSavedPerAccountSettings.declareBOOL("LogChat", FALSE, "Log Chat");
828 gSavedPerAccountSettings.declareBOOL("LogShowHistory", FALSE, "Log Show History"); 838 gSavedPerAccountSettings.declareBOOL("LogShowHistory", FALSE, "Log Show History");
839 gSavedPerAccountSettings.declareBOOL("IMLogTimestamp", FALSE, "Log Timestamp of Instant Messages");
840 gSavedPerAccountSettings.declareBOOL("LogChatTimestamp", FALSE, "Log Timestamp of Chat");
841 gSavedPerAccountSettings.declareBOOL("LogChatIM", FALSE, "Log Incoming Instant Messages with Chat");
842 gSavedPerAccountSettings.declareBOOL("LogTimestampDate", FALSE, "Include Date with Timestamp");
829 843
830 // Inventory 844 // Inventory
831 gSavedSettings.declareRect("FloaterInventoryRect", LLRect(0, 400, 300, 0), "Rectangle for inventory window" ); 845 gSavedSettings.declareRect("FloaterInventoryRect", LLRect(0, 400, 300, 0), "Rectangle for inventory window" );
@@ -973,7 +987,7 @@ void declare_settings()
973 gSavedSettings.declareU32("RegionTextureSize", 256, "Terrain texture dimensions (power of 2)"); 987 gSavedSettings.declareU32("RegionTextureSize", 256, "Terrain texture dimensions (power of 2)");
974 988
975 // Selection option 989 // Selection option
976 gSavedSettings.declareBOOL("SelectLinkedSet", TRUE, "", NO_PERSIST); 990 gSavedSettings.declareBOOL("EditLinkedParts", FALSE, "Select individual parts of linked objects", NO_PERSIST);
977 991
978 // Selection beam 992 // Selection beam
979 gSavedSettings.declareBOOL("ShowSelectionBeam", TRUE, "Show selection particle beam when selecting or interacting with objects."); 993 gSavedSettings.declareBOOL("ShowSelectionBeam", TRUE, "Show selection particle beam when selecting or interacting with objects.");
diff --git a/linden/indra/newview/lldebugmessagebox.cpp b/linden/indra/newview/lldebugmessagebox.cpp
index e238800..948b96a 100644
--- a/linden/indra/newview/lldebugmessagebox.cpp
+++ b/linden/indra/newview/lldebugmessagebox.cpp
@@ -77,6 +77,9 @@ LLDebugVarMessageBox::LLDebugVarMessageBox(const std::string& title, EDebugVarTy
77 addChild(mSlider2); 77 addChild(mSlider2);
78 addChild(mSlider3); 78 addChild(mSlider3);
79 break; 79 break;
80 default:
81 llwarns << "Unhandled var type " << var_type << llendl;
82 break;
80 } 83 }
81 84
82 mAnimateButton = new LLButton("Animate", LLRect(20, 45, 180, 25), "", onAnimateClicked, this); 85 mAnimateButton = new LLButton("Animate", LLRect(20, 45, 180, 25), "", onAnimateClicked, this);
@@ -185,12 +188,17 @@ void LLDebugVarMessageBox::slider_changed(LLUICtrl* ctrl, void* user_data)
185 *((S32*)msg_box->mVarData) = (S32)msg_box->mSlider1->getValue().asInteger(); 188 *((S32*)msg_box->mVarData) = (S32)msg_box->mSlider1->getValue().asInteger();
186 break; 189 break;
187 case VAR_TYPE_VEC3: 190 case VAR_TYPE_VEC3:
191 {
188 LLVector3* vec_p = (LLVector3*)msg_box->mVarData; 192 LLVector3* vec_p = (LLVector3*)msg_box->mVarData;
189 vec_p->setVec((F32)msg_box->mSlider1->getValue().asReal(), 193 vec_p->setVec((F32)msg_box->mSlider1->getValue().asReal(),
190 (F32)msg_box->mSlider2->getValue().asReal(), 194 (F32)msg_box->mSlider2->getValue().asReal(),
191 (F32)msg_box->mSlider3->getValue().asReal()); 195 (F32)msg_box->mSlider3->getValue().asReal());
192 break; 196 break;
193 } 197 }
198 default:
199 llwarns << "Unhandled var type " << msg_box->mVarType << llendl;
200 break;
201 }
194} 202}
195 203
196void LLDebugVarMessageBox::onAnimateClicked(void* user_data) 204void LLDebugVarMessageBox::onAnimateClicked(void* user_data)
@@ -217,10 +225,15 @@ void LLDebugVarMessageBox::draw()
217 snprintf(text, sizeof(text), "%d", *((S32*)mVarData)); /* Flawfinder: ignore */ 225 snprintf(text, sizeof(text), "%d", *((S32*)mVarData)); /* Flawfinder: ignore */
218 break; 226 break;
219 case VAR_TYPE_VEC3: 227 case VAR_TYPE_VEC3:
228 {
220 LLVector3* vec_p = (LLVector3*)mVarData; 229 LLVector3* vec_p = (LLVector3*)mVarData;
221 snprintf(text, sizeof(text), "%.3f %.3f %.3f", vec_p->mV[VX], vec_p->mV[VY], vec_p->mV[VZ]); /* Flawfinder: ignore */ 230 snprintf(text, sizeof(text), "%.3f %.3f %.3f", vec_p->mV[VX], vec_p->mV[VY], vec_p->mV[VZ]); /* Flawfinder: ignore */
222 break; 231 break;
223 } 232 }
233 default:
234 llwarns << "Unhandled var type " << mVarType << llendl;
235 break;
236 }
224 mText->setText(text); 237 mText->setText(text);
225 238
226 if(mAnimate) 239 if(mAnimate)
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index a39416c..f5f69ea 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -1324,7 +1324,7 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector<LLDrawable*>*
1324 1324
1325 if (parent) 1325 if (parent)
1326 { 1326 {
1327 av = (LLVOAvatar*) parent->getVObj(); 1327 av = (LLVOAvatar*) parent->getVObj().get();
1328 1328
1329 if (!av->isVisible()) 1329 if (!av->isVisible())
1330 { 1330 {
diff --git a/linden/indra/newview/lldrawable.h b/linden/indra/newview/lldrawable.h
index 7429292..97e512f 100644
--- a/linden/indra/newview/lldrawable.h
+++ b/linden/indra/newview/lldrawable.h
@@ -82,8 +82,8 @@ public:
82 82
83 const LLViewerRegion* getRegion() const { return mVObjp->getRegion(); } 83 const LLViewerRegion* getRegion() const { return mVObjp->getRegion(); }
84 const LLTextureEntry* getTextureEntry(U8 which) const { return mVObjp->getTE(which); } 84 const LLTextureEntry* getTextureEntry(U8 which) const { return mVObjp->getTE(which); }
85 LLViewerObject* getVObj() { return mVObjp; } 85 LLPointer<LLViewerObject>& getVObj() { return mVObjp; }
86 const LLViewerObject* getVObj() const { return mVObjp; } 86 const LLViewerObject *getVObj() const { return mVObjp; }
87 LLVOVolume* getVOVolume() const; // cast mVObjp tp LLVOVolume if OK 87 LLVOVolume* getVOVolume() const; // cast mVObjp tp LLVOVolume if OK
88 88
89 const LLMatrix4& getWorldMatrix() const { return mXform.getWorldMatrix(); } 89 const LLMatrix4& getWorldMatrix() const { return mXform.getWorldMatrix(); }
diff --git a/linden/indra/newview/lldrawpool.cpp b/linden/indra/newview/lldrawpool.cpp
index 4a1794e..0ab5b54 100644
--- a/linden/indra/newview/lldrawpool.cpp
+++ b/linden/indra/newview/lldrawpool.cpp
@@ -486,15 +486,20 @@ void LLRenderPass::renderInvisible(U32 mask)
486 486
487 std::vector<LLDrawInfo*>& draw_info = gPipeline.mRenderMap[LLRenderPass::PASS_INVISIBLE]; 487 std::vector<LLDrawInfo*>& draw_info = gPipeline.mRenderMap[LLRenderPass::PASS_INVISIBLE];
488 488
489 U32* indices_pointer = NULL;
490 for (std::vector<LLDrawInfo*>::iterator i = draw_info.begin(); i != draw_info.end(); ++i) 489 for (std::vector<LLDrawInfo*>::iterator i = draw_info.begin(); i != draw_info.end(); ++i)
491 { 490 {
492 LLDrawInfo& params = **i; 491 LLDrawInfo& params = **i;
493 params.mVertexBuffer->setBuffer(mask); 492
494 indices_pointer = (U32*) params.mVertexBuffer->getIndicesPointer(); 493 if (params.mVertexBuffer)
495 glDrawRangeElements(GL_TRIANGLES, params.mStart, params.mEnd, params.mCount, 494 {
496 GL_UNSIGNED_INT, indices_pointer+params.mOffset); 495 params.mVertexBuffer->setBuffer(mask);
497 gPipeline.mTrianglesDrawn += params.mCount/3; 496 U32 *indices_pointer =
497 (U32 *) params.mVertexBuffer->getIndicesPointer();
498 glDrawRangeElements(GL_TRIANGLES, params.mStart, params.mEnd,
499 params.mCount, GL_UNSIGNED_INT,
500 indices_pointer + params.mOffset);
501 gPipeline.mTrianglesDrawn += params.mCount / 3;
502 }
498 } 503 }
499} 504}
500 505
diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp
index b864449..ae76aeb 100644
--- a/linden/indra/newview/lldrawpoolavatar.cpp
+++ b/linden/indra/newview/lldrawpoolavatar.cpp
@@ -319,7 +319,7 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
319 { 319 {
320 return; 320 return;
321 } 321 }
322 avatarp = (LLVOAvatar *)(facep->getDrawable()->getVObj()); 322 avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get();
323 } 323 }
324 324
325 if (avatarp->isDead() || avatarp->mDrawable.isNull()) 325 if (avatarp->isDead() || avatarp->mDrawable.isNull())
@@ -525,7 +525,7 @@ void LLDrawPoolAvatar::renderForSelect()
525 { 525 {
526 return; 526 return;
527 } 527 }
528 LLVOAvatar *avatarp = (LLVOAvatar *)(facep->getDrawable()->getVObj()); 528 LLVOAvatar *avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get();
529 529
530 if (avatarp->isDead() || avatarp->mIsDummy || avatarp->mDrawable.isNull()) 530 if (avatarp->isDead() || avatarp->mIsDummy || avatarp->mDrawable.isNull())
531 { 531 {
diff --git a/linden/indra/newview/lldrawpooltree.cpp b/linden/indra/newview/lldrawpooltree.cpp
index 2f380f8..6749178 100644
--- a/linden/indra/newview/lldrawpooltree.cpp
+++ b/linden/indra/newview/lldrawpooltree.cpp
@@ -164,7 +164,7 @@ void LLDrawPoolTree::renderTree(BOOL selecting)
164 U32* indicesp = (U32*) face->mVertexBuffer->getIndicesPointer(); 164 U32* indicesp = (U32*) face->mVertexBuffer->getIndicesPointer();
165 165
166 // Render each of the trees 166 // Render each of the trees
167 LLVOTree *treep = (LLVOTree *)drawablep->getVObj(); 167 LLVOTree *treep = (LLVOTree *)drawablep->getVObj().get();
168 168
169 LLColor4U color(255,255,255,255); 169 LLColor4U color(255,255,255,255);
170 170
diff --git a/linden/indra/newview/lldriverparam.h b/linden/indra/newview/lldriverparam.h
index e96d5ce..f7b0819 100644
--- a/linden/indra/newview/lldriverparam.h
+++ b/linden/indra/newview/lldriverparam.h
@@ -104,7 +104,7 @@ protected:
104 typedef std::vector<LLDrivenEntry> entry_list_t; 104 typedef std::vector<LLDrivenEntry> entry_list_t;
105 entry_list_t mDriven; 105 entry_list_t mDriven;
106 LLViewerVisualParam* mCurrentDistortionParam; 106 LLViewerVisualParam* mCurrentDistortionParam;
107 LLVOAvatar* mAvatarp; 107 LLPointer<LLVOAvatar> mAvatarp;
108}; 108};
109 109
110#endif // LL_LLDRIVERPARAM_H 110#endif // LL_LLDRIVERPARAM_H
diff --git a/linden/indra/newview/lleventpoll.cpp b/linden/indra/newview/lleventpoll.cpp
index 7430fc3..dd59a06 100644
--- a/linden/indra/newview/lleventpoll.cpp
+++ b/linden/indra/newview/lleventpoll.cpp
@@ -1,8 +1,8 @@
1/** 1/**
2 * @file lleventpoll.cpp 2 * @file lleventpoll.cpp
3 * @brief Implementation of the LLEventPoll class. 3 * @brief Implementation of the LLEventPoll class.
4 * 4 *
5 * Copyright (c) 2006-2007, Linden Research, Inc. 5 * Copyright (c) 2006-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp
index 342c76e..782048c 100644
--- a/linden/indra/newview/llface.cpp
+++ b/linden/indra/newview/llface.cpp
@@ -1398,7 +1398,7 @@ void LLFace::enableLights() const
1398 } 1398 }
1399 if (isState(LIGHT)) 1399 if (isState(LIGHT))
1400 { 1400 {
1401 const LLVOVolume* vovolume = (const LLVOVolume*)(mDrawablep->getVObj()); 1401 const LLVOVolume* vovolume = (const LLVOVolume*)mDrawablep->getVObj();
1402 gPipeline.setAmbient(vovolume->getLightColor()); 1402 gPipeline.setAmbient(vovolume->getLightColor());
1403 } 1403 }
1404} 1404}
diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp
index 24d3932..3620c05 100644
--- a/linden/indra/newview/llfilepicker.cpp
+++ b/linden/indra/newview/llfilepicker.cpp
@@ -49,7 +49,7 @@ LLFilePicker LLFilePicker::sInstance;
49 49
50#if LL_WINDOWS 50#if LL_WINDOWS
51#define SOUND_FILTER L"Sounds (*.wav)\0*.wav\0" 51#define SOUND_FILTER L"Sounds (*.wav)\0*.wav\0"
52#define IMAGE_FILTER L"Images (*.tga; *.bmp; *.jpg; *.jpeg)\0*.tga;*.bmp;*.jpg;*.jpeg\0" 52#define IMAGE_FILTER L"Images (*.tga; *.bmp; *.jpg; *.jpeg; *.png)\0*.tga;*.bmp;*.jpg;*.jpeg;*.png\0"
53#define ANIM_FILTER L"Animations (*.bvh)\0*.bvh\0" 53#define ANIM_FILTER L"Animations (*.bvh)\0*.bvh\0"
54#ifdef _CORY_TESTING 54#ifdef _CORY_TESTING
55#define GEOMETRY_FILTER L"SL Geometry (*.slg)\0*.slg\0" 55#define GEOMETRY_FILTER L"SL Geometry (*.slg)\0*.slg\0"
@@ -511,10 +511,12 @@ Boolean LLFilePicker::navOpenFilterProc(AEDesc *theItem, void *info, void *callB
511 if (fileInfo.filetype != 'JPEG' && fileInfo.filetype != 'JPG ' && 511 if (fileInfo.filetype != 'JPEG' && fileInfo.filetype != 'JPG ' &&
512 fileInfo.filetype != 'BMP ' && fileInfo.filetype != 'TGA ' && 512 fileInfo.filetype != 'BMP ' && fileInfo.filetype != 'TGA ' &&
513 fileInfo.filetype != 'BMPf' && fileInfo.filetype != 'TPIC' && 513 fileInfo.filetype != 'BMPf' && fileInfo.filetype != 'TPIC' &&
514 fileInfo.filetype != 'PNG ' &&
514 (fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("jpeg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && 515 (fileInfo.extension && (CFStringCompare(fileInfo.extension, CFSTR("jpeg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo &&
515 CFStringCompare(fileInfo.extension, CFSTR("jpg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && 516 CFStringCompare(fileInfo.extension, CFSTR("jpg"), kCFCompareCaseInsensitive) != kCFCompareEqualTo &&
516 CFStringCompare(fileInfo.extension, CFSTR("bmp"), kCFCompareCaseInsensitive) != kCFCompareEqualTo && 517 CFStringCompare(fileInfo.extension, CFSTR("bmp"), kCFCompareCaseInsensitive) != kCFCompareEqualTo &&
517 CFStringCompare(fileInfo.extension, CFSTR("tga"), kCFCompareCaseInsensitive) != kCFCompareEqualTo)) 518 CFStringCompare(fileInfo.extension, CFSTR("tga"), kCFCompareCaseInsensitive) != kCFCompareEqualTo &&
519 CFStringCompare(fileInfo.extension, CFSTR("png"), kCFCompareCaseInsensitive) != kCFCompareEqualTo))
518 ) 520 )
519 { 521 {
520 result = false; 522 result = false;
@@ -1169,7 +1171,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter )
1169 case FFLOAD_ANIM: 1171 case FFLOAD_ANIM:
1170 caption += "Animations (*.bvh)"; break; 1172 caption += "Animations (*.bvh)"; break;
1171 case FFLOAD_IMAGE: 1173 case FFLOAD_IMAGE:
1172 caption += "Images (*.tga; *.bmp; *.jpg; *.jpeg)"; break; 1174 caption += "Images (*.tga; *.bmp; *.jpg; *.jpeg; *.png)"; break;
1173 default:; 1175 default:;
1174 break; 1176 break;
1175 } 1177 }
diff --git a/linden/indra/newview/llfirstuse.cpp b/linden/indra/newview/llfirstuse.cpp
index 74381dc..1ddac8e 100644
--- a/linden/indra/newview/llfirstuse.cpp
+++ b/linden/indra/newview/llfirstuse.cpp
@@ -60,6 +60,18 @@ void LLFirstUse::disableFirstUse()
60 } 60 }
61} 61}
62 62
63// static
64void LLFirstUse::resetFirstUse()
65{
66 // Set all first-use warnings to disabled
67 for (std::set<LLString>::iterator iter = sConfigVariables.begin();
68 iter != sConfigVariables.end(); ++iter)
69 {
70 gSavedSettings.setWarning(*iter, TRUE);
71 }
72}
73
74
63// Called whenever the viewer detects that your balance went up 75// Called whenever the viewer detects that your balance went up
64void LLFirstUse::useBalanceIncrease(S32 delta) 76void LLFirstUse::useBalanceIncrease(S32 delta)
65{ 77{
@@ -214,3 +226,25 @@ void LLFirstUse::useFlexible()
214 } 226 }
215} 227}
216 228
229// static
230void LLFirstUse::useDebugMenus()
231{
232 if (gSavedSettings.getWarning("FirstDebugMenus"))
233 {
234 gSavedSettings.setWarning("FirstDebugMenus", FALSE);
235
236 LLNotifyBox::showXml("FirstDebugMenus");
237 }
238}
239
240// static
241void LLFirstUse::useSculptedPrim()
242{
243 if (gSavedSettings.getWarning("FirstSculptedPrim"))
244 {
245 gSavedSettings.setWarning("FirstSculptedPrim", FALSE);
246
247 LLNotifyBox::showXml("FirstSculptedPrim");
248
249 }
250}
diff --git a/linden/indra/newview/llfirstuse.h b/linden/indra/newview/llfirstuse.h
index 4d0e754..d48ae96 100644
--- a/linden/indra/newview/llfirstuse.h
+++ b/linden/indra/newview/llfirstuse.h
@@ -66,6 +66,10 @@ object or from inventory.
6611. FIrst time you run the client on a system without QuickTime installed. 6611. FIrst time you run the client on a system without QuickTime installed.
67 67
6812. First time you create a flexible object. 6812. First time you create a flexible object.
69
7013. First time you open the debug menus (ctrl-alt-shift D)
71
7214. First time you create/edit a sculpted prim.
69*/ 73*/
70 74
71class LLFirstUse 75class LLFirstUse
@@ -76,6 +80,7 @@ public:
76 80
77 // Sets all controls back to show the dialogs. 81 // Sets all controls back to show the dialogs.
78 static void disableFirstUse(); 82 static void disableFirstUse();
83 static void resetFirstUse();
79 84
80 // These methods are called each time the appropriate action is 85 // These methods are called each time the appropriate action is
81 // taken. The functions themselves handle only showing the dialog 86 // taken. The functions themselves handle only showing the dialog
@@ -94,6 +99,8 @@ public:
94 static void useInventory(); 99 static void useInventory();
95 static void useSandbox(); 100 static void useSandbox();
96 static void useFlexible(); 101 static void useFlexible();
102 static void useDebugMenus();
103 static void useSculptedPrim();
97 104
98protected: 105protected:
99 static std::set<LLString> sConfigVariables; 106 static std::set<LLString> sConfigVariables;
diff --git a/linden/indra/newview/llflexibleobject.cpp b/linden/indra/newview/llflexibleobject.cpp
index 0dce348..8e4fe91 100644
--- a/linden/indra/newview/llflexibleobject.cpp
+++ b/linden/indra/newview/llflexibleobject.cpp
@@ -252,12 +252,6 @@ void LLVolumeImplFlexible::onSetVolume(const LLVolumeParams &volume_params, cons
252//--------------------------------------------------------------------------------- 252//---------------------------------------------------------------------------------
253BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) 253BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
254{ 254{
255 if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))
256 {
257 return FALSE; // (we are not initialized or updated)
258 }
259
260 LLFastTimer ftm(LLFastTimer::FTM_FLEXIBLE_UPDATE);
261 255
262 if (mVO->mDrawable.isNull()) 256 if (mVO->mDrawable.isNull())
263 { 257 {
@@ -272,6 +266,8 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
272 LLViewerObject* parent = (LLViewerObject*) mVO->getParent(); 266 LLViewerObject* parent = (LLViewerObject*) mVO->getParent();
273 parent->mDrawable->mQuietCount = 0; 267 parent->mDrawable->mQuietCount = 0;
274 } 268 }
269
270 LLFastTimer ftm(LLFastTimer::FTM_FLEXIBLE_UPDATE);
275 271
276 S32 new_res = mAttributes->getSimulateLOD(); 272 S32 new_res = mAttributes->getSimulateLOD();
277 273
@@ -284,6 +280,8 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
284 { 280 {
285 mRenderRes = FLEXIBLE_OBJECT_MAX_SECTIONS; 281 mRenderRes = FLEXIBLE_OBJECT_MAX_SECTIONS;
286 } 282 }
283
284
287 // Bottom cap at 1/4 the original number of sections 285 // Bottom cap at 1/4 the original number of sections
288 if (mRenderRes < mAttributes->getSimulateLOD()-1) 286 if (mRenderRes < mAttributes->getSimulateLOD()-1)
289 { 287 {
@@ -301,6 +299,10 @@ BOOL LLVolumeImplFlexible::doIdleUpdate(LLAgent &agent, LLWorld &world, const F6
301 setAttributesOfAllSections(); 299 setAttributesOfAllSections();
302 mInitialized = TRUE; 300 mInitialized = TRUE;
303 } 301 }
302 if (!gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_FLEXIBLE))
303 {
304 return FALSE; // (we are not initialized or updated)
305 }
304 306
305 if (mVO->mDrawable->isVisible() && 307 if (mVO->mDrawable->isVisible() &&
306 !mVO->mDrawable->isState(LLDrawable::IN_REBUILD_Q1) && 308 !mVO->mDrawable->isState(LLDrawable::IN_REBUILD_Q1) &&
@@ -624,7 +626,7 @@ void LLVolumeImplFlexible::onSetScale(const LLVector3& scale, BOOL damped)
624 626
625BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable) 627BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
626{ 628{
627 LLVOVolume *volume = (LLVOVolume*)mVO; 629 LLVOVolume *volume = (LLVOVolume*)mVO.get();
628 630
629 if (volume->mDrawable.isNull()) // Not sure why this is happening, but it is... 631 if (volume->mDrawable.isNull()) // Not sure why this is happening, but it is...
630 { 632 {
@@ -740,7 +742,7 @@ void LLVolumeImplFlexible::updateRelativeXform()
740{ 742{
741 LLQuaternion delta_rot; 743 LLQuaternion delta_rot;
742 LLVector3 delta_pos, delta_scale; 744 LLVector3 delta_pos, delta_scale;
743 LLVOVolume* vo = (LLVOVolume*) mVO; 745 LLVOVolume* vo = (LLVOVolume*) mVO.get();
744 746
745 //matrix from local space to parent relative/global space 747 //matrix from local space to parent relative/global space
746 delta_rot = vo->mDrawable->isSpatialRoot() ? LLQuaternion() : vo->mDrawable->getRotation(); 748 delta_rot = vo->mDrawable->isSpatialRoot() ? LLQuaternion() : vo->mDrawable->getRotation();
diff --git a/linden/indra/newview/llflexibleobject.h b/linden/indra/newview/llflexibleobject.h
index 3d35dd2..507073b 100644
--- a/linden/indra/newview/llflexibleobject.h
+++ b/linden/indra/newview/llflexibleobject.h
@@ -111,7 +111,7 @@ class LLVolumeImplFlexible : public LLVolumeInterface
111 //-------------------------------------- 111 //--------------------------------------
112 // private members 112 // private members
113 //-------------------------------------- 113 //--------------------------------------
114 LLViewerObject* mVO; 114 LLPointer<LLViewerObject> mVO;
115 LLTimer mTimer; 115 LLTimer mTimer;
116 LLVector3 mAnchorPosition; 116 LLVector3 mAnchorPosition;
117 LLVector3 mParentPosition; 117 LLVector3 mParentPosition;
diff --git a/linden/indra/newview/llfloateranimpreview.h b/linden/indra/newview/llfloateranimpreview.h
index f6d9589..c536fb5 100644
--- a/linden/indra/newview/llfloateranimpreview.h
+++ b/linden/indra/newview/llfloateranimpreview.h
@@ -61,7 +61,7 @@ protected:
61 F32 mCameraZoom; 61 F32 mCameraZoom;
62 LLVector3 mCameraOffset; 62 LLVector3 mCameraOffset;
63 LLVector3 mCameraRelPos; 63 LLVector3 mCameraRelPos;
64 LLVOAvatar* mDummyAvatar; 64 LLPointer<LLVOAvatar> mDummyAvatar;
65}; 65};
66 66
67class LLFloaterAnimPreview : public LLFloaterNameDesc 67class LLFloaterAnimPreview : public LLFloaterNameDesc
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index d31532f..5e416d4 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -150,12 +150,22 @@ void add_timestamped_line(LLViewerTextEditor* edit, const LLString& line, const
150 edit->appendColoredText(line, false, prepend_newline, color); 150 edit->appendColoredText(line, false, prepend_newline, color);
151} 151}
152 152
153void log_chat_text(const LLChat& chat)
154{
155 LLString histstr;
156 if (gSavedPerAccountSettings.getBOOL("LogChatTimestamp"))
157 histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + chat.mText;
158 else
159 histstr = chat.mText;
160
161 LLLogChat::saveHistory("chat",histstr);
162}
153// static 163// static
154void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file) 164void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
155{ 165{
156 if ( gSavedPerAccountSettings.getBOOL("LogChat") && log_to_file) 166 if ( gSavedPerAccountSettings.getBOOL("LogChat") && log_to_file)
157 { 167 {
158 LLLogChat::saveHistory("chat",chat.mText); 168 log_chat_text(chat);
159 } 169 }
160 170
161 LLColor4 color = get_text_color(chat); 171 LLColor4 color = get_text_color(chat);
@@ -364,10 +374,14 @@ void LLFloaterChat::addChat(const LLChat& chat,
364 gConsole->addLine(chat.mText, size, text_color); 374 gConsole->addLine(chat.mText, size, text_color);
365 } 375 }
366 376
367 if( !from_instant_message || gSavedSettings.getBOOL("IMInChatHistory") ) 377 if(from_instant_message && gSavedPerAccountSettings.getBOOL("LogChatIM"))
368 { 378 log_chat_text(chat);
379
380 if(from_instant_message && gSavedSettings.getBOOL("IMInChatHistory"))
381 addChatHistory(chat,false);
382
383 if(!from_instant_message)
369 addChatHistory(chat); 384 addChatHistory(chat);
370 }
371} 385}
372 386
373LLColor4 get_text_color(const LLChat& chat) 387LLColor4 get_text_color(const LLChat& chat)
@@ -400,6 +414,10 @@ LLColor4 get_text_color(const LLChat& chat)
400 { 414 {
401 text_color = gSavedSettings.getColor4("ScriptErrorColor"); 415 text_color = gSavedSettings.getColor4("ScriptErrorColor");
402 } 416 }
417 else if ( chat.mChatType == CHAT_TYPE_OWNER )
418 {
419 text_color = gSavedSettings.getColor4("llOwnerSayChatColor");
420 }
403 else 421 else
404 { 422 {
405 text_color = gSavedSettings.getColor4("ObjectChatColor"); 423 text_color = gSavedSettings.getColor4("ObjectChatColor");
diff --git a/linden/indra/newview/llfloatercustomize.cpp b/linden/indra/newview/llfloatercustomize.cpp
index ee83bf9..62ead8f 100644
--- a/linden/indra/newview/llfloatercustomize.cpp
+++ b/linden/indra/newview/llfloatercustomize.cpp
@@ -422,6 +422,8 @@ public:
422 static void onTextureCommit( LLUICtrl* ctrl, void* userdata ); 422 static void onTextureCommit( LLUICtrl* ctrl, void* userdata );
423 static void onColorCommit( LLUICtrl* ctrl, void* userdata ); 423 static void onColorCommit( LLUICtrl* ctrl, void* userdata );
424 static void onCommitSexChange( LLUICtrl*, void* userdata ); 424 static void onCommitSexChange( LLUICtrl*, void* userdata );
425 static void onSelectAutoWearOption(S32 option, void* data);
426
425 427
426 428
427private: 429private:
@@ -662,6 +664,11 @@ void LLPanelEditWearable::onBtnRevert( void* userdata )
662void LLPanelEditWearable::onBtnCreateNew( void* userdata ) 664void LLPanelEditWearable::onBtnCreateNew( void* userdata )
663{ 665{
664 LLPanelEditWearable* self = (LLPanelEditWearable*) userdata; 666 LLPanelEditWearable* self = (LLPanelEditWearable*) userdata;
667 gViewerWindow->alertXml("AutoWearNewClothing", onSelectAutoWearOption, self);
668}
669void LLPanelEditWearable::onSelectAutoWearOption(S32 option, void* data)
670{
671 LLPanelEditWearable* self = (LLPanelEditWearable*) data;
665 LLVOAvatar* avatar = gAgent.getAvatarObject(); 672 LLVOAvatar* avatar = gAgent.getAvatarObject();
666 if(avatar) 673 if(avatar)
667 { 674 {
@@ -673,14 +680,15 @@ void LLPanelEditWearable::onBtnCreateNew( void* userdata )
673 // regular UI, items get created in normal folder 680 // regular UI, items get created in normal folder
674 folder_id = gInventory.findCategoryUUIDForType(asset_type); 681 folder_id = gInventory.findCategoryUUIDForType(asset_type);
675 682
676 LLPointer<LLInventoryCallback> cb = new WearOnAvatarCallback; 683 // Only auto wear the new item if the AutoWearNewClothing checkbox is selected.
684 LLPointer<LLInventoryCallback> cb = option == 0 ?
685 new WearOnAvatarCallback : NULL;
677 create_inventory_item(gAgent.getID(), gAgent.getSessionID(), 686 create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
678 folder_id, wearable->getTransactionID(), wearable->getName(), wearable->getDescription(), 687 folder_id, wearable->getTransactionID(), wearable->getName(), wearable->getDescription(),
679 asset_type, LLInventoryType::IT_WEARABLE, wearable->getType(), 688 asset_type, LLInventoryType::IT_WEARABLE, wearable->getType(),
680 wearable->getPermissions().getMaskNextOwner(), cb); 689 wearable->getPermissions().getMaskNextOwner(), cb);
681 } 690 }
682} 691}
683
684void LLPanelEditWearable::addColorSwatch( LLVOAvatar::ETextureIndex te, const LLString& name ) 692void LLPanelEditWearable::addColorSwatch( LLVOAvatar::ETextureIndex te, const LLString& name )
685{ 693{
686 childSetCommitCallback(name, LLPanelEditWearable::onColorCommit, this); 694 childSetCommitCallback(name, LLPanelEditWearable::onColorCommit, this);
diff --git a/linden/indra/newview/llfloaterhtmlhelp.cpp b/linden/indra/newview/llfloaterhtmlhelp.cpp
index 4612674..9cae4cc 100644
--- a/linden/indra/newview/llfloaterhtmlhelp.cpp
+++ b/linden/indra/newview/llfloaterhtmlhelp.cpp
@@ -34,6 +34,8 @@
34#include "llwebbrowserctrl.h" 34#include "llwebbrowserctrl.h"
35#include "llviewerwindow.h" 35#include "llviewerwindow.h"
36#include "llviewercontrol.h" 36#include "llviewercontrol.h"
37#include "llweb.h"
38#include "llui.h"
37 39
38#if LL_LIBXUL_ENABLED 40#if LL_LIBXUL_ENABLED
39 41
@@ -63,7 +65,9 @@ public:
63 65
64 // used for some stats logging - will be removed at some point 66 // used for some stats logging - will be removed at some point
65 static BOOL sFloaterOpened; 67 static BOOL sFloaterOpened;
66 68
69 static void onClickF1HelpLoadURL(S32 option, void* userdata);
70
67protected: 71protected:
68 LLWebBrowserCtrl* mWebBrowser; 72 LLWebBrowserCtrl* mWebBrowser;
69 static LLFloaterHtmlHelp* sInstance; 73 static LLFloaterHtmlHelp* sInstance;
@@ -163,24 +167,55 @@ void LLFloaterHtmlHelp::draw()
163// 167//
164void LLFloaterHtmlHelp::show(std::string url) 168void LLFloaterHtmlHelp::show(std::string url)
165{ 169{
166 sFloaterOpened = true; 170 gViewerWindow->alertXml("ClickOpenF1Help", onClickF1HelpLoadURL, (void*) NULL);
167 171
168 if ( sInstance ) 172 // switching this out for the moment - will come back later
173 // want it still to be compiled so not using comments of #if 0
174 if ( false )
169 { 175 {
170 if (sInstance->mWebBrowser) 176 sFloaterOpened = true;
177
178 if ( sInstance )
171 { 179 {
172 sInstance->mWebBrowser->navigateTo(url); 180 if (sInstance->mWebBrowser)
181 {
182 sInstance->mWebBrowser->navigateTo(url);
183 }
184 sInstance->setVisibleAndFrontmost();
185 return;
173 } 186 }
174 sInstance->setVisibleAndFrontmost();
175 return;
176 }
177 187
178 LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp(url); 188 LLFloaterHtmlHelp* self = new LLFloaterHtmlHelp(url);
189
190 // reposition floater from saved settings
191 LLRect rect = gSavedSettings.getRect( "HtmlHelpRect" );
192 self->reshape( rect.getWidth(), rect.getHeight(), FALSE );
193 self->setRect( rect );
194 };
195}
196
197// static
198void LLFloaterHtmlHelp::onClickF1HelpLoadURL(S32 option, void* userdata)
199{
200 if (option == 0)
201 {
202 // choose HELP url based on selected language - default to english language support page
203 LLString lang = LLUI::sConfigGroup->getString("Language");
204
205 // this sucks but there isn't a way to grab an arbitrary string from an XML file
206 // (using llcontroldef strings causes problems if string don't exist)
207 LLString help_url( "https://support.secondlife.com/" );
208 if ( lang == "ja" )
209 help_url = "http://help.secondlife.com/jp";
210 else
211 if ( lang == "ko" )
212 help_url = "http://help.secondlife.com/kr";
213 else
214 if ( lang == "pt" )
215 help_url = "http://help.secondlife.com/pt";
179 216
180 // reposition floater from saved settings 217 LLWeb::loadURL( help_url );
181 LLRect rect = gSavedSettings.getRect( "HtmlHelpRect" ); 218 };
182 self->reshape( rect.getWidth(), rect.getHeight(), FALSE );
183 self->setRect( rect );
184} 219}
185 220
186//////////////////////////////////////////////////////////////////////////////// 221////////////////////////////////////////////////////////////////////////////////
diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp
index 9dfaa49..0a91563 100644
--- a/linden/indra/newview/llfloaterimagepreview.cpp
+++ b/linden/indra/newview/llfloaterimagepreview.cpp
@@ -33,6 +33,7 @@
33#include "llimagebmp.h" 33#include "llimagebmp.h"
34#include "llimagetga.h" 34#include "llimagetga.h"
35#include "llimagejpeg.h" 35#include "llimagejpeg.h"
36#include "llimagepng.h"
36 37
37#include "llagent.h" 38#include "llagent.h"
38#include "llbutton.h" 39#include "llbutton.h"
@@ -325,6 +326,10 @@ bool LLFloaterImagePreview::loadImage(const char *src_filename)
325 { 326 {
326 codec = IMG_CODEC_JPEG; 327 codec = IMG_CODEC_JPEG;
327 } 328 }
329 else if( 0 == strnicmp(ext, ".png", 4) )
330 {
331 codec = IMG_CODEC_PNG;
332 }
328 333
329 LLPointer<LLImageRaw> raw_image = new LLImageRaw; 334 LLPointer<LLImageRaw> raw_image = new LLImageRaw;
330 335
@@ -382,6 +387,21 @@ bool LLFloaterImagePreview::loadImage(const char *src_filename)
382 } 387 }
383 } 388 }
384 break; 389 break;
390 case IMG_CODEC_PNG:
391 {
392 LLPointer<LLImagePNG> png_image = new LLImagePNG;
393
394 if (!png_image->load(src_filename))
395 {
396 return false;
397 }
398
399 if (!png_image->decode(raw_image))
400 {
401 return false;
402 }
403 }
404 break;
385 default: 405 default:
386 return false; 406 return false;
387 } 407 }
diff --git a/linden/indra/newview/llfloaterinspect.cpp b/linden/indra/newview/llfloaterinspect.cpp
index 4899649..85cfc4e 100644
--- a/linden/indra/newview/llfloaterinspect.cpp
+++ b/linden/indra/newview/llfloaterinspect.cpp
@@ -2,7 +2,7 @@
2 * @file llfloaterinspect.cpp 2 * @file llfloaterinspect.cpp
3 * @brief Floater for object inspection tool 3 * @brief Floater for object inspection tool
4 * 4 *
5 * Copyright (c) 2002-2007, Linden Research, Inc. 5 * Copyright (c) 2006-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/newview/llfloaterinspect.h b/linden/indra/newview/llfloaterinspect.h
index ab453b4..ed4ebd1 100644
--- a/linden/indra/newview/llfloaterinspect.h
+++ b/linden/indra/newview/llfloaterinspect.h
@@ -1,10 +1,10 @@
1/** 1/**
2* @file llfloaterfriends.h 2* @file llfloaterinspect.h
3* @author Cube 3* @author Cube
4* @date 2006-12-16 4* @date 2006-12-16
5* @brief Declaration of class for displaying object attributes 5* @brief Declaration of class for displaying object attributes
6* 6*
7* Copyright (c) 2005-2007, Linden Research, Inc. 7* Copyright (c) 2006-2007, Linden Research, Inc.
8* 8*
9 * Second Life Viewer Source Code 9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab 10 * The source code in this file ("Source Code") is provided by Linden Lab
diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp
index 82b50ec..ee89975 100644
--- a/linden/indra/newview/llfloaterland.cpp
+++ b/linden/indra/newview/llfloaterland.cpp
@@ -1557,6 +1557,13 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo
1557{ 1557{
1558 LLPanelLandObjects* self = LLFloaterLand::getCurrentPanelLandObjects(); 1558 LLPanelLandObjects* self = LLFloaterLand::getCurrentPanelLandObjects();
1559 1559
1560 if (!self)
1561 {
1562 llwarns << "Received message for nonexistent LLPanelLandObject"
1563 << llendl;
1564 return;
1565 }
1566
1560 const LLFontGL* FONT = LLFontGL::sSansSerif; 1567 const LLFontGL* FONT = LLFontGL::sSansSerif;
1561 1568
1562 // Extract all of the owners. 1569 // Extract all of the owners.
diff --git a/linden/indra/newview/llfloaterpostcard.cpp b/linden/indra/newview/llfloaterpostcard.cpp
index 2c80300..82bab03 100644
--- a/linden/indra/newview/llfloaterpostcard.cpp
+++ b/linden/indra/newview/llfloaterpostcard.cpp
@@ -76,12 +76,12 @@ LLFloaterPostcard::LLFloaterPostcard(LLImageJPEG* jpeg, LLImageGL *img, const LL
76 mJPEGImage(jpeg), 76 mJPEGImage(jpeg),
77 mViewerImage(img), 77 mViewerImage(img),
78 mImageScale(img_scale), 78 mImageScale(img_scale),
79 mPosTakenGlobal(pos_taken_global) 79 mPosTakenGlobal(pos_taken_global),
80 mHasFirstMsgFocus(false)
80{ 81{
81 init(); 82 init();
82} 83}
83 84
84
85void LLFloaterPostcard::init() 85void LLFloaterPostcard::init()
86{ 86{
87 // pick up the user's up-to-date email address 87 // pick up the user's up-to-date email address
@@ -128,25 +128,24 @@ BOOL LLFloaterPostcard::postBuild()
128 gAgent.buildFullname(name_string); 128 gAgent.buildFullname(name_string);
129 129
130 childSetValue("name_form", LLSD(name_string)); 130 childSetValue("name_form", LLSD(name_string));
131
132 // XUI:translate
133 LLString msg("Postcard from ");
134 msg += gSecondLife;
135 childSetValue("subject_form", LLSD(msg));
136 131
137 LLTextEditor *MsgField = LLUICtrlFactory::getTextEditorByName(this, "msg_form"); 132 LLTextEditor *MsgField = LLUICtrlFactory::getTextEditorByName(this, "msg_form");
138 if (MsgField) 133 if (MsgField)
139 { 134 {
140 MsgField->setText("Check this out!");
141 MsgField->setWordWrap(TRUE); 135 MsgField->setWordWrap(TRUE);
142 }
143 136
144 childSetFocus("to_form", TRUE); 137 // For the first time a user focusess to .the msg box, all text will be selected.
138 MsgField->setFocusChangedCallback(onMsgFormFocusRecieved);
139 MsgField->setCallbackUserData(this);
140 }
145 141
142 childSetFocus("to_form", TRUE);
143
146 return TRUE; 144 return TRUE;
147} 145}
148 146
149 147
148
150// static 149// static
151LLFloaterPostcard* LLFloaterPostcard::showFromSnapshot(LLImageJPEG *jpeg, LLImageGL *img, const LLVector2 &image_scale, const LLVector3d& pos_taken_global) 150LLFloaterPostcard* LLFloaterPostcard::showFromSnapshot(LLImageJPEG *jpeg, LLImageGL *img, const LLVector2 &image_scale, const LLVector3d& pos_taken_global)
152{ 151{
@@ -267,46 +266,16 @@ void LLFloaterPostcard::onClickSend(void* data)
267 return; 266 return;
268 } 267 }
269 268
270 if (self->mJPEGImage.notNull()) 269 LLString subject(self->childGetValue("subject_form").asString().c_str());
270 if(subject.empty() || !self->mHasFirstMsgFocus)
271 { 271 {
272 self->mTransactionID.generate(); 272 gViewerWindow->alertXml("PromptMissingSubjMsg", missingSubjMsgAlertCallback, self);
273 self->mAssetID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID()); 273 return;
274 LLVFile::writeFile(self->mJPEGImage->getData(), self->mJPEGImage->getDataSize(), gVFS, self->mAssetID, LLAssetType::AT_IMAGE_JPEG); 274 }
275
276 // upload the image
277 std::string url = gAgent.getRegion()->getCapability("SendPostcard");
278 if(!url.empty())
279 {
280 llinfos << "Send Postcard via capability" << llendl;
281 LLSD body = LLSD::emptyMap();
282 // the capability already encodes: agent ID, region ID
283 body["pos-global"] = self->mPosTakenGlobal.getValue();
284 body["to"] = self->childGetValue("to_form").asString();
285 body["from"] = self->childGetValue("from_form").asString();
286 body["name"] = self->childGetValue("name_form").asString();
287 body["subject"] = self->childGetValue("subject_form").asString();
288 body["msg"] = self->childGetValue("msg_form").asString();
289 body["allow-publish"] = self->childGetValue("allow_publish_check").asBoolean();
290 body["mature-publish"] = self->childGetValue("mature_check").asBoolean();
291 LLHTTPClient::post(url, body, new LLSendPostcardResponder(body, self->mAssetID, LLAssetType::AT_IMAGE_JPEG));
292 }
293 else
294 {
295 gAssetStorage->storeAssetData(self->mTransactionID, LLAssetType::AT_IMAGE_JPEG, &uploadCallback, (void *)self, FALSE);
296 }
297
298 LLUploadDialog::modalUploadDialog("Uploading...\n\nPostcard");
299
300 // don't destroy the window until the upload is done
301 // this way we keep the information in the form
302 self->setVisible(FALSE);
303 275
304 // also remove any dependency on another floater 276 if (self->mJPEGImage.notNull())
305 // so that we can be sure to outlive it while we 277 {
306 // need to. 278 self->sendPostcard();
307 LLFloater* dependee = self->getDependee();
308 if (dependee)
309 dependee->removeDependentFloater(self);
310 } 279 }
311 else 280 else
312 { 281 {
@@ -375,3 +344,86 @@ void LLFloaterPostcard::updateUserInfo(const char *email)
375 } 344 }
376 } 345 }
377} 346}
347
348void LLFloaterPostcard::onMsgFormFocusRecieved(LLUICtrl* receiver, void* data)
349{
350 LLFloaterPostcard* self = (LLFloaterPostcard *)data;
351 if(self)
352 {
353 LLTextEditor* msgForm = LLUICtrlFactory::getTextEditorByName(self, "msg_form");
354 if(msgForm && msgForm == receiver && msgForm->hasFocus() && !(self->mHasFirstMsgFocus))
355 {
356 self->mHasFirstMsgFocus = true;
357 msgForm->setText(LLString(""));
358 }
359 }
360}
361
362void LLFloaterPostcard::missingSubjMsgAlertCallback(S32 option, void* data)
363{
364 if(data)
365 {
366 LLFloaterPostcard* self = static_cast<LLFloaterPostcard*>(data);
367 if(0 == option)
368 {
369 // User clicked OK
370 if((self->childGetValue("subject_form").asString()).empty())
371 {
372 // Stuff the subject back into the form.
373 self->childSetValue("subject_form", self->childGetText("default_subject"));
374 }
375
376 if(!self->mHasFirstMsgFocus)
377 {
378 // The user never switched focus to the messagee window.
379 // Using the default string.
380 // XUI: translate
381 self->childSetValue("msg_form", self->childGetText("default_message"));
382 }
383
384 self->sendPostcard();
385 }
386 }
387}
388
389void LLFloaterPostcard::sendPostcard()
390{
391 mTransactionID.generate();
392 mAssetID = mTransactionID.makeAssetID(gAgent.getSecureSessionID());
393 LLVFile::writeFile(mJPEGImage->getData(), mJPEGImage->getDataSize(), gVFS, mAssetID, LLAssetType::AT_IMAGE_JPEG);
394
395 // upload the image
396 std::string url = gAgent.getRegion()->getCapability("SendPostcard");
397 if(!url.empty())
398 {
399 llinfos << "Send Postcard via capability" << llendl;
400 LLSD body = LLSD::emptyMap();
401 // the capability already encodes: agent ID, region ID
402 body["pos-global"] = mPosTakenGlobal.getValue();
403 body["to"] = childGetValue("to_form").asString();
404 body["from"] = childGetValue("from_form").asString();
405 body["name"] = childGetValue("name_form").asString();
406 body["subject"] = childGetValue("subject_form").asString();
407 body["msg"] = childGetValue("msg_form").asString();
408 body["allow-publish"] = childGetValue("allow_publish_check").asBoolean();
409 body["mature-publish"] = childGetValue("mature_check").asBoolean();
410 LLHTTPClient::post(url, body, new LLSendPostcardResponder(body, mAssetID, LLAssetType::AT_IMAGE_JPEG));
411 }
412 else
413 {
414 gAssetStorage->storeAssetData(mTransactionID, LLAssetType::AT_IMAGE_JPEG, &uploadCallback, (void *)this, FALSE);
415 }
416
417 LLUploadDialog::modalUploadDialog("Uploading...\n\nPostcard");
418
419 // don't destroy the window until the upload is done
420 // this way we keep the information in the form
421 setVisible(FALSE);
422
423 // also remove any dependency on another floater
424 // so that we can be sure to outlive it while we
425 // need to.
426 LLFloater* dependee = getDependee();
427 if (dependee)
428 dependee->removeDependentFloater(this);
429}
diff --git a/linden/indra/newview/llfloaterpostcard.h b/linden/indra/newview/llfloaterpostcard.h
index bd44e22..33a5e92 100644
--- a/linden/indra/newview/llfloaterpostcard.h
+++ b/linden/indra/newview/llfloaterpostcard.h
@@ -49,7 +49,7 @@ public:
49 virtual void init(); 49 virtual void init();
50 virtual BOOL postBuild(); 50 virtual BOOL postBuild();
51 virtual void draw(); 51 virtual void draw();
52 52
53 static LLFloaterPostcard* showFromSnapshot(LLImageJPEG *jpeg, LLImageGL *img, const LLVector2& img_scale, const LLVector3d& pos_taken_global); 53 static LLFloaterPostcard* showFromSnapshot(LLImageJPEG *jpeg, LLImageGL *img, const LLVector2& img_scale, const LLVector3d& pos_taken_global);
54 54
55 static void onClickCancel(void* data); 55 static void onClickCancel(void* data);
@@ -62,6 +62,11 @@ public:
62 62
63 static void updateUserInfo(const char *email); 63 static void updateUserInfo(const char *email);
64 64
65 static void onMsgFormFocusRecieved(LLUICtrl* receiver, void* data);
66 static void missingSubjMsgAlertCallback(S32 option, void* data);
67
68 void sendPostcard();
69
65protected: 70protected:
66 71
67 LLPointer<LLImageJPEG> mJPEGImage; 72 LLPointer<LLImageJPEG> mJPEGImage;
@@ -70,6 +75,7 @@ protected:
70 LLAssetID mAssetID; 75 LLAssetID mAssetID;
71 LLVector2 mImageScale; 76 LLVector2 mImageScale;
72 LLVector3d mPosTakenGlobal; 77 LLVector3d mPosTakenGlobal;
78 boolean mHasFirstMsgFocus;
73 79
74 static LLLinkedList<LLFloaterPostcard> sInstances; 80 static LLLinkedList<LLFloaterPostcard> sInstances;
75}; 81};
diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp
index bcbab5b..7e6bf4d 100644
--- a/linden/indra/newview/llfloaterreporter.cpp
+++ b/linden/indra/newview/llfloaterreporter.cpp
@@ -325,6 +325,8 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
325 } 325 }
326 childSetText("object_name", object_owner); 326 childSetText("object_name", object_owner);
327 childSetText("owner_name", object_owner); 327 childSetText("owner_name", object_owner);
328 childSetText("abuser_name_edit", object_owner);
329 mAbuserID = object_id;
328 } 330 }
329 else 331 else
330 { 332 {
@@ -576,10 +578,12 @@ LLFloaterReporter* LLFloaterReporter::createNewBugReporter()
576 578
577 579
578 580
579void LLFloaterReporter::setPickedObjectProperties(const char *object_name, const char *owner_name) 581void LLFloaterReporter::setPickedObjectProperties(const char *object_name, const char *owner_name, const LLUUID owner_id)
580{ 582{
581 childSetText("object_name", object_name); 583 childSetText("object_name", object_name);
582 childSetText("owner_name", owner_name); 584 childSetText("owner_name", owner_name);
585 childSetText("abuser_name_edit", owner_name);
586 mAbuserID = owner_id;
583} 587}
584 588
585 589
diff --git a/linden/indra/newview/llfloaterreporter.h b/linden/indra/newview/llfloaterreporter.h
index 4cb72b9..9cb8557 100644
--- a/linden/indra/newview/llfloaterreporter.h
+++ b/linden/indra/newview/llfloaterreporter.h
@@ -106,7 +106,7 @@ public:
106 // static 106 // static
107 static void processRegionInfo(LLMessageSystem* msg); 107 static void processRegionInfo(LLMessageSystem* msg);
108 108
109 void setPickedObjectProperties(const char *object_name, const char *owner_name); 109 void setPickedObjectProperties(const char *object_name, const char *owner_name, const LLUUID owner_id);
110 110
111private: 111private:
112 void takeScreenshot(); 112 void takeScreenshot();
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index 3931acb..3748131 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -216,7 +216,7 @@ BOOL LLFloaterTools::postBuild()
216 mRadioSelectFace = LLUICtrlFactory::getCheckBoxByName(this,"radio select face"); 216 mRadioSelectFace = LLUICtrlFactory::getCheckBoxByName(this,"radio select face");
217 childSetCommitCallback("radio select face",commit_select_tool,gToolFace); 217 childSetCommitCallback("radio select face",commit_select_tool,gToolFace);
218 mCheckSelectIndividual = LLUICtrlFactory::getCheckBoxByName(this,"checkbox edit linked parts"); 218 mCheckSelectIndividual = LLUICtrlFactory::getCheckBoxByName(this,"checkbox edit linked parts");
219 childSetValue("checkbox edit linked parts",(BOOL)!gSavedSettings.getBOOL("SelectLinkedSet")); 219 childSetValue("checkbox edit linked parts",(BOOL)gSavedSettings.getBOOL("EditLinkedParts"));
220 childSetCommitCallback("checkbox edit linked parts",commit_select_component,this); 220 childSetCommitCallback("checkbox edit linked parts",commit_select_component,this);
221 mCheckSnapToGrid = LLUICtrlFactory::getCheckBoxByName(this,"checkbox snap to grid"); 221 mCheckSnapToGrid = LLUICtrlFactory::getCheckBoxByName(this,"checkbox snap to grid");
222 childSetValue("checkbox snap to grid",(BOOL)gSavedSettings.getBOOL("SnapEnabled")); 222 childSetValue("checkbox snap to grid",(BOOL)gSavedSettings.getBOOL("SnapEnabled"));
@@ -456,7 +456,7 @@ void LLFloaterTools::draw()
456 mDirty = FALSE; 456 mDirty = FALSE;
457 } 457 }
458 458
459 mCheckSelectIndividual->set(!gSavedSettings.getBOOL("SelectLinkedSet")); 459 // mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts"));
460 LLFloater::draw(); 460 LLFloater::draw();
461} 461}
462 462
@@ -567,7 +567,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
567 if (mCheckSelectIndividual) 567 if (mCheckSelectIndividual)
568 { 568 {
569 mCheckSelectIndividual->setVisible(edit_visible); 569 mCheckSelectIndividual->setVisible(edit_visible);
570 mCheckSelectIndividual->set(!gSavedSettings.getBOOL("SelectLinkedSet")); 570 //mCheckSelectIndividual->set(gSavedSettings.getBOOL("EditLinkedParts"));
571 } 571 }
572 572
573 mRadioPosition ->set( tool == gToolTranslate ); 573 mRadioPosition ->set( tool == gToolTranslate );
@@ -746,7 +746,7 @@ void LLFloaterTools::onClose(bool app_quitting)
746 746
747 // exit component selection mode 747 // exit component selection mode
748 gSelectMgr->promoteSelectionToRoot(); 748 gSelectMgr->promoteSelectionToRoot();
749 gSavedSettings.setBOOL("SelectLinkedSet", TRUE); 749 gSavedSettings.setBOOL("EditLinkedParts", FALSE);
750 750
751 gViewerWindow->showCursor(); 751 gViewerWindow->showCursor();
752 752
@@ -922,7 +922,7 @@ void commit_select_component(LLUICtrl *ctrl, void *data)
922 } 922 }
923 923
924 BOOL select_individuals = floaterp->mCheckSelectIndividual->get(); 924 BOOL select_individuals = floaterp->mCheckSelectIndividual->get();
925 gSavedSettings.setBOOL("SelectLinkedSet", !select_individuals); 925 gSavedSettings.setBOOL("EditLinkedParts", select_individuals);
926 floaterp->dirty(); 926 floaterp->dirty();
927 927
928 if (select_individuals) 928 if (select_individuals)
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index bd5be8e..36d0b40 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -2522,6 +2522,7 @@ LLFolderView::LLFolderView( const LLString& name, LLViewerImage* root_folder_ico
2522 mLastScrollItem( NULL ), 2522 mLastScrollItem( NULL ),
2523 mNeedsAutoSelect( FALSE ), 2523 mNeedsAutoSelect( FALSE ),
2524 mAutoSelectOverride(FALSE), 2524 mAutoSelectOverride(FALSE),
2525 mNeedsAutoRename(FALSE),
2525 mDebugFilters(FALSE), 2526 mDebugFilters(FALSE),
2526 mSortOrder(LLInventoryFilter::SO_FOLDERS_BY_NAME), // This gets overridden by a pref immediately 2527 mSortOrder(LLInventoryFilter::SO_FOLDERS_BY_NAME), // This gets overridden by a pref immediately
2527 mFilter(name), 2528 mFilter(name),
@@ -4954,3 +4955,39 @@ LLString LLInventoryFilter::getFilterText()
4954 } 4955 }
4955 return mFilterText; 4956 return mFilterText;
4956} 4957}
4958
4959void LLInventoryFilter::toLLSD(LLSD& data)
4960{
4961 data["filter_types"] = (LLSD::Integer)getFilterTypes();
4962 data["min_date"] = (LLSD::Integer)getMinDate();
4963 data["max_date"] = (LLSD::Integer)getMaxDate();
4964 data["hours_ago"] = (LLSD::Integer)getHoursAgo();
4965 data["show_folder_state"] = (LLSD::Integer)getShowFolderState();
4966 data["permissions"] = (LLSD::Integer)getFilterPermissions();
4967 data["substring"] = (LLSD::String)getFilterSubString();
4968 data["sort_order"] = (LLSD::Integer)getSortOrder();
4969}
4970
4971void LLInventoryFilter::fromLLSD(LLSD& data)
4972{
4973 if(data.has("filter_types"))
4974 setFilterTypes((U32)data["filter_types"].asInteger());
4975
4976 if(data.has("min_date") && data.has("max_date"))
4977 setDateRange((U32)data["min_date"].asInteger(), (U32)data["max_date"].asInteger());
4978
4979 if(data.has("hours_ago"))
4980 setHoursAgo((U32)data["hours_ago"].asInteger());
4981
4982 if(data.has("show_folder_state"))
4983 setShowFolderState((EFolderShow)data["show_folder_state"].asInteger());
4984
4985 if(data.has("permissions"))
4986 setFilterPermissions((PermissionMask)data["permissions"].asInteger());
4987
4988 if(data.has("substring"))
4989 setFilterSubString(LLString(data["substring"].asString()));
4990
4991 if(data.has("sort_order"))
4992 setSortOrder((U32)data["sort_order"].asInteger());
4993}
diff --git a/linden/indra/newview/llfolderview.h b/linden/indra/newview/llfolderview.h
index ec70b90..9482b96 100644
--- a/linden/indra/newview/llfolderview.h
+++ b/linden/indra/newview/llfolderview.h
@@ -236,6 +236,9 @@ public:
236 //RN: this is public to allow system to externally force a global refilter 236 //RN: this is public to allow system to externally force a global refilter
237 void setModified(EFilterBehavior behavior = FILTER_RESTART); 237 void setModified(EFilterBehavior behavior = FILTER_RESTART);
238 238
239 void toLLSD(LLSD& data);
240 void fromLLSD(LLSD& data);
241
239protected: 242protected:
240 struct filter_ops 243 struct filter_ops
241 { 244 {
@@ -859,6 +862,9 @@ public:
859 static void idle(void* user_data); 862 static void idle(void* user_data);
860 863
861 BOOL needsAutoSelect() { return mNeedsAutoSelect && !mAutoSelectOverride; } 864 BOOL needsAutoSelect() { return mNeedsAutoSelect && !mAutoSelectOverride; }
865 BOOL needsAutoRename() { return mNeedsAutoRename; }
866 void setNeedsAutoRename(BOOL val) { mNeedsAutoRename = val; }
867
862 BOOL getDebugFilters() { return mDebugFilters; } 868 BOOL getDebugFilters() { return mDebugFilters; }
863 869
864 // DEBUG only 870 // DEBUG only
@@ -890,6 +896,7 @@ protected:
890 LLCoordGL mLastScrollOffset; 896 LLCoordGL mLastScrollOffset;
891 BOOL mNeedsAutoSelect; 897 BOOL mNeedsAutoSelect;
892 BOOL mAutoSelectOverride; 898 BOOL mAutoSelectOverride;
899 BOOL mNeedsAutoRename;
893 900
894 BOOL mDebugFilters; 901 BOOL mDebugFilters;
895 U32 mSortOrder; 902 U32 mSortOrder;
diff --git a/linden/indra/newview/llgenepool.cpp b/linden/indra/newview/llgenepool.cpp
index 3cc57e9..40dd5cd 100644
--- a/linden/indra/newview/llgenepool.cpp
+++ b/linden/indra/newview/llgenepool.cpp
@@ -127,6 +127,7 @@ BOOL LLGenePool::loadNodeArchetype( LLXmlTreeNode* node )
127 LLVOAvatar* avatar = gAgent.getAvatarObject(); 127 LLVOAvatar* avatar = gAgent.getAvatarObject();
128 if( !avatar ) 128 if( !avatar )
129 { 129 {
130 delete archetype;
130 return FALSE; 131 return FALSE;
131 } 132 }
132 133
diff --git a/linden/indra/newview/llhudeffectlookat.cpp b/linden/indra/newview/llhudeffectlookat.cpp
index 5250b57..813f924 100644
--- a/linden/indra/newview/llhudeffectlookat.cpp
+++ b/linden/indra/newview/llhudeffectlookat.cpp
@@ -476,6 +476,7 @@ void LLHUDEffectLookAt::calcTargetPosition()
476 { 476 {
477 //sets the lookat point in front of the avatar 477 //sets the lookat point in front of the avatar
478 mTargetOffsetGlobal.setVec(5.0, 0.0, 0.0); 478 mTargetOffsetGlobal.setVec(5.0, 0.0, 0.0);
479 local_offset.setVec(mTargetOffsetGlobal);
479 } 480 }
480 481
481 mTargetPos = avatarp->mHeadp->getWorldPosition(); 482 mTargetPos = avatarp->mHeadp->getWorldPosition();
diff --git a/linden/indra/newview/llhudicon.cpp b/linden/indra/newview/llhudicon.cpp
index 93e730e..15988fa 100644
--- a/linden/indra/newview/llhudicon.cpp
+++ b/linden/indra/newview/llhudicon.cpp
@@ -65,7 +65,8 @@ LLHUDIcon::LLHUDIcon(const U8 type) :
65 LLHUDObject(type), 65 LLHUDObject(type),
66 mImagep(NULL), 66 mImagep(NULL),
67 mPickID(0), 67 mPickID(0),
68 mScale(0.1f) 68 mScale(0.1f),
69 mHidden(FALSE)
69{ 70{
70 sIconInstances.push_back(this); 71 sIconInstances.push_back(this);
71} 72}
@@ -81,6 +82,9 @@ void LLHUDIcon::renderIcon(BOOL for_select)
81 LLGLDepthTest gls_depth(GL_TRUE); 82 LLGLDepthTest gls_depth(GL_TRUE);
82 LLGLState no_texture(GL_TEXTURE_2D, for_select ? FALSE : TRUE); 83 LLGLState no_texture(GL_TEXTURE_2D, for_select ? FALSE : TRUE);
83 84
85 if (mHidden)
86 return;
87
84 if (mSourceObject.isNull() || mImagep.isNull()) 88 if (mSourceObject.isNull() || mImagep.isNull())
85 { 89 {
86 markDead(); 90 markDead();
diff --git a/linden/indra/newview/llhudicon.h b/linden/indra/newview/llhudicon.h
index f26abb4..7f8b435 100644
--- a/linden/indra/newview/llhudicon.h
+++ b/linden/indra/newview/llhudicon.h
@@ -71,6 +71,9 @@ public:
71 71
72 static BOOL iconsNearby(); 72 static BOOL iconsNearby();
73 73
74 BOOL getHidden() const { return mHidden; }
75 void setHidden( BOOL hide ) { mHidden = hide; }
76
74protected: 77protected:
75 LLHUDIcon(const U8 type); 78 LLHUDIcon(const U8 type);
76 ~LLHUDIcon(); 79 ~LLHUDIcon();
@@ -84,6 +87,7 @@ private:
84 F32 mDistance; 87 F32 mDistance;
85 S32 mPickID; 88 S32 mPickID;
86 F32 mScale; 89 F32 mScale;
90 BOOL mHidden;
87 91
88 typedef std::vector<LLPointer<LLHUDIcon> > icon_instance_t; 92 typedef std::vector<LLPointer<LLHUDIcon> > icon_instance_t;
89 static icon_instance_t sIconInstances; 93 static icon_instance_t sIconInstances;
diff --git a/linden/indra/newview/llhudtext.cpp b/linden/indra/newview/llhudtext.cpp
index 740cce0..fce52f1 100644
--- a/linden/indra/newview/llhudtext.cpp
+++ b/linden/indra/newview/llhudtext.cpp
@@ -93,7 +93,8 @@ LLHUDText::LLHUDText(const U8 type) :
93 mOffsetY(0), 93 mOffsetY(0),
94 mTextAlignment(ALIGN_TEXT_CENTER), 94 mTextAlignment(ALIGN_TEXT_CENTER),
95 mVertAlignment(ALIGN_VERT_CENTER), 95 mVertAlignment(ALIGN_VERT_CENTER),
96 mLOD(0) 96 mLOD(0),
97 mHidden(FALSE)
97{ 98{
98 mColor = LLColor4(1.f, 1.f, 1.f, 1.f); 99 mColor = LLColor4(1.f, 1.f, 1.f, 1.f);
99 mDoFade = TRUE; 100 mDoFade = TRUE;
@@ -133,7 +134,7 @@ void LLHUDText::renderForSelect()
133 134
134void LLHUDText::renderText(BOOL for_select) 135void LLHUDText::renderText(BOOL for_select)
135{ 136{
136 if (!mVisible) 137 if (!mVisible || mHidden)
137 { 138 {
138 return; 139 return;
139 } 140 }
diff --git a/linden/indra/newview/llhudtext.h b/linden/indra/newview/llhudtext.h
index 033702b..bd6988b 100644
--- a/linden/indra/newview/llhudtext.h
+++ b/linden/indra/newview/llhudtext.h
@@ -115,8 +115,9 @@ public:
115 void setUseBubble(BOOL use_bubble) { mUseBubble = use_bubble; } 115 void setUseBubble(BOOL use_bubble) { mUseBubble = use_bubble; }
116 S32 getLOD() { return mLOD; } 116 S32 getLOD() { return mLOD; }
117 BOOL getVisible() { return mVisible; } 117 BOOL getVisible() { return mVisible; }
118 BOOL getHidden() const { return mHidden; }
119 void setHidden( BOOL hide ) { mHidden = hide; }
118 void setOnHUDAttachment(BOOL on_hud) { mOnHUDAttachment = on_hud; } 120 void setOnHUDAttachment(BOOL on_hud) { mOnHUDAttachment = on_hud; }
119
120 static void renderAllHUD(); 121 static void renderAllHUD();
121 static void addPickable(std::set<LLViewerObject*> &pick_list); 122 static void addPickable(std::set<LLViewerObject*> &pick_list);
122 static void reshape(); 123 static void reshape();
@@ -164,6 +165,7 @@ private:
164 ETextAlignment mTextAlignment; 165 ETextAlignment mTextAlignment;
165 EVertAlignment mVertAlignment; 166 EVertAlignment mVertAlignment;
166 S32 mLOD; 167 S32 mLOD;
168 BOOL mHidden;
167 169
168 static std::set<LLPointer<LLHUDText> > sTextObjects; 170 static std::set<LLPointer<LLHUDText> > sTextObjects;
169 static std::vector<LLPointer<LLHUDText> > sVisibleTextObjects; 171 static std::vector<LLPointer<LLHUDText> > sVisibleTextObjects;
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 3c89131..b74fff0 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -174,6 +174,8 @@ LLFloaterIMPanel::LLFloaterIMPanel(const std::string& name,
174 mInputEditor(NULL), 174 mInputEditor(NULL),
175 mHistoryEditor(NULL), 175 mHistoryEditor(NULL),
176 mSessionUUID(session_id), 176 mSessionUUID(session_id),
177 mSessionInitRequested(FALSE),
178 mSessionInitialized(FALSE),
177 mOtherParticipantUUID(other_participant_id), 179 mOtherParticipantUUID(other_participant_id),
178 mDialog(dialog), 180 mDialog(dialog),
179 mTyping(FALSE), 181 mTyping(FALSE),
@@ -181,9 +183,7 @@ LLFloaterIMPanel::LLFloaterIMPanel(const std::string& name,
181 mTypingLineStartIndex(0), 183 mTypingLineStartIndex(0),
182 mSentTypingState(TRUE), 184 mSentTypingState(TRUE),
183 mFirstKeystrokeTimer(), 185 mFirstKeystrokeTimer(),
184 mLastKeystrokeTimer(), 186 mLastKeystrokeTimer()
185 mSessionInitialized(FALSE),
186 mSessionInitRequested(FALSE)
187{ 187{
188 init(session_label); 188 init(session_label);
189} 189}
@@ -199,6 +199,8 @@ LLFloaterIMPanel::LLFloaterIMPanel(const std::string& name,
199 mInputEditor(NULL), 199 mInputEditor(NULL),
200 mHistoryEditor(NULL), 200 mHistoryEditor(NULL),
201 mSessionUUID(session_id), 201 mSessionUUID(session_id),
202 mSessionInitRequested(FALSE),
203 mSessionInitialized(FALSE),
202 mOtherParticipantUUID(other_participant_id), 204 mOtherParticipantUUID(other_participant_id),
203 mDialog(dialog), 205 mDialog(dialog),
204 mTyping(FALSE), 206 mTyping(FALSE),
@@ -206,9 +208,7 @@ LLFloaterIMPanel::LLFloaterIMPanel(const std::string& name,
206 mTypingLineStartIndex(0), 208 mTypingLineStartIndex(0),
207 mSentTypingState(TRUE), 209 mSentTypingState(TRUE),
208 mFirstKeystrokeTimer(), 210 mFirstKeystrokeTimer(),
209 mLastKeystrokeTimer(), 211 mLastKeystrokeTimer()
210 mSessionInitialized(FALSE),
211 mSessionInitRequested(FALSE)
212{ 212{
213 mSessionInitialTargetIDs = ids; 213 mSessionInitialTargetIDs = ids;
214 init(session_label); 214 init(session_label);
@@ -427,7 +427,11 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
427 if (log_to_file 427 if (log_to_file
428 && gSavedPerAccountSettings.getBOOL("LogInstantMessages") ) 428 && gSavedPerAccountSettings.getBOOL("LogInstantMessages") )
429 { 429 {
430 LLString histstr = timestring + utf8msg; 430 LLString histstr;
431 if (gSavedPerAccountSettings.getBOOL("IMLogTimestamp"))
432 histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + utf8msg;
433 else
434 histstr = utf8msg;
431 435
432 LLLogChat::saveHistory(getTitle(),histstr); 436 LLLogChat::saveHistory(getTitle(),histstr);
433 } 437 }
diff --git a/linden/indra/newview/llinventoryactions.cpp b/linden/indra/newview/llinventoryactions.cpp
index 900a729..af4e16b 100644
--- a/linden/indra/newview/llinventoryactions.cpp
+++ b/linden/indra/newview/llinventoryactions.cpp
@@ -324,16 +324,18 @@ void do_create(LLInventoryModel *model, LLInventoryPanel *ptr, LLString type, LL
324{ 324{
325 if ("category" == type) 325 if ("category" == type)
326 { 326 {
327 LLUUID category;
327 if (self) 328 if (self)
328 { 329 {
329 model->createNewCategory(self->getUUID(), LLAssetType::AT_NONE, NULL); 330 category = model->createNewCategory(self->getUUID(), LLAssetType::AT_NONE, NULL);
330 } 331 }
331 else 332 else
332 { 333 {
333 model->createNewCategory(gAgent.getInventoryRootID(), 334 category = model->createNewCategory(gAgent.getInventoryRootID(),
334 LLAssetType::AT_NONE, NULL); 335 LLAssetType::AT_NONE, NULL);
335 } 336 }
336 model->notifyObservers(); 337 model->notifyObservers();
338 ptr->setSelection(category, TRUE);
337 } 339 }
338 else if ("lsl" == type) 340 else if ("lsl" == type)
339 { 341 {
@@ -427,6 +429,8 @@ void do_create(LLInventoryModel *model, LLInventoryPanel *ptr, LLString type, LL
427 LLUUID parent_id = self ? self->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART); 429 LLUUID parent_id = self ? self->getUUID() : gInventory.findCategoryUUIDForType(LLAssetType::AT_BODYPART);
428 LLFolderBridge::createWearable(parent_id, WT_EYES); 430 LLFolderBridge::createWearable(parent_id, WT_EYES);
429 } 431 }
432
433 ptr->getRootFolder()->setNeedsAutoRename(TRUE);
430} 434}
431 435
432class LLDoCreate : public inventory_panel_listener_t 436class LLDoCreate : public inventory_panel_listener_t
diff --git a/linden/indra/newview/llinventorybridge.cpp b/linden/indra/newview/llinventorybridge.cpp
index 0d5c30e..27be9f6 100644
--- a/linden/indra/newview/llinventorybridge.cpp
+++ b/linden/indra/newview/llinventorybridge.cpp
@@ -822,7 +822,7 @@ LLString LLItemBridge::getLabelSuffix() const
822 if(item) 822 if(item)
823 { 823 {
824 // it's a bit confusing to put nocopy/nomod/etc on calling cards. 824 // it's a bit confusing to put nocopy/nomod/etc on calling cards.
825 if( LLAssetType::AT_CALLINGCARD != item->getType() 825 if(LLAssetType::AT_CALLINGCARD != item->getType()
826 && item->getPermissions().getOwner() == gAgent.getID()) 826 && item->getPermissions().getOwner() == gAgent.getID())
827 { 827 {
828 BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID()); 828 BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID());
@@ -834,32 +834,14 @@ LLString LLItemBridge::getLabelSuffix() const
834 const char* NO_MOD = " (no modify)"; 834 const char* NO_MOD = " (no modify)";
835 const char* NO_XFER = " (no transfer)"; 835 const char* NO_XFER = " (no transfer)";
836 const char* scopy; 836 const char* scopy;
837 if(copy) 837 if(copy) scopy = EMPTY;
838 { 838 else scopy = NO_COPY;
839 scopy = EMPTY;
840 }
841 else
842 {
843 scopy = NO_COPY;
844 };
845 const char* smod; 839 const char* smod;
846 if(mod) 840 if(mod) smod = EMPTY;
847 { 841 else smod = NO_MOD;
848 smod = EMPTY;
849 }
850 else
851 {
852 smod = NO_MOD;
853 };
854 const char* sxfer; 842 const char* sxfer;
855 if(xfer) 843 if(xfer) sxfer = EMPTY;
856 { 844 else sxfer = NO_XFER;
857 sxfer = EMPTY;
858 }
859 else
860 {
861 sxfer = NO_XFER;
862 };
863 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 845 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
864 snprintf( /* Flawfinder: ignore */ 846 snprintf( /* Flawfinder: ignore */
865 buffer, 847 buffer,
diff --git a/linden/indra/newview/llinventoryview.cpp b/linden/indra/newview/llinventoryview.cpp
index bb70ea4..8ac5f21 100644
--- a/linden/indra/newview/llinventoryview.cpp
+++ b/linden/indra/newview/llinventoryview.cpp
@@ -64,6 +64,7 @@
64#include "llpreviewtexture.h" 64#include "llpreviewtexture.h"
65#include "llresmgr.h" 65#include "llresmgr.h"
66#include "llscrollcontainer.h" 66#include "llscrollcontainer.h"
67#include "llscrollbar.h"
67#include "llimview.h" 68#include "llimview.h"
68#include "lltooldraganddrop.h" 69#include "lltooldraganddrop.h"
69#include "llviewerimagelist.h" 70#include "llviewerimagelist.h"
@@ -78,6 +79,8 @@
78#include "llvieweruictrlfactory.h" 79#include "llvieweruictrlfactory.h"
79#include "llselectmgr.h" 80#include "llselectmgr.h"
80 81
82#include "llsdserialize.h"
83
81LLDynamicArray<LLInventoryView*> LLInventoryView::sActiveViews; 84LLDynamicArray<LLInventoryView*> LLInventoryView::sActiveViews;
82 85
83//BOOL LLInventoryView::sOpenNextNewItem = FALSE; 86//BOOL LLInventoryView::sOpenNextNewItem = FALSE;
@@ -464,6 +467,9 @@ void LLInventoryView::init(LLInventoryModel* inventory)
464 467
465 gUICtrlFactory->buildFloater(this, "floater_inventory.xml", NULL); 468 gUICtrlFactory->buildFloater(this, "floater_inventory.xml", NULL);
466 469
470 mFilterTabs = (LLTabContainer*)LLUICtrlFactory::getTabContainerByName(this, "inventory filter tabs");
471
472 // Set up the default inv. panel/filter settings.
467 mActivePanel = (LLInventoryPanel*)getCtrlByNameAndType("All Items", WIDGET_TYPE_INVENTORY_PANEL); 473 mActivePanel = (LLInventoryPanel*)getCtrlByNameAndType("All Items", WIDGET_TYPE_INVENTORY_PANEL);
468 if (mActivePanel) 474 if (mActivePanel)
469 { 475 {
@@ -471,6 +477,7 @@ void LLInventoryView::init(LLInventoryModel* inventory)
471 mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder")); 477 mActivePanel->setSortOrder(gSavedSettings.getU32("InventorySortOrder"));
472 mActivePanel->getFilter()->markDefault(); 478 mActivePanel->getFilter()->markDefault();
473 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); 479 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
480 mActivePanel->setSelectCallback(onSelectionChange, mActivePanel);
474 } 481 }
475 LLInventoryPanel* recent_items_panel = (LLInventoryPanel*)getCtrlByNameAndType("Recent Items", WIDGET_TYPE_INVENTORY_PANEL); 482 LLInventoryPanel* recent_items_panel = (LLInventoryPanel*)getCtrlByNameAndType("Recent Items", WIDGET_TYPE_INVENTORY_PANEL);
476 if (recent_items_panel) 483 if (recent_items_panel)
@@ -479,7 +486,29 @@ void LLInventoryView::init(LLInventoryModel* inventory)
479 recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE); 486 recent_items_panel->setSortOrder(LLInventoryFilter::SO_DATE);
480 recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); 487 recent_items_panel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
481 recent_items_panel->getFilter()->markDefault(); 488 recent_items_panel->getFilter()->markDefault();
482 } 489 recent_items_panel->setSelectCallback(onSelectionChange, recent_items_panel);
490 }
491
492 // Now load the stored settings from disk, if available.
493 std::ostringstream filterSaveName;
494 filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
495 llinfos << "LLInventoryView::init: reading from " << filterSaveName << llendl;
496 llifstream file(filterSaveName.str().c_str());
497 LLSD savedFilterState;
498 if (file.is_open())
499 {
500 LLSDSerialize::fromXML(savedFilterState, file);
501 file.close();
502
503 // Load the persistent "Recent Items" settings.
504 // Note that the "All Items" settings do not persist.
505 if(savedFilterState.has(recent_items_panel->getFilter()->getName()))
506 {
507 LLSD recent_items = savedFilterState.get(recent_items_panel->getFilter()->getName());
508 recent_items_panel->getFilter()->fromLLSD(recent_items);
509 }
510 }
511
483 512
484 mSearchEditor = (LLSearchEditor*)getCtrlByNameAndType("inventory search editor", WIDGET_TYPE_SEARCH_EDITOR); 513 mSearchEditor = (LLSearchEditor*)getCtrlByNameAndType("inventory search editor", WIDGET_TYPE_SEARCH_EDITOR);
485 if (mSearchEditor) 514 if (mSearchEditor)
@@ -504,6 +533,36 @@ BOOL LLInventoryView::postBuild()
504// Destroys the object 533// Destroys the object
505LLInventoryView::~LLInventoryView( void ) 534LLInventoryView::~LLInventoryView( void )
506{ 535{
536 // Save the filters state.
537 LLSD filterRoot;
538 LLInventoryPanel* all_items_panel = (LLInventoryPanel*)getCtrlByNameAndType("All Items", WIDGET_TYPE_INVENTORY_PANEL);
539 if (all_items_panel)
540 {
541 LLInventoryFilter* filter = all_items_panel->getFilter();
542 LLSD filterState;
543 filter->toLLSD(filterState);
544 filterRoot[filter->getName()] = filterState;
545 }
546
547 LLInventoryPanel* recent_items_panel = (LLInventoryPanel*)getCtrlByNameAndType("Recent Items", WIDGET_TYPE_INVENTORY_PANEL);
548 if (recent_items_panel)
549 {
550 LLInventoryFilter* filter = recent_items_panel->getFilter();
551 LLSD filterState;
552 filter->toLLSD(filterState);
553 filterRoot[filter->getName()] = filterState;
554 }
555
556 std::ostringstream filterSaveName;
557 filterSaveName << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "filters.xml");
558 llofstream filtersFile(filterSaveName.str().c_str());
559 if(!LLSDSerialize::toPrettyXML(filterRoot, filtersFile))
560 {
561 llwarns << "Could not write to filters save file " << filterSaveName << llendl;
562 }
563 else
564 filtersFile.close();
565
507 sActiveViews.removeObj(this); 566 sActiveViews.removeObj(this);
508 gInventory.removeObserver(this); 567 gInventory.removeObserver(this);
509 delete mSavedFolderState; 568 delete mSavedFolderState;
@@ -630,7 +689,9 @@ void LLInventoryView::onClose(bool app_quitting)
630 mSavedFolderState->setApply(FALSE); 689 mSavedFolderState->setApply(FALSE);
631 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState); 690 mActivePanel->getRootFolder()->applyFunctorRecursively(*mSavedFolderState);
632 } 691 }
633 onClearSearch(this); 692
693 // onClearSearch(this);
694
634 // pass up 695 // pass up
635 LLFloater::setVisible(FALSE); 696 LLFloater::setVisible(FALSE);
636 } 697 }
@@ -930,6 +991,7 @@ void LLInventoryView::onFilterSelected(void* userdata, bool from_click)
930 LLInventoryViewFinder *finder = self->getFinder(); 991 LLInventoryViewFinder *finder = self->getFinder();
931 // Find my index 992 // Find my index
932 self->mActivePanel = (LLInventoryPanel*)self->childGetVisibleTab("inventory filter tabs"); 993 self->mActivePanel = (LLInventoryPanel*)self->childGetVisibleTab("inventory filter tabs");
994
933 if (!self->mActivePanel) 995 if (!self->mActivePanel)
934 { 996 {
935 return; 997 return;
@@ -947,6 +1009,42 @@ void LLInventoryView::onFilterSelected(void* userdata, bool from_click)
947 self->setFilterTextFromFilter(); 1009 self->setFilterTextFromFilter();
948} 1010}
949 1011
1012// static
1013void LLInventoryView::onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data)
1014{
1015 LLInventoryPanel* panel = (LLInventoryPanel*)data;
1016 LLFolderView* fv = panel->getRootFolder();
1017 if (fv->needsAutoRename()) // auto-selecting a new user-created asset and preparing to rename
1018 {
1019 fv->setNeedsAutoRename(FALSE);
1020 if (items.size()) // new asset is visible and selected
1021 {
1022 fv->startRenamingSelectedItem();
1023 }
1024 }
1025}
1026
1027BOOL LLInventoryView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
1028 EDragAndDropType cargo_type,
1029 void* cargo_data,
1030 EAcceptance* accept,
1031 LLString& tooltip_msg)
1032{
1033 // Check to see if we are auto scrolling from the last frame
1034 LLInventoryPanel* panel = (LLInventoryPanel*)this->getActivePanel();
1035 BOOL needsToScroll = panel->getScrollableContainer()->needsToScroll(x, y, LLScrollableContainerView::VERTICAL);
1036 if(mFilterTabs)
1037 {
1038 if(needsToScroll)
1039 {
1040 mFilterTabs->setDragAndDropDelayTimer();
1041 }
1042 }
1043
1044 BOOL handled = LLFloater::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
1045
1046 return handled;
1047}
950LLUUID get_item_icon_uuid(LLAssetType::EType asset_type, 1048LLUUID get_item_icon_uuid(LLAssetType::EType asset_type,
951 LLInventoryType::EType inventory_type, 1049 LLInventoryType::EType inventory_type,
952 U32 attachment_point, 1050 U32 attachment_point,
@@ -1142,6 +1240,7 @@ BOOL LLInventoryPanel::postBuild()
1142 } 1240 }
1143 mFolders->setSortOrder(mFolders->getFilter()->getSortOrder()); 1241 mFolders->setSortOrder(mFolders->getFilter()->getSortOrder());
1144 1242
1243
1145 return TRUE; 1244 return TRUE;
1146} 1245}
1147 1246
@@ -1302,6 +1401,14 @@ void LLInventoryPanel::modelChanged(U32 mask)
1302 llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl; 1401 llwarns << *id_it << " is in model but not in view, but ADD flag not set" << llendl;
1303 } 1402 }
1304 buildNewViews(*id_it); 1403 buildNewViews(*id_it);
1404
1405 // select any newly created object
1406 // that has the auto rename at top of folder
1407 // root set
1408 if(mFolders->getRoot()->needsAutoRename())
1409 {
1410 setSelection(*id_it, FALSE);
1411 }
1305 } 1412 }
1306 else 1413 else
1307 { 1414 {
@@ -1526,6 +1633,7 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
1526 EAcceptance* accept, 1633 EAcceptance* accept,
1527 LLString& tooltip_msg) 1634 LLString& tooltip_msg)
1528{ 1635{
1636
1529 BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); 1637 BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg);
1530 1638
1531 if (handled) 1639 if (handled)
@@ -1586,6 +1694,7 @@ void LLInventoryPanel::createNewItem(const char* name,
1586 create_inventory_item(gAgent.getID(), gAgent.getSessionID(), 1694 create_inventory_item(gAgent.getID(), gAgent.getSessionID(),
1587 parent_id, LLTransactionID::tnull, name, desc, asset_type, inv_type, 1695 parent_id, LLTransactionID::tnull, name, desc, asset_type, inv_type,
1588 NOT_WEARABLE, next_owner_perm, cb); 1696 NOT_WEARABLE, next_owner_perm, cb);
1697
1589} 1698}
1590 1699
1591// static DEBUG ONLY: 1700// static DEBUG ONLY:
diff --git a/linden/indra/newview/llinventoryview.h b/linden/indra/newview/llinventoryview.h
index 536370b..cba1d16 100644
--- a/linden/indra/newview/llinventoryview.h
+++ b/linden/indra/newview/llinventoryview.h
@@ -119,6 +119,7 @@ public:
119 // This method is called when something has changed about the inventory. 119 // This method is called when something has changed about the inventory.
120 void modelChanged(U32 mask); 120 void modelChanged(U32 mask);
121 LLFolderView* getRootFolder() { return mFolders; } 121 LLFolderView* getRootFolder() { return mFolders; }
122 LLScrollableContainerView* getScrollableContainer() { return mScroller; }
122 123
123 // DEBUG ONLY: 124 // DEBUG ONLY:
124 static void dumpSelectionInformation(void* user_data); 125 static void dumpSelectionInformation(void* user_data);
@@ -223,6 +224,13 @@ public:
223 virtual void draw(); 224 virtual void draw();
224 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent); 225 virtual BOOL handleKeyHere(KEY key, MASK mask, BOOL called_from_parent);
225 226
227 BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
228 EDragAndDropType cargo_type,
229 void* cargo_data,
230 EAcceptance* accept,
231 LLString& tooltip_msg);
232
233
226 LLInventoryPanel* getPanel() { return mActivePanel; } 234 LLInventoryPanel* getPanel() { return mActivePanel; }
227 LLInventoryPanel* getActivePanel() { return mActivePanel; } 235 LLInventoryPanel* getActivePanel() { return mActivePanel; }
228 236
@@ -233,6 +241,7 @@ public:
233 static void onSearchEdit(const LLString& search_string, void* user_data ); 241 static void onSearchEdit(const LLString& search_string, void* user_data );
234 //static void onSearchCommit(LLUICtrl* caller, void* user_data ); 242 //static void onSearchCommit(LLUICtrl* caller, void* user_data );
235 static void onFilterSelected(void* userdata, bool from_click); 243 static void onFilterSelected(void* userdata, bool from_click);
244 static void onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action, void* data);
236 static BOOL incrementalFind(LLFolderViewItem* first_item, const char* find_text, BOOL backward); 245 static BOOL incrementalFind(LLFolderViewItem* first_item, const char* find_text, BOOL backward);
237 246
238 const LLString getFilterSubString() { return mActivePanel->getFilterSubString(); } 247 const LLString getFilterSubString() { return mActivePanel->getFilterSubString(); }
diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp
index aaa19ea..ec9b9f5 100644
--- a/linden/indra/newview/lllogchat.cpp
+++ b/linden/indra/newview/lllogchat.cpp
@@ -29,18 +29,40 @@
29#include "llviewerprecompiledheaders.h" 29#include "llviewerprecompiledheaders.h"
30 30
31#include "lllogchat.h" 31#include "lllogchat.h"
32 32#include "viewer.h"
33
33const S32 LOG_RECALL_SIZE = 2048; 34const S32 LOG_RECALL_SIZE = 2048;
34 35
35//static 36//static
36LLString LLLogChat::makeLogFileName(LLString filename) 37LLString LLLogChat::makeLogFileName(LLString filename)
37{ 38{
38
39 filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename.c_str()); 39 filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename.c_str());
40 filename += ".txt"; 40 filename += ".txt";
41 return filename; 41 return filename;
42} 42}
43 43
44LLString LLLogChat::timestamp(bool withdate)
45{
46 U32 utc_time;
47 utc_time = time_corrected();
48
49 // There's only one internal tm buffer.
50 struct tm* timep;
51
52 // Convert to Pacific, based on server's opinion of whether
53 // it's daylight savings time there.
54 timep = utc_to_pacific_time(utc_time, gPacificDaylightTime);
55
56 LLString text;
57 if (withdate)
58 text = llformat("[%d/%02d/%02d %d:%02d] ", (timep->tm_year-100)+2000, timep->tm_mon+1, timep->tm_mday, timep->tm_hour, timep->tm_min);
59 else
60 text = llformat("[%d:%02d] ", timep->tm_hour, timep->tm_min);
61
62 return text;
63}
64
65
44//static 66//static
45void LLLogChat::saveHistory(LLString filename, LLString line) 67void LLLogChat::saveHistory(LLString filename, LLString line)
46{ 68{
diff --git a/linden/indra/newview/lllogchat.h b/linden/indra/newview/lllogchat.h
index 56ea04b..c82f04e 100644
--- a/linden/indra/newview/lllogchat.h
+++ b/linden/indra/newview/lllogchat.h
@@ -33,6 +33,7 @@
33class LLLogChat 33class LLLogChat
34{ 34{
35public: 35public:
36 static LLString timestamp(bool withdate = false);
36 static LLString makeLogFileName(LLString(filename)); 37 static LLString makeLogFileName(LLString(filename));
37 static void saveHistory(LLString filename, LLString line); 38 static void saveHistory(LLString filename, LLString line);
38 static void loadHistory(LLString filename, void (*callback)(LLString,void*),void* userdata); 39 static void loadHistory(LLString filename, void (*callback)(LLString,void*),void* userdata);
diff --git a/linden/indra/newview/llmanip.cpp b/linden/indra/newview/llmanip.cpp
index 1db0a6c..3d27256 100644
--- a/linden/indra/newview/llmanip.cpp
+++ b/linden/indra/newview/llmanip.cpp
@@ -560,7 +560,7 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const char* suffi
560 LLGLEnable tex(GL_TEXTURE_2D); 560 LLGLEnable tex(GL_TEXTURE_2D);
561 if (fractional_portion != 0) 561 if (fractional_portion != 0)
562 { 562 {
563 snprintf(fraction_string, sizeof(fraction_string), "%c%d%s", gResMgr->getDecimalPoint(), fractional_portion, suffix); /* Flawfinder: ignore */ 563 snprintf(fraction_string, sizeof(fraction_string), "%c%02d%s", gResMgr->getDecimalPoint(), fractional_portion, suffix); /* Flawfinder: ignore */
564 564
565 gViewerWindow->setupViewport(1, -1); 565 gViewerWindow->setupViewport(1, -1);
566 hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, -1.f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection); 566 hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, -1.f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection);
diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp
index aaab416..940e78a 100644
--- a/linden/indra/newview/llmaniprotate.cpp
+++ b/linden/indra/newview/llmaniprotate.cpp
@@ -381,7 +381,7 @@ BOOL LLManipRotate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
381 objectp; 381 objectp;
382 objectp = mObjectSelection->getNextObject()) 382 objectp = mObjectSelection->getNextObject())
383 { 383 {
384 can_rotate = can_rotate && objectp->permMove() && (objectp->permModify() || gSavedSettings.getBOOL("SelectLinkedSet")); 384 can_rotate = can_rotate && objectp->permMove() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts"));
385 } 385 }
386 386
387 if (!can_rotate) 387 if (!can_rotate)
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index 648be34..c130824 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -1222,7 +1222,7 @@ void LLManipScale::sendUpdates( BOOL send_position_update, BOOL send_scale_updat
1222 mLastUpdateFlags = update_flags; 1222 mLastUpdateFlags = update_flags;
1223 1223
1224 // enforce minimum update delay and don't stream updates on sub-object selections 1224 // enforce minimum update delay and don't stream updates on sub-object selections
1225 if( elapsed_time > UPDATE_DELAY && gSavedSettings.getBOOL("SelectLinkedSet") ) 1225 if( elapsed_time > UPDATE_DELAY && !gSavedSettings.getBOOL("EditLinkedParts") )
1226 { 1226 {
1227 gSelectMgr->sendMultipleUpdate( update_flags ); 1227 gSelectMgr->sendMultipleUpdate( update_flags );
1228 update_timer.reset(); 1228 update_timer.reset();
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index 0bdfbb3..a7312fc 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -298,7 +298,7 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
298 objectp; 298 objectp;
299 objectp = mObjectSelection->getNextObject()) 299 objectp = mObjectSelection->getNextObject())
300 { 300 {
301 can_move = can_move && objectp->permMove() && (objectp->permModify() || gSavedSettings.getBOOL("SelectLinkedSet")); 301 can_move = can_move && objectp->permMove() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts"));
302 } 302 }
303 303
304 if (!can_move) 304 if (!can_move)
diff --git a/linden/indra/newview/llmapresponders.cpp b/linden/indra/newview/llmapresponders.cpp
index ddf5701..9d84064 100644
--- a/linden/indra/newview/llmapresponders.cpp
+++ b/linden/indra/newview/llmapresponders.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file llmapresponders.h 2 * @file llmapresponders.cpp
3 * @brief Processes responses received for map requests. 3 * @brief Processes responses received for map requests.
4 * 4 *
5 * Copyright (c) 2006-2007, Linden Research, Inc. 5 * Copyright (c) 2006-2007, Linden Research, Inc.
diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp
index c2ca740..bca9080 100644
--- a/linden/indra/newview/llmutelist.cpp
+++ b/linden/indra/newview/llmutelist.cpp
@@ -376,8 +376,10 @@ BOOL LLMuteList::loadFromFile(const LLString& filename)
376 id_buffer[0] = '\0'; 376 id_buffer[0] = '\0';
377 name_buffer[0] = '\0'; 377 name_buffer[0] = '\0';
378 S32 type = 0; 378 S32 type = 0;
379 U32 flags = 0;
379 sscanf( /* Flawfinder: ignore */ 380 sscanf( /* Flawfinder: ignore */
380 buffer, " %d %254s %254[^|]", &type, id_buffer, name_buffer); 381 buffer, " %d %254s %254[^|]| %u\n", &type, id_buffer, name_buffer,
382 &flags);
381 LLUUID id = LLUUID(id_buffer); 383 LLUUID id = LLUUID(id_buffer);
382 LLMute mute(id, name_buffer, (LLMute::EType)type); 384 LLMute mute(id, name_buffer, (LLMute::EType)type);
383 if (mute.mID.isNull() 385 if (mute.mID.isNull()
diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp
index e2626b4..7822d00 100644
--- a/linden/indra/newview/llnotify.cpp
+++ b/linden/indra/newview/llnotify.cpp
@@ -71,6 +71,16 @@ void LLNotifyBox::showXml( const LLString& xml_desc, notify_callback_t callback,
71 return showXml(xml_desc, LLString::format_map_t(), callback, user_data); 71 return showXml(xml_desc, LLString::format_map_t(), callback, user_data);
72} 72}
73 73
74
75//static
76void LLNotifyBox::showXml( const LLString& xml_desc, const LLString::format_map_t& args, BOOL is_caution,
77 notify_callback_t callback, void *user_data)
78{
79 // for script permission prompts
80 LLNotifyBox* notify = new LLNotifyBox(xml_desc, args, callback, user_data, is_caution);
81 gNotifyBoxView->addChild(notify);
82}
83
74//static 84//static
75void LLNotifyBox::showXml( const LLString& xml_desc, const LLString::format_map_t& args, 85void LLNotifyBox::showXml( const LLString& xml_desc, const LLString::format_map_t& args,
76 notify_callback_t callback, void *user_data) 86 notify_callback_t callback, void *user_data)
@@ -85,7 +95,7 @@ void LLNotifyBox::showXml( const LLString& xml_desc, const LLString::format_map_
85 const option_list_t& options, 95 const option_list_t& options,
86 BOOL layout_script_dialog) 96 BOOL layout_script_dialog)
87{ 97{
88 LLNotifyBox* notify = new LLNotifyBox(xml_desc, args, callback, user_data, options, layout_script_dialog); 98 LLNotifyBox* notify = new LLNotifyBox(xml_desc, args, callback, user_data, FALSE, options, layout_script_dialog);
89 gNotifyBoxView->addChild(notify); 99 gNotifyBoxView->addChild(notify);
90} 100}
91 101
@@ -99,7 +109,7 @@ void LLNotifyBox::cleanup()
99//--------------------------------------------------------------------------- 109//---------------------------------------------------------------------------
100 110
101LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t& args, 111LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t& args,
102 notify_callback_t callback, void* user_data, 112 notify_callback_t callback, void* user_data, BOOL is_caution,
103 const option_list_t& extra_options, 113 const option_list_t& extra_options,
104 BOOL layout_script_dialog) 114 BOOL layout_script_dialog)
105 : LLPanel("notify", LLRect(), BORDER_NO), 115 : LLPanel("notify", LLRect(), BORDER_NO),
@@ -152,9 +162,19 @@ LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t&
152 options.insert(options.end(), extra_options.begin(), extra_options.end()); 162 options.insert(options.end(), extra_options.begin(), extra_options.end());
153 163
154 // initialize 164 // initialize
155 165
156 mIsTip = xml_template->mIsTip; 166 mIsTip = xml_template->mIsTip;
157 mIsFocusRoot = !mIsTip; 167 mIsFocusRoot = !mIsTip;
168
169 // caution flag can be set explicitly by specifying it in the
170 // call to the c'tor, or it can be set implicitly if the
171 // notify xml template specifies that it is a caution
172 //
173 // (but a tip-style notification cannot be a caution notification,
174 // since the rendering of the additional top textbox doesn't
175 // account for the special layout of a tip notification)
176 mIsCaution = ((xml_template->mIsCaution | is_caution) && (!mIsTip));
177
158 mAnimating = TRUE; 178 mAnimating = TRUE;
159 mCallback = callback; 179 mCallback = callback;
160 mData = user_data; 180 mData = user_data;
@@ -162,7 +182,7 @@ LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t&
162 mDefaultOption = xml_template->mDefaultOption; 182 mDefaultOption = xml_template->mDefaultOption;
163 183
164 LLRect rect = mIsTip ? getNotifyTipRect(message) 184 LLRect rect = mIsTip ? getNotifyTipRect(message)
165 : getNotifyRect(mNumOptions, layout_script_dialog); 185 : getNotifyRect(mNumOptions, layout_script_dialog, mIsCaution);
166 setRect(rect); 186 setRect(rect);
167 setFollows(mIsTip ? (FOLLOWS_BOTTOM|FOLLOWS_RIGHT) : (FOLLOWS_TOP|FOLLOWS_RIGHT)); 187 setFollows(mIsTip ? (FOLLOWS_BOTTOM|FOLLOWS_RIGHT) : (FOLLOWS_TOP|FOLLOWS_RIGHT));
168 setBackgroundVisible(FALSE); 188 setBackgroundVisible(FALSE);
@@ -171,18 +191,57 @@ LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t&
171 LLIconCtrl* icon; 191 LLIconCtrl* icon;
172 LLTextEditor* text; 192 LLTextEditor* text;
173 193
174 S32 x = HPAD + HPAD;
175 const S32 TOP = mRect.getHeight() - (mIsTip ? (S32)sFont->getLineHeight() : 32); 194 const S32 TOP = mRect.getHeight() - (mIsTip ? (S32)sFont->getLineHeight() : 32);
176 const S32 BOTTOM = (S32)sFont->getLineHeight(); 195 const S32 BOTTOM = (S32)sFont->getLineHeight();
196 S32 x = HPAD + HPAD;
197 S32 y = TOP;
198
199 if (mIsTip)
200 {
201 // use the tip notification icon
202 icon = new LLIconCtrl("icon", LLRect(x, y, x+32, TOP-32), "notify_tip_icon.tga");
203 }
204 else if (mIsCaution)
205 {
206 // use the caution notification icon
207 icon = new LLIconCtrl("icon", LLRect(x, y, x+32, TOP-32), "notify_caution_icon.tga");
208 }
209 else
210 {
211 // use the default notification icon
212 icon = new LLIconCtrl("icon", LLRect(x, y, x+32, TOP-32), "notify_box_icon.tga");
213 }
177 214
178 icon = new LLIconCtrl("icon",
179 LLRect(x, TOP, x+32, TOP-32),
180 mIsTip ? "notify_tip_icon.tga" : "notify_box_icon.tga");
181 icon->setMouseOpaque(FALSE); 215 icon->setMouseOpaque(FALSE);
182 addChild(icon); 216 addChild(icon);
183 217
184 x += HPAD + HPAD + 32; 218 x += HPAD + HPAD + 32;
185 219
220 // add a caution textbox at the top of a caution notification
221 LLTextBox* caution_box = NULL;
222 if (mIsCaution)
223 {
224 S32 caution_height = ((S32)sFont->getLineHeight() * 2) + VPAD;
225 caution_box = new LLTextBox(
226 "caution_box",
227 LLRect(x, y, mRect.getWidth() - 2, caution_height),
228 "",
229 sFont,
230 FALSE);
231
232 caution_box->setFontStyle(LLFontGL::BOLD);
233 caution_box->setColor(gColors.getColor("NotifyCautionWarnColor"));
234 caution_box->setBackgroundColor(gColors.getColor("NotifyCautionBoxColor"));
235 caution_box->setBorderVisible(FALSE);
236 caution_box->setWrappedText(LLNotifyBox::getTemplateMessage("ScriptQuestionCautionWarn"));
237
238 addChild(caution_box);
239
240 // adjust the vertical position of the next control so that
241 // it appears below the caution textbox
242 y = y - caution_height;
243 }
244
186 const S32 BOTTOM_PAD = VPAD * 3; 245 const S32 BOTTOM_PAD = VPAD * 3;
187 const S32 BTN_TOP = BOTTOM_PAD + (((mNumOptions-1+2)/3)) * (BTN_HEIGHT+VPAD); 246 const S32 BTN_TOP = BOTTOM_PAD + (((mNumOptions-1+2)/3)) * (BTN_HEIGHT+VPAD);
188 247
@@ -194,7 +253,7 @@ LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t&
194 DB_INV_ITEM_NAME_BUF_SIZE; // For script dialogs: add space for title. 253 DB_INV_ITEM_NAME_BUF_SIZE; // For script dialogs: add space for title.
195 254
196 text = new LLTextEditor("box", 255 text = new LLTextEditor("box",
197 LLRect(x, TOP, mRect.getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16), 256 LLRect(x, y, mRect.getWidth()-2, mIsTip ? BOTTOM : BTN_TOP+16),
198 MAX_LENGTH, 257 MAX_LENGTH,
199 message, 258 message,
200 sFont, 259 sFont,
@@ -235,7 +294,9 @@ LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t&
235 addChild(btn); 294 addChild(btn);
236 mNextBtn = btn; 295 mNextBtn = btn;
237 296
238 S32 btn_width = 90; 297 // make caution notification buttons slightly narrower
298 // so that 3 of them can fit without overlapping the "next" button
299 S32 btn_width = mIsCaution? 84 : 90;
239 LLRect btn_rect; 300 LLRect btn_rect;
240 301
241 for (S32 i = 0; i < mNumOptions; i++) 302 for (S32 i = 0; i < mNumOptions; i++)
@@ -271,6 +332,13 @@ LLNotifyBox::LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t&
271 332
272 btn = new LLButton(options[i], btn_rect, "", onClickButton, userdata); 333 btn = new LLButton(options[i], btn_rect, "", onClickButton, userdata);
273 btn->setFont(font); 334 btn->setFont(font);
335
336 if (mIsCaution)
337 {
338 btn->setImageColor(LLUI::sColorsGroup->getColor("ButtonCautionImageColor"));
339 btn->setDisabledImageColor(LLUI::sColorsGroup->getColor("ButtonCautionImageColor"));
340 }
341
274 addChild(btn, -1); 342 addChild(btn, -1);
275 343
276 if (i == mDefaultOption) 344 if (i == mDefaultOption)
@@ -374,7 +442,8 @@ void LLNotifyBox::drawBackground() const
374 { 442 {
375 LLGLSTexture texture_enabled; 443 LLGLSTexture texture_enabled;
376 LLViewerImage::bindTexture(imagep); 444 LLViewerImage::bindTexture(imagep);
377 LLColor4 color = gColors.getColor("NotifyBoxColor"); 445 // set proper background color depending on whether notify box is a caution or not
446 LLColor4 color = mIsCaution? gColors.getColor("NotifyCautionBoxColor") : gColors.getColor("NotifyBoxColor");
378 if(gFocusMgr.childHasKeyboardFocus( this )) 447 if(gFocusMgr.childHasKeyboardFocus( this ))
379 { 448 {
380 const S32 focus_width = 2; 449 const S32 focus_width = 2;
@@ -387,7 +456,12 @@ void LLNotifyBox::drawBackground() const
387 color = gColors.getColor("ColorDropShadow"); 456 color = gColors.getColor("ColorDropShadow");
388 glColor4fv(color.mV); 457 glColor4fv(color.mV);
389 gl_segmented_rect_2d_tex(0, mRect.getHeight(), mRect.getWidth(), 0, imagep->getWidth(), imagep->getHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); 458 gl_segmented_rect_2d_tex(0, mRect.getHeight(), mRect.getWidth(), 0, imagep->getWidth(), imagep->getHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
390 color = gColors.getColor("NotifyBoxColor"); 459
460 if( mIsCaution )
461 color = gColors.getColor("NotifyCautionBoxColor");
462 else
463 color = gColors.getColor("NotifyBoxColor");
464
391 glColor4fv(color.mV); 465 glColor4fv(color.mV);
392 gl_segmented_rect_2d_tex(1, mRect.getHeight()-1, mRect.getWidth()-1, 1, imagep->getWidth(), imagep->getHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM); 466 gl_segmented_rect_2d_tex(1, mRect.getHeight()-1, mRect.getWidth()-1, 1, imagep->getWidth(), imagep->getHeight(), 16, mIsTip ? ROUNDED_RECT_TOP : ROUNDED_RECT_BOTTOM);
393 } 467 }
@@ -467,9 +541,17 @@ void LLNotifyBox::moveToBack()
467 541
468 542
469// static 543// static
470LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog) 544LLRect LLNotifyBox::getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution)
471{ 545{
472 S32 notify_height = gSavedSettings.getS32("NotifyBoxHeight"); 546 S32 notify_height = gSavedSettings.getS32("NotifyBoxHeight");
547 if (is_caution)
548 {
549 // make caution-style dialog taller to accomodate extra text,
550 // as well as causing the accept/decline buttons to be drawn
551 // in a different position, to help prevent "quick-click-through"
552 // of many permissions prompts
553 notify_height = gSavedSettings.getS32("PermissionsCautionNotifyBoxHeight");
554 }
473 const S32 NOTIFY_WIDTH = gSavedSettings.getS32("NotifyBoxWidth"); 555 const S32 NOTIFY_WIDTH = gSavedSettings.getS32("NotifyBoxWidth");
474 556
475 const S32 TOP = gNotifyBoxView->getRect().getHeight(); 557 const S32 TOP = gNotifyBoxView->getRect().getHeight();
@@ -588,6 +670,17 @@ void LLNotifyBox::onClickButton(void* data)
588 LLNotifyBox* self = self_and_button->mSelf; 670 LLNotifyBox* self = self_and_button->mSelf;
589 S32 button = self_and_button->mButton; 671 S32 button = self_and_button->mButton;
590 672
673 // for caution notifications, check if the last button in the prompt was clicked
674 // unless it is the only button, in which case it will just be an "OK" button
675 if ((self->mIsCaution) && (button > 0) && (button == (self->mNumOptions - 1)))
676 {
677 // show an alert dialog containing more explanation about the debit permission
678 LLAlertDialog::showXml("DebitPermissionDetails");
679
680 // keep this notification open
681 return;
682 }
683
591 if (self->mCallback) 684 if (self->mCallback)
592 { 685 {
593 self->mCallback(button, self->mData); 686 self->mCallback(button, self->mData);
@@ -620,6 +713,20 @@ const LLString& LLNotifyBox::getTemplateMessage(const LLString& xml_desc)
620 } 713 }
621} 714}
622 715
716// method to check whether a given notify template show as a caution or not
717BOOL LLNotifyBox::getTemplateIsCaution(const LLString& xml_desc)
718{
719 BOOL is_caution = FALSE;
720
721 template_map_t::iterator iter = sNotifyTemplates.find(xml_desc);
722 if (iter != sNotifyTemplates.end())
723 {
724 is_caution = iter->second->mIsCaution;
725 }
726
727 return is_caution;
728}
729
623//static 730//static
624bool LLNotifyBox::parseNotify(const LLString& xml_filename) 731bool LLNotifyBox::parseNotify(const LLString& xml_filename)
625{ 732{
@@ -660,6 +767,18 @@ bool LLNotifyBox::parseNotify(const LLString& xml_filename)
660 { 767 {
661 xml_template->mIsTip = tip; 768 xml_template->mIsTip = tip;
662 } 769 }
770
771 // parse a bool attribute named "caution" to determine
772 // whether this notification gets cautionary special handling
773 BOOL caution = FALSE;
774 if (notify->getAttributeBOOL("caution", caution))
775 {
776 if (xml_template)
777 {
778 xml_template->mIsCaution = caution;
779 }
780 }
781
663 782
664 S32 btn_idx = 0; 783 S32 btn_idx = 0;
665 for (LLXMLNode* child = notify->getFirstChild(); 784 for (LLXMLNode* child = notify->getFirstChild();
diff --git a/linden/indra/newview/llnotify.h b/linden/indra/newview/llnotify.h
index 8136cfc..eec27ec 100644
--- a/linden/indra/newview/llnotify.h
+++ b/linden/indra/newview/llnotify.h
@@ -46,7 +46,8 @@ public:
46 46
47 static void showXml( const LLString& xml_desc, 47 static void showXml( const LLString& xml_desc,
48 notify_callback_t callback = NULL, void *user_data = NULL); 48 notify_callback_t callback = NULL, void *user_data = NULL);
49 49 static void showXml( const LLString& xml_desc, const LLString::format_map_t& args, BOOL is_caution,
50 notify_callback_t callback = NULL, void *user_data = NULL);
50 static void showXml( const LLString& xml_desc, const LLString::format_map_t& args, 51 static void showXml( const LLString& xml_desc, const LLString::format_map_t& args,
51 notify_callback_t callback = NULL, void *user_data = NULL); 52 notify_callback_t callback = NULL, void *user_data = NULL);
52 // For script notifications: 53 // For script notifications:
@@ -57,8 +58,10 @@ public:
57 58
58 static bool parseNotify(const LLString& xml_filename); 59 static bool parseNotify(const LLString& xml_filename);
59 static const LLString& getTemplateMessage(const LLString& xml_desc); 60 static const LLString& getTemplateMessage(const LLString& xml_desc);
61 static BOOL getTemplateIsCaution(const LLString& xml_desc);
60 62
61 BOOL isTip() const { return mIsTip; } 63 BOOL isTip() const { return mIsTip; }
64 BOOL isCaution() const { return mIsCaution; }
62 /*virtual*/ void setVisible(BOOL visible); 65 /*virtual*/ void setVisible(BOOL visible);
63 66
64 notify_callback_t getNotifyCallback() { return mCallback; } 67 notify_callback_t getNotifyCallback() { return mCallback; }
@@ -69,6 +72,7 @@ public:
69protected: 72protected:
70 LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t& args, 73 LLNotifyBox(const LLString& xml_desc, const LLString::format_map_t& args,
71 notify_callback_t callback, void* user_data, 74 notify_callback_t callback, void* user_data,
75 BOOL is_caution = FALSE,
72 const option_list_t& extra_options = option_list_t(), 76 const option_list_t& extra_options = option_list_t(),
73 BOOL layout_script_dialog = FALSE); 77 BOOL layout_script_dialog = FALSE);
74 /*virtual*/ ~LLNotifyBox(); 78 /*virtual*/ ~LLNotifyBox();
@@ -86,7 +90,7 @@ protected:
86 90
87 // Returns the rect, relative to gNotifyView, where this 91 // Returns the rect, relative to gNotifyView, where this
88 // notify box should be placed. 92 // notify box should be placed.
89 static LLRect getNotifyRect(S32 num_options, BOOL layout_script_dialog); 93 static LLRect getNotifyRect(S32 num_options, BOOL layout_script_dialog, BOOL is_caution);
90 static LLRect getNotifyTipRect(const LLString &message); 94 static LLRect getNotifyTipRect(const LLString &message);
91 95
92 // internal handler for button being clicked 96 // internal handler for button being clicked
@@ -102,6 +106,7 @@ private:
102 106
103protected: 107protected:
104 BOOL mIsTip; 108 BOOL mIsTip;
109 BOOL mIsCaution; // is this a caution notification?
105 BOOL mAnimating; // Are we sliding onscreen? 110 BOOL mAnimating; // Are we sliding onscreen?
106 111
107 // Time since this notification was displayed. 112 // Time since this notification was displayed.
@@ -149,7 +154,7 @@ extern LLNotifyBoxView* gNotifyBoxView;
149class LLNotifyBoxTemplate : public LLRefCount 154class LLNotifyBoxTemplate : public LLRefCount
150{ 155{
151public: 156public:
152 LLNotifyBoxTemplate() : mIsTip(FALSE), mDefaultOption(0) {} 157 LLNotifyBoxTemplate() : mIsTip(FALSE), mIsCaution(FALSE), mDefaultOption(0) {}
153 158
154 void setMessage(const LLString& message) 159 void setMessage(const LLString& message)
155 { 160 {
@@ -169,6 +174,7 @@ public:
169 LLString mLabel; // Handle for access from code, etc 174 LLString mLabel; // Handle for access from code, etc
170 LLString mMessage; // Message to display 175 LLString mMessage; // Message to display
171 BOOL mIsTip; 176 BOOL mIsTip;
177 BOOL mIsCaution;
172 LLNotifyBox::option_list_t mOptions; 178 LLNotifyBox::option_list_t mOptions;
173 S32 mDefaultOption; 179 S32 mDefaultOption;
174}; 180};
diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp
index b65480b..52bd0f7 100644
--- a/linden/indra/newview/llpaneldirbrowser.cpp
+++ b/linden/indra/newview/llpaneldirbrowser.cpp
@@ -128,8 +128,11 @@ void LLPanelDirBrowser::draw()
128 LLCtrlListInterface *list = childGetListInterface("results"); 128 LLCtrlListInterface *list = childGetListInterface("results");
129 if (list) 129 if (list)
130 { 130 {
131 list->selectFirstItem(); // select first item by default 131 if (list->getCanSelect())
132 childSetFocus("results", TRUE); 132 {
133 list->selectFirstItem(); // select first item by default
134 childSetFocus("results", TRUE);
135 }
133 // Request specific data from the server 136 // Request specific data from the server
134 onCommitList(NULL, this); 137 onCommitList(NULL, this);
135 } 138 }
diff --git a/linden/indra/newview/llpaneldirclassified.cpp b/linden/indra/newview/llpaneldirclassified.cpp
index 8b4a49d..276b608 100644
--- a/linden/indra/newview/llpaneldirclassified.cpp
+++ b/linden/indra/newview/llpaneldirclassified.cpp
@@ -55,6 +55,7 @@
55#include "llpaneldirbrowser.h" 55#include "llpaneldirbrowser.h"
56#include "lltextbox.h" 56#include "lltextbox.h"
57#include "llviewermessage.h" 57#include "llviewermessage.h"
58#include "llvieweruictrlfactory.h"
58#include "llworldmap.h" 59#include "llworldmap.h"
59 60
60// 61//
@@ -85,7 +86,8 @@ BOOL LLPanelDirClassified::postBuild()
85 childSetKeystrokeCallback("name", onKeystrokeNameClassified, this); 86 childSetKeystrokeCallback("name", onKeystrokeNameClassified, this);
86 87
87 childSetAction("Search", onClickSearchCore, this); 88 childSetAction("Search", onClickSearchCore, this);
88 setDefaultBtn( "Search" ); 89 childSetAction("Browse", onClickSearchCore, this);
90 setDefaultBtn( "Browse" );
89 91
90 childSetAction("Place an Ad...", onClickCreateNewClassified, this); 92 childSetAction("Place an Ad...", onClickCreateNewClassified, this);
91 93
@@ -186,6 +188,7 @@ void LLPanelDirClassified::performQuery()
186void LLPanelDirClassified::onKeystrokeNameClassified(LLLineEditor* line, void* data) 188void LLPanelDirClassified::onKeystrokeNameClassified(LLLineEditor* line, void* data)
187{ 189{
188 LLPanelDirClassified *self = (LLPanelDirClassified*)data; 190 LLPanelDirClassified *self = (LLPanelDirClassified*)data;
191
189 S32 len = line->getLength(); 192 S32 len = line->getLength();
190 if (len == 0 193 if (len == 0
191 || len >= 3) 194 || len >= 3)
@@ -199,4 +202,17 @@ void LLPanelDirClassified::onKeystrokeNameClassified(LLLineEditor* line, void* d
199 self->setDefaultBtn(); 202 self->setDefaultBtn();
200 self->childDisable("Search"); 203 self->childDisable("Search");
201 } 204 }
205
206 // Change the Browse to Search or vice versa
207 if (len > 0)
208 {
209 self->childSetVisible("Search", TRUE);
210 self->childSetVisible("Browse", FALSE);
211 }
212 else
213 {
214 self->setDefaultBtn( "Browse" );
215 self->childSetVisible("Search", FALSE);
216 self->childSetVisible("Browse", TRUE);
217 }
202} 218}
diff --git a/linden/indra/newview/llpanelgroupvoting.cpp b/linden/indra/newview/llpanelgroupvoting.cpp
index 8b8cd76..e21af7a 100644
--- a/linden/indra/newview/llpanelgroupvoting.cpp
+++ b/linden/indra/newview/llpanelgroupvoting.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file llpanelgroupvoting.h 2 * @file llpanelgroupvoting.cpp
3 * @brief LLPanelGroupVoting class definition. 3 * @brief LLPanelGroupVoting class definition.
4 * 4 *
5 * Copyright (c) 2003-2007, Linden Research, Inc. 5 * Copyright (c) 2003-2007, Linden Research, Inc.
diff --git a/linden/indra/newview/llpanelinventory.cpp b/linden/indra/newview/llpanelinventory.cpp
index 13cee05..13f07c0 100644
--- a/linden/indra/newview/llpanelinventory.cpp
+++ b/linden/indra/newview/llpanelinventory.cpp
@@ -223,39 +223,38 @@ void LLTaskInvFVBridge::buyItem()
223 { 223 {
224 gViewerWindow->alertXml("Cannot_Purchase_an_Attachment"); 224 gViewerWindow->alertXml("Cannot_Purchase_an_Attachment");
225 llinfos << "Attempt to purchase an attachment" << llendl; 225 llinfos << "Attempt to purchase an attachment" << llendl;
226 delete inv;
226 } 227 }
227 else 228 else
228 { 229 {
229 230 LLString::format_map_t args;
230 231 args["[PRICE]"] = llformat("%d",sale_info.getSalePrice());
231 LLString::format_map_t args; 232 args["[OWNER]"] = owner_name;
232 args["[PRICE]"] = llformat("%d",sale_info.getSalePrice()); 233 if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS)
233 args["[OWNER]"] = owner_name; 234 {
234 if (sale_info.getSaleType() != LLSaleInfo::FS_CONTENTS) 235 U32 next_owner_mask = perm.getMaskNextOwner();
235 { 236 args["[MODIFYPERM]"] = LLAlertDialog::getTemplateMessage((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo");
236 U32 next_owner_mask = perm.getMaskNextOwner(); 237 args["[COPYPERM]"] = LLAlertDialog::getTemplateMessage((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
237 args["[MODIFYPERM]"] = LLAlertDialog::getTemplateMessage((next_owner_mask & PERM_MODIFY) ? "PermYes" : "PermNo"); 238 args["[RESELLPERM]"] = LLAlertDialog::getTemplateMessage((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
238 args["[COPYPERM]"] = LLAlertDialog::getTemplateMessage((next_owner_mask & PERM_COPY) ? "PermYes" : "PermNo");
239 args["[RESELLPERM]"] = LLAlertDialog::getTemplateMessage((next_owner_mask & PERM_TRANSFER) ? "PermYes" : "PermNo");
240 }
241
242 LLString alertdesc;
243 switch(sale_info.getSaleType())
244 {
245 case LLSaleInfo::FS_ORIGINAL:
246 alertdesc = owner_name.empty() ? "BuyOriginalNoOwner" : "BuyOriginal";
247 break;
248 case LLSaleInfo::FS_COPY:
249 default:
250 alertdesc = owner_name.empty() ? "BuyCopyNoOwner" : "BuyCopy";
251 break;
252 case LLSaleInfo::FS_CONTENTS:
253 alertdesc = owner_name.empty() ? "BuyContentsNoOwner" : "BuyContents";
254 break;
255 }
256
257 gViewerWindow->alertXml(alertdesc, args, LLTaskInvFVBridge::commitBuyItem, (void*)inv);
258 } 239 }
240
241 LLString alertdesc;
242 switch(sale_info.getSaleType())
243 {
244 case LLSaleInfo::FS_ORIGINAL:
245 alertdesc = owner_name.empty() ? "BuyOriginalNoOwner" : "BuyOriginal";
246 break;
247 case LLSaleInfo::FS_CONTENTS:
248 alertdesc = owner_name.empty() ? "BuyContentsNoOwner" : "BuyContents";
249 break;
250 case LLSaleInfo::FS_COPY:
251 default:
252 alertdesc = owner_name.empty() ? "BuyCopyNoOwner" : "BuyCopy";
253 break;
254 }
255
256 gViewerWindow->alertXml(alertdesc, args, LLTaskInvFVBridge::commitBuyItem, (void*)inv);
257 }
259} 258}
260 259
261S32 LLTaskInvFVBridge::getPrice() 260S32 LLTaskInvFVBridge::getPrice()
diff --git a/linden/indra/newview/llpanelmsgs.cpp b/linden/indra/newview/llpanelmsgs.cpp
index 3a8729c..a758800 100644
--- a/linden/indra/newview/llpanelmsgs.cpp
+++ b/linden/indra/newview/llpanelmsgs.cpp
@@ -34,6 +34,7 @@
34#include "llviewerwindow.h" 34#include "llviewerwindow.h"
35#include "llviewercontrol.h" 35#include "llviewercontrol.h"
36#include "llvieweruictrlfactory.h" 36#include "llvieweruictrlfactory.h"
37#include "llfirstuse.h"
37 38
38class LLPopupData 39class LLPopupData
39{ 40{
@@ -68,6 +69,7 @@ BOOL LLPanelMsgs::postBuild()
68 mEnabledPopups = LLViewerUICtrlFactory::getScrollListByName(this, "enabled_popups"); 69 mEnabledPopups = LLViewerUICtrlFactory::getScrollListByName(this, "enabled_popups");
69 childSetAction("enable_popup", onClickEnablePopup, this); 70 childSetAction("enable_popup", onClickEnablePopup, this);
70 childSetAction("reset_dialogs_btn", onClickResetDialogs, this); 71 childSetAction("reset_dialogs_btn", onClickResetDialogs, this);
72 childSetAction("skip_dialogs_btn", onClickSkipDialogs, this);
71 buildLists(); 73 buildLists();
72 74
73 sPopupData.mAutoAcceptNewInventory = gSavedSettings.getBOOL("AutoAcceptNewInventory"); 75 sPopupData.mAutoAcceptNewInventory = gSavedSettings.getBOOL("AutoAcceptNewInventory");
@@ -163,6 +165,27 @@ void LLPanelMsgs::cancel()
163 gSavedSettings.setBOOL("AutoAcceptNewInventory", sPopupData.mAutoAcceptNewInventory); 165 gSavedSettings.setBOOL("AutoAcceptNewInventory", sPopupData.mAutoAcceptNewInventory);
164} 166}
165 167
168void LLPanelMsgs::resetAllIgnored()
169{
170 for(LLAlertDialog::template_map_t::iterator iter = LLAlertDialog::sIgnorableTemplates.begin();
171 iter != LLAlertDialog::sIgnorableTemplates.end(); ++iter)
172 {
173 LLAlertDialogTemplate* alert_temp = iter->second;
174 S32 ignore = alert_temp->getIgnore();
175 if(ignore)
176 alert_temp->setIgnore(false);
177 }
178}
179
180void LLPanelMsgs::setAllIgnored()
181{
182 for(LLAlertDialog::template_map_t::iterator iter = LLAlertDialog::sIgnorableTemplates.begin();
183 iter != LLAlertDialog::sIgnorableTemplates.end(); ++iter)
184 {
185 LLAlertDialogTemplate* alert_temp = iter->second;
186 alert_temp->setIgnore(true);
187 }
188}
166 189
167//static 190//static
168void LLPanelMsgs::onClickEnablePopup(void* user_data) 191void LLPanelMsgs::onClickEnablePopup(void* user_data)
@@ -188,10 +211,13 @@ void callback_reset_dialogs(S32 option, void* data)
188{ 211{
189 if (0 == option) 212 if (0 == option)
190 { 213 {
191 gSavedSettings.resetWarnings(); // resets all ignorable dialogs
192 LLPanelMsgs* panelp = (LLPanelMsgs*)data; 214 LLPanelMsgs* panelp = (LLPanelMsgs*)data;
193 if ( panelp ) 215 if ( panelp )
216 {
217 panelp->resetAllIgnored();
218 LLFirstUse::resetFirstUse();
194 panelp->buildLists(); 219 panelp->buildLists();
220 }
195 } 221 }
196} 222}
197 223
@@ -200,3 +226,23 @@ void LLPanelMsgs::onClickResetDialogs(void* user_data)
200{ 226{
201 gViewerWindow->alertXml("ResetShowNextTimeDialogs",callback_reset_dialogs,user_data); 227 gViewerWindow->alertXml("ResetShowNextTimeDialogs",callback_reset_dialogs,user_data);
202} 228}
229
230void callback_skip_dialogs(S32 option, void* data)
231{
232 if (0 == option)
233 {
234 LLPanelMsgs* panelp = (LLPanelMsgs*)data;
235 if ( panelp )
236 {
237 panelp->setAllIgnored();
238 LLFirstUse::disableFirstUse();
239 panelp->buildLists();
240 }
241 }
242}
243
244// static
245void LLPanelMsgs::onClickSkipDialogs(void* user_data)
246{
247 gViewerWindow->alertXml("SkipShowNextTimeDialogs", callback_skip_dialogs, user_data);
248}
diff --git a/linden/indra/newview/llpanelmsgs.h b/linden/indra/newview/llpanelmsgs.h
index 58b6b95..72fc26a 100644
--- a/linden/indra/newview/llpanelmsgs.h
+++ b/linden/indra/newview/llpanelmsgs.h
@@ -47,9 +47,13 @@ public:
47 47
48 static void onClickEnablePopup(void* user_data); 48 static void onClickEnablePopup(void* user_data);
49 static void onClickResetDialogs(void* user_data); 49 static void onClickResetDialogs(void* user_data);
50 static void onClickSkipDialogs(void* user_data);
50 51
51 void buildLists(); 52 void buildLists();
52 53
54 void resetAllIgnored();
55 void setAllIgnored();
56
53protected: 57protected:
54 LLScrollListCtrl* mDisabledPopups; 58 LLScrollListCtrl* mDisabledPopups;
55 LLScrollListCtrl* mEnabledPopups; 59 LLScrollListCtrl* mEnabledPopups;
diff --git a/linden/indra/newview/llpanelobject.cpp b/linden/indra/newview/llpanelobject.cpp
index ae1c213..3e7be68 100644
--- a/linden/indra/newview/llpanelobject.cpp
+++ b/linden/indra/newview/llpanelobject.cpp
@@ -67,6 +67,7 @@
67#include "pipeline.h" 67#include "pipeline.h"
68#include "viewer.h" 68#include "viewer.h"
69#include "llvieweruictrlfactory.h" 69#include "llvieweruictrlfactory.h"
70#include "llfirstuse.h"
70 71
71#include "lldrawpool.h" 72#include "lldrawpool.h"
72 73
@@ -256,32 +257,36 @@ BOOL LLPanelObject::postBuild()
256 257
257 // Sculpt 258 // Sculpt
258 mCtrlSculptTexture = LLUICtrlFactory::getTexturePickerByName(this,"sculpt texture control"); 259 mCtrlSculptTexture = LLUICtrlFactory::getTexturePickerByName(this,"sculpt texture control");
259 mCtrlSculptTexture->setDefaultImageAssetID(LLUUID(SCULPT_DEFAULT_TEXTURE)); 260 if (mCtrlSculptTexture)
260 mCtrlSculptTexture->setCommitCallback( LLPanelObject::onCommitSculpt ); 261 {
261 mCtrlSculptTexture->setOnCancelCallback( LLPanelObject::onCancelSculpt ); 262 mCtrlSculptTexture->setDefaultImageAssetID(LLUUID(SCULPT_DEFAULT_TEXTURE));
262 mCtrlSculptTexture->setOnSelectCallback( LLPanelObject::onSelectSculpt ); 263 mCtrlSculptTexture->setCommitCallback( LLPanelObject::onCommitSculpt );
263 mCtrlSculptTexture->setDropCallback(LLPanelObject::onDropSculpt); 264 mCtrlSculptTexture->setOnCancelCallback( LLPanelObject::onCancelSculpt );
264 mCtrlSculptTexture->setCallbackUserData( this ); 265 mCtrlSculptTexture->setOnSelectCallback( LLPanelObject::onSelectSculpt );
265 // Don't allow (no copy) or (no transfer) textures to be selected during immediate mode 266 mCtrlSculptTexture->setDropCallback(LLPanelObject::onDropSculpt);
266 mCtrlSculptTexture->setImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER); 267 mCtrlSculptTexture->setCallbackUserData( this );
267 // Allow any texture to be used during non-immediate mode. 268 // Don't allow (no copy) or (no transfer) textures to be selected during immediate mode
268 mCtrlSculptTexture->setNonImmediateFilterPermMask(PERM_NONE); 269 mCtrlSculptTexture->setImmediateFilterPermMask(PERM_COPY | PERM_TRANSFER);
269 LLAggregatePermissions texture_perms; 270 // Allow any texture to be used during non-immediate mode.
270 if (gSelectMgr->selectGetAggregateTexturePermissions(texture_perms)) 271 mCtrlSculptTexture->setNonImmediateFilterPermMask(PERM_NONE);
271 { 272 LLAggregatePermissions texture_perms;
272 BOOL can_copy = 273 if (gSelectMgr->selectGetAggregateTexturePermissions(texture_perms))
273 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY || 274 {
274 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_ALL; 275 BOOL can_copy =
275 BOOL can_transfer = 276 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_EMPTY ||
276 texture_perms.getValue(PERM_TRANSFER) == LLAggregatePermissions::AP_EMPTY || 277 texture_perms.getValue(PERM_COPY) == LLAggregatePermissions::AP_ALL;
277 texture_perms.getValue(PERM_TRANSFER) == LLAggregatePermissions::AP_ALL; 278 BOOL can_transfer =
278 mCtrlSculptTexture->setCanApplyImmediately(can_copy && can_transfer); 279 texture_perms.getValue(PERM_TRANSFER) == LLAggregatePermissions::AP_EMPTY ||
279 } 280 texture_perms.getValue(PERM_TRANSFER) == LLAggregatePermissions::AP_ALL;
280 else 281 mCtrlSculptTexture->setCanApplyImmediately(can_copy && can_transfer);
281 { 282 }
282 mCtrlSculptTexture->setCanApplyImmediately(FALSE); 283 else
284 {
285 mCtrlSculptTexture->setCanApplyImmediately(FALSE);
286 }
283 } 287 }
284 288
289
285 // Start with everyone disabled 290 // Start with everyone disabled
286 clearCtrls(); 291 clearCtrls();
287 292
@@ -347,9 +352,9 @@ void LLPanelObject::getState( )
347 } 352 }
348 353
349 // can move or rotate only linked group with move permissions, or sub-object with move and modify perms 354 // can move or rotate only linked group with move permissions, or sub-object with move and modify perms
350 BOOL enable_move = objectp->permMove() && !objectp->isAttachment() && (objectp->permModify() || gSavedSettings.getBOOL("SelectLinkedSet")); 355 BOOL enable_move = objectp->permMove() && !objectp->isAttachment() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts"));
351 BOOL enable_scale = objectp->permMove() && objectp->permModify(); 356 BOOL enable_scale = objectp->permMove() && objectp->permModify();
352 BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || gSavedSettings.getBOOL("SelectLinkedSet")); 357 BOOL enable_rotate = objectp->permMove() && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
353 358
354 LLVector3 vec; 359 LLVector3 vec;
355 if (enable_move) 360 if (enable_move)
@@ -638,6 +643,7 @@ void LLPanelObject::getState( )
638 if (objectp->getParameterEntryInUse(LLNetworkData::PARAMS_SCULPT)) 643 if (objectp->getParameterEntryInUse(LLNetworkData::PARAMS_SCULPT))
639 { 644 {
640 selected_item = MI_SCULPT; 645 selected_item = MI_SCULPT;
646 LLFirstUse::useSculptedPrim();
641 } 647 }
642 648
643 649
@@ -1044,7 +1050,11 @@ void LLPanelObject::getState( )
1044 { 1050 {
1045 mTextureCtrl->setTentative(FALSE); 1051 mTextureCtrl->setTentative(FALSE);
1046 mTextureCtrl->setEnabled(editable); 1052 mTextureCtrl->setEnabled(editable);
1047 mTextureCtrl->setImageAssetID(sculpt_params->getSculptTexture()); 1053 if (editable)
1054 mTextureCtrl->setImageAssetID(sculpt_params->getSculptTexture());
1055 else
1056 mTextureCtrl->setImageAssetID(LLUUID::null);
1057
1048 1058
1049 if (mObject != objectp) // we've just selected a new object, so save for undo 1059 if (mObject != objectp) // we've just selected a new object, so save for undo
1050 mSculptTextureRevert = sculpt_params->getSculptTexture(); 1060 mSculptTextureRevert = sculpt_params->getSculptTexture();
diff --git a/linden/indra/newview/llpolymesh.h b/linden/indra/newview/llpolymesh.h
index f3022f5..9634dbf 100644
--- a/linden/indra/newview/llpolymesh.h
+++ b/linden/indra/newview/llpolymesh.h
@@ -360,7 +360,7 @@ protected:
360 typedef LLAssocList<std::string, LLPolyMeshSharedData*> LLPolyMeshSharedDataTable; 360 typedef LLAssocList<std::string, LLPolyMeshSharedData*> LLPolyMeshSharedDataTable;
361 static LLPolyMeshSharedDataTable sGlobalSharedMeshList; 361 static LLPolyMeshSharedDataTable sGlobalSharedMeshList;
362 362
363 LLVOAvatar* mAvatarp; 363 LLPointer<LLVOAvatar> mAvatarp;
364}; 364};
365 365
366//----------------------------------------------------------------------------- 366//-----------------------------------------------------------------------------
@@ -426,7 +426,7 @@ protected:
426 joint_vec_map_t mJointScales; 426 joint_vec_map_t mJointScales;
427 joint_vec_map_t mJointOffsets; 427 joint_vec_map_t mJointOffsets;
428 LLVector3 mDefaultVec; 428 LLVector3 mDefaultVec;
429 LLVOAvatar* mAvatar; 429 LLPointer<LLVOAvatar> mAvatar;
430}; 430};
431 431
432#endif // LL_LLPOLYMESH_H 432#endif // LL_LLPOLYMESH_H
diff --git a/linden/indra/newview/llprefschat.cpp b/linden/indra/newview/llprefschat.cpp
index 28434ec..70f7833 100644
--- a/linden/indra/newview/llprefschat.cpp
+++ b/linden/indra/newview/llprefschat.cpp
@@ -64,6 +64,7 @@ protected:
64 LLColor4 mSystemChatColor; 64 LLColor4 mSystemChatColor;
65 LLColor4 mAgentChatColor; 65 LLColor4 mAgentChatColor;
66 LLColor4 mObjectChatColor; 66 LLColor4 mObjectChatColor;
67 LLColor4 mOwnerSayChatColor;
67 LLColor4 mBGChatColor; 68 LLColor4 mBGChatColor;
68 LLColor4 mScriptErrorColor; 69 LLColor4 mScriptErrorColor;
69 LLColor4 mHTMLLinkColor; 70 LLColor4 mHTMLLinkColor;
@@ -98,6 +99,7 @@ void LLPrefsChatImpl::refresh()
98 mSystemChatColor = gSavedSettings.getColor4("SystemChatColor"); 99 mSystemChatColor = gSavedSettings.getColor4("SystemChatColor");
99 mAgentChatColor = gSavedSettings.getColor4("AgentChatColor"); 100 mAgentChatColor = gSavedSettings.getColor4("AgentChatColor");
100 mObjectChatColor = gSavedSettings.getColor4("ObjectChatColor"); 101 mObjectChatColor = gSavedSettings.getColor4("ObjectChatColor");
102 mOwnerSayChatColor = gSavedSettings.getColor4("llOwnerSayChatColor");
101 mBGChatColor = gSavedSettings.getColor4("BackgroundChatColor"); 103 mBGChatColor = gSavedSettings.getColor4("BackgroundChatColor");
102 mScriptErrorColor = gSavedSettings.getColor4("ScriptErrorColor"); 104 mScriptErrorColor = gSavedSettings.getColor4("ScriptErrorColor");
103 mHTMLLinkColor = gSavedSettings.getColor4("HTMLLinkColor"); 105 mHTMLLinkColor = gSavedSettings.getColor4("HTMLLinkColor");
@@ -119,6 +121,7 @@ void LLPrefsChatImpl::cancel()
119 gSavedSettings.setColor4("SystemChatColor", mSystemChatColor); 121 gSavedSettings.setColor4("SystemChatColor", mSystemChatColor);
120 gSavedSettings.setColor4("AgentChatColor", mAgentChatColor); 122 gSavedSettings.setColor4("AgentChatColor", mAgentChatColor);
121 gSavedSettings.setColor4("ObjectChatColor", mObjectChatColor); 123 gSavedSettings.setColor4("ObjectChatColor", mObjectChatColor);
124 gSavedSettings.setColor4("llOwnerSayChatColor", mOwnerSayChatColor);
122 gSavedSettings.setColor4("BackgroundChatColor", mBGChatColor); 125 gSavedSettings.setColor4("BackgroundChatColor", mBGChatColor);
123 gSavedSettings.setColor4("ScriptErrorColor", mScriptErrorColor); 126 gSavedSettings.setColor4("ScriptErrorColor", mScriptErrorColor);
124 gSavedSettings.setColor4("HTMLLinkColor", mHTMLLinkColor); 127 gSavedSettings.setColor4("HTMLLinkColor", mHTMLLinkColor);
diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp
index 8575113..738c340 100644
--- a/linden/indra/newview/llprefsim.cpp
+++ b/linden/indra/newview/llprefsim.cpp
@@ -68,6 +68,11 @@ protected:
68 BOOL mLogChat; 68 BOOL mLogChat;
69 BOOL mLogShowHistory; 69 BOOL mLogShowHistory;
70 BOOL mShowTimestamps; 70 BOOL mShowTimestamps;
71 BOOL mIMLogTimestamp;
72 BOOL mLogChatTimestamp;
73 BOOL mLogIMChat;
74 BOOL mLogTimestampDate;
75
71 LLString mIMBusyResponse; 76 LLString mIMBusyResponse;
72 LLString mLogPath; 77 LLString mLogPath;
73 78
@@ -95,6 +100,10 @@ void LLPrefsIMImpl::refresh()
95 mLogInstantMessages= gSavedPerAccountSettings.getBOOL("LogInstantMessages"); 100 mLogInstantMessages= gSavedPerAccountSettings.getBOOL("LogInstantMessages");
96 mLogChat = gSavedPerAccountSettings.getBOOL("LogChat"); 101 mLogChat = gSavedPerAccountSettings.getBOOL("LogChat");
97 mLogShowHistory = gSavedPerAccountSettings.getBOOL("LogShowHistory"); 102 mLogShowHistory = gSavedPerAccountSettings.getBOOL("LogShowHistory");
103 mIMLogTimestamp = gSavedPerAccountSettings.getBOOL("IMLogTimestamp");
104 mLogChatTimestamp = gSavedPerAccountSettings.getBOOL("LogChatTimestamp");
105 mLogIMChat = gSavedPerAccountSettings.getBOOL("LogChatIM");
106 mLogTimestampDate = gSavedPerAccountSettings.getBOOL("LogTimestampDate");
98} 107}
99 108
100void LLPrefsIMImpl::cancel() 109void LLPrefsIMImpl::cancel()
@@ -106,6 +115,10 @@ void LLPrefsIMImpl::cancel()
106 gSavedPerAccountSettings.setBOOL("LogInstantMessages",mLogInstantMessages); 115 gSavedPerAccountSettings.setBOOL("LogInstantMessages",mLogInstantMessages);
107 gSavedPerAccountSettings.setBOOL("LogChat",mLogChat); 116 gSavedPerAccountSettings.setBOOL("LogChat",mLogChat);
108 gSavedPerAccountSettings.setBOOL("LogShowHistory",mLogShowHistory); 117 gSavedPerAccountSettings.setBOOL("LogShowHistory",mLogShowHistory);
118 gSavedPerAccountSettings.setBOOL("IMLogTimestamp",mIMLogTimestamp);
119 gSavedPerAccountSettings.setBOOL("LogChatTimestamp",mLogChatTimestamp);
120 gSavedPerAccountSettings.setBOOL("LogChatIM",mLogIMChat);
121 gSavedPerAccountSettings.setBOOL("LogTimestampDate",mLogTimestampDate);
109} 122}
110 123
111BOOL LLPrefsIMImpl::postBuild() 124BOOL LLPrefsIMImpl::postBuild()
@@ -130,6 +143,10 @@ BOOL LLPrefsIMImpl::postBuild()
130 childDisable("log_show_history"); 143 childDisable("log_show_history");
131 childDisable("log_path_button"); 144 childDisable("log_path_button");
132 childDisable("busy_response"); 145 childDisable("busy_response");
146 childDisable("log_instant_messages_timestamp");
147 childDisable("log_chat_timestamp");
148 childDisable("log_chat_IM");
149 childDisable("log_date_timestamp");
133 150
134 childSetText("busy_response", childGetText("log_in_to_change")); 151 childSetText("busy_response", childGetText("log_in_to_change"));
135 152
@@ -138,7 +155,11 @@ BOOL LLPrefsIMImpl::postBuild()
138 childSetText("log_path_string", mLogPath); 155 childSetText("log_path_string", mLogPath);
139 childSetValue("log_instant_messages", mLogInstantMessages); 156 childSetValue("log_instant_messages", mLogInstantMessages);
140 childSetValue("log_chat", mLogChat); 157 childSetValue("log_chat", mLogChat);
141 childSetValue("log_show_history", mLogShowHistory); 158 childSetValue("log_show_history", mIMLogTimestamp);
159 childSetValue("log_instant_messages_timestamp", mIMLogTimestamp);
160 childSetValue("log_chat_timestamp", mLogChatTimestamp);
161 childSetValue("log_chat_IM", mLogIMChat);
162 childSetValue("log_date_timestamp",mLogTimestampDate);
142 childSetAction("log_path_button", onClickLogPath, this); 163 childSetAction("log_path_button", onClickLogPath, this);
143 childSetCommitCallback("log_chat",onCommitLogging,this); 164 childSetCommitCallback("log_chat",onCommitLogging,this);
144 childSetCommitCallback("log_instant_messages",onCommitLogging,this); 165 childSetCommitCallback("log_instant_messages",onCommitLogging,this);
@@ -179,6 +200,10 @@ void LLPrefsIMImpl::apply()
179 gSavedPerAccountSettings.setBOOL("LogInstantMessages",childGetValue("log_instant_messages").asBoolean()); 200 gSavedPerAccountSettings.setBOOL("LogInstantMessages",childGetValue("log_instant_messages").asBoolean());
180 gSavedPerAccountSettings.setBOOL("LogChat",childGetValue("log_chat").asBoolean()); 201 gSavedPerAccountSettings.setBOOL("LogChat",childGetValue("log_chat").asBoolean());
181 gSavedPerAccountSettings.setBOOL("LogShowHistory",childGetValue("log_show_history").asBoolean()); 202 gSavedPerAccountSettings.setBOOL("LogShowHistory",childGetValue("log_show_history").asBoolean());
203 gSavedPerAccountSettings.setBOOL("IMLogTimestamp",childGetValue("log_instant_messages_timestamp").asBoolean());
204 gSavedPerAccountSettings.setBOOL("LogChatTimestamp",childGetValue("log_chat_timestamp").asBoolean());
205 gSavedPerAccountSettings.setBOOL("LogChatIM",childGetValue("log_chat_IM").asBoolean());
206 gSavedPerAccountSettings.setBOOL("LogTimestampDate",childGetValue("log_date_timestamp").asBoolean());
182 207
183 gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath")); 208 gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath"));
184 209
@@ -246,6 +271,10 @@ void LLPrefsIMImpl::setPersonalInfo(
246 childEnable("log_instant_messages"); 271 childEnable("log_instant_messages");
247 childEnable("log_chat"); 272 childEnable("log_chat");
248 childEnable("busy_response"); 273 childEnable("busy_response");
274 childEnable("log_instant_messages_timestamp");
275 childEnable("log_chat_timestamp");
276 childEnable("log_chat_IM");
277 childEnable("log_date_timestamp");
249 278
250 //RN: get wide string so replace char can work (requires fixed-width encoding) 279 //RN: get wide string so replace char can work (requires fixed-width encoding)
251 LLWString busy_response = utf8str_to_wstring( gSavedPerAccountSettings.getString("BusyModeResponse") ); 280 LLWString busy_response = utf8str_to_wstring( gSavedPerAccountSettings.getString("BusyModeResponse") );
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 5086432..e2be9fd 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -395,9 +395,9 @@ LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(LLViewerObject* obj,
395 root->resetRot(); 395 root->resetRot();
396 396
397 // leave component mode 397 // leave component mode
398 if (!gSavedSettings.getBOOL("SelectLinkedSet")) 398 if (gSavedSettings.getBOOL("EditLinkedParts"))
399 { 399 {
400 gSavedSettings.setBOOL("SelectLinkedSet", TRUE); 400 gSavedSettings.setBOOL("EditLinkedParts", FALSE);
401 promoteSelectionToRoot(); 401 promoteSelectionToRoot();
402 } 402 }
403 403
@@ -463,9 +463,9 @@ LLObjectSelectionHandle LLSelectMgr::selectObjectAndFamily(const LLDynamicArray<
463 } 463 }
464 464
465 // leave component mode 465 // leave component mode
466 if (!gSavedSettings.getBOOL("SelectLinkedSet")) 466 if (gSavedSettings.getBOOL("EditLinkedParts"))
467 { 467 {
468 gSavedSettings.setBOOL("SelectLinkedSet", TRUE); 468 gSavedSettings.setBOOL("EditLinkedParts", FALSE);
469 promoteSelectionToRoot(); 469 promoteSelectionToRoot();
470 } 470 }
471 471
@@ -948,7 +948,7 @@ LLObjectSelectionHandle LLSelectMgr::selectHighlightedObjects()
948 948
949void LLSelectMgr::deselectHighlightedObjects() 949void LLSelectMgr::deselectHighlightedObjects()
950{ 950{
951 BOOL select_linked_set = gSavedSettings.getBOOL("SelectLinkedSet"); 951 BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts");
952 for (std::set<LLPointer<LLViewerObject> >::iterator iter = mRectSelectedObjects.begin(); 952 for (std::set<LLPointer<LLViewerObject> >::iterator iter = mRectSelectedObjects.begin();
953 iter != mRectSelectedObjects.end(); iter++) 953 iter != mRectSelectedObjects.end(); iter++)
954 { 954 {
@@ -3249,7 +3249,7 @@ void LLSelectMgr::sendMultipleUpdate(U32 type)
3249{ 3249{
3250 if (type == UPD_NONE) return; 3250 if (type == UPD_NONE) return;
3251 // send individual updates when selecting textures or individual objects 3251 // send individual updates when selecting textures or individual objects
3252 ESendType send_type = (gSavedSettings.getBOOL("SelectLinkedSet") && !getTEMode()) ? SEND_ONLY_ROOTS : SEND_ROOTS_FIRST; 3252 ESendType send_type = (!gSavedSettings.getBOOL("EditLinkedParts") && !getTEMode()) ? SEND_ONLY_ROOTS : SEND_ROOTS_FIRST;
3253 if (send_type == SEND_ONLY_ROOTS) 3253 if (send_type == SEND_ONLY_ROOTS)
3254 { 3254 {
3255 // tell simulator to apply to whole linked sets 3255 // tell simulator to apply to whole linked sets
@@ -4506,7 +4506,7 @@ void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** use
4506 LLString fullname(first_name); 4506 LLString fullname(first_name);
4507 fullname.append(" "); 4507 fullname.append(" ");
4508 fullname.append(last_name); 4508 fullname.append(last_name);
4509 reporterp->setPickedObjectProperties(name, fullname.c_str()); 4509 reporterp->setPickedObjectProperties(name, fullname.c_str(), owner_id);
4510 } 4510 }
4511 } 4511 }
4512 4512
@@ -4669,7 +4669,7 @@ void LLSelectMgr::updateSilhouettes()
4669 // persists from frame to frame to avoid regenerating object silhouettes 4669 // persists from frame to frame to avoid regenerating object silhouettes
4670 // mHighlightedObjects includes all siblings of rect selected objects 4670 // mHighlightedObjects includes all siblings of rect selected objects
4671 4671
4672 BOOL select_linked_set = gSavedSettings.getBOOL("SelectLinkedSet"); 4672 BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts");
4673 4673
4674 // generate list of roots from current object selection 4674 // generate list of roots from current object selection
4675 for (std::set<LLPointer<LLViewerObject> >::iterator iter = mRectSelectedObjects.begin(); 4675 for (std::set<LLPointer<LLViewerObject> >::iterator iter = mRectSelectedObjects.begin();
@@ -5619,7 +5619,7 @@ BOOL LLSelectMgr::canUndo()
5619//----------------------------------------------------------------------------- 5619//-----------------------------------------------------------------------------
5620void LLSelectMgr::undo() 5620void LLSelectMgr::undo()
5621{ 5621{
5622 BOOL select_linked_set = gSavedSettings.getBOOL("SelectLinkedSet"); 5622 BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts");
5623 LLUUID group_id(gAgent.getGroupID()); 5623 LLUUID group_id(gAgent.getGroupID());
5624 sendListToRegions("Undo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST); 5624 sendListToRegions("Undo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST);
5625} 5625}
@@ -5637,7 +5637,7 @@ BOOL LLSelectMgr::canRedo()
5637//----------------------------------------------------------------------------- 5637//-----------------------------------------------------------------------------
5638void LLSelectMgr::redo() 5638void LLSelectMgr::redo()
5639{ 5639{
5640 BOOL select_linked_set = gSavedSettings.getBOOL("SelectLinkedSet"); 5640 BOOL select_linked_set = !gSavedSettings.getBOOL("EditLinkedParts");
5641 LLUUID group_id(gAgent.getGroupID()); 5641 LLUUID group_id(gAgent.getGroupID());
5642 sendListToRegions("Redo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST); 5642 sendListToRegions("Redo", packAgentAndSessionAndGroupID, packObjectID, &group_id, select_linked_set ? SEND_ONLY_ROOTS : SEND_CHILDREN_FIRST);
5643} 5643}
@@ -5814,7 +5814,7 @@ void LLObjectSelection::deleteAllNodes()
5814 5814
5815LLSelectNode* LLObjectSelection::findNode(LLViewerObject* objectp) 5815LLSelectNode* LLObjectSelection::findNode(LLViewerObject* objectp)
5816{ 5816{
5817 std::map<LLViewerObject*, LLSelectNode*>::iterator found_it = mSelectNodeMap.find(objectp); 5817 std::map<LLPointer<LLViewerObject>, LLSelectNode*>::iterator found_it = mSelectNodeMap.find(objectp);
5818 if (found_it != mSelectNodeMap.end()) 5818 if (found_it != mSelectNodeMap.end())
5819 { 5819 {
5820 return found_it->second; 5820 return found_it->second;
diff --git a/linden/indra/newview/llselectmgr.h b/linden/indra/newview/llselectmgr.h
index c344181..5f76ce2 100644
--- a/linden/indra/newview/llselectmgr.h
+++ b/linden/indra/newview/llselectmgr.h
@@ -188,7 +188,7 @@ private:
188 LLPointer<LLViewerObject> mPrimaryObject; 188 LLPointer<LLViewerObject> mPrimaryObject;
189 std::list<LLSelectNode*>::iterator mCurrentNode; 189 std::list<LLSelectNode*>::iterator mCurrentNode;
190 S32 mCurrentTE; 190 S32 mCurrentTE;
191 std::map<LLViewerObject*, LLSelectNode*> mSelectNodeMap; 191 std::map<LLPointer<LLViewerObject>, LLSelectNode*> mSelectNodeMap;
192 ESelectType mSelectType; 192 ESelectType mSelectType;
193}; 193};
194 194
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index dbda813..283b38b 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -1524,7 +1524,7 @@ public:
1524 for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i) 1524 for (LLSpatialGroup::element_iter i = group->getData().begin(); i != group->getData().end(); ++i)
1525 { 1525 {
1526 LLDrawable* drawable = *i; 1526 LLDrawable* drawable = *i;
1527 if (drawable->getVObj() && !group->mSpatialPartition->mRenderByGroup) 1527 if (drawable->getVObj().notNull() && !group->mSpatialPartition->mRenderByGroup)
1528 { 1528 {
1529 gPipeline.markRebuild(drawable, LLDrawable::REBUILD_ALL, TRUE); 1529 gPipeline.markRebuild(drawable, LLDrawable::REBUILD_ALL, TRUE);
1530 } 1530 }
diff --git a/linden/indra/newview/llsrv.cpp b/linden/indra/newview/llsrv.cpp
new file mode 100644
index 0000000..4dec48d
--- /dev/null
+++ b/linden/indra/newview/llsrv.cpp
@@ -0,0 +1,213 @@
1/**
2 * @file llsrv.cpp
3 * @brief Wrapper for DNS SRV record lookups
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#include "llviewerprecompiledheaders.h"
30
31#include "llsrv.h"
32
33using namespace std;
34
35#if LL_WINDOWS
36
37#undef UNICODE
38#include <winsock2.h>
39#include <windns.h>
40
41vector<LLSRVRecord> LLSRV::query(const string& name)
42{
43 vector<LLSRVRecord> recs;
44 DNS_RECORD *rec;
45 DNS_STATUS status;
46
47 status = DnsQuery(name.c_str(), DNS_TYPE_SRV, DNS_QUERY_STANDARD, NULL, &rec, NULL);
48 if (!status)
49 {
50 for (DNS_RECORD *cur = rec; cur != NULL; cur = cur->pNext)
51 {
52 if (cur->wType != DNS_TYPE_SRV)
53 {
54 continue;
55 }
56 recs.push_back(LLSRVRecord(cur->Data.Srv.wPriority,
57 cur->Data.Srv.wWeight,
58 cur->Data.Srv.pNameTarget,
59 cur->Data.Srv.wPort));
60 }
61 DnsRecordListFree(rec, DnsFreeRecordListDeep);
62 }
63
64 return recs;
65}
66
67#else // !LL_WINDOWS
68
69#include <netinet/in.h>
70#include <arpa/nameser.h>
71#include <arpa/nameser_compat.h>
72#include <resolv.h>
73
74#include <netdb.h>
75
76vector<LLSRVRecord> LLSRV::query(const string& queryName)
77{
78 unsigned char response[16384];
79 vector<LLSRVRecord> recs;
80 char name[1024];
81 int len;
82
83 len = res_query(queryName.c_str(), ns_c_in, ns_t_srv, response,
84 sizeof(response));
85
86 if (len == -1)
87 {
88 llinfos << "Query failed for " << queryName << llendl;
89 return recs;
90 }
91 else if (len > (int) sizeof(response))
92 {
93 llinfos << "Response too big for " << queryName
94 << " (capacity " << sizeof(response)
95 << ", response " << len << ")" << llendl;
96 return recs;
97 }
98
99 // We "should" be using libresolv's ns_initparse and ns_parserr to
100 // parse the result of our query. However, libresolv isn't
101 // packaged correctly on Linux (as of BIND 9), so neither of these
102 // functions is available without statically linking against
103 // libresolv. Ugh! So we parse the response ourselves.
104
105 const unsigned char *pos = response + sizeof(HEADER);
106 const unsigned char *end = response + len;
107 const HEADER *hdr = (const HEADER *) response;
108
109 // Skip over the query embedded in the response.
110
111 for (int q = ntohs(hdr->qdcount); q > 0; --q)
112 {
113 len = dn_expand(response, end, pos, name, sizeof(name));
114
115 if (len == -1)
116 {
117 llinfos << "Could not expand queried name in RR response" << llendl;
118 return recs;
119 }
120
121 pos += len + NS_QFIXEDSZ;
122 }
123
124 for (int a = ntohs(hdr->ancount); a > 0; --a)
125 {
126 static const ns_rr *rr;
127
128 len = dn_expand(response, end, pos, name, sizeof(name) - 1);
129 if (len == -1)
130 {
131 llinfos << "Could not expand response name in RR response" << llendl;
132 return recs;
133 }
134
135 // Skip over the resource name and headers we don't care about.
136
137 pos += len + sizeof(rr->type) + sizeof(rr->rr_class) +
138 sizeof(rr->ttl) + sizeof(rr->rdlength);
139
140 U16 prio;
141 U16 weight;
142 U16 port;
143
144 NS_GET16(prio, pos);
145 NS_GET16(weight, pos);
146 NS_GET16(port, pos);
147
148 len = dn_expand(response, end, pos, name, sizeof(name) - 1);
149
150 if (len == -1)
151 {
152 llinfos << "Could not expand name in RR response" << llendl;
153 return recs;
154 }
155
156 recs.push_back(LLSRVRecord(prio, weight, name, port));
157 }
158
159 // There are likely to be more records in the response, but we
160 // don't care about those, at least for now.
161
162 return recs;
163}
164
165#endif // LL_WINDOWS
166
167vector<string> LLSRV::rewriteURI(const string& uriStr)
168{
169 LLURI uri(uriStr);
170 const string& scheme = uri.scheme();
171 llinfos << "Rewriting " << uriStr << llendl;
172 string serviceName("_" + scheme + "._tcp." + uri.hostName());
173 llinfos << "Querying for " << serviceName << llendl;
174 vector<LLSRVRecord> srvs(LLSRV::query(serviceName));
175 vector<string> rewritten;
176
177 if (srvs.empty())
178 {
179 llinfos << "No query results; using " << uriStr << llendl;
180 rewritten.push_back(uriStr);
181 }
182 else
183 {
184 vector<LLSRVRecord>::const_iterator iter;
185 size_t maxSrvs = 3;
186 size_t i;
187
188 llinfos << "Got " << srvs.size() << " results" << llendl;
189 if (srvs.size() > maxSrvs)
190 {
191 llinfos << "Clamping to " << maxSrvs << llendl;
192 }
193
194 for (iter = srvs.begin(), i = 0;
195 iter != srvs.end() && i < maxSrvs; ++iter, ++i)
196 {
197 LLURI newUri(scheme,
198 uri.userName(),
199 uri.password(),
200 iter->target(),
201 uri.defaultPort() ? iter->port() : uri.hostPort(),
202 uri.escapedPath(),
203 uri.escapedQuery());
204 string newUriStr(newUri.asString());
205
206 llinfos << "Rewrite[" << i << "] " << newUriStr << llendl;
207
208 rewritten.push_back(newUriStr);
209 }
210 }
211
212 return rewritten;
213}
diff --git a/linden/indra/newview/llsrv.h b/linden/indra/newview/llsrv.h
new file mode 100644
index 0000000..fca646d
--- /dev/null
+++ b/linden/indra/newview/llsrv.h
@@ -0,0 +1,66 @@
1/**
2 * @file llsrv.h
3 * @brief Wrapper for DNS SRV record lookups
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_LLSRV_H
30#define LL_LLSRV_H
31
32class LLSRV;
33
34class LLSRVRecord
35{
36 friend class LLSRV;
37
38protected:
39 U16 mPriority;
40 U16 mWeight;
41 std::string mTarget;
42 U16 mPort;
43
44 LLSRVRecord(U16 priority, U16 weight, const std::string& target,
45 U16 port) :
46 mPriority(priority),
47 mWeight(weight),
48 mTarget(target),
49 mPort(port) {
50 }
51
52public:
53 U16 priority() const { return mPriority; }
54 U16 weight() const { return mWeight; }
55 const std::string& target() const { return mTarget; }
56 U16 port() const { return mPort; }
57};
58
59class LLSRV
60{
61public:
62 static std::vector<LLSRVRecord> query(const std::string& name);
63 static std::vector<std::string> rewriteURI(const std::string& uri);
64};
65
66#endif // LL_LLSRV_H
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 4af02cb..0130edf 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -117,6 +117,7 @@
117#include "llpreviewscript.h" 117#include "llpreviewscript.h"
118#include "llselectmgr.h" 118#include "llselectmgr.h"
119#include "llsky.h" 119#include "llsky.h"
120#include "llsrv.h"
120#include "llstatview.h" 121#include "llstatview.h"
121#include "llsurface.h" 122#include "llsurface.h"
122#include "lltexturecache.h" 123#include "lltexturecache.h"
@@ -285,7 +286,8 @@ BOOL idle_startup()
285 // auth/transform loop will do. 286 // auth/transform loop will do.
286 static F32 progress = 0.10f; 287 static F32 progress = 0.10f;
287 288
288 static std::string auth_uri; 289 static std::vector<std::string> auth_uris;
290 static int auth_uri_num = -1;
289 static std::string auth_method; 291 static std::string auth_method;
290 static std::string auth_desc; 292 static std::string auth_desc;
291 static std::string auth_message; 293 static std::string auth_message;
@@ -1109,7 +1111,11 @@ BOOL idle_startup()
1109 gSavedSettings.setBOOL("UseDebugMenus", TRUE); 1111 gSavedSettings.setBOOL("UseDebugMenus", TRUE);
1110 requested_options.push_back("god-connect"); 1112 requested_options.push_back("god-connect");
1111 } 1113 }
1112 auth_uri = getLoginURI(); 1114 if (auth_uris.empty())
1115 {
1116 auth_uris = getLoginURIs();
1117 }
1118 auth_uri_num = 0;
1113 auth_method = "login_to_simulator"; 1119 auth_method = "login_to_simulator";
1114 auth_desc = "Logging in. "; 1120 auth_desc = "Logging in. ";
1115 auth_desc += gSecondLife; 1121 auth_desc += gSecondLife;
@@ -1152,7 +1158,7 @@ BOOL idle_startup()
1152 hashed_mac.hex_digest(hashed_mac_string); 1158 hashed_mac.hex_digest(hashed_mac_string);
1153 1159
1154 gUserAuthp->authenticate( 1160 gUserAuthp->authenticate(
1155 auth_uri.c_str(), 1161 auth_uris[auth_uri_num].c_str(),
1156 auth_method.c_str(), 1162 auth_method.c_str(),
1157 firstname.c_str(), 1163 firstname.c_str(),
1158 lastname.c_str(), 1164 lastname.c_str(),
@@ -1248,7 +1254,8 @@ BOOL idle_startup()
1248 else if(login_response && (0 == strcmp(login_response, "indeterminate"))) 1254 else if(login_response && (0 == strcmp(login_response, "indeterminate")))
1249 { 1255 {
1250 llinfos << "Indeterminate login..." << llendl; 1256 llinfos << "Indeterminate login..." << llendl;
1251 auth_uri = gUserAuthp->getResponse("next_url"); 1257 auth_uris = LLSRV::rewriteURI(gUserAuthp->getResponse("next_url"));
1258 auth_uri_num = 0;
1252 auth_method = gUserAuthp->getResponse("next_method"); 1259 auth_method = gUserAuthp->getResponse("next_method");
1253 auth_message = gUserAuthp->getResponse("message"); 1260 auth_message = gUserAuthp->getResponse("message");
1254 if(auth_method.substr(0, 5) == "login") 1261 if(auth_method.substr(0, 5) == "login")
@@ -1351,13 +1358,33 @@ BOOL idle_startup()
1351 case LLUserAuth::E_SSL_PEER_CERTIFICATE: 1358 case LLUserAuth::E_SSL_PEER_CERTIFICATE:
1352 case LLUserAuth::E_UNHANDLED_ERROR: 1359 case LLUserAuth::E_UNHANDLED_ERROR:
1353 default: 1360 default:
1354 emsg << "Unable to connect to " << gSecondLife << ".\n"; 1361 if (auth_uri_num >= (int) auth_uris.size())
1355 emsg << gUserAuthp->errorMessage(); 1362 {
1363 emsg << "Unable to connect to " << gSecondLife << ".\n";
1364 emsg << gUserAuthp->errorMessage();
1365 } else {
1366 std::ostringstream s;
1367 s << "Logging in (attempt " << (auth_uri_num + 1) << "). ";
1368 auth_desc = s.str();
1369 gStartupState = STATE_LOGIN_AUTHENTICATE;
1370 auth_uri_num++;
1371 return do_normal_idle;
1372 }
1356 break; 1373 break;
1357 case LLUserAuth::E_SSL_CACERT: 1374 case LLUserAuth::E_SSL_CACERT:
1358 case LLUserAuth::E_SSL_CONNECT_ERROR: 1375 case LLUserAuth::E_SSL_CONNECT_ERROR:
1359 emsg << "Unable to establish a secure connection to the login server.\n"; 1376 if (auth_uri_num >= (int) auth_uris.size())
1360 emsg << gUserAuthp->errorMessage(); 1377 {
1378 emsg << "Unable to establish a secure connection to the login server.\n";
1379 emsg << gUserAuthp->errorMessage();
1380 } else {
1381 std::ostringstream s;
1382 s << "Logging in (attempt " << (auth_uri_num + 1) << "). ";
1383 auth_desc = s.str();
1384 gStartupState = STATE_LOGIN_AUTHENTICATE;
1385 auth_uri_num++;
1386 return do_normal_idle;
1387 }
1361 break; 1388 break;
1362 } 1389 }
1363 1390
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index 2005e39..26ee098 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -2314,7 +2314,7 @@ LLColor4 LLTexParamColor::getNetColor()
2314{ 2314{
2315 llassert( getInfo()->mNumColors >= 1 ); 2315 llassert( getInfo()->mNumColors >= 1 );
2316 2316
2317 F32 effective_weight = ( mAvatar && (mAvatar->getSex() & getSex()) ) ? mCurWeight : getDefaultWeight(); 2317 F32 effective_weight = ( mAvatar.notNull() && (mAvatar->getSex() & getSex()) ) ? mCurWeight : getDefaultWeight();
2318 2318
2319 S32 index_last = getInfo()->mNumColors - 1; 2319 S32 index_last = getInfo()->mNumColors - 1;
2320 F32 scaled_weight = effective_weight * index_last; 2320 F32 scaled_weight = effective_weight * index_last;
diff --git a/linden/indra/newview/lltexlayer.h b/linden/indra/newview/lltexlayer.h
index c5a34a6..920ae4a 100644
--- a/linden/indra/newview/lltexlayer.h
+++ b/linden/indra/newview/lltexlayer.h
@@ -286,7 +286,7 @@ protected:
286 typedef std::vector<LLTexLayer *> layer_list_t; 286 typedef std::vector<LLTexLayer *> layer_list_t;
287 layer_list_t mLayerList; 287 layer_list_t mLayerList;
288 LLTexLayerSetBuffer* mComposite; 288 LLTexLayerSetBuffer* mComposite;
289 LLVOAvatar* mAvatar; 289 LLPointer<LLVOAvatar> mAvatar;
290 BOOL mUpdatesEnabled; 290 BOOL mUpdatesEnabled;
291 BOOL mHasBump; 291 BOOL mHasBump;
292 292
@@ -443,7 +443,7 @@ public:
443protected: 443protected:
444 typedef std::vector<LLTexParamColor *> param_list_t; 444 typedef std::vector<LLTexParamColor *> param_list_t;
445 param_list_t mParamList; 445 param_list_t mParamList;
446 LLVOAvatar* mAvatar; 446 LLPointer<LLVOAvatar> mAvatar;
447 447
448 LLTexGlobalColorInfo *mInfo; 448 LLTexGlobalColorInfo *mInfo;
449}; 449};
@@ -489,7 +489,7 @@ protected:
489 LLVector3 mAvgDistortionVec; 489 LLVector3 mAvgDistortionVec;
490 LLTexGlobalColor* mTexGlobalColor; // either has mTexGlobalColor or mTexLayer as its parent 490 LLTexGlobalColor* mTexGlobalColor; // either has mTexGlobalColor or mTexLayer as its parent
491 LLTexLayer* mTexLayer; 491 LLTexLayer* mTexLayer;
492 LLVOAvatar* mAvatar; // redundant, but simplifies the code 492 LLPointer<LLVOAvatar> mAvatar; // redundant, but simplifies the code
493}; 493};
494 494
495//----------------------------------------------------------------------------- 495//-----------------------------------------------------------------------------
@@ -569,7 +569,7 @@ public:
569 ~LLBakedUploadData() {} 569 ~LLBakedUploadData() {}
570 570
571 LLUUID mID; 571 LLUUID mID;
572 LLVOAvatar* mAvatar; 572 LLPointer<LLVOAvatar> mAvatar;
573 LLTexLayerSetBuffer* mLayerSetBuffer; 573 LLTexLayerSetBuffer* mLayerSetBuffer;
574 LLUUID mWearableAssets[WT_COUNT]; 574 LLUUID mWearableAssets[WT_COUNT];
575}; 575};
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp
index 2008fda..81b4343 100644
--- a/linden/indra/newview/lltexturecache.cpp
+++ b/linden/indra/newview/lltexturecache.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file texturecache.cpp 2 * @file lltexturecache.cpp
3 * @brief Object which handles local texture caching 3 * @brief Object which handles local texture caching
4 * 4 *
5 * Copyright (c) 2000-2007, Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
@@ -1284,6 +1284,7 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio
1284{ 1284{
1285 if (mReadOnly) 1285 if (mReadOnly)
1286 { 1286 {
1287 delete responder;
1287 return LLWorkerThread::nullHandle(); 1288 return LLWorkerThread::nullHandle();
1288 } 1289 }
1289 if (mDoPurge) 1290 if (mDoPurge)
@@ -1305,6 +1306,7 @@ LLTextureCache::handle_t LLTextureCache::writeToCache(const LLUUID& id, U32 prio
1305 mWriters[handle] = worker; 1306 mWriters[handle] = worker;
1306 return handle; 1307 return handle;
1307 } 1308 }
1309 delete responder;
1308 return LLWorkerThread::nullHandle(); 1310 return LLWorkerThread::nullHandle();
1309} 1311}
1310 1312
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index b5c1ace..6602096 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -119,7 +119,8 @@ public:
119 119
120 // LLFloater overrides 120 // LLFloater overrides
121 virtual void onClose(bool app_quitting); 121 virtual void onClose(bool app_quitting);
122 122 virtual BOOL postBuild();
123
123 // New functions 124 // New functions
124 void setImageID( const LLUUID& image_asset_id); 125 void setImageID( const LLUUID& image_asset_id);
125 void updateImageStats(); 126 void updateImageStats();
@@ -163,6 +164,8 @@ protected:
163 LLUUID mSpecialCurrentImageAssetID; // Used when the asset id has no corresponding texture in the user's inventory. 164 LLUUID mSpecialCurrentImageAssetID; // Used when the asset id has no corresponding texture in the user's inventory.
164 LLUUID mOriginalImageAssetID; 165 LLUUID mOriginalImageAssetID;
165 166
167 std::string mLabel;
168
166 LLTextBox* mTentativeLabel; 169 LLTextBox* mTentativeLabel;
167 LLTextBox* mResolutionLabel; 170 LLTextBox* mResolutionLabel;
168 171
@@ -197,6 +200,7 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
197 mImageAssetID( owner->getImageAssetID() ), 200 mImageAssetID( owner->getImageAssetID() ),
198 mWhiteImageAssetID( gSavedSettings.getString( "UIImgWhiteUUID" ) ), 201 mWhiteImageAssetID( gSavedSettings.getString( "UIImgWhiteUUID" ) ),
199 mOriginalImageAssetID(owner->getImageAssetID()), 202 mOriginalImageAssetID(owner->getImageAssetID()),
203 mLabel(label),
200 mTentativeLabel(NULL), 204 mTentativeLabel(NULL),
201 mResolutionLabel(NULL), 205 mResolutionLabel(NULL),
202 mIsDirty( FALSE ), 206 mIsDirty( FALSE ),
@@ -456,6 +460,21 @@ void LLFloaterTexturePicker::onClose(bool app_quitting)
456} 460}
457 461
458// virtual 462// virtual
463BOOL LLFloaterTexturePicker::postBuild()
464{
465 LLFloater::postBuild();
466
467 if (!mLabel.empty())
468 {
469 std::string pick = childGetText("pick title");
470
471 setTitle(pick + mLabel);
472 }
473
474 return TRUE;
475}
476
477// virtual
459void LLFloaterTexturePicker::draw() 478void LLFloaterTexturePicker::draw()
460{ 479{
461 if (mOwner) 480 if (mOwner)
diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp
index 5cdc854..7bdd98b 100644
--- a/linden/indra/newview/lltexturefetch.cpp
+++ b/linden/indra/newview/lltexturefetch.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file lltexturecache.cpp 2 * @file lltexturefetch.cpp
3 * @brief Object which fetches textures from the cache and/or network 3 * @brief Object which fetches textures from the cache and/or network
4 * 4 *
5 * Copyright (c) 2000-2007, Linden Research, Inc. 5 * Copyright (c) 2000-2007, Linden Research, Inc.
diff --git a/linden/indra/newview/lltoolcomp.cpp b/linden/indra/newview/lltoolcomp.cpp
index fd1152d..555f25e 100644
--- a/linden/indra/newview/lltoolcomp.cpp
+++ b/linden/indra/newview/lltoolcomp.cpp
@@ -121,7 +121,7 @@ BOOL LLToolComposite::isSelecting()
121 121
122void LLToolComposite::handleSelect() 122void LLToolComposite::handleSelect()
123{ 123{
124 if (gSavedSettings.getBOOL("SelectLinkedSet")) 124 if (!gSavedSettings.getBOOL("EditLinkedParts"))
125 { 125 {
126 gSelectMgr->promoteSelectionToRoot(); 126 gSelectMgr->promoteSelectionToRoot();
127 } 127 }
@@ -162,7 +162,7 @@ void LLToolCompInspect::pickCallback(S32 x, S32 y, MASK mask)
162 if (!gToolInspect->mMouseDown) 162 if (!gToolInspect->mMouseDown)
163 { 163 {
164 // fast click on object, but mouse is already up...just do select 164 // fast click on object, but mouse is already up...just do select
165 gToolInspect->mSelectRect->handleObjectSelection(hit_obj, mask, !gSavedSettings.getBOOL("SelectLinkedSet"), FALSE); 165 gToolInspect->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
166 return; 166 return;
167 } 167 }
168 168
@@ -236,7 +236,7 @@ void LLToolCompTranslate::pickCallback(S32 x, S32 y, MASK mask)
236 if (!gToolTranslate->mMouseDown) 236 if (!gToolTranslate->mMouseDown)
237 { 237 {
238 // fast click on object, but mouse is already up...just do select 238 // fast click on object, but mouse is already up...just do select
239 gToolTranslate->mSelectRect->handleObjectSelection(hit_obj, mask, !gSavedSettings.getBOOL("SelectLinkedSet"), FALSE); 239 gToolTranslate->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
240 return; 240 return;
241 } 241 }
242 242
@@ -250,7 +250,7 @@ void LLToolCompTranslate::pickCallback(S32 x, S32 y, MASK mask)
250 BOOL can_move = gToolTranslate->mManip->getSelection()->getObjectCount() != 0; 250 BOOL can_move = gToolTranslate->mManip->getSelection()->getObjectCount() != 0;
251 for (LLViewerObject* objectp = gToolTranslate->mManip->getSelection()->getFirstObject(); objectp; objectp = gToolTranslate->mManip->getSelection()->getNextObject()) 251 for (LLViewerObject* objectp = gToolTranslate->mManip->getSelection()->getFirstObject(); objectp; objectp = gToolTranslate->mManip->getSelection()->getNextObject())
252 { 252 {
253 can_move = can_move && objectp->permMove() && (objectp->permModify() || gSavedSettings.getBOOL("SelectLinkedSet")); 253 can_move = can_move && objectp->permMove() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts"));
254 } 254 }
255 255
256 if( LLManip::LL_NO_PART != gToolTranslate->mManip->getHighlightedPart() && can_move) 256 if( LLManip::LL_NO_PART != gToolTranslate->mManip->getHighlightedPart() && can_move)
@@ -364,7 +364,7 @@ void LLToolCompScale::pickCallback(S32 x, S32 y, MASK mask)
364 if (!gToolStretch->mMouseDown) 364 if (!gToolStretch->mMouseDown)
365 { 365 {
366 // fast click on object, but mouse is already up...just do select 366 // fast click on object, but mouse is already up...just do select
367 gToolStretch->mSelectRect->handleObjectSelection(hit_obj, mask, !gSavedSettings.getBOOL("SelectLinkedSet"), FALSE); 367 gToolStretch->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
368 368
369 return; 369 return;
370 } 370 }
@@ -565,7 +565,7 @@ void LLToolCompRotate::pickCallback(S32 x, S32 y, MASK mask)
565 if (!gToolRotate->mMouseDown) 565 if (!gToolRotate->mMouseDown)
566 { 566 {
567 // fast click on object, but mouse is already up...just do select 567 // fast click on object, but mouse is already up...just do select
568 gToolRotate->mSelectRect->handleObjectSelection(hit_obj, mask, !gSavedSettings.getBOOL("SelectLinkedSet"), FALSE); 568 gToolRotate->mSelectRect->handleObjectSelection(hit_obj, mask, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
569 return; 569 return;
570 } 570 }
571 571
diff --git a/linden/indra/newview/lltoolpie.cpp b/linden/indra/newview/lltoolpie.cpp
index 7231286..0e3a5fe 100644
--- a/linden/indra/newview/lltoolpie.cpp
+++ b/linden/indra/newview/lltoolpie.cpp
@@ -62,7 +62,7 @@
62 62
63LLToolPie *gToolPie = NULL; 63LLToolPie *gToolPie = NULL;
64 64
65LLViewerObject* LLToolPie::sClickActionObject = NULL; 65LLPointer<LLViewerObject> LLToolPie::sClickActionObject;
66LLHandle<LLObjectSelection> LLToolPie::sLeftClickSelection = NULL; 66LLHandle<LLObjectSelection> LLToolPie::sLeftClickSelection = NULL;
67U8 LLToolPie::sClickAction = 0; 67U8 LLToolPie::sClickAction = 0;
68 68
diff --git a/linden/indra/newview/lltoolpie.h b/linden/indra/newview/lltoolpie.h
index 949013f..2fba989 100644
--- a/linden/indra/newview/lltoolpie.h
+++ b/linden/indra/newview/lltoolpie.h
@@ -73,7 +73,7 @@ protected:
73 BOOL mHitLand; 73 BOOL mHitLand;
74 LLUUID mHitObjectID; 74 LLUUID mHitObjectID;
75 BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region 75 BOOL mMouseOutsideSlop; // for this drag, has mouse moved outside slop region
76 static LLViewerObject* sClickActionObject; 76 static LLPointer<LLViewerObject> sClickActionObject;
77 static U8 sClickAction; 77 static U8 sClickAction;
78 static LLHandle<LLObjectSelection> sLeftClickSelection; 78 static LLHandle<LLObjectSelection> sLeftClickSelection;
79}; 79};
diff --git a/linden/indra/newview/lltoolselect.cpp b/linden/indra/newview/lltoolselect.cpp
index 9d02756..329801f 100644
--- a/linden/indra/newview/lltoolselect.cpp
+++ b/linden/indra/newview/lltoolselect.cpp
@@ -229,7 +229,7 @@ LLHandle<LLObjectSelection> LLToolSelect::handleObjectSelection(LLViewerObject *
229 229
230BOOL LLToolSelect::handleMouseUp(S32 x, S32 y, MASK mask) 230BOOL LLToolSelect::handleMouseUp(S32 x, S32 y, MASK mask)
231{ 231{
232 mIgnoreGroup = !gSavedSettings.getBOOL("SelectLinkedSet"); 232 mIgnoreGroup = gSavedSettings.getBOOL("EditLinkedParts");
233 233
234 LLViewerObject* object = gObjectList.findObject(mSelectObjectID); 234 LLViewerObject* object = gObjectList.findObject(mSelectObjectID);
235 LLToolSelect::handleObjectSelection(object, mask, mIgnoreGroup, FALSE); 235 LLToolSelect::handleObjectSelection(object, mask, mIgnoreGroup, FALSE);
diff --git a/linden/indra/newview/llviewerassetstorage.cpp b/linden/indra/newview/llviewerassetstorage.cpp
index 95ef983..d9a5ada 100644
--- a/linden/indra/newview/llviewerassetstorage.cpp
+++ b/linden/indra/newview/llviewerassetstorage.cpp
@@ -57,7 +57,9 @@ void LLViewerAssetStorage::storeAssetData(
57 void* user_data, 57 void* user_data,
58 bool temp_file, 58 bool temp_file,
59 bool is_priority, 59 bool is_priority,
60 bool store_local) 60 bool store_local,
61 bool user_waiting,
62 F64 timeout)
61{ 63{
62 LLAssetID asset_id = tid.makeAssetID(gAgent.getSecureSessionID()); 64 LLAssetID asset_id = tid.makeAssetID(gAgent.getSecureSessionID());
63 llinfos << "LLViewerAssetStorage::storeAssetData (legacy) " << tid << ":" << LLAssetType::lookup(asset_type) 65 llinfos << "LLViewerAssetStorage::storeAssetData (legacy) " << tid << ":" << LLAssetType::lookup(asset_type)
@@ -161,7 +163,9 @@ void LLViewerAssetStorage::storeAssetData(
161 LLStoreAssetCallback callback, 163 LLStoreAssetCallback callback,
162 void* user_data, 164 void* user_data,
163 bool temp_file, 165 bool temp_file,
164 bool is_priority) 166 bool is_priority,
167 bool user_waiting,
168 F64 timeout)
165{ 169{
166 if(!filename) 170 if(!filename)
167 { 171 {
diff --git a/linden/indra/newview/llviewerassetstorage.h b/linden/indra/newview/llviewerassetstorage.h
index 8532e23..46840cb 100644
--- a/linden/indra/newview/llviewerassetstorage.h
+++ b/linden/indra/newview/llviewerassetstorage.h
@@ -52,7 +52,9 @@ public:
52 void* user_data, 52 void* user_data,
53 bool temp_file = false, 53 bool temp_file = false,
54 bool is_priority = false, 54 bool is_priority = false,
55 bool store_local = false); 55 bool store_local = false,
56 bool user_waiting=FALSE,
57 F64 timeout=LL_ASSET_STORAGE_TIMEOUT);
56 58
57 virtual void storeAssetData( 59 virtual void storeAssetData(
58 const char* filename, 60 const char* filename,
@@ -61,7 +63,9 @@ public:
61 LLStoreAssetCallback callback, 63 LLStoreAssetCallback callback,
62 void* user_data, 64 void* user_data,
63 bool temp_file = false, 65 bool temp_file = false,
64 bool is_priority = false); 66 bool is_priority = false,
67 bool user_waiting=FALSE,
68 F64 timeout=LL_ASSET_STORAGE_TIMEOUT);
65}; 69};
66 70
67#endif 71#endif
diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp
index 2a7f346..b129a9a 100644
--- a/linden/indra/newview/llviewerimage.cpp
+++ b/linden/indra/newview/llviewerimage.cpp
@@ -156,7 +156,7 @@ void LLViewerImage::updateClass(const F32 velocity, const F32 angular_velocity)
156 sMaxTotalTextureMem -= sMaxBoundTextureMem/4; 156 sMaxTotalTextureMem -= sMaxBoundTextureMem/4;
157 } 157 }
158 158
159 if (sMaxTotalTextureMem > (S32)gSysMemory.getPhysicalMemory() - min_non_tex_system_mem) 159 if ((U32)sMaxTotalTextureMem > gSysMemory.getPhysicalMemory() - (U32)min_non_tex_system_mem)
160 { 160 {
161 sMaxTotalTextureMem = (S32)gSysMemory.getPhysicalMemory() - min_non_tex_system_mem; 161 sMaxTotalTextureMem = (S32)gSysMemory.getPhysicalMemory() - min_non_tex_system_mem;
162 } 162 }
diff --git a/linden/indra/newview/llviewerimage.h b/linden/indra/newview/llviewerimage.h
index c62e5e4..ee19cfb 100644
--- a/linden/indra/newview/llviewerimage.h
+++ b/linden/indra/newview/llviewerimage.h
@@ -226,6 +226,7 @@ public:
226 BOOST_AVATAR_BAKED = 1, 226 BOOST_AVATAR_BAKED = 1,
227 BOOST_AVATAR = 2, 227 BOOST_AVATAR = 2,
228 BOOST_CLOUDS = 3, 228 BOOST_CLOUDS = 3,
229 BOOST_SCULPTED = 4,
229 230
230 BOOST_HIGH = 10, 231 BOOST_HIGH = 10,
231 BOOST_TERRAIN = 11, // has to be high priority for minimap / low detail 232 BOOST_TERRAIN = 11, // has to be high priority for minimap / low detail
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index 4e87905..fce719f 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -38,6 +38,7 @@
38#include "llimagej2c.h" 38#include "llimagej2c.h"
39#include "llimagetga.h" 39#include "llimagetga.h"
40#include "llimagejpeg.h" 40#include "llimagejpeg.h"
41#include "llimagepng.h"
41#include "llmediaengine.h" 42#include "llmediaengine.h"
42 43
43#include "llsdserialize.h" 44#include "llsdserialize.h"
@@ -1081,6 +1082,21 @@ BOOL LLViewerImageList::createUploadFile(const LLString& filename,
1081 } 1082 }
1082 } 1083 }
1083 break; 1084 break;
1085 case IMG_CODEC_PNG:
1086 {
1087 LLPointer<LLImagePNG> png_image = new LLImagePNG;
1088
1089 if (!png_image->load(filename))
1090 {
1091 return FALSE;
1092 }
1093
1094 if (!png_image->decode(raw_image))
1095 {
1096 return FALSE;
1097 }
1098 }
1099 break;
1084 default: 1100 default:
1085 return FALSE; 1101 return FALSE;
1086 } 1102 }
diff --git a/linden/indra/newview/llviewerinventory.cpp b/linden/indra/newview/llviewerinventory.cpp
index 0a65b8b..f24b7c7 100644
--- a/linden/indra/newview/llviewerinventory.cpp
+++ b/linden/indra/newview/llviewerinventory.cpp
@@ -571,7 +571,7 @@ U32 LLInventoryCallbackManager::registerCB(LLPointer<LLInventoryCallback> cb)
571 571
572void LLInventoryCallbackManager::fire(U32 callback_id, const LLUUID& item_id) 572void LLInventoryCallbackManager::fire(U32 callback_id, const LLUUID& item_id)
573{ 573{
574 if (!callback_id) 574 if (!callback_id || item_id.isNull())
575 return; 575 return;
576 576
577 std::map<U32, LLPointer<LLInventoryCallback> >::iterator i; 577 std::map<U32, LLPointer<LLInventoryCallback> >::iterator i;
diff --git a/linden/indra/newview/llviewerjointattachment.h b/linden/indra/newview/llviewerjointattachment.h
index 0c8469c..a8c2c71 100644
--- a/linden/indra/newview/llviewerjointattachment.h
+++ b/linden/indra/newview/llviewerjointattachment.h
@@ -79,7 +79,7 @@ public:
79 79
80 S32 getGroup() { return mGroup; } 80 S32 getGroup() { return mGroup; }
81 S32 getPieSlice() { return mPieSlice; } 81 S32 getPieSlice() { return mPieSlice; }
82 BOOL getAttachmentDirty() { return mAttachmentDirty && mAttachedObject; } 82 BOOL getAttachmentDirty() { return mAttachmentDirty && mAttachedObject.notNull(); }
83 LLViewerObject *getObject() { return mAttachedObject; } 83 LLViewerObject *getObject() { return mAttachedObject; }
84 S32 getNumObjects() { return (mAttachedObject ? 1 : 0); } 84 S32 getNumObjects() { return (mAttachedObject ? 1 : 0); }
85 const LLUUID& getItemID() { return mItemID; } 85 const LLUUID& getItemID() { return mItemID; }
@@ -99,7 +99,7 @@ protected:
99 99
100protected: 100protected:
101 LLJoint* mJoint; 101 LLJoint* mJoint;
102 LLViewerObject* mAttachedObject; 102 LLPointer<LLViewerObject> mAttachedObject;
103 BOOL mAttachmentDirty; // does attachment drawable need to be fixed up? 103 BOOL mAttachmentDirty; // does attachment drawable need to be fixed up?
104 BOOL mVisibleInFirst; 104 BOOL mVisibleInFirst;
105 LLVector3 mOriginalPos; 105 LLVector3 mOriginalPos;
diff --git a/linden/indra/newview/llviewerkeyboard.cpp b/linden/indra/newview/llviewerkeyboard.cpp
index fcb1550..ad931cd 100644
--- a/linden/indra/newview/llviewerkeyboard.cpp
+++ b/linden/indra/newview/llviewerkeyboard.cpp
@@ -121,11 +121,7 @@ void agent_slide_left( EKeystate s )
121 121
122 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES) 122 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)
123 { 123 {
124 if (frame_count == 0) 124 gAgent.moveLeftNudge(1);
125 {
126 // only send nudge on first frame
127 gAgent.moveLeftNudge(1);
128 }
129 } 125 }
130 else 126 else
131 { 127 {
@@ -142,11 +138,7 @@ void agent_slide_right( EKeystate s )
142 138
143 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES) 139 if( time < NUDGE_TIME || frame_count <= NUDGE_FRAMES)
144 { 140 {
145 if (frame_count == 0) 141 gAgent.moveLeftNudge(-1);
146 {
147 // only send nudge on first frame
148 gAgent.moveLeftNudge(-1);
149 }
150 } 142 }
151 else 143 else
152 { 144 {
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 4119573..b36b9a2 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -244,7 +244,7 @@ const LLString SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents");
244 244
245#if LL_WINDOWS 245#if LL_WINDOWS
246static const char* SOUND_EXTENSIONS = ".wav"; 246static const char* SOUND_EXTENSIONS = ".wav";
247static const char* IMAGE_EXTENSIONS = ".tga .bmp .jpg .jpeg"; 247static const char* IMAGE_EXTENSIONS = ".tga .bmp .jpg .jpeg .png";
248static const char* ANIM_EXTENSIONS = ".bvh"; 248static const char* ANIM_EXTENSIONS = ".bvh";
249#ifdef _CORY_TESTING 249#ifdef _CORY_TESTING
250static const char* GEOMETRY_EXTENSIONS = ".slg"; 250static const char* GEOMETRY_EXTENSIONS = ".slg";
@@ -1259,7 +1259,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
1259 1259
1260 sub_menu = new LLMenuGL("Character Tests"); 1260 sub_menu = new LLMenuGL("Character Tests");
1261 sub_menu->append(new LLMenuItemToggleGL("Go Away/AFK When Idle", 1261 sub_menu->append(new LLMenuItemToggleGL("Go Away/AFK When Idle",
1262 &gAllowAFK)); 1262 &gAllowIdleAFK));
1263 1263
1264 sub_menu->append(new LLMenuItemCallGL("Appearance To XML", 1264 sub_menu->append(new LLMenuItemCallGL("Appearance To XML",
1265 &LLVOAvatar::dumpArchetypeXML)); 1265 &LLVOAvatar::dumpArchetypeXML));
@@ -4150,7 +4150,7 @@ class LLToolsBuyOrTake : public view_listener_t
4150 { 4150 {
4151 S32 total_price = selection_price(); 4151 S32 total_price = selection_price();
4152 4152
4153 if (total_price <= gStatusBar->getBalance()) 4153 if (total_price <= gStatusBar->getBalance() || total_price == 0)
4154 { 4154 {
4155 handle_buy(NULL); 4155 handle_buy(NULL);
4156 } 4156 }
@@ -4442,7 +4442,7 @@ class LLToolsEnableLink : public view_listener_t
4442 // user can modify at least one of the selected objects. 4442 // user can modify at least one of the selected objects.
4443 4443
4444 // in component mode, can't link 4444 // in component mode, can't link
4445 if (gSavedSettings.getBOOL("SelectLinkedSet")) 4445 if (!gSavedSettings.getBOOL("EditLinkedParts"))
4446 { 4446 {
4447 if(gSelectMgr->selectGetAllRootsValid() && gSelectMgr->getSelection()->getRootObjectCount() >= 2) 4447 if(gSelectMgr->selectGetAllRootsValid() && gSelectMgr->getSelection()->getRootObjectCount() >= 2)
4448 { 4448 {
@@ -4842,6 +4842,12 @@ void show_debug_menus()
4842 if ( gMenuBarView ) 4842 if ( gMenuBarView )
4843 { 4843 {
4844 BOOL debug = gSavedSettings.getBOOL("UseDebugMenus"); 4844 BOOL debug = gSavedSettings.getBOOL("UseDebugMenus");
4845
4846 if(debug)
4847 {
4848 LLFirstUse::useDebugMenus();
4849 }
4850
4845 gMenuBarView->setItemVisible(CLIENT_MENU_NAME, debug); 4851 gMenuBarView->setItemVisible(CLIENT_MENU_NAME, debug);
4846 gMenuBarView->setItemEnabled(CLIENT_MENU_NAME, debug); 4852 gMenuBarView->setItemEnabled(CLIENT_MENU_NAME, debug);
4847 gMenuBarView->setItemVisible(SERVER_MENU_NAME, debug); 4853 gMenuBarView->setItemVisible(SERVER_MENU_NAME, debug);
@@ -6927,6 +6933,23 @@ class LLToolsShowSelectionLightRadius : public view_listener_t
6927 } 6933 }
6928}; 6934};
6929 6935
6936class LLToolsEditLinkedParts : public view_listener_t
6937{
6938 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
6939 {
6940 BOOL select_individuals = gSavedSettings.getBOOL("EditLinkedParts");
6941 if (select_individuals)
6942 {
6943 gSelectMgr->demoteSelectionToIndividuals();
6944 }
6945 else
6946 {
6947 gSelectMgr->promoteSelectionToRoot();
6948 }
6949 return true;
6950 }
6951};
6952
6930void reload_personal_settings_overrides(void *) 6953void reload_personal_settings_overrides(void *)
6931{ 6954{
6932 llinfos << "Loading overrides from " << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,"overrides.xml") << llendl; 6955 llinfos << "Loading overrides from " << gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT,"overrides.xml") << llendl;
@@ -7620,6 +7643,7 @@ void initialize_menus()
7620 addMenu(new LLToolsSelectBySurrounding(), "Tools.SelectBySurrounding"); 7643 addMenu(new LLToolsSelectBySurrounding(), "Tools.SelectBySurrounding");
7621 addMenu(new LLToolsShowHiddenSelection(), "Tools.ShowHiddenSelection"); 7644 addMenu(new LLToolsShowHiddenSelection(), "Tools.ShowHiddenSelection");
7622 addMenu(new LLToolsShowSelectionLightRadius(), "Tools.ShowSelectionLightRadius"); 7645 addMenu(new LLToolsShowSelectionLightRadius(), "Tools.ShowSelectionLightRadius");
7646 addMenu(new LLToolsEditLinkedParts(), "Tools.EditLinkedParts");
7623 addMenu(new LLToolsSnapObjectXY(), "Tools.SnapObjectXY"); 7647 addMenu(new LLToolsSnapObjectXY(), "Tools.SnapObjectXY");
7624 addMenu(new LLToolsUseSelectionForGrid(), "Tools.UseSelectionForGrid"); 7648 addMenu(new LLToolsUseSelectionForGrid(), "Tools.UseSelectionForGrid");
7625 addMenu(new LLToolsLink(), "Tools.Link"); 7649 addMenu(new LLToolsLink(), "Tools.Link");
diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp
index 6954b1c..19dfebe 100644
--- a/linden/indra/newview/llviewermenufile.cpp
+++ b/linden/indra/newview/llviewermenufile.cpp
@@ -561,6 +561,21 @@ void upload_new_resource(const LLString& src_filename, std::string name,
561 return; 561 return;
562 } 562 }
563 } 563 }
564 else if( LLString::compareInsensitive(ext.c_str(),".png") == 0 )
565 {
566 asset_type = LLAssetType::AT_TEXTURE;
567 if (!LLViewerImageList::createUploadFile(src_filename,
568 filename,
569 IMG_CODEC_PNG ))
570 {
571 sprintf(error_message, "Problem with file %s:\n\n%s\n",
572 src_filename.c_str(), LLImageBase::getLastError().c_str());
573 args["[FILE]"] = src_filename;
574 args["[ERROR]"] = LLImageBase::getLastError();
575 upload_error(error_message, "ProblemWithFile", filename, args);
576 return;
577 }
578 }
564 else if(LLString::compareInsensitive(ext.c_str(),".wav") == 0) 579 else if(LLString::compareInsensitive(ext.c_str(),".wav") == 0)
565 { 580 {
566 asset_type = LLAssetType::AT_SOUND; // tag it as audio 581 asset_type = LLAssetType::AT_SOUND; // tag it as audio
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 87ff5aa..8f2fc1a 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -154,6 +154,22 @@ LLFrameTimer gThrottleTimer;
154const U32 OFFER_THROTTLE_MAX_COUNT=5; //number of items per time period 154const U32 OFFER_THROTTLE_MAX_COUNT=5; //number of items per time period
155const F32 OFFER_THROTTLE_TIME=10.f; //time period in seconds 155const F32 OFFER_THROTTLE_TIME=10.f; //time period in seconds
156 156
157//script permissions
158const LLString SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] =
159 {
160 "ScriptTakeMoney",
161 "ActOnControlInputs",
162 "RemapControlInputs",
163 "AnimateYourAvatar",
164 "AttachToYourAvatar",
165 "ReleaseOwnership",
166 "LinkAndDelink",
167 "AddAndRemoveJoints",
168 "ChangePermissions",
169 "TrackYourCamera",
170 "ControlYourCamera"
171 };
172
157struct LLFriendshipOffer 173struct LLFriendshipOffer
158{ 174{
159 LLUUID mFromID; 175 LLUUID mFromID;
@@ -4243,8 +4259,8 @@ void process_economy_data(LLMessageSystem *msg, void** /*user_data*/)
4243class LLScriptQuestionCBData 4259class LLScriptQuestionCBData
4244{ 4260{
4245public: 4261public:
4246 LLScriptQuestionCBData(const LLUUID &taskid, const LLUUID &itemid, const LLHost &sender, S32 questions) 4262 LLScriptQuestionCBData(const LLUUID &taskid, const LLUUID &itemid, const LLHost &sender, S32 questions, const char *object_name, const char *owner_name)
4247 : mTaskID(taskid), mItemID(itemid), mSender(sender), mQuestions(questions) 4263 : mTaskID(taskid), mItemID(itemid), mSender(sender), mQuestions(questions), mObjectName(object_name), mOwnerName(owner_name)
4248 { 4264 {
4249 } 4265 }
4250 4266
@@ -4252,17 +4268,138 @@ public:
4252 LLUUID mItemID; 4268 LLUUID mItemID;
4253 LLHost mSender; 4269 LLHost mSender;
4254 S32 mQuestions; 4270 S32 mQuestions;
4271 LLString mObjectName;
4272 LLString mOwnerName;
4255}; 4273};
4256 4274
4275void notify_cautioned_script_question(LLScriptQuestionCBData* cbdata, S32 orig_questions, BOOL granted)
4276{
4277 // only continue if at least some permissions were requested
4278 if (orig_questions)
4279 {
4280 // "'[OBJECTNAME]', an object owned by '[OWNERNAME]',
4281 // located in [REGIONNAME] at [REGIONPOS],
4282 // has been <granted|denied> permission to: [PERMISSIONS]."
4283
4284 LLUIString notice(LLNotifyBox::getTemplateMessage(granted ? "ScriptQuestionCautionChatGranted" : "ScriptQuestionCautionChatDenied"));
4285
4286 // always include the object name and owner name
4287 notice.setArg("[OBJECTNAME]", cbdata->mObjectName);
4288 notice.setArg("[OWNERNAME]", cbdata->mOwnerName);
4289
4290 // try to lookup viewerobject that corresponds to the object that
4291 // requested permissions (here, taskid->requesting object id)
4292 BOOL foundpos = FALSE;
4293 LLViewerObject* viewobj = gObjectList.findObject(cbdata->mTaskID);
4294 if (viewobj)
4295 {
4296 // found the viewerobject, get it's position in its region
4297 LLVector3 objpos(viewobj->getPosition());
4298
4299 // try to lookup the name of the region the object is in
4300 LLViewerRegion* viewregion = viewobj->getRegion();
4301 if (viewregion)
4302 {
4303 // got the region, so include the region and 3d coordinates of the object
4304 notice.setArg("[REGIONNAME]", viewregion->getName());
4305 LLString formatpos = llformat("%.1f, %.1f,%.1f", objpos[VX], objpos[VY], objpos[VZ]);
4306 notice.setArg("[REGIONPOS]", formatpos);
4307
4308 foundpos = TRUE;
4309 }
4310 }
4311
4312 if (!foundpos)
4313 {
4314 // unable to determine location of the object
4315 notice.setArg("[REGIONNAME]", "(unknown region)");
4316 notice.setArg("[REGIONPOS]", "(unknown position)");
4317 }
4318
4319 // check each permission that was requested, and list each
4320 // permission that has been flagged as a caution permission
4321 BOOL caution = FALSE;
4322 S32 count = 0;
4323 LLString perms;
4324 for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
4325 {
4326 if ((orig_questions & LSCRIPTRunTimePermissionBits[i]) && LLNotifyBox::getTemplateIsCaution(SCRIPT_QUESTIONS[i]))
4327 {
4328 count++;
4329 caution = TRUE;
4330
4331 // add a comma before the permission description if it is not the first permission
4332 // added to the list or the last permission to check
4333 if ((count > 1) && (i < SCRIPT_PERMISSION_EOF))
4334 {
4335 perms.append(", ");
4336 }
4337
4338 perms.append(LLNotifyBox::getTemplateMessage(SCRIPT_QUESTIONS[i]));
4339 }
4340 }
4341
4342 notice.setArg("[PERMISSIONS]", perms);
4343
4344 // log a chat message as long as at least one requested permission
4345 // is a caution permission
4346 if (caution)
4347 {
4348 LLChat chat(notice.getString());
4349 LLFloaterChat::addChat(chat, FALSE, FALSE);
4350 }
4351 }
4352}
4353
4354void script_question_decline_cb(S32 option, void* user_data)
4355{
4356 LLMessageSystem *msg = gMessageSystem;
4357 LLScriptQuestionCBData *cbdata = (LLScriptQuestionCBData *)user_data;
4358
4359 // remember the permissions requested so they can be checked
4360 // when it comes time to log a chat message
4361 S32 orig = cbdata->mQuestions;
4362
4363 // this callback will always decline all permissions requested
4364 // (any question flags set in the ScriptAnswerYes message
4365 // will be interpreted as having been granted, so clearing all
4366 // the bits will deny every permission)
4367 cbdata->mQuestions = 0;
4368
4369 // respond with the permissions denial
4370 msg->newMessageFast(_PREHASH_ScriptAnswerYes);
4371 msg->nextBlockFast(_PREHASH_AgentData);
4372 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
4373 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
4374 msg->nextBlockFast(_PREHASH_Data);
4375 msg->addUUIDFast(_PREHASH_TaskID, cbdata->mTaskID);
4376 msg->addUUIDFast(_PREHASH_ItemID, cbdata->mItemID);
4377 msg->addS32Fast(_PREHASH_Questions, cbdata->mQuestions);
4378 msg->sendReliable(cbdata->mSender);
4379
4380 // log a chat message, if appropriate
4381 notify_cautioned_script_question(cbdata, orig, FALSE);
4382
4383 delete cbdata;
4384}
4257 4385
4258void script_question_cb(S32 option, void* user_data) 4386void script_question_cb(S32 option, void* user_data)
4259{ 4387{
4260 LLMessageSystem *msg = gMessageSystem; 4388 LLMessageSystem *msg = gMessageSystem;
4261 LLScriptQuestionCBData *cbdata = (LLScriptQuestionCBData *)user_data; 4389 LLScriptQuestionCBData *cbdata = (LLScriptQuestionCBData *)user_data;
4390 S32 orig = cbdata->mQuestions;
4391
4392 // check whether permissions were granted or denied
4393 BOOL allowed = TRUE;
4394 // the "yes/accept" button is the first button in the template, making it button 0
4395 // if any other button was clicked, the permissions were denied
4262 if (option != 0) 4396 if (option != 0)
4263 { 4397 {
4264 cbdata->mQuestions = 0; 4398 cbdata->mQuestions = 0;
4265 } 4399 allowed = FALSE;
4400 }
4401
4402 // reply with the permissions granted or denied
4266 msg->newMessageFast(_PREHASH_ScriptAnswerYes); 4403 msg->newMessageFast(_PREHASH_ScriptAnswerYes);
4267 msg->nextBlockFast(_PREHASH_AgentData); 4404 msg->nextBlockFast(_PREHASH_AgentData);
4268 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); 4405 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
@@ -4272,27 +4409,20 @@ void script_question_cb(S32 option, void* user_data)
4272 msg->addUUIDFast(_PREHASH_ItemID, cbdata->mItemID); 4409 msg->addUUIDFast(_PREHASH_ItemID, cbdata->mItemID);
4273 msg->addS32Fast(_PREHASH_Questions, cbdata->mQuestions); 4410 msg->addS32Fast(_PREHASH_Questions, cbdata->mQuestions);
4274 msg->sendReliable(cbdata->mSender); 4411 msg->sendReliable(cbdata->mSender);
4412
4413 // only log a chat message if caution prompts are enabled
4414 if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
4415 {
4416 // log a chat message, if appropriate
4417 notify_cautioned_script_question(cbdata, orig, allowed);
4418 }
4419
4275 delete cbdata; 4420 delete cbdata;
4276} 4421}
4277 4422
4278
4279void process_script_question(LLMessageSystem *msg, void **user_data) 4423void process_script_question(LLMessageSystem *msg, void **user_data)
4280{ 4424{
4281 // XUI:translate owner name -> [FIRST] [LAST] 4425 // XUI:translate owner name -> [FIRST] [LAST]
4282 const LLString script_questions[SCRIPT_PERMISSION_EOF] =
4283 {
4284 "ScriptTakeMoney",
4285 "ActOnControlInputs",
4286 "RemapControlInputs",
4287 "AnimateYourAvatar",
4288 "AttachToYourAvatar",
4289 "ReleaseOwnership",
4290 "LinkAndDelink",
4291 "AddAndRemoveJoints",
4292 "ChangePermissions",
4293 "TrackYourCamera",
4294 "ControlYourCamera"
4295 };
4296 4426
4297 LLHost sender = msg->getSender(); 4427 LLHost sender = msg->getSender();
4298 4428
@@ -4302,7 +4432,9 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4302 char object_name[255]; /* Flawfinder: ignore */ 4432 char object_name[255]; /* Flawfinder: ignore */
4303 char owner_name[DB_FULL_NAME_BUF_SIZE]; /* Flawfinder: ignore */ 4433 char owner_name[DB_FULL_NAME_BUF_SIZE]; /* Flawfinder: ignore */
4304 4434
4435 // taskid -> object key of object requesting permissions
4305 msg->getUUIDFast(_PREHASH_Data, _PREHASH_TaskID, taskid ); 4436 msg->getUUIDFast(_PREHASH_Data, _PREHASH_TaskID, taskid );
4437 // itemid -> script asset key of script requesting permissions
4306 msg->getUUIDFast(_PREHASH_Data, _PREHASH_ItemID, itemid ); 4438 msg->getUUIDFast(_PREHASH_Data, _PREHASH_ItemID, itemid );
4307 msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectName, 255, object_name); 4439 msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectName, 255, object_name);
4308 msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, DB_FULL_NAME_BUF_SIZE, owner_name); 4440 msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, DB_FULL_NAME_BUF_SIZE, owner_name);
@@ -4311,23 +4443,48 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4311 LLString script_question; 4443 LLString script_question;
4312 if (questions) 4444 if (questions)
4313 { 4445 {
4446 BOOL caution = FALSE;
4314 S32 count = 0; 4447 S32 count = 0;
4315 LLString::format_map_t args; 4448 LLString::format_map_t args;
4316 args["[OBJECTNAME]"] = object_name; 4449 args["[OBJECTNAME]"] = object_name;
4317 args["[NAME]"] = owner_name; 4450 args["[NAME]"] = owner_name;
4451
4452 // check the received permission flags against each permission
4318 for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++) 4453 for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
4319 { 4454 {
4320 if (questions & LSCRIPTRunTimePermissionBits[i]) 4455 if (questions & LSCRIPTRunTimePermissionBits[i])
4321 { 4456 {
4322 count++; 4457 count++;
4323 script_question += " " + LLNotifyBox::getTemplateMessage(script_questions[i]) + "\n"; 4458 script_question += " " + LLNotifyBox::getTemplateMessage(SCRIPT_QUESTIONS[i]) + "\n";
4459
4460 // check whether permission question should cause special caution dialog
4461 caution |= LLNotifyBox::getTemplateIsCaution(SCRIPT_QUESTIONS[i]);
4324 } 4462 }
4325 } 4463 }
4326 args["[QUESTIONS]"] = script_question; 4464 args["[QUESTIONS]"] = script_question;
4327 4465
4328 LLScriptQuestionCBData *cbdata = new LLScriptQuestionCBData(taskid, itemid, sender, questions); 4466 LLScriptQuestionCBData *cbdata = new LLScriptQuestionCBData(taskid, itemid, sender, questions, object_name, owner_name);
4467
4468 // check whether cautions are even enabled or not
4469 if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
4470 {
4471 if (caution)
4472 {
4473 // display the caution permissions prompt
4474 LLNotifyBox::showXml("ScriptQuestionCaution", args, TRUE, script_question_cb, cbdata);
4475 }
4476 else
4477 {
4478 // display the permissions request normally
4479 LLNotifyBox::showXml("ScriptQuestion", args, FALSE, script_question_cb, cbdata);
4480 }
4481 }
4482 else
4483 {
4484 // fall back to default behavior if cautions are entirely disabled
4485 LLNotifyBox::showXml("ScriptQuestion", args, FALSE, script_question_cb, cbdata);
4486 }
4329 4487
4330 LLNotifyBox::showXml("ScriptQuestion", args, script_question_cb, cbdata);
4331 } 4488 }
4332} 4489}
4333 4490
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp
index 5a7ef9d..d237614 100644
--- a/linden/indra/newview/llviewerobject.cpp
+++ b/linden/indra/newview/llviewerobject.cpp
@@ -1571,7 +1571,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
1571 // Bad, we got a cycle somehow. 1571 // Bad, we got a cycle somehow.
1572 // Kill both the parent and the child, and 1572 // Kill both the parent and the child, and
1573 // set cache misses for both of them. 1573 // set cache misses for both of them.
1574 llwarns << "Attempting to recover from parenting cycle!" << llendl 1574 llwarns << "Attempting to recover from parenting cycle!" << llendl;
1575 llwarns << "Killing " << sent_parentp->getID() << " and " << getID() << llendl; 1575 llwarns << "Killing " << sent_parentp->getID() << " and " << getID() << llendl;
1576 llwarns << "Adding to cache miss list" << llendl; 1576 llwarns << "Adding to cache miss list" << llendl;
1577 setParent(NULL); 1577 setParent(NULL);
@@ -1595,6 +1595,24 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
1595 sent_parentp->addChild(this); 1595 sent_parentp->addChild(this);
1596 } 1596 }
1597 1597
1598 if( mPartSourcep.notNull() )
1599 {
1600 LLViewerPartSourceScript *partSourceScript = mPartSourcep.get();
1601 partSourceScript->setSuspended( FALSE );
1602 }
1603
1604 if( mText.notNull() )
1605 {
1606 LLHUDText *hudText = mText.get();
1607 hudText->setHidden( FALSE );
1608 }
1609
1610 if( mIcon.notNull() )
1611 {
1612 LLHUDIcon *hudIcon = mIcon.get();
1613 hudIcon->setHidden( FALSE );
1614 }
1615
1598 setChanged(MOVED | SILHOUETTE); 1616 setChanged(MOVED | SILHOUETTE);
1599 } 1617 }
1600 else 1618 else
@@ -1609,6 +1627,23 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
1609 U32 port = mesgsys->getSenderPort(); 1627 U32 port = mesgsys->getSenderPort();
1610 1628
1611 gObjectList.orphanize(this, parent_id, ip, port); 1629 gObjectList.orphanize(this, parent_id, ip, port);
1630 if( mPartSourcep.notNull() )
1631 {
1632 LLViewerPartSourceScript *partSourceScript = mPartSourcep.get();
1633 partSourceScript->setSuspended( TRUE );
1634 }
1635
1636 if( mText.notNull() )
1637 {
1638 LLHUDText *hudText = mText.get();
1639 hudText->setHidden( TRUE );
1640 }
1641
1642 if( mIcon.notNull() )
1643 {
1644 LLHUDIcon *hudIcon = mIcon.get();
1645 hudIcon->setHidden( TRUE );
1646 }
1612 } 1647 }
1613 } 1648 }
1614 } 1649 }
@@ -1686,7 +1721,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
1686 // Bad, we got a cycle somehow. 1721 // Bad, we got a cycle somehow.
1687 // Kill both the parent and the child, and 1722 // Kill both the parent and the child, and
1688 // set cache misses for both of them. 1723 // set cache misses for both of them.
1689 llwarns << "Attempting to recover from parenting cycle!" << llendl 1724 llwarns << "Attempting to recover from parenting cycle!" << llendl;
1690 llwarns << "Killing " << sent_parentp->getID() << " and " << getID() << llendl; 1725 llwarns << "Killing " << sent_parentp->getID() << " and " << getID() << llendl;
1691 llwarns << "Adding to cache miss list" << llendl; 1726 llwarns << "Adding to cache miss list" << llendl;
1692 setParent(NULL); 1727 setParent(NULL);
@@ -4148,7 +4183,11 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow
4148 4183
4149 if (audio_uuid.isNull()) 4184 if (audio_uuid.isNull())
4150 { 4185 {
4151 if (mAudioSourcep && mAudioSourcep->isLoop() && !mAudioSourcep->hasPendingPreloads()) 4186 if (!mAudioSourcep)
4187 {
4188 return;
4189 }
4190 if (mAudioSourcep->isLoop() && !mAudioSourcep->hasPendingPreloads())
4152 { 4191 {
4153 // We don't clear the sound if it's a loop, it'll go away on its own. 4192 // We don't clear the sound if it's a loop, it'll go away on its own.
4154 // At least, this appears to be how the scripts work. 4193 // At least, this appears to be how the scripts work.
@@ -4158,29 +4197,22 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow
4158 gAudiop->cleanupAudioSource(mAudioSourcep); 4197 gAudiop->cleanupAudioSource(mAudioSourcep);
4159 mAudioSourcep = NULL; 4198 mAudioSourcep = NULL;
4160 } 4199 }
4161 else if (mAudioSourcep) 4200 else if (flags & LL_SOUND_FLAG_STOP)
4162 { 4201 {
4163 if (mAudioSourcep->isLoop()) 4202 // Just shut off the sound
4164 { 4203 mAudioSourcep->play(LLUUID::null);
4165 // Just shut off the sound
4166 mAudioSourcep->play(LLUUID::null);
4167 }
4168 } 4204 }
4169 return; 4205 return;
4170 } 4206 }
4171 if (flags & LL_SOUND_FLAG_LOOP) 4207 if (flags & LL_SOUND_FLAG_LOOP
4208 && mAudioSourcep && mAudioSourcep->isLoop() && mAudioSourcep->getCurrentData()
4209 && mAudioSourcep->getCurrentData()->getID() == audio_uuid)
4172 { 4210 {
4173 if (mAudioSourcep && mAudioSourcep->isLoop() && mAudioSourcep->getCurrentData()) 4211 //llinfos << "Already playing this sound on a loop, ignoring" << llendl;
4174 { 4212 return;
4175 if (mAudioSourcep->getCurrentData()->getID() == audio_uuid)
4176 {
4177 //llinfos << "Already playing this sound on a loop, ignoring" << llendl;
4178 return;
4179 }
4180 }
4181 } 4213 }
4182 4214
4183 // don't clean up before previous sound is done. Solves: SL-33486 4215 // don't clean up before previous sound is done. Solves: SL-33486
4184 if ( mAudioSourcep && mAudioSourcep->isDone() ) 4216 if ( mAudioSourcep && mAudioSourcep->isDone() )
4185 { 4217 {
4186 gAudiop->cleanupAudioSource(mAudioSourcep); 4218 gAudiop->cleanupAudioSource(mAudioSourcep);
@@ -4191,11 +4223,16 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow
4191 4223
4192 if (mAudioSourcep) 4224 if (mAudioSourcep)
4193 { 4225 {
4226 BOOL queue = flags & LL_SOUND_FLAG_QUEUE;
4194 mAudioSourcep->setGain(gain); 4227 mAudioSourcep->setGain(gain);
4195 mAudioSourcep->setLoop((flags & LL_SOUND_FLAG_LOOP) ? TRUE : FALSE); 4228 mAudioSourcep->setLoop(flags & LL_SOUND_FLAG_LOOP);
4196 mAudioSourcep->setSyncMaster((flags & LL_SOUND_FLAG_SYNC_MASTER) ? TRUE : FALSE); 4229 mAudioSourcep->setSyncMaster(flags & LL_SOUND_FLAG_SYNC_MASTER);
4197 mAudioSourcep->setSyncSlave((flags & LL_SOUND_FLAG_SYNC_SLAVE) ? TRUE : FALSE); 4230 mAudioSourcep->setSyncSlave(flags & LL_SOUND_FLAG_SYNC_SLAVE);
4198 mAudioSourcep->setQueueSounds((flags & LL_SOUND_FLAG_QUEUE) ? TRUE : FALSE); 4231 mAudioSourcep->setQueueSounds(queue);
4232 if(!queue) // stop any current sound first to avoid "farts of doom" (SL-1541) -MG
4233 {
4234 mAudioSourcep->play(LLUUID::null);
4235 }
4199 //llinfos << "Playing attached sound " << audio_uuid << llendl; 4236 //llinfos << "Playing attached sound " << audio_uuid << llendl;
4200 mAudioSourcep->play(audio_uuid); 4237 mAudioSourcep->play(audio_uuid);
4201 } 4238 }
diff --git a/linden/indra/newview/llviewerpartsource.cpp b/linden/indra/newview/llviewerpartsource.cpp
index e440eae..c0de13a 100644
--- a/linden/indra/newview/llviewerpartsource.cpp
+++ b/linden/indra/newview/llviewerpartsource.cpp
@@ -47,6 +47,7 @@ LLViewerPartSource::LLViewerPartSource(const U32 type) :
47 mLastUpdateTime = 0.f; 47 mLastUpdateTime = 0.f;
48 mLastPartTime = 0.f; 48 mLastPartTime = 0.f;
49 mIsDead = FALSE; 49 mIsDead = FALSE;
50 mIsSuspended = FALSE;
50 static U32 id_seed = 0; 51 static U32 id_seed = 0;
51 mID = ++id_seed; 52 mID = ++id_seed;
52} 53}
@@ -93,6 +94,9 @@ void LLViewerPartSourceScript::setDead()
93 94
94void LLViewerPartSourceScript::update(const F32 dt) 95void LLViewerPartSourceScript::update(const F32 dt)
95{ 96{
97 if( mIsSuspended )
98 return;
99
96 LLMemType mt(LLMemType::MTYPE_PARTICLES); 100 LLMemType mt(LLMemType::MTYPE_PARTICLES);
97 F32 old_update_time = mLastUpdateTime; 101 F32 old_update_time = mLastUpdateTime;
98 mLastUpdateTime += dt; 102 mLastUpdateTime += dt;
diff --git a/linden/indra/newview/llviewerpartsource.h b/linden/indra/newview/llviewerpartsource.h
index 9d22e72..32e1475 100644
--- a/linden/indra/newview/llviewerpartsource.h
+++ b/linden/indra/newview/llviewerpartsource.h
@@ -61,9 +61,10 @@ public:
61 virtual void update(const F32 dt); // Return FALSE if this source is dead... 61 virtual void update(const F32 dt); // Return FALSE if this source is dead...
62 62
63 virtual void setDead(); 63 virtual void setDead();
64 BOOL isDead() const { return mIsDead; } 64 BOOL isDead() const { return mIsDead; }
65 65 void setSuspended( BOOL state ) { mIsSuspended = state; }
66 U32 getType() const { return mType; } 66 BOOL isSuspended() const { return mIsSuspended; }
67 U32 getType() const { return mType; }
67 static void updatePart(LLViewerPart &part, const F32 dt); 68 static void updatePart(LLViewerPart &part, const F32 dt);
68 void setOwnerUUID(const LLUUID& owner_id) { mOwnerUUID = owner_id; } 69 void setOwnerUUID(const LLUUID& owner_id) { mOwnerUUID = owner_id; }
69 LLUUID getOwnerUUID() const { return mOwnerUUID; } 70 LLUUID getOwnerUUID() const { return mOwnerUUID; }
@@ -77,6 +78,7 @@ public:
77protected: 78protected:
78 U32 mType; 79 U32 mType;
79 BOOL mIsDead; 80 BOOL mIsDead;
81 BOOL mIsSuspended;
80 F32 mLastUpdateTime; 82 F32 mLastUpdateTime;
81 F32 mLastPartTime; 83 F32 mLastPartTime;
82 LLUUID mOwnerUUID; 84 LLUUID mOwnerUUID;
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index 6a8d53e..f6829d4 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -1425,7 +1425,8 @@ LLView* LLViewerTextEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlF
1425 1425
1426 LLFontGL* font = LLView::selectFont(node); 1426 LLFontGL* font = LLView::selectFont(node);
1427 1427
1428 LLString text = node->getValue(); 1428 // LLString text = node->getValue();
1429 LLString text = node->getTextContents().substr(0, max_text_length - 1);
1429 1430
1430 if (text.size() > max_text_length) 1431 if (text.size() > max_text_length)
1431 { 1432 {
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 0f5bffd..116df89 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -2400,13 +2400,13 @@ BOOL LLViewerWindow::handleKey(KEY key, MASK mask)
2400 case KEY_RIGHT: 2400 case KEY_RIGHT:
2401 case KEY_UP: 2401 case KEY_UP:
2402 // let CTRL UP through for chat line history 2402 // let CTRL UP through for chat line history
2403 if( MASK_CONTROL & mask ) 2403 if( MASK_CONTROL == mask )
2404 { 2404 {
2405 break; 2405 break;
2406 } 2406 }
2407 case KEY_DOWN: 2407 case KEY_DOWN:
2408 // let CTRL DOWN through for chat line history 2408 // let CTRL DOWN through for chat line history
2409 if( MASK_CONTROL & mask ) 2409 if( MASK_CONTROL == mask )
2410 { 2410 {
2411 break; 2411 break;
2412 } 2412 }
@@ -3173,7 +3173,7 @@ void LLViewerWindow::renderSelections( BOOL for_gl_pick, BOOL pick_parcel_walls,
3173 BOOL moveable_object_selected = FALSE; 3173 BOOL moveable_object_selected = FALSE;
3174 BOOL all_selected_objects_move = TRUE; 3174 BOOL all_selected_objects_move = TRUE;
3175 BOOL all_selected_objects_modify = TRUE; 3175 BOOL all_selected_objects_modify = TRUE;
3176 BOOL selecting_linked_set = gSavedSettings.getBOOL("SelectLinkedSet"); 3176 BOOL selecting_linked_set = !gSavedSettings.getBOOL("EditLinkedParts");
3177 for( object = gSelectMgr->getSelection()->getFirstObject(); object; object = gSelectMgr->getSelection()->getNextObject() ) 3177 for( object = gSelectMgr->getSelection()->getFirstObject(); object; object = gSelectMgr->getSelection()->getNextObject() )
3178 { 3178 {
3179 BOOL this_object_movable = FALSE; 3179 BOOL this_object_movable = FALSE;
@@ -3532,6 +3532,18 @@ void LLViewerWindow::performPick()
3532 objectp = gObjectList.getSelectedObject(name); 3532 objectp = gObjectList.getSelectedObject(name);
3533 if (objectp) 3533 if (objectp)
3534 { 3534 {
3535 LLViewerObject* parent = (LLViewerObject*)(objectp->getParent());
3536 if (NULL == parent) {
3537 // if you are the parent
3538 parent = objectp;
3539 }
3540 std::vector<LLPointer<LLViewerObject>,std::allocator<LLPointer<LLViewerObject> > > children = parent->getChildren();
3541 for( std::vector<LLPointer<LLViewerObject>,std::allocator<LLPointer<LLViewerObject> > >::iterator i= children.begin(); i!= children.end(); ++i )
3542 {
3543 //go through
3544 LLViewerObject* foo = *i;
3545 foo->getRotation();
3546 }
3535 if (objectp->mbCanSelect) 3547 if (objectp->mbCanSelect)
3536 { 3548 {
3537 te_offset = (te_offset == 16) ? NO_FACE : te_offset; 3549 te_offset = (te_offset == 16) ? NO_FACE : te_offset;
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 4de4e36..a375d84 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -5739,6 +5739,7 @@ void LLVOAvatar::requestLayerSetUpdate( LLVOAvatar::ELocTexIndex i )
5739 break; 5739 break;
5740 5740
5741 5741
5742 case LOCTEX_UPPER_JACKET:
5742 case LOCTEX_LOWER_JACKET: 5743 case LOCTEX_LOWER_JACKET:
5743 if( mUpperBodyLayerSet ) 5744 if( mUpperBodyLayerSet )
5744 { 5745 {
@@ -5750,6 +5751,10 @@ void LLVOAvatar::requestLayerSetUpdate( LLVOAvatar::ELocTexIndex i )
5750 mLowerBodyLayerSet->requestUpdate(); 5751 mLowerBodyLayerSet->requestUpdate();
5751 } 5752 }
5752 break; 5753 break;
5754
5755 case LOCTEX_NUM_ENTRIES:
5756 llerrs << "Bogus texture value " << i << llendl;
5757 break;
5753 } 5758 }
5754 5759
5755} 5760}
@@ -7409,6 +7414,24 @@ void LLVOAvatar::setCachedBakedTexture( ETextureIndex te, const LLUUID& uuid )
7409 mSkirtLayerSet->cancelUpload(); 7414 mSkirtLayerSet->cancelUpload();
7410 } 7415 }
7411 break; 7416 break;
7417
7418 case TEX_HEAD_BODYPAINT:
7419 case TEX_UPPER_SHIRT:
7420 case TEX_LOWER_PANTS:
7421 case TEX_EYES_IRIS:
7422 case TEX_HAIR:
7423 case TEX_UPPER_BODYPAINT:
7424 case TEX_LOWER_BODYPAINT:
7425 case TEX_LOWER_SHOES:
7426 case TEX_LOWER_SOCKS:
7427 case TEX_UPPER_JACKET:
7428 case TEX_LOWER_JACKET:
7429 case TEX_UPPER_GLOVES:
7430 case TEX_UPPER_UNDERSHIRT:
7431 case TEX_LOWER_UNDERPANTS:
7432 case TEX_SKIRT:
7433 case TEX_NUM_ENTRIES:
7434 break;
7412 } 7435 }
7413} 7436}
7414 7437
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h
index 2a2c0f0..427293a 100644
--- a/linden/indra/newview/llvoavatar.h
+++ b/linden/indra/newview/llvoavatar.h
@@ -256,8 +256,7 @@ public:
256 (1 << LLVertexBuffer::TYPE_TEXCOORD) | 256 (1 << LLVertexBuffer::TYPE_TEXCOORD) |
257 (1 << LLVertexBuffer::TYPE_WEIGHT) | 257 (1 << LLVertexBuffer::TYPE_WEIGHT) |
258 (1 << LLVertexBuffer::TYPE_CLOTHWEIGHT) 258 (1 << LLVertexBuffer::TYPE_CLOTHWEIGHT)
259 } 259 };
260 eVertexDataMask;
261 260
262 LLVOAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); 261 LLVOAvatar(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
263 /*virtual*/ void markDead(); 262 /*virtual*/ void markDead();
diff --git a/linden/indra/newview/llvoinventorylistener.cpp b/linden/indra/newview/llvoinventorylistener.cpp
index 739cd0b..1a50682 100644
--- a/linden/indra/newview/llvoinventorylistener.cpp
+++ b/linden/indra/newview/llvoinventorylistener.cpp
@@ -33,7 +33,7 @@
33 33
34void LLVOInventoryListener::removeVOInventoryListener() 34void LLVOInventoryListener::removeVOInventoryListener()
35{ 35{
36 if (mListenerVObject != NULL) 36 if (mListenerVObject)
37 { 37 {
38 mListenerVObject->removeInventoryListener(this); 38 mListenerVObject->removeInventoryListener(this);
39 mListenerVObject = NULL; 39 mListenerVObject = NULL;
@@ -52,7 +52,7 @@ void LLVOInventoryListener::registerVOInventoryListener(LLViewerObject* object,
52 52
53void LLVOInventoryListener::requestVOInventory() 53void LLVOInventoryListener::requestVOInventory()
54{ 54{
55 if (mListenerVObject != NULL) 55 if (mListenerVObject)
56 { 56 {
57 mListenerVObject->requestInventory(); 57 mListenerVObject->requestInventory();
58 } 58 }
diff --git a/linden/indra/newview/llvoinventorylistener.h b/linden/indra/newview/llvoinventorylistener.h
index 4cb90a6..022713e 100644
--- a/linden/indra/newview/llvoinventorylistener.h
+++ b/linden/indra/newview/llvoinventorylistener.h
@@ -56,7 +56,7 @@ protected:
56 void requestVOInventory(); 56 void requestVOInventory();
57 57
58private: 58private:
59 LLViewerObject* mListenerVObject; 59 LLPointer<LLViewerObject> mListenerVObject;
60}; 60};
61 61
62#endif 62#endif
diff --git a/linden/indra/newview/llvopartgroup.cpp b/linden/indra/newview/llvopartgroup.cpp
index fbf753a..94027a3 100644
--- a/linden/indra/newview/llvopartgroup.cpp
+++ b/linden/indra/newview/llvopartgroup.cpp
@@ -421,7 +421,7 @@ void LLParticlePartition::addGeometryCount(LLSpatialGroup* group, U32& vertex_co
421 continue; 421 continue;
422 } 422 }
423 423
424 LLAlphaObject* obj = (LLAlphaObject*) drawablep->getVObj(); 424 LLAlphaObject* obj = (LLAlphaObject*) drawablep->getVObj().get();
425 obj->mDepth = 0.f; 425 obj->mDepth = 0.f;
426 426
427 if (drawablep->isAnimating()) 427 if (drawablep->isAnimating())
diff --git a/linden/indra/newview/llvopartgroup.h b/linden/indra/newview/llvopartgroup.h
index f3e10c5..f301a48 100644
--- a/linden/indra/newview/llvopartgroup.h
+++ b/linden/indra/newview/llvopartgroup.h
@@ -39,14 +39,13 @@ class LLViewerPartGroup;
39class LLVOPartGroup : public LLAlphaObject 39class LLVOPartGroup : public LLAlphaObject
40{ 40{
41public: 41public:
42 enum 42 enum
43 { 43 {
44 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) | 44 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) |
45 (1 << LLVertexBuffer::TYPE_NORMAL) | 45 (1 << LLVertexBuffer::TYPE_NORMAL) |
46 (1 << LLVertexBuffer::TYPE_TEXCOORD) | 46 (1 << LLVertexBuffer::TYPE_TEXCOORD) |
47 (1 << LLVertexBuffer::TYPE_COLOR) 47 (1 << LLVertexBuffer::TYPE_COLOR)
48 } 48 };
49 eVertexDataMask;
50 49
51 LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); 50 LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
52 51
diff --git a/linden/indra/newview/llvosurfacepatch.h b/linden/indra/newview/llvosurfacepatch.h
index a21763d..e6a6f44 100644
--- a/linden/indra/newview/llvosurfacepatch.h
+++ b/linden/indra/newview/llvosurfacepatch.h
@@ -39,15 +39,14 @@ class LLVector2;
39class LLVOSurfacePatch : public LLStaticViewerObject 39class LLVOSurfacePatch : public LLStaticViewerObject
40{ 40{
41public: 41public:
42 enum 42 enum
43 { 43 {
44 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) | 44 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) |
45 (1 << LLVertexBuffer::TYPE_NORMAL) | 45 (1 << LLVertexBuffer::TYPE_NORMAL) |
46 (1 << LLVertexBuffer::TYPE_TEXCOORD) | 46 (1 << LLVertexBuffer::TYPE_TEXCOORD) |
47 (1 << LLVertexBuffer::TYPE_TEXCOORD2) | 47 (1 << LLVertexBuffer::TYPE_TEXCOORD2) |
48 (1 << LLVertexBuffer::TYPE_COLOR) 48 (1 << LLVertexBuffer::TYPE_COLOR)
49 } 49 };
50 eVertexDataMask;
51 50
52 LLVOSurfacePatch(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); 51 LLVOSurfacePatch(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
53 52
diff --git a/linden/indra/newview/llvotree.h b/linden/indra/newview/llvotree.h
index 4ec148d..6de7c0d 100644
--- a/linden/indra/newview/llvotree.h
+++ b/linden/indra/newview/llvotree.h
@@ -43,13 +43,12 @@ protected:
43 ~LLVOTree(); 43 ~LLVOTree();
44 44
45public: 45public:
46 enum 46 enum
47 { 47 {
48 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) | 48 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) |
49 (1 << LLVertexBuffer::TYPE_NORMAL) | 49 (1 << LLVertexBuffer::TYPE_NORMAL) |
50 (1 << LLVertexBuffer::TYPE_TEXCOORD) 50 (1 << LLVertexBuffer::TYPE_TEXCOORD)
51 } 51 };
52 eVertexDataMask;
53 52
54 LLVOTree(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); 53 LLVOTree(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
55 54
diff --git a/linden/indra/newview/llvovolume.cpp b/linden/indra/newview/llvovolume.cpp
index b9bdddc..ccf0cba 100644
--- a/linden/indra/newview/llvovolume.cpp
+++ b/linden/indra/newview/llvovolume.cpp
@@ -66,6 +66,7 @@
66const S32 MIN_QUIET_FRAMES_COALESCE = 30; 66const S32 MIN_QUIET_FRAMES_COALESCE = 30;
67const F32 FORCE_SIMPLE_RENDER_AREA = 512.f; 67const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
68const F32 FORCE_CULL_AREA = 8.f; 68const F32 FORCE_CULL_AREA = 8.f;
69const S32 SCULPT_REZ = 128;
69 70
70BOOL gAnimateTextures = TRUE; 71BOOL gAnimateTextures = TRUE;
71extern BOOL gHideSelectedObjects; 72extern BOOL gHideSelectedObjects;
@@ -272,9 +273,9 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys,
272void LLVOVolume::animateTextures() 273void LLVOVolume::animateTextures()
273{ 274{
274 F32 off_s = 0.f, off_t = 0.f, scale_s = 1.f, scale_t = 1.f, rot = 0.f; 275 F32 off_s = 0.f, off_t = 0.f, scale_s = 1.f, scale_t = 1.f, rot = 0.f;
275 S32 result; 276 S32 result = mTextureAnimp->animateTextures(off_s, off_t, scale_s, scale_t, rot);
276 277
277 if (result = mTextureAnimp->animateTextures(off_s, off_t, scale_s, scale_t, rot)) 278 if (result)
278 { 279 {
279 if (!mTexAnimMode) 280 if (!mTexAnimMode)
280 { 281 {
@@ -484,10 +485,11 @@ void LLVOVolume::updateTextures()
484 mSculptTexture = gImageList.getImage(id); 485 mSculptTexture = gImageList.getImage(id);
485 if (mSculptTexture.notNull()) 486 if (mSculptTexture.notNull())
486 { 487 {
487 mSculptTexture->addTextureStats(mPixelArea); 488 mSculptTexture->addTextureStats(SCULPT_REZ * SCULPT_REZ);
489 mSculptTexture->setBoostLevel(LLViewerImage::BOOST_SCULPTED);
488 } 490 }
489 491
490 S32 desired_discard = MAX_LOD - mLOD; 492 S32 desired_discard = 0; // lower discard levels have MUCH less resolution - (old=MAX_LOD - mLOD)
491 S32 current_discard = getVolume()->getSculptLevel(); 493 S32 current_discard = getVolume()->getSculptLevel();
492 494
493 if (desired_discard != current_discard) 495 if (desired_discard != current_discard)
@@ -701,7 +703,7 @@ void LLVOVolume::sculpt()
701 if (mSculptTexture.notNull()) 703 if (mSculptTexture.notNull())
702 { 704 {
703 S32 discard_level; 705 S32 discard_level;
704 S32 desired_discard = MAX_LOD - mLOD; // desired 706 S32 desired_discard = 0; // lower discard levels have MUCH less resolution
705 707
706 discard_level = desired_discard; 708 discard_level = desired_discard;
707 709
@@ -2210,7 +2212,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
2210 { 2212 {
2211 LLDrawable* drawablep = *drawable_iter; 2213 LLDrawable* drawablep = *drawable_iter;
2212 2214
2213 if (drawablep->isDead()) 2215 if (drawablep->isDead() || drawablep->isState(LLDrawable::FORCE_INVISIBLE) )
2214 { 2216 {
2215 continue; 2217 continue;
2216 } 2218 }
diff --git a/linden/indra/newview/llvovolume.h b/linden/indra/newview/llvovolume.h
index f5dfeb0..5881c04 100644
--- a/linden/indra/newview/llvovolume.h
+++ b/linden/indra/newview/llvovolume.h
@@ -83,8 +83,7 @@ public:
83 (1 << LLVertexBuffer::TYPE_TEXCOORD) | 83 (1 << LLVertexBuffer::TYPE_TEXCOORD) |
84 (1 << LLVertexBuffer::TYPE_TEXCOORD2) | 84 (1 << LLVertexBuffer::TYPE_TEXCOORD2) |
85 (1 << LLVertexBuffer::TYPE_COLOR) 85 (1 << LLVertexBuffer::TYPE_COLOR)
86 } 86 };
87 eVertexDataMask;
88 87
89public: 88public:
90 LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); 89 LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
diff --git a/linden/indra/newview/llvowater.h b/linden/indra/newview/llvowater.h
index 8ed795c..0bb0c46 100644
--- a/linden/indra/newview/llvowater.h
+++ b/linden/indra/newview/llvowater.h
@@ -52,8 +52,7 @@ public:
52 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) | 52 VERTEX_DATA_MASK = (1 << LLVertexBuffer::TYPE_VERTEX) |
53 (1 << LLVertexBuffer::TYPE_NORMAL) | 53 (1 << LLVertexBuffer::TYPE_NORMAL) |
54 (1 << LLVertexBuffer::TYPE_TEXCOORD) 54 (1 << LLVertexBuffer::TYPE_TEXCOORD)
55 } 55 };
56 eVertexDataMask;
57 56
58 LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); 57 LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp);
59 58
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index 7097036..785f28b 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -154,6 +154,8 @@ class LLWebBrowserCtrlEventEmitter
154 ObserverContainer observers; 154 ObserverContainer observers;
155}; 155};
156 156
157class LLUICtrlFactory;
158
157//////////////////////////////////////////////////////////////////////////////// 159////////////////////////////////////////////////////////////////////////////////
158// 160//
159class LLWebBrowserCtrl : 161class LLWebBrowserCtrl :
@@ -249,7 +251,7 @@ class LLWebBrowserCtrl :
249class LLWebBrowserTexture : public LLDynamicTexture 251class LLWebBrowserTexture : public LLDynamicTexture
250{ 252{
251 public: 253 public:
252 LLWebBrowserTexture::LLWebBrowserTexture( S32 width, S32 height, LLWebBrowserCtrl* browserCtrl, int browserWindow ); 254 LLWebBrowserTexture( S32 width, S32 height, LLWebBrowserCtrl* browserCtrl, int browserWindow );
253 virtual ~LLWebBrowserTexture(); 255 virtual ~LLWebBrowserTexture();
254 256
255 virtual void preRender( BOOL clear_depth = TRUE ) {}; 257 virtual void preRender( BOOL clear_depth = TRUE ) {};
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp
index 9c71ee4..7696431 100644
--- a/linden/indra/newview/llworld.cpp
+++ b/linden/indra/newview/llworld.cpp
@@ -501,6 +501,8 @@ F32 LLWorld::resolveStepHeightGlobal(const LLVOAvatar* avatarp, const LLVector3d
501 501
502 land_intersection.mdV[VZ] = regionp->getLand().resolveHeightGlobal(point_a); 502 land_intersection.mdV[VZ] = regionp->getLand().resolveHeightGlobal(point_a);
503 normalized_land_distance = (F32)(point_a.mdV[VZ] - land_intersection.mdV[VZ]) / segment_length; 503 normalized_land_distance = (F32)(point_a.mdV[VZ] - land_intersection.mdV[VZ]) / segment_length;
504 intersection = land_intersection;
505 intersection_normal = resolveLandNormalGlobal(land_intersection);
504 506
505 if (avatarp && !avatarp->mFootPlane.isExactlyClear()) 507 if (avatarp && !avatarp->mFootPlane.isExactlyClear())
506 { 508 {
@@ -511,17 +513,13 @@ F32 LLWorld::resolveStepHeightGlobal(const LLVOAvatar* avatarp, const LLVector3d
511 norm_dist_from_plane = llclamp(norm_dist_from_plane / segment_length, 0.f, 1.f); 513 norm_dist_from_plane = llclamp(norm_dist_from_plane / segment_length, 0.f, 1.f);
512 if (norm_dist_from_plane < normalized_land_distance) 514 if (norm_dist_from_plane < normalized_land_distance)
513 { 515 {
516 // collided with object before land
514 normalized_land_distance = norm_dist_from_plane; 517 normalized_land_distance = norm_dist_from_plane;
515 intersection = point_a; 518 intersection = point_a;
516 intersection.mdV[VZ] -= norm_dist_from_plane * segment_length; 519 intersection.mdV[VZ] -= norm_dist_from_plane * segment_length;
517 intersection_normal = foot_plane_normal; 520 intersection_normal = foot_plane_normal;
518 } 521 }
519 } 522 }
520 else
521 {
522 intersection = land_intersection;
523 intersection_normal = resolveLandNormalGlobal(land_intersection);
524 }
525 523
526 return normalized_land_distance; 524 return normalized_land_distance;
527} 525}
diff --git a/linden/indra/newview/llxmlrpctransaction.cpp b/linden/indra/newview/llxmlrpctransaction.cpp
index 896508c..887b69d 100644
--- a/linden/indra/newview/llxmlrpctransaction.cpp
+++ b/linden/indra/newview/llxmlrpctransaction.cpp
@@ -228,22 +228,22 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
228 228
229 // tell curl about the settings 229 // tell curl about the settings
230 curl_easy_setopt(mCurl, CURLOPT_PROXY, mProxyAddress.c_str()); 230 curl_easy_setopt(mCurl, CURLOPT_PROXY, mProxyAddress.c_str());
231 curl_easy_setopt(mCurl, CURLOPT_PROXYPORT, (long)port); 231 curl_easy_setopt(mCurl, CURLOPT_PROXYPORT, (long) port);
232 curl_easy_setopt(mCurl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); 232 curl_easy_setopt(mCurl, CURLOPT_PROXYTYPE, (long) CURLPROXY_HTTP);
233 }; 233 };
234 234
235// curl_easy_setopt(mCurl, CURLOPT_VERBOSE, 1); // usefull for debugging 235// curl_easy_setopt(mCurl, CURLOPT_VERBOSE, 1L); // usefull for debugging
236 curl_easy_setopt(mCurl, CURLOPT_NOSIGNAL, 1); 236 curl_easy_setopt(mCurl, CURLOPT_NOSIGNAL, 1L);
237 curl_easy_setopt(mCurl, CURLOPT_WRITEFUNCTION, &curlDownloadCallback); 237 curl_easy_setopt(mCurl, CURLOPT_WRITEFUNCTION, &curlDownloadCallback);
238 curl_easy_setopt(mCurl, CURLOPT_WRITEDATA, this); 238 curl_easy_setopt(mCurl, CURLOPT_WRITEDATA, this);
239 curl_easy_setopt(mCurl, CURLOPT_ERRORBUFFER, &mCurlErrorBuffer); 239 curl_easy_setopt(mCurl, CURLOPT_ERRORBUFFER, &mCurlErrorBuffer);
240 curl_easy_setopt(mCurl, CURLOPT_CAINFO, gDirUtilp->getCAFile().c_str()); 240 curl_easy_setopt(mCurl, CURLOPT_CAINFO, gDirUtilp->getCAFile().c_str());
241 curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYPEER, gVerifySSLCert); 241 curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYPEER, (long) gVerifySSLCert);
242 curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYHOST, gVerifySSLCert? 2 : 0); 242 curl_easy_setopt(mCurl, CURLOPT_SSL_VERIFYHOST, gVerifySSLCert? 2L : 0L);
243 243
244 /* Setting the DNS cache timeout to -1 disables it completely. 244 /* Setting the DNS cache timeout to -1 disables it completely.
245 This might help with bug #503 */ 245 This might help with bug #503 */
246 curl_easy_setopt(mCurl, CURLOPT_DNS_CACHE_TIMEOUT, -1); 246 curl_easy_setopt(mCurl, CURLOPT_DNS_CACHE_TIMEOUT, -1L);
247 247
248 mHeaders = curl_slist_append(mHeaders, "Content-Type: text/xml"); 248 mHeaders = curl_slist_append(mHeaders, "Content-Type: text/xml");
249 curl_easy_setopt(mCurl, CURLOPT_URL, mURI.c_str()); 249 curl_easy_setopt(mCurl, CURLOPT_URL, mURI.c_str());
@@ -257,7 +257,7 @@ void LLXMLRPCTransaction::Impl::init(XMLRPC_REQUEST request, bool useGzip)
257 if (mRequestText) 257 if (mRequestText)
258 { 258 {
259 curl_easy_setopt(mCurl, CURLOPT_POSTFIELDS, mRequestText); 259 curl_easy_setopt(mCurl, CURLOPT_POSTFIELDS, mRequestText);
260 curl_easy_setopt(mCurl, CURLOPT_POSTFIELDSIZE, mRequestTextSize); 260 curl_easy_setopt(mCurl, CURLOPT_POSTFIELDSIZE, (long) mRequestTextSize);
261 } 261 }
262 else 262 else
263 { 263 {
diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj
index 8bc52b1..02be1d5 100644
--- a/linden/indra/newview/macview.xcodeproj/project.pbxproj
+++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj
@@ -429,6 +429,11 @@
429 61923D70074AE3C0005E1F34 /* llvisualparam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D29074AE3C0005E1F34 /* llvisualparam.cpp */; }; 429 61923D70074AE3C0005E1F34 /* llvisualparam.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61923D29074AE3C0005E1F34 /* llvisualparam.cpp */; };
430 84401E2F0A13CC9A006720A5 /* llfloatergroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */; }; 430 84401E2F0A13CC9A006720A5 /* llfloatergroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */; };
431 84401E320A13CCB2006720A5 /* llpanelgroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */; }; 431 84401E320A13CCB2006720A5 /* llpanelgroupinvite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */; };
432 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8833693B0C18AF33007F52DA /* llimagepng.cpp */; };
433 883369400C18AF33007F52DA /* llpngwrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8833693C0C18AF33007F52DA /* llpngwrapper.cpp */; };
434 88A95BB20C14D5FC0027E363 /* llsrv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 88A95BB10C14D5FC0027E363 /* llsrv.cpp */; };
435 88A95BCA0C14D92C0027E363 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A95BC90C14D92C0027E363 /* libresolv.dylib */; };
436 88AA282C0C17720D0032DF53 /* libpng12.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 88AA282B0C17720D0032DF53 /* libpng12.a */; };
432 9104C0CC0778AE0F001EC4F6 /* llpanelmsgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */; }; 437 9104C0CC0778AE0F001EC4F6 /* llpanelmsgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */; };
433 910D255306484F1A0034E66F /* llvolumesliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */; }; 438 910D255306484F1A0034E66F /* llvolumesliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */; };
434 9118669B07F4FAF700E3D5BC /* llmediaremotectrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */; }; 439 9118669B07F4FAF700E3D5BC /* llmediaremotectrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */; };
@@ -1487,6 +1492,13 @@
1487 84401E2E0A13CC9A006720A5 /* llfloatergroupinvite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatergroupinvite.h; sourceTree = "<group>"; }; 1492 84401E2E0A13CC9A006720A5 /* llfloatergroupinvite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloatergroupinvite.h; sourceTree = "<group>"; };
1488 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelgroupinvite.cpp; sourceTree = "<group>"; }; 1493 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelgroupinvite.cpp; sourceTree = "<group>"; };
1489 84401E310A13CCB2006720A5 /* llpanelgroupinvite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelgroupinvite.h; sourceTree = "<group>"; }; 1494 84401E310A13CCB2006720A5 /* llpanelgroupinvite.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpanelgroupinvite.h; sourceTree = "<group>"; };
1495 8833693B0C18AF33007F52DA /* llimagepng.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llimagepng.cpp; sourceTree = "<group>"; };
1496 8833693C0C18AF33007F52DA /* llpngwrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpngwrapper.cpp; sourceTree = "<group>"; };
1497 8833693D0C18AF33007F52DA /* llpngwrapper.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llpngwrapper.h; sourceTree = "<group>"; };
1498 8833693E0C18AF33007F52DA /* llimagepng.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimagepng.h; sourceTree = "<group>"; };
1499 88A95BB10C14D5FC0027E363 /* llsrv.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llsrv.cpp; sourceTree = SOURCE_ROOT; };
1500 88A95BC90C14D92C0027E363 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = /usr/lib/libresolv.dylib; sourceTree = "<absolute>"; };
1501 88AA282B0C17720D0032DF53 /* libpng12.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpng12.a; sourceTree = BUILT_PRODUCTS_DIR; };
1490 8B2ECF9E0534C17A00A80059 /* llfirstuse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfirstuse.h; sourceTree = "<group>"; }; 1502 8B2ECF9E0534C17A00A80059 /* llfirstuse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfirstuse.h; sourceTree = "<group>"; };
1491 8B2ECFA00534C21A00A80059 /* llfirstuse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfirstuse.cpp; sourceTree = "<group>"; }; 1503 8B2ECFA00534C21A00A80059 /* llfirstuse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfirstuse.cpp; sourceTree = "<group>"; };
1492 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelmsgs.cpp; sourceTree = "<group>"; }; 1504 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelmsgs.cpp; sourceTree = "<group>"; };
@@ -2195,6 +2207,8 @@
2195 99F998FB0BAA34B90034E41C /* libopenjpeg.a in Frameworks */, 2207 99F998FB0BAA34B90034E41C /* libopenjpeg.a in Frameworks */,
2196 99F99A160BAA3D4C0034E41C /* AGL.framework in Frameworks */, 2208 99F99A160BAA3D4C0034E41C /* AGL.framework in Frameworks */,
2197 99F99A190BAA3D520034E41C /* OpenGL.framework in Frameworks */, 2209 99F99A190BAA3D520034E41C /* OpenGL.framework in Frameworks */,
2210 88A95BCA0C14D92C0027E363 /* libresolv.dylib in Frameworks */,
2211 88AA282C0C17720D0032DF53 /* libpng12.a in Frameworks */,
2198 ); 2212 );
2199 runOnlyForDeploymentPostprocessing = 0; 2213 runOnlyForDeploymentPostprocessing = 0;
2200 }; 2214 };
@@ -2338,230 +2352,156 @@
2338 26F529A0051F61CD00A80050 /* newview */ = { 2352 26F529A0051F61CD00A80050 /* newview */ = {
2339 isa = PBXGroup; 2353 isa = PBXGroup;
2340 children = ( 2354 children = (
2341 1A83767C0BA2169600F28979 /* llviewergenericmessage.h */,
2342 1A83767D0BA2169600F28979 /* llviewergenericmessage.cpp */,
2343 9C18425A0B9F951500208356 /* llcaphttpsender.cpp */,
2344 1A8870E30BCC5A9500E89AA6 /* llviewermenufile.h */,
2345 1A8870E40BCC5A9500E89AA6 /* llviewermenufile.cpp */,
2346 A3C20E4B0BB0BD12007E872B /* llviewerjoystick.cpp */,
2347 A3C20E490BB0BCDF007E872B /* llglslshader.cpp */,
2348 AAF5FFD00B13F71900D28A84 /* lltexturecache.cpp */,
2349 AAF5FFD10B13F71900D28A84 /* lltexturecache.h */,
2350 AA02B9BA0B0CE44D00F2996D /* lltexturefetch.cpp */,
2351 AA02B9BB0B0CE44D00F2996D /* lltexturefetch.h */,
2352 C16C084E0B4AE6C7009AD67F /* llfloaterinspect.cpp */,
2353 C16C084F0B4AE6C7009AD67F /* llfloaterinspect.h */,
2354 C64F67400AFBED91009732B5 /* lldirpicker.cpp */,
2355 C64F67410AFBED91009732B5 /* lldirpicker.h */,
2356 C64F673D0AFBED80009732B5 /* lllogchat.cpp */,
2357 C64F673E0AFBED80009732B5 /* lllogchat.h */,
2358 1AF7C1E30AF6C44800C4BF4A /* llweb.cpp */,
2359 FDCB55270AFBD4310033B433 /* lleventpoll.cpp */,
2360 FDCB55280AFBD4310033B433 /* lleventpoll.h */,
2361 FD59ED5D0AF2AF460086642A /* llassetuploadresponders.cpp */,
2362 FD59ED5E0AF2AF460086642A /* llassetuploadresponders.h */,
2363 1A5104580ABF60BF00520F6D /* llviewerassetstorage.h */,
2364 1A5104560ABF60A800520F6D /* llviewerassetstorage.cpp */,
2365 1AF9CA460AE972DA003EFF2D /* llfloateravatartextures.cpp */,
2366 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */,
2367 A3285A3A0A71425100F619A5 /* llinventoryactions.cpp */,
2368 A3285A340A71419F00F619A5 /* llinventorybridge.cpp */,
2369 1A5B3B540A70147000A90391 /* llfloaterbump.cpp */,
2370 1A61A7EF0A5ED446009FE3D2 /* llfloateravatarpicker.cpp */,
2371 A3D968F00A6EBCA7007E8BD2 /* llfloaternewim.cpp */,
2372 A3AF6BCE0A544EF0005B5E2C /* llpanellogin.cpp */,
2373 1A758C950A436FDE00589675 /* llpanellandoptions.cpp */,
2374 1A758C930A436FD800589675 /* llpanellandobjects.cpp */,
2375 1A758C910A436FCA00589675 /* llagentdata.cpp */,
2376 AAC121A30A93A8380080E8A9 /* llfloatersellland.cpp */,
2377 AAC121A40A93A8380080E8A9 /* llfloatersellland.h */,
2378 9C1853AD0A91175E00DA7B01 /* llviewercontrol.cpp */,
2379 AA0E2A620A2FDB340066250A /* lltoolpipette.cpp */,
2380 AA0E2A630A2FDB340066250A /* lltoolpipette.h */,
2381 1AFA40B40A2DFD7200C13F70 /* llsavedsettingsglue.cpp */,
2382 1A8BF3780A1AAB99005B9D5A /* llfloatertest.cpp */,
2383 1A3143E00A02B73D005B87E7 /* llprefschat.cpp */,
2384 1A3143DE0A02B737005B87E7 /* llprefsim.cpp */,
2385 1A3143D00A02B701005B87E7 /* llviewernetwork.cpp */,
2386 FD870C4F09EAC19700F5956C /* lldrawpoolclouds.h */,
2387 A3077BFB09DCB8140059ED75 /* lldrawpoolstars.cpp */,
2388 A3077BFC09DCB8140059ED75 /* lldrawpoolstars.h */,
2389 A3077BFF09DCB8140059ED75 /* llfloaterhtmlhelp.cpp */,
2390 A3077C0009DCB8140059ED75 /* llfloaterhtmlhelp.h */,
2391 99C6BFA80A1BBD4800419AE7 /* llfloaterhtmlfind.h */,
2392 99C6BFA90A1BBD4800419AE7 /* llfloaterhtmlfind.cpp */,
2393 A3077C0309DCB8140059ED75 /* llpanelvolume.cpp */,
2394 A3077C0409DCB8140059ED75 /* llpanelvolume.h */,
2395 A3077C0509DCB8140059ED75 /* llvostars.cpp */,
2396 A3077C0609DCB8140059ED75 /* llvostars.h */,
2397 9CD49D5909D0BB1500192434 /* lllocalanimationobject.cpp */,
2398 9CD49D5A09D0BB1500192434 /* lllocalanimationobject.h */,
2399 9CD49D5809D0BAD600192434 /* llflexibleobject.h */,
2400 9CD49D5609D0BAC100192434 /* llflexibleobject.cpp */,
2401 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */,
2402 FD6C9A4209C75B8900AA1849 /* llfloatertopobjects.cpp */,
2403 2EFEA8E809F4556F00CB0193 /* llgroupnotify.cpp */,
2404 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */,
2405 2EA4CEEC09F83AC2008F60F7 /* llpanelgrouproles.cpp */,
2406 2EA4CEED09F83BE8008F60F7 /* llpanelgrouplandmoney.cpp */,
2407 FD6C9A4309C75B8900AA1849 /* llfloatertopobjects.h */,
2408 FD6C9A3409C75A8500AA1849 /* llfloaterpermissionsmgr.cpp */,
2409 2E6FE90D09FD560A00AF02FF /* llpanelgroupnotices.cpp */,
2410 FD6C9A3509C75A8500AA1849 /* llfloaterpermissionsmgr.h */,
2411 FD6C9A2109C758BC00AA1849 /* llfloaterscriptdebug.cpp */,
2412 FD6C9A2209C758BC00AA1849 /* llfloaterscriptdebug.h */,
2413 FD6C9A2309C758BC00AA1849 /* llfloatertelehub.cpp */,
2414 2EFEA8F009F4588B00CB0193 /* llpanelgroupgeneral.cpp */,
2415 FD6C9A2409C758BC00AA1849 /* llfloatertelehub.h */,
2416 FD6C9A2509C758BC00AA1849 /* llfollowcam.cpp */,
2417 FD6C9A2609C758BC00AA1849 /* llfollowcam.h */,
2418 FD6C9A2709C758BC00AA1849 /* llhudicon.cpp */,
2419 FD6C9A2809C758BC00AA1849 /* llhudicon.h */,
2420 99E43515092D64E6003AE728 /* llvoinventorylistener.h */,
2421 99E43516092D64E6003AE728 /* llvoinventorylistener.cpp */,
2422 99E43512092D64CC003AE728 /* llmemoryview.h */,
2423 99E43513092D64CC003AE728 /* llmemoryview.cpp */,
2424 99E4350F092D64A4003AE728 /* llfloaterbuycurrency.cpp */,
2425 99E43510092D64A4003AE728 /* llfloaterbuycurrency.h */,
2426 99BB5166099ABDEB004BF9F2 /* llfloaterbuyland.cpp */,
2427 99BB5167099ABDEB004BF9F2 /* llfloaterbuyland.h */,
2428 99BB5169099AC1AE004BF9F2 /* llxmlrpctransaction.h */,
2429 99BB516A099AC1AE004BF9F2 /* llxmlrpctransaction.cpp */,
2430 99BB516D099AC1E9004BF9F2 /* llviewchildren.cpp */,
2431 99BB516E099AC1E9004BF9F2 /* llviewchildren.h */,
2432 99BB5170099AC1FC004BF9F2 /* llcurrencyuimanager.cpp */,
2433 99BB5171099AC1FC004BF9F2 /* llcurrencyuimanager.h */,
2434 99BB5174099AC2A4004BF9F2 /* llconfirmationmanager.cpp */,
2435 99BB5175099AC2A4004BF9F2 /* llconfirmationmanager.h */,
2436 1A89230608B12D2E00A04AA9 /* llfloateropenobject.cpp */,
2437 1A89230708B12D2E00A04AA9 /* llfloateropenobject.h */,
2438 1A89230308B12D1000A04AA9 /* llurlwhitelist.cpp */,
2439 1A89230408B12D1000A04AA9 /* llurlwhitelist.h */,
2440 E224ACBC0874D6150039C1A6 /* llfloaterimport.cpp */,
2441 E224ACBD0874D6150039C1A6 /* llfloaterimport.h */,
2442 1A47B8DD0860FDF100F73746 /* llpanelweb.h */,
2443 1A47B8DE0860FDF100F73746 /* llpanelweb.cpp */,
2444 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */,
2445 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */,
2446 EB3EE709083AC23D002BF676 /* lldynamictexture.h */,
2447 EB3EE70A083AC23D002BF676 /* llfloateranimpreview.h */,
2448 1A9EC23A083EA01F0023D510 /* llfloatereditui.h */,
2449 1A9EC236083EA0100023D510 /* llfloatereditui.cpp */,
2450 EB3EE70B083AC23D002BF676 /* llfloaterimagepreview.h */,
2451 EB3EE70C083AC23D002BF676 /* llgroupmgr.h */,
2452 EB3EE70D083AC23D002BF676 /* llpreviewanim.h */,
2453 EB3EE70F083AC23D002BF676 /* llviewercontrol.h */,
2454 EB3EE712083AC23D002BF676 /* llviewertexteditor.cpp */,
2455 EB3EE713083AC23D002BF676 /* llviewertexteditor.h */,
2456 EB3EE714083AC23D002BF676 /* llvieweruictrlfactory.cpp */,
2457 EB3EE715083AC23D002BF676 /* llvieweruictrlfactory.h */,
2458 EB3EE716083AC23D002BF676 /* llvolumesliderctrl.h */,
2459 91A15600081EE8060089988C /* llfloaterhtml.h */,
2460 91A155FE081EE7F70089988C /* llfloaterhtml.cpp */,
2461 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */,
2462 9118669A07F4FAF700E3D5BC /* llmediaremotectrl.h */,
2463 91E86C3107BD3B3A00F56E75 /* llfloatersaveavatar.cpp */,
2464 A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */,
2465 A241CB7C07B3DE0D001A39E3 /* llviewerprecompiledheaders.h */,
2466 913AA1FC079855E900D111CE /* llfloaterfriends.cpp */,
2467 91287B4A078DE4B300E958B2 /* llviewerkeyboard.cpp */,
2468 91287B4B078DE4B300E958B2 /* llviewerkeyboard.h */,
2469 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */,
2470 911CAD92075BEAAC00CD1090 /* lltoolselect.cpp */,
2471 911CAD8A075BE90600CD1090 /* llgroupmgr.cpp */,
2472 911CAD86075BE87B00CD1090 /* llinventoryview.cpp */,
2473 916724C407551DF600CA4513 /* llfloatercolorpicker.cpp */,
2474 916724C207551DE400CA4513 /* llfloatercolorpicker.h */,
2475 918166CA06516C59005727DC /* llaudiosourcevo.cpp */,
2476 915F492806B5738A00F629BF /* lleventinfo.cpp */,
2477 915F492006B572E700F629BF /* lleventnotifier.cpp */,
2478 912541AD0691FF79008C66F7 /* llfasttimerview.cpp */,
2479 91FC1C8706527F19009CF498 /* llpreviewanim.cpp */,
2480 91DF401F06A739BA00CA7FE5 /* llstartup.cpp */,
2481 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */,
2482 91B9EB8206370586007B3F3E /* lldynamictexture.cpp */,
2483 91F8BBAB062DF91A00DE42BA /* llgesturemgr.cpp */,
2484 91F8BBA3062DF7AB00DE42BA /* llpreviewgesture.cpp */,
2485 91E7BB2105EFCBA40026CC40 /* llviewerdisplay.cpp */,
2486 019200F004DD7D2B00A800A7 /* macview_Prefix.h */,
2487 26C5F3E605DB1E3C00994065 /* llfloaterpostcard.cpp */,
2488 2613A6D905D843D80041A7A9 /* llfloatersnapshot.cpp */,
2489 91D2527605C9C0620099BB54 /* llfloaterauction.cpp */,
2490 9131094305C6D5A300A18084 /* llpanelpick.cpp */,
2491 91E36BB705B4C70600C919E4 /* llpanelinput.cpp */,
2492 26F52A9D051F61DF00A80050 /* head.cpp */, 2355 26F52A9D051F61DF00A80050 /* head.cpp */,
2493 26F52A41051F61DF00A80050 /* llagent.cpp */, 2356 26F52A41051F61DF00A80050 /* llagent.cpp */,
2357 1A758C910A436FCA00589675 /* llagentdata.cpp */,
2494 26F52A5D051F61DF00A80050 /* llagentpilot.cpp */, 2358 26F52A5D051F61DF00A80050 /* llagentpilot.cpp */,
2359 FD59ED5D0AF2AF460086642A /* llassetuploadresponders.cpp */,
2360 FD59ED5E0AF2AF460086642A /* llassetuploadresponders.h */,
2495 26F52AB2051F61DF00A80050 /* llasynchostbyname.cpp */, 2361 26F52AB2051F61DF00A80050 /* llasynchostbyname.cpp */,
2362 918166CA06516C59005727DC /* llaudiosourcevo.cpp */,
2496 26F52AB3051F61DF00A80050 /* llaudiostatus.cpp */, 2363 26F52AB3051F61DF00A80050 /* llaudiostatus.cpp */,
2497 26F52A33051F61DF00A80050 /* llbbox.cpp */, 2364 26F52A33051F61DF00A80050 /* llbbox.cpp */,
2498 26F52ABF051F61DF00A80050 /* llbox.cpp */, 2365 26F52ABF051F61DF00A80050 /* llbox.cpp */,
2499 26F529F0051F61DF00A80050 /* llcallbacklist.cpp */, 2366 26F529F0051F61DF00A80050 /* llcallbacklist.cpp */,
2500 26F52A8C051F61DF00A80050 /* llcallingcard.cpp */, 2367 26F52A8C051F61DF00A80050 /* llcallingcard.cpp */,
2501 26F52AC5051F61DF00A80050 /* llcameraview.cpp */, 2368 26F52AC5051F61DF00A80050 /* llcameraview.cpp */,
2369 9C18425A0B9F951500208356 /* llcaphttpsender.cpp */,
2370 91D530D2056EE57900CD1AD7 /* llchatbar.cpp */,
2502 991ED2DF0883646B003EC818 /* llclassifiedinfo.cpp */, 2371 991ED2DF0883646B003EC818 /* llclassifiedinfo.cpp */,
2503 26F52A3B051F61DF00A80050 /* llcloud.cpp */, 2372 26F52A3B051F61DF00A80050 /* llcloud.cpp */,
2504 26F52AA9051F61DF00A80050 /* llcolorscheme.cpp */, 2373 26F52AA9051F61DF00A80050 /* llcolorscheme.cpp */,
2505 26F52A83051F61DF00A80050 /* llcolorswatch.cpp */, 2374 26F52A83051F61DF00A80050 /* llcolorswatch.cpp */,
2506 26F52AA8051F61DF00A80050 /* llcompass.cpp */, 2375 26F52AA8051F61DF00A80050 /* llcompass.cpp */,
2507 26F52AC6051F61DF00A80050 /* llcompilequeue.cpp */, 2376 26F52AC6051F61DF00A80050 /* llcompilequeue.cpp */,
2377 99BB5174099AC2A4004BF9F2 /* llconfirmationmanager.cpp */,
2378 99BB5175099AC2A4004BF9F2 /* llconfirmationmanager.h */,
2508 26F52A03051F61DF00A80050 /* llconsole.cpp */, 2379 26F52A03051F61DF00A80050 /* llconsole.cpp */,
2509 26F52A78051F61DF00A80050 /* llcontainerview.cpp */, 2380 26F52A78051F61DF00A80050 /* llcontainerview.cpp */,
2510 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */, 2381 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */,
2511 26F52A1A051F61DF00A80050 /* llcountdown.cpp */, 2382 26F52A1A051F61DF00A80050 /* llcountdown.cpp */,
2512 26F52ACB051F61DF00A80050 /* llcubemap.cpp */, 2383 26F52ACB051F61DF00A80050 /* llcubemap.cpp */,
2384 99BB5170099AC1FC004BF9F2 /* llcurrencyuimanager.cpp */,
2385 99BB5171099AC1FC004BF9F2 /* llcurrencyuimanager.h */,
2513 26F52A86051F61DF00A80050 /* llcylinder.cpp */, 2386 26F52A86051F61DF00A80050 /* llcylinder.cpp */,
2514 26F52AA2051F61DF00A80050 /* lldebugview.cpp */, 2387 26F52AA2051F61DF00A80050 /* lldebugview.cpp */,
2388 C64F67400AFBED91009732B5 /* lldirpicker.cpp */,
2389 C64F67410AFBED91009732B5 /* lldirpicker.h */,
2515 26F52A64051F61DF00A80050 /* lldrawable.cpp */, 2390 26F52A64051F61DF00A80050 /* lldrawable.cpp */,
2516 26F52A2C051F61DF00A80050 /* lldrawpool.cpp */, 2391 26F52A2C051F61DF00A80050 /* lldrawpool.cpp */,
2517 26F52A26051F61DF00A80050 /* lldrawpoolalpha.cpp */, 2392 26F52A26051F61DF00A80050 /* lldrawpoolalpha.cpp */,
2518 26F52A5E051F61DF00A80050 /* lldrawpoolavatar.cpp */, 2393 26F52A5E051F61DF00A80050 /* lldrawpoolavatar.cpp */,
2519 26F52A53051F61DF00A80050 /* lldrawpoolbump.cpp */, 2394 26F52A53051F61DF00A80050 /* lldrawpoolbump.cpp */,
2395 FD870C4F09EAC19700F5956C /* lldrawpoolclouds.h */,
2520 26F52A95051F61DF00A80050 /* lldrawpoolground.cpp */, 2396 26F52A95051F61DF00A80050 /* lldrawpoolground.cpp */,
2521 26F52ACA051F61DF00A80050 /* lldrawpoolsimple.cpp */, 2397 26F52ACA051F61DF00A80050 /* lldrawpoolsimple.cpp */,
2522 26F52A14051F61DF00A80050 /* lldrawpoolsky.cpp */, 2398 26F52A14051F61DF00A80050 /* lldrawpoolsky.cpp */,
2399 A3077BFB09DCB8140059ED75 /* lldrawpoolstars.cpp */,
2400 A3077BFC09DCB8140059ED75 /* lldrawpoolstars.h */,
2523 26F529EF051F61DF00A80050 /* lldrawpoolterrain.cpp */, 2401 26F529EF051F61DF00A80050 /* lldrawpoolterrain.cpp */,
2524 26F52A7B051F61DF00A80050 /* lldrawpooltree.cpp */, 2402 26F52A7B051F61DF00A80050 /* lldrawpooltree.cpp */,
2525 26F52A3F051F61DF00A80050 /* lldrawpoolwater.cpp */, 2403 26F52A3F051F61DF00A80050 /* lldrawpoolwater.cpp */,
2526 26F52A84051F61DF00A80050 /* lldriverparam.cpp */, 2404 26F52A84051F61DF00A80050 /* lldriverparam.cpp */,
2405 91B9EB8206370586007B3F3E /* lldynamictexture.cpp */,
2406 EB3EE709083AC23D002BF676 /* lldynamictexture.h */,
2527 26F52A62051F61DF00A80050 /* llemote.cpp */, 2407 26F52A62051F61DF00A80050 /* llemote.cpp */,
2408 915F492806B5738A00F629BF /* lleventinfo.cpp */,
2409 915F492006B572E700F629BF /* lleventnotifier.cpp */,
2410 FDCB55270AFBD4310033B433 /* lleventpoll.cpp */,
2411 FDCB55280AFBD4310033B433 /* lleventpoll.h */,
2528 26F52A3A051F61DF00A80050 /* llface.cpp */, 2412 26F52A3A051F61DF00A80050 /* llface.cpp */,
2413 912541AD0691FF79008C66F7 /* llfasttimerview.cpp */,
2529 263E02FE05239C9A00A80050 /* llfeaturemanager.cpp */, 2414 263E02FE05239C9A00A80050 /* llfeaturemanager.cpp */,
2530 26F52AAC051F61DF00A80050 /* llfft.cpp */, 2415 26F52AAC051F61DF00A80050 /* llfft.cpp */,
2531 26F52AD3051F61DF00A80050 /* llfilepicker.cpp */, 2416 26F52AD3051F61DF00A80050 /* llfilepicker.cpp */,
2417 8B2ECFA00534C21A00A80059 /* llfirstuse.cpp */,
2532 8B2ECF9E0534C17A00A80059 /* llfirstuse.h */, 2418 8B2ECF9E0534C17A00A80059 /* llfirstuse.h */,
2419 9CD49D5609D0BAC100192434 /* llflexibleobject.cpp */,
2420 9CD49D5809D0BAD600192434 /* llflexibleobject.h */,
2533 26F52A82051F61DF00A80050 /* llfloaterabout.cpp */, 2421 26F52A82051F61DF00A80050 /* llfloaterabout.cpp */,
2534 916083920649560B00CAF63E /* llfloateranimpreview.cpp */, 2422 916083920649560B00CAF63E /* llfloateranimpreview.cpp */,
2423 EB3EE70A083AC23D002BF676 /* llfloateranimpreview.h */,
2424 91D2527605C9C0620099BB54 /* llfloaterauction.cpp */,
2535 26F52A8B051F61DF00A80050 /* llfloateravatarinfo.cpp */, 2425 26F52A8B051F61DF00A80050 /* llfloateravatarinfo.cpp */,
2426 1A61A7EF0A5ED446009FE3D2 /* llfloateravatarpicker.cpp */,
2427 1AF9CA460AE972DA003EFF2D /* llfloateravatartextures.cpp */,
2536 26F52A05051F61DF00A80050 /* llfloaterbuildoptions.cpp */, 2428 26F52A05051F61DF00A80050 /* llfloaterbuildoptions.cpp */,
2429 1A5B3B540A70147000A90391 /* llfloaterbump.cpp */,
2537 26F52AB6051F61DF00A80050 /* llfloaterbuy.cpp */, 2430 26F52AB6051F61DF00A80050 /* llfloaterbuy.cpp */,
2431 9130442A057428D800571B0A /* llfloaterbuycontents.cpp */,
2432 99E4350F092D64A4003AE728 /* llfloaterbuycurrency.cpp */,
2433 99E43510092D64A4003AE728 /* llfloaterbuycurrency.h */,
2434 99BB5166099ABDEB004BF9F2 /* llfloaterbuyland.cpp */,
2435 99BB5167099ABDEB004BF9F2 /* llfloaterbuyland.h */,
2538 26F52A02051F61DF00A80050 /* llfloaterchat.cpp */, 2436 26F52A02051F61DF00A80050 /* llfloaterchat.cpp */,
2539 91CB311506FB584C00DBCE1E /* llfloaterclothing.cpp */, 2437 91CB311506FB584C00DBCE1E /* llfloaterclothing.cpp */,
2438 916724C407551DF600CA4513 /* llfloatercolorpicker.cpp */,
2439 916724C207551DE400CA4513 /* llfloatercolorpicker.h */,
2540 26F52A34051F61DF00A80050 /* llfloatercustomize.cpp */, 2440 26F52A34051F61DF00A80050 /* llfloatercustomize.cpp */,
2541 26F52A56051F61DF00A80050 /* llfloaterdirectory.cpp */, 2441 26F52A56051F61DF00A80050 /* llfloaterdirectory.cpp */,
2442 1A9EC236083EA0100023D510 /* llfloatereditui.cpp */,
2443 1A9EC23A083EA01F0023D510 /* llfloatereditui.h */,
2444 913AA1FC079855E900D111CE /* llfloaterfriends.cpp */,
2542 26F52A63051F61DF00A80050 /* llfloatergesture.cpp */, 2445 26F52A63051F61DF00A80050 /* llfloatergesture.cpp */,
2446 91C8C05405922AC100633E8C /* llfloatergodtools.cpp */,
2543 26F52A71051F61DF00A80050 /* llfloatergroupinfo.cpp */, 2447 26F52A71051F61DF00A80050 /* llfloatergroupinfo.cpp */,
2448 84401E2D0A13CC9A006720A5 /* llfloatergroupinvite.cpp */,
2544 26F52A7E051F61DF00A80050 /* llfloatergroups.cpp */, 2449 26F52A7E051F61DF00A80050 /* llfloatergroups.cpp */,
2450 91A155FE081EE7F70089988C /* llfloaterhtml.cpp */,
2451 91A15600081EE8060089988C /* llfloaterhtml.h */,
2452 99C6BFA90A1BBD4800419AE7 /* llfloaterhtmlfind.cpp */,
2453 99C6BFA80A1BBD4800419AE7 /* llfloaterhtmlfind.h */,
2454 A3077BFF09DCB8140059ED75 /* llfloaterhtmlhelp.cpp */,
2455 A3077C0009DCB8140059ED75 /* llfloaterhtmlhelp.h */,
2545 91B9EC4C06370E4D007B3F3E /* llfloaterimagepreview.cpp */, 2456 91B9EC4C06370E4D007B3F3E /* llfloaterimagepreview.cpp */,
2457 EB3EE70B083AC23D002BF676 /* llfloaterimagepreview.h */,
2458 E224ACBC0874D6150039C1A6 /* llfloaterimport.cpp */,
2459 E224ACBD0874D6150039C1A6 /* llfloaterimport.h */,
2460 C16C084E0B4AE6C7009AD67F /* llfloaterinspect.cpp */,
2461 C16C084F0B4AE6C7009AD67F /* llfloaterinspect.h */,
2546 26F52A17051F61DF00A80050 /* llfloaterland.cpp */, 2462 26F52A17051F61DF00A80050 /* llfloaterland.cpp */,
2547 99EDDF5B05892E720031B20D /* llfloaterlandholdings.cpp */, 2463 99EDDF5B05892E720031B20D /* llfloaterlandholdings.cpp */,
2548 26F52AAD051F61DF00A80050 /* llfloatermap.cpp */, 2464 26F52AAD051F61DF00A80050 /* llfloatermap.cpp */,
2549 26F52A66051F61DF00A80050 /* llfloatermute.cpp */, 2465 26F52A66051F61DF00A80050 /* llfloatermute.cpp */,
2550 26F52A9F051F61DF00A80050 /* llfloaternamedesc.cpp */, 2466 26F52A9F051F61DF00A80050 /* llfloaternamedesc.cpp */,
2467 A3D968F00A6EBCA7007E8BD2 /* llfloaternewim.cpp */,
2468 1A89230608B12D2E00A04AA9 /* llfloateropenobject.cpp */,
2469 1A89230708B12D2E00A04AA9 /* llfloateropenobject.h */,
2470 FD6C9A3409C75A8500AA1849 /* llfloaterpermissionsmgr.cpp */,
2471 FD6C9A3509C75A8500AA1849 /* llfloaterpermissionsmgr.h */,
2472 26C5F3E605DB1E3C00994065 /* llfloaterpostcard.cpp */,
2551 26F52A6B051F61DF00A80050 /* llfloaterpreference.cpp */, 2473 26F52A6B051F61DF00A80050 /* llfloaterpreference.cpp */,
2552 26F52A5B051F61DF00A80050 /* llfloaterproperties.cpp */, 2474 26F52A5B051F61DF00A80050 /* llfloaterproperties.cpp */,
2553 26F52A7C051F61DF00A80050 /* llfloaterrate.cpp */, 2475 26F52A7C051F61DF00A80050 /* llfloaterrate.cpp */,
2554 9174D2C00653FC2600A7E32B /* llfloaterregioninfo.cpp */, 2476 9174D2C00653FC2600A7E32B /* llfloaterregioninfo.cpp */,
2555 26F52AC2051F61DF00A80050 /* llfloaterreporter.cpp */, 2477 26F52AC2051F61DF00A80050 /* llfloaterreporter.cpp */,
2478 91E86C3107BD3B3A00F56E75 /* llfloatersaveavatar.cpp */,
2479 FD6C9A2109C758BC00AA1849 /* llfloaterscriptdebug.cpp */,
2480 FD6C9A2209C758BC00AA1849 /* llfloaterscriptdebug.h */,
2481 AAC121A30A93A8380080E8A9 /* llfloatersellland.cpp */,
2482 AAC121A40A93A8380080E8A9 /* llfloatersellland.h */,
2483 2613A6D905D843D80041A7A9 /* llfloatersnapshot.cpp */,
2484 FD6C9A2309C758BC00AA1849 /* llfloatertelehub.cpp */,
2485 FD6C9A2409C758BC00AA1849 /* llfloatertelehub.h */,
2486 1A8BF3780A1AAB99005B9D5A /* llfloatertest.cpp */,
2556 26F52A8F051F61DF00A80050 /* llfloatertools.cpp */, 2487 26F52A8F051F61DF00A80050 /* llfloatertools.cpp */,
2488 FD6C9A4209C75B8900AA1849 /* llfloatertopobjects.cpp */,
2489 FD6C9A4309C75B8900AA1849 /* llfloatertopobjects.h */,
2557 26F52A8E051F61DF00A80050 /* llfloatertos.cpp */, 2490 26F52A8E051F61DF00A80050 /* llfloatertos.cpp */,
2558 26F52A69051F61DF00A80050 /* llfloaterworldmap.cpp */, 2491 26F52A69051F61DF00A80050 /* llfloaterworldmap.cpp */,
2559 26F52AA5051F61DF00A80050 /* llfolderview.cpp */, 2492 26F52AA5051F61DF00A80050 /* llfolderview.cpp */,
2493 FD6C9A2509C758BC00AA1849 /* llfollowcam.cpp */,
2494 FD6C9A2609C758BC00AA1849 /* llfollowcam.h */,
2560 26F52A1F051F61DF00A80050 /* llframestats.cpp */, 2495 26F52A1F051F61DF00A80050 /* llframestats.cpp */,
2561 26F52A1E051F61DF00A80050 /* llframestatview.cpp */, 2496 26F52A1E051F61DF00A80050 /* llframestatview.cpp */,
2562 26F529A1051F61DF00A80050 /* llgenepool.cpp */, 2497 26F529A1051F61DF00A80050 /* llgenepool.cpp */,
2498 91F8BBAB062DF91A00DE42BA /* llgesturemgr.cpp */,
2563 26F52AA7051F61DF00A80050 /* llgivemoney.cpp */, 2499 26F52AA7051F61DF00A80050 /* llgivemoney.cpp */,
2564 26F52AA6051F61DF00A80050 /* llglsandbox.cpp */, 2500 26F52AA6051F61DF00A80050 /* llglsandbox.cpp */,
2501 A3C20E490BB0BCDF007E872B /* llglslshader.cpp */,
2502 911CAD8A075BE90600CD1090 /* llgroupmgr.cpp */,
2503 EB3EE70C083AC23D002BF676 /* llgroupmgr.h */,
2504 2EFEA8E809F4556F00CB0193 /* llgroupnotify.cpp */,
2565 26F52A87051F61DF00A80050 /* llhippo.cpp */, 2505 26F52A87051F61DF00A80050 /* llhippo.cpp */,
2566 26F52A85051F61DF00A80050 /* llhoverview.cpp */, 2506 26F52A85051F61DF00A80050 /* llhoverview.cpp */,
2567 26F52A52051F61DF00A80050 /* llhudconnector.cpp */, 2507 26F52A52051F61DF00A80050 /* llhudconnector.cpp */,
@@ -2570,20 +2510,35 @@
2570 26F52ADB051F61DF00A80050 /* llhudeffectlookat.cpp */, 2510 26F52ADB051F61DF00A80050 /* llhudeffectlookat.cpp */,
2571 26F52ADA051F61DF00A80050 /* llhudeffectpointat.cpp */, 2511 26F52ADA051F61DF00A80050 /* llhudeffectpointat.cpp */,
2572 26F52A65051F61DF00A80050 /* llhudeffecttrail.cpp */, 2512 26F52A65051F61DF00A80050 /* llhudeffecttrail.cpp */,
2513 FD6C9A2709C758BC00AA1849 /* llhudicon.cpp */,
2514 FD6C9A2809C758BC00AA1849 /* llhudicon.h */,
2573 26F52A25051F61DF00A80050 /* llhudmanager.cpp */, 2515 26F52A25051F61DF00A80050 /* llhudmanager.cpp */,
2574 26F52A24051F61DF00A80050 /* llhudobject.cpp */, 2516 26F52A24051F61DF00A80050 /* llhudobject.cpp */,
2575 26F52A5C051F61DF00A80050 /* llhudrender.cpp */, 2517 26F52A5C051F61DF00A80050 /* llhudrender.cpp */,
2576 26F52A3E051F61DF00A80050 /* llhudtext.cpp */, 2518 26F52A3E051F61DF00A80050 /* llhudtext.cpp */,
2577 26F52A3D051F61DF00A80050 /* llhudview.cpp */, 2519 26F52A3D051F61DF00A80050 /* llhudview.cpp */,
2578 26F52AD6051F61DF00A80050 /* llimpanel.cpp */, 2520 26F52AD6051F61DF00A80050 /* llimpanel.cpp */,
2521 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */,
2522 A3285A3A0A71425100F619A5 /* llinventoryactions.cpp */,
2523 A3285A340A71419F00F619A5 /* llinventorybridge.cpp */,
2579 26F52A57051F61DF00A80050 /* llinventoryclipboard.cpp */, 2524 26F52A57051F61DF00A80050 /* llinventoryclipboard.cpp */,
2580 26F529F8051F61DF00A80050 /* llinventorymodel.cpp */, 2525 26F529F8051F61DF00A80050 /* llinventorymodel.cpp */,
2526 911CAD86075BE87B00CD1090 /* llinventoryview.cpp */,
2581 26F52ACC051F61DF00A80050 /* lljoystickbutton.cpp */, 2527 26F52ACC051F61DF00A80050 /* lljoystickbutton.cpp */,
2582 26F52A04051F61DF00A80050 /* lllandmarklist.cpp */, 2528 26F52A04051F61DF00A80050 /* lllandmarklist.cpp */,
2529 9CD49D5909D0BB1500192434 /* lllocalanimationobject.cpp */,
2530 9CD49D5A09D0BB1500192434 /* lllocalanimationobject.h */,
2531 C64F673D0AFBED80009732B5 /* lllogchat.cpp */,
2532 C64F673E0AFBED80009732B5 /* lllogchat.h */,
2583 26F529A9051F61DF00A80050 /* llmanip.cpp */, 2533 26F529A9051F61DF00A80050 /* llmanip.cpp */,
2584 26F52A40051F61DF00A80050 /* llmaniprotate.cpp */, 2534 26F52A40051F61DF00A80050 /* llmaniprotate.cpp */,
2585 26F52A9B051F61DF00A80050 /* llmanipscale.cpp */, 2535 26F52A9B051F61DF00A80050 /* llmanipscale.cpp */,
2586 26F52A9A051F61DF00A80050 /* llmaniptranslate.cpp */, 2536 26F52A9A051F61DF00A80050 /* llmaniptranslate.cpp */,
2537 E34C14730AE6A3F0009BF4DE /* llmapresponders.cpp */,
2538 9118669907F4FAF700E3D5BC /* llmediaremotectrl.cpp */,
2539 9118669A07F4FAF700E3D5BC /* llmediaremotectrl.h */,
2540 99E43513092D64CC003AE728 /* llmemoryview.cpp */,
2541 99E43512092D64CC003AE728 /* llmemoryview.h */,
2587 26F52AD8051F61DF00A80050 /* llmenucommands.cpp */, 2542 26F52AD8051F61DF00A80050 /* llmenucommands.cpp */,
2588 26F52A67051F61DF00A80050 /* llmorphview.cpp */, 2543 26F52A67051F61DF00A80050 /* llmorphview.cpp */,
2589 26F52AAB051F61DF00A80050 /* llmoveview.cpp */, 2544 26F52AAB051F61DF00A80050 /* llmoveview.cpp */,
@@ -2592,6 +2547,8 @@
2592 2617306405221AB700A80050 /* llnameeditor.cpp */, 2547 2617306405221AB700A80050 /* llnameeditor.cpp */,
2593 26F52A98051F61DF00A80050 /* llnamelistctrl.cpp */, 2548 26F52A98051F61DF00A80050 /* llnamelistctrl.cpp */,
2594 26F52A97051F61DF00A80050 /* llnetmap.cpp */, 2549 26F52A97051F61DF00A80050 /* llnetmap.cpp */,
2550 91D61FD0057ED9DF005B4B69 /* llnotify.cpp */,
2551 91D530CE056EE55C00CD1AD7 /* lloverlaybar.cpp */,
2595 26F52AB5051F61DF00A80050 /* llpanelaudioprefs.cpp */, 2552 26F52AB5051F61DF00A80050 /* llpanelaudioprefs.cpp */,
2596 26F52AB4051F61DF00A80050 /* llpanelavatar.cpp */, 2553 26F52AB4051F61DF00A80050 /* llpanelavatar.cpp */,
2597 99FBB044087362B60048A5CC /* llpanelclassified.cpp */, 2554 99FBB044087362B60048A5CC /* llpanelclassified.cpp */,
@@ -2606,23 +2563,43 @@
2606 26F52AA4051F61DF00A80050 /* llpaneldirpeople.cpp */, 2563 26F52AA4051F61DF00A80050 /* llpaneldirpeople.cpp */,
2607 26F52AA3051F61DF00A80050 /* llpaneldirplaces.cpp */, 2564 26F52AA3051F61DF00A80050 /* llpaneldirplaces.cpp */,
2608 9900330005EC0ADD0035CB09 /* llpaneldirpopular.cpp */, 2565 9900330005EC0ADD0035CB09 /* llpaneldirpopular.cpp */,
2609 2EFEA8EB09F455B900CB0193 /* llpanelgroup.cpp */,
2610 26F52A47051F61DF00A80050 /* llpaneldisplay.cpp */, 2566 26F52A47051F61DF00A80050 /* llpaneldisplay.cpp */,
2611 26F52A19051F61DF00A80050 /* llpanelevent.cpp */, 2567 26F52A19051F61DF00A80050 /* llpanelevent.cpp */,
2612 26F52A18051F61DF00A80050 /* llpanelface.cpp */, 2568 26F52A18051F61DF00A80050 /* llpanelface.cpp */,
2613 26F529FD051F61DF00A80050 /* llpanelgeneral.cpp */, 2569 26F529FD051F61DF00A80050 /* llpanelgeneral.cpp */,
2570 2EFEA8EB09F455B900CB0193 /* llpanelgroup.cpp */,
2571 2EFEA8F009F4588B00CB0193 /* llpanelgroupgeneral.cpp */,
2572 84401E300A13CCB2006720A5 /* llpanelgroupinvite.cpp */,
2573 2EA4CEED09F83BE8008F60F7 /* llpanelgrouplandmoney.cpp */,
2574 2E6FE90D09FD560A00AF02FF /* llpanelgroupnotices.cpp */,
2575 2EA4CEEC09F83AC2008F60F7 /* llpanelgrouproles.cpp */,
2614 26F52AC7051F61DF00A80050 /* llpanelgroupvoting.cpp */, 2576 26F52AC7051F61DF00A80050 /* llpanelgroupvoting.cpp */,
2577 91E36BB705B4C70600C919E4 /* llpanelinput.cpp */,
2615 26F529EE051F61DF00A80050 /* llpanelinventory.cpp */, 2578 26F529EE051F61DF00A80050 /* llpanelinventory.cpp */,
2616 26F529ED051F61DF00A80050 /* llpanelland.cpp */, 2579 26F529ED051F61DF00A80050 /* llpanelland.cpp */,
2580 1A758C930A436FD800589675 /* llpanellandobjects.cpp */,
2581 1A758C950A436FDE00589675 /* llpanellandoptions.cpp */,
2582 A3AF6BCE0A544EF0005B5E2C /* llpanellogin.cpp */,
2617 26F52A5A051F61DF00A80050 /* llpanelmorph.cpp */, 2583 26F52A5A051F61DF00A80050 /* llpanelmorph.cpp */,
2584 9104C0CB0778AE0F001EC4F6 /* llpanelmsgs.cpp */,
2618 26F52A2B051F61DF00A80050 /* llpanelnetwork.cpp */, 2585 26F52A2B051F61DF00A80050 /* llpanelnetwork.cpp */,
2619 26F52A2A051F61DF00A80050 /* llpanelobject.cpp */, 2586 26F52A2A051F61DF00A80050 /* llpanelobject.cpp */,
2620 26F52AA1051F61DF00A80050 /* llpanelpermissions.cpp */, 2587 26F52AA1051F61DF00A80050 /* llpanelpermissions.cpp */,
2588 9131094305C6D5A300A18084 /* llpanelpick.cpp */,
2621 26F52AA0051F61DF00A80050 /* llpanelplace.cpp */, 2589 26F52AA0051F61DF00A80050 /* llpanelplace.cpp */,
2590 A3077C0309DCB8140059ED75 /* llpanelvolume.cpp */,
2591 A3077C0409DCB8140059ED75 /* llpanelvolume.h */,
2592 1A47B8DE0860FDF100F73746 /* llpanelweb.cpp */,
2593 1A47B8DD0860FDF100F73746 /* llpanelweb.h */,
2622 26F52A5F051F61DF00A80050 /* llpatchvertexarray.cpp */, 2594 26F52A5F051F61DF00A80050 /* llpatchvertexarray.cpp */,
2623 26F529F3051F61DF00A80050 /* llpolymesh.cpp */, 2595 26F529F3051F61DF00A80050 /* llpolymesh.cpp */,
2624 26F529F2051F61DF00A80050 /* llpolymorph.cpp */, 2596 26F529F2051F61DF00A80050 /* llpolymorph.cpp */,
2597 1A3143E00A02B73D005B87E7 /* llprefschat.cpp */,
2598 1A3143DE0A02B737005B87E7 /* llprefsim.cpp */,
2625 26F52ABD051F61DF00A80050 /* llpreview.cpp */, 2599 26F52ABD051F61DF00A80050 /* llpreview.cpp */,
2600 91FC1C8706527F19009CF498 /* llpreviewanim.cpp */,
2601 EB3EE70D083AC23D002BF676 /* llpreviewanim.h */,
2602 91F8BBA3062DF7AB00DE42BA /* llpreviewgesture.cpp */,
2626 26F52ABC051F61DF00A80050 /* llpreviewlandmark.cpp */, 2603 26F52ABC051F61DF00A80050 /* llpreviewlandmark.cpp */,
2627 26F52A73051F61DF00A80050 /* llpreviewnotecard.cpp */, 2604 26F52A73051F61DF00A80050 /* llpreviewnotecard.cpp */,
2628 26F52A72051F61DF00A80050 /* llpreviewscript.cpp */, 2605 26F52A72051F61DF00A80050 /* llpreviewscript.cpp */,
@@ -2631,11 +2608,14 @@
2631 26F52AD5051F61DF00A80050 /* llprogressview.cpp */, 2608 26F52AD5051F61DF00A80050 /* llprogressview.cpp */,
2632 26F52AAF051F61DF00A80050 /* llregionposition.cpp */, 2609 26F52AAF051F61DF00A80050 /* llregionposition.cpp */,
2633 26F52A22051F61DF00A80050 /* llroam.cpp */, 2610 26F52A22051F61DF00A80050 /* llroam.cpp */,
2611 1AFA40B40A2DFD7200C13F70 /* llsavedsettingsglue.cpp */,
2634 26F52AD2051F61DF00A80050 /* llselectmgr.cpp */, 2612 26F52AD2051F61DF00A80050 /* llselectmgr.cpp */,
2635 26F52AD1051F61DF00A80050 /* llsky.cpp */, 2613 26F52AD1051F61DF00A80050 /* llsky.cpp */,
2636 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */, 2614 26F529EB051F61DF00A80050 /* llspatialpartition.cpp */,
2637 26F529E7051F61DF00A80050 /* llsphere.cpp */, 2615 26F529E7051F61DF00A80050 /* llsphere.cpp */,
2638 26F529E5051F61DF00A80050 /* llsprite.cpp */, 2616 26F529E5051F61DF00A80050 /* llsprite.cpp */,
2617 88A95BB10C14D5FC0027E363 /* llsrv.cpp */,
2618 91DF401F06A739BA00CA7FE5 /* llstartup.cpp */,
2639 26F529B3051F61DF00A80050 /* llstatbar.cpp */, 2619 26F529B3051F61DF00A80050 /* llstatbar.cpp */,
2640 26F529B2051F61DF00A80050 /* llstatgraph.cpp */, 2620 26F529B2051F61DF00A80050 /* llstatgraph.cpp */,
2641 26F52A94051F61DF00A80050 /* llstatusbar.cpp */, 2621 26F52A94051F61DF00A80050 /* llstatusbar.cpp */,
@@ -2643,7 +2623,11 @@
2643 26F52A43051F61DF00A80050 /* llsurface.cpp */, 2623 26F52A43051F61DF00A80050 /* llsurface.cpp */,
2644 26F52A42051F61DF00A80050 /* llsurfacepatch.cpp */, 2624 26F52A42051F61DF00A80050 /* llsurfacepatch.cpp */,
2645 26F52AB8051F61DF00A80050 /* lltexlayer.cpp */, 2625 26F52AB8051F61DF00A80050 /* lltexlayer.cpp */,
2626 AAF5FFD00B13F71900D28A84 /* lltexturecache.cpp */,
2627 AAF5FFD10B13F71900D28A84 /* lltexturecache.h */,
2646 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */, 2628 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */,
2629 AA02B9BA0B0CE44D00F2996D /* lltexturefetch.cpp */,
2630 AA02B9BB0B0CE44D00F2996D /* lltexturefetch.h */,
2647 26F52A27051F61DF00A80050 /* lltexturetable.cpp */, 2631 26F52A27051F61DF00A80050 /* lltexturetable.cpp */,
2648 26F529F6051F61DF00A80050 /* lltextureview.cpp */, 2632 26F529F6051F61DF00A80050 /* lltextureview.cpp */,
2649 26F529F5051F61DF00A80050 /* lltool.cpp */, 2633 26F529F5051F61DF00A80050 /* lltool.cpp */,
@@ -2660,16 +2644,30 @@
2660 26F52A6E051F61DF00A80050 /* lltoolmorph.cpp */, 2644 26F52A6E051F61DF00A80050 /* lltoolmorph.cpp */,
2661 26F52A6D051F61DF00A80050 /* lltoolobjpicker.cpp */, 2645 26F52A6D051F61DF00A80050 /* lltoolobjpicker.cpp */,
2662 26F529AE051F61DF00A80050 /* lltoolpie.cpp */, 2646 26F529AE051F61DF00A80050 /* lltoolpie.cpp */,
2647 AA0E2A620A2FDB340066250A /* lltoolpipette.cpp */,
2648 AA0E2A630A2FDB340066250A /* lltoolpipette.h */,
2663 26F529AD051F61DF00A80050 /* lltoolplacer.cpp */, 2649 26F529AD051F61DF00A80050 /* lltoolplacer.cpp */,
2650 911CAD92075BEAAC00CD1090 /* lltoolselect.cpp */,
2664 26F529FC051F61DF00A80050 /* lltoolselectland.cpp */, 2651 26F529FC051F61DF00A80050 /* lltoolselectland.cpp */,
2665 26F529FB051F61DF00A80050 /* lltoolselectrect.cpp */, 2652 26F529FB051F61DF00A80050 /* lltoolselectrect.cpp */,
2666 26F529FA051F61DF00A80050 /* lltoolview.cpp */, 2653 26F529FA051F61DF00A80050 /* lltoolview.cpp */,
2667 26F52A4E051F61DF00A80050 /* lltracker.cpp */, 2654 26F52A4E051F61DF00A80050 /* lltracker.cpp */,
2668 26F52A0E051F61DF00A80050 /* lluploaddialog.cpp */, 2655 26F52A0E051F61DF00A80050 /* lluploaddialog.cpp */,
2669 26F52A0D051F61DF00A80050 /* llurl.cpp */, 2656 26F52A0D051F61DF00A80050 /* llurl.cpp */,
2657 1A89230308B12D1000A04AA9 /* llurlwhitelist.cpp */,
2658 1A89230408B12D1000A04AA9 /* llurlwhitelist.h */,
2670 26F52A0C051F61DF00A80050 /* lluserauth.cpp */, 2659 26F52A0C051F61DF00A80050 /* lluserauth.cpp */,
2671 26F529A5051F61DF00A80050 /* llvelocitybar.cpp */, 2660 26F529A5051F61DF00A80050 /* llvelocitybar.cpp */,
2661 99BB516D099AC1E9004BF9F2 /* llviewchildren.cpp */,
2662 99BB516E099AC1E9004BF9F2 /* llviewchildren.h */,
2663 1A5104560ABF60A800520F6D /* llviewerassetstorage.cpp */,
2664 1A5104580ABF60BF00520F6D /* llviewerassetstorage.h */,
2672 26F529A2051F61DF00A80050 /* llviewercamera.cpp */, 2665 26F529A2051F61DF00A80050 /* llviewercamera.cpp */,
2666 9C1853AD0A91175E00DA7B01 /* llviewercontrol.cpp */,
2667 EB3EE70F083AC23D002BF676 /* llviewercontrol.h */,
2668 91E7BB2105EFCBA40026CC40 /* llviewerdisplay.cpp */,
2669 1A83767D0BA2169600F28979 /* llviewergenericmessage.cpp */,
2670 1A83767C0BA2169600F28979 /* llviewergenericmessage.h */,
2673 26F52A32051F61DF00A80050 /* llviewergesture.cpp */, 2671 26F52A32051F61DF00A80050 /* llviewergesture.cpp */,
2674 26F52A31051F61DF00A80050 /* llviewerimage.cpp */, 2672 26F52A31051F61DF00A80050 /* llviewerimage.cpp */,
2675 26F52A30051F61DF00A80050 /* llviewerimagelist.cpp */, 2673 26F52A30051F61DF00A80050 /* llviewerimagelist.cpp */,
@@ -2678,20 +2676,32 @@
2678 26F52A38051F61DF00A80050 /* llviewerjointattachment.cpp */, 2676 26F52A38051F61DF00A80050 /* llviewerjointattachment.cpp */,
2679 26F52A37051F61DF00A80050 /* llviewerjointmesh.cpp */, 2677 26F52A37051F61DF00A80050 /* llviewerjointmesh.cpp */,
2680 26F52A36051F61DF00A80050 /* llviewerjointshape.cpp */, 2678 26F52A36051F61DF00A80050 /* llviewerjointshape.cpp */,
2679 A3C20E4B0BB0BD12007E872B /* llviewerjoystick.cpp */,
2680 91287B4A078DE4B300E958B2 /* llviewerkeyboard.cpp */,
2681 91287B4B078DE4B300E958B2 /* llviewerkeyboard.h */,
2681 26F52A35051F61DF00A80050 /* llviewerlayer.cpp */, 2682 26F52A35051F61DF00A80050 /* llviewerlayer.cpp */,
2682 26F529E4051F61DF00A80050 /* llviewermenu.cpp */, 2683 26F529E4051F61DF00A80050 /* llviewermenu.cpp */,
2684 1A8870E40BCC5A9500E89AA6 /* llviewermenufile.cpp */,
2685 1A8870E30BCC5A9500E89AA6 /* llviewermenufile.h */,
2683 26F529E3051F61DF00A80050 /* llviewermessage.cpp */, 2686 26F529E3051F61DF00A80050 /* llviewermessage.cpp */,
2687 1A3143D00A02B701005B87E7 /* llviewernetwork.cpp */,
2684 26F529E2051F61DF00A80050 /* llviewerobject.cpp */, 2688 26F529E2051F61DF00A80050 /* llviewerobject.cpp */,
2685 26F529E1051F61DF00A80050 /* llviewerobjectlist.cpp */, 2689 26F529E1051F61DF00A80050 /* llviewerobjectlist.cpp */,
2686 26F529E0051F61DF00A80050 /* llviewerparcelmgr.cpp */, 2690 26F529E0051F61DF00A80050 /* llviewerparcelmgr.cpp */,
2687 26F529DF051F61DF00A80050 /* llviewerparceloverlay.cpp */, 2691 26F529DF051F61DF00A80050 /* llviewerparceloverlay.cpp */,
2688 26F529DE051F61DF00A80050 /* llviewerpartsim.cpp */, 2692 26F529DE051F61DF00A80050 /* llviewerpartsim.cpp */,
2689 26F529DD051F61DF00A80050 /* llviewerpartsource.cpp */, 2693 26F529DD051F61DF00A80050 /* llviewerpartsource.cpp */,
2694 A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */,
2695 A241CB7C07B3DE0D001A39E3 /* llviewerprecompiledheaders.h */,
2690 26F529DC051F61DF00A80050 /* llviewerregion.cpp */, 2696 26F529DC051F61DF00A80050 /* llviewerregion.cpp */,
2691 26F529DB051F61DF00A80050 /* llviewerreputation.cpp */, 2697 26F529DB051F61DF00A80050 /* llviewerreputation.cpp */,
2692 26F529DA051F61DF00A80050 /* llviewerstats.cpp */, 2698 26F529DA051F61DF00A80050 /* llviewerstats.cpp */,
2699 EB3EE712083AC23D002BF676 /* llviewertexteditor.cpp */,
2700 EB3EE713083AC23D002BF676 /* llviewertexteditor.h */,
2693 26F529D9051F61DF00A80050 /* llviewertextureanim.cpp */, 2701 26F529D9051F61DF00A80050 /* llviewertextureanim.cpp */,
2694 26F529D8051F61DF00A80050 /* llviewerthrottle.cpp */, 2702 26F529D8051F61DF00A80050 /* llviewerthrottle.cpp */,
2703 EB3EE714083AC23D002BF676 /* llvieweruictrlfactory.cpp */,
2704 EB3EE715083AC23D002BF676 /* llvieweruictrlfactory.h */,
2695 26F529D7051F61DF00A80050 /* llviewervisualparam.cpp */, 2705 26F529D7051F61DF00A80050 /* llviewervisualparam.cpp */,
2696 26F529D6051F61DF00A80050 /* llviewerwindow.cpp */, 2706 26F529D6051F61DF00A80050 /* llviewerwindow.cpp */,
2697 26F529D5051F61DF00A80050 /* llvlcomposition.cpp */, 2707 26F529D5051F61DF00A80050 /* llvlcomposition.cpp */,
@@ -2701,8 +2711,14 @@
2701 26F529D1051F61DF00A80050 /* llvoclouds.cpp */, 2711 26F529D1051F61DF00A80050 /* llvoclouds.cpp */,
2702 26F529D0051F61DF00A80050 /* llvograss.cpp */, 2712 26F529D0051F61DF00A80050 /* llvograss.cpp */,
2703 26F529CF051F61DF00A80050 /* llvoground.cpp */, 2713 26F529CF051F61DF00A80050 /* llvoground.cpp */,
2714 99E43516092D64E6003AE728 /* llvoinventorylistener.cpp */,
2715 99E43515092D64E6003AE728 /* llvoinventorylistener.h */,
2716 910D255206484F1A0034E66F /* llvolumesliderctrl.cpp */,
2717 EB3EE716083AC23D002BF676 /* llvolumesliderctrl.h */,
2704 26F529CD051F61DF00A80050 /* llvopartgroup.cpp */, 2718 26F529CD051F61DF00A80050 /* llvopartgroup.cpp */,
2705 26F529CC051F61DF00A80050 /* llvosky.cpp */, 2719 26F529CC051F61DF00A80050 /* llvosky.cpp */,
2720 A3077C0509DCB8140059ED75 /* llvostars.cpp */,
2721 A3077C0609DCB8140059ED75 /* llvostars.h */,
2706 26F529CB051F61DF00A80050 /* llvosurfacepatch.cpp */, 2722 26F529CB051F61DF00A80050 /* llvosurfacepatch.cpp */,
2707 26F529CA051F61DF00A80050 /* llvotextbubble.cpp */, 2723 26F529CA051F61DF00A80050 /* llvotextbubble.cpp */,
2708 26F529C9051F61DF00A80050 /* llvotree.cpp */, 2724 26F529C9051F61DF00A80050 /* llvotree.cpp */,
@@ -2711,21 +2727,20 @@
2711 26F529C5051F61DF00A80050 /* llwaterpatch.cpp */, 2727 26F529C5051F61DF00A80050 /* llwaterpatch.cpp */,
2712 26F529C4051F61DF00A80050 /* llwearable.cpp */, 2728 26F529C4051F61DF00A80050 /* llwearable.cpp */,
2713 26F529C3051F61DF00A80050 /* llwearablelist.cpp */, 2729 26F529C3051F61DF00A80050 /* llwearablelist.cpp */,
2730 1AF7C1E30AF6C44800C4BF4A /* llweb.cpp */,
2731 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */,
2732 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */,
2714 26F529C2051F61DF00A80050 /* llwind.cpp */, 2733 26F529C2051F61DF00A80050 /* llwind.cpp */,
2715 26F529C1051F61DF00A80050 /* llworld.cpp */, 2734 26F529C1051F61DF00A80050 /* llworld.cpp */,
2716 26F529C0051F61DF00A80050 /* llworldmap.cpp */, 2735 26F529C0051F61DF00A80050 /* llworldmap.cpp */,
2717 26F529BF051F61DF00A80050 /* llworldmapview.cpp */, 2736 26F529BF051F61DF00A80050 /* llworldmapview.cpp */,
2737 99BB516A099AC1AE004BF9F2 /* llxmlrpctransaction.cpp */,
2738 99BB5169099AC1AE004BF9F2 /* llxmlrpctransaction.h */,
2739 019200F004DD7D2B00A800A7 /* macview_Prefix.h */,
2718 26F529BE051F61DF00A80050 /* moviemaker.cpp */, 2740 26F529BE051F61DF00A80050 /* moviemaker.cpp */,
2719 26F529BD051F61DF00A80050 /* noise.cpp */, 2741 26F529BD051F61DF00A80050 /* noise.cpp */,
2720 26F529BA051F61DF00A80050 /* pipeline.cpp */, 2742 26F529BA051F61DF00A80050 /* pipeline.cpp */,
2721 26E79A760520BEC400A80050 /* viewer.cpp */, 2743 26E79A760520BEC400A80050 /* viewer.cpp */,
2722 8B2ECFA00534C21A00A80059 /* llfirstuse.cpp */,
2723 91D530CE056EE55C00CD1AD7 /* lloverlaybar.cpp */,
2724 91D530D2056EE57900CD1AD7 /* llchatbar.cpp */,
2725 9130442A057428D800571B0A /* llfloaterbuycontents.cpp */,
2726 91D61FD0057ED9DF005B4B69 /* llnotify.cpp */,
2727 91C8C05405922AC100633E8C /* llfloatergodtools.cpp */,
2728 E34C14730AE6A3F0009BF4DE /* llmapresponders.cpp */,
2729 ); 2744 );
2730 name = newview; 2745 name = newview;
2731 sourceTree = "<group>"; 2746 sourceTree = "<group>";
@@ -3466,6 +3481,10 @@
3466 61923DA4074AE4F2005E1F34 /* llimagetga.cpp */, 3481 61923DA4074AE4F2005E1F34 /* llimagetga.cpp */,
3467 61923DA5074AE4F2005E1F34 /* llimagetga.h */, 3482 61923DA5074AE4F2005E1F34 /* llimagetga.h */,
3468 61923DA8074AE4F3005E1F34 /* llmapimagetype.h */, 3483 61923DA8074AE4F3005E1F34 /* llmapimagetype.h */,
3484 8833693B0C18AF33007F52DA /* llimagepng.cpp */,
3485 8833693C0C18AF33007F52DA /* llpngwrapper.cpp */,
3486 8833693D0C18AF33007F52DA /* llpngwrapper.h */,
3487 8833693E0C18AF33007F52DA /* llimagepng.h */,
3469 ); 3488 );
3470 name = llimage; 3489 name = llimage;
3471 path = ../llimage; 3490 path = ../llimage;
@@ -3860,6 +3879,7 @@
3860 FDAA36C209B919F600FBF1CA /* libmx.dylib */, 3879 FDAA36C209B919F600FBF1CA /* libmx.dylib */,
3861 FDAA36B609B919AD00FBF1CA /* libssl.dylib */, 3880 FDAA36B609B919AD00FBF1CA /* libssl.dylib */,
3862 FDAA36BE09B919DF00FBF1CA /* libz.dylib */, 3881 FDAA36BE09B919DF00FBF1CA /* libz.dylib */,
3882 88A95BC90C14D92C0027E363 /* libresolv.dylib */,
3863 26E79A630520BC6D00A80050 /* libSystem.dylib */, 3883 26E79A630520BC6D00A80050 /* libSystem.dylib */,
3864 ); 3884 );
3865 name = "System Libraries"; 3885 name = "System Libraries";
@@ -3879,6 +3899,7 @@
3879 FDE8765409BEA39600AF6316 /* libogg.a */, 3899 FDE8765409BEA39600AF6316 /* libogg.a */,
3880 99F998FA0BAA34B90034E41C /* libopenjpeg.a */, 3900 99F998FA0BAA34B90034E41C /* libopenjpeg.a */,
3881 FDE8765509BEA39600AF6316 /* libvorbis.a */, 3901 FDE8765509BEA39600AF6316 /* libvorbis.a */,
3902 88AA282B0C17720D0032DF53 /* libpng12.a */,
3882 FDE8765609BEA39600AF6316 /* libvorbisenc.a */, 3903 FDE8765609BEA39600AF6316 /* libvorbisenc.a */,
3883 FDE8765709BEA39600AF6316 /* libvorbisfile.a */, 3904 FDE8765709BEA39600AF6316 /* libvorbisfile.a */,
3884 FDE8765809BEA39700AF6316 /* libxmlrpc.a */, 3905 FDE8765809BEA39700AF6316 /* libxmlrpc.a */,
@@ -4100,7 +4121,7 @@
4100 ); 4121 );
4101 runOnlyForDeploymentPostprocessing = 0; 4122 runOnlyForDeploymentPostprocessing = 0;
4102 shellPath = /bin/sh; 4123 shellPath = /bin/sh;
4103 shellScript = "# Glue together intel and ppc versions of .a files\nLIBS=\"apr-1 aprutil-1 expat ogg vorbis fmod freetype cares llcurl lljpeg openjpeg vorbisenc vorbisfile xmlrpc\"\nLIBDIR=\"${SRCROOT}/../../libraries\"\n\ncd \"${LIBDIR}\"\n\nif [ \\! -e ppc-darwin ]\nthen\n\tln -s powerpc-darwin ppc-darwin\nfi\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}\"\n\nfor i in ${LIBS}; do\n\tNEED_UPDATE=false\n\tARCH_COUNT=0\n\tOUT=\"${BUILT_PRODUCTS_DIR}/lib$i.a\"\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep i386`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_i386=\"i386-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_i386\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep ppc`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_ppc=\"ppc-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_ppc\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tif [ $ARCH_COUNT -eq 0 ]; then\n\t\techo \"No supported architectures found.\"\n\t\texit 1\n\tfi\n\tif [ ! -f \"$OUT\" -o NEED_UPDATE = \"true\" ]; then\n\t\techo Preparing third party library lib$i.a\n\t\tif [ $ARCH_COUNT -eq 1 ]; then\n\t\t\tIN=\"$IN_i386\"\"$IN_ppc\"\n\t\t\t#echo cp \"$IN\" \"$OUT\"\n\t\t\tcp \"$IN\" \"$OUT\"\n\t\telse\n\t\t\t#echo libtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\t\tlibtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\tfi\n\t\tranlib \"$OUT\"\n\telse\n\t\techo Third party library lib$i.a is up to date\n\tfi\ndone\n"; 4124 shellScript = "# Glue together intel and ppc versions of .a files\nLIBS=\"apr-1 aprutil-1 expat ogg vorbis fmod freetype cares llcurl lljpeg png12 openjpeg vorbisenc vorbisfile xmlrpc\"\nLIBDIR=\"${SRCROOT}/../../libraries\"\n\ncd \"${LIBDIR}\"\n\nif [ \\! -e ppc-darwin ]\nthen\n\tln -s powerpc-darwin ppc-darwin\nfi\n\nmkdir -p \"${BUILT_PRODUCTS_DIR}\"\n\nfor i in ${LIBS}; do\n\tNEED_UPDATE=false\n\tARCH_COUNT=0\n\tOUT=\"${BUILT_PRODUCTS_DIR}/lib$i.a\"\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep i386`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_i386=\"i386-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_i386\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tTEST_ARCH=`echo \"${ARCHS}\" | grep ppc`\n\tif [ -n \"$TEST_ARCH\" ]; then\n\t\tIN_ppc=\"ppc-darwin/lib_release/lib$i.a\"\n\t\tARCH_COUNT=`expr $ARCH_COUNT \"+\" 1`\n\t\tif [ \"$IN_ppc\" -nt \"$OUT\" ]; then\n\t\t\tNEED_UPDATE=true\n\t\tfi\n\tfi\n\tif [ $ARCH_COUNT -eq 0 ]; then\n\t\techo \"No supported architectures found.\"\n\t\texit 1\n\tfi\n\tif [ ! -f \"$OUT\" -o NEED_UPDATE = \"true\" ]; then\n\t\techo Preparing third party library lib$i.a\n\t\tif [ $ARCH_COUNT -eq 1 ]; then\n\t\t\tIN=\"$IN_i386\"\"$IN_ppc\"\n\t\t\t#echo cp \"$IN\" \"$OUT\"\n\t\t\tcp \"$IN\" \"$OUT\"\n\t\telse\n\t\t\t#echo libtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\t\tlibtool -static -o \"$OUT\" \"$IN_i386\" \"$IN_ppc\"\n\t\tfi\n\t\tranlib \"$OUT\"\n\telse\n\t\techo Third party library lib$i.a is up to date\n\tfi\ndone\n";
4104 }; 4125 };
4105/* End PBXShellScriptBuildPhase section */ 4126/* End PBXShellScriptBuildPhase section */
4106 4127
@@ -4552,6 +4573,9 @@
4552 A3C20E4C0BB0BD12007E872B /* llviewerjoystick.cpp in Sources */, 4573 A3C20E4C0BB0BD12007E872B /* llviewerjoystick.cpp in Sources */,
4553 1A8870D50BCC5A6300E89AA6 /* llinventorytype.cpp in Sources */, 4574 1A8870D50BCC5A6300E89AA6 /* llinventorytype.cpp in Sources */,
4554 1A8870E50BCC5A9500E89AA6 /* llviewermenufile.cpp in Sources */, 4575 1A8870E50BCC5A9500E89AA6 /* llviewermenufile.cpp in Sources */,
4576 88A95BB20C14D5FC0027E363 /* llsrv.cpp in Sources */,
4577 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */,
4578 883369400C18AF33007F52DA /* llpngwrapper.cpp in Sources */,
4555 ); 4579 );
4556 runOnlyForDeploymentPostprocessing = 0; 4580 runOnlyForDeploymentPostprocessing = 0;
4557 }; 4581 };
@@ -4906,10 +4930,26 @@
4906 ); 4930 );
4907 GCC_ALTIVEC_EXTENSIONS = YES; 4931 GCC_ALTIVEC_EXTENSIONS = YES;
4908 GCC_OPTIMIZATION_LEVEL = 3; 4932 GCC_OPTIMIZATION_LEVEL = 3;
4933 GCC_TREAT_WARNINGS_AS_ERRORS = YES;
4909 GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; 4934 GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
4935 GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
4936 GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
4937 GCC_WARN_ABOUT_RETURN_TYPE = YES;
4938 GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
4910 GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; 4939 GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
4940 GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
4941 GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
4942 GCC_WARN_MISSING_PARENTHESES = YES;
4943 GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
4911 GCC_WARN_SHADOW = NO; 4944 GCC_WARN_SHADOW = NO;
4945 GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
4946 GCC_WARN_UNINITIALIZED_AUTOS = NO;
4912 GCC_WARN_UNKNOWN_PRAGMAS = NO; 4947 GCC_WARN_UNKNOWN_PRAGMAS = NO;
4948 GCC_WARN_UNUSED_FUNCTION = YES;
4949 GCC_WARN_UNUSED_LABEL = YES;
4950 GCC_WARN_UNUSED_PARAMETER = YES;
4951 GCC_WARN_UNUSED_VALUE = YES;
4952 GCC_WARN_UNUSED_VARIABLE = YES;
4913 HEADER_SEARCH_PATHS = ( 4953 HEADER_SEARCH_PATHS = (
4914 "../../libraries/$(arch)-darwin/include", 4954 "../../libraries/$(arch)-darwin/include",
4915 ../../libraries/include, 4955 ../../libraries/include,
@@ -5150,10 +5190,26 @@
5150 buildSettings = { 5190 buildSettings = {
5151 GCC_ALTIVEC_EXTENSIONS = YES; 5191 GCC_ALTIVEC_EXTENSIONS = YES;
5152 GCC_OPTIMIZATION_LEVEL = 0; 5192 GCC_OPTIMIZATION_LEVEL = 0;
5193 GCC_TREAT_WARNINGS_AS_ERRORS = YES;
5153 GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; 5194 GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
5195 GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
5196 GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
5197 GCC_WARN_ABOUT_RETURN_TYPE = YES;
5198 GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
5154 GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; 5199 GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
5200 GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
5201 GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
5202 GCC_WARN_MISSING_PARENTHESES = YES;
5203 GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
5155 GCC_WARN_SHADOW = NO; 5204 GCC_WARN_SHADOW = NO;
5205 GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
5206 GCC_WARN_UNINITIALIZED_AUTOS = NO;
5156 GCC_WARN_UNKNOWN_PRAGMAS = NO; 5207 GCC_WARN_UNKNOWN_PRAGMAS = NO;
5208 GCC_WARN_UNUSED_FUNCTION = YES;
5209 GCC_WARN_UNUSED_LABEL = YES;
5210 GCC_WARN_UNUSED_PARAMETER = YES;
5211 GCC_WARN_UNUSED_VALUE = YES;
5212 GCC_WARN_UNUSED_VARIABLE = YES;
5157 HEADER_SEARCH_PATHS = ( 5213 HEADER_SEARCH_PATHS = (
5158 "../../libraries/$(arch)-darwin/include", 5214 "../../libraries/$(arch)-darwin/include",
5159 ../../libraries/include, 5215 ../../libraries/include,
@@ -5188,10 +5244,26 @@
5188 buildSettings = { 5244 buildSettings = {
5189 GCC_ALTIVEC_EXTENSIONS = YES; 5245 GCC_ALTIVEC_EXTENSIONS = YES;
5190 GCC_OPTIMIZATION_LEVEL = 3; 5246 GCC_OPTIMIZATION_LEVEL = 3;
5247 GCC_TREAT_WARNINGS_AS_ERRORS = YES;
5191 GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; 5248 GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
5249 GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
5250 GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
5251 GCC_WARN_ABOUT_RETURN_TYPE = YES;
5252 GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
5192 GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; 5253 GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
5254 GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = NO;
5255 GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
5256 GCC_WARN_MISSING_PARENTHESES = YES;
5257 GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
5193 GCC_WARN_SHADOW = NO; 5258 GCC_WARN_SHADOW = NO;
5259 GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
5260 GCC_WARN_UNINITIALIZED_AUTOS = NO;
5194 GCC_WARN_UNKNOWN_PRAGMAS = NO; 5261 GCC_WARN_UNKNOWN_PRAGMAS = NO;
5262 GCC_WARN_UNUSED_FUNCTION = YES;
5263 GCC_WARN_UNUSED_LABEL = YES;
5264 GCC_WARN_UNUSED_PARAMETER = YES;
5265 GCC_WARN_UNUSED_VALUE = YES;
5266 GCC_WARN_UNUSED_VARIABLE = YES;
5195 HEADER_SEARCH_PATHS = ( 5267 HEADER_SEARCH_PATHS = (
5196 "../../libraries/$(arch)-darwin/include", 5268 "../../libraries/$(arch)-darwin/include",
5197 ../../libraries/include, 5269 ../../libraries/include,
diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj
index 699a2bc..ae0c02d 100644
--- a/linden/indra/newview/newview.vcproj
+++ b/linden/indra/newview/newview.vcproj
@@ -20,7 +20,7 @@
20 <Tool 20 <Tool
21 Name="VCCLCompilerTool" 21 Name="VCCLCompilerTool"
22 Optimization="0" 22 Optimization="0"
23 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 23 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;"
24 PreprocessorDefinitions="WIN32;_DEBUG;LL_WINDOWS;LL_DEBUG;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 24 PreprocessorDefinitions="WIN32;_DEBUG;LL_WINDOWS;LL_DEBUG;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
25 MinimalRebuild="FALSE" 25 MinimalRebuild="FALSE"
26 BasicRuntimeChecks="3" 26 BasicRuntimeChecks="3"
@@ -37,7 +37,7 @@
37 Name="VCCustomBuildTool"/> 37 Name="VCCustomBuildTool"/>
38 <Tool 38 <Tool
39 Name="VCLinkerTool" 39 Name="VCLinkerTool"
40 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llmozlib.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 40 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llmozlib.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
41 OutputFile="$(ConfigurationName)/debugview.exe" 41 OutputFile="$(ConfigurationName)/debugview.exe"
42 LinkIncremental="2" 42 LinkIncremental="2"
43 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 43 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -84,7 +84,7 @@
84 EnableIntrinsicFunctions="TRUE" 84 EnableIntrinsicFunctions="TRUE"
85 OptimizeForProcessor="3" 85 OptimizeForProcessor="3"
86 OptimizeForWindowsApplication="TRUE" 86 OptimizeForWindowsApplication="TRUE"
87 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 87 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;"
88 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 88 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
89 StringPooling="TRUE" 89 StringPooling="TRUE"
90 RuntimeLibrary="0" 90 RuntimeLibrary="0"
@@ -100,7 +100,7 @@
100 Name="VCCustomBuildTool"/> 100 Name="VCCustomBuildTool"/>
101 <Tool 101 <Tool
102 Name="VCLinkerTool" 102 Name="VCLinkerTool"
103 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 103 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
104 OutputFile="$(ConfigurationName)/newview.exe" 104 OutputFile="$(ConfigurationName)/newview.exe"
105 LinkIncremental="2" 105 LinkIncremental="2"
106 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 106 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -142,7 +142,7 @@
142 CharacterSet="1"> 142 CharacterSet="1">
143 <Tool 143 <Tool
144 Name="VCCLCompilerTool" 144 Name="VCCLCompilerTool"
145 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 145 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;"
146 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;LL_RELEASE_FOR_DOWNLOAD;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 146 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;LL_RELEASE_FOR_DOWNLOAD;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
147 RuntimeLibrary="0" 147 RuntimeLibrary="0"
148 StructMemberAlignment="0" 148 StructMemberAlignment="0"
@@ -160,7 +160,7 @@
160 Outputs="$(TargetFileName)"/> 160 Outputs="$(TargetFileName)"/>
161 <Tool 161 <Tool
162 Name="VCLinkerTool" 162 Name="VCLinkerTool"
163 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 163 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
164 OutputFile="$(ConfigurationName)/SecondLife.exe" 164 OutputFile="$(ConfigurationName)/SecondLife.exe"
165 LinkIncremental="0" 165 LinkIncremental="0"
166 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 166 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -203,7 +203,7 @@
203 <Tool 203 <Tool
204 Name="VCCLCompilerTool" 204 Name="VCCLCompilerTool"
205 Optimization="0" 205 Optimization="0"
206 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;&quot;..\..\libraries\i686-win32\include\quicktime&quot;" 206 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llaudio;..\llmedia;..\llimage;..\llscene;..\llxml;..\llmessage;..\llprimitive;..\llrender;..\llwindow;..\llcharacter;..\llinventory;..\llui;..\lscript;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include;..\..\libraries\include\zlib;&quot;..\..\libraries\i686-win32\include\quicktime&quot;"
207 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API" 207 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;LL_WINDOWS;LL_RELEASE;XP_WIN;XP_WIN32;MOZILLA_INTERNAL_API"
208 RuntimeLibrary="0" 208 RuntimeLibrary="0"
209 StructMemberAlignment="0" 209 StructMemberAlignment="0"
@@ -218,7 +218,7 @@
218 Name="VCCustomBuildTool"/> 218 Name="VCCustomBuildTool"/>
219 <Tool 219 <Tool
220 Name="VCLinkerTool" 220 Name="VCLinkerTool"
221 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llmozlib.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 221 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc71-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llmozlib.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib png12.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
222 OutputFile="$(ConfigurationName)/newview_noopt.exe" 222 OutputFile="$(ConfigurationName)/newview_noopt.exe"
223 LinkIncremental="2" 223 LinkIncremental="2"
224 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 224 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -947,6 +947,9 @@
947 RelativePath=".\llsprite.cpp"> 947 RelativePath=".\llsprite.cpp">
948 </File> 948 </File>
949 <File 949 <File
950 RelativePath=".\llsrv.cpp">
951 </File>
952 <File
950 RelativePath=".\llstartup.cpp"> 953 RelativePath=".\llstartup.cpp">
951 </File> 954 </File>
952 <File 955 <File
@@ -1972,6 +1975,9 @@
1972 RelativePath=".\llsprite.h"> 1975 RelativePath=".\llsprite.h">
1973 </File> 1976 </File>
1974 <File 1977 <File
1978 RelativePath=".\llsrv.h">
1979 </File>
1980 <File
1975 RelativePath=".\llstartup.h"> 1981 RelativePath=".\llstartup.h">
1976 </File> 1982 </File>
1977 <File 1983 <File
diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj
index 8b55869..445ebd9 100644
--- a/linden/indra/newview/newview_vc8.vcproj
+++ b/linden/indra/newview/newview_vc8.vcproj
@@ -67,7 +67,7 @@
67 /> 67 />
68 <Tool 68 <Tool
69 Name="VCLinkerTool" 69 Name="VCLinkerTool"
70 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llmozlib-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 70 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llmozlib-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
71 OutputFile="$(ConfigurationName)/debugview.exe" 71 OutputFile="$(ConfigurationName)/debugview.exe"
72 LinkIncremental="2" 72 LinkIncremental="2"
73 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 73 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -158,7 +158,7 @@
158 /> 158 />
159 <Tool 159 <Tool
160 Name="VCLinkerTool" 160 Name="VCLinkerTool"
161 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 161 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
162 OutputFile="$(ConfigurationName)/newview.exe" 162 OutputFile="$(ConfigurationName)/newview.exe"
163 LinkIncremental="2" 163 LinkIncremental="2"
164 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 164 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -248,7 +248,7 @@
248 /> 248 />
249 <Tool 249 <Tool
250 Name="VCLinkerTool" 250 Name="VCLinkerTool"
251 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 251 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
252 OutputFile="$(ConfigurationName)/SecondLife.exe" 252 OutputFile="$(ConfigurationName)/SecondLife.exe"
253 LinkIncremental="0" 253 LinkIncremental="0"
254 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 254 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -337,7 +337,7 @@
337 /> 337 />
338 <Tool 338 <Tool
339 Name="VCLinkerTool" 339 Name="VCLinkerTool"
340 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib" 340 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s.lib libcurl.lib libeay32.lib libexpatMT.lib LibOpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib"
341 OutputFile="$(ConfigurationName)/newview_noopt.exe" 341 OutputFile="$(ConfigurationName)/newview_noopt.exe"
342 LinkIncremental="2" 342 LinkIncremental="2"
343 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 343 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -1300,6 +1300,10 @@
1300 > 1300 >
1301 </File> 1301 </File>
1302 <File 1302 <File
1303 RelativePath=".\llsrv.cpp"
1304 >
1305 </File>
1306 <File
1303 RelativePath=".\llstartup.cpp" 1307 RelativePath=".\llstartup.cpp"
1304 > 1308 >
1305 </File> 1309 </File>
@@ -2662,6 +2666,10 @@
2662 > 2666 >
2663 </File> 2667 </File>
2664 <File 2668 <File
2669 RelativePath=".\llsrv.h"
2670 >
2671 </File>
2672 <File
2665 RelativePath=".\llstartup.h" 2673 RelativePath=".\llstartup.h"
2666 > 2674 >
2667 </File> 2675 </File>
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index 408be2e..7d03e64 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -1406,7 +1406,7 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera)
1406 1406
1407 if (gHideSelectedObjects) 1407 if (gHideSelectedObjects)
1408 { 1408 {
1409 if (drawablep->getVObj() && 1409 if (drawablep->getVObj().notNull() &&
1410 drawablep->getVObj()->isSelected()) 1410 drawablep->getVObj()->isSelected())
1411 { 1411 {
1412 return; 1412 return;
@@ -1435,7 +1435,7 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera)
1435 } 1435 }
1436 else if (drawablep->isAvatar() && drawablep->isVisible()) 1436 else if (drawablep->isAvatar() && drawablep->isVisible())
1437 { 1437 {
1438 LLVOAvatar* vobj = (LLVOAvatar*) drawablep->getVObj(); 1438 LLVOAvatar* vobj = (LLVOAvatar*) drawablep->getVObj().get();
1439 vobj->updateVisibility(FALSE); 1439 vobj->updateVisibility(FALSE);
1440 } 1440 }
1441 1441
@@ -3498,7 +3498,7 @@ BOOL LLPipeline::getRenderSoundBeacons(void*)
3498LLViewerObject* LLPipeline::pickObject(const LLVector3 &start, const LLVector3 &end, LLVector3 &collision) 3498LLViewerObject* LLPipeline::pickObject(const LLVector3 &start, const LLVector3 &end, LLVector3 &collision)
3499{ 3499{
3500 LLDrawable* drawable = mObjectPartition[PARTITION_VOLUME]->pickDrawable(start, end, collision); 3500 LLDrawable* drawable = mObjectPartition[PARTITION_VOLUME]->pickDrawable(start, end, collision);
3501 return drawable ? drawable->getVObj() : NULL; 3501 return drawable ? drawable->getVObj().get() : NULL;
3502} 3502}
3503 3503
3504LLSpatialPartition* LLPipeline::getSpatialPartition(LLViewerObject* vobj) 3504LLSpatialPartition* LLPipeline::getSpatialPartition(LLViewerObject* vobj)
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index 2f7971c..76f356b 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,71 @@
1Release Notes for Second Life 1.17.1(0) June 22, 2007
2=====================================
3Changes:
4* VWR-650: Make "Give money" permissions look different than the other permissions
5* VWR-427: Added new menu item: Tools > Edit Linked Parts
6* VWR-79: PNG image support submission
7* Sculpties now include a one-time explanation the first time a sculptie is created.
8* Client and Server menus now have a one-time dialog box to explain what they are.
9* "Skip 'Show next time' Dialogs..." button added to Preferences > Popups tab to skip all one time dialog boxes.
10* Added Japanese and German language installers (Windows only)
11* The version of Mozilla used in the client is updated to 1.8.0.12
12* F1 help now opens an external browser to the Second Life support web site.
13* F1 Help will now open an external browser to language specific support websites for Japanese, Korean and Portuguese based on client's language.
14* Delay added to folder opening while dragging items in an inventory window with a vertical scroll bar.
15* Default messages for postcards are replaced when adding text.
16* In the Inventory window the Filter menu is consolidated into the File menu.
17* The sculptie texture picker UI has changed to differentiate it from the surface texture picker.
18
19LSL changes:
20* Added support for alternate sculptie edge stitching.
21* VWR-68: LSL constant expression folding and proper constant parsing
22
23Bug fixes:
24* Fixed MISC-217: Accounts with negative L$ balance can't buy L$0 freebie
25* Fixed SVC-306: Objects are visible at <0,0,0> (sometimes before moving to their correct position)
26* Fixed SVC-225: Searching for Classifieds with blank field results no results
27* Fixed VWR-1296: Minor memory leak in lltexturecache.cpp
28* Fixed VWR-1223: Camera Controls keyboard shortcuts broke
29* Fixed VWR-1221: Possible crash in llfloaterland.cpp / line 1556
30* Fixed VWR-1217: Built-in avatar animations stop suddenly, rather than fading out. (jerky head movement)
31* Fixed VWR-1203: Avatars eyes are constantly crossing in 1.17
32* Fixed VWR-1170: LLMuteList::loadFromFile() improperly parses the mute list returned from the service
33* Fixed VWR-1140: About Land floater is not resizable, ban and access lists too small
34* Fixed VWR-1049: Trivial sizeof() miscalculatuion results in incomplete copying of CPU Brand ID string in CProcessor::AnalyzeAMDProcessor()
35* Fixed VWR-1044: Unchecking "Go Away/AFK When Idle" doesn't work when manually setting Away status
36* Fixed VWR-944: Boost inclusion is inconsistent
37* Fixed VWR-941: Reading length data for a four-byte Variable template message misstores the length
38* Fixed VWR-938: ELFIO is technically optional, make this easy to capitalise on
39* Fixed VWR-876: sculpt texture map does not load or low priority when the texture itself is not visible in viewer frame or not cached
40* Fixed VWR-873: Dead members "eVertexDataMask;" in various objects
41* Fixed VWR-856: llvfs.cpp: possible loss of memory blocks in LLVFS:audit()
42* Fixed VWR-822: "Create new..." clothing buttons don't auto-wear items
43* Fixed VWR-796: llStopSound() not working
44* Fixed VWR-746: Incorrect menu item referred to when member of maximum number of groups and a group invite is received
45* Fixed VWR-660: When turning off Flexible Object rendering, flexible objects become permanently invisible
46* Fixed VWR-652: A harmless compiler warning in indra.l.cpp
47* Fixed VWR-606: Some source files (llprocessor.cpp and llsdserialize_tut.cpp) contain non-ASCII characters
48* Fixed VWR-597: Abuse report tool should autofill abuser name when reporting an object
49* Fixed VWR-560: Crash in llscrolllistctl.cpp when sorting scroll list
50* Fixed VWR-459: Unicode supplementary characters typed in from keybaord are not handled properly on Windows (and potentially on Linux)
51* Fixed VWR-446: Automatically start renaming new user-created assets and automatically select new user-created folders
52* Fixed VWR-383: Chat logs do not have timestamps
53* Fixed VWR-364: Viewer memory leak
54* Fixed VWR-287: Inconsistent behaviour between agent_slide_left / agent_slide_right, and the rest of the movement functions.
55* Fixed VWR-251: Keystrokes are eaten by IME when no text input is possible, on Windows using Japanese
56* Fixed VWR-248: Inexplicable folding of Avatars such that they are walking around with their heads up their arses
57* Fixed VWR-247: Viewer generates undesired dialog when IM comes in while minimized
58* Fixed VWR-227: If a Find/Search returns no results, the results list is still focused and an attempt is made to select the first result anyway.
59* Fixed VWR-218: SConstruct script makes many assumptions that are invalid outside LL
60* Fixed VWR-213: Calling DestroyWindow with NULL window handle (win32 version)
61* Fixed VWR-207: Textures become increasingly blurry over time on systems with > ~2GB RAM
62* Fixed VWR-143: Compiler errors in llwebbrowserctrl.h
63* Fixed VWR-132: seg fault in lldrawpool.cpp
64* Fixed VWR-119: Zero missing in Sub-unit snap grid. for small fraction like 1/16 and 1/32
65* Fixed VWR-101: Get rid of "Return All"
66* Fixed Inventory's "Recent Items" tab settings not persisting across logins
67* Fixed line breaks showing up as * in various windows.
68
1Release Notes for Second Life 1.17.0(12) June 13, 2007 69Release Notes for Second Life 1.17.0(12) June 13, 2007
2===================================== 70=====================================
3Changes: 71Changes:
diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc
index 0b4a5ba..8315deb 100644
--- a/linden/indra/newview/res/newViewRes.rc
+++ b/linden/indra/newview/res/newViewRes.rc
@@ -227,8 +227,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur"
227// 227//
228 228
229VS_VERSION_INFO VERSIONINFO 229VS_VERSION_INFO VERSIONINFO
230 FILEVERSION 1,17,0,12 230 FILEVERSION 1,17,1,0
231 PRODUCTVERSION 1,17,0,12 231 PRODUCTVERSION 1,17,1,0
232 FILEFLAGSMASK 0x3fL 232 FILEFLAGSMASK 0x3fL
233#ifdef _DEBUG 233#ifdef _DEBUG
234 FILEFLAGS 0x1L 234 FILEFLAGS 0x1L
@@ -245,12 +245,12 @@ BEGIN
245 BEGIN 245 BEGIN
246 VALUE "CompanyName", "Linden Lab" 246 VALUE "CompanyName", "Linden Lab"
247 VALUE "FileDescription", "Second Life" 247 VALUE "FileDescription", "Second Life"
248 VALUE "FileVersion", "1.17.0.12" 248 VALUE "FileVersion", "1.17.1.0"
249 VALUE "InternalName", "Second Life" 249 VALUE "InternalName", "Second Life"
250 VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc." 250 VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc."
251 VALUE "OriginalFilename", "SecondLife.exe" 251 VALUE "OriginalFilename", "SecondLife.exe"
252 VALUE "ProductName", "Second Life" 252 VALUE "ProductName", "Second Life"
253 VALUE "ProductVersion", "1.17.0.12" 253 VALUE "ProductVersion", "1.17.1.0"
254 END 254 END
255 END 255 END
256 BLOCK "VarFileInfo" 256 BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/skins/textures/textures.xml b/linden/indra/newview/skins/textures/textures.xml
index 89e4f53..79e910a 100644
--- a/linden/indra/newview/skins/textures/textures.xml
+++ b/linden/indra/newview/skins/textures/textures.xml
@@ -230,6 +230,7 @@
230 <notify_tip_icon.tga value="74ba3584-58ea-9984-5b76-62d37942ab77"/> 230 <notify_tip_icon.tga value="74ba3584-58ea-9984-5b76-62d37942ab77"/>
231 <notify_box_icon.tga value="b2ef2d31-9714-a07b-6ca7-31638166364b"/> 231 <notify_box_icon.tga value="b2ef2d31-9714-a07b-6ca7-31638166364b"/>
232 <notify_next.tga value="07d0ea4c-af0c-aad1-dbbf-c24020ff2b80"/> 232 <notify_next.tga value="07d0ea4c-af0c-aad1-dbbf-c24020ff2b80"/>
233 <notify_caution_icon.tga value="3a22ac15-39ac-409c-acec-b08b1b6b689b"/>
233 <map_avatar_you_8.tga value="02fbdc40-5e07-a6e1-228b-58e10f8335b7"/> 234 <map_avatar_you_8.tga value="02fbdc40-5e07-a6e1-228b-58e10f8335b7"/>
234 <map_avatar_8.tga value="0be58a91-8065-c02b-7a12-2cc14dddbc37"/> 235 <map_avatar_8.tga value="0be58a91-8065-c02b-7a12-2cc14dddbc37"/>
235 <map_avatar_16.tga value="db0dadd5-026a-88cf-f5c1-523a0a2daa3e"/> 236 <map_avatar_16.tga value="db0dadd5-026a-88cf-f5c1-523a0a2daa3e"/>
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index d32b46a..6c11a06 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -561,13 +561,12 @@ Objects: [N]
561 </alert> 561 </alert>
562 <alert modal="true" name="ReturnAllTopObjects"> 562 <alert modal="true" name="ReturnAllTopObjects">
563 <message name="message"> 563 <message name="message">
564 Are you sure you want to return all objects 564 Are you sure you want to return all listed objects back to their owner&apos;s inventory?
565in this region back to their owner&apos;s inventory?
566 </message> 565 </message>
567 <option name="Return"> 566 <option name="Return">
568 OK 567 OK
569 </option> 568 </option>
570 <option name="Cancel"> 569 <option default = "true" name="Cancel">
571 Cancel 570 Cancel
572 </option> 571 </option>
573 </alert> 572 </alert>
@@ -620,6 +619,17 @@ to set its Landing Point.
620 Please enter your email address. 619 Please enter your email address.
621 </message> 620 </message>
622 </alert> 621 </alert>
622 <alert modal="true" name="PromptMissingSubjMsg">
623 <message name="message">
624 Send postcard with the default subject or message?
625 </message>
626 <option name="OK">
627 OK
628 </option>
629 <option name="Cancel">
630 Cancel
631 </option>
632 </alert>
623 <alert modal="true" name="ErrorProcessingSnapshot"> 633 <alert modal="true" name="ErrorProcessingSnapshot">
624 <message name="message"> 634 <message name="message">
625 Error processing snapshot data 635 Error processing snapshot data
@@ -798,6 +808,17 @@ Apply those changes and quit
798 Cancel 808 Cancel
799 </option> 809 </option>
800 </alert> 810 </alert>
811 <alert modal="true" name="SkipShowNextTimeDialogs">
812 <message name="message">
813 Disable all &apos;Show next time&apos; dialogs?
814 </message>
815 <option name="OK">
816 OK
817 </option>
818 <option name="Cancel">
819 Cancel
820 </option>
821 </alert>
801 <alert modal="true" name="CacheWillClear"> 822 <alert modal="true" name="CacheWillClear">
802 <message name="message"> 823 <message name="message">
803 Cache will be cleared after you restart [SECOND_LIFE]. 824 Cache will be cleared after you restart [SECOND_LIFE].
@@ -3074,7 +3095,7 @@ can be attached to notecards.
3074 You are a member of too many groups to join 3095 You are a member of too many groups to join
3075another one. Please leave at least one group 3096another one. Please leave at least one group
3076before joining this one, or decline the offer. 3097before joining this one, or decline the offer.
3077To leave a group select the &apos;My Groups..&apos; option 3098To leave a group select the &apos;Groups..&apos; option
3078from the &apos;Edit&apos; menu. 3099from the &apos;Edit&apos; menu.
3079[NAME] has invited you to join a group as a member. 3100[NAME] has invited you to join a group as a member.
3080[INVITE] 3101[INVITE]
@@ -3091,7 +3112,7 @@ from the &apos;Edit&apos; menu.
3091 You are a member of too many groups to join 3112 You are a member of too many groups to join
3092another one. Please leave at least one group 3113another one. Please leave at least one group
3093before joining this one, or decline the offer. 3114before joining this one, or decline the offer.
3094To leave a group select the &apos;My Groups..&apos; option 3115To leave a group select the &apos;Groups..&apos; option
3095from the &apos;Edit&apos; menu. 3116from the &apos;Edit&apos; menu.
3096[NAME] has invited you to join a group as an officer. 3117[NAME] has invited you to join a group as an officer.
3097[INVITE] 3118[INVITE]
@@ -4067,6 +4088,20 @@ will only work if a script is added with a money() event.
4067 Cancel 4088 Cancel
4068 </option> 4089 </option>
4069 </alert> 4090 </alert>
4091 <alert modal="true" name="ClickOpenF1Help">
4092 <message name="message">
4093 Visit the Second Life Support Web site?
4094 </message>
4095 <ignore name="ignore">
4096 Ignore
4097 </ignore>
4098 <option name="Gotopage">
4099 Go
4100 </option>
4101 <option name="Cancel">
4102 Cancel
4103 </option>
4104 </alert>
4070 <alert modal="true" name="HelpReportAbuseEmailLL" > 4105 <alert modal="true" name="HelpReportAbuseEmailLL" >
4071 <message name="message"> 4106 <message name="message">
4072Use this tool to report violations of the Terms of Service 4107Use this tool to report violations of the Terms of Service
@@ -4342,5 +4377,27 @@ the contents of your Lost And Found folder?
4342 they are part of an attachment. 4377 they are part of an attachment.
4343 </message> 4378 </message>
4344 </alert> 4379 </alert>
4345 4380 <!-- alert for more information about the debit permission -->
4381 <alert modal="true" name="DebitPermissionDetails" title="About Requests for the Debit Permission">
4382 <message name="message">
4383 <p>Granting this request gives a script ongoing permission to take Linden dollars (L$) from your account. To revoke this permission, the object's owner must delete the object or reset the scripts in the object.</p>
4384 </message>
4385 <option default="true" name="OK">
4386 OK
4387 </option>
4388 </alert>
4389 <alert modal="true" name="AutoWearNewClothing">
4390 <message name="message">
4391 Would you like to automatically wear the clothing item you create?
4392 </message>
4393 <ignore name="ignore">
4394 Automatically wear new clothing
4395 </ignore>
4396 <option name="Yes">
4397 Yes
4398 </option>
4399 <option name="No">
4400 No
4401 </option>
4402 </alert>
4346</alerts> 4403</alerts>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_about_land.xml b/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
index 5d85deb..9366154 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_about_land.xml
@@ -1,11 +1,11 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater bottom="-554" can_close="true" can_drag_on_left="false" can_minimize="true" 2<floater bottom="-554" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="false" can_tear_off="true" enabled="true" height="370" 3 can_resize="true" can_tear_off="true" enabled="true" height="385"
4 hidden="false" left="367" min_height="100" min_width="100" 4 hidden="false" left="367" min_height="385" min_width="460"
5 mouse_opaque="true" name="floaterland" rect_control="FloaterLandRect5" 5 mouse_opaque="true" name="floaterland" rect_control="FloaterLandRect5"
6 title="About Land" width="460"> 6 title="About Land" width="460">
7 <tab_container bottom="-370" enabled="true" height="350" hidden="false" left="0" 7 <tab_container bottom="-370" enabled="true" height="350" hidden="false" left="0"
8 mouse_opaque="false" name="landtab" tab_position="top" width="460"> 8 mouse_opaque="false" name="landtab" tab_position="top" width="460" follows="left|top|right|bottom">
9 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom" 9 <panel border="true" bottom="-349" enabled="true" follows="left|top|right|bottom"
10 height="333" hidden="false" label="General" left="1" mouse_opaque="true" 10 height="333" hidden="false" label="General" left="1" mouse_opaque="true"
11 name="land_general_panel" width="458"> 11 name="land_general_panel" width="458">
@@ -16,11 +16,11 @@
16 Name: 16 Name:
17 </text> 17 </text>
18 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-20" 18 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-20"
19 enabled="true" follows="left|top" font="SansSerifSmall" 19 enabled="true" follows="left|top|right" font="SansSerifSmall"
20 handle_edit_keys_directly="false" height="16" hidden="false" left="76" 20 handle_edit_keys_directly="false" height="16" hidden="false" left="76"
21 max_length="63" mouse_opaque="true" name="Name" 21 max_length="63" mouse_opaque="true" name="Name"
22 select_all_on_focus_received="false" select_on_focus="false" 22 select_all_on_focus_received="false" select_on_focus="false"
23 text_readonly_color="0.576471 0.662745 0.835294 1" width="286" /> 23 text_readonly_color="0.576471 0.662745 0.835294 1" width="370" />
24 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 24 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
25 bottom="-40" drop_shadow_visible="true" enabled="true" follows="left|top" 25 bottom="-40" drop_shadow_visible="true" enabled="true" follows="left|top"
26 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false" 26 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false"
@@ -28,11 +28,11 @@
28 Description: 28 Description:
29 </text> 29 </text>
30 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-40" 30 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-40"
31 enabled="true" follows="left|top" font="SansSerifSmall" 31 enabled="true" follows="left|top|right" font="SansSerifSmall"
32 handle_edit_keys_directly="false" height="16" hidden="false" left="76" 32 handle_edit_keys_directly="false" height="16" hidden="false" left="76"
33 max_length="127" mouse_opaque="true" name="Description" 33 max_length="127" mouse_opaque="true" name="Description"
34 select_all_on_focus_received="false" select_on_focus="false" 34 select_all_on_focus_received="false" select_on_focus="false"
35 text_readonly_color="0.576471 0.662745 0.835294 1" width="286" /> 35 text_readonly_color="0.576471 0.662745 0.835294 1" width="370" />
36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
37 bottom="-60" drop_shadow_visible="true" enabled="false" follows="left|top" 37 bottom="-60" drop_shadow_visible="true" enabled="false" follows="left|top"
38 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false" 38 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false"
@@ -266,10 +266,10 @@
266 width="350"> 266 width="350">
267 Purchased land in this region may not be joined/subdivided. 267 Purchased land in this region may not be joined/subdivided.
268 </text> 268 </text>
269 <text_editor type="string" length="1" bottom="-305" embedded_items="false" enabled="false" follows="left|top" 269 <text_editor type="string" length="1" bottom="-325" embedded_items="false" enabled="false" follows="left|top|right|bottom"
270 font="SansSerifSmall" height="180" hidden="false" left="15" 270 font="SansSerifSmall" height="200" hidden="false" left="15"
271 max_length="65535" mouse_opaque="true" name="covenant_editor" 271 max_length="65535" mouse_opaque="true" name="covenant_editor"
272 text_readonly_color="1 1 1 1" width="375" word_wrap="true"> 272 text_readonly_color="1 1 1 1" width="420" word_wrap="true">
273 There is no Covenant provided for this Estate. 273 There is no Covenant provided for this Estate.
274 </text_editor> 274 </text_editor>
275 <text hidden="true" name="can_resell"> 275 <text hidden="true" name="can_resell">
@@ -664,11 +664,11 @@
664 Music URL: 664 Music URL:
665 </text> 665 </text>
666 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-48" 666 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-48"
667 enabled="true" follows="left|top" font="SansSerifSmall" 667 enabled="true" follows="left|top|right" font="SansSerifSmall"
668 handle_edit_keys_directly="false" height="16" hidden="false" left="76" 668 handle_edit_keys_directly="false" height="16" hidden="false" left="76"
669 max_length="255" mouse_opaque="true" name="music_url" 669 max_length="255" mouse_opaque="true" name="music_url"
670 select_all_on_focus_received="true" select_on_focus="true" 670 select_all_on_focus_received="true" select_on_focus="true"
671 text_readonly_color="0.576471 0.662745 0.835294 1" width="292" /> 671 text_readonly_color="0.576471 0.662745 0.835294 1" width="370" />
672 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 672 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
673 bottom="-76" drop_shadow_visible="true" enabled="true" follows="left|top" 673 bottom="-76" drop_shadow_visible="true" enabled="true" follows="left|top"
674 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false" 674 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false"
@@ -695,11 +695,11 @@ texture:
695 with content from this URL: 695 with content from this URL:
696 </text> 696 </text>
697 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-172" 697 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-172"
698 enabled="true" follows="left|top" font="SansSerifSmall" 698 enabled="true" follows="left|top|right" font="SansSerifSmall"
699 handle_edit_keys_directly="false" height="16" hidden="false" left="76" 699 handle_edit_keys_directly="false" height="16" hidden="false" left="76"
700 max_length="255" mouse_opaque="true" name="media_url" 700 max_length="255" mouse_opaque="true" name="media_url"
701 select_all_on_focus_received="true" select_on_focus="true" 701 select_all_on_focus_received="true" select_on_focus="true"
702 text_readonly_color="0.576471 0.662745 0.835294 1" width="292" /> 702 text_readonly_color="0.576471 0.662745 0.835294 1" width="370" />
703 <check_box bottom="-208" enabled="true" follows="left|top" font="SansSerifSmall" 703 <check_box bottom="-208" enabled="true" follows="left|top" font="SansSerifSmall"
704 height="16" hidden="false" initial_value="false" 704 height="16" hidden="false" initial_value="false"
705 label="Auto scale content (slower and reduced visual quality)" left="76" 705 label="Auto scale content (slower and reduced visual quality)" left="76"
@@ -725,28 +725,30 @@ texture:
725 height="16" hidden="false" initial_value="false" 725 height="16" hidden="false" initial_value="false"
726 label="Avatars: (0 listed, 300 max)" left="4" mouse_opaque="true" 726 label="Avatars: (0 listed, 300 max)" left="4" mouse_opaque="true"
727 name="AccessCheck" radio_style="false" width="278" /> 727 name="AccessCheck" radio_style="false" width="278" />
728 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-144" 728 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-234"
729 column_padding="5" draw_border="true" draw_heading="false" 729 column_padding="0" draw_border="true" draw_heading="true" heading_font="SansSerifSmall" heading_height="14"
730 draw_stripes="true" enabled="true" follows="left|top" height="80" 730 enabled="true" follows="left|top|right|bottom" height="170"
731 hidden="false" left="28" mouse_opaque="true" multi_select="false" 731 hidden="false" left="28" mouse_opaque="true" multi_select="false"
732 name="AccessList" width="254" /> 732 name="AccessList" width="400">
733 <button bottom="-164" enabled="true" follows="left|top" font="SansSerifSmall" 733 <column label="Allowed Residents" name="name" relwidth="1.0" />
734 </name_list>
735 <button bottom="-264" enabled="true" follows="left|bottom" font="SansSerifSmall"
734 halign="center" height="16" hidden="false" label="Add..." 736 halign="center" height="16" hidden="false" label="Add..."
735 label_selected="Add..." left="28" mouse_opaque="true" name="Add..." 737 label_selected="Add..." left="28" mouse_opaque="true" name="Add..."
736 scale_image="true" width="64" /> 738 scale_image="true" width="64" />
737 <button bottom="-164" enabled="false" follows="left|top" font="SansSerifSmall" 739 <button bottom="-264" enabled="false" follows="left|bottom" font="SansSerifSmall"
738 halign="center" height="16" hidden="false" label="Remove" 740 halign="center" height="16" hidden="false" label="Remove"
739 label_selected="Remove" left="96" mouse_opaque="true" name="Remove" 741 label_selected="Remove" left="96" mouse_opaque="true" name="Remove"
740 scale_image="true" width="64" /> 742 scale_image="true" width="64" />
741 <check_box bottom="-184" enabled="false" follows="left|top" font="SansSerifSmall" 743 <check_box bottom="-284" enabled="false" follows="left|bottom" font="SansSerifSmall"
742 height="16" hidden="false" initial_value="false" 744 height="16" hidden="false" initial_value="false"
743 label="Sell passes allowing temporary access:" left="28" 745 label="Sell passes allowing temporary access:" left="28"
744 mouse_opaque="true" name="PassCheck" radio_style="false" width="254" /> 746 mouse_opaque="true" name="PassCheck" radio_style="false" width="254" />
745 <spinner bottom="-204" enabled="false" follows="left|top" height="16" hidden="false" 747 <spinner bottom="-304" enabled="false" follows="left|bottom" height="16" hidden="false"
746 increment="1" initial_val="10" label="Price in L$:" label_width="128" 748 increment="1" initial_val="10" label="Price in L$:" label_width="128"
747 left="76" max_val="500" min_val="1" mouse_opaque="true" name="PriceSpin" 749 left="76" max_val="500" min_val="1" mouse_opaque="true" name="PriceSpin"
748 width="206" /> 750 width="206" />
749 <spinner bottom="-224" enabled="false" follows="left|top" height="16" hidden="false" 751 <spinner bottom="-324" enabled="false" follows="left|bottom" height="16" hidden="false"
750 increment="0.25" initial_val="1" label="Hours of access:" label_width="128" 752 increment="0.25" initial_val="1" label="Hours of access:" label_width="128"
751 left="76" max_val="24" min_val="0.01" mouse_opaque="true" name="HoursSpin" 753 left="76" max_val="24" min_val="0.01" mouse_opaque="true" name="HoursSpin"
752 width="206" /> 754 width="206" />
@@ -758,35 +760,37 @@ texture:
758 height="16" hidden="false" initial_value="false" 760 height="16" hidden="false" initial_value="false"
759 label="Ban these avatars: (0 listed, 300 max)" left="4" mouse_opaque="true" 761 label="Ban these avatars: (0 listed, 300 max)" left="4" mouse_opaque="true"
760 name="LandBanCheck" radio_style="false" width="278" /> 762 name="LandBanCheck" radio_style="false" width="278" />
761 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-104" 763 <name_list allow_calling_card_drop="false" background_visible="true" bottom="-200"
762 column_padding="5" draw_border="true" draw_heading="false" 764 column_padding="0" draw_border="true" draw_heading="true" heading_font="SansSerifSmall" heading_height="14"
763 draw_stripes="true" enabled="true" follows="left|top" height="80" 765 enabled="true" follows="left|top|right|bottom" height="170"
764 hidden="false" left="28" mouse_opaque="true" multi_select="false" 766 hidden="false" left="28" mouse_opaque="true" multi_select="false"
765 name="LandBanList" width="254" /> 767 name="LandBanList" width="400">
766 <button bottom="-124" enabled="true" follows="left|top" font="SansSerifSmall" 768 <column label="Banned Residents" name="name" relwidth="1.0" />
769 </name_list>
770 <button bottom="-230" enabled="true" follows="left|bottom" font="SansSerifSmall"
767 halign="center" height="16" hidden="false" label="Add..." 771 halign="center" height="16" hidden="false" label="Add..."
768 label_selected="Add..." left="28" mouse_opaque="true" name="Add..." 772 label_selected="Add..." left="28" mouse_opaque="true" name="Add..."
769 scale_image="true" width="64" /> 773 scale_image="true" width="64" />
770 <button bottom="-124" enabled="false" follows="left|top" font="SansSerifSmall" 774 <button bottom="-230" enabled="false" follows="left|bottom" font="SansSerifSmall"
771 halign="center" height="16" hidden="false" label="Remove" 775 halign="center" height="16" hidden="false" label="Remove"
772 label_selected="Remove" left="96" mouse_opaque="true" name="Remove" 776 label_selected="Remove" left="96" mouse_opaque="true" name="Remove"
773 scale_image="true" width="64" /> 777 scale_image="true" width="64" />
774 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 778 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
775 bottom="-144" drop_shadow_visible="true" enabled="true" follows="left|top" 779 bottom="-260" drop_shadow_visible="true" enabled="true" follows="left|bottom"
776 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false" 780 font="SansSerifSmall" h_pad="0" halign="left" height="16" hidden="false"
777 left="4" mouse_opaque="true" name="Deny by Payment Status:" v_pad="0" 781 left="4" mouse_opaque="true" name="Deny by Payment Status:" v_pad="0"
778 width="278"> 782 width="278">
779 Deny by Payment Status: 783 Deny by Payment Status:
780 </text> 784 </text>
781 <check_box bottom="-164" enabled="true" follows="left|top" font="SansSerifSmall" 785 <check_box bottom="-280" enabled="true" follows="left|bottom" font="SansSerifSmall"
782 height="16" hidden="false" initial_value="false" 786 height="16" hidden="false" initial_value="false"
783 label="Deny No Payment Info On File" left="28" mouse_opaque="true" 787 label="Deny No Payment Info On File" left="28" mouse_opaque="true"
784 name="DenyAnonymousCheck" radio_style="false" width="254" /> 788 name="DenyAnonymousCheck" radio_style="false" width="254" />
785 <check_box bottom="-184" enabled="true" follows="left|top" font="SansSerifSmall" 789 <check_box bottom="-300" enabled="true" follows="left|bottom" font="SansSerifSmall"
786 height="16" hidden="false" initial_value="false" 790 height="16" hidden="false" initial_value="false"
787 label="Deny Payment Info On File" left="28" mouse_opaque="true" 791 label="Deny Payment Info On File" left="28" mouse_opaque="true"
788 name="DenyIdentifiedCheck" radio_style="false" width="254" /> 792 name="DenyIdentifiedCheck" radio_style="false" width="254" />
789 <check_box bottom="-204" enabled="true" follows="left|top" font="SansSerifSmall" 793 <check_box bottom="-320" enabled="true" follows="left|bottom" font="SansSerifSmall"
790 height="16" hidden="false" initial_value="false" 794 height="16" hidden="false" initial_value="false"
791 label="Deny Payment Info Used" left="28" mouse_opaque="true" 795 label="Deny Payment Info Used" left="28" mouse_opaque="true"
792 name="DenyTransactedCheck" radio_style="false" width="254" /> 796 name="DenyTransactedCheck" radio_style="false" width="254" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
index 3beb3a8..70f01fc 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
@@ -105,8 +105,11 @@
105 </combo_item> 105 </combo_item>
106 </combo_box> 106 </combo_box>
107 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 107 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
108 label="Search" label_selected="Search" left_delta="142" mouse_opaque="true" 108 label="Browse" label_selected="Browse" left_delta="142" mouse_opaque="true"
109 name="Search" width="70" /> 109 name="Browse" width="70" />
110 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
111 label="Search" label_selected="Search" mouse_opaque="true"
112 name="Search" width="70" visible="false"/>
110 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 113 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
111 label="Place an Ad..." label_selected="Place an Ad..." left_delta="320" 114 label="Place an Ad..." label_selected="Place an Ad..." left_delta="320"
112 mouse_opaque="true" name="Place an Ad..." width="100" /> 115 mouse_opaque="true" name="Place an Ad..." width="100" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_image_preview.xml b/linden/indra/newview/skins/xui/en-us/floater_image_preview.xml
index 4b668c5..2cea9e7 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_image_preview.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_image_preview.xml
@@ -49,9 +49,9 @@
49 </combo_item> 49 </combo_item>
50 </combo_box> 50 </combo_box>
51 <text bottom="250" follows="top|left" left="10" name="bad_image_text"> 51 <text bottom="250" follows="top|left" left="10" name="bad_image_text">
52 Unable to read image. 52Unable to read image.
53 53
54 Try saving image as 24 bit Targa (.tga). 54Try saving image as 24 bit Targa (.tga).
55 </text> 55 </text>
56 <button bottom="10" follows="bottom|right" height="20" label="Cancel" left="182" 56 <button bottom="10" follows="bottom|right" height="20" label="Cancel" left="182"
57 name="cancel_btn" width="64" /> 57 name="cancel_btn" width="64" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_inventory.xml b/linden/indra/newview/skins/xui/en-us/floater_inventory.xml
index d9d8eb8..ffed294 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_inventory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_inventory.xml
@@ -38,6 +38,10 @@
38 mouse_opaque="true" name="Show Filters" width="128"> 38 mouse_opaque="true" name="Show Filters" width="128">
39 <on_click filter="" function="Inventory.ShowFilters" userdata="" /> 39 <on_click filter="" function="Inventory.ShowFilters" userdata="" />
40 </menu_item_call> 40 </menu_item_call>
41 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Reset Filters" left="0"
42 mouse_opaque="true" name="Reset Current" width="118">
43 <on_click filter="" function="Inventory.ResetFilter" userdata="" />
44 </menu_item_call>
41 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Close All Folders" 45 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Close All Folders"
42 left="0" mouse_opaque="true" name="Close All Folders" width="128"> 46 left="0" mouse_opaque="true" name="Close All Folders" width="128">
43 <on_click filter="" function="Inventory.CloseAllFolders" userdata="" /> 47 <on_click filter="" function="Inventory.CloseAllFolders" userdata="" />
@@ -155,18 +159,5 @@
155 <on_click filter="" function="Inventory.SetSortBy" userdata="systemfolderstotop" /> 159 <on_click filter="" function="Inventory.SetSortBy" userdata="systemfolderstotop" />
156 </menu_item_check> 160 </menu_item_check>
157 </menu> 161 </menu>
158 <menu bottom_delta="28" color="0, 0, 0, 1" drop_shadow="true" height="49"
159 hidden="false" label="Filters" left="0" mouse_opaque="false" name="Filters"
160 opaque="true" tear_off="true" width="118">
161 <menu_item_check bottom_delta="-18" control_name="Inventory.ShowFilters" height="18"
162 hidden="false" label="Modify Current" left="0" mouse_opaque="true"
163 name="Modify Current" width="118">
164 <on_click filter="" function="Inventory.ShowFilters" userdata="" />
165 </menu_item_check>
166 <menu_item_call bottom_delta="-18" height="18" hidden="false" label="Reset Current" left="0"
167 mouse_opaque="true" name="Reset Current" width="118">
168 <on_click filter="" function="Inventory.ResetFilter" userdata="" />
169 </menu_item_call>
170 </menu>
171 </menu_bar> 162 </menu_bar>
172</floater> 163</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_postcard.xml b/linden/indra/newview/skins/xui/en-us/floater_postcard.xml
index 26fcbcb..27780a4 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_postcard.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_postcard.xml
@@ -23,14 +23,14 @@
23 name="subject_label"> 23 name="subject_label">
24 Subject: 24 Subject:
25 </text> 25 </text>
26 <line_editor bottom_delta="-6" follows="left|top" height="20" left="120" max_length="100" 26 <line_editor bottom_delta="-6" follows="left|top" height="20" label="Type your subject here."
27 name="subject_form" width="150" /> 27 left="120" max_length="100" name="subject_form" width="150" />
28 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="12" 28 <text bottom_delta="-23" follows="top|left" font="SansSerif" left="12"
29 name="msg_label"> 29 name="msg_label">
30 Message: 30 Message:
31 </text> 31 </text>
32 <text_editor bottom_delta="-150" follows="left|top|right|bottom" height="140" left="12" 32 <text_editor bottom_delta="-150" follows="left|top|right|bottom" height="140"
33 max_length="700" name="msg_form" width="420" /> 33 left="12" max_length="700" name="msg_form" width="420">Type your message here.</text_editor>
34 <check_box bottom_delta="-20" follows="left|bottom" height="18" label="Publish on the web" 34 <check_box bottom_delta="-20" follows="left|bottom" height="18" label="Publish on the web"
35 left="10" name="allow_publish_check" 35 left="10" name="allow_publish_check"
36 tool_tip="Publish this postcard on the web." /> 36 tool_tip="Publish this postcard on the web." />
@@ -47,4 +47,8 @@
47 name="cancel_btn" width="150" /> 47 name="cancel_btn" width="150" />
48 <button bottom_delta="0" follows="right|bottom" height="20" label="Send" left="285" 48 <button bottom_delta="0" follows="right|bottom" height="20" label="Send" left="285"
49 name="send_btn" width="150" /> 49 name="send_btn" width="150" />
50
51 <text hidden="true" name="default_subject"> Postcard from Second Life. </text>
52 <text hidden="true" name="default_message"> Check this out! </text>
53
50</floater> 54</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_texture_ctrl.xml b/linden/indra/newview/skins/xui/en-us/floater_texture_ctrl.xml
index a16448d..d0ae5da 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_texture_ctrl.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_texture_ctrl.xml
@@ -54,4 +54,5 @@
54 halign="center" height="20" hidden="false" label="Select" 54 halign="center" height="20" hidden="false" label="Select"
55 label_selected="Select" left="290" mouse_opaque="true" name="Select" 55 label_selected="Select" left="290" mouse_opaque="true" name="Select"
56 scale_image="true" width="100" /> 56 scale_image="true" width="100" />
57 <text hidden="true" name="pick title">Pick: </text>
57</floater> 58</floater>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_tools.xml b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
index 835edec..305a5ef 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_tools.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_tools.xml
@@ -97,9 +97,10 @@
97 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 97 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16"
98 hidden="false" initial_value="false" label="Select Texture" left="4" 98 hidden="false" initial_value="false" label="Select Texture" left="4"
99 mouse_opaque="true" name="radio select face" radio_style="true" width="114" /> 99 mouse_opaque="true" name="radio select face" radio_style="true" width="114" />
100 <check_box bottom_delta="-15" follows="left|top" font="SansSerifSmall" height="16" 100 <check_box bottom_delta="-15" control_name="EditLinkedParts" follows="left|top"
101 hidden="false" initial_value="false" label="Edit linked parts" left="4" 101 font="SansSerifSmall" height="16" hidden="false" initial_value="false"
102 mouse_opaque="true" name="checkbox edit linked parts" width="114" /> 102 label="Edit linked parts" left="4" mouse_opaque="true"
103 name="checkbox edit linked parts" width="114" />
103 <check_box bottom="-79" control_name="SnapEnabled" follows="left|top" 104 <check_box bottom="-79" control_name="SnapEnabled" follows="left|top"
104 font="SansSerifSmall" height="16" hidden="false" initial_value="true" 105 font="SansSerifSmall" height="16" hidden="false" initial_value="true"
105 label="Use Grid" left="118" mouse_opaque="true" 106 label="Use Grid" left="118" mouse_opaque="true"
diff --git a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
index 6d4840f..c14ba4b 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
@@ -691,6 +691,13 @@
691 </menu_item_call> 691 </menu_item_call>
692 <menu_item_separator bottom="-243" enabled="true" height="8" hidden="false" label="-----------" 692 <menu_item_separator bottom="-243" enabled="true" height="8" hidden="false" label="-----------"
693 left="0" mouse_opaque="true" name="separator3" width="250" /> 693 left="0" mouse_opaque="true" name="separator3" width="250" />
694 <menu_item_check bottom="" enabled="false" height="" hidden="false" label="Edit Linked Parts"
695 left="" mouse_opaque="true" name="Edit Linked Parts" shortcut="" width="">
696 <on_click function="ToggleControl" userdata="EditLinkedParts" />
697 <on_click function="Tools.EditLinkedParts" userdata="" />
698 <on_check control="EditLinkedParts" />
699 <on_enable function="Tools.EnableToolNotPie" />
700 </menu_item_check>
694 <menu_item_call bottom="-262" enabled="false" height="19" hidden="false" label="Link" left="0" 701 <menu_item_call bottom="-262" enabled="false" height="19" hidden="false" label="Link" left="0"
695 mouse_opaque="true" name="Link" shortcut="control|L" width="250"> 702 mouse_opaque="true" name="Link" shortcut="control|L" width="250">
696 <on_click function="Tools.Link" userdata="" /> 703 <on_click function="Tools.Link" userdata="" />
diff --git a/linden/indra/newview/skins/xui/en-us/notify.xml b/linden/indra/newview/skins/xui/en-us/notify.xml
index 54451ab..8e51bcb 100644
--- a/linden/indra/newview/skins/xui/en-us/notify.xml
+++ b/linden/indra/newview/skins/xui/en-us/notify.xml
@@ -634,7 +634,7 @@ Please notify the vendor from whom you purchased this item.
634 Failed to find [TYPE] named [DESC] in database. 634 Failed to find [TYPE] named [DESC] in database.
635 </message> 635 </message>
636 </notify> 636 </notify>
637 <notify name="ScriptTakeMoney" tip="false"> 637 <notify name="ScriptTakeMoney" tip="false" caution="true">
638 <message name="message"> 638 <message name="message">
639 Take Linden dollars (L$) from you 639 Take Linden dollars (L$) from you
640 </message> 640 </message>
@@ -689,6 +689,7 @@ Please notify the vendor from whom you purchased this item.
689 Control your camera 689 Control your camera
690 </message> 690 </message>
691 </notify> 691 </notify>
692 <!-- the normal permissions prompt -->
692 <notify name="ScriptQuestion" tip="false"> 693 <notify name="ScriptQuestion" tip="false">
693 <message name="message"> 694 <message name="message">
694 &apos;[OBJECTNAME]&apos;, an object owned by &apos;[NAME]&apos;, would like to: 695 &apos;[OBJECTNAME]&apos;, an object owned by &apos;[NAME]&apos;, would like to:
@@ -703,7 +704,39 @@ Is this OK?
703 No 704 No
704 </option> 705 </option>
705 </notify> 706 </notify>
706 <notify name="ScriptDialog" tip="false"> 707 <!-- the special chat messages to log when caution permissions have been granted or denied -->
708 <notify name="ScriptQuestionCautionChatGranted" tip="false">
709 <message name="message">&apos;[OBJECTNAME]&apos;, an object owned by &apos;[OWNERNAME]&apos;, located in [REGIONNAME] at [REGIONPOS], has been granted permission to: [PERMISSIONS].</message>
710 </notify>
711 <notify name="ScriptQuestionCautionChatDenied" tip="false">
712 <message name="message">&apos;[OBJECTNAME]&apos;, an object owned by &apos;[OWNERNAME]&apos;, located in [REGIONNAME] at [REGIONPOS], has been denied permission to: [PERMISSIONS].</message>
713 </notify>
714 <!-- the special title to display at the top of a caution permissions prompt -->
715 <notify name="ScriptQuestionCautionWarn" tip="false">
716 <message name="message">An object wants permission to take Linden dollars (L$) from your account.</message>
717 </notify>
718 <!-- the caution permssions prompt, when auto-deny is disabled -->
719 <notify name="ScriptQuestionCaution" tip="false" caution="true">
720 <message name="message">
721 &apos;[OBJECTNAME]&apos;, an object owned by &apos;[NAME]&apos;, would like to:
722
723[QUESTIONS]
724If you do not trust this object and its creator, you should deny the request. For additional information, click the Details button.
725
726Grant this request?
727 </message>
728 <option name="Grant">
729 Grant
730 </option>
731 <option name="Deny" default="true">
732 Deny
733 </option>
734 <!-- details button MUST be the last button -->
735 <option name="Details">
736 Details...
737 </option>
738 </notify>
739 <notify name="ScriptDialog" tip="false">
707 <message name="message"> 740 <message name="message">
708 [FIRST] [LAST]&apos;s &apos;[TITLE]&apos; 741 [FIRST] [LAST]&apos;s &apos;[TITLE]&apos;
709[MESSAGE] 742[MESSAGE]
@@ -815,6 +848,20 @@ Flexible objects may not be physical and must be phantom
815until the flexible checkbox is unchecked. 848until the flexible checkbox is unchecked.
816 </message> 849 </message>
817 </notify> 850 </notify>
851 <notify name="FirstDebugMenus" tip="false">
852 <message name="message">
853 You have enabled the Client and Server debugging menus.
854These menus contain features useful for developers debugging Second Life.
855To toggle these menus on and off press Ctrl-Alt-D. On a Mac press Cmd-Opt-Shift-D.
856 </message>
857 </notify>
858 <notify name="FirstSculptedPrim" tip="false">
859 <message name="message">
860 You are editting a sculpted prim.
861Sculpted prims require a special texture to specify their shape.
862You can find example sculpted textures in the system library.
863 </message>
864 </notify>
818 <notify name="MaxListSelectMessage" tip="true"> 865 <notify name="MaxListSelectMessage" tip="true">
819 <message name="message"> 866 <message name="message">
820 You may only select up to [MAX_SELECT] items 867 You may only select up to [MAX_SELECT] items
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml
index 4b76b18..20ccfe9 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_chat.xml
@@ -38,21 +38,26 @@
38 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 38 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
39 can_apply_immediately="true" color="1 1 1 1" control_name="AgentChatColor" 39 can_apply_immediately="true" color="1 1 1 1" control_name="AgentChatColor"
40 enabled="true" follows="left|top" height="56" hidden="false" label="Users" 40 enabled="true" follows="left|top" height="56" hidden="false" label="Users"
41 left="210" mouse_opaque="true" name="users" width="40" /> 41 left="200" mouse_opaque="true" name="users" width="40" />
42 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 42 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
43 can_apply_immediately="true" color="0.7 0.9 0.7 1" 43 can_apply_immediately="true" color="0.7 0.9 0.7 1"
44 control_name="ObjectChatColor" enabled="true" follows="left|top" 44 control_name="ObjectChatColor" enabled="true" follows="left|top"
45 height="56" hidden="false" label="Objects" left="272" mouse_opaque="true" 45 height="56" hidden="false" label="Objects" left="252" mouse_opaque="true"
46 name="objects" width="40" /> 46 name="objects" width="40" />
47 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 47 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
48 can_apply_immediately="true" color="0.7 0.9 0.7 1"
49 control_name="llOwnerSayChatColor" enabled="true" follows="left|top"
50 height="56" hidden="false" label="Owner" left="304" mouse_opaque="true"
51 name="objects" width="40" />
52 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
48 can_apply_immediately="true" color="0 0 0 1" 53 can_apply_immediately="true" color="0 0 0 1"
49 control_name="BackgroundChatColor" enabled="true" follows="left|top" 54 control_name="BackgroundChatColor" enabled="true" follows="left|top"
50 height="56" hidden="false" label="Bubble" left="334" mouse_opaque="true" 55 height="56" hidden="false" label="Bubble" left="356" mouse_opaque="true"
51 name="background" width="40" /> 56 name="background" width="40" />
52 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140" 57 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-140"
53 can_apply_immediately="true" color="0.6 0.6 1 1" 58 can_apply_immediately="true" color="0.6 0.6 1 1"
54 control_name="HTMLLinkColor" enabled="true" follows="left|top" height="56" 59 control_name="HTMLLinkColor" enabled="true" follows="left|top" height="56"
55 hidden="false" label="URLs" left="396" mouse_opaque="true" name="links" 60 hidden="false" label="URLs" left="408" mouse_opaque="true" name="links"
56 width="40" /> 61 width="40" />
57 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 62 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
58 bottom="-167" drop_shadow_visible="true" enabled="true" follows="left|top" 63 bottom="-167" drop_shadow_visible="true" enabled="true" follows="left|top"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_im.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_im.xml
index e787d2a..73563ae 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_im.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_im.xml
@@ -33,34 +33,57 @@
33 font="SansSerifSmall" height="16" hidden="false" initial_value="false" 33 font="SansSerifSmall" height="16" hidden="false" initial_value="false"
34 label="Show timestamps in IM" left="148" mouse_opaque="true" 34 label="Show timestamps in IM" left="148" mouse_opaque="true"
35 name="show_timestamps_check" radio_style="false" width="237" /> 35 name="show_timestamps_check" radio_style="false" width="237" />
36 <check_box bottom="-105" control_name="LogInstantMessages" enabled="true" 36 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
37 bottom="-105" drop_shadow_visible="true" enabled="true" follows="left|top"
38 font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
39 left="12" mouse_opaque="false" name="text_box3" v_pad="0" width="128">
40 Busy Mode Response:
41 </text>
42 <text_editor type="string" length="1" bottom="-165" embedded_items="false" enabled="true" follows="left|top"
43 font="SansSerifSmall" height="70" hidden="false" left="148"
44 max_length="255" mouse_opaque="true" name="busy_response" width="330"
45 word_wrap="true" />
46 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
47 bottom="-185" drop_shadow_visible="true" enabled="true" follows="left|top"
48 font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
49 left="12" mouse_opaque="false" name="text_box3" v_pad="0" width="128">
50 Logging Options:
51 </text>
52 <check_box bottom="-205" control_name="LogInstantMessages" enabled="true"
37 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 53 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
38 initial_value="false" label="Log Instant Messages" left="148" 54 initial_value="false" label="Log Instant Messages" left="148"
39 mouse_opaque="true" name="log_instant_messages" radio_style="false" 55 mouse_opaque="true" name="log_instant_messages" radio_style="false"
40 width="237" /> 56 width="237" />
41 <check_box bottom="-125" control_name="LogChat" enabled="true" follows="left|top" 57 <check_box bottom="-225" control_name="IMLogTimestamp" enabled="true"
58 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
59 initial_value="false" label="Show timestamps in IM Log" left="148"
60 mouse_opaque="true" name="log_instant_messages_timestamp" radio_style="false"
61 width="237" />
62 <check_box bottom="-245" control_name="LogShowHistory" enabled="true" follows="left|top"
63 font="SansSerifSmall" height="16" hidden="false" initial_value="false"
64 label="Show end of last IM conversation" left="148" mouse_opaque="true"
65 name="log_show_history" radio_style="false" width="237" />
66 <check_box bottom="-265" control_name="LogChat" enabled="true" follows="left|top"
42 font="SansSerifSmall" height="16" hidden="false" initial_value="false" 67 font="SansSerifSmall" height="16" hidden="false" initial_value="false"
43 label="Log Chat" left="148" mouse_opaque="true" name="log_chat" 68 label="Log Chat" left="148" mouse_opaque="true" name="log_chat"
44 radio_style="false" width="237" /> 69 radio_style="false" width="237" />
45 <check_box bottom="-145" control_name="LogShowHistory" enabled="true" follows="left|top" 70 <check_box bottom="-285" control_name="LogChatTimestamp" enabled="true" follows="left|top"
46 font="SansSerifSmall" height="16" hidden="false" initial_value="false" 71 font="SansSerifSmall" height="16" hidden="false" initial_value="false"
47 label="Show end of last IM conversation" left="148" mouse_opaque="true" 72 label="Show timestamps in Chat Log" left="148" mouse_opaque="true" name="log_chat_timestamp"
48 name="log_show_history" radio_style="false" width="237" /> 73 radio_style="false" width="237" />
49 <button bottom="-167" follows="right|bottom" font="SansSerif" halign="center" 74 <check_box bottom="-305" control_name="LogChatIM" enabled="true" follows="left|top"
75 font="SansSerifSmall" height="16" hidden="false" initial_value="false"
76 label="Show incoming IM in Chat Log" left="148" mouse_opaque="true" name="log_chat_IM"
77 radio_style="false" width="237" />
78 <check_box bottom="-325" control_name="LogTimestampDate" enabled="true" follows="left|top"
79 font="SansSerifSmall" height="16" hidden="false" initial_value="false"
80 label="Include Date with Timestamp" left="148" mouse_opaque="true" name="log_date_timestamp"
81 radio_style="false" width="237" />
82 <button bottom="-347" follows="right|bottom" font="SansSerif" halign="center"
50 height="20" label="Change Path" label_selected="Change Path" left="170" 83 height="20" label="Change Path" label_selected="Change Path" left="170"
51 mouse_opaque="true" name="log_path_button" width="90" /> 84 mouse_opaque="true" name="log_path_button" width="90" />
52 <line_editor border_drop_shadow_visible="false" border_visible="false" bottom="-166" 85 <line_editor border_drop_shadow_visible="false" border_visible="false" bottom="-346"
53 drop_shadow_visible="true" enabled="false" follows="top|left|right" 86 drop_shadow_visible="true" enabled="false" follows="top|left|right"
54 font="SansSerifSmall" halign="right" height="19" left="248" 87 font="SansSerifSmall" halign="right" height="19" left="248"
55 max_length="254" mouse_opaque="false" name="log_path_string" right="-20" /> 88 max_length="254" mouse_opaque="false" name="log_path_string" right="-20" />
56 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
57 bottom="-195" drop_shadow_visible="true" enabled="true" follows="left|top"
58 font="SansSerifSmall" h_pad="0" halign="left" height="10" hidden="false"
59 left="12" mouse_opaque="false" name="text_box3" v_pad="0" width="128">
60 Busy Mode Response:
61 </text>
62 <text_editor type="string" length="1" bottom="-255" embedded_items="false" enabled="true" follows="left|top"
63 font="SansSerifSmall" height="70" hidden="false" left="148"
64 max_length="255" mouse_opaque="true" name="busy_response" width="330"
65 word_wrap="true" />
66</panel> 89</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml
index 24c3b19..f471256 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_popups.xml
@@ -4,13 +4,13 @@
4 <text bottom="-20" follows="top|left" left="15" width="300"> 4 <text bottom="-20" follows="top|left" left="15" width="300">
5 Do not show popups: 5 Do not show popups:
6 </text> 6 </text>
7 <scroll_list follows="top|left" height="100" left="15" name="disabled_popups" width="480" /> 7 <scroll_list follows="top|left" height="88" left="15" name="disabled_popups" width="480" />
8 <button follows="top|left" height="20" label="Enable this popup" left="15" 8 <button follows="top|left" height="20" label="Enable this popup" left="15"
9 name="enable_popup" width="150" /> 9 name="enable_popup" width="150" />
10 <text follows="top|left" left="15" width="128"> 10 <text follows="top|left" left="15" width="128">
11 Show popups: 11 Show popups:
12 </text> 12 </text>
13 <scroll_list follows="top|left" height="100" left="15" name="enabled_popups" width="480" /> 13 <scroll_list follows="top|left" height="88" left="15" name="enabled_popups" width="480" />
14 14
15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 15 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
16 bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top" 16 bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top"
@@ -32,6 +32,12 @@
32 width="270" /> 32 width="270" />
33 33
34 <button bottom_delta="-35" follows="top|left" height="20" 34 <button bottom_delta="-35" follows="top|left" height="20"
35 label="Reset &apos;Show next time&apos; Dialogs..." left="15" 35 label="Show all &apos;Skip next time&apos; Dialogs..." left="15"
36 name="reset_dialogs_btn" width="210" /> 36 name="reset_dialogs_btn" width="210"
37 tool_tip="Enable all of the optional popups and 'first time use' notifications."/>
38
39 <button bottom_delta="0" follows="top|right" height="20"
40 label="Skip all &apos;Skip next time&apos; Dialogs..." left="-225"
41 name="skip_dialogs_btn" width="210"
42 tool_tip="Disable all of the optional popups and 'first time use' notifications."/>
37</panel> 43</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml b/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml
index b5c6858..fb917f6 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_debug.xml
@@ -53,7 +53,7 @@
53 tool_tip="Give 2 minute countdown and restart region" width="100" /> 53 tool_tip="Give 2 minute countdown and restart region" width="100" />
54 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 54 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
55 left="120" name="restart_help" width="18" /> 55 left="120" name="restart_help" width="18" />
56 <button bottom_delta="-20" follows="left|top" height="20" label="Cancel Restart" 56 <button bottom_delta="-20" follows="left|top" height="20" label="Delay Restart"
57 left="10" name="cancel_restart_btn" tool_tip="Cancel region restart" 57 left="10" name="cancel_restart_btn" tool_tip="Delay region restart by one hour"
58 width="100" /> 58 width="100" />
59</panel> 59</panel>
diff --git a/linden/indra/newview/viewer.cpp b/linden/indra/newview/viewer.cpp
index 2f05754..7ff6cc3 100644
--- a/linden/indra/newview/viewer.cpp
+++ b/linden/indra/newview/viewer.cpp
@@ -81,7 +81,9 @@
81 #if LL_LINUX 81 #if LL_LINUX
82 # include <dlfcn.h> // RTLD_LAZY 82 # include <dlfcn.h> // RTLD_LAZY
83 # include <execinfo.h> // backtrace - glibc only 83 # include <execinfo.h> // backtrace - glibc only
84 # ifndef LL_ELFBIN
84 #define LL_ELFBIN 1 85 #define LL_ELFBIN 1
86 # endif // LL_ELFBIN
85 # if LL_ELFBIN 87 # if LL_ELFBIN
86 # include <cxxabi.h> // for symbol demangling 88 # include <cxxabi.h> // for symbol demangling
87 # include "ELFIO.h" // for better backtraces 89 # include "ELFIO.h" // for better backtraces
@@ -189,6 +191,7 @@
189#include "llnotify.h" 191#include "llnotify.h"
190#include "llselectmgr.h" 192#include "llselectmgr.h"
191#include "llsky.h" 193#include "llsky.h"
194#include "llsrv.h"
192#include "llstartup.h" 195#include "llstartup.h"
193#include "llstatusbar.h" 196#include "llstatusbar.h"
194#include "llsurface.h" 197#include "llsurface.h"
@@ -337,8 +340,7 @@ static EUserServerDomain UserServerDefaultChoice = USERSERVER_DMZ;
337BOOL gHackGodmode = FALSE; 340BOOL gHackGodmode = FALSE;
338#endif 341#endif
339 342
340// Only used if not empty. Otherwise uses value from table above. 343std::vector<std::string> gLoginURIs;
341static std::string gLoginURI;
342static std::string gHelperURI; 344static std::string gHelperURI;
343 345
344LLAgent gAgent; 346LLAgent gAgent;
@@ -382,7 +384,7 @@ LLUUID gViewerDigest; // MD5 digest of the viewer's executable file.
382LLPumpIO* gServicePump = NULL; 384LLPumpIO* gServicePump = NULL;
383S32 gNumSessions = 0; 385S32 gNumSessions = 0;
384 386
385BOOL gAllowAFK = TRUE; 387BOOL gAllowIdleAFK = TRUE;
386F32 gAFKTimeout = DEFAULT_AFK_TIMEOUT; 388F32 gAFKTimeout = DEFAULT_AFK_TIMEOUT;
387F32 gMouseSensitivity = 3.f; 389F32 gMouseSensitivity = 3.f;
388BOOL gInvertMouse = FALSE; 390BOOL gInvertMouse = FALSE;
@@ -2397,7 +2399,7 @@ static inline BOOL do_elfio_glibc_backtrace()
2397 } 2399 }
2398 // print offset from symbol start 2400 // print offset from symbol start
2399 fprintf(StraceFile, 2401 fprintf(StraceFile,
2400 "+0x%x) [%p]\n", 2402 "+0x%lx) [%p]\n",
2401 uintptr_t(array[btpos]) - 2403 uintptr_t(array[btpos]) -
2402 value, 2404 value,
2403 array[btpos]); 2405 array[btpos]);
@@ -2429,8 +2431,57 @@ static inline BOOL do_elfio_glibc_backtrace()
2429#endif // LL_ELFBIN 2431#endif // LL_ELFBIN
2430#endif // LL_LINUX 2432#endif // LL_LINUX
2431 2433
2434/* Report whether we're being run under the control of a debugger. */
2435static inline bool being_debugged()
2436{
2437 static enum {unknown, no, yes} debugged = unknown;
2438
2439 if (debugged == unknown)
2440 {
2441#if LL_LINUX
2442 pid_t ppid = getppid();
2443 char *name;
2444 int ret;
2445
2446 ret = asprintf(&name, "/proc/%d/exe", ppid);
2447 if (ret != -1)
2448 {
2449 char buf[1024];
2450 size_t n;
2451
2452 n = readlink(name, buf, sizeof(buf) - 1);
2453 if (n != -1)
2454 {
2455 char *base = strrchr(buf, '/');
2456 buf[n + 1] = '\0';
2457 if (base == NULL)
2458 {
2459 base = buf;
2460 } else {
2461 base += 1;
2462 }
2463
2464 if (strcmp(base, "gdb") == 0)
2465 {
2466 debugged = yes;
2467 }
2468 }
2469 free(name);
2470 }
2471#endif // LL_LINUX
2472 }
2473
2474 return debugged == yes;
2475}
2476
2432void viewer_crash_callback() 2477void viewer_crash_callback()
2433{ 2478{
2479 // This will drop us into the debugger.
2480 if (being_debugged())
2481 {
2482 abort();
2483 }
2484
2434 // Returns whether a dialog was shown. 2485 // Returns whether a dialog was shown.
2435 // Only do the logic in here once 2486 // Only do the logic in here once
2436 if (gReportedCrash) 2487 if (gReportedCrash)
@@ -3483,7 +3534,7 @@ void idle_network()
3483void idle_afk_check() 3534void idle_afk_check()
3484{ 3535{
3485 // check idle timers 3536 // check idle timers
3486 if (gAwayTriggerTimer.getElapsedTimeF32() > gAFKTimeout) 3537 if (gAllowIdleAFK && (gAwayTriggerTimer.getElapsedTimeF32() > gAFKTimeout))
3487 { 3538 {
3488 gAgent.setAFK(); 3539 gAgent.setAFK();
3489 } 3540 }
@@ -4970,7 +5021,7 @@ void saved_settings_to_globals()
4970 gAgent.mHideGroupTitle = gSavedSettings.getBOOL("RenderHideGroupTitle"); 5021 gAgent.mHideGroupTitle = gSavedSettings.getBOOL("RenderHideGroupTitle");
4971 5022
4972 gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc"); 5023 gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
4973 gAllowAFK = gSavedSettings.getBOOL("AllowAFK"); 5024 gAllowIdleAFK = gSavedSettings.getBOOL("AllowIdleAFK");
4974 gAFKTimeout = gSavedSettings.getF32("AFKTimeout"); 5025 gAFKTimeout = gSavedSettings.getF32("AFKTimeout");
4975 gMouseSensitivity = gSavedSettings.getF32("MouseSensitivity"); 5026 gMouseSensitivity = gSavedSettings.getF32("MouseSensitivity");
4976 gInvertMouse = gSavedSettings.getBOOL("InvertMouse"); 5027 gInvertMouse = gSavedSettings.getBOOL("InvertMouse");
@@ -5044,7 +5095,7 @@ void cleanup_saved_settings()
5044 5095
5045 gSavedSettings.setBOOL("DebugWindowProc", gDebugWindowProc); 5096 gSavedSettings.setBOOL("DebugWindowProc", gDebugWindowProc);
5046 5097
5047 gSavedSettings.setBOOL("AllowAFK", gAllowAFK); 5098 gSavedSettings.setBOOL("AllowIdleAFK", gAllowIdleAFK);
5048 gSavedSettings.setBOOL("ShowObjectUpdates", gShowObjectUpdates); 5099 gSavedSettings.setBOOL("ShowObjectUpdates", gShowObjectUpdates);
5049 5100
5050 if (!gNoRender) 5101 if (!gNoRender)
@@ -5483,7 +5534,14 @@ void catch_signals()
5483 // Handle the signals that default to causing a core image to be created, as per the man page on signal(2). 5534 // Handle the signals that default to causing a core image to be created, as per the man page on signal(2).
5484 signal(SIGILL, signal_handlers); 5535 signal(SIGILL, signal_handlers);
5485 signal(SIGTRAP, signal_handlers); 5536 signal(SIGTRAP, signal_handlers);
5486 signal(SIGABRT, signal_handlers); 5537 if (being_debugged())
5538 {
5539 // If we're being run under the control of a debugger, give
5540 // ourselves a way to bail into the debugger.
5541 signal(SIGABRT, SIG_DFL);
5542 } else {
5543 signal(SIGABRT, signal_handlers);
5544 }
5487 signal(SIGFPE, signal_handlers); 5545 signal(SIGFPE, signal_handlers);
5488 signal(SIGBUS, signal_handlers); 5546 signal(SIGBUS, signal_handlers);
5489 signal(SIGSEGV, signal_handlers); 5547 signal(SIGSEGV, signal_handlers);
@@ -5658,8 +5716,7 @@ int parse_args(int argc, char **argv)
5658 } 5716 }
5659 else if (!strcmp(argv[j], "-loginuri") && (++j < argc)) 5717 else if (!strcmp(argv[j], "-loginuri") && (++j < argc))
5660 { 5718 {
5661 gLoginURI = argv[j]; 5719 gLoginURIs.push_back(utf8str_trim(argv[j]));
5662 gLoginURI = utf8str_trim(gLoginURI);
5663 } 5720 }
5664 else if (!strcmp(argv[j], "-helperuri") && (++j < argc)) 5721 else if (!strcmp(argv[j], "-helperuri") && (++j < argc))
5665 { 5722 {
@@ -5934,13 +5991,13 @@ void LLURLSimString::setString(const LLString& url)
5934// static 5991// static
5935S32 LLURLSimString::parseGridIdx(const LLString& in_string, S32 idx0, S32* res, S32 max) 5992S32 LLURLSimString::parseGridIdx(const LLString& in_string, S32 idx0, S32* res, S32 max)
5936{ 5993{
5937 if ((std::string::size_type)idx0 == LLString::npos || in_string[idx0] != '/') 5994 if (idx0 == INT_MAX || in_string[idx0] != '/')
5938 { 5995 {
5939 return LLString::npos; // parse error 5996 return INT_MAX; // parse error
5940 } 5997 }
5941 idx0++; 5998 idx0++;
5942 std::string::size_type idx1 = in_string.find_first_of('/', idx0); 5999 std::string::size_type idx1 = in_string.find_first_of('/', idx0);
5943 S32 len = (idx1 == LLString::npos) ? LLString::npos : idx1-idx0; 6000 std::string::size_type len = (idx1 == LLString::npos) ? LLString::npos : idx1-idx0;
5944 LLString tstring = in_string.substr(idx0,len); 6001 LLString tstring = in_string.substr(idx0,len);
5945 S32 val = atoi(tstring.c_str()); 6002 S32 val = atoi(tstring.c_str());
5946 *res = llclamp(val,0,max); 6003 *res = llclamp(val,0,max);
@@ -5964,7 +6021,7 @@ bool LLURLSimString::parse()
5964 idx0 = sInstance.mSimString.find_first_not_of('/'); // strip any bogus initial '/' 6021 idx0 = sInstance.mSimString.find_first_not_of('/'); // strip any bogus initial '/'
5965 if (idx0 == LLString::npos) idx0 = 0; 6022 if (idx0 == LLString::npos) idx0 = 0;
5966 idx1 = sInstance.mSimString.find_first_of('/', idx0); 6023 idx1 = sInstance.mSimString.find_first_of('/', idx0);
5967 S32 len = (idx1 == LLString::npos) ? LLString::npos : idx1-idx0; 6024 std::string::size_type len = (idx1 == LLString::npos) ? LLString::npos : idx1-idx0;
5968 LLString tstring = sInstance.mSimString.substr(idx0,len); 6025 LLString tstring = sInstance.mSimString.substr(idx0,len);
5969 char* curlstr = curl_unescape(tstring.c_str(), tstring.size()); 6026 char* curlstr = curl_unescape(tstring.c_str(), tstring.size());
5970 sInstance.mSimName = LLString(curlstr); 6027 sInstance.mSimName = LLString(curlstr);
@@ -6577,14 +6634,14 @@ void cleanup_app()
6577 end_messaging_system(); 6634 end_messaging_system();
6578} 6635}
6579 6636
6580const std::string& getLoginURI() 6637const std::vector<std::string>& getLoginURIs()
6581{ 6638{
6582 if (gLoginURI.empty()) 6639 if (gLoginURIs.empty())
6583 { 6640 {
6584 // not specified on the command line, use value from table 6641 // not specified on the command line, use value from table
6585 gLoginURI = gUserServerDomainName[gUserServerChoice].mLoginURI; 6642 gLoginURIs = LLSRV::rewriteURI(gUserServerDomainName[gUserServerChoice].mLoginURI);
6586 } 6643 }
6587 return gLoginURI; 6644 return gLoginURIs;
6588} 6645}
6589 6646
6590const std::string& getHelperURI() 6647const std::string& getHelperURI()
diff --git a/linden/indra/newview/viewer.h b/linden/indra/newview/viewer.h
index 141206c..22edc73 100644
--- a/linden/indra/newview/viewer.h
+++ b/linden/indra/newview/viewer.h
@@ -135,7 +135,7 @@ extern BOOL gDisplayNearestWater;
135extern BOOL gDisplayFOV; 135extern BOOL gDisplayFOV;
136extern BOOL gForceRenderLandFence; 136extern BOOL gForceRenderLandFence;
137 137
138extern BOOL gAllowAFK; 138extern BOOL gAllowIdleAFK;
139extern BOOL gShowObjectUpdates; 139extern BOOL gShowObjectUpdates;
140 140
141extern BOOL gTeleportDisplay; 141extern BOOL gTeleportDisplay;
@@ -331,7 +331,7 @@ const LLUUID& agent_get_session_id();
331void agent_send_reliable_message(); 331void agent_send_reliable_message();
332 332
333// Helpers for URIs 333// Helpers for URIs
334const std::string& getLoginURI(); 334const std::vector<std::string>& getLoginURIs();
335const std::string& getHelperURI(); 335const std::string& getHelperURI();
336 336
337#endif 337#endif
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index d22a7b5..2da4a22 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -430,7 +430,6 @@ class Linux_i686Manifest(LinuxManifest):
430 self.path("libssl.so.0.9.7") 430 self.path("libssl.so.0.9.7")
431 self.path("libexpat.so.1") 431 self.path("libexpat.so.1")
432# self.path("libstdc++.so.6") 432# self.path("libstdc++.so.6")
433 self.path("libelfio.so")
434 self.path("libuuid.so", "libuuid.so.1") 433 self.path("libuuid.so", "libuuid.so.1")
435 self.path("libSDL-1.2.so.0") 434 self.path("libSDL-1.2.so.0")
436 self.path("libtcmalloc.so.0") 435 self.path("libtcmalloc.so.0")
@@ -442,7 +441,8 @@ class Linux_i686Manifest(LinuxManifest):
442class Linux_x86_64Manifest(LinuxManifest): 441class Linux_x86_64Manifest(LinuxManifest):
443 def construct(self): 442 def construct(self):
444 super(Linux_x86_64Manifest, self).construct() 443 super(Linux_x86_64Manifest, self).construct()
445 self.path("secondlife-x86_64-bin-stripped","bin/secondlife-bin") 444 self.path("secondlife-x86_64-bin-stripped","bin/do-not-directly-run-secondlife-bin")
445# self.path("../linux_crash_logger/linux-crash-logger-x86_64-bin-stripped","linux-crash-logger.bin")
446 # TODO: I get the sense that this isn't fully fleshed out 446 # TODO: I get the sense that this isn't fully fleshed out
447 if self.prefix("../../libraries/x86_64-linux/lib_release_client", "lib"): 447 if self.prefix("../../libraries/x86_64-linux/lib_release_client", "lib"):
448# self.path("libkdu_v42R.so") 448# self.path("libkdu_v42R.so")
diff --git a/linden/indra/test/llhttpnode_tut.cpp b/linden/indra/test/llhttpnode_tut.cpp
index fb35f77..59d339c 100644
--- a/linden/indra/test/llhttpnode_tut.cpp
+++ b/linden/indra/test/llhttpnode_tut.cpp
@@ -1,5 +1,5 @@
1/** 1/**
2 * @file lliohttpserver_tut.cpp 2 * @file lliohttpnode_tut.cpp
3 * @date May 2006 3 * @date May 2006
4 * @brief HTTP server unit tests 4 * @brief HTTP server unit tests
5 * 5 *
diff --git a/linden/indra/test/llmessageconfig_tut.cpp b/linden/indra/test/llmessageconfig_tut.cpp
index 07e8e72..1d11cbf 100644
--- a/linden/indra/test/llmessageconfig_tut.cpp
+++ b/linden/indra/test/llmessageconfig_tut.cpp
@@ -39,7 +39,7 @@ namespace tut
39{ 39{
40 ///var/tmp/babbage/dev/message-liberation/etc 40 ///var/tmp/babbage/dev/message-liberation/etc
41 static const char file_name[] = "/tmp/message.xml"; 41 static const char file_name[] = "/tmp/message.xml";
42 static const F32 refreshRate = 6.0*1000.0; // milliseconds 42 static const long refreshRateMillis = 6000;
43 43
44 struct LLMessageConfigTestData { 44 struct LLMessageConfigTestData {
45 45
@@ -65,7 +65,7 @@ namespace tut
65 LLSDSerialize::toPrettyXML(config, file); 65 LLSDSerialize::toPrettyXML(config, file);
66 } 66 }
67 file.close(); 67 file.close();
68 ms_sleep(refreshRate); 68 ms_sleep(refreshRateMillis);
69 LLFrameTimer::updateFrameTime(); 69 LLFrameTimer::updateFrameTime();
70 } 70 }
71 }; 71 };
diff --git a/linden/indra/test/llsdserialize_tut.cpp b/linden/indra/test/llsdserialize_tut.cpp
index 497c529..09097d8 100644
--- a/linden/indra/test/llsdserialize_tut.cpp
+++ b/linden/indra/test/llsdserialize_tut.cpp
@@ -298,12 +298,12 @@ namespace tut
298"Since opening to the public in 2003, it has grown explosively and today is " 298"Since opening to the public in 2003, it has grown explosively and today is "
299"inhabited by nearly 100,000 people from around the globe.\n" 299"inhabited by nearly 100,000 people from around the globe.\n"
300"\n" 300"\n"
301"From the moment you enter the World you’ll discover a vast digital continent, " 301"From the moment you enter the World you'll discover a vast digital continent, "
302"teeming with people, entertainment, experiences and opportunity. Once you’ve " 302"teeming with people, entertainment, experiences and opportunity. Once you've "
303"explored a bit, perhaps you’ll find a perfect parcel of land to build your " 303"explored a bit, perhaps you'll find a perfect parcel of land to build your "
304"house or business.\n" 304"house or business.\n"
305"\n" 305"\n"
306"You’ll also be surrounded by the Creations of your fellow residents. Because " 306"You'll also be surrounded by the Creations of your fellow residents. Because "
307"residents retain the rights to their digital creations, they can buy, sell " 307"residents retain the rights to their digital creations, they can buy, sell "
308"and trade with other residents.\n" 308"and trade with other residents.\n"
309"\n" 309"\n"
diff --git a/linden/indra/test/test.vcproj b/linden/indra/test/test.vcproj
index 5df197a..cb9c7af 100644
--- a/linden/indra/test/test.vcproj
+++ b/linden/indra/test/test.vcproj
@@ -158,7 +158,7 @@
158 Name="VCMIDLTool"/> 158 Name="VCMIDLTool"/>
159 <Tool 159 <Tool
160 Name="VCPostBuildEventTool" 160 Name="VCPostBuildEventTool"
161 CommandLine="$(TargetPath)"/> 161 CommandLine="&quot;$(TargetPath)&quot;"/>
162 <Tool 162 <Tool
163 Name="VCPreBuildEventTool"/> 163 Name="VCPreBuildEventTool"/>
164 <Tool 164 <Tool
diff --git a/linden/libraries/include/llmozlib.h b/linden/libraries/include/llmozlib.h
index 755818b..90717b2 100644
--- a/linden/libraries/include/llmozlib.h
+++ b/linden/libraries/include/llmozlib.h
@@ -1,8 +1,8 @@
1/** 1/**
2 * @file llmozlib.h 2 * @file llmozlib.h
3 * @brief Linden Lab Mozilla wrapper. 3 * @brief Linden Lab Mozilla wrapper.
4 * 4 *
5 * Copyright (c) 2006-2007, Linden Research, Inc. 5 * Copyright (c) 2006-2007, Linden Research, Inc.
6 * 6 *
7 * Second Life Viewer Source Code 7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab 8 * The source code in this file ("Source Code") is provided by Linden Lab
@@ -23,276 +23,276 @@
23 * 23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO 24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE. 26 * COMPLETENESS OR PERFORMANCE.
27 */ 27 */
28 28
29#ifndef LLMOZLIB_H 29#ifndef LLMOZLIB_H
30#define LLMOZLIB_H 30#define LLMOZLIB_H
31 31
32#include <string> 32#include <string>
33#include <map> 33#include <map>
34 34
35class LLEmbeddedBrowser; 35class LLEmbeddedBrowser;
36class LLEmbeddedBrowserWindow; 36class LLEmbeddedBrowserWindow;
37 37
38//////////////////////////////////////////////////////////////////////////////// 38////////////////////////////////////////////////////////////////////////////////
39// data class that is passed with an event 39// data class that is passed with an event
40class LLEmbeddedBrowserWindowEvent 40class LLEmbeddedBrowserWindowEvent
41{ 41{
42 public: 42 public:
43 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn ) : 43 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn ) :
44 mEventWindowId( eventWindowIdIn ) 44 mEventWindowId( eventWindowIdIn )
45 { 45 {
46 }; 46 };
47 47
48 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn, int intValIn ) : 48 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn, int intValIn ) :
49 mEventWindowId( eventWindowIdIn ), 49 mEventWindowId( eventWindowIdIn ),
50 mIntVal( intValIn ) 50 mIntVal( intValIn )
51 { 51 {
52 }; 52 };
53 53
54 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn, std::string stringValIn ) : 54 LLEmbeddedBrowserWindowEvent( int eventWindowIdIn, std::string stringValIn ) :
55 mEventWindowId( eventWindowIdIn ), 55 mEventWindowId( eventWindowIdIn ),
56 mStringVal( stringValIn ) 56 mStringVal( stringValIn )
57 { 57 {
58 }; 58 };
59 59
60 virtual ~LLEmbeddedBrowserWindowEvent() 60 virtual ~LLEmbeddedBrowserWindowEvent()
61 { 61 {
62 }; 62 };
63 63
64 int getEventWindowId() const 64 int getEventWindowId() const
65 { 65 {
66 return mEventWindowId; 66 return mEventWindowId;
67 }; 67 };
68 68
69 int getIntValue() const 69 int getIntValue() const
70 { 70 {
71 return mIntVal; 71 return mIntVal;
72 }; 72 };
73 73
74 std::string getStringValue() const 74 std::string getStringValue() const
75 { 75 {
76 return mStringVal; 76 return mStringVal;
77 }; 77 };
78 78
79 private: 79 private:
80 int mEventWindowId; 80 int mEventWindowId;
81 int mIntVal; 81 int mIntVal;
82 std::string mStringVal; 82 std::string mStringVal;
83}; 83};
84 84
85//////////////////////////////////////////////////////////////////////////////// 85////////////////////////////////////////////////////////////////////////////////
86// Override these methods to observe browser events 86// Override these methods to observe browser events
87class LLEmbeddedBrowserWindowObserver 87class LLEmbeddedBrowserWindowObserver
88{ 88{
89 public: 89 public:
90 virtual ~LLEmbeddedBrowserWindowObserver() { }; 90 virtual ~LLEmbeddedBrowserWindowObserver() { };
91 91
92 typedef LLEmbeddedBrowserWindowEvent EventType; 92 typedef LLEmbeddedBrowserWindowEvent EventType;
93 virtual void onNavigateBegin( const EventType& eventIn ) { }; 93 virtual void onNavigateBegin( const EventType& eventIn ) { };
94 virtual void onNavigateComplete( const EventType& eventIn ) { }; 94 virtual void onNavigateComplete( const EventType& eventIn ) { };
95 virtual void onUpdateProgress( const EventType& eventIn ) { }; 95 virtual void onUpdateProgress( const EventType& eventIn ) { };
96 virtual void onStatusTextChange( const EventType& eventIn ) { }; 96 virtual void onStatusTextChange( const EventType& eventIn ) { };
97 virtual void onLocationChange( const EventType& eventIn ) { }; 97 virtual void onLocationChange( const EventType& eventIn ) { };
98 virtual void onClickLinkHref( const EventType& eventIn ) { }; 98 virtual void onClickLinkHref( const EventType& eventIn ) { };
99 virtual void onClickLinkSecondLife( const EventType& eventIn ) { }; 99 virtual void onClickLinkSecondLife( const EventType& eventIn ) { };
100}; 100};
101 101
102//////////////////////////////////////////////////////////////////////////////// 102////////////////////////////////////////////////////////////////////////////////
103// 103//
104class LLMozLib 104class LLMozLib
105{ 105{
106 public: 106 public:
107 virtual ~LLMozLib(); 107 virtual ~LLMozLib();
108 108
109 // singleton access 109 // singleton access
110 static LLMozLib* getInstance(); 110 static LLMozLib* getInstance();
111 111
112 // housekeeping 112 // housekeeping
113 bool init( std::string applicationDirIn, std::string componentDirIn, std::string profileDirIn ); 113 bool init( std::string applicationDirIn, std::string componentDirIn, std::string profileDirIn );
114 bool reset(); 114 bool reset();
115 bool setHttpProxy( bool enabledIn, std::string addressIn, int portIn ); 115 bool setHttpProxy( bool enabledIn, std::string addressIn, int portIn );
116 bool clearCache(); 116 bool clearCache();
117 bool enableCookies( bool enabledIn ); 117 bool enableCookies( bool enabledIn );
118 bool clearAllCookies(); 118 bool clearAllCookies();
119 bool enablePlugins( bool enabledIn ); 119 bool enablePlugins( bool enabledIn );
120 int getLastError(); 120 int getLastError();
121 const std::string getVersion(); 121 const std::string getVersion();
122 void setBrowserAgentId( std::string idIn ); 122 void setBrowserAgentId( std::string idIn );
123 123
124 // browser window 124 // browser window
125 int createBrowserWindow( void* nativeWindowHandleIn, int browserWindowWidthIn, int browserWindowHeightIn ); 125 int createBrowserWindow( void* nativeWindowHandleIn, int browserWindowWidthIn, int browserWindowHeightIn );
126 bool destroyBrowserWindow( int browserWindowIdIn ); 126 bool destroyBrowserWindow( int browserWindowIdIn );
127 bool setSize( int browserWindowIdIn, int widthIn, int heightIn ); 127 bool setSize( int browserWindowIdIn, int widthIn, int heightIn );
128 bool scrollByLines( int browserWindowIdIn, int linesIn ); 128 bool scrollByLines( int browserWindowIdIn, int linesIn );
129 void setBackgroundColor( int browserWindowIdIn, int redIn, int greenIn, int blueIn ); 129 void setBackgroundColor( int browserWindowIdIn, int redIn, int greenIn, int blueIn );
130 130
131 // observer interface 131 // observer interface
132 bool addObserver( int browserWindowIdIn, LLEmbeddedBrowserWindowObserver* subjectIn ); 132 bool addObserver( int browserWindowIdIn, LLEmbeddedBrowserWindowObserver* subjectIn );
133 bool remObserver( int browserWindowIdIn, LLEmbeddedBrowserWindowObserver* subjectIn ); 133 bool remObserver( int browserWindowIdIn, LLEmbeddedBrowserWindowObserver* subjectIn );
134 134
135 // navigation 135 // navigation
136 bool navigateTo( int browserWindowIdIn, const std::string uriIn ); 136 bool navigateTo( int browserWindowIdIn, const std::string uriIn );
137 bool navigateStop( int browserWindowIdIn ); 137 bool navigateStop( int browserWindowIdIn );
138 bool canNavigateBack( int browserWindowIdIn ); 138 bool canNavigateBack( int browserWindowIdIn );
139 bool navigateBack( int browserWindowIdIn ); 139 bool navigateBack( int browserWindowIdIn );
140 bool canNavigateForward( int browserWindowIdIn ); 140 bool canNavigateForward( int browserWindowIdIn );
141 bool navigateForward( int browserWindowIdIn ); 141 bool navigateForward( int browserWindowIdIn );
142 142
143 // access to rendered bitmap data 143 // access to rendered bitmap data
144 const unsigned char* grabBrowserWindow( int browserWindowIdIn ); 144 const unsigned char* grabBrowserWindow( int browserWindowIdIn );
145 const unsigned char* getBrowserWindowPixels( int browserWindowIdIn ); 145 const unsigned char* getBrowserWindowPixels( int browserWindowIdIn );
146 const int getBrowserWidth( int browserWindowIdIn ); 146 const int getBrowserWidth( int browserWindowIdIn );
147 const int getBrowserHeight( int browserWindowIdIn ); 147 const int getBrowserHeight( int browserWindowIdIn );
148 const int getBrowserDepth( int browserWindowIdIn ); 148 const int getBrowserDepth( int browserWindowIdIn );
149 const int getBrowserRowSpan( int browserWindowIdIn ); 149 const int getBrowserRowSpan( int browserWindowIdIn );
150 150
151 // mouse/keyboard interaction 151 // mouse/keyboard interaction
152 bool mouseDown( int browserWindowIdIn, int xPosIn, int yPosIn ); 152 bool mouseDown( int browserWindowIdIn, int xPosIn, int yPosIn );
153 bool mouseUp( int browserWindowIdIn, int xPosIn, int yPosIn ); 153 bool mouseUp( int browserWindowIdIn, int xPosIn, int yPosIn );
154 bool mouseMove( int browserWindowIdIn, int xPosIn, int yPosIn ); 154 bool mouseMove( int browserWindowIdIn, int xPosIn, int yPosIn );
155 bool keyPress( int browserWindowIdIn, int keyCodeIn ); 155 bool keyPress( int browserWindowIdIn, int keyCodeIn );
156 bool unicodeInput ( int browserWindowIdIn, unsigned long uni_char ); 156 bool unicodeInput ( int browserWindowIdIn, unsigned long uni_char );
157 bool focusBrowser( int browserWindowIdIn, bool focusBrowserIn ); 157 bool focusBrowser( int browserWindowIdIn, bool focusBrowserIn );
158 158
159 private: 159 private:
160 LLMozLib(); 160 LLMozLib();
161 LLEmbeddedBrowserWindow* getBrowserWindowFromWindowId( int browserWindowIdIn ); 161 LLEmbeddedBrowserWindow* getBrowserWindowFromWindowId( int browserWindowIdIn );
162 static LLMozLib* sInstance; 162 static LLMozLib* sInstance;
163 const int mMaxBrowserWindows; 163 const int mMaxBrowserWindows;
164 LLEmbeddedBrowserWindow** mBrowserWindowList; 164 LLEmbeddedBrowserWindow** mBrowserWindowList;
165}; 165};
166 166
167 167
168// Mozilla virtual keycodes. 168// Mozilla virtual keycodes.
169// We don't want to suck in Mozilla headers so we copy these consts 169// We don't want to suck in Mozilla headers so we copy these consts
170// from nsIDOMKeyEvent.idl. 170// from nsIDOMKeyEvent.idl.
171 171
172const unsigned long LL_DOM_VK_CANCEL = 0x03; 172const unsigned long LL_DOM_VK_CANCEL = 0x03;
173const unsigned long LL_DOM_VK_HELP = 0x06; 173const unsigned long LL_DOM_VK_HELP = 0x06;
174const unsigned long LL_DOM_VK_BACK_SPACE = 0x08; 174const unsigned long LL_DOM_VK_BACK_SPACE = 0x08;
175const unsigned long LL_DOM_VK_TAB = 0x09; 175const unsigned long LL_DOM_VK_TAB = 0x09;
176const unsigned long LL_DOM_VK_CLEAR = 0x0C; 176const unsigned long LL_DOM_VK_CLEAR = 0x0C;
177const unsigned long LL_DOM_VK_RETURN = 0x0D; 177const unsigned long LL_DOM_VK_RETURN = 0x0D;
178const unsigned long LL_DOM_VK_ENTER = 0x0E; 178const unsigned long LL_DOM_VK_ENTER = 0x0E;
179const unsigned long LL_DOM_VK_SHIFT = 0x10; 179const unsigned long LL_DOM_VK_SHIFT = 0x10;
180const unsigned long LL_DOM_VK_CONTROL = 0x11; 180const unsigned long LL_DOM_VK_CONTROL = 0x11;
181const unsigned long LL_DOM_VK_ALT = 0x12; 181const unsigned long LL_DOM_VK_ALT = 0x12;
182const unsigned long LL_DOM_VK_PAUSE = 0x13; 182const unsigned long LL_DOM_VK_PAUSE = 0x13;
183const unsigned long LL_DOM_VK_CAPS_LOCK = 0x14; 183const unsigned long LL_DOM_VK_CAPS_LOCK = 0x14;
184const unsigned long LL_DOM_VK_ESCAPE = 0x1B; 184const unsigned long LL_DOM_VK_ESCAPE = 0x1B;
185const unsigned long LL_DOM_VK_SPACE = 0x20; 185const unsigned long LL_DOM_VK_SPACE = 0x20;
186const unsigned long LL_DOM_VK_PAGE_UP = 0x21; 186const unsigned long LL_DOM_VK_PAGE_UP = 0x21;
187const unsigned long LL_DOM_VK_PAGE_DOWN = 0x22; 187const unsigned long LL_DOM_VK_PAGE_DOWN = 0x22;
188const unsigned long LL_DOM_VK_END = 0x23; 188const unsigned long LL_DOM_VK_END = 0x23;
189const unsigned long LL_DOM_VK_HOME = 0x24; 189const unsigned long LL_DOM_VK_HOME = 0x24;
190const unsigned long LL_DOM_VK_LEFT = 0x25; 190const unsigned long LL_DOM_VK_LEFT = 0x25;
191const unsigned long LL_DOM_VK_UP = 0x26; 191const unsigned long LL_DOM_VK_UP = 0x26;
192const unsigned long LL_DOM_VK_RIGHT = 0x27; 192const unsigned long LL_DOM_VK_RIGHT = 0x27;
193const unsigned long LL_DOM_VK_DOWN = 0x28; 193const unsigned long LL_DOM_VK_DOWN = 0x28;
194const unsigned long LL_DOM_VK_PRINTSCREEN = 0x2C; 194const unsigned long LL_DOM_VK_PRINTSCREEN = 0x2C;
195const unsigned long LL_DOM_VK_INSERT = 0x2D; 195const unsigned long LL_DOM_VK_INSERT = 0x2D;
196const unsigned long LL_DOM_VK_DELETE = 0x2E; 196const unsigned long LL_DOM_VK_DELETE = 0x2E;
197 197
198// LL_DOM_VK_0 - LL_DOM_VK_9 match their ASCII values 198// LL_DOM_VK_0 - LL_DOM_VK_9 match their ASCII values
199const unsigned long LL_DOM_VK_0 = 0x30; 199const unsigned long LL_DOM_VK_0 = 0x30;
200const unsigned long LL_DOM_VK_1 = 0x31; 200const unsigned long LL_DOM_VK_1 = 0x31;
201const unsigned long LL_DOM_VK_2 = 0x32; 201const unsigned long LL_DOM_VK_2 = 0x32;
202const unsigned long LL_DOM_VK_3 = 0x33; 202const unsigned long LL_DOM_VK_3 = 0x33;
203const unsigned long LL_DOM_VK_4 = 0x34; 203const unsigned long LL_DOM_VK_4 = 0x34;
204const unsigned long LL_DOM_VK_5 = 0x35; 204const unsigned long LL_DOM_VK_5 = 0x35;
205const unsigned long LL_DOM_VK_6 = 0x36; 205const unsigned long LL_DOM_VK_6 = 0x36;
206const unsigned long LL_DOM_VK_7 = 0x37; 206const unsigned long LL_DOM_VK_7 = 0x37;
207const unsigned long LL_DOM_VK_8 = 0x38; 207const unsigned long LL_DOM_VK_8 = 0x38;
208const unsigned long LL_DOM_VK_9 = 0x39; 208const unsigned long LL_DOM_VK_9 = 0x39;
209 209
210const unsigned long LL_DOM_VK_SEMICOLON = 0x3B; 210const unsigned long LL_DOM_VK_SEMICOLON = 0x3B;
211const unsigned long LL_DOM_VK_EQUALS = 0x3D; 211const unsigned long LL_DOM_VK_EQUALS = 0x3D;
212 212
213// LL_DOM_VK_A - LL_DOM_VK_Z match their ASCII values 213// LL_DOM_VK_A - LL_DOM_VK_Z match their ASCII values
214const unsigned long LL_DOM_VK_A = 0x41; 214const unsigned long LL_DOM_VK_A = 0x41;
215const unsigned long LL_DOM_VK_B = 0x42; 215const unsigned long LL_DOM_VK_B = 0x42;
216const unsigned long LL_DOM_VK_C = 0x43; 216const unsigned long LL_DOM_VK_C = 0x43;
217const unsigned long LL_DOM_VK_D = 0x44; 217const unsigned long LL_DOM_VK_D = 0x44;
218const unsigned long LL_DOM_VK_E = 0x45; 218const unsigned long LL_DOM_VK_E = 0x45;
219const unsigned long LL_DOM_VK_F = 0x46; 219const unsigned long LL_DOM_VK_F = 0x46;
220const unsigned long LL_DOM_VK_G = 0x47; 220const unsigned long LL_DOM_VK_G = 0x47;
221const unsigned long LL_DOM_VK_H = 0x48; 221const unsigned long LL_DOM_VK_H = 0x48;
222const unsigned long LL_DOM_VK_I = 0x49; 222const unsigned long LL_DOM_VK_I = 0x49;
223const unsigned long LL_DOM_VK_J = 0x4A; 223const unsigned long LL_DOM_VK_J = 0x4A;
224const unsigned long LL_DOM_VK_K = 0x4B; 224const unsigned long LL_DOM_VK_K = 0x4B;
225const unsigned long LL_DOM_VK_L = 0x4C; 225const unsigned long LL_DOM_VK_L = 0x4C;
226const unsigned long LL_DOM_VK_M = 0x4D; 226const unsigned long LL_DOM_VK_M = 0x4D;
227const unsigned long LL_DOM_VK_N = 0x4E; 227const unsigned long LL_DOM_VK_N = 0x4E;
228const unsigned long LL_DOM_VK_O = 0x4F; 228const unsigned long LL_DOM_VK_O = 0x4F;
229const unsigned long LL_DOM_VK_P = 0x50; 229const unsigned long LL_DOM_VK_P = 0x50;
230const unsigned long LL_DOM_VK_Q = 0x51; 230const unsigned long LL_DOM_VK_Q = 0x51;
231const unsigned long LL_DOM_VK_R = 0x52; 231const unsigned long LL_DOM_VK_R = 0x52;
232const unsigned long LL_DOM_VK_S = 0x53; 232const unsigned long LL_DOM_VK_S = 0x53;
233const unsigned long LL_DOM_VK_T = 0x54; 233const unsigned long LL_DOM_VK_T = 0x54;
234const unsigned long LL_DOM_VK_U = 0x55; 234const unsigned long LL_DOM_VK_U = 0x55;
235const unsigned long LL_DOM_VK_V = 0x56; 235const unsigned long LL_DOM_VK_V = 0x56;
236const unsigned long LL_DOM_VK_W = 0x57; 236const unsigned long LL_DOM_VK_W = 0x57;
237const unsigned long LL_DOM_VK_X = 0x58; 237const unsigned long LL_DOM_VK_X = 0x58;
238const unsigned long LL_DOM_VK_Y = 0x59; 238const unsigned long LL_DOM_VK_Y = 0x59;
239const unsigned long LL_DOM_VK_Z = 0x5A; 239const unsigned long LL_DOM_VK_Z = 0x5A;
240 240
241const unsigned long LL_DOM_VK_CONTEXT_MENU = 0x5D; 241const unsigned long LL_DOM_VK_CONTEXT_MENU = 0x5D;
242 242
243const unsigned long LL_DOM_VK_NUMPAD0 = 0x60; 243const unsigned long LL_DOM_VK_NUMPAD0 = 0x60;
244const unsigned long LL_DOM_VK_NUMPAD1 = 0x61; 244const unsigned long LL_DOM_VK_NUMPAD1 = 0x61;
245const unsigned long LL_DOM_VK_NUMPAD2 = 0x62; 245const unsigned long LL_DOM_VK_NUMPAD2 = 0x62;
246const unsigned long LL_DOM_VK_NUMPAD3 = 0x63; 246const unsigned long LL_DOM_VK_NUMPAD3 = 0x63;
247const unsigned long LL_DOM_VK_NUMPAD4 = 0x64; 247const unsigned long LL_DOM_VK_NUMPAD4 = 0x64;
248const unsigned long LL_DOM_VK_NUMPAD5 = 0x65; 248const unsigned long LL_DOM_VK_NUMPAD5 = 0x65;
249const unsigned long LL_DOM_VK_NUMPAD6 = 0x66; 249const unsigned long LL_DOM_VK_NUMPAD6 = 0x66;
250const unsigned long LL_DOM_VK_NUMPAD7 = 0x67; 250const unsigned long LL_DOM_VK_NUMPAD7 = 0x67;
251const unsigned long LL_DOM_VK_NUMPAD8 = 0x68; 251const unsigned long LL_DOM_VK_NUMPAD8 = 0x68;
252const unsigned long LL_DOM_VK_NUMPAD9 = 0x69; 252const unsigned long LL_DOM_VK_NUMPAD9 = 0x69;
253const unsigned long LL_DOM_VK_MULTIPLY = 0x6A; 253const unsigned long LL_DOM_VK_MULTIPLY = 0x6A;
254const unsigned long LL_DOM_VK_ADD = 0x6B; 254const unsigned long LL_DOM_VK_ADD = 0x6B;
255const unsigned long LL_DOM_VK_SEPARATOR = 0x6C; 255const unsigned long LL_DOM_VK_SEPARATOR = 0x6C;
256const unsigned long LL_DOM_VK_SUBTRACT = 0x6D; 256const unsigned long LL_DOM_VK_SUBTRACT = 0x6D;
257const unsigned long LL_DOM_VK_DECIMAL = 0x6E; 257const unsigned long LL_DOM_VK_DECIMAL = 0x6E;
258const unsigned long LL_DOM_VK_DIVIDE = 0x6F; 258const unsigned long LL_DOM_VK_DIVIDE = 0x6F;
259const unsigned long LL_DOM_VK_F1 = 0x70; 259const unsigned long LL_DOM_VK_F1 = 0x70;
260const unsigned long LL_DOM_VK_F2 = 0x71; 260const unsigned long LL_DOM_VK_F2 = 0x71;
261const unsigned long LL_DOM_VK_F3 = 0x72; 261const unsigned long LL_DOM_VK_F3 = 0x72;
262const unsigned long LL_DOM_VK_F4 = 0x73; 262const unsigned long LL_DOM_VK_F4 = 0x73;
263const unsigned long LL_DOM_VK_F5 = 0x74; 263const unsigned long LL_DOM_VK_F5 = 0x74;
264const unsigned long LL_DOM_VK_F6 = 0x75; 264const unsigned long LL_DOM_VK_F6 = 0x75;
265const unsigned long LL_DOM_VK_F7 = 0x76; 265const unsigned long LL_DOM_VK_F7 = 0x76;
266const unsigned long LL_DOM_VK_F8 = 0x77; 266const unsigned long LL_DOM_VK_F8 = 0x77;
267const unsigned long LL_DOM_VK_F9 = 0x78; 267const unsigned long LL_DOM_VK_F9 = 0x78;
268const unsigned long LL_DOM_VK_F10 = 0x79; 268const unsigned long LL_DOM_VK_F10 = 0x79;
269const unsigned long LL_DOM_VK_F11 = 0x7A; 269const unsigned long LL_DOM_VK_F11 = 0x7A;
270const unsigned long LL_DOM_VK_F12 = 0x7B; 270const unsigned long LL_DOM_VK_F12 = 0x7B;
271const unsigned long LL_DOM_VK_F13 = 0x7C; 271const unsigned long LL_DOM_VK_F13 = 0x7C;
272const unsigned long LL_DOM_VK_F14 = 0x7D; 272const unsigned long LL_DOM_VK_F14 = 0x7D;
273const unsigned long LL_DOM_VK_F15 = 0x7E; 273const unsigned long LL_DOM_VK_F15 = 0x7E;
274const unsigned long LL_DOM_VK_F16 = 0x7F; 274const unsigned long LL_DOM_VK_F16 = 0x7F;
275const unsigned long LL_DOM_VK_F17 = 0x80; 275const unsigned long LL_DOM_VK_F17 = 0x80;
276const unsigned long LL_DOM_VK_F18 = 0x81; 276const unsigned long LL_DOM_VK_F18 = 0x81;
277const unsigned long LL_DOM_VK_F19 = 0x82; 277const unsigned long LL_DOM_VK_F19 = 0x82;
278const unsigned long LL_DOM_VK_F20 = 0x83; 278const unsigned long LL_DOM_VK_F20 = 0x83;
279const unsigned long LL_DOM_VK_F21 = 0x84; 279const unsigned long LL_DOM_VK_F21 = 0x84;
280const unsigned long LL_DOM_VK_F22 = 0x85; 280const unsigned long LL_DOM_VK_F22 = 0x85;
281const unsigned long LL_DOM_VK_F23 = 0x86; 281const unsigned long LL_DOM_VK_F23 = 0x86;
282const unsigned long LL_DOM_VK_F24 = 0x87; 282const unsigned long LL_DOM_VK_F24 = 0x87;
283 283
284const unsigned long LL_DOM_VK_NUM_LOCK = 0x90; 284const unsigned long LL_DOM_VK_NUM_LOCK = 0x90;
285const unsigned long LL_DOM_VK_SCROLL_LOCK = 0x91; 285const unsigned long LL_DOM_VK_SCROLL_LOCK = 0x91;
286 286
287const unsigned long LL_DOM_VK_COMMA = 0xBC; 287const unsigned long LL_DOM_VK_COMMA = 0xBC;
288const unsigned long LL_DOM_VK_PERIOD = 0xBE; 288const unsigned long LL_DOM_VK_PERIOD = 0xBE;
289const unsigned long LL_DOM_VK_SLASH = 0xBF; 289const unsigned long LL_DOM_VK_SLASH = 0xBF;
290const unsigned long LL_DOM_VK_BACK_QUOTE = 0xC0; 290const unsigned long LL_DOM_VK_BACK_QUOTE = 0xC0;
291const unsigned long LL_DOM_VK_OPEN_BRACKET = 0xDB; 291const unsigned long LL_DOM_VK_OPEN_BRACKET = 0xDB;
292const unsigned long LL_DOM_VK_BACK_SLASH = 0xDC; 292const unsigned long LL_DOM_VK_BACK_SLASH = 0xDC;
293const unsigned long LL_DOM_VK_CLOSE_BRACKET = 0xDD; 293const unsigned long LL_DOM_VK_CLOSE_BRACKET = 0xDD;
294const unsigned long LL_DOM_VK_QUOTE = 0xDE; 294const unsigned long LL_DOM_VK_QUOTE = 0xDE;
295 295
296const unsigned long LL_DOM_VK_META = 0xE0; 296const unsigned long LL_DOM_VK_META = 0xE0;
297 297
298#endif // LLMOZLIB_H 298#endif // LLMOZLIB_H