diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp index fa98ee2ed4..8851c34826 100644 --- a/indra/llaudio/llaudioengine.cpp +++ b/indra/llaudio/llaudioengine.cpp @@ -660,7 +660,7 @@ bool LLAudioEngine::preloadSound(const LLUUID &uuid) LL_DEBUGS("AudioEngine")<<"( "< Protect against corrupted sounds. Just do a quick exit instead of trying to preload over and over again. - if( gAudiop->isCorruptSound( uuid ) ) + if (gAudiop && gAudiop->isCorruptSound(uuid)) return false; // @@ -1317,7 +1317,7 @@ std::map gSoundHistory; void LLAudioSource::logSoundPlay(const LLUUID& id, LLVector3d position, S32 type, const LLUUID& assetid, const LLUUID& ownerid, const LLUUID& sourceid, bool is_trigger, bool is_looped) { // Corrupt asset, do not bother - if( gAudiop->isCorruptSound( assetid ) ) + if (gAudiop && gAudiop->isCorruptSound(assetid)) return; // diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index 9c40acaa62..1977f509d0 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -1073,7 +1073,13 @@ bool LLInventoryItem::fromLLSD(const LLSD& sd, bool is_new) // TODO - figure out if this should be moved into the noclobber fields above mThumbnailUUID.setNull(); mFavorite = false; - mPermissions.init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null); + // [FIRE-36028] Fix OpenSim object permissions + //mPermissions.init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null); + if (!LLPermissions::getIsInOpenSim()) + { + mPermissions.init(LLUUID::null, LLUUID::null, LLUUID::null, LLUUID::null); + } + // // iterate as map to avoid making unnecessary temp copies of everything LLSD::map_const_iterator i, end; diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp index 03cd7771d4..c49bacf040 100644 --- a/indra/llinventory/llpermissions.cpp +++ b/indra/llinventory/llpermissions.cpp @@ -39,6 +39,8 @@ const LLPermissions LLPermissions::DEFAULT; +bool LLPermissions::sIsInOpenSim = false; // [FIRE-36028] Fix OpenSim object permissions + // No creator = created by system LLPermissions::LLPermissions() { diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h index 469eacc5ef..70b29cd312 100644 --- a/indra/llinventory/llpermissions.h +++ b/indra/llinventory/llpermissions.h @@ -103,6 +103,8 @@ private: // values. bool mIsGroupOwned; + static bool sIsInOpenSim; // [FIRE-36028] Fix OpenSim object permissions + // Correct for fair use - you can never take away the right to // move stuff you own, and you can never take away the right to // transfer something you cannot otherwise copy. @@ -288,6 +290,11 @@ public: inline bool allowOpenSimExportBy(const LLUUID& agent_id) const; // OpenSim export permission #endif + // [FIRE-36028] Fix OpenSim object permissions + static bool getIsInOpenSim() { return sIsInOpenSim; } + static void setupIsInOpenSim(bool is_in_open_sim) { sIsInOpenSim = is_in_open_sim; } + // + // // MISC METHODS and OPERATORS // diff --git a/indra/llui/llchatmentionhelper.cpp b/indra/llui/llchatmentionhelper.cpp index 5745389a58..d7cf60daef 100644 --- a/indra/llui/llchatmentionhelper.cpp +++ b/indra/llui/llchatmentionhelper.cpp @@ -39,6 +39,13 @@ bool LLChatMentionHelper::isActive(const LLUICtrl* ctrl) const bool LLChatMentionHelper::isCursorInNameMention(const LLWString& wtext, S32 cursor_pos, S32* mention_start_pos) const { + // Enable auto-completion of @ mentions + static LLUICachedControl useMentionAutoComplete("FSUseChatMentionAutoComplete", true); + if (!useMentionAutoComplete) + { + return false; + } + // if (cursor_pos <= 0 || cursor_pos > static_cast(wtext.size())) return false; diff --git a/indra/llui/llemojihelper.cpp b/indra/llui/llemojihelper.cpp index 6885660cfe..08ff3d4096 100644 --- a/indra/llui/llemojihelper.cpp +++ b/indra/llui/llemojihelper.cpp @@ -58,7 +58,7 @@ bool LLEmojiHelper::isActive(const LLUICtrl* ctrl_p) const bool LLEmojiHelper::isCursorInEmojiCode(const LLWString& wtext, S32 cursorPos, S32* pShortCodePos) { // FIRE-33735: Option to suppress emoji chooser window from automatically popping up while typing in chat bars - static LLUICachedControl FSEnableEmojiWindowPopupWhileTyping("FSEnableEmojiWindowPopupWhileTyping"); + static LLUICachedControl FSEnableEmojiWindowPopupWhileTyping("FSEnableEmojiWindowPopupWhileTyping", true); if (!FSEnableEmojiWindowPopupWhileTyping) { return false; diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index 0631cf481e..ecf732f85c 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -353,6 +353,7 @@ void LLWebRTCImpl::init() //updateDevices(); } }); + } void LLWebRTCImpl::terminate() diff --git a/indra/newview/poses/hand_presets/Flat.xml b/indra/newview/app_settings/poses/hand_presets/Flat.xml similarity index 100% rename from indra/newview/poses/hand_presets/Flat.xml rename to indra/newview/app_settings/poses/hand_presets/Flat.xml diff --git a/indra/newview/poses/hand_presets/Grip.xml b/indra/newview/app_settings/poses/hand_presets/Grip.xml similarity index 100% rename from indra/newview/poses/hand_presets/Grip.xml rename to indra/newview/app_settings/poses/hand_presets/Grip.xml diff --git a/indra/newview/poses/hand_presets/Horns.xml b/indra/newview/app_settings/poses/hand_presets/Horns.xml similarity index 100% rename from indra/newview/poses/hand_presets/Horns.xml rename to indra/newview/app_settings/poses/hand_presets/Horns.xml diff --git a/indra/newview/poses/hand_presets/Okay.xml b/indra/newview/app_settings/poses/hand_presets/Okay.xml similarity index 100% rename from indra/newview/poses/hand_presets/Okay.xml rename to indra/newview/app_settings/poses/hand_presets/Okay.xml diff --git a/indra/newview/poses/hand_presets/Pointing.xml b/indra/newview/app_settings/poses/hand_presets/Pointing.xml similarity index 100% rename from indra/newview/poses/hand_presets/Pointing.xml rename to indra/newview/app_settings/poses/hand_presets/Pointing.xml diff --git a/indra/newview/poses/hand_presets/Relaxed.xml b/indra/newview/app_settings/poses/hand_presets/Relaxed.xml similarity index 100% rename from indra/newview/poses/hand_presets/Relaxed.xml rename to indra/newview/app_settings/poses/hand_presets/Relaxed.xml diff --git a/indra/newview/poses/hand_presets/Thumbs_Up.xml b/indra/newview/app_settings/poses/hand_presets/Thumbs_Up.xml similarity index 100% rename from indra/newview/poses/hand_presets/Thumbs_Up.xml rename to indra/newview/app_settings/poses/hand_presets/Thumbs_Up.xml diff --git a/indra/newview/poses/hand_presets/Tight_Grip.xml b/indra/newview/app_settings/poses/hand_presets/Tight_Grip.xml similarity index 100% rename from indra/newview/poses/hand_presets/Tight_Grip.xml rename to indra/newview/app_settings/poses/hand_presets/Tight_Grip.xml diff --git a/indra/newview/poses/hand_presets/Two_Finger_Salute.xml b/indra/newview/app_settings/poses/hand_presets/Two_Finger_Salute.xml similarity index 99% rename from indra/newview/poses/hand_presets/Two_Finger_Salute.xml rename to indra/newview/app_settings/poses/hand_presets/Two_Finger_Salute.xml index 4648f19c9b..7a750ec015 100644 --- a/indra/newview/poses/hand_presets/Two_Finger_Salute.xml +++ b/indra/newview/app_settings/poses/hand_presets/Two_Finger_Salute.xml @@ -758,7 +758,7 @@ version value - 5 + 6 diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 0d411352c2..2140d0e4eb 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -26480,6 +26480,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 + FSUseChatMentionAutoComplete + + Comment + Enable auto-completion when typing @ mentions in chat. + Persist + 1 + Type + Boolean + Value + 1 + FSUseBWEmojis Comment diff --git a/indra/newview/fsfloaterposer.cpp b/indra/newview/fsfloaterposer.cpp index 02202e34ee..cd9934dc41 100644 --- a/indra/newview/fsfloaterposer.cpp +++ b/indra/newview/fsfloaterposer.cpp @@ -462,28 +462,32 @@ void FSFloaterPoser::createUserPoseDirectoryIfNeeded() gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY); std::string userHandPresetsPath = userPath + gDirUtilp->getDirDelimiter() + std::string(POSE_PRESETS_HANDS_SUBDIRECTORY); - if (gDirUtilp->fileExists(userHandPresetsPath)) - return; try { - if (!gDirUtilp->fileExists(userPath)) - { - LL_WARNS("Poser") << "Couldn't find folder: " << userPath << " - creating one." << LL_ENDL; - LLFile::mkdir(userPath); - } - if (!gDirUtilp->fileExists(userHandPresetsPath)) { - LL_WARNS("Poser") << "Couldn't find folder: " << userHandPresetsPath << " - creating one." << LL_ENDL; - LLFile::mkdir(userHandPresetsPath); + if (!gDirUtilp->fileExists(userPath)) + { + LL_WARNS("Poser") << "Couldn't find folder: " << userPath << " - creating one." << LL_ENDL; + LLFile::mkdir(userPath); + } + + if (!gDirUtilp->fileExists(userHandPresetsPath)) + { + LL_WARNS("Poser") << "Couldn't find folder: " << userHandPresetsPath << " - creating one." << LL_ENDL; + LLFile::mkdir(userHandPresetsPath); + } } std::string sourcePresetPath = - gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, POSE_SAVE_SUBDIRECTORY, std::string(POSE_PRESETS_HANDS_SUBDIRECTORY)); + gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, POSE_SAVE_SUBDIRECTORY, std::string(POSE_PRESETS_HANDS_SUBDIRECTORY)); if (!gDirUtilp->fileExists(sourcePresetPath)) + { + LL_WARNS("Poser") << "Can not copy poser presets because failed to find path: " << sourcePresetPath << LL_ENDL; return; + } auto posesToCopy = gDirUtilp->getFilesInDir(sourcePresetPath); for (const auto& pose : posesToCopy) @@ -491,13 +495,24 @@ void FSFloaterPoser::createUserPoseDirectoryIfNeeded() std::string source = sourcePresetPath + gDirUtilp->getDirDelimiter() + pose; std::string destination = userHandPresetsPath + gDirUtilp->getDirDelimiter() + pose; + S32 sourceVersion = tryGetPoseVersion(source); + S32 destinationVersion = tryGetPoseVersion(destination); + if (destinationVersion >= sourceVersion) + continue; + + if (gDirUtilp->fileExists(destination)) + { + LL_WARNS("Poser") << "Removing pose file " << destination << " to replace with updated version " << LL_ENDL; + LLFile::remove(destination); + } + if (!LLFile::copy(source, destination)) LL_WARNS("Poser") << "Failed to copy " << source << " to " << destination << LL_ENDL; } } catch (const std::exception& e) { - LL_WARNS("Posing") << "Exception caught trying to create: " << userPath << e.what() << LL_ENDL; + LL_WARNS("Posing") << "Exception caught trying to create/update poses: " << e.what() << LL_ENDL; } } @@ -947,6 +962,51 @@ void FSFloaterPoser::onClickLoadRightHandPose() onClickLoadHandPose(true); } +S32 FSFloaterPoser::tryGetPoseVersion(std::string pathToPoseFile) +{ + S32 version = -1; + if (pathToPoseFile.empty()) + return version; + + if (!gDirUtilp->fileExists(pathToPoseFile)) + return version; + + try + { + LLSD pose; + llifstream infile; + + infile.open(pathToPoseFile); + if (!infile.is_open()) + return version; + + while (!infile.eof()) + { + S32 lineCount = LLSDSerialize::fromXML(pose, infile); + if (lineCount == LLSDParser::PARSE_FAILURE) + { + LL_WARNS("Posing") << "Failed to parse pose file: " << pathToPoseFile << LL_ENDL; + return version; + } + + for (LLSD::map_const_iterator itr = pose.beginMap(); itr != pose.endMap(); ++itr) + { + std::string const& name = itr->first; + LLSD const& control_map = itr->second; + + if (name == "version") + return (S32)control_map["value"].asInteger(); + } + } + } + catch (const std::exception& e) + { + LL_WARNS("Posing") << "Threw an exception trying read the pose file: " << pathToPoseFile << " exception: " << e.what() << LL_ENDL; + } + + return version; +} + void FSFloaterPoser::onClickLoadHandPose(bool isRightHand) { LLScrollListItem* item = mHandPresetsScrollList->getFirstSelected(); diff --git a/indra/newview/fsfloaterposer.h b/indra/newview/fsfloaterposer.h index a88f690a4b..8d289f53f7 100644 --- a/indra/newview/fsfloaterposer.h +++ b/indra/newview/fsfloaterposer.h @@ -231,6 +231,7 @@ public: void onPoseMenuAction(const LLSD& param); bool loadPoseFromXml(LLVOAvatar* avatar, const std::string& poseFileName, E_LoadPoseMethods loadMethod); bool poseFileStartsFromTeePose(const std::string& poseFileName); + S32 tryGetPoseVersion(std::string pathToPoseFile); void setPoseSaveFileTextBoxToUiSelectedAvatarSaveFileName(); void setUiSelectedAvatarSaveFileName(const std::string& saveFileName); void timedReload(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index caf7bb3214..81c6d7da94 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -931,7 +931,9 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, if (!isItemMovable() || !canMenuCut()) { disabled_items.push_back(std::string("Cut")); - disabled_items.push_back(std::string("New folder from selected")); + // [FIRE-35996] Restore allowing creating folder from selected on recent and favorites panels + //disabled_items.push_back(std::string("New folder from selected")); + // } } else @@ -984,7 +986,9 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, if (!isItemMovable() || !canMenuCut()) { disabled_items.push_back(std::string("Cut")); - disabled_items.push_back(std::string("New folder from selected")); + // [FIRE-35996] Restore allowing creating folder from selected on recent and favorites panels + //disabled_items.push_back(std::string("New folder from selected")); + // } if (canListOnMarketplace() && !isMarketplaceListingsFolder() && !isInboxFolder()) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index cabbdbdaad..1df85c25b0 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -4928,6 +4928,10 @@ bool process_login_success_response(U32 &first_sim_size_x, U32 &first_sim_size_y // [FIRE-34775] Use PST/PDT when logged into OpenSim LLStringOps::setupUsingPacificTime(!LLGridManager::getInstance()->isInSecondLife()); // + // [FIRE-36028] Fix OpenSim object permissions + LLPermissions::setupIsInOpenSim(!LLGridManager::getInstance()->isInSecondLife()); + // + } // set up the voice configuration. Ultimately, we should pass this up as part of each voice diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index d2204c7513..425eb2d020 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4897,7 +4897,7 @@ void process_preload_sound(LLMessageSystem *msg, void **user_data) msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id); // Protect against corrupted sounds - if (gAudiop->isCorruptSound(sound_id)) + if (gAudiop && gAudiop->isCorruptSound(sound_id)) return; // @@ -4952,7 +4952,7 @@ void process_attached_sound(LLMessageSystem *msg, void **user_data) msg->getUUIDFast(_PREHASH_DataBlock, _PREHASH_OwnerID, owner_id); // Protect against corrupted sounds - if (gAudiop->isCorruptSound(sound_id)) + if (gAudiop && gAudiop->isCorruptSound(sound_id)) return; // diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index 0d58c642ba..4f0f9266c8 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -281,6 +281,7 @@ void LLWebRTCVoiceClient::initWebRTC() llwebrtc::init(this); mWebRTCDeviceInterface = llwebrtc::getDeviceInterface(); + mWebRTCDeviceInterface->unsetDevicesObserver(this); // initWebRTC() can get multiple times - make sure to unset previous observers before re-adding mWebRTCDeviceInterface->setDevicesObserver(this); mMainQueue = LL::WorkQueue::getInstance("mainloop"); refreshDeviceLists(); diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml index b2031ed5eb..557cc8db5d 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -148,7 +148,8 @@ - + + diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index 27137d2c16..2e88b99ba4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -916,6 +916,14 @@ top_pad="1" height="16" width="400" /> + - [https://accounts.secondlife.com/billing_information/ 支払い情報]|[https://www.secondlife.com/my/lindex/buy.php L$の購入] + [https://accounts.secondlife.com/billing_information/?lang=ja-JP 支払い情報]|[https://www.secondlife.com/my/lindex/buy.php?lang=ja-JP L$の購入] 金額を再入力して、最新の為替レートを確認してください。 diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml index b26fef3e1d..89334964e0 100755 --- a/indra/newview/skins/default/xui/ja/menu_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml @@ -17,7 +17,7 @@ - + diff --git a/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml index 3600af0f4a..839c722c15 100755 --- a/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml @@ -12,6 +12,6 @@ - + diff --git a/indra/newview/skins/default/xui/ja/menu_im_conversation.xml b/indra/newview/skins/default/xui/ja/menu_im_conversation.xml index e6aff37ab1..61eeee49f6 100755 --- a/indra/newview/skins/default/xui/ja/menu_im_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_im_conversation.xml @@ -9,7 +9,7 @@ - + diff --git a/indra/newview/skins/default/xui/ja/menu_profile_other.xml b/indra/newview/skins/default/xui/ja/menu_profile_other.xml index 30f8bae3ae..0d17d4cad7 100644 --- a/indra/newview/skins/default/xui/ja/menu_profile_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_profile_other.xml @@ -11,7 +11,7 @@ - + diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml index 2a97b25e66..5d5209c0fc 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml @@ -147,7 +147,8 @@ - + + diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml index 45748b2e4d..ce687a10f8 100644 --- a/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml +++ b/indra/newview/skins/default/xui/ja/panel_preferences_firestorm.xml @@ -82,7 +82,7 @@