diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index 7804759c13..32d044e1bd 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -1070,6 +1070,7 @@ std::optional llstring_getoptenv(const std::string& key) long LLStringOps::sPacificTimeOffset = 0; long LLStringOps::sLocalTimeOffset = 0; bool LLStringOps::sPacificDaylightTime = 0; +bool LLStringOps::sUsingPacificTime = false; // [FIRE-34775] Use PST/PDT when logged into OpenSim std::map LLStringOps::datetimeToCodes; std::vector LLStringOps::sWeekDayList; @@ -1628,12 +1629,21 @@ bool LLStringUtil::formatDatetime(std::string& replacement, std::string token, } else { -#if 0 +// [FIRE-34775] Use PST/PDT when logged into OpenSim +#ifdef OPENSIM // EXT-1565 : Zai Lynch, James Linden : 15/Oct/09 // [BSI] Feedback: Viewer clock mentions SLT, but would prefer it to show PST/PDT // "slt" = Second Life Time, which is deprecated. // If not utc or user local time, fallback to Pacific time - replacement = LLStringOps::getPacificDaylightTime() ? "PDT" : "PST"; + if (LLStringOps::getUsingPacificTime()) + { + replacement = LLStringOps::getPacificDaylightTime() ? "PDT" : "PST"; + } + else + { + replacement = "SLT"; + } +// #else // SL-20370 : Steeltoe Linden : 29/Sep/23 // Change "PDT" to "SLT" on menu bar diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 07615aa027..9375534f3c 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -153,6 +153,7 @@ private: static long sPacificTimeOffset; static long sLocalTimeOffset; static bool sPacificDaylightTime; + static bool sUsingPacificTime; // [FIRE-34775] Use PST/PDT when logged into OpenSim static std::map datetimeToCodes; @@ -204,6 +205,9 @@ public: static S32 collate(const llwchar* a, const llwchar* b); static void setupDatetimeInfo(bool pacific_daylight_time); + // [FIRE-34775] Use PST/PDT when logged into OpenSim + static void setupUsingPacificTime(bool use_pacific_time) { sUsingPacificTime = use_pacific_time; } + // static void setupWeekDaysNames(const std::string& data); static void setupWeekDaysShortNames(const std::string& data); @@ -217,6 +221,9 @@ public: // Is the Pacific time zone (aka server time zone) // currently in daylight savings time? static bool getPacificDaylightTime(void) { return sPacificDaylightTime;} + // [FIRE-34775] Use PST/PDT when logged into OpenSim + static bool getUsingPacificTime() { return sUsingPacificTime; } + // static std::string getDatetimeCode (std::string key); diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 5c3b7ded7a..63c4ea8ecb 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2368,7 +2368,7 @@ bool LLVolume::unpackVolumeFacesInternal(const LLSD& mdl) const LLSD::Binary& pos = mdl[i]["Position"].asBinary(); const LLSD::Binary& norm = mdl[i]["Normal"].asBinary(); - const LLSD::Binary& tangent = mdl[i]["Tangent"].asBinary(); + // const LLSD::Binary& tangent = mdl[i]["Tangent"].asBinary(); // more set but unused const LLSD::Binary& tc = mdl[i]["TexCoord0"].asBinary(); const LLSD::Binary& idx = mdl[i]["TriangleList"].asBinary(); diff --git a/indra/llrender/llcubemaparray.cpp b/indra/llrender/llcubemaparray.cpp index 998b57217d..6799010789 100644 --- a/indra/llrender/llcubemaparray.cpp +++ b/indra/llrender/llcubemaparray.cpp @@ -123,7 +123,7 @@ LLCubeMapArray::LLCubeMapArray(LLCubeMapArray& lhs, U32 width, U32 count) : mTex GLint components = GL_RGB; if (mImage->getComponents() == 4) components = GL_RGBA; - GLint format = GL_RGB; + // GLint format = GL_RGB; // unused // Handle different resolutions by scaling the image LLPointer src_image = new LLImageRaw(lhs.mWidth, lhs.mWidth, lhs.mImage->getComponents()); diff --git a/indra/llui/llfiltereditor.cpp b/indra/llui/llfiltereditor.cpp index f7b3a1e9a6..1ce8a6d9d0 100644 --- a/indra/llui/llfiltereditor.cpp +++ b/indra/llui/llfiltereditor.cpp @@ -44,3 +44,11 @@ void LLFilterEditor::handleKeystroke() // Commit on every keystroke. onCommit(); } + +// Allow any UICtrl to override the transparency with a callback +void LLFilterEditor::setTransparencyOverrideCallback(boost::function cb) +{ + // Simply setting it on the LLFilterEditor object doesn't work + mSearchEditor->setTransparencyOverrideCallback(cb); +} +// diff --git a/indra/llui/llfiltereditor.h b/indra/llui/llfiltereditor.h index 685219c9f6..76a633eb45 100644 --- a/indra/llui/llfiltereditor.h +++ b/indra/llui/llfiltereditor.h @@ -45,6 +45,10 @@ public: {}; virtual ~LLFilterEditor() {} + // Allow any UICtrl to override the transparency with a callback + void setTransparencyOverrideCallback(boost::function cb) override; + // + protected: LLFilterEditor(const Params&); friend class LLUICtrlFactory; diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h index c971c70314..812063feda 100644 --- a/indra/llui/llfolderviewmodel.h +++ b/indra/llui/llfolderviewmodel.h @@ -378,7 +378,7 @@ protected: virtual bool hasParent() override { return mParent != NULL; } // - virtual LLFolderViewModelItem* getParent() const { return mParent; } + virtual LLFolderViewModelItem* getParent() const override { return mParent; } S32 mSortVersion; bool mPassedFilter; diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index e23acd85b9..5f77c3346f 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -1086,6 +1086,13 @@ F32 LLUICtrl::getCurrentTransparency() } + // Allow any UICtrl to override the transparency with a callback + if (mTransparencyOverrideCallback) + { + return mTransparencyOverrideCallback(mTransparencyType, alpha); + } + // + return alpha; } diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h index 4be0a23261..13ab720ef4 100644 --- a/indra/llui/lluictrl.h +++ b/indra/llui/lluictrl.h @@ -238,6 +238,11 @@ public: void setTransparencyType(ETypeTransparency type); ETypeTransparency getTransparencyType() const {return mTransparencyType;} + // Allow any UICtrl to override the transparency with a callback + boost::function mTransparencyOverrideCallback; + virtual void setTransparencyOverrideCallback(boost::function cb) { mTransparencyOverrideCallback = cb; } + // + bool focusNextItem(bool text_entry_only); bool focusPrevItem(bool text_entry_only); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 63a9785521..aefb6d32dc 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -23992,6 +23992,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSRestoreOpenIMs + + Comment + Restore open IM windows from the previous session on startup. + Persist + 1 + Type + Boolean + Value + 0 + FSUseBuiltInHistory Comment @@ -26949,5 +26960,38 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSIMOpacity + + Comment + Opacity of the IM floater + Persist + 1 + Type + F32 + Value + 1.0 + + FSImActiveOpacityOverride + + Comment + When enabled, uses the Active Opacity value when IM window is focused + Persist + 1 + Type + Boolean + Value + 0 + + FSDisableNeighbourRegionConnections + + Comment + Do not connect to neighbouring regions, only to the current region (limits region crossing) - experimental + Persist + 1 + Type + Boolean + Value + 0 + diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index ce0a20c443..4193a4edca 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -876,6 +876,18 @@ Value 0 + FSLastOpenIMs + + Comment + List of IM session IDs that were open when the viewer was last closed + Persist + 1 + Type + LLSD + Value + + + FSKeywordCaseSensitive Comment diff --git a/indra/newview/fsfloatercontacts.cpp b/indra/newview/fsfloatercontacts.cpp index e3f08b2ac3..03c3cd8e95 100644 --- a/indra/newview/fsfloatercontacts.cpp +++ b/indra/newview/fsfloatercontacts.cpp @@ -131,6 +131,9 @@ bool FSFloaterContacts::postBuild() mFriendsCountTb->setTextArg("COUNT", llformat("%d", mFriendsList->getItemCount())); mFriendFilter = mFriendsTab->getChild("friend_filter_input"); mFriendFilter->setCommitCallback(boost::bind(&FSFloaterContacts::onFriendFilterEdit, this, _2)); + // [FIRE-35804] Allow the IM floater to have separate transparency + mFriendFilter->setTransparencyOverrideCallback(boost::bind(&FSFloaterContacts::onGetFilterOpacityCallback, this, _1, _2)); + // mGroupsTab = getChild(GROUP_TAB_NAME); mGroupList = mGroupsTab->getChild("group_list"); @@ -163,6 +166,9 @@ bool FSFloaterContacts::postBuild() mGroupssCountTb = mGroupsTab->getChild("groupcount"); mGroupFilter = mGroupsTab->getChild("group_filter_input"); mGroupFilter->setCommitCallback(boost::bind(&FSFloaterContacts::onGroupFilterEdit, this, _2)); + // [FIRE-35804] Allow the IM floater to have separate transparency + mGroupFilter->setTransparencyOverrideCallback(boost::bind(&FSFloaterContacts::onGetFilterOpacityCallback, this, _1, _2)); + // mRlvBehaviorCallbackConnection = gRlvHandler.setBehaviourCallback(boost::bind(&FSFloaterContacts::updateRlvRestrictions, this, _1)); @@ -1345,4 +1351,19 @@ void FSFloaterContacts::onGroupFilterEdit(const std::string& search_string) { mGroupList->setNameFilter(search_string); } + +// [FIRE-35804] Allow the IM floater to have separate transparency +// This is specifically for making the filter editors such as mFriendFilter and mGroupFilter always active opacity when the IM floater is focused +// Otherwise if they aren't active, it will use either the IM opacity, or inactive opacity, whatever is smaller +F32 FSFloaterContacts::onGetFilterOpacityCallback(ETypeTransparency type, F32 alpha) +{ + static LLCachedControl im_opacity(gSavedSettings, "FSIMOpacity", 1.0f); + if (type != TT_ACTIVE) + { + return llmin(im_opacity, alpha); + } + + return alpha; +} +// // EOF diff --git a/indra/newview/fsfloatercontacts.h b/indra/newview/fsfloatercontacts.h index 660ed8905b..5c3061eff3 100644 --- a/indra/newview/fsfloatercontacts.h +++ b/indra/newview/fsfloatercontacts.h @@ -70,6 +70,10 @@ public: void onDisplayNameChanged(); void resetFriendFilter(); + // [FIRE-35804] Allow the IM floater to have separate transparency + F32 onGetFilterOpacityCallback(ETypeTransparency type, F32 alpha); + // + private: typedef std::vector listitem_vec_t; diff --git a/indra/newview/fsfloaterim.cpp b/indra/newview/fsfloaterim.cpp index ef83dd0f4f..2521526440 100644 --- a/indra/newview/fsfloaterim.cpp +++ b/indra/newview/fsfloaterim.cpp @@ -1010,6 +1010,9 @@ bool FSFloaterIM::postBuild() mInputEditor->setFont(LLViewerChat::getChatFont()); mInputEditor->enableSingleLineMode(gSavedSettings.getBOOL("FSUseSingleLineChatEntry")); mInputEditor->setCommitCallback(boost::bind(&FSFloaterIM::sendMsgFromInputEditor, this, CHAT_TYPE_NORMAL)); + // [FIRE-35804] Allow the IM floater to have separate transparency + mInputEditor->setTransparencyOverrideCallback(boost::bind(&FSFloaterIM::onGetChatEditorOpacityCallback, this, _1, _2)); + // mEmojiRecentPanelToggleBtn = getChild("emoji_recent_panel_toggle_btn"); mEmojiRecentPanelToggleBtn->setClickedCallback([this](LLUICtrl*, const LLSD&) { onEmojiRecentPanelToggleBtnClicked(); }); @@ -2650,3 +2653,18 @@ uuid_vec_t FSFloaterIM::getSessionParticipants() const return mControlPanel->getParticipants(); } + +// [FIRE-35804] Allow the IM floater to have separate transparency +// This is specifically for making the text editors such as chat_editor always active opacity when the IM floater is focused +// Otherwise if they aren't active, it will use either the IM opacity, or inactive opacity, whatever is smaller +F32 FSFloaterIM::onGetChatEditorOpacityCallback(ETypeTransparency type, F32 alpha) +{ + static LLCachedControl im_opacity(gSavedSettings, "FSIMOpacity", 1.0f); + if (type != TT_ACTIVE) + { + return llmin(im_opacity, alpha); + } + + return alpha; +} +// diff --git a/indra/newview/fsfloaterim.h b/indra/newview/fsfloaterim.h index 0b5d65bf7e..3d20957063 100644 --- a/indra/newview/fsfloaterim.h +++ b/indra/newview/fsfloaterim.h @@ -164,6 +164,10 @@ public: uuid_vec_t getSessionParticipants() const; + // [FIRE-35804] Allow the IM floater to have separate transparency + F32 onGetChatEditorOpacityCallback(ETypeTransparency type, F32 alpha); + // + protected: /* virtual */ void onClickCloseBtn(bool app_quitting = false); diff --git a/indra/newview/fsfloaterimcontainer.cpp b/indra/newview/fsfloaterimcontainer.cpp index a4db0dc21a..2ad367287e 100644 --- a/indra/newview/fsfloaterimcontainer.cpp +++ b/indra/newview/fsfloaterimcontainer.cpp @@ -42,6 +42,11 @@ #include "llurlregistry.h" #include "llvoiceclient.h" +// Restore open IMs from previous session +#include "llconversationlog.h" +#include "llimview.h" +// + constexpr F32 VOICE_STATUS_UPDATE_INTERVAL = 1.0f; // @@ -173,6 +178,7 @@ void FSFloaterIMContainer::onClose(bool app_quitting) { if (app_quitting) { + saveOpenIMs(); // Save open IM sessions before closing for (S32 i = 0; i < mTabContainer->getTabCount(); ++i) { FSFloaterIM* floater = dynamic_cast(mTabContainer->getPanelByIndex(i)); @@ -373,6 +379,22 @@ FSFloaterIMContainer* FSFloaterIMContainer::getInstance() return LLFloaterReg::getTypedInstance("fs_im_container"); } +// [FIRE-35804] Allow the IM floater to have separate transparency +F32 FSFloaterIMContainer::getCurrentTransparency() +{ + static LLCachedControl im_opacity(gSavedSettings, "FSIMOpacity", 1.0f); + static LLCachedControl im_active_opacity_override(gSavedSettings, "FSImActiveOpacityOverride", false); + + F32 floater_opacity = LLUICtrl::getCurrentTransparency(); + if (im_active_opacity_override && getTransparencyType() == TT_ACTIVE) + { + return floater_opacity; + } + + return llmin(im_opacity(), floater_opacity); +} +// + void FSFloaterIMContainer::setVisible(bool b) { LLMultiFloater::setVisible(b); @@ -600,4 +622,74 @@ void FSFloaterIMContainer::startFlashingTab(LLFloater* floater, const std::strin } LLMultiFloater::setFloaterFlashing(floater, true, is_alt_flashing); } + +// Restore open IMs from previous session +void FSFloaterIMContainer::saveOpenIMs() +{ + if (!gSavedSettings.getBOOL("FSRestoreOpenIMs")) + { + gSavedPerAccountSettings.setLLSD("FSLastOpenIMs", LLSD::emptyArray()); + return; + } + + LLSD openIMs = LLSD::emptyArray(); + for (S32 i = 0; i < mTabContainer->getTabCount(); ++i) + { + FSFloaterIM* floater = dynamic_cast(mTabContainer->getPanelByIndex(i)); + if (floater) + { + LLUUID session_id = floater->getKey(); + if (session_id.notNull()) + { + LLIMModel::LLIMSession* session = LLIMModel::getInstance()->findIMSession(session_id); + if (session && session->mSessionType == LLIMModel::LLIMSession::P2P_SESSION) + { + LLSD session_data = LLSD::emptyMap(); + session_data["other_participant_id"] = session->mOtherParticipantID; + session_data["session_name"] = session->mName; + openIMs.append(session_data); + } + } + } + } + + gSavedPerAccountSettings.setLLSD("FSLastOpenIMs", openIMs); +} + +void FSFloaterIMContainer::restoreOpenIMs() +{ + LLSD openIMs = gSavedPerAccountSettings.getLLSD("FSLastOpenIMs"); + if (!openIMs.isArray() || openIMs.size() == 0) + { + return; + } + + for (LLSD::array_const_iterator it = openIMs.beginArray(); it != openIMs.endArray(); ++it) + { + LLSD session_data = *it; + if (session_data.isMap()) + { + LLUUID other_participant_id = session_data["other_participant_id"].asUUID(); + std::string session_name = session_data["session_name"].asString(); + if (other_participant_id.notNull()) + { + LLUUID new_session_id; + new_session_id = LLIMMgr::getInstance()->addSession(session_name, IM_NOTHING_SPECIAL, other_participant_id); + if (new_session_id.notNull()) + { + FSFloaterIM* im_floater = FSFloaterIM::show(new_session_id); + if (im_floater) + { + if (im_floater->getHost() != this) + { + addFloater(im_floater, false); + } + } + } + } + } + } +} +// + // EOF diff --git a/indra/newview/fsfloaterimcontainer.h b/indra/newview/fsfloaterimcontainer.h index 50b9b36d1f..21b790d26f 100644 --- a/indra/newview/fsfloaterimcontainer.h +++ b/indra/newview/fsfloaterimcontainer.h @@ -41,17 +41,16 @@ public: FSFloaterIMContainer(const LLSD& seed); virtual ~FSFloaterIMContainer(); - /*virtual*/ bool postBuild(); - /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ void onClose(bool app_quitting); + bool postBuild() override; + void onOpen(const LLSD& key) override; + void onClose(bool app_quitting) override; void onCloseFloater(LLUUID& id); - /*virtual*/ void draw(); - - /*virtual*/ void addFloater(LLFloater* floaterp, - bool select_added_floater, - LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END); + void draw() override; + void addFloater(LLFloater* floaterp, + bool select_added_floater, + LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END) override; // [SL:KB] - Patch: Chat-NearbyChatBar | Checked: 2011-12-11 (Catznip-3.2.0d) | Added: Catznip-3.2.0d - /*virtual*/ void removeFloater(LLFloater* floaterp); + void removeFloater(LLFloater* floaterp) override; // [/SL:KB] bool hasFloater(LLFloater* floaterp); @@ -60,26 +59,33 @@ public: static FSFloaterIMContainer* findInstance(); static FSFloaterIMContainer* getInstance(); - virtual void setVisible(bool b); - /*virtual*/ void setMinimized(bool b); + F32 getCurrentTransparency() override; - void onNewMessageReceived(const LLSD& msg); // public so nearbychat can call it directly. TODO: handle via callback. -AO + void setVisible(bool b) override; + void setMinimized(bool b) override; - virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, bool has_offline_msg); - virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) {}; - virtual void sessionVoiceOrIMStarted(const LLUUID& session_id) {}; - virtual void sessionRemoved(const LLUUID& session_id); - virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id); + void onNewMessageReceived(const LLSD& msg); + + void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, bool has_offline_msg) override; + void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) override {}; + void sessionVoiceOrIMStarted(const LLUUID& session_id) override {}; + void sessionRemoved(const LLUUID& session_id) override; + void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id) override; static void reloadEmptyFloaters(); void initTabs(); void addFlashingSession(const LLUUID& session_id); - void tabOpen(LLFloater* opened_floater, bool from_click); + void tabOpen(LLFloater* opened_floater, bool from_click) override; void startFlashingTab(LLFloater* floater, const std::string& message); + // Restore open IMs from previous session + void saveOpenIMs(); + void restoreOpenIMs(); + // + private: enum eVoiceState { diff --git a/indra/newview/fsfloaternearbychat.cpp b/indra/newview/fsfloaternearbychat.cpp index 80e58347e8..51e1d31fad 100644 --- a/indra/newview/fsfloaternearbychat.cpp +++ b/indra/newview/fsfloaternearbychat.cpp @@ -148,6 +148,9 @@ bool FSFloaterNearbyChat::postBuild() mInputEditor->setFont(LLViewerChat::getChatFont()); mInputEditor->setLabel(getString("chatbox_label")); mInputEditor->enableSingleLineMode(gSavedSettings.getBOOL("FSUseSingleLineChatEntry")); + // [FIRE-35804] Allow the IM floater to have separate transparency + mInputEditor->setTransparencyOverrideCallback(boost::bind(&FSFloaterNearbyChat::onGetChatBoxOpacityCallback, this, _1, _2)); + // mChatLayoutPanel = getChild("chat_layout_panel"); mInputPanels = getChild("input_panels"); @@ -1107,3 +1110,18 @@ uuid_vec_t FSFloaterNearbyChat::getSessionParticipants() const return avatarIds; } + +// [FIRE-35804] Allow the IM floater to have separate transparency +// This is specifically for making the text editors such as chat_editor always active opacity when the IM floater is focused +// Otherwise if they aren't active, it will use either the IM opacity, or inactive opacity, whatever is smaller +F32 FSFloaterNearbyChat::onGetChatBoxOpacityCallback(ETypeTransparency type, F32 alpha) +{ + static LLCachedControl im_opacity(gSavedSettings, "FSIMOpacity", 1.0f); + if (type != TT_ACTIVE) + { + return llmin(im_opacity, alpha); + } + + return alpha; +} +// diff --git a/indra/newview/fsfloaternearbychat.h b/indra/newview/fsfloaternearbychat.h index 37641a4be3..ee485e5498 100644 --- a/indra/newview/fsfloaternearbychat.h +++ b/indra/newview/fsfloaternearbychat.h @@ -104,6 +104,10 @@ public: uuid_vec_t getSessionParticipants() const; + // [FIRE-35804] Allow the IM floater to have separate transparency + F32 onGetChatBoxOpacityCallback(ETypeTransparency type, F32 alpha); + // + protected: void onChatBoxKeystroke(); void onChatBoxFocusLost(); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d2bb1325ce..7280c79ee5 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -5322,7 +5322,7 @@ bool wear_category(const LLSD& query_map, bool append) { if (LLViewerInventoryCategory* cat = gInventory.getCategory(folder_uuid)) { - if (bool is_library = gInventory.isObjectDescendentOf(folder_uuid, gInventory.getRootFolderID())) + if (gInventory.isObjectDescendentOf(folder_uuid, gInventory.getRootFolderID())) // set and unused { LLPointer new_category = new LLInventoryCategory(folder_uuid, LLUUID::null, LLFolderType::FT_CLOTHING, "Quick Appearance"); LLAppearanceMgr::getInstance()->wearInventoryCategory(new_category, true, append); diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp index 1bcf748cfa..4a574b0b13 100644 --- a/indra/newview/lldrawpoolwater.cpp +++ b/indra/newview/lldrawpoolwater.cpp @@ -165,8 +165,8 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass) //bool has_normal_mips = gSavedSettings.getBOOL("RenderWaterMipNormal"); bool has_normal_mips = mRenderWaterMipNormal; bool underwater = LLViewerCamera::getInstance()->cameraUnderWater(); - LLColor4 fog_color = LLColor4(pwater->getWaterFogColor(), 0.f); - LLColor3 fog_color_linear = linearColor3(fog_color); + // LLColor4 fog_color = LLColor4(pwater->getWaterFogColor(), 0.f); // set but unused + // LLColor3 fog_color_linear = linearColor3(fog_color); // set but unused if (sun_up) { @@ -242,11 +242,12 @@ void LLDrawPoolWater::renderPostDeferred(S32 pass) F32 fog_density = pwater->getModifiedWaterFogDensity(underwater); shader->bindTexture(LLShaderMgr::WATER_SCREENTEX, &gPipeline.mWaterDis); - - if (mShaderLevel == 1) - { - fog_color.mV[VALPHA] = (F32)(log(fog_density) / log(2)); - } + // set but unused "fog_color" + // if (mShaderLevel == 1) + // { + // fog_color.mV[VALPHA] = (F32)(log(fog_density) / log(2)); + // } + // F32 water_height = environment.getWaterHeight(); F32 camera_height = LLViewerCamera::getInstance()->getOrigin().mV[2]; diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 7e16312678..f8869c4952 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -608,7 +608,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color) // on faces with GLTF textures we use a spectal vertex buffer with other transforms if (const LLTextureEntry* te = getTextureEntry()) { - if (LLGLTFMaterial* gltf_mat = te->getGLTFRenderMaterial()) + if (te->getGLTFRenderMaterial()) { vertex_buffer = mVertexBufferGLTF.get(); } diff --git a/indra/newview/llfloatergltfasseteditor.cpp b/indra/newview/llfloatergltfasseteditor.cpp index a127f5d43e..229317a3c9 100644 --- a/indra/newview/llfloatergltfasseteditor.cpp +++ b/indra/newview/llfloatergltfasseteditor.cpp @@ -299,7 +299,7 @@ void LLFloaterGLTFAssetEditor::loadFromSelection() setTitle(node->mName); } - LLUIColor item_color = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); + // LLUIColor item_color = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); // set but unused for (S32 i = 0; i < mAsset->mScenes.size(); i++) { LL::GLTF::Scene& scene = mAsset->mScenes[i]; diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp index c4d4eae860..92e79968a0 100644 --- a/indra/newview/llfloaterimagepreview.cpp +++ b/indra/newview/llfloaterimagepreview.cpp @@ -459,7 +459,7 @@ void LLFloaterImagePreview::onBtnOK() void LLFloaterImagePreview::draw() { LLFloater::draw(); - LLRect r = getRect(); + // LLRect r = getRect(); set but unused if (mRawImagep.notNull()) { diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index b7ce05c906..8ae86dfe98 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1979,7 +1979,7 @@ void LLFloaterPreference::changeExternalEditorPath(const std::vector another new complaint from clang char executable_buf[max_file_length]; if (CFStringGetCString(executable_cfstr, executable_buf, max_file_length, kCFStringEncodingMacRoman)) // convert CFStringRef to char* { diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp index 831ad7827a..6136d72882 100644 --- a/indra/newview/llpanelenvironment.cpp +++ b/indra/newview/llpanelenvironment.cpp @@ -1100,7 +1100,7 @@ void LLPanelEnvironmentInfo::onEnvironmentChanged(LLEnvironment::EnvSelection_t else if ((env == LLEnvironment::ENV_PARCEL) && (getParcelId() == LLViewerParcelMgr::instance().getAgentParcelId())) { - if (LLParcel* parcel = getParcel()) + if (getParcel()) // more set-but-unused { // first for parcel own settings, second is for case when parcel uses region settings if (mCurEnvVersion < new_version diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 805823fae8..ffd8a85838 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -3384,6 +3384,14 @@ bool idle_startup() } // + // Restore open IMs from previous session + if (gSavedSettings.getBOOL("FSRestoreOpenIMs")) + { + FSFloaterIMContainer* floater_imcontainer = FSFloaterIMContainer::getInstance(); + floater_imcontainer->restoreOpenIMs(); + } + // + return true; } @@ -4874,6 +4882,9 @@ bool process_login_success_response(U32 &first_sim_size_x, U32 &first_sim_size_y //setup map of datetime strings to codes and slt & local time offset from utc LLStringOps::setupDatetimeInfo(pacific_daylight_time); + // [FIRE-34775] Use PST/PDT when logged into OpenSim + LLStringOps::setupUsingPacificTime(!LLGridManager::getInstance()->isInSecondLife()); + // } // set up the voice configuration. Ultimately, we should pass this up as part of each voice diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index a87494062c..2bf13b9317 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -1030,7 +1030,7 @@ void LLSurfacePatch::updateGL() F32 grids_per_patch_edge = (F32)getSurface()->getGridsPerPatchEdge(); LLViewerRegion *regionp = getSurface()->getRegion(); - LLVector3d origin_region = getOriginGlobal() - getSurface()->getOriginGlobal(); + // LLVector3d origin_region = getOriginGlobal() - getSurface()->getOriginGlobal(); // set but not used LLVLComposition* comp = regionp->getComposition(); diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index 963de67bdf..a86309754b 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -160,9 +160,9 @@ bool LLViewerCamera::updateCameraLocation(const LLVector3 ¢er, const LLVecto // update pixel meter ratio using default fov, not modified one mPixelMeterRatio = (F32)(getViewHeightInPixels()/ (2.f*tanf(mCameraFOVDefault*0.5f))); // update screen pixel area + mScreenPixelArea =(S32)((F32)getViewHeightInPixels() * ((F32)getViewHeightInPixels() * getAspect())); return true; - mScreenPixelArea =(S32)((F32)getViewHeightInPixels() * ((F32)getViewHeightInPixels() * getAspect())); } const LLMatrix4 &LLViewerCamera::getProjection() const diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index bd914dde96..b9e340c1c8 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -8281,7 +8281,7 @@ class LLAvatarEnableResetSkeleton : public view_listener_t { bool handleEvent(const LLSD& userdata) { - if (LLVOAvatar* avatar = find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject())) + if (find_avatar_from_object(LLSelectMgr::getInstance()->getSelection()->getPrimaryObject())) // set but unused. { return true; } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index b0c626c320..8d314f8ad2 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5939,7 +5939,7 @@ void LLVOAvatar::updateVisibility() if (sDebugInvisible) { - if (LLNameValue* firstname = getNVPair("FirstName")) + if (getNVPair("FirstName"))// Fix more Mac whining. { LL_DEBUGS("Avatar") << avString() << " updating visibility" << LL_ENDL; } @@ -12053,7 +12053,7 @@ void LLVOAvatar::getAssociatedVolumes(std::vector& volumes) for (const auto& iter : mAttachmentPoints) { LLViewerJointAttachment* attachment = iter.second; - LLViewerJointAttachment::attachedobjs_vec_t::iterator attach_end = attachment->mAttachedObjects.end(); + // LLViewerJointAttachment::attachedobjs_vec_t::iterator attach_end = attachment->mAttachedObjects.end(); // set but not used for (LLViewerObject* attached_object : attachment->mAttachedObjects) { diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index b76bee331a..d322481389 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -610,6 +610,14 @@ void LLWebRTCVoiceClient::updateNeighboringRegions() // add current region. mNeighboringRegions.insert(gAgent.getRegion()->getRegionID()); + // Do not connect to neighbouring regions + static LLCachedControl fsDisableNeighbourRegionConnections(gSavedSettings, "FSDisableNeighbourRegionConnections"); + if (fsDisableNeighbourRegionConnections) + { + return; + } + // + // base off of speaker position as it'll move more slowly than camera position. // Once we have hysteresis, we may be able to track off of speaker and camera position at 50m // TODO: Add hysteresis so we don't flip-flop connections to neighbors diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 4784596acf..190638fdf9 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -575,9 +575,9 @@ void FSPanelCOFWearableOutfitListItem::updateItemWeight(U32 item_weight) } //virtual -void FSPanelCOFWearableOutfitListItem::updateItem(const std::string& name, EItemState item_state) +void FSPanelCOFWearableOutfitListItem::updateItem(const std::string& name, bool favorite, EItemState item_state) { - LLPanelWearableOutfitItem::updateItem(name, item_state); + LLPanelWearableOutfitItem::updateItem(name, favorite, item_state); mWeightCtrl->setVisible(true); reshapeWidgets(); } diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h index 57cb51e01f..263a04c86c 100644 --- a/indra/newview/llwearableitemslist.h +++ b/indra/newview/llwearableitemslist.h @@ -256,7 +256,7 @@ public: void updateItemWeight(U32 item_weight); - /*virtual*/ void updateItem(const std::string& name, EItemState item_state = IS_DEFAULT); + /*virtual*/ void updateItem(const std::string& name, bool favorite, EItemState item_state = IS_DEFAULT); /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index cd2b666613..2d73045f72 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -1594,6 +1594,18 @@ void process_enable_simulator(LLMessageSystem *msg, void **user_data) msg->getIPAddrFast(_PREHASH_SimulatorInfo, _PREHASH_IP, ip_u32); msg->getIPPortFast(_PREHASH_SimulatorInfo, _PREHASH_Port, port); + // Only connect if neighbour connections are not disabled, or if this is the current region being established (login/teleport target) + static LLCachedControl fsDisableNeighbourRegionConnections(gSavedSettings, "FSDisableNeighbourRegionConnections"); + if (fsDisableNeighbourRegionConnections) + { + LLViewerRegion* current_region = gAgent.getRegion(); + if (current_region && current_region->getHandle() != handle) + { + return; + } + } + // + // which simulator should we modify? LLHost sim(ip_u32, port); diff --git a/indra/newview/rlvinventory.cpp b/indra/newview/rlvinventory.cpp index a0994d6b03..48307d48b3 100644 --- a/indra/newview/rlvinventory.cpp +++ b/indra/newview/rlvinventory.cpp @@ -635,7 +635,7 @@ void RlvGiveToRLVTaskOffer::doneIdle() void RlvGiveToRLVTaskOffer::onDestinationCreated(const LLUUID& idDestFolder, const std::string& strName) { - if (const LLViewerInventoryCategory* pTarget = (idDestFolder.notNull()) ? gInventory.getCategory(idDestFolder) : nullptr) + if (idDestFolder.notNull()) { moveAndRename(m_Folders.front(), idDestFolder, strName, new LLBoostFuncInventoryCallback(boost::bind(&RlvGiveToRLVTaskOffer::onOfferCompleted, this, _1))); } diff --git a/indra/newview/skins/ansastorm/xui/zh/panel_main_inventory.xml b/indra/newview/skins/ansastorm/xui/zh/panel_main_inventory.xml index 21f086793b..ea54ef6a70 100644 --- a/indra/newview/skins/ansastorm/xui/zh/panel_main_inventory.xml +++ b/indra/newview/skins/ansastorm/xui/zh/panel_main_inventory.xml @@ -125,6 +125,7 @@ + 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 2fd9f646f6..b2031ed5eb 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml @@ -180,6 +180,7 @@ + [https://accounts.secondlife.com/change_email?lang=de-DE Einstellungen für E-Mail-Benachrichtigungs für Offline-IMs öffnen] diff --git a/indra/newview/skins/default/xui/de/panel_preferences_colors.xml b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml index 6a4366bd37..236c5bf039 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_colors.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml @@ -206,6 +206,8 @@ + + Konsolen-Deckkraft: 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 de106ee70d..27137d2c16 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -1144,6 +1144,16 @@ name="FSOpenIMContainerOnOfflineMessage" control_name="FSOpenIMContainerOnOfflineMessage" label="Open Conversations when an offline message has been received"/> + + + + @@ -257,11 +258,11 @@ - - + +