diff --git a/autobuild.xml b/autobuild.xml index 391d48622b..0b35da3ef0 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -754,9 +754,9 @@ archive hash - d778c6a3475bc35ee8b9615dfc38b4a9 + 2d59bb6f4bd38a18d9250ff010a13b59 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55025/511964/dictionaries-1.538984-common-538984.tar.bz2 + http://downloads.phoenixviewer.com/dictionaries-2.46203-common-46203.tar.bz2 name common @@ -796,9 +796,9 @@ archive hash - 7253c6787a9aa04b160f450a47bc8d93 + e11da8884e44c27df3bf3adce01d5760 url - http://3p.firestormviewer.org/dullahan-1.8.0.202007201344_81.3.10_gb223419_chromium-81.0.4044.138-windows-202021141.tar.bz2 + http://3p.firestormviewer.org/dullahan-1.8.0.202007201344_81.3.10_gb223419_chromium-81.0.4044.138-windows-202072245.tar.bz2 name windows @@ -808,9 +808,9 @@ archive hash - 0b24ebef4ea891e5fbf94445acac42bf + 609dd2d70b73d83c382f73734c648156 url - http://3p.firestormviewer.org/dullahan-1.8.0.202007201344_81.3.10_gb223419_chromium-81.0.4044.138-windows64-202021146.tar.bz2 + http://3p.firestormviewer.org/dullahan-1.8.0.202007201344_81.3.10_gb223419_chromium-81.0.4044.138-windows64-202072240.tar.bz2 name windows64 @@ -1938,9 +1938,9 @@ archive hash - a33b5a416daba549898b215f3e4ae7ea + 995f807a91bd251408ad0f18c13bbcf4 url - file:///c:/cygwin/opt/firestorm/kdu-7.A.7-windows-vs2017-1906061512.tar.bz2 + file:///c:/cygwin/opt/firestorm/kdu-8.0.5-windows-202060400.tar.bz2 name windows @@ -1950,9 +1950,9 @@ archive hash - a33b5a416daba549898b215f3e4ae7ea + 995f807a91bd251408ad0f18c13bbcf4 url - file:///c:/cygwin/opt/firestorm/kdu-7.A.7-windows-vs2017-1906061512.tar.bz2 + file:///c:/cygwin/opt/firestorm/kdu-8.0.5-windows-202060400.tar.bz2 name windows64 @@ -2521,7 +2521,7 @@ hash 2aa4ec0d72bbe4b755730f1bf92b39e7 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/30340/257304/llphysicsextensions_tpv-1.0.542327-darwin64-542327.tar.bz2 + file:///opt/firestorm/llphysicsextensions_tpv-1.0.542327-darwin64-542327.tar.bz2 name darwin64 @@ -2545,7 +2545,7 @@ hash ad9aba5e2c43a37b6530a0d2de64df1c url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/30341/257307/llphysicsextensions_tpv-1.0.542327-windows-542327.tar.bz2 + file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.542327-windows-542327.tar.bz2 name windows @@ -2557,7 +2557,7 @@ hash 46689ff1442a8eccac3a7f3258308e1e url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/30341/257307/llphysicsextensions_tpv-1.0.542327-windows64-542327.tar.bz2 + file:///c:/cygwin/opt/firestorm/llphysicsextensions_tpv-1.0.542327-windows64-542327.tar.bz2 name windows @@ -2984,9 +2984,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 222a406ecb4071a9cc9635353afa337e + b20c18f66ae63c9d3b1970af8866aeb9 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54977/511775/openjpeg-1.5.1.538970-windows-538970.tar.bz2 + http://downloads.phoenixviewer.com/openjpeg-1.4.202102107-windows-202102107.tar.bz2 name windows @@ -2996,9 +2996,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors archive hash - 5b5c80807fa8161f3480be3d89fe9516 + 6f1e1d8796301c4e5737cb0db0f696d2 url - http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54974/511767/openjpeg-1.5.1.538970-windows64-538970.tar.bz2 + http://downloads.phoenixviewer.com/openjpeg-1.4.202102110-windows64-202102110.tar.bz2 name windows64 diff --git a/indra/llcommon/llbitpack.cpp b/indra/llcommon/llbitpack.cpp index 2dd0f9efe6..f0b75aa3be 100644 --- a/indra/llcommon/llbitpack.cpp +++ b/indra/llcommon/llbitpack.cpp @@ -25,7 +25,7 @@ */ // Get rid of LNK4221 linker warning since we don't run the unit tests anyway -#include "linden_common.h" +//#include "linden_common.h" // implementation is all in the header, this include dep ensures the unit test is rerun if the implementation changes. -#include "llbitpack.h" +//#include "llbitpack.h" diff --git a/indra/llcommon/llthreadsafequeue.cpp b/indra/llcommon/llthreadsafequeue.cpp index bde36999ba..50fa909bc8 100644 --- a/indra/llcommon/llthreadsafequeue.cpp +++ b/indra/llcommon/llthreadsafequeue.cpp @@ -23,7 +23,8 @@ * $/LicenseInfo$ */ -#include "linden_common.h" -#include "llthreadsafequeue.h" +// Get rid of LNK4221 linker warning since we don't run the unit tests anyway +//#include "linden_common.h" +//#include "llthreadsafequeue.h" diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp index dd0d693638..d9449db6ad 100644 --- a/indra/llkdu/llimagej2ckdu.cpp +++ b/indra/llkdu/llimagej2ckdu.cpp @@ -1119,6 +1119,14 @@ void set_default_colour_weights(kdu_params *siz) { return; } + +// Fix image encoding for KDU >= 8.0.4 +#if KDU_MAJOR_VERSION >= 8 && KDU_MINOR_VERSION >= 0 && KDU_PATCH_VERSION >= 4 + cod = siz->access_cluster(ENC_params); + assert(cod != NULL); +#endif +// + float weight; if (cod->get(Clev_weights,0,0,weight) || cod->get(Cband_weights,0,0,weight)) { diff --git a/indra/llrender/llatmosphere.cpp b/indra/llrender/llatmosphere.cpp index f84dd1faf6..ac37967a8f 100644 --- a/indra/llrender/llatmosphere.cpp +++ b/indra/llrender/llatmosphere.cpp @@ -86,8 +86,8 @@ AtmosphericModelSettings::AtmosphericModelSettings() , m_sunArcRadians(0.00045f) , m_mieAnisotropy(0.8f) { - DensityLayer rayleigh_density(0.0, 1.0, -1.0 / kRayleighScaleHeight, 0.0, 0.0); - DensityLayer mie_density(0.0, 1.0, -1.0 / kMieScaleHeight, 0.0, 0.0); + DensityLayer rayleigh_density(0.0f, 1.0f, -1.0f / (F32)kRayleighScaleHeight, 0.0f, 0.0f); + DensityLayer mie_density(0.0f, 1.0f, -1.0f / (F32)kMieScaleHeight, 0.0f, 0.0f); m_rayleighProfile.push_back(rayleigh_density); m_mieProfile.push_back(mie_density); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 06905d1472..f86fe9759e 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -3132,6 +3132,7 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out S32 delta_right = right_toolbar_rect.notEmpty() ? right_toolbar_rect.mLeft - floater_rect.mLeft : 0; // Prevent floaters being dragged under main chat bar S32 delta_bottom_chatbar = mMainChatbarRect.notEmpty() ? mMainChatbarRect.mTop - floater_rect.mTop : 0; + S32 delta_utility_bar = mUtilityBarRect.notEmpty() ? mUtilityBarRect.mTop - floater_rect.mTop : 0; // Fix floater relocation for vertical toolbars; Only header guarantees that floater can be dragged! S32 header_height = floater->getHeaderHeight(); @@ -3173,6 +3174,11 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out { floater->translate(0, delta_bottom_chatbar); } + else if (delta_utility_bar > 0 && (floater_rect.mLeft > mUtilityBarRect.mLeft && floater_rect.mRight < mUtilityBarRect.mRight)) + { + // Utility bar on legacy skins + floater->translate(0, delta_utility_bar); + } // } @@ -3406,6 +3412,14 @@ void LLFloaterView::setMainChatbarRect(LLLayoutPanel* panel, const LLRect& chatb panel->localRectToScreen(chatbar_rect, &mMainChatbarRect); mMainChatbarRect.stretch(FLOATER_MIN_VISIBLE_PIXELS); } + +void LLFloaterView::setUtilityBarRect(LLLayoutPanel* panel, const LLRect& utility_bar_rect) +{ + panel->localRectToScreen(utility_bar_rect, &mUtilityBarRect); + mUtilityBarRect.mLeft = mUtilityBarRect.mRight; + // Just assume right end of utility bar is always the border of the window + mUtilityBarRect.mRight = S32_MAX; +} // void LLFloater::setInstanceName(const std::string& name) diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 31ab6f7b44..8f516bef9a 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -627,6 +627,7 @@ public: // Prevent floaters being dragged under main chat bar void setMainChatbarRect(LLLayoutPanel* panel, const LLRect& chatbar_rect); + void setUtilityBarRect(LLLayoutPanel* panel, const LLRect& utility_bar_rect); private: void hiddenFloaterClosed(LLFloater* floater); @@ -648,6 +649,7 @@ private: // Prevent floaters being dragged under main chat bar LLRect mMainChatbarRect; + LLRect mUtilityBarRect; }; // diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 17c8c32ee3..a115c6abb8 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1936,6 +1936,7 @@ void LLPostponedNotification::lookupName(const LLUUID& id, } else { + mFromId = id; // FIRE-29943: Item shared messaged logging to wrong IM logfile if user is offline fetchAvatarName(id); } } diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h index 1a6b320a4c..aedf5c8dcf 100644 --- a/indra/llui/llnotifications.h +++ b/indra/llui/llnotifications.h @@ -1043,7 +1043,8 @@ protected: LLPostponedNotification() : mParams(), mName(), - mAvatarNameCacheConnection() + mAvatarNameCacheConnection(), + mFromId(LLUUID::null) // FIRE-29943: Item shared messaged logging to wrong IM logfile if user is offline {} virtual ~LLPostponedNotification() @@ -1064,6 +1065,7 @@ protected: LLNotification::Params mParams; std::string mName; boost::signals2::connection mAvatarNameCacheConnection; + LLUUID mFromId; // FIRE-29943: Item shared messaged logging to wrong IM logfile if user is offline }; // Stores only persistent notifications. diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 381163781e..a0c0f15b88 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -24679,6 +24679,7 @@ Change of this parameter will affect the layout of buttons in notification toast de en es + fr it ja pl diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index afbd5fca7f..0c6e00bd01 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -961,7 +961,18 @@ Type Boolean Value - 0 + 1 + + MoveLockInfoVisibleOnScreen + + Comment + If movelock built-in into LSL Bridge is active, then show info on screen all the time + Persist + 1 + Type + Boolean + Value + 1 BridgeIntegrationOC diff --git a/indra/newview/exogroupmutelist.cpp b/indra/newview/exogroupmutelist.cpp index 460db2d799..eb18c8a1bf 100644 --- a/indra/newview/exogroupmutelist.cpp +++ b/indra/newview/exogroupmutelist.cpp @@ -19,22 +19,20 @@ #include "llviewerprecompiledheaders.h" +#include "exogroupmutelist.h" +#include "llagent.h" #include "lldir.h" #include "llfile.h" #include "llgroupactions.h" -#include "llsdserialize.h" - -#include "exogroupmutelist.h" - -// Server-side storage +#include "llimview.h" #include "llmutelist.h" +#include "llsdserialize.h" +#include "llviewercontrol.h" #include "llviewernetwork.h" exoGroupMuteList::exoGroupMuteList() : mMuted() { - // Server-side storage - //loadMuteList(); #ifdef OPENSIM if (LLGridManager::instance().isInOpenSim()) { @@ -45,8 +43,6 @@ exoGroupMuteList::exoGroupMuteList() bool exoGroupMuteList::isMuted(const LLUUID& group) const { - // Server-side storage - //return mMuted.count(group); #ifdef OPENSIM if (LLGridManager::instance().isInOpenSim()) { @@ -54,22 +50,27 @@ bool exoGroupMuteList::isMuted(const LLUUID& group) const } #endif return (bool)LLMuteList::instance().isMuted(LLUUID::null, getMutelistString(group)); - // Server-side storage +} + +bool exoGroupMuteList::isLoaded() const +{ +#ifdef OPENSIM + if (LLGridManager::instance().isInOpenSim()) + { + return true; + } +#endif + return LLMuteList::instance().isLoaded(); } void exoGroupMuteList::add(const LLUUID& group) { LLGroupActions::endIM(group); // Actually kill ongoing conversation - // Server-side storage - //if(mMuted.insert(group).second) - //{ - // saveMuteList(); - //} #ifdef OPENSIM if (LLGridManager::instance().isInOpenSim()) { - if(mMuted.insert(group).second) + if (mMuted.insert(group).second) { saveMuteList(); } @@ -77,20 +78,14 @@ void exoGroupMuteList::add(const LLUUID& group) } #endif LLMuteList::instance().add(LLMute(LLUUID::null, getMutelistString(group), LLMute::BY_NAME)); - // Server-side storage } void exoGroupMuteList::remove(const LLUUID& group) { - // Server-side storage - //if(mMuted.erase(group)) - //{ - // saveMuteList(); - //} #ifdef OPENSIM if (LLGridManager::instance().isInOpenSim()) { - if(mMuted.erase(group)) + if (mMuted.erase(group)) { saveMuteList(); } @@ -98,13 +93,12 @@ void exoGroupMuteList::remove(const LLUUID& group) } #endif LLMuteList::instance().remove(LLMute(LLUUID::null, getMutelistString(group), LLMute::BY_NAME)); - // Server-side storage } bool exoGroupMuteList::loadMuteList() { std::string path = getFilePath(); - if(!LLFile::isfile(path)) + if (!LLFile::isfile(path)) { // We consider the absence of a mute file to be a successful load // because it won't exist if the user's never muted a group. @@ -112,7 +106,7 @@ bool exoGroupMuteList::loadMuteList() return true; } llifstream file(path.c_str()); - if(!file.is_open()) + if (!file.is_open()) { LL_WARNS("GroupMute") << "Failed to open group muting list." << LL_ENDL; return false; @@ -129,13 +123,13 @@ bool exoGroupMuteList::saveMuteList() { LLSD data; // LLSD doesn't seem to expose insertion using iterators. - for(std::set::iterator it = mMuted.begin(); it != mMuted.end(); ++it) + for (auto& it : mMuted) { - data.append(*it); + data.append(it); } llofstream file(getFilePath().c_str()); - if(!file.is_open()) + if (!file.is_open()) { LL_WARNS("GroupMute") << "Unable to save group muting list!" << LL_ENDL; return false; @@ -150,9 +144,46 @@ std::string exoGroupMuteList::getFilePath() const return gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "muted_groups.xml"); } -// Server-side storage +void exoGroupMuteList::addDeferredGroupChat(const LLUUID& group) +{ + if (mDeferredGroupChatSessionIDs.find(group) == mDeferredGroupChatSessionIDs.end()) + { + mDeferredGroupChatSessionIDs.insert(group); + } +} + +bool exoGroupMuteList::restoreDeferredGroupChat(const LLUUID& group) +{ + if (!isLoaded()) + { + return false; + } + + auto groupIt = mDeferredGroupChatSessionIDs.find(group); + if (groupIt != mDeferredGroupChatSessionIDs.end()) + { + mDeferredGroupChatSessionIDs.erase(groupIt); + + LLGroupData groupData; + if (gAgent.getGroupData(group, groupData)) + { + gIMMgr->addSession(groupData.mName, IM_SESSION_INVITE, group); + + uuid_vec_t ids; + LLIMModel::sendStartSession(group, group, ids, IM_SESSION_GROUP_START); + + if (!gAgent.isDoNotDisturb() && gSavedSettings.getU32("PlayModeUISndNewIncomingGroupIMSession") != 0) + { + make_ui_sound("UISndNewIncomingGroupIMSession"); + } + return true; + } + } + + return false; +} + std::string exoGroupMuteList::getMutelistString(const LLUUID& group) const { return std::string("Group:" + group.asString()); } -// Server-side storage diff --git a/indra/newview/exogroupmutelist.h b/indra/newview/exogroupmutelist.h index efd2b4b79f..a1c7d74eb4 100644 --- a/indra/newview/exogroupmutelist.h +++ b/indra/newview/exogroupmutelist.h @@ -28,17 +28,20 @@ class exoGroupMuteList : public LLSingleton public: bool isMuted(const LLUUID &group) const; + bool isLoaded() const; void add(const LLUUID &group); void remove(const LLUUID &group); bool loadMuteList(); + void addDeferredGroupChat(const LLUUID& group); + bool restoreDeferredGroupChat(const LLUUID& group); private: bool saveMuteList(); std::string getFilePath() const; - std::set mMuted; + uuid_set_t mMuted; + uuid_set_t mDeferredGroupChatSessionIDs; - // Server-side storage std::string getMutelistString(const LLUUID& group) const; }; diff --git a/indra/newview/fschathistory.cpp b/indra/newview/fschathistory.cpp index 3227f0e7a2..d800a0c7a5 100644 --- a/indra/newview/fschathistory.cpp +++ b/indra/newview/fschathistory.cpp @@ -362,94 +362,94 @@ public: void onAvatarIconContextMenuItemClicked(const LLSD& userdata) { - std::string level = userdata.asString(); + std::string param = userdata.asString(); - if (level == "profile") + if (param == "profile") { LLAvatarActions::showProfile(getAvatarId()); } - else if (level == "im") + else if (param == "im") { LLAvatarActions::startIM(getAvatarId()); } - else if (level == "teleport_to") + else if (param == "teleport_to") { LLAvatarActions::teleportTo(getAvatarId()); } - else if (level == "teleport") + else if (param == "teleport") { LLAvatarActions::offerTeleport(getAvatarId()); } - else if (level == "request_teleport") + else if (param == "request_teleport") { LLAvatarActions::teleportRequest(getAvatarId()); } - else if (level == "voice_call") + else if (param == "voice_call") { LLAvatarActions::startCall(getAvatarId()); } - else if (level == "chat_history") + else if (param == "chat_history") { LLAvatarActions::viewChatHistory(getAvatarId()); } - else if (level == "add") + else if (param == "add") { LLAvatarActions::requestFriendshipDialog(getAvatarId(), mFrom); } - else if (level == "add_set") + else if (param == "add_set") { LLAvatarActions::addToContactSet(getAvatarId()); } - else if (level == "remove") + else if (param == "remove") { LLAvatarActions::removeFriendDialog(getAvatarId()); } - else if (level == "invite_to_group") + else if (param == "invite_to_group") { LLAvatarActions::inviteToGroup(getAvatarId()); } - else if (level == "zoom_in") + else if (param == "zoom_in") { handle_zoom_to_object(getAvatarId()); } - else if (level == "map") + else if (param == "map") { LLAvatarActions::showOnMap(getAvatarId()); } - else if (level == "track") + else if (param == "track") { LLAvatarActions::track(getAvatarId()); } - else if (level == "share") + else if (param == "share") { LLAvatarActions::share(getAvatarId()); } - else if (level == "pay") + else if (param == "pay") { LLAvatarActions::pay(getAvatarId()); } - else if (level == "copy_name") + else if (param == "copy_name") { LLUrlAction::copyLabelToClipboard(LLSLURL("agent", getAvatarId(), "inspect").getSLURLString()); } - else if (level == "copy_url") + else if (param == "copy_url") { LLUrlAction::copyURLToClipboard(LLSLURL("agent", getAvatarId(), "about").getSLURLString()); } - else if(level == "block_unblock") + else if (param == "block_unblock") { LLAvatarActions::toggleMute(getAvatarId(), LLMute::flagVoiceChat); } - else if(level == "mute_unmute") + else if (param == "mute_unmute") { LLAvatarActions::toggleMute(getAvatarId(), LLMute::flagTextChat); } - else if(level == "toggle_allow_text_chat") + else if (param == "toggle_allow_text_chat") { LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID); speaker_mgr->toggleAllowTextChat(getAvatarId()); } - else if(level == "group_mute") + else if (param == "group_mute") { LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID); if (speaker_mgr) @@ -457,7 +457,7 @@ public: speaker_mgr->moderateVoiceParticipant(getAvatarId(), false); } } - else if(level == "group_unmute") + else if (param == "group_unmute") { LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID); if (speaker_mgr) @@ -465,7 +465,7 @@ public: speaker_mgr->moderateVoiceParticipant(getAvatarId(), true); } } - else if(level == "ban_member") + else if (param == "ban_member") { banGroupMember(getAvatarId()); } @@ -473,17 +473,17 @@ public: bool onAvatarIconContextMenuItemChecked(const LLSD& userdata) { - std::string level = userdata.asString(); + std::string param = userdata.asString(); - if (level == "is_blocked") + if (param == "is_blocked") { return LLMuteList::getInstance()->isMuted(getAvatarId(), LLMute::flagVoiceChat); } - if (level == "is_muted") + if (param == "is_muted") { return LLMuteList::getInstance()->isMuted(getAvatarId(), LLMute::flagTextChat); } - else if (level == "is_allowed_text_chat") + else if (param == "is_allowed_text_chat") { if (gAgent.isInGroup(mSessionID)) { @@ -502,13 +502,13 @@ public: bool onAvatarIconContextMenuItemEnabled(const LLSD& userdata) { - std::string level = userdata.asString(); + std::string param = userdata.asString(); - if (level == "can_allow_text_chat" || level == "can_mute" || level == "can_unmute") + if (param == "can_allow_text_chat" || param == "can_mute" || param == "can_unmute") { return canModerate(userdata); } - else if (level == "can_ban_member") + else if (param == "can_ban_member") { return canBanGroupMember(getAvatarId()); } @@ -517,9 +517,9 @@ public: bool onAvatarIconContextMenuItemVisible(const LLSD& userdata) { - std::string level = userdata.asString(); + std::string param = userdata.asString(); - if (level == "show_mute") + if (param == "show_mute") { LLSpeakerMgr * speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID); if (speaker_mgr) @@ -532,7 +532,7 @@ public: } return false; } - else if (level == "show_unmute") + else if (param == "show_unmute") { LLSpeakerMgr * speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(mSessionID); if (speaker_mgr) @@ -782,12 +782,6 @@ public: // Set up the icon. LLAvatarIconCtrl* icon = getChild("avatar_icon"); - - // Hacky preference to hide avatar icons for people who don't like them by overdrawing them. Will change to disable soon. -AO - if (!gSavedSettings.getBOOL("ShowChatMiniIcons")) - { - icon->setColor(LLUIColorTable::instance().getColor("Transparent")); - } if(mSourceType != CHAT_SOURCE_AGENT || mAvatarID.isNull()) icon->setDrawTooltip(false); diff --git a/indra/newview/fschatoptionsmenu.cpp b/indra/newview/fschatoptionsmenu.cpp index b9a23f759a..960016f921 100644 --- a/indra/newview/fschatoptionsmenu.cpp +++ b/indra/newview/fschatoptionsmenu.cpp @@ -137,6 +137,10 @@ bool FSChatOptionsMenu::onMenuItemVisible(const LLSD& userdata, LLUICtrl* source { return (dynamic_cast(source) != NULL); } + else if (option == "show_mini_icons") + { + return !gSavedSettings.getBOOL("PlainTextChatHistory"); + } return false; } diff --git a/indra/newview/fslslbridge.cpp b/indra/newview/fslslbridge.cpp index 084e409594..e67f725c52 100644 --- a/indra/newview/fslslbridge.cpp +++ b/indra/newview/fslslbridge.cpp @@ -38,6 +38,7 @@ #include "llavatarappearance.h" #include "llinventoryfunctions.h" #include "llmaniptranslate.h" +#include "llnotificationsutil.h" #include "llpreviewscript.h" #include "llselectmgr.h" #include "llsdutil.h" @@ -272,6 +273,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, { updateBoolSettingValue("UseMoveLock"); report_to_nearby_chat(LLTrans::getString("MovelockEnabling")); + make_ui_sound("UISndMovelockToggle"); } // @@ -284,6 +286,7 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, // Not called right after logging in, and only if movelock was enabled during transition else if (gSavedPerAccountSettings.getBOOL("UseMoveLock")) { + make_ui_sound("UISndMovelockToggle"); if (!gSavedSettings.getBOOL("RelockMoveLockAfterRegionChange")) { // Don't call for update here and only change setting to 'false', getCommitSignal()->connect->boost in llviewercontrol.cpp will send a message to Bridge anyway @@ -450,11 +453,11 @@ bool FSLSLBridge::lslToViewer(const std::string& message, const LLUUID& fromID, { if (message.substr(valuepos + FS_STATE_ATTRIBUTE.size(), 1) == "1") { - report_to_nearby_chat(LLTrans::getString("MovelockEnabled")); + LLNotificationsUtil::add("MovelockEnabled", LLSD()); } else if (message.substr(valuepos + FS_STATE_ATTRIBUTE.size(), 1) == "0") { - report_to_nearby_chat(LLTrans::getString("MovelockDisabled")); + LLNotificationsUtil::add("MovelockDisabled", LLSD()); } else { diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 5831b97918..caebeb1d90 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -55,7 +55,7 @@ RequestExecutionLevel admin # For when we write to Program Files ##!include "%%SOURCE%%\installers\windows\lang_da.nsi" !include "%%SOURCE%%\installers\windows\lang_de.nsi" !include "%%SOURCE%%\installers\windows\lang_es.nsi" -##!include "%%SOURCE%%\installers\windows\lang_fr.nsi" +!include "%%SOURCE%%\installers\windows\lang_fr.nsi" !include "%%SOURCE%%\installers\windows\lang_ja.nsi" !include "%%SOURCE%%\installers\windows\lang_it.nsi" !include "%%SOURCE%%\installers\windows\lang_pl.nsi" ; Polish is supported @@ -69,7 +69,7 @@ RequestExecutionLevel admin # For when we write to Program Files LangString LanguageCode ${LANG_GERMAN} "de" LangString LanguageCode ${LANG_ENGLISH} "en" LangString LanguageCode ${LANG_SPANISH} "es" -##LangString LanguageCode ${LANG_FRENCH} "fr" +LangString LanguageCode ${LANG_FRENCH} "fr" LangString LanguageCode ${LANG_JAPANESE} "ja" LangString LanguageCode ${LANG_ITALIAN} "it" LangString LanguageCode ${LANG_POLISH} "pl" @@ -403,10 +403,10 @@ CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \ "InternetShortcut" "URL" \ - "http://join.secondlife.com/" + "https://join.secondlife.com/" WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \ "InternetShortcut" "URL" \ - "http://www.secondlife.com/account/" + "https://www.secondlife.com/account/" WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\LSL Scripting Language Help.url" \ "InternetShortcut" "URL" \ "http://wiki.secondlife.com/wiki/LSL_Portal" @@ -436,9 +436,9 @@ WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Version" "${VERSION_LONG}" WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Shortcut" "$INSTSHORTCUT" WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Exe" "$VIEWER_EXE" WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "Publisher" "The Phoenix Firestorm Project, Inc." -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLInfoAbout" "http://www.firestormviewer.org" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLUpdateInfo" "http://www.firestormviewer.org/downloads" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "HelpLink" "http://www.firestormviewer.org/support" +WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLInfoAbout" "https://www.firestormviewer.org" +WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLUpdateInfo" "https://www.firestormviewer.org/downloads" +WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "HelpLink" "https://www.firestormviewer.org/support" WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayName" "$INSTNAME" WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"' WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayVersion" "${VERSION_LONG}" @@ -447,7 +447,7 @@ WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayVersion" "${VERSION_LONG} ${If} ${IS64BIT} == "1" WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x00064000" # 400 MB ${Else} - WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x00057800" # 350 MB + WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x00061800" # 390 MB ${EndIf} # from FS:Ansariel @@ -458,6 +458,9 @@ WriteRegDWORD SHELL_CONTEXT "${MSNTCURRVER_KEY}\Image File Execution Options\$VI WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "NoModify" 1 WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "NoRepair" 1 +# Ask before creating protocol registry entries +MessageBox MB_YESNO|MB_ICONQUESTION $(CreateUrlRegistryEntries) IDNO skip_create_url_registry_entries + # Write URL registry info WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life" WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" @@ -473,9 +476,6 @@ WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$ # URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks. WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"' -WriteRegStr HKEY_CLASSES_ROOT "Applications\$INSTEXE" "IsHostApp" "" -##WriteRegStr HKEY_CLASSES_ROOT "Applications\${VIEWER_EXE}" "NoStartPage" "" - # Register hop:// protocol registry info WriteRegStr HKEY_CLASSES_ROOT "hop" "(default)" "URL:Second Life" WriteRegStr HKEY_CLASSES_ROOT "hop" "URL Protocol" "" @@ -483,6 +483,12 @@ WriteRegStr HKEY_CLASSES_ROOT "hop\DefaultIcon" "" '"$INSTDIR\$VIEWER_EXE"' WriteRegExpandStr HKEY_CLASSES_ROOT "hop\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"' # +# Ask before creating protocol registry entries +skip_create_url_registry_entries: + +WriteRegStr HKEY_CLASSES_ROOT "Applications\$INSTEXE" "IsHostApp" "" +##WriteRegStr HKEY_CLASSES_ROOT "Applications\${VIEWER_EXE}" "NoStartPage" "" + # Write out uninstaller WriteUninstaller "$INSTDIR\uninst.exe" @@ -800,8 +806,10 @@ NOFOLDER: MessageBox MB_YESNO $(DeleteRegistryKeysMB) IDYES DeleteKeys IDNO NoDelete DeleteKeys: + DeleteRegKey SHELL_CONTEXT "SOFTWARE\Classes\hop" # Unregister hop:// protocol registry info DeleteRegKey SHELL_CONTEXT "SOFTWARE\Classes\x-grid-location-info" DeleteRegKey SHELL_CONTEXT "SOFTWARE\Classes\secondlife" + DeleteRegKey HKEY_CLASSES_ROOT "hop" # Unregister hop:// protocol registry info DeleteRegKey HKEY_CLASSES_ROOT "x-grid-location-info" DeleteRegKey HKEY_CLASSES_ROOT "secondlife" diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi index f462c82078..8daa818030 100644 Binary files a/indra/newview/installers/windows/lang_da.nsi and b/indra/newview/installers/windows/lang_da.nsi differ diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi index 8b4827ec09..3b81a616f3 100755 Binary files a/indra/newview/installers/windows/lang_de.nsi and b/indra/newview/installers/windows/lang_de.nsi differ diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi index d9fd222af7..e1ec013626 100644 Binary files a/indra/newview/installers/windows/lang_en-us.nsi and b/indra/newview/installers/windows/lang_en-us.nsi differ diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi index fae3a3bac9..c7b478a44c 100755 Binary files a/indra/newview/installers/windows/lang_es.nsi and b/indra/newview/installers/windows/lang_es.nsi differ diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi index 47f99caa72..9c668a78f6 100755 Binary files a/indra/newview/installers/windows/lang_fr.nsi and b/indra/newview/installers/windows/lang_fr.nsi differ diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi index 5c738c1ee9..f18f1c9cc5 100755 Binary files a/indra/newview/installers/windows/lang_it.nsi and b/indra/newview/installers/windows/lang_it.nsi differ diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi index deaec2e4e9..8b338460ea 100755 Binary files a/indra/newview/installers/windows/lang_ja.nsi and b/indra/newview/installers/windows/lang_ja.nsi differ diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi index b9b03d8264..acbb136f6f 100644 Binary files a/indra/newview/installers/windows/lang_pl.nsi and b/indra/newview/installers/windows/lang_pl.nsi differ diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi index 2ffe97d221..f53da4d6b6 100755 Binary files a/indra/newview/installers/windows/lang_pt-br.nsi and b/indra/newview/installers/windows/lang_pt-br.nsi differ diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi index 543ecc41a7..8be2086b7d 100755 Binary files a/indra/newview/installers/windows/lang_ru.nsi and b/indra/newview/installers/windows/lang_ru.nsi differ diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi index b634f6d568..374ac85a7b 100755 Binary files a/indra/newview/installers/windows/lang_tr.nsi and b/indra/newview/installers/windows/lang_tr.nsi differ diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi index 9c2f8d15ab..27e417abb6 100755 Binary files a/indra/newview/installers/windows/lang_zh.nsi and b/indra/newview/installers/windows/lang_zh.nsi differ diff --git a/indra/newview/installers/windows_x64/msvcp120.dll b/indra/newview/installers/windows_x64/msvcp120.dll deleted file mode 100644 index 4ea1efa734..0000000000 Binary files a/indra/newview/installers/windows_x64/msvcp120.dll and /dev/null differ diff --git a/indra/newview/installers/windows_x64/msvcr120.dll b/indra/newview/installers/windows_x64/msvcr120.dll deleted file mode 100644 index d711c92232..0000000000 Binary files a/indra/newview/installers/windows_x64/msvcr120.dll and /dev/null differ diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 1963add08f..df13c3edc9 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -1640,7 +1640,7 @@ void LLAgent::setAFK() // Gsit on away, antigrief protection if (gSavedSettings.getBOOL("AvatarSitOnAway")) { - if (!gAgentAvatarp->isSitting() && !gRlvHandler.hasBehaviour(RLV_BHVR_SIT)) + if (isAgentAvatarValid() && !gAgentAvatarp->isSitting() && !gRlvHandler.hasBehaviour(RLV_BHVR_SIT)) { gAgent.sitDown(); gAgent.setIsAfkSitting(true); @@ -5535,6 +5535,7 @@ void LLAgent::renderAutoPilotTarget() // Phantom mode void LLAgent::togglePhantom() { + make_ui_sound("UISndMovelockToggle"); mPhantom = !mPhantom; if (mPhantom) { diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index e35acf1dd2..c8786ef11d 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -578,7 +578,10 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param) LLFloaterCamera* camera_floater = LLFloaterCamera::findInstance(); if (camera_floater) { - camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + // FIRE-29950: Re-add weird legacy object view camera toggle + //camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + // camera_floater->updateItemsSelection(); camera_floater->fromFreeToPresets(); } @@ -587,7 +590,10 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param) camera_floater = LLFloaterCamera::findPhototoolsInstance(); if (camera_floater) { - camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + // FIRE-29950: Re-add weird legacy object view camera toggle + //camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA); + // camera_floater->updateItemsSelection(); camera_floater->fromFreeToPresets(); } @@ -726,7 +732,14 @@ void LLFloaterCamera::onSavePreset() LLFloaterReg::hideInstance("delete_pref_preset", PRESETS_CAMERA); LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA); - LLFloaterReg::showInstance("save_camera_preset"); + // Preselect correct radio button on save camera presets floater + //LLFloaterReg::showInstance("save_camera_preset"); + LLSD key; + std::string current_preset = gSavedSettings.getString("PresetCameraActive"); + bool is_custom_preset = current_preset != "" && !LLPresetsManager::getInstance()->isDefaultCameraPreset(current_preset); + key["index"] = is_custom_preset ? 1 : 0; + LLFloaterReg::showInstance("save_camera_preset", key); + // } void LLFloaterCamera::onCustomPresetSelected() diff --git a/indra/newview/llfloatersavecamerapreset.cpp b/indra/newview/llfloatersavecamerapreset.cpp index e790a5c89a..ce832d78db 100644 --- a/indra/newview/llfloatersavecamerapreset.cpp +++ b/indra/newview/llfloatersavecamerapreset.cpp @@ -54,6 +54,7 @@ BOOL LLFloaterSaveCameraPreset::postBuild() mNameEditor = getChild("preset_txt_editor"); mNameEditor->setKeystrokeCallback(boost::bind(&LLFloaterSaveCameraPreset::onPresetNameEdited, this), NULL); + mNameEditor->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnSave, this)); // Save on pressing enter mSaveButton = getChild("save"); mSaveButton->setCommitCallback(boost::bind(&LLFloaterSaveCameraPreset::onBtnSave, this)); @@ -99,6 +100,13 @@ void LLFloaterSaveCameraPreset::onBtnSave() bool is_saving_new = mSaveRadioGroup->getSelectedIndex() == 0; std::string name = is_saving_new ? mNameEditor->getText() : mPresetCombo->getSimple(); + // Save on pressing enter + if (name.empty()) + { + return; + } + // + if ((name == LLTrans::getString(PRESETS_DEFAULT)) || (name == PRESETS_DEFAULT)) { LLNotificationsUtil::add("DefaultPresetNotSaved"); diff --git a/indra/newview/llfloatersaveprefpreset.cpp b/indra/newview/llfloatersaveprefpreset.cpp index dd47d02bfa..ef7f2ddf5a 100644 --- a/indra/newview/llfloatersaveprefpreset.cpp +++ b/indra/newview/llfloatersaveprefpreset.cpp @@ -51,7 +51,10 @@ BOOL LLFloaterSavePrefPreset::postBuild() } getChild("preset_combo")->setTextEntryCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this)); - getChild("preset_combo")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this)); + // Save on pressing enter + //getChild("preset_combo")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onPresetNameEdited, this)); + getChild("preset_combo")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this)); + // getChild("save")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnSave, this)); getChild("cancel")->setCommitCallback(boost::bind(&LLFloaterSavePrefPreset::onBtnCancel, this)); @@ -86,6 +89,13 @@ void LLFloaterSavePrefPreset::onBtnSave() { std::string name = mPresetCombo->getSimple(); + // Save on pressing enter + if (name.empty()) + { + return; + } + // + std::string upper_name(name); LLStringUtil::toUpper(upper_name); diff --git a/indra/newview/llfloaterscriptrecover.cpp b/indra/newview/llfloaterscriptrecover.cpp index 874c7f5259..41cd1f2641 100644 --- a/indra/newview/llfloaterscriptrecover.cpp +++ b/indra/newview/llfloaterscriptrecover.cpp @@ -25,6 +25,7 @@ #include "llinventorymodel.h" #include "llinventorypanel.h" #include "llscrolllistctrl.h" +#include "lltrans.h" #include "llviewerassettype.h" #include "llviewerinventory.h" #include "llviewerregion.h" @@ -159,13 +160,30 @@ void LLScriptRecoverQueue::recoverIfNeeded() { // Build a friendly name for the file std::string strName = gDirUtilp->getBaseFileName(strFilename, true); + + std::string agent_id_str = gAgentID.asString(); + LLStringUtil::replaceString(agent_id_str, "-", ""); + std::string::size_type agent_delim_offset = strName.find_first_of("_"); + if (agent_delim_offset != std::string::npos && agent_delim_offset != 0) + { + std::string file_agent_id_str = strName.substr(0, agent_delim_offset); + if (file_agent_id_str != agent_id_str) + { + continue; + } + else + { + strName.erase(0, agent_delim_offset + 1); + } + } + std::string::size_type offset = strName.find_last_of("-"); if ( (std::string::npos != offset) && (offset != 0) && (offset == strName.length() - 9)) strName.erase(strName.length() - 9); LLStringUtil::trim(strName); if (0 == strName.length()) - strName = "(Unknown script)"; + strName = LLTrans::getString("unknown_script"); sdFiles.append(LLSD().with("path", strTempPath + strFilename).with("name", strName)); } diff --git a/indra/newview/llimprocessing.cpp b/indra/newview/llimprocessing.cpp index 9585452fc1..0e3183f5a6 100644 --- a/indra/newview/llimprocessing.cpp +++ b/indra/newview/llimprocessing.cpp @@ -69,6 +69,7 @@ // [/RLVa:KB] // Firestorm includes +#include "exogroupmutelist.h" #include "fscommon.h" #include "fsdata.h" #include "fskeywords.h" @@ -182,7 +183,22 @@ protected: void modifyNotificationParams() { LLSD payload = mParams.payload; - payload["SESSION_NAME"] = mName; + // FIRE-29943: Item shared messaged logging to wrong IM logfile if user is offline + //payload["SESSION_NAME"] = mName; + LLAvatarName av_name; + // This should work since modifyNotificationParams() is invoked after we already + // retrieved the avatar name + if (mFromId.notNull() && LLAvatarNameCache::instance().getName(mFromId, &av_name)) + { + // LLHandlerUtil::logToIM() will transform this into the correct filename + payload["SESSION_NAME"] = av_name.getLegacyName(); + } + else + { + payload["SESSION_NAME"] = mName; + } + // + mParams.payload = payload; } }; @@ -1621,8 +1637,8 @@ void LLIMProcessing::processNewMessage(LLUUID from_id, // should happen after you get an "invitation" // [SL:KB] - Patch: Chat-GroupSnooze | Checked: 2012-06-16 (Catznip-3.3) //if ( !gIMMgr->hasSession(session_id) ) - if ( (!gIMMgr->hasSession(session_id)) && - ( (!gAgent.isInGroup(session_id)) || (!gIMMgr->checkSnoozeExpiration(session_id)) || LLAvatarActions::isBlocked(from_id) || (!gIMMgr->restoreSnoozedSession(session_id)) ) ) + if (!gIMMgr->hasSession(session_id) && + (!gAgent.isInGroup(session_id) || LLAvatarActions::isBlocked(from_id) || (!exoGroupMuteList::instance().restoreDeferredGroupChat(session_id) && (!gIMMgr->checkSnoozeExpiration(session_id) || !gIMMgr->restoreSnoozedSession(session_id)) ))) // [/SL:KB] { return; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index b1d50d0c53..2bd2569760 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -2991,9 +2991,9 @@ void LLIMMgr::addMessage( static LLCachedControl PlayModeUISndNewIncomingIMSession(gSavedSettings, "PlayModeUISndNewIncomingIMSession"); static LLCachedControl PlayModeUISndNewIncomingGroupIMSession(gSavedSettings, "PlayModeUISndNewIncomingGroupIMSession"); static LLCachedControl PlayModeUISndNewIncomingConfIMSession(gSavedSettings, "PlayModeUISndNewIncomingConfIMSession"); - BOOL do_not_disturb = gAgent.isDoNotDisturb(); - BOOL is_group_chat = FALSE; - if (!new_session && dialog != IM_NOTHING_SPECIAL) + bool do_not_disturb = gAgent.isDoNotDisturb(); + bool is_group_chat = false; + if (dialog != IM_NOTHING_SPECIAL) { is_group_chat = gAgent.isInGroup(new_session_id); } @@ -3010,6 +3010,13 @@ void LLIMMgr::addMessage( // Clear muted group chat early to prevent contacts floater // (re-)gaining focus; the server already knows the correct // session id, so we can leave it! + if (is_group_chat && !exoGroupMuteList::instance().isLoaded()) + { + LL_INFOS() << "Received group chat from " << fixed_session_name << " (" << new_session_id.asString() << ") before must list has been loaded - skipping message" << LL_ENDL; + exoGroupMuteList::instance().addDeferredGroupChat(new_session_id); + return; + } + if (exoGroupMuteList::instance().isMuted(new_session_id)) { LL_INFOS() << "Muting group chat from " << new_session_id.asString() << ": " << fixed_session_name << LL_ENDL; @@ -3033,6 +3040,7 @@ void LLIMMgr::addMessage( gAgent.isInGroup(new_session_id) && LLMuteList::getInstance()->isMuted(other_participant_id) && !from_linden) { LL_INFOS() << "Ignoring group chat initiated by muted resident." << LL_ENDL; + exoGroupMuteList::instance().addDeferredGroupChat(new_session_id); return; } // @@ -3084,11 +3092,6 @@ void LLIMMgr::addMessage( // //Play sound for new conversations // if (!gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation") == TRUE)) - if (dialog != IM_NOTHING_SPECIAL) - { - is_group_chat = gAgent.isInGroup(new_session_id); - } - // Option to automatically ignore and leave all conference (ad-hoc) chats static LLCachedControl ignoreAdHocSessions(gSavedSettings, "FSIgnoreAdHocSessions"); if (dialog != IM_NOTHING_SPECIAL && !is_group_chat && ignoreAdHocSessions && !from_linden) diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h index 8b7fe14e16..f6a186ae98 100644 --- a/indra/newview/lllogchat.h +++ b/indra/newview/lllogchat.h @@ -204,5 +204,6 @@ extern const std::string LL_IM_TEXT; //("message"); extern const std::string LL_IM_FROM; //("from"); extern const std::string LL_IM_FROM_ID; //("from_id"); extern const std::string LL_TRANSCRIPT_FILE_EXTENSION; //("txt"); +extern const std::string GROUP_CHAT_SUFFIX; // FIRE-29911: Group notices logging to wrong file #endif diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index d86585b943..15f57d98ad 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -114,14 +114,17 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type, // to use it for a history log filename. // [Legacy IM logfile names] //std::string user_name = LLCacheName::buildUsername(session_name); - std::string user_name; - if (gSavedSettings.getBOOL("UseLegacyIMLogNames")) + std::string user_name(session_name); + if (!gAgent.isInGroup(session_owner_id)) { - user_name = session_name.substr(0, session_name.find(" Resident"));; - } - else - { - user_name = LLCacheName::buildUsername(session_name); + if (gSavedSettings.getBOOL("UseLegacyIMLogNames")) + { + user_name = session_name.substr(0, session_name.find(" Resident"));; + } + else + { + user_name = LLCacheName::buildUsername(session_name); + } } // [Legacy IM logfile names] LLIMModel::instance().logToFile(user_name, from, from_id, message); @@ -236,6 +239,8 @@ void LLHandlerUtil::logGroupNoticeToIMGroup( } // Better group notices to IM log + //logToIM(IM_SESSION_GROUP_START, group_name, sender_name, payload["message"], + // payload["group_id"], sender_id); if (gSavedSettings.getBOOL("FSBetterGroupNoticesToIMLog")) { std::string msg = llformat( @@ -247,14 +252,14 @@ void LLHandlerUtil::logGroupNoticeToIMGroup( payload["message"].asString().c_str() ); - logToIM(IM_SESSION_GROUP_START, group_name, sender_name, msg, payload["group_id"], sender_id); + logToIM(IM_SESSION_GROUP_START, group_name + GROUP_CHAT_SUFFIX, sender_name, msg, payload["group_id"], sender_id); } else { + logToIM(IM_SESSION_GROUP_START, group_name + GROUP_CHAT_SUFFIX, sender_name, payload["message"], + payload["group_id"], sender_id); + } // Better group notices to IM log - logToIM(IM_SESSION_GROUP_START, group_name, sender_name, payload["message"], - payload["group_id"], sender_id); - }// Better group notices to IM log } // static diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index c3bcfcfda4..d51008b7f4 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -2022,6 +2022,10 @@ std::string LLScriptEdContainer::getBackupFileName() const // NOTE: this function is not guaranteed to return the same filename every time (i.e. the item name may have changed) std::string strFile = LLFile::tmpdir(); + std::string agent_id_str = gAgentID.asString(); + LLStringUtil::replaceString(agent_id_str, "-", ""); + strFile += agent_id_str + "_"; + // Find the inventory item for this script const LLInventoryItem* pItem = getItem(); if (pItem) diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 14ba971f2a..cbf5c5c4d9 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -518,6 +518,15 @@ const void upload_bulk(const std::vector& filenames, LLFilePicker:: LLSD args; args["COST"] = expected_upload_cost; args["COUNT"] = expected_upload_count; + // Check balance before trying to upload + S32 current_balance = gStatusBar->getBalance(); + if (expected_upload_cost > current_balance) + { + args["BALANCE"] = current_balance; + LLNotificationsUtil::add("NotEnoughMoneyForBulkUpload", args); + return; + } + // LLNotificationsUtil::add("BulkUploadCostConfirmation", args, LLSD(), boost::bind(do_bulk_upload, filtered_filenames, _1, _2)); if (filtered_filenames.size() > expected_upload_count) diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 6365df09e1..cdfd7c2f04 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -1110,9 +1110,15 @@ void LLOcclusionCullingGroup::checkOcclusion() static LLCachedControl wait_for_query(gSavedSettings, "RenderSynchronousOcclusion", true); - if (wait_for_query && mOcclusionIssued[LLViewerCamera::sCurCameraID] < gFrameCount) + // Restore occlusion query performance optimization - except for Intel GPUs + //if (wait_for_query && mOcclusionIssued[LLViewerCamera::sCurCameraID] < gFrameCount) + U32 target_read_frame = !gGLManager.mIsIntel ? ((gFrameCount > 2) ? (gFrameCount - 2) : 0) : gFrameCount; + if (wait_for_query && mOcclusionIssued[LLViewerCamera::sCurCameraID] < target_read_frame) + // { //query was issued last frame, wait until it's available - S32 max_loop = 1024; + // Restore occlusion query performance optimization - except for Intel GPUs + //S32 max_loop = 1024; + S32 max_loop = !gGLManager.mIsIntel ? 64 : 1024; LL_RECORD_BLOCK_TIME(FTM_OCCLUSION_WAIT); while (!available && max_loop-- > 0) { diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 9ddd814bfc..a613cc2056 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -389,6 +389,7 @@ public: static const std::string beacon_sun = LLTrans::getString("BeaconSun"); static const std::string beacon_moon = LLTrans::getString("BeaconMoon"); static const std::string particle_hiding = LLTrans::getString("ParticleHiding"); + static const std::string movelock_enabled = LLTrans::getString("MovelockEnabled"); // FIRE-29880: Movelock // Draw the statistics in a light gray // and in a thin font @@ -794,6 +795,16 @@ public: ypos += y_inc; } + // FIRE-29880: Movelock + static LLCachedControl fsRenderMovelockState(gSavedPerAccountSettings, "UseMoveLock"); + static LLCachedControl fsRenderMovelockText(gSavedPerAccountSettings, "MoveLockInfoVisibleOnScreen"); + if (fsRenderMovelockState && fsRenderMovelockText) + { + addText(xpos, ypos, movelock_enabled); + ypos += y_inc; + } + // + // pull the text saying if particles are hidden out from beacons if (LLPipeline::toggleRenderTypeControlNegated(LLPipeline::RENDER_TYPE_PARTICLES)) { @@ -2186,6 +2197,14 @@ void LLViewerWindow::initBase() chatbar_panel->setReshapePanelCallback(boost::bind(&LLFloaterView::setMainChatbarRect, gFloaterView, _1, _2)); gFloaterView->setMainChatbarRect(chatbar_panel, chatbar_panel->getRect()); } + + // Utility bar on legacy skins + LLLayoutPanel* legacy_chat_panel = LLUI::getInstance()->getRootView()->findChild("chat_panel"); + if (legacy_chat_panel) + { + legacy_chat_panel->setReshapePanelCallback(boost::bind(&LLFloaterView::setUtilityBarRect, gFloaterView, _1, _2)); + gFloaterView->setUtilityBarRect(legacy_chat_panel, legacy_chat_panel->getRect()); + } // // optionally forward warnings to chat console/chat floater diff --git a/indra/newview/skins/ansastorm/xui/de/floater_camera.xml b/indra/newview/skins/ansastorm/xui/de/floater_camera.xml index 5df5893841..e6318908f6 100644 --- a/indra/newview/skins/ansastorm/xui/de/floater_camera.xml +++ b/indra/newview/skins/ansastorm/xui/de/floater_camera.xml @@ -50,8 +50,9 @@ - + - - + diff --git a/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml b/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml index d3c4785b01..9cd2a6e411 100644 --- a/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml +++ b/indra/newview/skins/ansastorm/xui/pl/floater_camera.xml @@ -34,5 +34,6 @@ - \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/floater_camera_presets.xml b/indra/newview/skins/default/xui/en/floater_camera_presets.xml index eb703d4b2b..c5384bc835 100644 --- a/indra/newview/skins/default/xui/en/floater_camera_presets.xml +++ b/indra/newview/skins/default/xui/en/floater_camera_presets.xml @@ -7,6 +7,7 @@ title="Camera Presets" layout="topleft" name="floater_camera_presets" + positioning="centered" single_instance="true" min_width="185" width="250"> diff --git a/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml b/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml index a75fd6292f..412192a4d5 100644 --- a/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml +++ b/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml @@ -5,6 +5,7 @@ help_topic="floater_delete_preset" layout="topleft" name="delete_pref_preset" + positioning="centered" save_rect="true" title="Delete Pref Preset" width="240"> diff --git a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml index 3efd4368f9..e71578fdbb 100644 --- a/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml +++ b/indra/newview/skins/default/xui/en/floater_edit_ext_day_cycle.xml @@ -2,7 +2,7 @@ Edit Sky: diff --git a/indra/newview/skins/default/xui/en/floater_phototools.xml b/indra/newview/skins/default/xui/en/floater_phototools.xml index 73e70fa6b8..57f56a6623 100644 --- a/indra/newview/skins/default/xui/en/floater_phototools.xml +++ b/indra/newview/skins/default/xui/en/floater_phototools.xml @@ -34,7 +34,7 @@ layout="topleft" width="285" top="0" - label="WL" + label="Env" left="0"> - Windlight Settings + Environment Settings @@ -75,12 +75,12 @@ control_name="WindLightUseAtmosShaders" height="16" initial_value="true" - label="Enable Atmospheric Shaders (Windlight)" + label="Enable Atmospheric Shaders" layout="topleft" left="5" name="WindLightUseAtmosShaders" top_pad="8" - tool_tip="This will enable full WindLight functionality (atmospheric shaders). If you cannot enable this feature, ensure that Basic Shaders are enabled below." + tool_tip="This will enable full EEP functionality (atmospheric shaders). If you cannot enable this feature, ensure that Basic Shaders are enabled below." width="240"> @@ -103,11 +103,11 @@ layout="topleft" left="5" name="WL Sky" - tool_tip="Windlight presets for your sky." + tool_tip="Presets for your sky." mouse_opaque="false" top_pad="10" width="90"> - WL Sky + Sky - WL Water + Water - Day Cycle + Day Cycle - Quick Windlights + Quick Environments - WL Sky: + Sky: - WL Water: + Water: diff --git a/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml b/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml index 447be5aa35..2d291eed0a 100644 --- a/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml +++ b/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml @@ -5,6 +5,7 @@ help_topic="floater_save_preset" layout="topleft" name="save_camera_preset" + positioning="centered" save_rect="true" title="Save Camera Preset" width="240"> @@ -34,7 +35,7 @@ value="1"/> diff --git a/indra/newview/skins/default/xui/en/menu_fs_chat_options.xml b/indra/newview/skins/default/xui/en/menu_fs_chat_options.xml index ada396a08f..49520b1856 100644 --- a/indra/newview/skins/default/xui/en/menu_fs_chat_options.xml +++ b/indra/newview/skins/default/xui/en/menu_fs_chat_options.xml @@ -41,6 +41,19 @@ function="ToggleControl" parameter="PlainTextChatHistory"/> + + + + + diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 7538fb87f4..1cb0227f60 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9255,10 +9255,21 @@ Your voice has been muted by a moderator. type="alertmodal"> This will upload [COUNT] items at a total cost of L$[COST]. Do you wish to continue with the upload? + + +Your current balance of L$[BALANCE] is not enough to upload [COUNT] items at a total cost of L$[COST]. + + + +Movelock enabled. Use Avatar > Movement > Movelock to disable. + + + +Movelock disabled. + + diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml index e24ae8c2d1..89b338b095 100644 --- a/indra/newview/skins/default/xui/en/panel_chat_header.xml +++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml @@ -1,44 +1,67 @@ - - + + + + + + + + - No Wear inventory folder Picture for Outfit + (Unknown script) diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 4c828169fc..d38f55d21d 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -5431,6 +5431,12 @@ El nombre NO puede contener los caracteres ":" o "|". Modo fantasma desactivado. + + Bloqueo de movimiento activado. + + + Bloqueo de movimiento desactivado. + Restablecer todas las configuraciones puede ser útil si estás experimentando problemas, aunque tendrás que repetir todas las personalizaciones que hayas podido hacer a la configuración por defecto. diff --git a/indra/newview/skins/default/xui/fr/floater_adjust_environment.xml b/indra/newview/skins/default/xui/fr/floater_adjust_environment.xml index ca5b0ec948..05992a8aa5 100644 --- a/indra/newview/skins/default/xui/fr/floater_adjust_environment.xml +++ b/indra/newview/skins/default/xui/fr/floater_adjust_environment.xml @@ -3,20 +3,70 @@ - - diff --git a/indra/newview/skins/vintage/xui/en/floater_about_land.xml b/indra/newview/skins/vintage/xui/en/floater_about_land.xml index 6edc6890d4..2a367ac6f8 100644 --- a/indra/newview/skins/vintage/xui/en/floater_about_land.xml +++ b/indra/newview/skins/vintage/xui/en/floater_about_land.xml @@ -29,14 +29,6 @@ name="Hour"> hr. - - [HOURS] hrs. - - - hr. - [MINUTES] min. diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index f35863e7cb..40358b285e 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -768,18 +768,6 @@ class WindowsManifest(ViewerManifest): self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'], dst="win_crash_logger.exe") - # This is still needed! The method to copy the Visual C++ Runtime files - # in Copy3rdPartyLibs is copying the wrong files for 64bit because Autobuild - # is a 32bit process and Windows will silently copy the 32bit versions from - # the SysWOW64 folder, even if explicitly trying to copy from System32! - if (self.address_size == 64): - with self.prefix(src=os.path.join(self.args['build'], os.pardir, os.pardir, 'indra', 'newview', 'installers', 'windows_x64'), dst="llplugin"): - self.path("msvcp120.dll") - self.path("msvcr120.dll") - with self.prefix(src=os.path.join(self.args['build'], os.pardir, os.pardir, 'indra', 'newview', 'installers', 'windows_x64')): - self.path("msvcp120.dll") - self.path("msvcr120.dll") - if not self.is_packaging_viewer(): self.package_file = "copied_deps"