aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--RELEASE_NOTES.txt202
-rw-r--r--linden/indra/llaudio/audioengine.h3
-rw-r--r--linden/indra/llimage/llimage.cpp1
-rw-r--r--linden/indra/llrender/llimagegl.cpp4
-rw-r--r--linden/indra/llui/CMakeLists.txt2
-rw-r--r--linden/indra/llui/lltabcontainer.cpp1
-rw-r--r--linden/indra/llui/lltabcontainervertical.cpp33
-rw-r--r--linden/indra/llui/lltabcontainervertical.h33
-rw-r--r--linden/indra/llui/lluictrlfactory.cpp1
-rw-r--r--linden/indra/llui/lluifwd.h1
-rw-r--r--linden/indra/newview/app_settings/settings.xml22
-rw-r--r--linden/indra/newview/app_settings/settings_per_account.xml11
-rw-r--r--linden/indra/newview/floaterbusy.cpp2
-rw-r--r--linden/indra/newview/jcfloaterareasearch.cpp2
-rw-r--r--linden/indra/newview/jcfloaterareasearch.h2
-rw-r--r--linden/indra/newview/lightshare.cpp6
-rw-r--r--linden/indra/newview/llfloatercustomize.cpp1
-rw-r--r--linden/indra/newview/llfloatercustomize.h1
-rw-r--r--linden/indra/newview/llfloaterpreference.cpp12
-rw-r--r--linden/indra/newview/llfloaterpreference.h3
-rw-r--r--linden/indra/newview/llpanelavatar.cpp1
-rw-r--r--linden/indra/newview/llpanelclassified.cpp1
-rw-r--r--linden/indra/newview/llpanelpick.cpp1
-rw-r--r--linden/indra/newview/llprefsadvanced.cpp5
-rw-r--r--linden/indra/newview/lltexturecache.cpp7
-rw-r--r--linden/indra/newview/lltexturefetch.cpp160
-rw-r--r--linden/indra/newview/llvieweraudio.cpp2
-rw-r--r--linden/indra/newview/llviewercontrol.cpp2
-rw-r--r--linden/indra/newview/llviewermenu.cpp20
-rw-r--r--linden/indra/newview/llviewermessage.cpp370
-rw-r--r--linden/indra/newview/llvoavatar.cpp2
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_busy.xml21
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml5
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_audio.xml8
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml4
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml31
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml8
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml12
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml2
40 files changed, 667 insertions, 343 deletions
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 837c0f0..21611bd 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -4,6 +4,208 @@
4 4
5 5
6 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 6 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
7 =- 1.3.0 RC1 -=
8 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
9
10
11 RELEASE HIGHLIGHTS
12
13 * Fixed many frequent crashes and memory leaks. You should
14 notice significantly improved viewer stability in this
15 version. Many thanks to our Weeklies testers and everyone else
16 who helped us find and fix these issues!
17
18 * Area Object Search: You can now search for objects in the
19 nearby area by name, description, creator, and/or group name.
20 Thanks to the Emerald Viewer and Henri Beauchamp for this
21 feature.
22
23 * The actions on the Minimap Radar "Estate" tab now work for
24 parcel owners too. Thanks, McCabe!
25
26 * Fixed a long-standing typo that made the object cache useless
27 (SNOW-783). Second Life scenes will now rez much more quickly
28 when visiting them again. (OpenSim does not currently support
29 object caches.) Thanks to Andrew Linden for the tip-off.
30
31 * Other new features: copy worn attachments, MU*-style poses,
32 OOC auto-close, Shift-Enter to whisper, revamped LightShare
33 support, and more. Read on for details!
34
35
36 KNOWN ISSUES
37
38 * Certain audio streams and movies don't play audio, e.g.
39 YouTube MP4 videos. The viewer does not currently include the
40 necessary plugin to play the AAC audio format. We hope to
41 resolve this for the 1.3.0 final release.
42
43 * The viewer does not properly detect the LLKDU image library on
44 some systems. We are investigating this issue.
45
46 * The "Cancel" button is missing when the teleport screen is
47 disabled.
48
49 * The Animation Override window needs to be open when standing
50 up from sitting on the ground in order to activate stands.
51
52 * Tiny prims are sometimes invisible until selected.
53
54
55 CHANGES
56
57 In addition to the Release Highlights above, this version of
58 Imprudence also includes the following changes, as compared to
59 Imprudence 1.3.0 beta 5.
60
61
62 FEATURES / IMPROVEMENTS
63
64 * Re-enabled the ability to copy worn attachments in the
65 inventory window. Thanks to Henri Beauchamp for the patch!
66
67 * Added optional support for MU*-style poses (":" works like
68 "/me") and OOC auto-close (automatically close "((" in
69 chat). You can enable these features in "Preferences >
70 Advanced". Thanks to Henri Beauchamp for these features!
71
72 * You can now choose a clock/timestamp format in
73 "Preferences > General": 12-hour PST/PDT, 24-hour PST/PDT,
74 or UTC. Thanks, McCabe!
75
76 * You can now whisper in chat by pressing Shift-Enter instead
77 of Enter. Thanks to Henri Beauchamp for this feature!
78
79 * The viewer now plays in-world sound effects regardless of
80 the maturity rating of the sim. Thanks, McCabe!
81
82 * The Map window will now let you teleport up to the maximum Z
83 value allowed by the grid (it was limited to 4096 meters
84 before). Thanks, McCabe!
85
86 * Likewise, the minimap maximum zoom-out level is now based on
87 the maximum Z value allowed by the grid. Thanks, McCabe!
88
89 * Added menu entries to take off alpha and tattoo layers (in
90 the Edit menu and pie menus). Thanks, McCabe!
91
92 * Revamped LightShare support. Please see our LightShare wiki
93 page for more information about this feature. Thanks, Jacek!
94
95 - More fine-grained LightShare permission control in
96 "Preferences > Advanced".
97
98 - Teleporting will no longer reset Windlight to the default
99 settings.
100
101 - Added the new OpenSim 0.7 names for the LightShare script
102 functions (prefixed with "ls" instead of "cm") to the
103 script editor. Thanks, McCabe!
104
105 * Increased the maximum building grid size from 50m to 10,000m
106 in Advanced Build Options. Thanks, McCabe!
107
108 * Added "Advanced > Character > Private Point At" to disable
109 telling other viewers where you avatar is pointing (similar
110 to Private Look At).
111
112 * The Script Warning/Error window now has timestamps. Thanks,
113 Jacek!
114
115 * The viewer now automatically enables joystick support on
116 Windows and Linux if a joystick is present. You can disable
117 this by setting the JoystickAutoEnable debug setting to
118 FALSE. Thanks, Armin!
119
120 - Auto-enable is not available on Mac, due to an issue with
121 some mice being detected as joysticks. Mac users can still
122 manually enable joystick support in "Preferences > Input &
123 Camera > Joystick Setup".
124
125 * Added "Advanced > Debug Settings" to the login screen menu.
126
127 * Added a "File" menu to the notecard editor, with "Save",
128 "Import Text", and "Export Text" entries. Thanks, McCabe!
129
130 * Improved viewer framerate slightly by setting the inventory
131 window title more efficiently. Thanks, Armin!
132
133 * Added a "Select a Default Grid" popup the first time you run
134 Imprudence, to help users connect to the grid they want.
135 Thanks, McCabe!
136
137 * You can now access the Grid Manager at any time via
138 "Preferences > General". Thanks, McCabe!
139
140 * Cosmetic UI cleanup in the Advanced Build Options window,
141 pie menus, login screen, grid manager, event search tab, and
142 some notifications. Thanks, McCabe!
143
144 * Tidied up the Advanced menu a bit. Thanks, McCabe!
145
146 * "Limit Select Distance" has been moved from the Advanced
147 menu to the Advanced Build Options window.
148
149 * Renamed "Help > Viewer Help" to "Help > Grid Help" to match
150 what it does. Thanks, McCabe!
151
152 * The chat log timestamp now has a leading zero for hours less
153 than 10 (SNOW-629). Thanks to Ardy Lay for the patch!
154
155
156 BUG FIXES
157
158 * Fixed a nasty crash "LLRefCount: deleting non-zero
159 reference" (#293). Thanks, McCabe!
160
161 * Fixed a crash when http-getting an empty texture (SNOW-698).
162 Thanks for the patch, Thickbrick Sleaford!
163
164 * Fixed a crash when using a custom viewer skin that is
165 missing some color definitions. Thanks to the Emerald Viewer
166 for this fix.
167
168 * Fixed a crash in LLPanelPlace::onClickTeleport (#357).
169 Thanks, McCabe!
170
171 * Fixed several memory leaks. Thanks to Linden Lab and the
172 Emerald Viewer.
173
174 * Fixed the Animation Overrider not playing stand animations
175 after standing up from sitting on an object. (But, it still
176 affects standing up from the ground.) Thanks, McCabe!
177
178 * Fixed your avatar's eyes looking in a weird direction when
179 "Advanced > Character > Private Look At" is enabled. Thanks,
180 Armin!
181
182 * Fixed the "View > Web Browser" menu item not doing anything.
183 Thanks, McCabe!
184
185 * Fixed several Mac compile issues. Thanks, Jacek!
186
187 * When unable to connect, the error message now says the grid
188 name, instead of "Unable to connect to Imprudence". Thanks,
189 McCabe!
190
191 * Fixed chat logs potentially being saved to invalid
192 filenames. Thanks to the Emerald Viewer for this fix.
193
194 * Fixed a crash when trying to use a landmark after logging
195 out. Thanks, Armin!
196
197 * Reduced stuttering and lag in the audio engine. Thanks for
198 the patch, Henri Beauchamp!
199
200 * Fixed the Web Browser window missing its "Home" button.
201 Thanks, McCabe!
202
203 * Fixed the main menu disappearing when the "You have been
204 logged out" alert appears (#327). Thanks, McCabe!
205
206
207
208 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
7 =- 1.3.0 BETA 5 -= 209 =- 1.3.0 BETA 5 -=
8 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 210 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
9 211
diff --git a/linden/indra/llaudio/audioengine.h b/linden/indra/llaudio/audioengine.h
index e990eb7..e46091c 100644
--- a/linden/indra/llaudio/audioengine.h
+++ b/linden/indra/llaudio/audioengine.h
@@ -93,7 +93,8 @@ public:
93 AUDIO_TYPE_SFX = 1, 93 AUDIO_TYPE_SFX = 1,
94 AUDIO_TYPE_UI = 2, 94 AUDIO_TYPE_UI = 2,
95 AUDIO_TYPE_AMBIENT = 3, 95 AUDIO_TYPE_AMBIENT = 3,
96 AUDIO_TYPE_COUNT = 4 // last 96 AUDIO_TYPE_GESTURE = 4,
97 AUDIO_TYPE_COUNT = 5 // last
97 }; 98 };
98 99
99 LLAudioEngine(); 100 LLAudioEngine();
diff --git a/linden/indra/llimage/llimage.cpp b/linden/indra/llimage/llimage.cpp
index 0baa005..776c481 100644
--- a/linden/indra/llimage/llimage.cpp
+++ b/linden/indra/llimage/llimage.cpp
@@ -1547,6 +1547,7 @@ void LLImageFormatted::appendData(U8 *data, S32 size)
1547 S32 newsize = cursize + size; 1547 S32 newsize = cursize + size;
1548 reallocateData(newsize); 1548 reallocateData(newsize);
1549 memcpy(getData() + cursize, data, size); 1549 memcpy(getData() + cursize, data, size);
1550 delete[] data;
1550 } 1551 }
1551 } 1552 }
1552} 1553}
diff --git a/linden/indra/llrender/llimagegl.cpp b/linden/indra/llrender/llimagegl.cpp
index d6474f7..7cd4dd7 100644
--- a/linden/indra/llrender/llimagegl.cpp
+++ b/linden/indra/llrender/llimagegl.cpp
@@ -1231,7 +1231,9 @@ BOOL LLImageGL::readBackRaw(S32 discard_level, LLImageRaw* imageraw, bool compre
1231 1231
1232 if (width <= 0 || width > 2048 || height <= 0 || height > 2048 || ncomponents < 1 || ncomponents > 4) 1232 if (width <= 0 || width > 2048 || height <= 0 || height > 2048 || ncomponents < 1 || ncomponents > 4)
1233 { 1233 {
1234 llerrs << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl; 1234 //llerrs << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl;
1235 llwarns << llformat("LLImageGL::readBackRaw: bogus params: %d x %d x %d",width,height,ncomponents) << llendl;
1236 return FALSE;
1235 } 1237 }
1236 1238
1237 LLGLint is_compressed = 0; 1239 LLGLint is_compressed = 0;
diff --git a/linden/indra/llui/CMakeLists.txt b/linden/indra/llui/CMakeLists.txt
index f646e63..a0f80b4 100644
--- a/linden/indra/llui/CMakeLists.txt
+++ b/linden/indra/llui/CMakeLists.txt
@@ -63,7 +63,6 @@ set(llui_SOURCE_FILES
63 llspinctrl.cpp 63 llspinctrl.cpp
64 llstyle.cpp 64 llstyle.cpp
65 lltabcontainer.cpp 65 lltabcontainer.cpp
66 lltabcontainervertical.cpp
67 lltextbox.cpp 66 lltextbox.cpp
68 lltexteditor.cpp 67 lltexteditor.cpp
69 lltextparser.cpp 68 lltextparser.cpp
@@ -119,7 +118,6 @@ set(llui_HEADER_FILES
119 llspinctrl.h 118 llspinctrl.h
120 llstyle.h 119 llstyle.h
121 lltabcontainer.h 120 lltabcontainer.h
122 lltabcontainervertical.h
123 lltextbox.h 121 lltextbox.h
124 lltexteditor.h 122 lltexteditor.h
125 lltextparser.h 123 lltextparser.h
diff --git a/linden/indra/llui/lltabcontainer.cpp b/linden/indra/llui/lltabcontainer.cpp
index 1f94191..4be779c 100644
--- a/linden/indra/llui/lltabcontainer.cpp
+++ b/linden/indra/llui/lltabcontainer.cpp
@@ -40,7 +40,6 @@
40#include "lltextbox.h" 40#include "lltextbox.h"
41#include "llcriticaldamp.h" 41#include "llcriticaldamp.h"
42#include "lluictrlfactory.h" 42#include "lluictrlfactory.h"
43#include "lltabcontainervertical.h"
44#include "llrender.h" 43#include "llrender.h"
45 44
46const F32 SCROLL_STEP_TIME = 0.4f; 45const F32 SCROLL_STEP_TIME = 0.4f;
diff --git a/linden/indra/llui/lltabcontainervertical.cpp b/linden/indra/llui/lltabcontainervertical.cpp
deleted file mode 100644
index a729c95..0000000
--- a/linden/indra/llui/lltabcontainervertical.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
1/**
2 * @file lltabcontainervertical.cpp
3 * @brief LLTabContainerVertical base class
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2009, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 */
32
33// deprecated: see LLTabContainer
diff --git a/linden/indra/llui/lltabcontainervertical.h b/linden/indra/llui/lltabcontainervertical.h
deleted file mode 100644
index ce42367..0000000
--- a/linden/indra/llui/lltabcontainervertical.h
+++ /dev/null
@@ -1,33 +0,0 @@
1/**
2 * @file lltabcontainervertical.h
3 * @brief LLTabContainerVertical base class
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2009, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at
21 * http://secondlifegrid.net/programs/open_source/licensing/flossexception
22 *
23 * By copying, modifying or distributing this software, you acknowledge
24 * that you have read and understood your obligations described above,
25 * and agree to abide by those obligations.
26 *
27 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
28 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
29 * COMPLETENESS OR PERFORMANCE.
30 * $/LicenseInfo$
31 */
32
33// deprecated: see LLTabContainer
diff --git a/linden/indra/llui/lluictrlfactory.cpp b/linden/indra/llui/lluictrlfactory.cpp
index 07eb39b..5cfc3ee 100644
--- a/linden/indra/llui/lluictrlfactory.cpp
+++ b/linden/indra/llui/lluictrlfactory.cpp
@@ -64,7 +64,6 @@
64#include "llmultisliderctrl.h" 64#include "llmultisliderctrl.h"
65#include "llspinctrl.h" 65#include "llspinctrl.h"
66#include "lltabcontainer.h" 66#include "lltabcontainer.h"
67#include "lltabcontainervertical.h"
68#include "lltextbox.h" 67#include "lltextbox.h"
69#include "lltexteditor.h" 68#include "lltexteditor.h"
70#include "llui.h" 69#include "llui.h"
diff --git a/linden/indra/llui/lluifwd.h b/linden/indra/llui/lluifwd.h
index 32d5c9b..f99bb39 100644
--- a/linden/indra/llui/lluifwd.h
+++ b/linden/indra/llui/lluifwd.h
@@ -53,7 +53,6 @@ class LLSlider;
53class LLSliderCtrl; 53class LLSliderCtrl;
54class LLSpinCtrl; 54class LLSpinCtrl;
55class LLTabContainer; 55class LLTabContainer;
56class LLTabContainerVertical;
57class LLTextBox; 56class LLTextBox;
58class LLTextEditor; 57class LLTextEditor;
59class LLTextureCtrl; 58class LLTextureCtrl;
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index aae182c..d71cf09 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -15,6 +15,17 @@
15 <key>Value</key> 15 <key>Value</key>
16 <integer>0</integer> 16 <integer>0</integer>
17 </map> 17 </map>
18 <key>AudioLevelGestures</key>
19 <map>
20 <key>Comment</key>
21 <string>Audio level of environment gestures</string>
22 <key>Persist</key>
23 <integer>1</integer>
24 <key>Type</key>
25 <string>F32</string>
26 <key>Value</key>
27 <real>0.5</real>
28 </map>
18 <key>AutoCloseOOC</key> 29 <key>AutoCloseOOC</key>
19 <map> 30 <map>
20 <key>Comment</key> 31 <key>Comment</key>
@@ -431,6 +442,17 @@
431 <key>Value</key> 442 <key>Value</key>
432 <integer>1</integer> 443 <integer>1</integer>
433 </map> 444 </map>
445 <key>MuteGestures</key>
446 <map>
447 <key>Comment</key>
448 <string>Gesture sound effects, play at 0 volume</string>
449 <key>Persist</key>
450 <integer>1</integer>
451 <key>Type</key>
452 <string>Boolean</string>
453 <key>Value</key>
454 <integer>0</integer>
455 </map>
434 <key>MuteWind</key> 456 <key>MuteWind</key>
435 <map> 457 <map>
436 <key>Comment</key> 458 <key>Comment</key>
diff --git a/linden/indra/newview/app_settings/settings_per_account.xml b/linden/indra/newview/app_settings/settings_per_account.xml
index e965fe6..1a748f8 100644
--- a/linden/indra/newview/app_settings/settings_per_account.xml
+++ b/linden/indra/newview/app_settings/settings_per_account.xml
@@ -461,6 +461,17 @@
461 461
462 <!-- Begin IM auto-response --> 462 <!-- Begin IM auto-response -->
463 463
464 <key>InstantMessageResponseEnabled</key>
465 <map>
466 <key>Comment</key>
467 <string>Toggles whether to auto-respond to instant messages or not</string>
468 <key>Persist</key>
469 <integer>1</integer>
470 <key>Type</key>
471 <string>Boolean</string>
472 <key>Value</key>
473 <integer>0</integer>
474 </map>
464 <key>InstantMessageResponseFriends</key> 475 <key>InstantMessageResponseFriends</key>
465 <map> 476 <map>
466 <key>Comment</key> 477 <key>Comment</key>
diff --git a/linden/indra/newview/floaterbusy.cpp b/linden/indra/newview/floaterbusy.cpp
index 9188ae1..6c49461 100644
--- a/linden/indra/newview/floaterbusy.cpp
+++ b/linden/indra/newview/floaterbusy.cpp
@@ -158,6 +158,7 @@ BOOL FloaterBusy::postBuild()
158 LLWStringUtil::replaceChar(auto_response, '%', ' '); 158 LLWStringUtil::replaceChar(auto_response, '%', ' ');
159 childSetText("im_response", wstring_to_utf8str(auto_response)); 159 childSetText("im_response", wstring_to_utf8str(auto_response));
160 160
161 childSetValue("InstantMessageResponseEnabled", gSavedPerAccountSettings.getBOOL("InstantMessageResponseEnabled"));
161 childSetValue("InstantMessageResponseFriends", gSavedPerAccountSettings.getBOOL("InstantMessageResponseFriends")); 162 childSetValue("InstantMessageResponseFriends", gSavedPerAccountSettings.getBOOL("InstantMessageResponseFriends"));
162 childSetValue("InstantMessageResponseMuted", gSavedPerAccountSettings.getBOOL("InstantMessageResponseMuted")); 163 childSetValue("InstantMessageResponseMuted", gSavedPerAccountSettings.getBOOL("InstantMessageResponseMuted"));
163 childSetValue("InstantMessageResponseAnyone", gSavedPerAccountSettings.getBOOL("InstantMessageResponseAnyone")); 164 childSetValue("InstantMessageResponseAnyone", gSavedPerAccountSettings.getBOOL("InstantMessageResponseAnyone"));
@@ -212,6 +213,7 @@ void FloaterBusy::apply()
212 LLWStringUtil::replaceChar(im_response, '\n', '^'); 213 LLWStringUtil::replaceChar(im_response, '\n', '^');
213 LLWStringUtil::replaceChar(im_response, ' ', '%'); 214 LLWStringUtil::replaceChar(im_response, ' ', '%');
214 gSavedPerAccountSettings.setString("InstantMessageResponse", std::string(wstring_to_utf8str(im_response))); 215 gSavedPerAccountSettings.setString("InstantMessageResponse", std::string(wstring_to_utf8str(im_response)));
216 gSavedPerAccountSettings.setBOOL("InstantMessageResponseEnabled", childGetValue("InstantMessageResponseEnabled").asBoolean());
215 gSavedPerAccountSettings.setBOOL("InstantMessageResponseMuted", childGetValue("InstantMessageResponseMuted").asBoolean()); 217 gSavedPerAccountSettings.setBOOL("InstantMessageResponseMuted", childGetValue("InstantMessageResponseMuted").asBoolean());
216 gSavedPerAccountSettings.setBOOL("InstantMessageResponseFriends", childGetValue("InstantMessageResponseFriends").asBoolean()); 218 gSavedPerAccountSettings.setBOOL("InstantMessageResponseFriends", childGetValue("InstantMessageResponseFriends").asBoolean());
217 gSavedPerAccountSettings.setBOOL("InstantMessageResponseMuted", childGetValue("InstantMessageResponseMuted").asBoolean()); 219 gSavedPerAccountSettings.setBOOL("InstantMessageResponseMuted", childGetValue("InstantMessageResponseMuted").asBoolean());
diff --git a/linden/indra/newview/jcfloaterareasearch.cpp b/linden/indra/newview/jcfloaterareasearch.cpp
index 5b269fa..ed00447 100644
--- a/linden/indra/newview/jcfloaterareasearch.cpp
+++ b/linden/indra/newview/jcfloaterareasearch.cpp
@@ -16,7 +16,7 @@
16 * may be used to endorse or promote products derived from this 16 * may be used to endorse or promote products derived from this
17 * software without specific prior written permission. 17 * software without specific prior written permission.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS LTD AND CONTRIBUTORS AS IS 19 * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS LTD AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS
diff --git a/linden/indra/newview/jcfloaterareasearch.h b/linden/indra/newview/jcfloaterareasearch.h
index 9feb9aa..1512030 100644
--- a/linden/indra/newview/jcfloaterareasearch.h
+++ b/linden/indra/newview/jcfloaterareasearch.h
@@ -16,7 +16,7 @@
16 * may be used to endorse or promote products derived from this 16 * may be used to endorse or promote products derived from this
17 * software without specific prior written permission. 17 * software without specific prior written permission.
18 * 18 *
19 * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS AND CONTRIBUTORS AS IS 19 * THIS SOFTWARE IS PROVIDED BY MODULAR SYSTEMS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MODULAR SYSTEMS OR CONTRIBUTORS
diff --git a/linden/indra/newview/lightshare.cpp b/linden/indra/newview/lightshare.cpp
index b422236..78d27b5 100644
--- a/linden/indra/newview/lightshare.cpp
+++ b/linden/indra/newview/lightshare.cpp
@@ -101,7 +101,7 @@ WindlightMessage::~WindlightMessage()
101// static 101// static
102void WindlightMessage::processWindlight(LLMessageSystem* msg, void**) 102void WindlightMessage::processWindlight(LLMessageSystem* msg, void**)
103{ 103{
104 if( gSavedSettings.getU32("UseLightShare") <= LIGHTSHARE_NEVER ) 104 if( gSavedSettings.getU32("LightShareAllowed") <= LIGHTSHARE_NEVER )
105 return; 105 return;
106 106
107 WindlightMessage* wl = new WindlightMessage(msg); 107 WindlightMessage* wl = new WindlightMessage(msg);
@@ -114,7 +114,7 @@ void WindlightMessage::processWindlight(LLMessageSystem* msg, void**)
114 114
115 // If they are using region settings already, or LightShare is 115 // If they are using region settings already, or LightShare is
116 // always allowed, just apply the new settings, don't bother asking. 116 // always allowed, just apply the new settings, don't bother asking.
117 if( gSavedSettings.getU32("UseLightShare") == LIGHTSHARE_ALWAYS || 117 if( gSavedSettings.getU32("LightShareAllowed") == LIGHTSHARE_ALWAYS ||
118 (sky == sSkyPresetName && water == sWaterPresetName) ) 118 (sky == sSkyPresetName && water == sWaterPresetName) )
119 { 119 {
120 wl->apply(); 120 wl->apply();
@@ -138,7 +138,7 @@ void WindlightMessage::processWindlight(LLMessageSystem* msg, void**)
138 return; 138 return;
139 } 139 }
140 140
141 if( gSavedSettings.getU32("UseLightShare") == LIGHTSHARE_ASK && 141 if( gSavedSettings.getU32("LightShareAllowed") == LIGHTSHARE_ASK &&
142 sMostRecent == NULL ) 142 sMostRecent == NULL )
143 { 143 {
144 // No most recent, so store this and create notification 144 // No most recent, so store this and create notification
diff --git a/linden/indra/newview/llfloatercustomize.cpp b/linden/indra/newview/llfloatercustomize.cpp
index 74b58bd..db51556 100644
--- a/linden/indra/newview/llfloatercustomize.cpp
+++ b/linden/indra/newview/llfloatercustomize.cpp
@@ -48,7 +48,6 @@
48#include "llscrollcontainer.h" 48#include "llscrollcontainer.h"
49#include "llscrollingpanellist.h" 49#include "llscrollingpanellist.h"
50#include "llsliderctrl.h" 50#include "llsliderctrl.h"
51#include "lltabcontainervertical.h"
52#include "llviewerwindow.h" 51#include "llviewerwindow.h"
53#include "llinventorymodel.h" 52#include "llinventorymodel.h"
54#include "llinventoryview.h" 53#include "llinventoryview.h"
diff --git a/linden/indra/newview/llfloatercustomize.h b/linden/indra/newview/llfloatercustomize.h
index d0e558f..aa93606 100644
--- a/linden/indra/newview/llfloatercustomize.h
+++ b/linden/indra/newview/llfloatercustomize.h
@@ -55,7 +55,6 @@ class LLMakeOutfitDialog;
55class LLRadioGroup; 55class LLRadioGroup;
56class LLScrollableContainerView; 56class LLScrollableContainerView;
57class LLScrollingPanelList; 57class LLScrollingPanelList;
58class LLTabContainerVertical;
59class LLTextBox; 58class LLTextBox;
60class LLTextureCtrl; 59class LLTextureCtrl;
61class LLViewerJointMesh; 60class LLViewerJointMesh;
diff --git a/linden/indra/newview/llfloaterpreference.cpp b/linden/indra/newview/llfloaterpreference.cpp
index c468a5e..744c179 100644
--- a/linden/indra/newview/llfloaterpreference.cpp
+++ b/linden/indra/newview/llfloaterpreference.cpp
@@ -49,7 +49,6 @@
49#include "message.h" 49#include "message.h"
50 50
51#include "llcommandhandler.h" 51#include "llcommandhandler.h"
52#include "llfloaterabout.h"
53#include "llfloaterpreference.h" 52#include "llfloaterpreference.h"
54#include "llpanelnetwork.h" 53#include "llpanelnetwork.h"
55#include "llpanelaudioprefs.h" 54#include "llpanelaudioprefs.h"
@@ -353,7 +352,6 @@ LLFloaterPreference::LLFloaterPreference()
353 352
354BOOL LLFloaterPreference::postBuild() 353BOOL LLFloaterPreference::postBuild()
355{ 354{
356 requires<LLButton>("About...");
357 requires<LLButton>("OK"); 355 requires<LLButton>("OK");
358 requires<LLButton>("Cancel"); 356 requires<LLButton>("Cancel");
359 requires<LLButton>("Apply"); 357 requires<LLButton>("Apply");
@@ -363,9 +361,6 @@ BOOL LLFloaterPreference::postBuild()
363 { 361 {
364 return FALSE; 362 return FALSE;
365 } 363 }
366
367 mAboutBtn = getChild<LLButton>("About...");
368 mAboutBtn->setClickedCallback(onClickAbout, this);
369 364
370 mApplyBtn = getChild<LLButton>("Apply"); 365 mApplyBtn = getChild<LLButton>("Apply");
371 mApplyBtn->setClickedCallback(onBtnApply, this); 366 mApplyBtn->setClickedCallback(onBtnApply, this);
@@ -430,13 +425,6 @@ void LLFloaterPreference::show(void*)
430} 425}
431 426
432 427
433// static
434void LLFloaterPreference::onClickAbout(void*)
435{
436 LLFloaterAbout::show(NULL);
437}
438
439
440// static 428// static
441void LLFloaterPreference::onBtnOK( void* userdata ) 429void LLFloaterPreference::onBtnOK( void* userdata )
442{ 430{
diff --git a/linden/indra/newview/llfloaterpreference.h b/linden/indra/newview/llfloaterpreference.h
index 894d242..1878280 100644
--- a/linden/indra/newview/llfloaterpreference.h
+++ b/linden/indra/newview/llfloaterpreference.h
@@ -40,7 +40,6 @@
40#define LL_LLFLOATERPREFERENCE_H 40#define LL_LLFLOATERPREFERENCE_H
41 41
42#include "llfloater.h" 42#include "llfloater.h"
43#include "lltabcontainervertical.h"
44 43
45class LLPanelGeneral; 44class LLPanelGeneral;
46class LLPanelInput; 45class LLPanelInput;
@@ -119,12 +118,10 @@ protected:
119 118
120 /*virtual*/ void onClose(bool app_quitting); 119 /*virtual*/ void onClose(bool app_quitting);
121 120
122 LLButton* mAboutBtn;
123 LLButton *mOKBtn; 121 LLButton *mOKBtn;
124 LLButton *mCancelBtn; 122 LLButton *mCancelBtn;
125 LLButton *mApplyBtn; 123 LLButton *mApplyBtn;
126 124
127 static void onClickAbout(void*);
128 static void onBtnOK(void*); 125 static void onBtnOK(void*);
129 static void onBtnCancel(void*); 126 static void onBtnCancel(void*);
130 static void onBtnApply(void*); 127 static void onBtnApply(void*);
diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp
index 6e0949f..bfcc04a 100644
--- a/linden/indra/newview/llpanelavatar.cpp
+++ b/linden/indra/newview/llpanelavatar.cpp
@@ -67,7 +67,6 @@
67#include "llscrolllistctrl.h" 67#include "llscrolllistctrl.h"
68#include "llstatusbar.h" 68#include "llstatusbar.h"
69#include "lltabcontainer.h" 69#include "lltabcontainer.h"
70#include "lltabcontainervertical.h"
71#include "llimview.h" 70#include "llimview.h"
72#include "lltooldraganddrop.h" 71#include "lltooldraganddrop.h"
73#include "lluiconstants.h" 72#include "lluiconstants.h"
diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp
index c6f9b0c..36fc86d 100644
--- a/linden/indra/newview/llpanelclassified.cpp
+++ b/linden/indra/newview/llpanelclassified.cpp
@@ -54,7 +54,6 @@
54#include "lllineeditor.h" 54#include "lllineeditor.h"
55#include "llfloateravatarinfo.h" 55#include "llfloateravatarinfo.h"
56#include "llfloaterclassified.h" 56#include "llfloaterclassified.h"
57#include "lltabcontainervertical.h"
58#include "lltextbox.h" 57#include "lltextbox.h"
59#include "llcombobox.h" 58#include "llcombobox.h"
60#include "llviewertexteditor.h" 59#include "llviewertexteditor.h"
diff --git a/linden/indra/newview/llpanelpick.cpp b/linden/indra/newview/llpanelpick.cpp
index b26b51a..9c2638f 100644
--- a/linden/indra/newview/llpanelpick.cpp
+++ b/linden/indra/newview/llpanelpick.cpp
@@ -47,7 +47,6 @@
47#include "llcheckboxctrl.h" 47#include "llcheckboxctrl.h"
48#include "llviewercontrol.h" 48#include "llviewercontrol.h"
49#include "lllineeditor.h" 49#include "lllineeditor.h"
50#include "lltabcontainervertical.h"
51#include "lltextbox.h" 50#include "lltextbox.h"
52#include "llviewertexteditor.h" 51#include "llviewertexteditor.h"
53#include "lltexturectrl.h" 52#include "lltexturectrl.h"
diff --git a/linden/indra/newview/llprefsadvanced.cpp b/linden/indra/newview/llprefsadvanced.cpp
index 60c936a..56c72c4 100644
--- a/linden/indra/newview/llprefsadvanced.cpp
+++ b/linden/indra/newview/llprefsadvanced.cpp
@@ -69,6 +69,7 @@ BOOL LLPrefsAdvanced::postBuild()
69 childSetValue("language_is_public", gSavedSettings.getBOOL("LanguageIsPublic")); 69 childSetValue("language_is_public", gSavedSettings.getBOOL("LanguageIsPublic"));
70 childSetValue("allow_mupose", gSavedSettings.getBOOL("AllowMUpose")); 70 childSetValue("allow_mupose", gSavedSettings.getBOOL("AllowMUpose"));
71 childSetValue("auto_close_ooc", gSavedSettings.getBOOL("AutoCloseOOC")); 71 childSetValue("auto_close_ooc", gSavedSettings.getBOOL("AutoCloseOOC"));
72 childSetValue("shadows_check", gSavedSettings.getBOOL("ShadowsEnabled"));
72 73
73 childSetValue("lightshare_combo", 74 childSetValue("lightshare_combo",
74 LLSD((S32)gSavedSettings.getU32("LightShareAllowed"))); 75 LLSD((S32)gSavedSettings.getU32("LightShareAllowed")));
@@ -131,6 +132,7 @@ void LLPrefsAdvanced::apply()
131 childSetValue("shadows_check", FALSE); 132 childSetValue("shadows_check", FALSE);
132 LLNotifications::instance().add("NoShadows"); 133 LLNotifications::instance().add("NoShadows");
133 llwarns << "Attempting to enable shadow rendering while graphics settings less than Ultra or shaders are missing!" << llendl; 134 llwarns << "Attempting to enable shadow rendering while graphics settings less than Ultra or shaders are missing!" << llendl;
135 gSavedSettings.setBOOL("ShadowsEnabled", FALSE);
134 } 136 }
135 else if ( (gSavedSettings.getBOOL("WindLightUseAtmosShaders") // If we do, toggle shadows in the correct order 137 else if ( (gSavedSettings.getBOOL("WindLightUseAtmosShaders") // If we do, toggle shadows in the correct order
136 && gSavedSettings.getBOOL("VertexShaderEnable")) ) 138 && gSavedSettings.getBOOL("VertexShaderEnable")) )
@@ -138,6 +140,7 @@ void LLPrefsAdvanced::apply()
138 gSavedSettings.setBOOL("RenderUseFBO", childGetValue("shadows_check").asBoolean()); 140 gSavedSettings.setBOOL("RenderUseFBO", childGetValue("shadows_check").asBoolean());
139 gSavedSettings.setBOOL("RenderDeferred", childGetValue("shadows_check").asBoolean()); 141 gSavedSettings.setBOOL("RenderDeferred", childGetValue("shadows_check").asBoolean());
140 llinfos << "Shadow rendering enabled" << llendl; 142 llinfos << "Shadow rendering enabled" << llendl;
143 gSavedSettings.setBOOL("ShadowsEnabled", TRUE);
141 } 144 }
142 } 145 }
143 else if (!childGetValue("shadows_check").asBoolean()) 146 else if (!childGetValue("shadows_check").asBoolean())
@@ -147,9 +150,9 @@ void LLPrefsAdvanced::apply()
147 gSavedSettings.setBOOL("RenderDeferred", childGetValue("shadows_check").asBoolean()); 150 gSavedSettings.setBOOL("RenderDeferred", childGetValue("shadows_check").asBoolean());
148 gSavedSettings.setBOOL("RenderUseFBO", childGetValue("shadows_check").asBoolean()); 151 gSavedSettings.setBOOL("RenderUseFBO", childGetValue("shadows_check").asBoolean());
149 llinfos << "Shadow rendering disabled" << llendl; 152 llinfos << "Shadow rendering disabled" << llendl;
153 gSavedSettings.setBOOL("ShadowsEnabled", FALSE);
150 } 154 }
151 } 155 }
152 gSavedSettings.setBOOL("ShadowsEnabled", childGetValue("shadows_check").asBoolean());
153 156
154 if (gSavedSettings.getBOOL("LegacyPieEnabled") == !((BOOL)childGetValue("legacy_pie_menu_checkbox"))) 157 if (gSavedSettings.getBOOL("LegacyPieEnabled") == !((BOOL)childGetValue("legacy_pie_menu_checkbox")))
155 { 158 {
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp
index 3cedf73..c5c14b5 100644
--- a/linden/indra/newview/lltexturecache.cpp
+++ b/linden/indra/newview/lltexturecache.cpp
@@ -1063,6 +1063,13 @@ void LLTextureCache::writeEntryAndClose(S32 idx, Entry& entry)
1063 if (!mReadOnly) 1063 if (!mReadOnly)
1064 { 1064 {
1065 entry.mTime = time(NULL); 1065 entry.mTime = time(NULL);
1066 if(entry.mImageSize < entry.mBodySize)
1067 {
1068 // Just say no, due to my messing around to cache discards other than 0 we can end up here
1069 // after recalling an image from cache at a lower discard than cached. RC
1070 return;
1071 }
1072
1066 llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize); 1073 llassert_always(entry.mImageSize == 0 || entry.mImageSize == -1 || entry.mImageSize > entry.mBodySize);
1067 if (entry.mBodySize > 0) 1074 if (entry.mBodySize > 0)
1068 { 1075 {
diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp
index 326a1b6..2184478 100644
--- a/linden/indra/newview/lltexturefetch.cpp
+++ b/linden/indra/newview/lltexturefetch.cpp
@@ -169,6 +169,9 @@ public:
169 mGetReason = reason; 169 mGetReason = reason;
170 } 170 }
171 171
172 void setCanUseHTTP(bool can_use_http) {mCanUseHTTP = can_use_http;}
173 bool getCanUseHTTP()const {return mCanUseHTTP ;}
174
172protected: 175protected:
173 LLTextureFetchWorker(LLTextureFetch* fetcher, const LLUUID& id, const LLHost& host, 176 LLTextureFetchWorker(LLTextureFetch* fetcher, const LLUUID& id, const LLHost& host,
174 F32 priority, S32 discard, S32 size); 177 F32 priority, S32 discard, S32 size);
@@ -218,8 +221,15 @@ private:
218 QUEUED = 1, 221 QUEUED = 1,
219 SENT_SIM = 2 222 SENT_SIM = 2
220 }; 223 };
224 enum e_write_to_cache_state //mWriteToCacheState
225 {
226 NOT_WRITE = 0,
227 CAN_WRITE = 1,
228 SHOULD_WRITE = 2
229 };
221 static const char* sStateDescs[]; 230 static const char* sStateDescs[];
222 e_state mState; 231 e_state mState;
232 e_write_to_cache_state mWriteToCacheState;
223 LLTextureFetch* mFetcher; 233 LLTextureFetch* mFetcher;
224 LLPointer<LLImageFormatted> mFormattedImage; 234 LLPointer<LLImageFormatted> mFormattedImage;
225 LLPointer<LLImageRaw> mRawImage; 235 LLPointer<LLImageRaw> mRawImage;
@@ -254,6 +264,8 @@ private:
254 BOOL mNeedsAux; 264 BOOL mNeedsAux;
255 BOOL mHaveAllData; 265 BOOL mHaveAllData;
256 BOOL mInLocalCache; 266 BOOL mInLocalCache;
267 bool mCanUseHTTP ;
268 bool mCanUseNET ; //can get from asset server.
257 S32 mHTTPFailCount; 269 S32 mHTTPFailCount;
258 S32 mRetryAttempt; 270 S32 mRetryAttempt;
259 S32 mActiveCount; 271 S32 mActiveCount;
@@ -379,6 +391,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
379 S32 size) // Desired size 391 S32 size) // Desired size
380 : LLWorkerClass(fetcher, "TextureFetch"), 392 : LLWorkerClass(fetcher, "TextureFetch"),
381 mState(INIT), 393 mState(INIT),
394 mWriteToCacheState(NOT_WRITE),
382 mFetcher(fetcher), 395 mFetcher(fetcher),
383 mID(id), 396 mID(id),
384 mHost(host), 397 mHost(host),
@@ -407,6 +420,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
407 mNeedsAux(FALSE), 420 mNeedsAux(FALSE),
408 mHaveAllData(FALSE), 421 mHaveAllData(FALSE),
409 mInLocalCache(FALSE), 422 mInLocalCache(FALSE),
423 mCanUseHTTP(true),
410 mHTTPFailCount(0), 424 mHTTPFailCount(0),
411 mRetryAttempt(0), 425 mRetryAttempt(0),
412 mActiveCount(0), 426 mActiveCount(0),
@@ -417,6 +431,8 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
417 mTotalPackets(0), 431 mTotalPackets(0),
418 mImageCodec(IMG_CODEC_INVALID) 432 mImageCodec(IMG_CODEC_INVALID)
419{ 433{
434 mCanUseNET = mUrl.empty() ;
435
420 calcWorkPriority(); 436 calcWorkPriority();
421 mType = host.isOk() ? LLImageBase::TYPE_AVATAR_BAKE : LLImageBase::TYPE_NORMAL; 437 mType = host.isOk() ? LLImageBase::TYPE_AVATAR_BAKE : LLImageBase::TYPE_NORMAL;
422// llinfos << "Create: " << mID << " mHost:" << host << " Discard=" << discard << llendl; 438// llinfos << "Create: " << mID << " mHost:" << host << " Discard=" << discard << llendl;
@@ -573,13 +589,25 @@ bool LLTextureFetchWorker::doWork(S32 param)
573{ 589{
574 LLMutexLock lock(&mWorkMutex); 590 LLMutexLock lock(&mWorkMutex);
575 591
576 if ((mFetcher->isQuitting() || (mImagePriority <= 0.0f) || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED))) 592 if ((mFetcher->isQuitting() || getFlags(LLWorkerClass::WCF_DELETE_REQUESTED)))
577 { 593 {
578 if (mState < WRITE_TO_CACHE) 594 if (mState < DECODE_IMAGE)
579 { 595 {
580 return true; // abort 596 return true; // abort
581 } 597 }
582 } 598 }
599 if (mImagePriority < 1.0f)
600 {
601 if (mState == INIT || mState == LOAD_FROM_NETWORK || mState == LOAD_FROM_SIMULATOR)
602 {
603 return true; // abort
604 }
605 }
606 if (mState > CACHE_POST && !mCanUseNET && !mCanUseHTTP)
607 {
608 //nowhere to get data, abort.
609 return true ;
610 }
583 611
584 if (mFetcher->mDebugPause|| gDisconnected) 612 if (mFetcher->mDebugPause|| gDisconnected)
585 { 613 {
@@ -647,7 +675,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
647 mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority, 675 mCacheReadHandle = mFetcher->mTextureCache->readFromCache(mID, cache_priority,
648 offset, size, responder); 676 offset, size, responder);
649 } 677 }
650 else 678 else if(mCanUseHTTP)
651 { 679 {
652 if (!(mUrl.compare(0, 7, "http://") == 0)) 680 if (!(mUrl.compare(0, 7, "http://") == 0))
653 { 681 {
@@ -657,6 +685,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
657 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); 685 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
658 mState = SEND_HTTP_REQ; 686 mState = SEND_HTTP_REQ;
659 } 687 }
688 else
689 {
690 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
691 mState = LOAD_FROM_NETWORK;
692 }
660 } 693 }
661 694
662 if (mLoaded) 695 if (mLoaded)
@@ -689,6 +722,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
689 // we have enough data, decode it 722 // we have enough data, decode it
690 llassert_always(mFormattedImage->getDataSize() > 0); 723 llassert_always(mFormattedImage->getDataSize() > 0);
691 mState = DECODE_IMAGE; 724 mState = DECODE_IMAGE;
725 mWriteToCacheState = NOT_WRITE ;
726 LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
727 << " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
728 << " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
692 // fall through 729 // fall through
693 } 730 }
694 else 731 else
@@ -716,7 +753,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
716 bool get_url = gSavedSettings.getBOOL("ImagePipelineUseHTTP"); 753 bool get_url = gSavedSettings.getBOOL("ImagePipelineUseHTTP");
717 if (!mUrl.empty()) get_url = false; 754 if (!mUrl.empty()) get_url = false;
718// if (mHost != LLHost::invalid) get_url = false; 755// if (mHost != LLHost::invalid) get_url = false;
719 if ( get_url ) 756 if ( get_url && mCanUseHTTP && mUrl.empty())//get http url.
720 { 757 {
721 LLViewerRegion* region = NULL; 758 LLViewerRegion* region = NULL;
722 if (mHost == LLHost::invalid) 759 if (mHost == LLHost::invalid)
@@ -730,23 +767,35 @@ bool LLTextureFetchWorker::doWork(S32 param)
730 if (!http_url.empty()) 767 if (!http_url.empty())
731 { 768 {
732 mUrl = http_url + "/?texture_id=" + mID.asString().c_str(); 769 mUrl = http_url + "/?texture_id=" + mID.asString().c_str();
770 mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id.
771 }
772 else
773 {
774 mCanUseHTTP = false ;
733 } 775 }
734 } 776 }
735 else 777 else
736 { 778 {
737 llwarns << "Region not found for host: " << mHost << llendl; 779 // This will happen if not logged in or if a region deoes not have HTTP Texture enabled
780 //llwarns << "Region not found for host: " << mHost << llendl;
781 mCanUseHTTP = false;
738 } 782 }
739 } 783 }
740 if (!mUrl.empty()) 784 if (mCanUseHTTP && !mUrl.empty())
741 { 785 {
742 mState = LLTextureFetchWorker::SEND_HTTP_REQ; 786 mState = LLTextureFetchWorker::SEND_HTTP_REQ;
743 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); 787 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
788 if(mWriteToCacheState != NOT_WRITE)
789 {
790 mWriteToCacheState = CAN_WRITE ;
791 }
744 // don't return, fall through to next state 792 // don't return, fall through to next state
745 } 793 }
746 else if (mSentRequest == UNSENT) 794 else if (mSentRequest == UNSENT)
747 { 795 {
748 // Add this to the network queue and sit here. 796 // Add this to the network queue and sit here.
749 // LLTextureFetch::update() will send off a request which will change our state 797 // LLTextureFetch::update() will send off a request which will change our state
798 mWriteToCacheState = CAN_WRITE ;
750 mRequestedSize = mDesiredSize; 799 mRequestedSize = mDesiredSize;
751 mRequestedDiscard = mDesiredDiscard; 800 mRequestedDiscard = mDesiredDiscard;
752 mSentRequest = QUEUED; 801 mSentRequest = QUEUED;
@@ -778,6 +827,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
778 } 827 }
779 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); 828 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
780 mState = DECODE_IMAGE; 829 mState = DECODE_IMAGE;
830 mWriteToCacheState = SHOULD_WRITE ;
781 } 831 }
782 else 832 else
783 { 833 {
@@ -788,6 +838,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
788 838
789 if (mState == SEND_HTTP_REQ) 839 if (mState == SEND_HTTP_REQ)
790 { 840 {
841 if(mCanUseHTTP)
791 { 842 {
792 const S32 HTTP_QUEUE_MAX_SIZE = 8; 843 const S32 HTTP_QUEUE_MAX_SIZE = 8;
793 // *TODO: Integrate this with llviewerthrottle 844 // *TODO: Integrate this with llviewerthrottle
@@ -861,28 +912,78 @@ bool LLTextureFetchWorker::doWork(S32 param)
861 S32 cur_size = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0; 912 S32 cur_size = mFormattedImage.notNull() ? mFormattedImage->getDataSize() : 0;
862 if (mRequestedSize < 0) 913 if (mRequestedSize < 0)
863 { 914 {
864 const S32 HTTP_MAX_RETRY_COUNT = 4; 915 S32 max_attempts;
865 llinfos << "HTTP GET failed for: " << mUrl 916 if (mGetStatus == HTTP_NOT_FOUND)
866 << " Status: " << mGetStatus << " Reason: " << mGetReason
867 << " Try:" << mHTTPFailCount+1 << "/" << HTTP_MAX_RETRY_COUNT << llendl;
868 if (cur_size == 0)
869 { 917 {
870 ++mHTTPFailCount; 918 mHTTPFailCount = max_attempts = 1; // Don't retry
871 if (mGetStatus == HTTP_NOT_FOUND || mHTTPFailCount >= HTTP_MAX_RETRY_COUNT) 919 llwarns << "Texture missing from server (404): " << mUrl << llendl;
920
921 //roll back to try UDP
922 if(mCanUseNET)
923 {
924 mState = INIT ;
925 mCanUseHTTP = false ;
926 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
927 return false ;
928 }
929 else
872 { 930 {
931 // UDP is not an option, we are dead
873 resetFormattedData(); 932 resetFormattedData();
874 return true; // failed 933 return true; // failed
875 } 934 }
935 }
936 else if (mGetStatus == HTTP_SERVICE_UNAVAILABLE)
937 {
938 // *TODO: Should probably introduce a timer here to delay future HTTP requsts
939 // for a short time (~1s) to ease server load? Ideally the server would queue
940 // requests instead of returning 503... we already limit the number pending.
941 ++mHTTPFailCount;
942 max_attempts = mHTTPFailCount+1; // Keep retrying
943 LL_INFOS_ONCE("Texture") << "Texture server busy (503): " << mUrl << LL_ENDL;
944 }
945 else
946 {
947 const S32 HTTP_MAX_RETRY_COUNT = 3;
948 max_attempts = HTTP_MAX_RETRY_COUNT + 1;
949 ++mHTTPFailCount;
950 llinfos << "HTTP GET failed for: " << mUrl
951 << " Status: " << mGetStatus << " Reason: '" << mGetReason << "'"
952 << " Attempt:" << mHTTPFailCount+1 << "/" << max_attempts << llendl;
953 }
954
955 if (mHTTPFailCount >= max_attempts)
956 {
957 // Make max_attempts attempt at decoding what data we have, then bail forever on this image
958 if (cur_size > 0 && (mHTTPFailCount < (max_attempts+1)) )
959 {
960 // Use available data
961 mLoadedDiscard = mFormattedImage->getDiscardLevel();
962 mState = DECODE_IMAGE;
963 return false;
964 }
876 else 965 else
877 { 966 {
878 mState = SEND_HTTP_REQ; 967 //roll back to try UDP
879 return false; // retry 968 if(mCanUseNET)
969 {
970 mState = INIT ;
971 mCanUseHTTP = false ;
972 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
973 return false ;
974 }
975 else
976 {
977 // UDP is not an option, we are dead
978 resetFormattedData();
979 return true; // failed
980 }
880 } 981 }
881 } 982 }
882 else 983 else
883 { 984 {
884 mState = DECODE_IMAGE; 985 mState = SEND_HTTP_REQ;
885 return false; // use what we have 986 return false; // retry
886 } 987 }
887 } 988 }
888 989
@@ -898,10 +999,15 @@ bool LLTextureFetchWorker::doWork(S32 param)
898 } 999 }
899 1000
900 llassert_always(mBufferSize == cur_size + mRequestedSize); 1001 llassert_always(mBufferSize == cur_size + mRequestedSize);
901 if (mHaveAllData) 1002 if (mHaveAllData && mRequestedDiscard == 0) //the image file is fully loaded.
902 { 1003 {
903 mFileSize = mBufferSize; 1004 mFileSize = mBufferSize;
904 } 1005 }
1006 else //the file size is unknown.
1007 {
1008 mFileSize = mBufferSize + 1 ; //flag the file is not fully loaded.
1009 }
1010
905 U8* buffer = new U8[mBufferSize]; 1011 U8* buffer = new U8[mBufferSize];
906 if (cur_size > 0) 1012 if (cur_size > 0)
907 { 1013 {
@@ -916,6 +1022,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
916 mBufferSize = 0; 1022 mBufferSize = 0;
917 mLoadedDiscard = mRequestedDiscard; 1023 mLoadedDiscard = mRequestedDiscard;
918 mState = DECODE_IMAGE; 1024 mState = DECODE_IMAGE;
1025 if(mWriteToCacheState != NOT_WRITE)
1026 {
1027 mWriteToCacheState = SHOULD_WRITE ;
1028 }
919 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); 1029 setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
920 return false; 1030 return false;
921 } 1031 }
@@ -980,7 +1090,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
980 1090
981 if (mState == WRITE_TO_CACHE) 1091 if (mState == WRITE_TO_CACHE)
982 { 1092 {
983 if (mInLocalCache || mSentRequest == UNSENT || mFormattedImage.isNull()) 1093 if (mWriteToCacheState != SHOULD_WRITE || mFormattedImage.isNull())
984 { 1094 {
985 // If we're in a local cache or we didn't actually receive any new data, 1095 // If we're in a local cache or we didn't actually receive any new data,
986 // or we failed to load anything, skip 1096 // or we failed to load anything, skip
@@ -1032,7 +1142,15 @@ bool LLTextureFetchWorker::doWork(S32 param)
1032 else 1142 else
1033 { 1143 {
1034 setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); 1144 setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority);
1035 return true; 1145
1146 if(mDecodedDiscard<=0)
1147 {
1148 return true;
1149 }
1150 else
1151 {
1152 return false;
1153 }
1036 } 1154 }
1037 } 1155 }
1038 1156
diff --git a/linden/indra/newview/llvieweraudio.cpp b/linden/indra/newview/llvieweraudio.cpp
index 999e5dc..f043fb5 100644
--- a/linden/indra/newview/llvieweraudio.cpp
+++ b/linden/indra/newview/llvieweraudio.cpp
@@ -150,6 +150,8 @@ void audio_update_volume(bool force_update)
150 gSavedSettings.getBOOL("MuteUI") ? 0.f : gSavedSettings.getF32("AudioLevelUI")); 150 gSavedSettings.getBOOL("MuteUI") ? 0.f : gSavedSettings.getF32("AudioLevelUI"));
151 gAudiop->setSecondaryGain(LLAudioEngine::AUDIO_TYPE_AMBIENT, 151 gAudiop->setSecondaryGain(LLAudioEngine::AUDIO_TYPE_AMBIENT,
152 gSavedSettings.getBOOL("MuteAmbient") ? 0.f : gSavedSettings.getF32("AudioLevelAmbient")); 152 gSavedSettings.getBOOL("MuteAmbient") ? 0.f : gSavedSettings.getF32("AudioLevelAmbient"));
153 gAudiop->setSecondaryGain(LLAudioEngine::AUDIO_TYPE_GESTURE,
154 gSavedSettings.getBOOL("MuteGestures") ? 0.f : gSavedSettings.getF32("AudioLevelGestures"));
153 } 155 }
154 156
155 // Streaming Music 157 // Streaming Music
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp
index cca737c..0edb2c4 100644
--- a/linden/indra/newview/llviewercontrol.cpp
+++ b/linden/indra/newview/llviewercontrol.cpp
@@ -582,6 +582,7 @@ void settings_setup_listeners()
582 gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 582 gSavedSettings.getControl("AudioLevelMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
583 gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 583 gSavedSettings.getControl("AudioLevelMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
584 gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 584 gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
585 gSavedSettings.getControl("AudioLevelGestures")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
585 gSavedSettings.getControl("AudioLevelDistance")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 586 gSavedSettings.getControl("AudioLevelDistance")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
586 gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 587 gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
587 gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 588 gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
@@ -593,6 +594,7 @@ void settings_setup_listeners()
593 gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 594 gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
594 gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 595 gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
595 gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1)); 596 gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
597 gSavedSettings.getControl("MuteGestures")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _1));
596 gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _1)); 598 gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _1));
597 gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _1)); 599 gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _1));
598 gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _1)); 600 gSavedSettings.getControl("RenderLightingDetail")->getSignal()->connect(boost::bind(&handleRenderLightingDetailChanged, _1));
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index fb69389..9e2cc3d 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -5443,6 +5443,24 @@ class LLWorldSetBusy : public view_listener_t
5443 } 5443 }
5444}; 5444};
5445 5445
5446class LLWorldToggleAutoResponse: public view_listener_t
5447{
5448 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5449 {
5450 gSavedPerAccountSettings.setBOOL("InstantMessageResponseEnabled", !gSavedPerAccountSettings.getBOOL("InstantMessageResponseEnabled"));
5451 return true;
5452 }
5453
5454};
5455
5456class LLWorldCheckAutoResponse: public view_listener_t
5457{
5458 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5459 {
5460 gMenuHolder->findControl(userdata["control"].asString())->setValue(gSavedPerAccountSettings.getBOOL("InstantMessageResponseEnabled"));
5461 return true;
5462 }
5463};
5446 5464
5447class LLWorldCreateLandmark : public view_listener_t 5465class LLWorldCreateLandmark : public view_listener_t
5448{ 5466{
@@ -10947,6 +10965,8 @@ void initialize_menus()
10947 addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); 10965 addMenu(new LLWorldTeleportHome(), "World.TeleportHome");
10948 addMenu(new LLWorldSetAway(), "World.SetAway"); 10966 addMenu(new LLWorldSetAway(), "World.SetAway");
10949 addMenu(new LLWorldSetBusy(), "World.SetBusy"); 10967 addMenu(new LLWorldSetBusy(), "World.SetBusy");
10968 addMenu(new LLWorldToggleAutoResponse(), "World.ToggleAutoResponse");
10969 addMenu(new LLWorldCheckAutoResponse(), "World.CheckAutoResponse");
10950 10970
10951 addMenu(new LLWorldEnableCreateLandmark(), "World.EnableCreateLandmark"); 10971 addMenu(new LLWorldEnableCreateLandmark(), "World.EnableCreateLandmark");
10952 addMenu(new LLWorldEnableSetHomeLocation(), "World.EnableSetHomeLocation"); 10972 addMenu(new LLWorldEnableSetHomeLocation(), "World.EnableSetHomeLocation");
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index bc1aedb..b243e34 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -1566,195 +1566,198 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1566 } 1566 }
1567 } 1567 }
1568 }*/ 1568 }*/
1569 bool typing_init = false; 1569 if (gSavedPerAccountSettings.getBOOL("InstantMessageResponseEnabled"))
1570 if( dialog == IM_TYPING_START && !is_muted )
1571 { 1570 {
1572 if(!gIMMgr->hasSession(computed_session_id) && gSavedPerAccountSettings.getBOOL("InstantMessageAnnounceIncoming")) 1571 bool typing_init = false;
1572 if( dialog == IM_TYPING_START && !is_muted )
1573 { 1573 {
1574 typing_init = true; 1574 if(!gIMMgr->hasSession(computed_session_id) && gSavedPerAccountSettings.getBOOL("InstantMessageAnnounceIncoming"))
1575 if( gSavedPerAccountSettings.getBOOL("InstantMessageAnnounceStealFocus") )
1576 { 1575 {
1577 /*LLUUID sess =*/ gIMMgr->addSession(name, IM_NOTHING_SPECIAL, from_id); 1576 typing_init = true;
1578 make_ui_sound("UISndNewIncomingIMSession"); 1577 if( gSavedPerAccountSettings.getBOOL("InstantMessageAnnounceStealFocus") )
1578 {
1579 /*LLUUID sess =*/ gIMMgr->addSession(name, IM_NOTHING_SPECIAL, from_id);
1580 make_ui_sound("UISndNewIncomingIMSession");
1581 }
1582 gIMMgr->addMessage(
1583 computed_session_id,
1584 from_id,
1585 name,
1586 llformat("You sense a disturbance in the force... (%s is typing)",name.c_str()),
1587 name,
1588 IM_NOTHING_SPECIAL,
1589 parent_estate_id,
1590 region_id,
1591 position,
1592 false);
1579 } 1593 }
1580 gIMMgr->addMessage(
1581 computed_session_id,
1582 from_id,
1583 name,
1584 llformat("You sense a disturbance in the force... (%s is typing)",name.c_str()),
1585 name,
1586 IM_NOTHING_SPECIAL,
1587 parent_estate_id,
1588 region_id,
1589 position,
1590 false);
1591 } 1594 }
1592 }
1593 1595
1594 bool is_auto_response = false; 1596 bool is_auto_response = false;
1595 if(dialog == IM_NOTHING_SPECIAL) { 1597 if(dialog == IM_NOTHING_SPECIAL) {
1596 // detect auto responses from GreenLife and compatible viewers 1598 // detect auto responses from compatible viewers
1597 is_auto_response = ( message.substr(0, 21) == "/me (auto-response): " ); 1599 is_auto_response = ( message.substr(0, 21) == "/me (auto-response): " );
1598 } 1600 }
1599 1601
1600 bool do_auto_response = false; 1602 bool do_auto_response = false;
1601 if( gSavedPerAccountSettings.getBOOL("InstantMessageResponseAnyone" ) ) 1603 if( gSavedPerAccountSettings.getBOOL("InstantMessageResponseAnyone" ) )
1602 do_auto_response = true; 1604 do_auto_response = true;
1603 1605
1604 // odd name for auto respond to non-friends 1606 // odd name for auto respond to non-friends
1605 if( gSavedPerAccountSettings.getBOOL("InstantMessageResponseFriends") && 1607 if( gSavedPerAccountSettings.getBOOL("InstantMessageResponseFriends") &&
1606 LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL ) 1608 LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL )
1607 do_auto_response = true; 1609 do_auto_response = true;
1608 1610
1609 if( is_muted && !gSavedPerAccountSettings.getBOOL("InstantMessageResponseMuted") ) 1611 if( is_muted && !gSavedPerAccountSettings.getBOOL("InstantMessageResponseMuted") )
1610 do_auto_response = false; 1612 do_auto_response = false;
1611 1613
1612 if( offline != IM_ONLINE ) 1614 if( offline != IM_ONLINE )
1613 do_auto_response = false; 1615 do_auto_response = false;
1614 1616
1615 if( is_auto_response ) 1617 if( is_auto_response )
1616 do_auto_response = false; 1618 do_auto_response = false;
1617 1619
1618 // handle cases where IM_NOTHING_SPECIAL is not an IM 1620 // handle cases where IM_NOTHING_SPECIAL is not an IM
1619 if( name == SYSTEM_FROM || 1621 if( name == SYSTEM_FROM ||
1620 from_id.isNull() || 1622 from_id.isNull() ||
1621 to_id.isNull() ) 1623 to_id.isNull() )
1622 do_auto_response = false; 1624 do_auto_response = false;
1623 1625
1624// if( do_auto_response ) 1626 // if( do_auto_response )
1625// [RLVa:KB] - Alternate: Emerald-370 1627 // [RLVa:KB] - Alternate: Emerald-370
1626 // Emerald specific: auto-response should be blocked if the avie is RLV @sendim=n restricted and the recipient is not an exception 1628 // Emerald specific: auto-response should be blocked if the avie is RLV @sendim=n restricted and the recipient is not an exception
1627 if ( (do_auto_response) && ( (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.isException(RLV_BHVR_SENDIM, from_id)) ) ) 1629 if ( (do_auto_response) && ( (!gRlvHandler.hasBehaviour(RLV_BHVR_SENDIM)) || (gRlvHandler.isException(RLV_BHVR_SENDIM, from_id)) ) )
1628// [/RLVa:KB] 1630 // [/RLVa:KB]
1629 {
1630 if((dialog == IM_NOTHING_SPECIAL && !is_auto_response) ||
1631 (dialog == IM_TYPING_START && gSavedPerAccountSettings.getBOOL("InstantMessageShowOnTyping"))
1632 )
1633 { 1631 {
1634 BOOL has = gIMMgr->hasSession(computed_session_id); 1632 if((dialog == IM_NOTHING_SPECIAL && !is_auto_response) ||
1635 if(!has || gSavedPerAccountSettings.getBOOL("InstantMessageResponseRepeat") || typing_init) 1633 (dialog == IM_TYPING_START && gSavedPerAccountSettings.getBOOL("InstantMessageShowOnTyping"))
1634 )
1636 { 1635 {
1637 BOOL show = !gSavedPerAccountSettings.getBOOL("InstantMessageShowResponded"); 1636 BOOL has = gIMMgr->hasSession(computed_session_id);
1638 if(!has && show) 1637 if(!has || gSavedPerAccountSettings.getBOOL("InstantMessageResponseRepeat") || typing_init)
1639 {
1640 gIMMgr->addSession(name, IM_NOTHING_SPECIAL, from_id);
1641 }
1642 if(show)
1643 {
1644 gIMMgr->addMessage(
1645 computed_session_id,
1646 from_id,
1647 SYSTEM_FROM,
1648 llformat("Autoresponse sent to %s.",name.c_str()),
1649 LLStringUtil::null,
1650 IM_NOTHING_SPECIAL,
1651 parent_estate_id,
1652 region_id,
1653 position,
1654 false);
1655 }
1656 std::string my_name;
1657 gAgent.buildFullname(my_name);
1658
1659 //<-- Personalized Autoresponse by Madgeek
1660 std::string autoresponse = gSavedPerAccountSettings.getText("InstantMessageResponse");
1661 //Define Wildcards
1662 std::string fname_wildcard = "#f";
1663 std::string lname_wildcard = "#l";
1664 std::string time_wildcard = "#t";
1665 //Extract Name
1666 std::string f_name, l_name;
1667 std::istringstream inname(name);
1668 inname >> f_name >> l_name;
1669 //Generate a Timestamp
1670 time_t rawtime;
1671 time(&rawtime);
1672 char * timestamp_chars;
1673 timestamp_chars = asctime(localtime(&rawtime));
1674 std::string timestamp;
1675 timestamp.assign(timestamp_chars);
1676 timestamp = timestamp.substr(0, timestamp.find('\n'));
1677 //Handle Replacements
1678 size_t found = autoresponse.find(fname_wildcard);
1679 while(found != std::string::npos)
1680 { 1638 {
1681 autoresponse.replace(found, 2, f_name); 1639 BOOL show = !gSavedPerAccountSettings.getBOOL("InstantMessageShowResponded");
1682 found = autoresponse.find(fname_wildcard); 1640 if(!has && show)
1683 } 1641 {
1684 found = autoresponse.find(lname_wildcard); 1642 gIMMgr->addSession(name, IM_NOTHING_SPECIAL, from_id);
1685 while(found != std::string::npos) 1643 }
1686 { 1644 if(show)
1687 autoresponse.replace(found, 2, l_name); 1645 {
1646 gIMMgr->addMessage(
1647 computed_session_id,
1648 from_id,
1649 SYSTEM_FROM,
1650 llformat("Autoresponse sent to %s.",name.c_str()),
1651 LLStringUtil::null,
1652 IM_NOTHING_SPECIAL,
1653 parent_estate_id,
1654 region_id,
1655 position,
1656 false);
1657 }
1658 std::string my_name;
1659 gAgent.buildFullname(my_name);
1660
1661 //<-- Personalized Autoresponse by Madgeek
1662 std::string autoresponse = gSavedPerAccountSettings.getText("InstantMessageResponse");
1663 //Define Wildcards
1664 std::string fname_wildcard = "#f";
1665 std::string lname_wildcard = "#l";
1666 std::string time_wildcard = "#t";
1667 //Extract Name
1668 std::string f_name, l_name;
1669 std::istringstream inname(name);
1670 inname >> f_name >> l_name;
1671 //Generate a Timestamp
1672 time_t rawtime;
1673 time(&rawtime);
1674 char * timestamp_chars;
1675 timestamp_chars = asctime(localtime(&rawtime));
1676 std::string timestamp;
1677 timestamp.assign(timestamp_chars);
1678 timestamp = timestamp.substr(0, timestamp.find('\n'));
1679 //Handle Replacements
1680 size_t found = autoresponse.find(fname_wildcard);
1681 while(found != std::string::npos)
1682 {
1683 autoresponse.replace(found, 2, f_name);
1684 found = autoresponse.find(fname_wildcard);
1685 }
1688 found = autoresponse.find(lname_wildcard); 1686 found = autoresponse.find(lname_wildcard);
1689 } 1687 while(found != std::string::npos)
1690 found = autoresponse.find(time_wildcard); 1688 {
1691 while(found != std::string::npos) 1689 autoresponse.replace(found, 2, l_name);
1692 { 1690 found = autoresponse.find(lname_wildcard);
1693 autoresponse.replace(found, 2, timestamp); 1691 }
1694 found = autoresponse.find(time_wildcard); 1692 found = autoresponse.find(time_wildcard);
1695 } 1693 while(found != std::string::npos)
1696 //--> Personalized Autoresponse 1694 {
1697 1695 autoresponse.replace(found, 2, timestamp);
1698 if(gSavedPerAccountSettings.getBOOL("InstantMessageResponseRepeat") && has && !typing_init) { 1696 found = autoresponse.find(time_wildcard);
1699 // send as busy auto response instead to prevent endless repeating replies 1697 }
1700 // when other end is a bot or broken client that answers to every usual IM 1698 //--> Personalized Autoresponse
1701 // reasoning for this decision can be found in RFC2812 3.3.2 Notices 1699
1702 // where PRIVMSG can be seen as IM_NOTHING_SPECIAL and NOTICE can be seen as 1700 if(gSavedPerAccountSettings.getBOOL("InstantMessageResponseRepeat") && has && !typing_init) {
1703 // IM_BUSY_AUTO_RESPONSE. The assumption here is that no existing client 1701 // send as busy auto response instead to prevent endless repeating replies
1704 // responds to IM_BUSY_AUTO_RESPONSE. --TS 1702 // when other end is a bot or broken client that answers to every usual IM
1705 std::string response = autoresponse; 1703 // reasoning for this decision can be found in RFC2812 3.3.2 Notices
1706 pack_instant_message( 1704 // where PRIVMSG can be seen as IM_NOTHING_SPECIAL and NOTICE can be seen as
1707 gMessageSystem, 1705 // IM_BUSY_AUTO_RESPONSE. The assumption here is that no existing client
1708 gAgent.getID(), 1706 // responds to IM_BUSY_AUTO_RESPONSE. --TS
1709 FALSE, 1707 std::string response = autoresponse;
1710 gAgent.getSessionID(), 1708 pack_instant_message(
1711 from_id, 1709 gMessageSystem,
1712 my_name, 1710 gAgent.getID(),
1713 response, 1711 FALSE,
1714 IM_OFFLINE, 1712 gAgent.getSessionID(),
1715 IM_BUSY_AUTO_RESPONSE, 1713 from_id,
1716 session_id); 1714 my_name,
1717 } else { 1715 response,
1718 std::string response = "/me (auto-response): "+autoresponse; 1716 IM_OFFLINE,
1719 pack_instant_message( 1717 IM_BUSY_AUTO_RESPONSE,
1720 gMessageSystem, 1718 session_id);
1721 gAgent.getID(), 1719 } else {
1722 FALSE, 1720 std::string response = "/me (auto-response): "+autoresponse;
1723 gAgent.getSessionID(), 1721 pack_instant_message(
1724 from_id, 1722 gMessageSystem,
1725 my_name, 1723 gAgent.getID(),
1726 response, 1724 FALSE,
1727 IM_OFFLINE, 1725 gAgent.getSessionID(),
1728 IM_NOTHING_SPECIAL, 1726 from_id,
1729 session_id); 1727 my_name,
1730 } 1728 response,
1731 gAgent.sendReliableMessage(); 1729 IM_OFFLINE,
1732 if(gSavedPerAccountSettings.getBOOL("InstantMessageResponseItem") && (!has || typing_init)) 1730 IM_NOTHING_SPECIAL,
1733 { 1731 session_id);
1734 LLUUID itemid = (LLUUID)gSavedPerAccountSettings.getString("InstantMessageResponseItemData"); 1732 }
1735 LLViewerInventoryItem* item = gInventory.getItem(itemid); 1733 gAgent.sendReliableMessage();
1736 if(item) 1734 if(gSavedPerAccountSettings.getBOOL("InstantMessageResponseItem") && (!has || typing_init))
1737 { 1735 {
1738 //childSetValue("im_give_disp_rect_txt","Currently set to: "+item->getName()); 1736 LLUUID itemid = (LLUUID)gSavedPerAccountSettings.getString("InstantMessageResponseItemData");
1739 if(show) 1737 LLViewerInventoryItem* item = gInventory.getItem(itemid);
1738 if(item)
1740 { 1739 {
1741 gIMMgr->addMessage( 1740 //childSetValue("im_give_disp_rect_txt","Currently set to: "+item->getName());
1742 computed_session_id, 1741 if(show)
1743 from_id, 1742 {
1744 SYSTEM_FROM, 1743 gIMMgr->addMessage(
1745 llformat("Sent %s auto-response item \"%s\"",name.c_str(),item->getName().c_str()), 1744 computed_session_id,
1746 LLStringUtil::null, 1745 from_id,
1747 IM_NOTHING_SPECIAL, 1746 SYSTEM_FROM,
1748 parent_estate_id, 1747 llformat("Sent %s auto-response item \"%s\"",name.c_str(),item->getName().c_str()),
1749 region_id, 1748 LLStringUtil::null,
1750 position, 1749 IM_NOTHING_SPECIAL,
1751 false); 1750 parent_estate_id,
1751 region_id,
1752 position,
1753 false);
1754 }
1755 LLToolDragAndDrop::giveInventory(from_id, item);
1752 } 1756 }
1753 LLToolDragAndDrop::giveInventory(from_id, item);
1754 } 1757 }
1758 //InstantMessageResponseItem<
1759
1755 } 1760 }
1756 //InstantMessageResponseItem<
1757
1758 } 1761 }
1759 } 1762 }
1760 } 1763 }
@@ -3931,8 +3934,10 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
3931 msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain); 3934 msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain);
3932 3935
3933 //If we have sounds muted, don't even try to load or trigger the sound. 3936 //If we have sounds muted, don't even try to load or trigger the sound.
3934 if(gSavedSettings.getBOOL("MuteSounds") || gain == 0.0) 3937 if (gSavedSettings.getBOOL("MuteSounds") || gain == 0.0)
3938 {
3935 return; 3939 return;
3940 }
3936 3941
3937 // adjust sound location to true global coords 3942 // adjust sound location to true global coords
3938 LLVector3d pos_global = from_region_handle(region_handle); 3943 LLVector3d pos_global = from_region_handle(region_handle);
@@ -3940,9 +3945,6 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
3940 pos_global.mdV[VY] += pos_local.mV[VY]; 3945 pos_global.mdV[VY] += pos_local.mV[VY];
3941 pos_global.mdV[VZ] += pos_local.mV[VZ]; 3946 pos_global.mdV[VZ] += pos_local.mV[VZ];
3942 3947
3943 // Don't play sounds if sound settings are muted.
3944 if (gSavedSettings.getBOOL("MuteSounds")) return;
3945
3946 // Don't play a trigger sound if you can't hear it due 3948 // Don't play a trigger sound if you can't hear it due
3947 // to parcel "local audio only" settings. 3949 // to parcel "local audio only" settings.
3948 if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) return; 3950 if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) return;
@@ -3960,11 +3962,25 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
3960 return; 3962 return;
3961 } 3963 }
3962 3964
3965 // Don't load sounds if we have gestures muted -- MC
3966 if ((owner_id != gAgent.getID()) && (object_id == owner_id))
3967 {
3968 if (gSavedSettings.getBOOL("MuteGestures"))
3969 {
3970 return;
3971 }
3972 else
3973 {
3974 gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_GESTURE, pos_global);
3975 }
3976 }
3977
3963 // Don't play sounds from a region with maturity above current agent maturity 3978 // Don't play sounds from a region with maturity above current agent maturity
3964 if( !gAgent.canAccessMaturityInRegion( region_handle ) ) 3979 // Actually, let's -- MC
3980 /*if( !gAgent.canAccessMaturityInRegion( region_handle ) )
3965 { 3981 {
3966 return; 3982 return;
3967 } 3983 }*/
3968 3984
3969 gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global); 3985 gAudiop->triggerSound(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX, pos_global);
3970} 3986}
@@ -4000,11 +4016,12 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data)
4000 // help us out. 4016 // help us out.
4001 4017
4002 // Don't play sounds from a region with maturity above current agent maturity 4018 // Don't play sounds from a region with maturity above current agent maturity
4003 LLVector3d pos_global = objectp->getPositionGlobal(); 4019 // Actually, let's -- MC
4020 /*LLVector3d pos_global = objectp->getPositionGlobal();
4004 if( !gAgent.canAccessMaturityAtGlobal( pos_global ) ) 4021 if( !gAgent.canAccessMaturityAtGlobal( pos_global ) )
4005 { 4022 {
4006 return; 4023 return;
4007 } 4024 }*/
4008 4025
4009 // Add audioData starts a transfer internally. 4026 // Add audioData starts a transfer internally.
4010 sourcep->addAudioData(datap, FALSE); 4027 sourcep->addAudioData(datap, FALSE);
@@ -4040,11 +4057,12 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
4040 4057
4041 4058
4042 // Don't play sounds from a region with maturity above current agent maturity 4059 // Don't play sounds from a region with maturity above current agent maturity
4043 LLVector3d pos = objectp->getPositionGlobal(); 4060 // Actually, let's -- MC
4061 /*LLVector3d pos = objectp->getPositionGlobal();
4044 if( !gAgent.canAccessMaturityAtGlobal(pos) ) 4062 if( !gAgent.canAccessMaturityAtGlobal(pos) )
4045 { 4063 {
4046 return; 4064 return;
4047 } 4065 }*/
4048 4066
4049 objectp->setAttachedSound(sound_id, owner_id, gain, flags); 4067 objectp->setAttachedSound(sound_id, owner_id, gain, flags);
4050} 4068}
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 2732d48..f3eec54 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -3428,7 +3428,7 @@ void LLVOAvatar::resolveClient(LLColor4& avatar_name_color, std::string& client,
3428 } 3428 }
3429 if(avatar->getTE(5)->getID() != avatar->getTE(6)->getID() && !client.empty()) 3429 if(avatar->getTE(5)->getID() != avatar->getTE(6)->getID() && !client.empty())
3430 { 3430 {
3431 client = "Failure"; 3431 client = "Unknown";
3432 avatar_name_color = LLColor4::grey; 3432 avatar_name_color = LLColor4::grey;
3433 } 3433 }
3434 if(client.empty() && LLVOAvatar::sClientResolutionList.has("default")) 3434 if(client.empty() && LLVOAvatar::sClientResolutionList.has("default"))
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml b/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml
index a9bd613..6d74882 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_busy.xml
@@ -1,11 +1,14 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="busy" title="IM Response Options" 2<floater name="busy" title="IM Response Options"
3 height="446" width="255" min_height="446" min_width="255" 3 height="476" width="265" min_height="476" min_width="265"
4 follows="top|right" can_close="true" can_drag_on_left="false" 4 follows="top|right" can_close="true" can_drag_on_left="false"
5 can_minimize="true" can_resize="false" can_tear_off="false"> 5 can_minimize="true" can_resize="false" can_tear_off="false">
6 6
7 <check_box bottom="-40" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 7 <check_box bottom="-40" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
8 initial_value="false" label="Announce incoming instant messages" left="10" mouse_opaque="true" 8 initial_value="false" label="Auto-respond to incoming IMs" left="10" mouse_opaque="true"
9 name="InstantMessageResponseEnabled" radio_style="false" width="270"/>
10 <check_box bottom_delta="-30" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
11 initial_value="false" label="Announce incoming IMs" left="10" mouse_opaque="true"
9 name="InstantMessageAnnounceIncoming" radio_style="false" width="270"/> 12 name="InstantMessageAnnounceIncoming" radio_style="false" width="270"/>
10 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 13 <check_box bottom_delta="-20" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
11 initial_value="false" label="Steal focus" left_delta="10" mouse_opaque="true" name="InstantMessageAnnounceStealFocus" 14 initial_value="false" label="Steal focus" left_delta="10" mouse_opaque="true" name="InstantMessageAnnounceStealFocus"
@@ -58,7 +61,7 @@
58 61
59 <text_editor type="string" length="1" bottom_delta="-85" embedded_items="false" enabled="true" 62 <text_editor type="string" length="1" bottom_delta="-85" embedded_items="false" enabled="true"
60 follows="left|top" font="SansSerifSmall" height="75" left_delta="-15" max_length="1100" 63 follows="left|top" font="SansSerifSmall" height="75" left_delta="-15" max_length="1100"
61 mouse_opaque="true" name="im_response" width="230" word_wrap="true"/> 64 mouse_opaque="true" name="im_response" width="245" word_wrap="true"/>
62 65
63 <check_box bottom_delta="-30" enabled="true" follows="left|top" font="SansSerifSmall" height="16" 66 <check_box bottom_delta="-30" enabled="true" follows="left|top" font="SansSerifSmall" height="16"
64 initial_value="false" label="Send an item along with the response" left_delta="0" 67 initial_value="false" label="Send an item along with the response" left_delta="0"
@@ -66,28 +69,28 @@
66 width="270"/> 69 width="270"/>
67 70
68 <view_border blevel_style="in" bottom_delta="-20" follows="left|top" height="16" left_delta="0" 71 <view_border blevel_style="in" bottom_delta="-20" follows="left|top" height="16" left_delta="0"
69 mouse_opaque="false" name="im_give_drop_target_rect" width="230"/> 72 mouse_opaque="false" name="im_give_drop_target_rect" width="245"/>
70 73
71 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" bottom_delta="0" 74 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" bottom_delta="0"
72 drop_shadow_visible="true" follows="left|top" font="SansSerifSmall" h_pad="0" halign="center" 75 drop_shadow_visible="true" follows="left|top" font="SansSerifSmall" h_pad="0" halign="center"
73 height="16" left_delta="0" mouse_opaque="true" name="Give inventory" tool_tip="Drop an inventory item here to have it given along with the auto-response." 76 height="16" left_delta="0" mouse_opaque="true" name="Give inventory" tool_tip="Drop an inventory item here to have it given along with the auto-response."
74 v_pad="2" width="230"> 77 v_pad="2" width="245">
75 Drop an inventory item here 78 Drop an inventory item here
76 </text> 79 </text>
77 80
78 <view_border blevel_style="in" bottom_delta="-18" follows="left|top" height="16" left_delta="0" 81 <view_border blevel_style="in" bottom_delta="-18" follows="left|top" height="16" left_delta="0"
79 mouse_opaque="false" name="im_give_disp_rect" width="230"/> 82 mouse_opaque="false" name="im_give_disp_rect" width="245"/>
80 83
81 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" bottom_delta="0" 84 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" bottom_delta="0"
82 drop_shadow_visible="true" follows="left|top" font="SansSerifSmall" h_pad="0" halign="center" 85 drop_shadow_visible="true" follows="left|top" font="SansSerifSmall" h_pad="0" halign="center"
83 height="16" left_delta="0" mouse_opaque="true" name="im_give_disp_rect_txt" tool_tip="" 86 height="16" left_delta="0" mouse_opaque="true" name="im_give_disp_rect_txt" tool_tip=""
84 v_pad="2" width="230"> 87 v_pad="2" width="245">
85 Currently set to: ITEM 88 Currently set to: ITEM
86 </text> 89 </text>
87 90
88 <button bottom_delta="-26" follows="top|right" height="22" label="Cancel" 91 <button bottom_delta="-26" follows="top|right" height="22" label="Cancel"
89 right="-10" name="btn_cancel" tool_tip="" enagled="true" width="80" /> 92 right="-4" name="btn_cancel" tool_tip="" enagled="true" width="80" />
90 <button bottom_delta="0" follows="top|right" height="22" label="OK" 93 <button bottom_delta="0" follows="top|right" height="22" label="OK"
91 right="-90" name="btn_ok" tool_tip="" enabled="true" width="80" /> 94 right="-85" name="btn_ok" tool_tip="" enabled="true" width="80" />
92 95
93</floater> \ No newline at end of file 96</floater> \ No newline at end of file
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml b/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml
index 81168be..214db25 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_preferences.xml
@@ -15,12 +15,9 @@
15 left_delta="93" mouse_opaque="true" name="Apply" scale_image="true" 15 left_delta="93" mouse_opaque="true" name="Apply" scale_image="true"
16 width="90" /> 16 width="90" />
17 <button bottom="-455" enabled="true" follows="left|bottom" font="SansSerif" 17 <button bottom="-455" enabled="true" follows="left|bottom" font="SansSerif"
18 halign="center" height="20" label="About" label_selected="About" left="9"
19 mouse_opaque="true" name="About..." scale_image="true" width="90" />
20 <button bottom="-455" enabled="true" follows="left|bottom" font="SansSerif"
21 halign="center" height="20" 18 halign="center" height="20"
22 help_url="http://secondlife.com/app/help/technical/preferences.php" 19 help_url="http://secondlife.com/app/help/technical/preferences.php"
23 label="Help" label_selected="Help" left_delta="93" mouse_opaque="true" 20 label="Help" label_selected="Help" left="9" mouse_opaque="true"
24 name="Help" scale_image="true" width="90" /> 21 name="Help" scale_image="true" width="90" />
25 <tab_container bottom="-431" enabled="true" follows="left|top|right|bottom" height="410" 22 <tab_container bottom="-431" enabled="true" follows="left|top|right|bottom" height="410"
26 left="0" mouse_opaque="false" name="pref core" tab_group="1" 23 left="0" mouse_opaque="false" name="pref core" tab_group="1"
diff --git a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
index 8033ba7..836c4dd 100644
--- a/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/menu_viewer.xml
@@ -503,6 +503,11 @@
503 <menu_item_call name="Set Busy" label="Set Busy"> 503 <menu_item_call name="Set Busy" label="Set Busy">
504 <on_click function="World.SetBusy" userdata="" /> 504 <on_click function="World.SetBusy" userdata="" />
505 </menu_item_call> 505 </menu_item_call>
506 <menu_item_check name="Auto-Respond to IMs" label="Auto-Respond to IMs">
507 <on_click function="World.ToggleAutoResponse" userdata="" />
508 <on_check function="World.CheckAutoResponse" userdata="" />
509 </menu_item_check>
510 <menu_item_separator />
506 <menu_item_call name="Stop Animating My Avatar" enabled="false" 511 <menu_item_call name="Stop Animating My Avatar" enabled="false"
507 label="Stop Animating My Avatar"> 512 label="Stop Animating My Avatar">
508 <on_click function="Tools.StopAllAnimations" userdata="" /> 513 <on_click function="Tools.StopAllAnimations" userdata="" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_audio.xml b/linden/indra/newview/skins/default/xui/en-us/panel_audio.xml
index ee9695e..c6e75fc 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_audio.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_audio.xml
@@ -49,6 +49,14 @@
49 image_selected="icn_speaker-muted_dark.tga" 49 image_selected="icn_speaker-muted_dark.tga"
50 image_unselected="icn_speaker_dark.tga" label="" label_width="55" 50 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
51 left="150" name="mute_wind" tab_stop="false" toggle="true" width="25" /> 51 left="150" name="mute_wind" tab_stop="false" toggle="true" width="25" />
52 <slider bottom_delta="-20" control_name="AudioLevelGestures" follows="left|top|right"
53 height="15" increment="0.05" initial_val="0.5" label="Gestures:"
54 label_width="55" left="10" max_val="1" min_val="0" name="Gestures"
55 show_text="false" volume="true" width="180" />
56 <button bottom_delta="0" control_name="MuteGestures" follows="top|right" height="16"
57 image_selected="icn_speaker-muted_dark.tga"
58 image_unselected="icn_speaker_dark.tga" label="" label_width="55"
59 left="150" name="mute_gestures" tab_stop="false" toggle="true" width="25" />
52 <slider bottom_delta="-20" control_name="AudioLevelUI" follows="left|top|right" 60 <slider bottom_delta="-20" control_name="AudioLevelUI" follows="left|top|right"
53 height="15" increment="0.05" initial_val="0.5" label="Interface:" label_width="55" 61 height="15" increment="0.05" initial_val="0.5" label="Interface:" label_width="55"
54 left="10" max_val="1" min_val="0" name="UI Volume" show_text="false" 62 left="10" max_val="1" min_val="0" name="UI Volume" show_text="false"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml b/linden/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml
index 7266536..3fdea5e 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_media_remote_expanded.xml
@@ -2,8 +2,8 @@
2<panel bg_visible="false" border="false" border_visible="false" bottom="1" 2<panel bg_visible="false" border="false" border_visible="false" bottom="1"
3 follows="right|bottom" height="185" left="0" name="media_remote" 3 follows="right|bottom" height="185" left="0" name="media_remote"
4 use_bounding_rect="true" width="220"> 4 use_bounding_rect="true" width="220">
5 <panel bottom="0" filename="panel_bg_tab.xml" height="187" left="0" width="220" /> 5 <panel bottom="0" filename="panel_bg_tab.xml" height="197" left="0" width="220" />
6 <panel border="false" bottom="22" filename="panel_audio.xml" height="160" 6 <panel border="false" bottom="22" filename="panel_audio.xml" height="174"
7 label="Audio &amp; Video" name="Volume Panel" width="220" /> 7 label="Audio &amp; Video" name="Volume Panel" width="220" />
8 <panel bottom_delta="-10" filename="panel_media_controls.xml" left="0" /> 8 <panel bottom_delta="-10" filename="panel_media_controls.xml" left="0" />
9 <string name="play_label"> 9 <string name="play_label">
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
index ce2bbc1..310e056 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_advanced.xml
@@ -14,40 +14,33 @@
14 font="SansSerifSmall" height="16" initial_value="false" 14 font="SansSerifSmall" height="16" initial_value="false"
15 label="Disable teleport screen" left="12" mouse_opaque="true" 15 label="Disable teleport screen" left="12" mouse_opaque="true"
16 name="disable_tp_screen_check" radio_style="false" width="217" /> 16 name="disable_tp_screen_check" radio_style="false" width="217" />
17 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 17 <check_box bottom_delta="-25" enabled="true" follows="left|top"
18 bottom_delta="-25" drop_shadow_visible="true" follows="left|top"
19 font="SansSerifsmall" h_pad="0" halign="left" height="16" left="16"
20 mouse_opaque="true" name="online_no" v_pad="0" width="200">
21 Show client names:
22 </text>
23 <check_box bottom_delta="0" enabled="true" follows="left|top"
24 font="SansSerifSmall" height="16" initial_value="false" 18 font="SansSerifSmall" height="16" initial_value="false"
25 label="in nametag" left_delta="100" mouse_opaque="true" 19 label="Show client names in nametags" left="12" mouse_opaque="true"
26 name="client_name_tag_check" radio_style="false" width="160" /> 20 name="client_name_tag_check" radio_style="false" width="160" />
27 <check_box bottom_delta="0" enabled="true" follows="left|top" 21 <check_box bottom_delta="-18" enabled="true" follows="left|top"
28 font="SansSerifSmall" height="16" initial_value="false" 22 font="SansSerifSmall" height="16" initial_value="false"
29 label="changing nametag color" left_delta="80" mouse_opaque="true" 23 label="Show client names with color" left_delta="0" mouse_opaque="true"
30 name="client_name_color_check" radio_style="false" width="160" /> 24 name="client_name_color_check" radio_style="false" width="160" />
31 <check_box bottom_delta="0" enabled="true" follows="left|top" 25 <check_box bottom_delta="-18" enabled="true" follows="left|top"
32 font="SansSerifSmall" height="16" initial_value="false" 26 font="SansSerifSmall" height="16" initial_value="false"
33 label="in tooltip" left_delta="140" mouse_opaque="true" 27 label="Show client names in hovertip" left_delta="0" mouse_opaque="true"
34 name="client_name_hover_check" radio_style="false" width="160" /> 28 name="client_name_hover_check" radio_style="false" width="160" />
35 <check_box bottom_delta="-18" enabled="true" follows="left|top" 29 <check_box bottom_delta="-18" enabled="true" follows="left|top"
36 font="SansSerifSmall" height="16" initial_value="false" 30 font="SansSerifSmall" height="16" initial_value="false"
37 label="Broadcast your client name to others" left="12" mouse_opaque="true" 31 label="Show your client name to others" left_delta="0" mouse_opaque="true"
38 name="client_name_tag_broadcast_check" radio_style="false" width="217" /> 32 name="client_name_tag_broadcast_check" radio_style="false" width="217" />
39 <check_box bottom_delta="-25" enabled="true" follows="left|top" 33 <check_box bottom_delta="-25" enabled="true" follows="left|top"
40 font="SansSerifSmall" height="16" initial_value="false" 34 font="SansSerifSmall" height="16" initial_value="false"
41 label="Enable shadows (WARNING: unstable and requires Ultra graphics)" left="12" mouse_opaque="true" 35 label="Enable shadows (WARNING: unstable and requires Ultra graphics)" left="12" mouse_opaque="true"
42 name="shadows_check" radio_style="false" width="217" /> 36 name="shadows_check" radio_style="false" width="217" />
43 37
44 38 <text bottom_delta="-25" left="16" height="15" width="300"
45 <text bottom_delta="-25" left="16" height="15" width="220"
46 follows="top|left"> 39 follows="top|left">
47 Allow region Windlight settings (LightShare): 40 Allow region WindLight settings (LightShare):
48 </text> 41 </text>
49 <combo_box name="lightshare_combo" 42 <combo_box name="lightshare_combo"
50 bottom_delta="-2" left="240" height="18" width="120" 43 bottom_delta="-2" left_delta="250" height="18" width="120"
51 allow_text_entry="false" follows="left|top"> 44 allow_text_entry="false" follows="left|top">
52 <combo_item type="string" name="never" value="0"> 45 <combo_item type="string" name="never" value="0">
53 Never 46 Never
@@ -60,7 +53,6 @@
60 </combo_item> 53 </combo_item>
61 </combo_box> 54 </combo_box>
62 55
63
64 <check_box bottom_delta="-25" enabled="true" follows="left|top" 56 <check_box bottom_delta="-25" enabled="true" follows="left|top"
65 font="SansSerifSmall" height="16" initial_value="false" 57 font="SansSerifSmall" height="16" initial_value="false"
66 label="Use HTTP texture fetching" left="12" mouse_opaque="true" 58 label="Use HTTP texture fetching" left="12" mouse_opaque="true"
@@ -94,7 +86,6 @@
94 mouse_opaque="true" name="language_is_public" 86 mouse_opaque="true" name="language_is_public"
95 radio_style="false" tool_tip="This lets in-world objects know your preferred language." 87 radio_style="false" tool_tip="This lets in-world objects know your preferred language."
96 width="256" /> 88 width="256" />
97
98 <check_box bottom_delta="-25" enabled="true" 89 <check_box bottom_delta="-25" enabled="true"
99 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 90 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
100 initial_value="false" label="Use MU* pose style chat and IM" left="12" 91 initial_value="false" label="Use MU* pose style chat and IM" left="12"
@@ -103,7 +94,7 @@
103 width="256" /> 94 width="256" />
104 <check_box bottom_delta="0" enabled="true" 95 <check_box bottom_delta="0" enabled="true"
105 follows="left|top" font="SansSerifSmall" height="16" hidden="false" 96 follows="left|top" font="SansSerifSmall" height="16" hidden="false"
106 initial_value="false" label="Auto-close OOC chat" left_delta="180" 97 initial_value="false" label="Auto-close OOC (( )) chat" left_delta="250"
107 mouse_opaque="true" name="auto_close_ooc" 98 mouse_opaque="true" name="auto_close_ooc"
108 radio_style="false" tool_tip="Auto-close OOC chat (i.e. add )) if not found and (( was used)." 99 radio_style="false" tool_tip="Auto-close OOC chat (i.e. add )) if not found and (( was used)."
109 width="256" /> 100 width="256" />
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
index 400da56..c6bb938 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_audio.xml
@@ -20,10 +20,10 @@
20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128"> 20 mouse_opaque="true" name="audio_prefs_text" v_pad="0" width="128">
21 Audio: 21 Audio:
22 </text> 22 </text>
23 <panel border="true" bottom="-195" enabled="true" filename="panel_audio.xml" 23 <panel border="true" bottom="-187" enabled="true" filename="panel_audio.xml"
24 follows="left|top|right|bottom" height="180" label="Volume" left="148" 24 follows="left|top|right|bottom" height="180" label="Volume" left="148"
25 mouse_opaque="true" name="Volume Panel" width="260" /> 25 mouse_opaque="true" name="Volume Panel" width="260" />
26 <check_box bottom="-195" control_name="AudioStreamingMusic" enabled="true" 26 <check_box bottom="-205" control_name="AudioStreamingMusic" enabled="true"
27 follows="left|top" font="SansSerifSmall" height="16" initial_value="true" 27 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
28 label="Play streaming music when available (uses more bandwidth)" 28 label="Play streaming music when available (uses more bandwidth)"
29 left="142" mouse_opaque="true" name="streaming_music" radio_style="false" 29 left="142" mouse_opaque="true" name="streaming_music" radio_style="false"
@@ -42,7 +42,7 @@
42 initial_value="true" label="Automatically play media" left="162" 42 initial_value="true" label="Automatically play media" left="162"
43 mouse_opaque="true" name="auto_streaming_video" radio_style="false" 43 mouse_opaque="true" name="auto_streaming_video" radio_style="false"
44 width="338" /> 44 width="338" />
45 <check_box bottom_delta="-34" control_name="MuteWhenMinimized" enabled="true" 45 <check_box bottom_delta="-27" control_name="MuteWhenMinimized" enabled="true"
46 follows="left|top" font="SansSerifSmall" height="16" initial_value="true" 46 follows="left|top" font="SansSerifSmall" height="16" initial_value="true"
47 label="Mute audio when window minimized" left="142" mouse_opaque="true" 47 label="Mute audio when window minimized" left="142" mouse_opaque="true"
48 name="mute_when_minimized" radio_style="false" width="215" /> 48 name="mute_when_minimized" radio_style="false" width="215" />
@@ -57,7 +57,7 @@
57 label_width="158" left="148" max_val="10000" min_val="0" 57 label_width="158" left="148" max_val="10000" min_val="0"
58 mouse_opaque="true" name="Health change threshold" width="212" /> 58 mouse_opaque="true" name="Health change threshold" width="212" />
59 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 59 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
60 bottom_delta="-30" drop_shadow_visible="true" enabled="true" follows="left|top" 60 bottom_delta="-27" drop_shadow_visible="true" enabled="true" follows="left|top"
61 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 61 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
62 mouse_opaque="true" name="ambient_prefs_text" v_pad="0" width="128"> 62 mouse_opaque="true" name="ambient_prefs_text" v_pad="0" width="128">
63 Ambient: 63 Ambient:
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
index 199f2a8..1357eb5 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_general.xml
@@ -183,14 +183,14 @@
183 <combo_box allow_text_entry="false" bottom="-352" enabled="true" follows="left|top" 183 <combo_box allow_text_entry="false" bottom="-352" enabled="true" follows="left|top"
184 height="18" left="153" max_chars="20" mouse_opaque="true" 184 height="18" left="153" max_chars="20" mouse_opaque="true"
185 name="time_combobox" width="146"> 185 name="time_combobox" width="146">
186 <combo_item type="string" length="1" enabled="true" name="12HourTime" value="Use 12 Hour Sim Time"> 186 <combo_item type="string" name="12HourTime" value="PST 12">
187 Use 12 Hour Sim Time 187 12-hour PST/PDT
188 </combo_item> 188 </combo_item>
189 <combo_item type="string" length="1" enabled="true" name="24HourTime" value="Use 24 Hour Sim Time"> 189 <combo_item type="string" name="24HourTime" value="PST 24">
190 Use 24 Hour Sim Time 190 24-hour PST/PDT
191 </combo_item> 191 </combo_item>
192 <combo_item type="string" length="1" enabled="true" name="UTCTime" value="Use UTC Time"> 192 <combo_item type="string" name="UTCTime" value="UTC">
193 Use UTC Time 193 UTC
194 </combo_item> 194 </combo_item>
195 </combo_box> 195 </combo_box>
196 <combo_box allow_text_entry="true" bottom="-382" enabled="true" 196 <combo_box allow_text_entry="true" bottom="-382" enabled="true"
diff --git a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml
index 58845ad..0904815 100644
--- a/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml
@@ -63,7 +63,7 @@
63 font="SansSerifSmall" height="70" left="148" max_length="255" 63 font="SansSerifSmall" height="70" left="148" max_length="255"
64 mouse_opaque="true" name="busy_response" width="330" word_wrap="true" /> 64 mouse_opaque="true" name="busy_response" width="330" word_wrap="true" />
65 <button bottom_delta="-25" follows="top|right" height="22" label="IM Response Options" 65 <button bottom_delta="-25" follows="top|right" height="22" label="IM Response Options"
66 left="164" name="busy_adv_btn" tool_tip="Auto response options" 66 left="164" name="busy_adv_btn" tool_tip="Instant message Auto-Response options"
67 width="180" /> 67 width="180" />
68 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 68 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
69 bottom_delta="-23" drop_shadow_visible="true" enabled="true" follows="left|top" 69 bottom_delta="-23" drop_shadow_visible="true" enabled="true" follows="left|top"