diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..431db7ed59bc5e4b9c14f834f7cc6622a7d4d72b --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +Second Life Viewer +================== + +This project manages the source code for the +[Second Life](https://www.secondlife.com) Viewer. + +This source is available as open source; for details on licensing, see +[https://wiki.secondlife.com/wiki/Linden_Lab_Official:Second_Life_Viewer_Licensing_Program](the +licensing page on the Second Life wiki) + +For information on how to use and contribute to this, see +[https://wiki.secondlife.com/wiki/Open_Source_Portal](the open source +portal on the wiki). diff --git a/doc/contributions.txt b/doc/contributions.txt index 53df40d172b7bf0e84f079678c64c9d3c7d6edb9..f627145e19c1ec78ac0348cc5aa18fbb03a7382e 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -185,6 +185,9 @@ Ansariel Hiller BUG-3764 STORM-1984 STORM-1979 + STORM-2083 + STORM-2094 + MAINT-4677 Aralara Rajal Arare Chantilly CHUIBUG-191 @@ -328,6 +331,7 @@ Cinder Roxley STORM-2037 STORM-2053 STORM-2113 + STORM-2098 Clara Young Coaldust Numbers VWR-1095 @@ -723,6 +727,11 @@ Jonathan Yap STORM-2034 STORM-2018 STORM-2082 + STORM-2086 + STORM-2085 + STORM-2088 + STORM-2094 + STORM-2099 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/linux_crash_logger/linux_crash_logger.cpp b/indra/linux_crash_logger/linux_crash_logger.cpp index 36f62451d7e37d9d1a89d3c274185dac129a3f50..9d5ec33fed74add89e7f34e6ee401a2e542638d5 100755 --- a/indra/linux_crash_logger/linux_crash_logger.cpp +++ b/indra/linux_crash_logger/linux_crash_logger.cpp @@ -42,7 +42,7 @@ int main(int argc, char **argv) if (!(options.has("pid") && options.has("dumpdir"))) { - llwarns << "Insufficient parameters to crash report." << llendl; + LL_WARNS() << "Insufficient parameters to crash report." << LL_ENDL; } if (! app.init()) diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h index 63040e1772a15b4a9239127df183e1b15a3a0df8..73544cb914683c38752950dee53d3d21d3d5ee78 100755 --- a/indra/llcommon/llerror.h +++ b/indra/llcommon/llerror.h @@ -362,13 +362,4 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG; #define LL_INFOS_ONCE(...) lllog(LLError::LEVEL_INFO, true, ##__VA_ARGS__) #define LL_WARNS_ONCE(...) lllog(LLError::LEVEL_WARN, true, ##__VA_ARGS__) -// DEPRECATED: Use the new macros that allow tags and *look* like macros. -#define lldebugs LL_COMPILE_TIME_MESSAGE("Warning: lldebugs deprecated, use LL_DEBUGS() instead") LL_DEBUGS() -#define llinfos LL_COMPILE_TIME_MESSAGE("Warning: llinfos deprecated, use LL_INFOS() instead") LL_INFOS() -#define llwarns LL_COMPILE_TIME_MESSAGE("Warning: llwarns deprecated, use LL_WARNS() instead") LL_WARNS() -#define llerrs LL_COMPILE_TIME_MESSAGE("Warning: llerrs deprecated, use LL_ERRS() instead") LL_ERRS() -#define llcont LL_COMPILE_TIME_MESSAGE("Warning: llcont deprecated, use LL_CONT instead") LL_CONT -#define llendl LL_COMPILE_TIME_MESSAGE("Warning: llendl deprecated, use LL_ENDL instead") LL_ENDL - - #endif // LL_LLERROR_H diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h index faa699ff7b609b862dfbeeeba288ef1b59e36b53..e2388d6702d92b1087d276a13429986f73823db9 100755 --- a/indra/llmath/llcalcparser.h +++ b/indra/llmath/llcalcparser.h @@ -167,9 +167,9 @@ struct LLCalcParser : grammar<LLCalcParser> F32 _sin(const F32& a) const { return sin(DEG_TO_RAD * a); } F32 _cos(const F32& a) const { return cos(DEG_TO_RAD * a); } F32 _tan(const F32& a) const { return tan(DEG_TO_RAD * a); } - F32 _asin(const F32& a) const { return asin(a * RAD_TO_DEG); } - F32 _acos(const F32& a) const { return acos(a * RAD_TO_DEG); } - F32 _atan(const F32& a) const { return atan(a * RAD_TO_DEG); } + F32 _asin(const F32& a) const { return asin(a) * RAD_TO_DEG; } + F32 _acos(const F32& a) const { return acos(a) * RAD_TO_DEG; } + F32 _atan(const F32& a) const { return atan(a) * RAD_TO_DEG; } F32 _sqrt(const F32& a) const { return sqrt(a); } F32 _log(const F32& a) const { return log(a); } F32 _exp(const F32& a) const { return exp(a); } diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp index 6750ee482ab179f85fe3a1736c3cd21bc338e793..6c1333a2af771eff33312a9ce38af744f39f1bf5 100755 --- a/indra/llui/llkeywords.cpp +++ b/indra/llui/llkeywords.cpp @@ -673,7 +673,7 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW S32 seg_start = cur - base; S32 seg_end = seg_start + seg_len; - // llinfos << "Seg: [" << word.c_str() << "]" << llendl; + // LL_INFOS("SyntaxLSL") << "Seg: [" << word.c_str() << "]" << LL_ENDL; insertSegments(wtext, *seg_list,cur_token, text_len, seg_start, seg_end, defaultColor, editor); } @@ -740,10 +740,10 @@ void LLKeywords::insertSegment(std::vector<LLTextSegmentPtr>& seg_list, LLTextSe #ifdef _DEBUG void LLKeywords::dump() { - llinfos << "LLKeywords" << llendl; + LL_INFOS() << "LLKeywords" << LL_ENDL; - llinfos << "LLKeywords::sWordTokenMap" << llendl; + LL_INFOS() << "LLKeywords::sWordTokenMap" << LL_ENDL; word_token_map_t::iterator word_token_iter = mWordTokenMap.begin(); while( word_token_iter != mWordTokenMap.end() ) { @@ -752,7 +752,7 @@ void LLKeywords::dump() ++word_token_iter; } - llinfos << "LLKeywords::sLineTokenList" << llendl; + LL_INFOS() << "LLKeywords::sLineTokenList" << LL_ENDL; for (token_list_t::iterator iter = mLineTokenList.begin(); iter != mLineTokenList.end(); ++iter) { @@ -761,7 +761,7 @@ void LLKeywords::dump() } - llinfos << "LLKeywords::sDelimiterTokenList" << llendl; + LL_INFOS() << "LLKeywords::sDelimiterTokenList" << LL_ENDL; for (token_list_t::iterator iter = mDelimiterTokenList.begin(); iter != mDelimiterTokenList.end(); ++iter) { @@ -772,12 +772,12 @@ void LLKeywords::dump() void LLKeywordToken::dump() { - llinfos << "[" << + LL_INFOS() << "[" << mColor.mV[VX] << ", " << mColor.mV[VY] << ", " << mColor.mV[VZ] << "] [" << wstring_to_utf8str(mToken) << "]" << - llendl; + LL_ENDL; } #endif // DEBUG diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 602a70345061a82a801d0d5b8139beeb5a6a474d..20ec243ec5057e62773f34e002d43dc60c83d111 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1316,6 +1316,7 @@ void LLTextBase::replaceWithSuggestion(U32 index) setCursorPos(it->first + (S32)suggestion.length()); + onSpellCheckPerformed(); break; } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index dfc10923f3fa82e165bce9f12a385e94abb11755..0698e9b53cd6cf103b56bfc0b02731a109df4fd7 100755 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -362,6 +362,7 @@ class LLTextBase std::string getMisspelledWord(U32 pos) const; bool isMisspelledWord(U32 pos) const; void onSpellCheckSettingsChange(); + virtual void onSpellCheckPerformed(){} // used by LLTextSegment layout code bool getWordWrap() { return mWordWrap; } diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 926326aaffbe100285d8fe0d109381da85e2007a..d170d17f94108a2d872fc3030de4408c17268c94 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -2380,6 +2380,14 @@ void LLTextEditor::removeTextFromEnd(S32 num_chars) //---------------------------------------------------------------------------- +void LLTextEditor::onSpellCheckPerformed() +{ + if (isPristine()) + { + mBaseDocIsPristine = FALSE; + } +} + void LLTextEditor::makePristine() { mPristineCmd = mLastCmd; diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index f6bdf917b4127b64551bea91d35712800819b8d4..26702b2412b8fdf4b2d81b01bb40f2f618b9b814 100755 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -160,6 +160,8 @@ class LLTextEditor : autoreplace_callback_t mAutoreplaceCallback; void setAutoreplaceCallback(autoreplace_callback_t cb) { mAutoreplaceCallback = cb; } + /*virtual*/ void onSpellCheckPerformed(); + // // Text manipulation // diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index 12537d9dd18a7ce67685bdd388b2c67f1acec374..c28dbb85775bd9d15e4744bdb4049c48be85c2cd 100755 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -227,6 +227,6 @@ void LLUrlAction::blockObject(std::string url) std::string object_name = getObjectName(url); if (LLUUID::validate(object_id)) { - executeSLURL("secondlife:///app/agent/" + object_id + "/block/" + object_name); + executeSLURL("secondlife:///app/agent/" + object_id + "/block/" + LLURI::escape(object_name)); } } diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp index d6b913829ec8d0c15e1a304907b32a5a3d628190..b65a80331eb719b9ee206a67a3e3858225ff1700 100755 --- a/indra/mac_crash_logger/mac_crash_logger.cpp +++ b/indra/mac_crash_logger/mac_crash_logger.cpp @@ -41,7 +41,7 @@ int main(int argc, char **argv) if (!(options.has("pid") && options.has("dumpdir"))) { - llwarns << "Insufficient parameters to crash report." << llendl; + LL_WARNS() << "Insufficient parameters to crash report." << LL_ENDL; } if (! app.init()) diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index d7e7f13e87ca5c4febf0d5324cb197209a629dde..5fc73c67d1bfbbf4c17c1f0464bdfbe096274a51 100755 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -96,13 +96,13 @@ LLNetMap::LLNetMap (const Params & p) mToolTipMsg(), mPopupMenu(NULL) { + mScale = gSavedSettings.getF32("MiniMapScale"); + mPixelsPerMeter = mScale / REGION_WIDTH_METERS; mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS); - setScale(gSavedSettings.getF32("MiniMapScale")); } LLNetMap::~LLNetMap() { - gSavedSettings.setF32("MiniMapScale", mScale); } BOOL LLNetMap::postBuild() @@ -137,6 +137,8 @@ void LLNetMap::setScale( F32 scale ) mPixelsPerMeter = mScale / REGION_WIDTH_METERS; mDotRadius = llmax(DOT_SCALE * mPixelsPerMeter, MIN_DOT_RADIUS); + gSavedSettings.setF32("MiniMapScale", mScale); + mUpdateNow = true; } diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index f91c4110c0a7c9e1228f1801baa2a729f7376942..e795e7eedb0b8bd1312dc46c2f612aad222362e3 100755 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -168,7 +168,7 @@ class LLAgentHandler : public LLCommandHandler { if (params.size() > 2) { - const std::string object_name = params[2].asString(); + const std::string object_name = LLURI::unescape(params[2].asString()); LLMute mute(avatar_id, object_name, LLMute::OBJECT); LLMuteList::getInstance()->add(mute); LLPanelBlockedList::showPanelAndSelect(mute.mID); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 3096d8c7ce7e9f4096d75deb3c4f5429aa392866..7e8bd9a4e0ac7bdaf05dafdd78e84c3e448bc4ef 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2831,6 +2831,8 @@ BOOL enable_object_build(void*) bool enable_object_edit() { + if (!isAgentAvatarValid()) return false; + // *HACK: The new "prelude" Help Islands have a build sandbox area, // so users need the Edit and Create pie menu options when they are // there. Eventually this needs to be replaced with code that only diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 24131495c31ceb41dd84b42d18d998c365bc9568..506b110afef80f2880f063bb922b296270e5f282 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2481,8 +2481,9 @@ This is usually a temporary failure. Please customize and save the wearable agai icon="alertmodal.tga" name="YouHaveBeenLoggedOut" type="alertmodal"> -Darn. You have been logged out of [SECOND_LIFE] - [MESSAGE] +Darn. You have been logged out of [SECOND_LIFE]. + +[MESSAGE] <usetemplate name="okcancelbuttons" notext="Quit" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml index f6665a1d5d84512a619af905a02b38997b815fd1..9da044ab64d2e6dbd12e0331c782b762a668dafa 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml @@ -39,7 +39,12 @@ enabled="true" label="English" name="English" - value="en" /> + value="en" /> + <combo_box.item + enabled="true" + label="Dansk (Danish) - Beta" + name="Danish" + value="da" /> <combo_box.item enabled="true" label="Deutsch (German) - Beta" @@ -59,7 +64,12 @@ enabled="true" label="Italiano (Italian) - Beta" name="Italian" - value="it" /> + value="it" /> + <combo_box.item + enabled="true" + label="Polski (Polish) - Beta" + name="Polish" + value="pl" /> <combo_box.item enabled="true" label="Português (Portuguese) - Beta"