aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/app_settings/keywords.ini1
-rw-r--r--linden/indra/newview/app_settings/settings.xml11
-rw-r--r--linden/indra/newview/llappviewer.cpp29
-rw-r--r--linden/indra/newview/llappviewer.h2
-rw-r--r--linden/indra/newview/llcompilequeue.cpp16
-rw-r--r--linden/indra/newview/lldrawable.cpp12
-rw-r--r--linden/indra/newview/llfilepicker.cpp39
-rw-r--r--linden/indra/newview/llfloaterchat.cpp6
-rw-r--r--linden/indra/newview/llviewercontrol.cpp18
-rw-r--r--linden/indra/newview/llviewermedia.cpp7
-rw-r--r--linden/indra/newview/llviewermenu.cpp5
-rw-r--r--linden/indra/newview/llviewermessage.cpp9
-rw-r--r--linden/indra/newview/llvoavatar.cpp45
-rw-r--r--linden/indra/newview/pipeline.cpp12
-rw-r--r--linden/indra/newview/skins/default/xui/de/panel_media_controls.xml1
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/panel_preferences_im.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml1
-rw-r--r--linden/indra/newview/skins/default/xui/ja/panel_media_controls.xml2
-rw-r--r--linden/indra/newview/skins/default/xui/ko/panel_media_controls.xml1
-rw-r--r--linden/indra/newview/skins/silver/xui/en-us/panel_media_controls.xml14
20 files changed, 147 insertions, 86 deletions
diff --git a/linden/indra/newview/app_settings/keywords.ini b/linden/indra/newview/app_settings/keywords.ini
index 2a911ba..56acf4c 100644
--- a/linden/indra/newview/app_settings/keywords.ini
+++ b/linden/indra/newview/app_settings/keywords.ini
@@ -455,6 +455,7 @@ PARCEL_FLAG_ALLOW_LANDMARK Used with llGetParcelFlags to find if a parcel allo
455PARCEL_FLAG_ALLOW_TERRAFORM Used with llGetParcelFlags to find if a parcel allows anyone to terraform the land 455PARCEL_FLAG_ALLOW_TERRAFORM Used with llGetParcelFlags to find if a parcel allows anyone to terraform the land
456PARCEL_FLAG_ALLOW_DAMAGE Used with llGetParcelFlags to find if a parcel allows damage 456PARCEL_FLAG_ALLOW_DAMAGE Used with llGetParcelFlags to find if a parcel allows damage
457PARCEL_FLAG_ALLOW_CREATE_OBJECTS Used with llGetParcelFlags to find if a parcel allows anyone to create objects 457PARCEL_FLAG_ALLOW_CREATE_OBJECTS Used with llGetParcelFlags to find if a parcel allows anyone to create objects
458PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS Used with llGetParcelFlags to find if a parcel allows group members or objects to create objects
458PARCEL_FLAG_USE_ACCESS_GROUP Used with llGetParcelFlags to find if a parcel limits access to a group 459PARCEL_FLAG_USE_ACCESS_GROUP Used with llGetParcelFlags to find if a parcel limits access to a group
459PARCEL_FLAG_USE_ACCESS_LIST Used with llGetParcelFlags to find if a parcel limits access to a list of residents 460PARCEL_FLAG_USE_ACCESS_LIST Used with llGetParcelFlags to find if a parcel limits access to a list of residents
460PARCEL_FLAG_USE_BAN_LIST Used with llGetParcelFlags to find if a parcel uses a ban list 461PARCEL_FLAG_USE_BAN_LIST Used with llGetParcelFlags to find if a parcel uses a ban list
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 0f15236..55ff208 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -4659,6 +4659,17 @@
4659 <key>Value</key> 4659 <key>Value</key>
4660 <integer>0</integer> 4660 <integer>0</integer>
4661 </map> 4661 </map>
4662 <key>MediaDebugLevel</key>
4663 <map>
4664 <key>Comment</key>
4665 <string>How spammy media (GStreamer) debug output should be. (0-4)</string>
4666 <key>Persist</key>
4667 <integer>1</integer>
4668 <key>Type</key>
4669 <string>U32</string>
4670 <key>Value</key>
4671 <integer>0</integer>
4672 </map>
4662 <key>MemoryLogFrequency</key> 4673 <key>MemoryLogFrequency</key>
4663 <map> 4674 <map>
4664 <key>Comment</key> 4675 <key>Comment</key>
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index 15ce1a3..b2bfccf 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -75,9 +75,6 @@
75 75
76#if LL_WINDOWS 76#if LL_WINDOWS
77 #include "llwindebug.h" 77 #include "llwindebug.h"
78 #include <direct.h>
79 #include <errno.h>
80 #include <stdlib.h>
81#endif 78#endif
82 79
83#if LL_WINDOWS 80#if LL_WINDOWS
@@ -320,30 +317,6 @@ std::vector<std::string> gLoginURIs;
320static std::string gHelperURI; 317static std::string gHelperURI;
321 318
322 319
323void LLAppViewer::gst_plugin_path()
324{
325#ifdef LL_WINDOWS
326 char* buffer;
327
328 // Get the current working directory:
329 if((buffer = _getcwd(NULL,0)) == NULL)
330 {
331 LL_INFOS("InitInfo") << "_getcwd error" << LL_ENDL;
332 }
333 else
334 {
335 LL_INFOS("InitInfo") << "Imprudence is installed at " << buffer << LL_ENDL;
336
337 std::string plugin_path = "GST_PLUGIN_PATH=" + std::string(buffer) + "\\lib\\gstreamer-plugins";
338
339 // Place GST_PLUGIN_PATH in the environment settings for imprudence.exe
340 const char* gst_plugin_path = plugin_path.c_str();
341 putenv(gst_plugin_path);
342 LL_INFOS("InitInfo") << "GST_PLUGIN_PATH set to " << getenv("GST_PLUGIN_PATH") << LL_ENDL;
343 }
344#endif //LL_WINDOWS
345}
346
347void idle_afk_check() 320void idle_afk_check()
348{ 321{
349 // check idle timers 322 // check idle timers
@@ -643,8 +616,6 @@ bool LLAppViewer::init()
643 LL_VERSION_PATCH, 616 LL_VERSION_PATCH,
644 LL_VERSION_BUILD ); 617 LL_VERSION_BUILD );
645 618
646 gst_plugin_path();
647
648 ////////////////////////////////////////////////////////////////////////////// 619 //////////////////////////////////////////////////////////////////////////////
649 ////////////////////////////////////////////////////////////////////////////// 620 //////////////////////////////////////////////////////////////////////////////
650 ////////////////////////////////////////////////////////////////////////////// 621 //////////////////////////////////////////////////////////////////////////////
diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h
index 2083a93..58dc835 100644
--- a/linden/indra/newview/llappviewer.h
+++ b/linden/indra/newview/llappviewer.h
@@ -138,8 +138,6 @@ public:
138 138
139protected: 139protected:
140 140
141 void gst_plugin_path(); // Sets GST_PLUGIN_PATH environment variable for GStreamer.
142
143 virtual bool initWindow(); // Initialize the viewer's window. 141 virtual bool initWindow(); // Initialize the viewer's window.
144 virtual bool initLogging(); // Initialize log files, logging system, return false on failure. 142 virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
145 virtual void initConsole() {}; // Initialize OS level debugging console. 143 virtual void initConsole() {}; // Initialize OS level debugging console.
diff --git a/linden/indra/newview/llcompilequeue.cpp b/linden/indra/newview/llcompilequeue.cpp
index fc2742f..b4f1a22 100644
--- a/linden/indra/newview/llcompilequeue.cpp
+++ b/linden/indra/newview/llcompilequeue.cpp
@@ -59,6 +59,7 @@
59#include "llfloaterchat.h" 59#include "llfloaterchat.h"
60#include "llviewerstats.h" 60#include "llviewerstats.h"
61#include "lluictrlfactory.h" 61#include "lluictrlfactory.h"
62#include "llselectmgr.h"
62 63
63///---------------------------------------------------------------------------- 64///----------------------------------------------------------------------------
64/// Local function declarations, constants, enums, and typedefs 65/// Local function declarations, constants, enums, and typedefs
@@ -194,7 +195,20 @@ BOOL LLFloaterScriptQueue::start()
194{ 195{
195 //llinfos << "LLFloaterCompileQueue::start()" << llendl; 196 //llinfos << "LLFloaterCompileQueue::start()" << llendl;
196 std::string buffer; 197 std::string buffer;
197 buffer = llformat("Starting %s of %d items.", mStartString.c_str(), mObjectIDs.count()); // *TODO: Translate 198
199 LLSelectMgr *mgr = LLSelectMgr::getInstance();
200 LLObjectSelectionHandle selectHandle = mgr->getSelection();
201 U32 n_objects = 0;
202 if (gSavedSettings.getBOOL("EditLinkedParts"))
203 {
204 n_objects = selectHandle->getObjectCount();
205 }
206 else
207 {
208 n_objects = selectHandle->getRootObjectCount();
209 }
210
211 buffer = llformat("Starting %s of %d items.", mStartString.c_str(), n_objects); // *TODO: Translate
198 212
199 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output"); 213 LLScrollListCtrl* list = getChild<LLScrollListCtrl>("queue output");
200 list->addCommentText(buffer); 214 list->addCommentText(buffer);
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index 5e4aafc..e058681 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -497,7 +497,7 @@ F32 LLDrawable::updateXform(BOOL undamped)
497 F32 dist_squared = 0.f; 497 F32 dist_squared = 0.f;
498 F32 camdist2 = (mDistanceWRTCamera * mDistanceWRTCamera); 498 F32 camdist2 = (mDistanceWRTCamera * mDistanceWRTCamera);
499 499
500 if (damped && mDistanceWRTCamera > 0.0f) 500 if (damped && isVisible())
501 { 501 {
502 F32 lerp_amt = llclamp(LLCriticalDamp::getInterpolant(OBJECT_DAMPING_TIME_CONSTANT), 0.f, 1.f); 502 F32 lerp_amt = llclamp(LLCriticalDamp::getInterpolant(OBJECT_DAMPING_TIME_CONSTANT), 0.f, 1.f);
503 LLVector3 new_pos = lerp(old_pos, target_pos, lerp_amt); 503 LLVector3 new_pos = lerp(old_pos, target_pos, lerp_amt);
@@ -521,11 +521,19 @@ F32 LLDrawable::updateXform(BOOL undamped)
521 { 521 {
522 // snap to final position 522 // snap to final position
523 dist_squared = 0.0f; 523 dist_squared = 0.0f;
524 if (!isRoot())
525 { //child prim snapping to some position, needs a rebuild
526 gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE);
527 }
524 } 528 }
525 } 529 }
526 530
527 if ((mCurrentScale != target_scale) || 531 if ((mCurrentScale != target_scale) ||
528 (!isRoot() && (dist_squared >= MIN_INTERPOLATE_DISTANCE_SQUARED) || !mVObjp->getAngularVelocity().isExactlyZero())) 532 (!isRoot() &&
533 (dist_squared >= MIN_INTERPOLATE_DISTANCE_SQUARED) ||
534 !mVObjp->getAngularVelocity().isExactlyZero() ||
535 target_pos != mXform.getPosition() ||
536 target_rot != mXform.getRotation()))
529 { //child prim moving or scale change requires immediate rebuild 537 { //child prim moving or scale change requires immediate rebuild
530 gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE); 538 gPipeline.markRebuild(this, LLDrawable::REBUILD_POSITION, TRUE);
531 } 539 }
diff --git a/linden/indra/newview/llfilepicker.cpp b/linden/indra/newview/llfilepicker.cpp
index bbcfba6..1edfbe6 100644
--- a/linden/indra/newview/llfilepicker.cpp
+++ b/linden/indra/newview/llfilepicker.cpp
@@ -899,12 +899,41 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename)
899// static 899// static
900void LLFilePicker::add_to_selectedfiles(gpointer data, gpointer user_data) 900void LLFilePicker::add_to_selectedfiles(gpointer data, gpointer user_data)
901{ 901{
902 LLFilePicker* picker = (LLFilePicker*) user_data; 902 // We need to run g_filename_to_utf8 in the user's locale
903 std::string old_locale(setlocale(LC_ALL, NULL));
904 setlocale(LC_ALL, "");
905
906 LLFilePicker* picker = (LLFilePicker*) user_data;
907 GError *error = NULL;
903 gchar* filename_utf8 = g_filename_to_utf8((gchar*)data, 908 gchar* filename_utf8 = g_filename_to_utf8((gchar*)data,
904 -1, NULL, NULL, NULL); 909 -1, NULL, NULL, &error);
905 picker->mFiles.push_back(std::string(filename_utf8)); 910 if (error)
906 lldebugs << "ADDED FILE " << filename_utf8 << llendl; 911 {
907 g_free(filename_utf8); 912 // This condition should really be notified to the user, e.g.,
913 // through a message box. Just logging it is inapropriate.
914 // FIXME.
915
916 // Ghhhh. g_filename_display_name is new to glib 2.6, and it
917 // is too new for SL! (Note that the latest glib as of this
918 // writing is 2.22. *sigh*) LL supplied *makeASCII family are
919 // also unsuitable since they allow control characters...
920
921 std::string display_name;
922 for (const gchar *str = (const gchar *)data; *str; str++)
923 {
924 display_name += (char)((*str >= 0x20 && *str <= 0x7E) ? *str : '?');
925 }
926 llwarns << "g_filename_to_utf8 failed on \"" << display_name << "\": " << error->message << llendl;
927 }
928
929 if (filename_utf8)
930 {
931 picker->mFiles.push_back(std::string(filename_utf8));
932 lldebugs << "ADDED FILE " << filename_utf8 << llendl;
933 g_free(filename_utf8);
934 }
935
936 setlocale(LC_ALL, old_locale.c_str());
908} 937}
909 938
910// static 939// static
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index a626ad3..14f9a10 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -385,7 +385,11 @@ void LLFloaterChat::addChat(const LLChat& chat,
385 text_color = gSavedSettings.getColor("IMChatColor"); 385 text_color = gSavedSettings.getColor("IMChatColor");
386 size = INSTANT_MSG_SIZE; 386 size = INSTANT_MSG_SIZE;
387 } 387 }
388 gConsole->addLine(chat.mText, size, text_color); 388 // We display anything if it's not an IM. If it's an IM, check pref...
389 if ( !from_instant_message || gSavedSettings.getBOOL("IMInChatHistory") )
390 {
391 gConsole->addLine(chat.mText, size, text_color);
392 }
389 } 393 }
390 394
391 if(from_instant_message && gSavedPerAccountSettings.getBOOL("LogChatIM")) 395 if(from_instant_message && gSavedPerAccountSettings.getBOOL("LogChatIM"))
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp
index 7a30b22..a8a3b16 100644
--- a/linden/indra/newview/llviewercontrol.cpp
+++ b/linden/indra/newview/llviewercontrol.cpp
@@ -70,6 +70,7 @@
70#include "llvosurfacepatch.h" 70#include "llvosurfacepatch.h"
71#include "llvowlsky.h" 71#include "llvowlsky.h"
72#include "llrender.h" 72#include "llrender.h"
73#include "llmediamanager.h"
73 74
74#ifdef TOGGLE_HACKED_GODLIKE_VIEWER 75#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
75BOOL gHackGodmode = FALSE; 76BOOL gHackGodmode = FALSE;
@@ -429,6 +430,22 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
429 return true; 430 return true;
430} 431}
431 432
433bool handleMediaDebugLevelChanged(const LLSD& newvalue)
434{
435 LLMediaManager *mgr = LLMediaManager::getInstance();
436 if (mgr)
437 {
438 LLMediaBase *impl =
439 mgr->createSourceFromMimeType("http", "audio/mpeg");
440
441 if (impl)
442 {
443 impl->setDebugLevel( (LLMediaBase::EDebugLevel)newvalue.asInteger() );
444 }
445 }
446 return true;
447}
448
432//////////////////////////////////////////////////////////////////////////// 449////////////////////////////////////////////////////////////////////////////
433 450
434void settings_setup_listeners() 451void settings_setup_listeners()
@@ -556,6 +573,7 @@ void settings_setup_listeners()
556 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 573 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
557 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 574 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
558 gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 575 gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
576 gSavedSettings.getControl("MediaDebugLevel")->getSignal()->connect(boost::bind(&handleMediaDebugLevelChanged, _1));
559} 577}
560 578
561template <> eControlType get_control_type<U32>(const U32& in, LLSD& out) 579template <> eControlType get_control_type<U32>(const U32& in, LLSD& out)
diff --git a/linden/indra/newview/llviewermedia.cpp b/linden/indra/newview/llviewermedia.cpp
index e99c838..d8fcdcb 100644
--- a/linden/indra/newview/llviewermedia.cpp
+++ b/linden/indra/newview/llviewermedia.cpp
@@ -496,6 +496,13 @@ void LLViewerMedia::initClass()
496 const LLMIMETypes::LLMIMEInfo& info = it->second; 496 const LLMIMETypes::LLMIMEInfo& info = it->second;
497 mm->addMimeTypeImplNameMap( mime_type, info.mImpl ); 497 mm->addMimeTypeImplNameMap( mime_type, info.mImpl );
498 } 498 }
499
500 LLMediaBase *impl = mm->createSourceFromMimeType("http", "audio/mpeg");
501 if (impl)
502 {
503 U32 level = gSavedSettings.getU32("MediaDebugLevel");
504 impl->setDebugLevel( (LLMediaBase::EDebugLevel)level );
505 }
499} 506}
500 507
501////////////////////////////////////////////////////////////////////////////////////////// 508//////////////////////////////////////////////////////////////////////////////////////////
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 31fdcc3..486e4f1 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -5963,8 +5963,9 @@ void queue_actions(LLFloaterScriptQueue* q, const std::string& noscriptmsg, cons
5963{ 5963{
5964 // Apply until an object fails 5964 // Apply until an object fails
5965 QueueObjects func(q); 5965 QueueObjects func(q);
5966 const bool firstonly = true; 5966 LLSelectMgr *mgr = LLSelectMgr::getInstance();
5967 bool fail = LLSelectMgr::getInstance()->getSelection()->applyToObjects(&func, firstonly); 5967 LLObjectSelectionHandle selectHandle = mgr->getSelection();
5968 bool fail = selectHandle->applyToObjects(&func);
5968 if(fail) 5969 if(fail)
5969 { 5970 {
5970 if ( !func.scripted ) 5971 if ( !func.scripted )
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index b947f95..221de59 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -3286,6 +3286,10 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
3286 msg->getVector3Fast(_PREHASH_SoundData, _PREHASH_Position, pos_local); 3286 msg->getVector3Fast(_PREHASH_SoundData, _PREHASH_Position, pos_local);
3287 msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain); 3287 msg->getF32Fast(_PREHASH_SoundData, _PREHASH_Gain, gain);
3288 3288
3289 //If we have sounds muted, don't even try to load or trigger the sound.
3290 if(gSavedSettings.getBOOL("MuteSounds") || gain == 0.0)
3291 return;
3292
3289 // adjust sound location to true global coords 3293 // adjust sound location to true global coords
3290 LLVector3d pos_global = from_region_handle(region_handle); 3294 LLVector3d pos_global = from_region_handle(region_handle);
3291 pos_global.mdV[VX] += pos_local.mV[VX]; 3295 pos_global.mdV[VX] += pos_local.mV[VX];
@@ -3317,7 +3321,7 @@ void process_sound_trigger(LLMessageSystem *msg, void **)
3317 3321
3318void process_preload_sound(LLMessageSystem *msg, void **user_data) 3322void process_preload_sound(LLMessageSystem *msg, void **user_data)
3319{ 3323{
3320 if (!gAudiop) 3324 if (!gAudiop || gSavedSettings.getBOOL("MuteSounds"))
3321 { 3325 {
3322 return; 3326 return;
3323 } 3327 }
@@ -3363,6 +3367,9 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data)
3363 msg->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain); 3367 msg->getF32Fast(_PREHASH_DataBlock, _PREHASH_Gain, gain);
3364 msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags); 3368 msg->getU8Fast(_PREHASH_DataBlock, _PREHASH_Flags, flags);
3365 3369
3370 if(gSavedSettings.getBOOL("MuteSounds") || gain == 0.0)
3371 return;
3372
3366 LLViewerObject *objectp = gObjectList.findObject(object_id); 3373 LLViewerObject *objectp = gObjectList.findObject(object_id);
3367 if (!objectp) 3374 if (!objectp)
3368 { 3375 {
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index fd2487b..7d70dd2 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -3096,69 +3096,62 @@ void LLVOAvatar::idleUpdateNameTag(const LLVector3& root_pos_last)
3096 (is_away != mNameAway || is_busy != mNameBusy || is_muted != mNameMute) 3096 (is_away != mNameAway || is_busy != mNameBusy || is_muted != mNameMute)
3097 || is_appearance != mNameAppearance) 3097 || is_appearance != mNameAppearance)
3098 { 3098 {
3099 char line[MAX_STRING]; /* Flawfinder: ignore */ 3099 std::string line;
3100 if (!sRenderGroupTitles) 3100 if (title && title->getString() && title->getString()[0] != '\0')
3101 {
3102 // If all group titles are turned off, stack first name
3103 // on a line above last name
3104 strncpy(line, firstname->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */
3105 line[MAX_STRING -1] = '\0';
3106 strcat(line, "\n");
3107 }
3108 else if (title && title->getString() && title->getString()[0] != '\0')
3109 { 3101 {
3110 strncpy(line, title->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */ 3102 line += title->getString();
3111 line[MAX_STRING -1] = '\0'; 3103 LLStringFn::replace_nonprintable(line,LL_UNKNOWN_CHAR);
3112 strcat(line, "\n"); /* Flawfinder: ignore */ 3104 line += "\n";
3113 strncat(line, firstname->getString(), MAX_STRING - strlen(line) -1 ); /* Flawfinder: ignore */ 3105 line += firstname->getString();
3114 } 3106 }
3115 else 3107 else
3116 { 3108 {
3117 strncpy(line, firstname->getString(), MAX_STRING -1 ); /* Flawfinder: ignore */ 3109 line += firstname->getString();
3118 line[MAX_STRING -1] = '\0';
3119 } 3110 }
3120 3111
3121 strcat(line, " "); /* Flawfinder: ignore */ 3112 line += " ";
3122 strncat(line, lastname->getString(), MAX_STRING - strlen(line) -1); /* Flawfinder: ignore */ 3113 line += lastname->getString();
3123 BOOL need_comma = FALSE; 3114 BOOL need_comma = FALSE;
3124 3115
3125 if (is_away || is_muted || is_busy) 3116 if (is_away || is_muted || is_busy)
3126 { 3117 {
3127 strcat(line, " ("); /* Flawfinder: ignore */ 3118 line += " (";
3128 if (is_away) 3119 if (is_away)
3129 { 3120 {
3130 strcat(line, "Away"); /* Flawfinder: ignore */ 3121 line += "Away";
3131 need_comma = TRUE; 3122 need_comma = TRUE;
3132 } 3123 }
3133 if (is_busy) 3124 if (is_busy)
3134 { 3125 {
3135 if (need_comma) 3126 if (need_comma)
3136 { 3127 {
3137 strcat(line, ", "); /* Flawfinder: ignore */ 3128 line += ", ";
3138 } 3129 }
3139 strcat(line, "Busy"); /* Flawfinder: ignore */ 3130 line += "Busy";
3140 need_comma = TRUE; 3131 need_comma = TRUE;
3141 } 3132 }
3142 if (is_muted) 3133 if (is_muted)
3143 { 3134 {
3144 if (need_comma) 3135 if (need_comma)
3145 { 3136 {
3146 strcat(line, ", "); /* Flawfinder: ignore */ 3137 line += ", ";
3147 } 3138 }
3148 strcat(line, "Muted"); /* Flawfinder: ignore */ 3139 line += "Muted";
3149 need_comma = TRUE; 3140 need_comma = TRUE;
3150 } 3141 }
3151 strcat(line,")"); /* Flawfinder: ignore */ 3142 line += ")";
3152 } 3143 }
3153 if (is_appearance) 3144 if (is_appearance)
3154 { 3145 {
3155 strcat(line, "\n(Editing Appearance)"); /* Flawfinder: ignore */ 3146 line += "\n";
3147 line += "(Editing Appearance)";
3156 } 3148 }
3157 mNameAway = is_away; 3149 mNameAway = is_away;
3158 mNameBusy = is_busy; 3150 mNameBusy = is_busy;
3159 mNameMute = is_muted; 3151 mNameMute = is_muted;
3160 mNameAppearance = is_appearance; 3152 mNameAppearance = is_appearance;
3161 mTitle = title ? title->getString() : ""; 3153 mTitle = title ? title->getString() : "";
3154 LLStringFn::replace_nonprintable(mTitle,LL_UNKNOWN_CHAR);
3162 mNameString = utf8str_to_wstring(line); 3155 mNameString = utf8str_to_wstring(line);
3163 new_name = TRUE; 3156 new_name = TRUE;
3164 } 3157 }
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index 3523635..e7db166 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -2665,6 +2665,18 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects, BOOL render
2665 LLGLState::checkClientArrays(); 2665 LLGLState::checkClientArrays();
2666 U32 last_type = 0; 2666 U32 last_type = 0;
2667 2667
2668 // If we don't do this, we crash something on changing graphics settings
2669 // from Medium -> Low, because we unload all the shaders and the
2670 // draw pools aren't aware. I don't know if this has to be a separate
2671 // loop before actual rendering. JC
2672 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
2673 {
2674 LLDrawPool *poolp = *iter;
2675 if (poolp->isFacePool() && hasRenderType(poolp->getType()))
2676 {
2677 poolp->prerender();
2678 }
2679 }
2668 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter) 2680 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
2669 { 2681 {
2670 LLDrawPool *poolp = *iter; 2682 LLDrawPool *poolp = *iter;
diff --git a/linden/indra/newview/skins/default/xui/de/panel_media_controls.xml b/linden/indra/newview/skins/default/xui/de/panel_media_controls.xml
index eb47fa2..d15d186 100644
--- a/linden/indra/newview/skins/default/xui/de/panel_media_controls.xml
+++ b/linden/indra/newview/skins/default/xui/de/panel_media_controls.xml
@@ -2,7 +2,6 @@
2<panel name="media_controls"> 2<panel name="media_controls">
3 <icon name="music_icon" tool_tip="Streaming-Musik abspielen/unterbrechen" /> 3 <icon name="music_icon" tool_tip="Streaming-Musik abspielen/unterbrechen" />
4 <button name="music_play" tool_tip="Streaming-Musik spielen/unterbrechen" /> 4 <button name="music_play" tool_tip="Streaming-Musik spielen/unterbrechen" />
5 <button name="music_pause" tool_tip="Streaming-Musik unterbrechen" />
6 <button name="music_stop" tool_tip="Streaming-Musik beenden" /> 5 <button name="music_stop" tool_tip="Streaming-Musik beenden" />
7 <icon name="media_icon" tool_tip="Streaming-Musik abspielen/unterbrechen" /> 6 <icon name="media_icon" tool_tip="Streaming-Musik abspielen/unterbrechen" />
8 <button name="media_play" tool_tip="Streaming-Musik abspielen/unterbrechen" /> 7 <button name="media_play" tool_tip="Streaming-Musik abspielen/unterbrechen" />
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 d3174af..8020e9a 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
@@ -28,7 +28,7 @@
28 width="350" /> 28 width="350" />
29 <check_box bottom="-65" control_name="IMInChatHistory" enabled="true" follows="left|top" 29 <check_box bottom="-65" control_name="IMInChatHistory" enabled="true" follows="left|top"
30 font="SansSerifSmall" height="16" initial_value="false" 30 font="SansSerifSmall" height="16" initial_value="false"
31 label="Include IM in Local Chat" left="148" mouse_opaque="true" 31 label="Show IMs with Chat" left="148" mouse_opaque="true"
32 name="include_im_in_chat_history" radio_style="false" width="237" /> 32 name="include_im_in_chat_history" radio_style="false" width="237" />
33 <check_box bottom="-85" control_name="IMShowTimestamps" enabled="true" follows="left|top" 33 <check_box bottom="-85" control_name="IMShowTimestamps" enabled="true" follows="left|top"
34 font="SansSerifSmall" height="16" initial_value="false" 34 font="SansSerifSmall" height="16" initial_value="false"
diff --git a/linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml b/linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml
index ff498ba..7b601b4 100644
--- a/linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml
+++ b/linden/indra/newview/skins/default/xui/fr/panel_media_controls.xml
@@ -2,7 +2,6 @@
2<panel name="media_controls"> 2<panel name="media_controls">
3 <icon name="music_icon" tool_tip="Jouer/pauser le flux musical" /> 3 <icon name="music_icon" tool_tip="Jouer/pauser le flux musical" />
4 <button name="music_play" tool_tip="Jouer/pauser le flux musical" /> 4 <button name="music_play" tool_tip="Jouer/pauser le flux musical" />
5 <button name="music_pause" tool_tip="Pauser le flux musical" />
6 <button name="music_stop" tool_tip="Arrêter le flux musical" /> 5 <button name="music_stop" tool_tip="Arrêter le flux musical" />
7 <icon name="media_icon" tool_tip="Jouer/pauser le flux musical" /> 6 <icon name="media_icon" tool_tip="Jouer/pauser le flux musical" />
8 <button name="media_play" tool_tip="Jouer/pauser le flux musical" /> 7 <button name="media_play" tool_tip="Jouer/pauser le flux musical" />
diff --git a/linden/indra/newview/skins/default/xui/ja/panel_media_controls.xml b/linden/indra/newview/skins/default/xui/ja/panel_media_controls.xml
index 7c87dc3..89791a5 100644
--- a/linden/indra/newview/skins/default/xui/ja/panel_media_controls.xml
+++ b/linden/indra/newview/skins/default/xui/ja/panel_media_controls.xml
@@ -4,8 +4,6 @@
4 tool_tip="ストリーミング・ミュージックの再生/一時停止" /> 4 tool_tip="ストリーミング・ミュージックの再生/一時停止" />
5 <button name="music_play" 5 <button name="music_play"
6 tool_tip="ストリーミング・ミュージックの再生/一時停止" /> 6 tool_tip="ストリーミング・ミュージックの再生/一時停止" />
7 <button name="music_pause"
8 tool_tip="ストリーミング・ミュージックの一時停止" />
9 <button name="music_stop" 7 <button name="music_stop"
10 tool_tip="ストリーミング・ミュージックの停止" /> 8 tool_tip="ストリーミング・ミュージックの停止" />
11 <icon name="media_icon" 9 <icon name="media_icon"
diff --git a/linden/indra/newview/skins/default/xui/ko/panel_media_controls.xml b/linden/indra/newview/skins/default/xui/ko/panel_media_controls.xml
index 3b3aa0e..fa5a010 100644
--- a/linden/indra/newview/skins/default/xui/ko/panel_media_controls.xml
+++ b/linden/indra/newview/skins/default/xui/ko/panel_media_controls.xml
@@ -2,7 +2,6 @@
2<panel name="media_controls"> 2<panel name="media_controls">
3 <icon name="music_icon" tool_tip="스트리밍 음악 재생/일시 정지" /> 3 <icon name="music_icon" tool_tip="스트리밍 음악 재생/일시 정지" />
4 <button name="music_play" tool_tip="스트리밍 음악 재생/일시 정지" /> 4 <button name="music_play" tool_tip="스트리밍 음악 재생/일시 정지" />
5 <button name="music_pause" tool_tip="스트리밍 음악 일시 정지" />
6 <button name="music_stop" tool_tip="스트리밍 음악 중지" /> 5 <button name="music_stop" tool_tip="스트리밍 음악 중지" />
7 <icon name="media_icon" tool_tip="스트리밍 음악 재생/일시 정지" /> 6 <icon name="media_icon" tool_tip="스트리밍 음악 재생/일시 정지" />
8 <button name="media_play" tool_tip="스트리밍 음악 재생/일시 정지" /> 7 <button name="media_play" tool_tip="스트리밍 음악 재생/일시 정지" />
diff --git a/linden/indra/newview/skins/silver/xui/en-us/panel_media_controls.xml b/linden/indra/newview/skins/silver/xui/en-us/panel_media_controls.xml
index d62fe09..466db79 100644
--- a/linden/indra/newview/skins/silver/xui/en-us/panel_media_controls.xml
+++ b/linden/indra/newview/skins/silver/xui/en-us/panel_media_controls.xml
@@ -4,7 +4,7 @@
4 name="media_controls" width="220"> 4 name="media_controls" width="220">
5 <icon bottom="-18" enabled="true" follows="left|top" height="14" 5 <icon bottom="-18" enabled="true" follows="left|top" height="14"
6 image_name="icn_label_music.tga" label="" left_delta="6" mouse_opaque="true" 6 image_name="icn_label_music.tga" label="" left_delta="6" mouse_opaque="true"
7 name="music_icon" scale_image="true" tool_tip="Play/pause streaming music" 7 name="music_icon" scale_image="true" tool_tip="Play streaming music"
8 width="14" /> 8 width="14" />
9 <button bottom="-21" enabled="true" follows="left|top" height="20" 9 <button bottom="-21" enabled="true" follows="left|top" height="20"
10 image_overlay="icn_play.tga" 10 image_overlay="icn_play.tga"
@@ -13,15 +13,7 @@
13 image_disabled="flyout_btn_left_disabled.tga" 13 image_disabled="flyout_btn_left_disabled.tga"
14 label="" left_delta="16" 14 label="" left_delta="16"
15 mouse_opaque="true" name="music_play" scale_image="true" toggle="false" 15 mouse_opaque="true" name="music_play" scale_image="true" toggle="false"
16 tool_tip="Play/pause streaming music" width="20" /> 16 tool_tip="Play streaming music" width="20" />
17 <button bottom="-21" enabled="false" follows="left|top" height="20"
18 image_overlay="icn_pause.tga"
19 image_unselected="flyout_btn_left.tga"
20 image_selected="flyout_btn_left_selected.tga"
21 image_disabled="flyout_btn_left_disabled.tga"
22 label="" left_delta="0"
23 mouse_opaque="true" name="music_pause" scale_image="true" toggle="false"
24 tool_tip="Pause streaming music" width="20" />
25 <button bottom="-21" enabled="true" follows="left|top" height="20" 17 <button bottom="-21" enabled="true" follows="left|top" height="20"
26 image_overlay="icn_stop.tga" 18 image_overlay="icn_stop.tga"
27 image_unselected="flyout_btn_right.tga" 19 image_unselected="flyout_btn_right.tga"
@@ -33,7 +25,7 @@
33 <icon bottom="-18" enabled="true" follows="left|top" height="14" 25 <icon bottom="-18" enabled="true" follows="left|top" height="14"
34 image_name="icn_label_media.tga" 26 image_name="icn_label_media.tga"
35 label="" left_delta="22" mouse_opaque="true" 27 label="" left_delta="22" mouse_opaque="true"
36 name="media_icon" scale_image="true" tool_tip="Play/pause streaming music" 28 name="media_icon" scale_image="true" tool_tip="Play/pause streaming media"
37 width="17" /> 29 width="17" />
38 <button bottom="-21" enabled="true" follows="left|top" height="20" 30 <button bottom="-21" enabled="true" follows="left|top" height="20"
39 image_overlay="icn_play.tga" 31 image_overlay="icn_play.tga"