From 228d4a602f2cda91b35d5ea1ca86a6c966a302c7 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Fri, 21 Nov 2025 07:30:00 +1000 Subject: [PATCH 01/40] [FIRE-36131] Corrected macOS packaging --- indra/newview/viewer_manifest.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index c1c286cf04..40aef9c89d 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1360,11 +1360,6 @@ class Darwin_x86_64_Manifest(ViewerManifest): "Info.plist") with self.prefix(dst="Contents"): # everything goes in Contents - # self.path("Info.plist", dst="Info.plist") - - # copy additional libs in /Contents/MacOS/ - self.path(os.path.join(relpkgdir, "libndofdev.dylib"), dst="Resources/libndofdev.dylib") - # CEF framework goes inside Contents/Frameworks. # Remember where we parked this car. with self.prefix(src=relpkgdir, dst="Frameworks"): @@ -1569,6 +1564,10 @@ class Darwin_x86_64_Manifest(ViewerManifest): self.path2basename("../media_plugins/cef/" + self.args['configuration'], "media_plugin_cef.dylib") + # copy LibVLC plugin + self.path2basename("../media_plugins/libvlc/" + self.args['configuration'], + "media_plugin_libvlc.dylib") + # CEF framework and vlc libraries goes inside Contents/Frameworks. with self.prefix(src=os.path.join(pkgdir, 'lib', 'release')): self.path("Chromium Embedded Framework.framework") @@ -1578,14 +1577,12 @@ class Darwin_x86_64_Manifest(ViewerManifest): self.path("DullahanHelper (Renderer).app") self.path("DullahanHelper (Plugin).app") - # copy LibVLC dynamic libraries - with self.prefix(src=os.path.join(self.args['build'], os.pardir, 'packages', 'lib', 'release' ), dst="lib"): + # Copy libvlc self.path( "libvlc*.dylib*" ) - - # copy LibVLC plugins folder - with self.prefix(src=os.path.join(self.args['build'], os.pardir, 'packages', 'lib', 'release', 'plugins' ), dst="lib"): - self.path("*.dylib") - self.path("plugins.dat") + # copy LibVLC plugins folder + with self.prefix(src='plugins', dst="plugins"): + self.path( "*.dylib" ) + self.path( "plugins.dat" ) # NOTE: the -S argument to strip causes it to keep enough info for # annotated backtraces (i.e. function names in the crash log). 'strip' with no From 2a6b5cbde5ec3c3603b9cd3aecd5e6eac06eb1fc Mon Sep 17 00:00:00 2001 From: Zi Ree Date: Fri, 21 Nov 2025 00:11:32 +0100 Subject: [PATCH 02/40] Add menu entries for copying mentions URIs and inserting mentions into chats from the participants list or avatar URIs, even when the avatar does not come up in the @mention chooser. --- indra/llui/llchatentry.cpp | 15 ++++++++ indra/llui/llchatentry.h | 3 ++ indra/llui/lltextbase.cpp | 20 ++++++++++ indra/llui/lltextbase.h | 3 ++ indra/newview/fschathistory.cpp | 38 +++++++++++++++++++ indra/newview/fschathistory.h | 2 + indra/newview/fscontactsfriendsmenu.cpp | 6 +++ indra/newview/fscontactsfriendsmenu.h | 1 + indra/newview/fspanelimcontrolpanel.cpp | 11 ++++++ indra/newview/fspanelimcontrolpanel.h | 1 + indra/newview/fsparticipantlist.cpp | 23 +++++++++++ indra/newview/fsparticipantlist.h | 8 ++++ .../skins/default/xui/en/menu_avatar_icon.xml | 20 ++++++++++ .../xui/en/menu_fs_contacts_friends.xml | 9 +++++ .../default/xui/en/menu_participant_list.xml | 17 +++++++++ .../skins/default/xui/en/menu_url_agent.xml | 19 ++++++++++ 16 files changed, 196 insertions(+) diff --git a/indra/llui/llchatentry.cpp b/indra/llui/llchatentry.cpp index 9dbbca976b..02a28b4317 100644 --- a/indra/llui/llchatentry.cpp +++ b/indra/llui/llchatentry.cpp @@ -278,3 +278,18 @@ void LLChatEntry::paste() } } // + +// Add menu items to copy and/or insert mention URIs into chat +void LLChatEntry::insertMentionAtCursor(const std::string& str) +{ + S32 cursor_from_end = getLength() - getCursorPos(); + + insertText(str); + + std::string new_text(wstring_to_utf8str(getConvertedText())); + clear(); + appendTextImpl(new_text, LLStyle::Params(), true); + + setCursorPos(getLength() - cursor_from_end); +} +// diff --git a/indra/llui/llchatentry.h b/indra/llui/llchatentry.h index b87b15956c..7cffe854bb 100644 --- a/indra/llui/llchatentry.h +++ b/indra/llui/llchatentry.h @@ -71,6 +71,9 @@ public: // Changed to public so we can update history when using modifier keys void updateHistory(); + // Add menu items to copy and/or insert mention URIs into chat + void insertMentionAtCursor(const std::string& str); + // Fix linefeed pasting /*virtual*/ void paste(); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index c28b7d6070..15f80e0072 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2451,6 +2451,11 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url) enable_registrar.add("FS.EnableViewLog", std::bind(&FSRegistrarUtils::checkIsEnabled, gFSRegistrarUtils, target_id, EFSRegistrarFunctionActionType::FS_RGSTR_ACT_VIEW_TRANSCRIPT)); // + // Add menu items to copy and/or insert mention URIs into chat + registrar.add("Mention.CopyURI", boost::bind(&LLUrlAction::copyURLToClipboard, "secondlife:///app/agent/" + target_id_str + "/mention")); + registrar.add("Mention.Chat", boost::bind(&LLTextBase::insertMentionAtCursor, this, "secondlife:///app/agent/" + target_id_str + "/mention")); + // + // FIRE-30725 - Add more group functions to group URL context menu registrar.add("FS.JoinGroup", std::bind(&LLUrlAction::executeSLURL, "secondlife:///app/firestorm/" + target_id_str + "/groupjoin", true)); registrar.add("FS.LeaveGroup", std::bind(&LLUrlAction::executeSLURL, "secondlife:///app/firestorm/" + target_id_str + "/groupleave", true)); @@ -2521,6 +2526,14 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url) } // + // Add menu items to copy and/or insert mention URIs into chat + if (!parent_floater || (parent_floater->getName() != "panel_im" && parent_floater->getName() != "nearby_chat")) + { + menu->getChild("MentionURISeparator")->setVisible(false); + menu->getChild("mention_in_chat")->setVisible(false); + } + // + menu->show(x, y); LLMenuGL::showPopup(this, menu, x, y); } @@ -4577,3 +4590,10 @@ void LLTextBase::setWordWrap(bool wrap) { mWordWrap = wrap; } + +// Add menu items to copy and/or insert mention URIs into chat +// virtual +void LLTextBase::insertMentionAtCursor(const std::string& str) +{ +} +// diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 87a5961b7d..b5ce3c2bd2 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -727,6 +727,9 @@ protected: void appendAndHighlightTextImpl(const std::string &new_text, S32 highlight_part, const LLStyle::Params& style_params, e_underline underline_link = e_underline::UNDERLINE_ALWAYS); S32 normalizeUri(std::string& uri); + // Add menu items to copy and/or insert mention URIs into chat + virtual void insertMentionAtCursor(const std::string& str); + protected: // virtual std::string _getSearchText() const override diff --git a/indra/newview/fschathistory.cpp b/indra/newview/fschathistory.cpp index dfb0891dc3..45a66e44b5 100644 --- a/indra/newview/fschathistory.cpp +++ b/indra/newview/fschathistory.cpp @@ -128,6 +128,8 @@ LLObjectIMHandler gObjectIMHandler; class FSChatHistoryHeader: public LLPanel { public: + typedef boost::function insert_mention_callback_t; + FSChatHistoryHeader() : LLPanel(), mInfoCtrl(NULL), @@ -150,6 +152,7 @@ public: mTimeBoxTextBox(NULL), mHeaderLayoutStack(NULL), mAvatarNameCacheConnection(), + mInsertMentionCallback(NULL), mTime(0) {} @@ -180,6 +183,24 @@ public: } } + void setInsertMentionCallback(insert_mention_callback_t cb) + { + mInsertMentionCallback = cb; + } + + void copyURLToClipboard() + { + LLUrlAction::copyURLToClipboard("secondlife:///app/agent/" + mAvatarID.asString() + "/mention"); + } + + void insertMentionAtCursor() + { + if (mInsertMentionCallback) + { + mInsertMentionCallback("secondlife:///app/agent/" + mAvatarID.asString() + "/mention"); + } + } + bool handleMouseUp(S32 x, S32 y, MASK mask) { return LLPanel::handleMouseUp(x,y,mask); @@ -1069,6 +1090,9 @@ protected: registrar_enable.add("AvatarIcon.Enable", boost::bind(&FSChatHistoryHeader::onAvatarIconContextMenuItemEnabled, this, _2)); registrar_enable.add("AvatarIcon.Visible", boost::bind(&FSChatHistoryHeader::onAvatarIconContextMenuItemVisible, this, _2)); + registrar.add("Mention.CopyURI", boost::bind(&FSChatHistoryHeader::copyURLToClipboard, this)); + registrar.add("Mention.Chat", boost::bind(&FSChatHistoryHeader::insertMentionAtCursor, this)); + menu = LLUICtrlFactory::getInstance()->createFromFile("menu_avatar_icon.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); if (menu) { @@ -1256,6 +1280,8 @@ protected: private: boost::signals2::connection mAvatarNameCacheConnection; + + insert_mention_callback_t mInsertMentionCallback; }; FSChatHistory::FSChatHistory(const FSChatHistory::Params& p) @@ -1353,6 +1379,17 @@ void FSChatHistory::initFromParams(const FSChatHistory::Params& p) setShowContextMenu(true); } +// virtual +void FSChatHistory::insertMentionAtCursor(const std::string& str) +{ + updateChatInputLine(); + if (mChatInputLine) + { + mChatInputLine->insertMentionAtCursor(str); + mChatInputLine->setFocus(true); + } +} + LLView* FSChatHistory::getSeparator() { LLPanel* separator = LLUICtrlFactory::getInstance()->createFromFile(mMessageSeparatorFilename, NULL, LLPanel::child_registry_t::instance()); @@ -1365,6 +1402,7 @@ LLView* FSChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style if (header) { header->setup(chat, style_params, args); + header->setInsertMentionCallback(boost::bind(&FSChatHistory::insertMentionAtCursor, this, _1)); } return header; } diff --git a/indra/newview/fschathistory.h b/indra/newview/fschathistory.h index eea5f15067..a041d57ed0 100644 --- a/indra/newview/fschathistory.h +++ b/indra/newview/fschathistory.h @@ -110,6 +110,8 @@ class FSChatHistory : public LLTextEditor // FIRE-8600: TAB out of cha LLSD getValue() const; void initFromParams(const Params&); + virtual void insertMentionAtCursor(const std::string& str); + /** * Appends a widget message. * If last user appended message, concurs with current user, diff --git a/indra/newview/fscontactsfriendsmenu.cpp b/indra/newview/fscontactsfriendsmenu.cpp index 120d102af9..3573ac0fa0 100644 --- a/indra/newview/fscontactsfriendsmenu.cpp +++ b/indra/newview/fscontactsfriendsmenu.cpp @@ -61,6 +61,7 @@ LLContextMenu* FSContactsFriendsMenu::createMenu() registrar.add("Contacts.Friends.CopyLabel", boost::bind(&FSContactsFriendsMenu::copyNameToClipboard, this, id)); registrar.add("Contacts.Friends.CopyUrl", boost::bind(&FSContactsFriendsMenu::copySLURLToClipboard, this, id)); registrar.add("Contacts.Friends.SelectOption", boost::bind(&FSContactsFriendsMenu::selectOption, this, _2)); + registrar.add("Mention.CopyURI", boost::bind(&FSContactsFriendsMenu::copyURLToClipboard, this)); enable_registrar.add("Contacts.Friends.EnableItem", boost::bind(&FSContactsFriendsMenu::enableContextMenuItem, this, _2)); enable_registrar.add("Contacts.Friends.EnableZoomIn", boost::bind(&LLAvatarActions::canZoomIn, id)); @@ -237,3 +238,8 @@ bool FSContactsFriendsMenu::checkOption(const LLSD& userdata) return false; } + +void FSContactsFriendsMenu::copyURLToClipboard() +{ + LLUrlAction::copyURLToClipboard("secondlife:///app/agent/" + mUUIDs.front().asString() + "/mention"); +} diff --git a/indra/newview/fscontactsfriendsmenu.h b/indra/newview/fscontactsfriendsmenu.h index d8c0e21e6f..7c3dcff836 100644 --- a/indra/newview/fscontactsfriendsmenu.h +++ b/indra/newview/fscontactsfriendsmenu.h @@ -44,6 +44,7 @@ private: void copySLURLToClipboard(const LLUUID& id); void selectOption(const LLSD& userdata); bool checkOption(const LLSD& userdata); + void copyURLToClipboard(); }; extern FSContactsFriendsMenu gFSContactsFriendsMenu; diff --git a/indra/newview/fspanelimcontrolpanel.cpp b/indra/newview/fspanelimcontrolpanel.cpp index 88a1b22ada..17a3351845 100644 --- a/indra/newview/fspanelimcontrolpanel.cpp +++ b/indra/newview/fspanelimcontrolpanel.cpp @@ -32,6 +32,8 @@ #include "fsparticipantlist.h" #include "llagent.h" +#include "llchatentry.h" +#include "fsfloaterim.h" #include "llimview.h" #include "llspeakers.h" @@ -88,9 +90,18 @@ void FSPanelGroupControlPanel::setSessionId(const LLUUID& session_id) return; mParticipantList = new FSParticipantList(speaker_manager, getChild("grp_speakers_list"), true,false); + if (mParticipantList) + { + mParticipantList->setInsertMentionCallback(boost::bind(&FSPanelGroupControlPanel::insertMentionAtCursor, this, _1)); + } } } +void FSPanelGroupControlPanel::insertMentionAtCursor(const LLUUID& avatar_id) +{ + FSFloaterIM::getInstance(getSessionId())->findChild("chat_editor")->insertMentionAtCursor("secondlife:///app/agent/" + avatar_id.asString() + "/mention"); +} + uuid_vec_t FSPanelGroupControlPanel::getParticipants() const { return mParticipantList->getAvatarIds(); diff --git a/indra/newview/fspanelimcontrolpanel.h b/indra/newview/fspanelimcontrolpanel.h index f1877e9284..7ea3c8cedd 100644 --- a/indra/newview/fspanelimcontrolpanel.h +++ b/indra/newview/fspanelimcontrolpanel.h @@ -69,6 +69,7 @@ public: void draw() override; uuid_vec_t getParticipants() const override; + void insertMentionAtCursor(const LLUUID& url); protected: LLUUID mGroupID; diff --git a/indra/newview/fsparticipantlist.cpp b/indra/newview/fsparticipantlist.cpp index 4f3611dbc5..30229b52bc 100644 --- a/indra/newview/fsparticipantlist.cpp +++ b/indra/newview/fsparticipantlist.cpp @@ -39,6 +39,7 @@ #include "llnotificationsutil.h" #include "lloutputmonitorctrl.h" #include "llspeakers.h" +#include "llurlaction.h" #include "llviewercontrol.h" #include "llviewermenu.h" #include "llvoiceclient.h" @@ -69,6 +70,7 @@ FSParticipantList::FSParticipantList(LLSpeakerMgr* data_source, mParticipantListMenu(NULL), mExcludeAgent(exclude_agent), mValidateSpeakerCallback(NULL), + mInsertMentionCallback(NULL), mConvType(CONV_UNKNOWN) { mSpeakerAddListener = new SpeakerAddListener(*this); @@ -301,6 +303,11 @@ void FSParticipantList::setValidateSpeakerCallback(validate_speaker_callback_t c mValidateSpeakerCallback = cb; } +void FSParticipantList::setInsertMentionCallback(insert_mention_callback_t cb) +{ + mInsertMentionCallback = cb; +} + void FSParticipantList::update() { mSpeakerMgr->update(true); @@ -530,6 +537,9 @@ LLContextMenu* FSParticipantList::FSParticipantListMenu::createMenu() registrar.add("ParticipantList.ModerateVoice", boost::bind(&FSParticipantList::FSParticipantListMenu::moderateVoice, this, _2)); + registrar.add("Mention.CopyURI", boost::bind(&FSParticipantList::FSParticipantListMenu::copyURLToClipboard, this, mUUIDs.front())); + registrar.add("Mention.Chat", boost::bind(&FSParticipantList::FSParticipantListMenu::insertMentionAtCursor, this, mUUIDs.front())); + enable_registrar.add("ParticipantList.EnableItem", boost::bind(&FSParticipantList::FSParticipantListMenu::enableContextMenuItem, this, _2)); enable_registrar.add("ParticipantList.EnableItem.Moderate", boost::bind(&FSParticipantList::FSParticipantListMenu::enableModerateContextMenuItem, this, _2)); enable_registrar.add("ParticipantList.CheckItem", boost::bind(&FSParticipantList::FSParticipantListMenu::checkContextMenuItem, this, _2)); @@ -556,6 +566,19 @@ LLContextMenu* FSParticipantList::FSParticipantListMenu::createMenu() return main_menu; } +void FSParticipantList::FSParticipantListMenu::copyURLToClipboard(const LLUUID& avatar_id) +{ + LLUrlAction::copyURLToClipboard("secondlife:///app/agent/" + mUUIDs.front().asString() + "/mention"); +} + +void FSParticipantList::FSParticipantListMenu::insertMentionAtCursor(const LLUUID& avatar_id) +{ + if (mParent.mInsertMentionCallback) + { + mParent.mInsertMentionCallback(avatar_id); + } +} + void FSParticipantList::FSParticipantListMenu::show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) { if (uuids.size() == 0) return; diff --git a/indra/newview/fsparticipantlist.h b/indra/newview/fsparticipantlist.h index e206d2d72c..0427b27083 100644 --- a/indra/newview/fsparticipantlist.h +++ b/indra/newview/fsparticipantlist.h @@ -53,6 +53,7 @@ public: }; typedef boost::function validate_speaker_callback_t; + typedef boost::function insert_mention_callback_t; FSParticipantList(LLSpeakerMgr* data_source, LLAvatarList* avatar_list, @@ -94,6 +95,7 @@ public: * @see onAddItemEvent() */ void setValidateSpeakerCallback(validate_speaker_callback_t cb); + void setInsertMentionCallback(insert_mention_callback_t cb); EConversationType const getType() const { return mConvType; } @@ -240,6 +242,10 @@ protected: static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response); void handleAddToContactSet(); + + // mentions support + void copyURLToClipboard(const LLUUID& avatar_id); + void insertMentionAtCursor(const LLUUID& avatar_id); }; /** @@ -300,6 +306,8 @@ private: LLPointer mSortByRecentSpeakers; validate_speaker_callback_t mValidateSpeakerCallback; + insert_mention_callback_t mInsertMentionCallback; + EConversationType mConvType; }; diff --git a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml index 36e3f85472..de8e0e11e1 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml @@ -129,6 +129,14 @@ name="copy url"> + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml b/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml index 6451ccb2c5..8dd6be75f9 100644 --- a/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml +++ b/indra/newview/skins/default/xui/en/menu_fs_contacts_friends.xml @@ -115,6 +115,15 @@ + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/menu_url_agent.xml b/indra/newview/skins/default/xui/en/menu_url_agent.xml index 4dfe325405..ff41e69414 100644 --- a/indra/newview/skins/default/xui/en/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/en/menu_url_agent.xml @@ -177,4 +177,23 @@ + + + + + + + + + From 676760fd101d0ef96c7f91c19ce03452fa258a69 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Fri, 21 Nov 2025 10:37:15 +0100 Subject: [PATCH 03/40] Update German translation --- indra/newview/skins/default/xui/de/menu_avatar_icon.xml | 2 ++ .../newview/skins/default/xui/de/menu_fs_contacts_friends.xml | 3 ++- indra/newview/skins/default/xui/de/menu_participant_list.xml | 2 ++ indra/newview/skins/default/xui/de/menu_url_agent.xml | 4 +++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml index 978580ce51..699e53d877 100644 --- a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml @@ -18,6 +18,7 @@ + @@ -28,4 +29,5 @@ + diff --git a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml index 90c5ebb6aa..6aa491e058 100644 --- a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml +++ b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml @@ -12,7 +12,8 @@ - + + diff --git a/indra/newview/skins/default/xui/de/menu_participant_list.xml b/indra/newview/skins/default/xui/de/menu_participant_list.xml index ffb53c0182..5a57e0ab30 100644 --- a/indra/newview/skins/default/xui/de/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/de/menu_participant_list.xml @@ -23,4 +23,6 @@ + + diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml index 5b7d4133b9..21d7b1d34b 100644 --- a/indra/newview/skins/default/xui/de/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/de/menu_url_agent.xml @@ -20,5 +20,7 @@ - + + + From 8813407e84f84a4a11f0b285371697fb33a469db Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Fri, 21 Nov 2025 15:00:28 +0100 Subject: [PATCH 04/40] Raise maxSuggestedOutfits from 200 to 1000 As larger amount of them can be handled without freezing, after recent commits Signed-off-by: PanteraPolnocy --- indra/newview/lloutfitslist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 2d0780d2b9..7bcbcabdee 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -1129,7 +1129,7 @@ void LLOutfitListBase::refreshList(const LLUUID& category_id) // FIRE-6958/VWR-2862; Handle large amounts of outfits, write a least a warning into the logs. S32 currentOutfitsAmount = (S32)mRefreshListState.Added.size(); - constexpr S32 maxSuggestedOutfits = 200; + constexpr S32 maxSuggestedOutfits = 1000; if (currentOutfitsAmount > maxSuggestedOutfits) { LL_WARNS() << "Large amount of outfits found: " << currentOutfitsAmount << " this may cause hangs and disconnects" << LL_ENDL; From 66de754017680b1ff16575529264775f3226fda4 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Sat, 22 Nov 2025 00:25:15 +1000 Subject: [PATCH 05/40] [FIRE-36132] Fixed Linux Keyboard input in CEF --- indra/media_plugins/cef/media_plugin_cef.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 8924e922b6..4877a9ceba 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -1108,7 +1108,6 @@ void MediaPluginCEF::keyEvent(dullahan::EKeyEvent key_event, LLSD native_key_dat // Keyboard handling for Linux. #if LL_LINUX -#if LL_SDL2 uint32_t native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); // this is actually the SDL event.key.keysym.sym; uint32_t native_virtual_key_win = (uint32_t)(native_key_data["virtual_key_win"].asInteger()); @@ -1127,16 +1126,6 @@ void MediaPluginCEF::keyEvent(dullahan::EKeyEvent key_event, LLSD native_key_dat mCEFLib->nativeKeyboardEventSDL2(key_event, native_virtual_key_win, native_modifiers, keypad); } -#else - - uint32_t native_scan_code = (uint32_t)(native_key_data["sdl_sym"].asInteger()); - uint32_t native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); - uint32_t native_modifiers = (uint32_t)(native_key_data["cef_modifiers"].asInteger()); - if( native_scan_code == '\n' ) - native_scan_code = '\r'; - mCEFLib->nativeKeyboardEvent(key_event, native_scan_code, native_virtual_key, native_modifiers); - -#endif // LL_SDL2 #endif // LL_LINUX // }; @@ -1171,7 +1160,6 @@ void MediaPluginCEF::unicodeInput(std::string event, LLSD native_key_data = LLSD #endif #if LL_LINUX -# if LL_SDL2 uint32_t native_scan_code = (uint32_t)(native_key_data["sdl_sym"].asInteger()); uint32_t native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); @@ -1179,7 +1167,6 @@ void MediaPluginCEF::unicodeInput(std::string event, LLSD native_key_data = LLSD mCEFLib->nativeKeyboardEvent(dullahan::KE_KEY_DOWN, native_scan_code, native_virtual_key, native_modifiers); -#endif // LL_SDL2 #endif // LL_LINUX }; From d31ad4a2bccf9653fd59a2ba411b7e29a4e3c86e Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Fri, 21 Nov 2025 20:01:08 +0100 Subject: [PATCH 06/40] =?UTF-8?q?FIRE-36136,=20FIRE-36138=20Updateed=20Chi?= =?UTF-8?q?nese=20(=E5=B0=8F=E6=BB=A2=20Zi=20Ying),=20Japanese=20(Logue=20?= =?UTF-8?q?Takacs)=20and=20Polish=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: PanteraPolnocy --- .../xui/ja/floater_inventory_settings.xml | 2 +- .../default/xui/ja/floater_model_preview.xml | 28 +++++++++++++++++-- .../skins/default/xui/ja/menu_avatar_icon.xml | 4 +++ .../xui/ja/menu_fs_contacts_friends.xml | 3 ++ .../default/xui/ja/menu_participant_list.xml | 4 +++ .../skins/default/xui/ja/menu_url_agent.xml | 4 +++ .../skins/default/xui/pl/menu_avatar_icon.xml | 2 ++ .../xui/pl/menu_fs_contacts_friends.xml | 1 + .../default/xui/pl/menu_participant_list.xml | 2 ++ .../skins/default/xui/pl/menu_url_agent.xml | 2 ++ .../skins/default/xui/zh/menu_avatar_icon.xml | 4 ++- .../xui/zh/menu_fs_contacts_friends.xml | 3 +- .../xui/zh/menu_fs_namelist_avatar.xml | 2 +- .../default/xui/zh/menu_participant_list.xml | 2 ++ .../skins/default/xui/zh/menu_url_agent.xml | 4 ++- 15 files changed, 59 insertions(+), 8 deletions(-) diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_settings.xml b/indra/newview/skins/default/xui/ja/floater_inventory_settings.xml index 2d2f9857c7..96db70a38c 100644 --- a/indra/newview/skins/default/xui/ja/floater_inventory_settings.xml +++ b/indra/newview/skins/default/xui/ja/floater_inventory_settings.xml @@ -29,7 +29,7 @@ - アバターの装着物でEnterキーを押したときの動作 + アバターの装着物でEnterキー押下かダブルクリックしたときの動作 diff --git a/indra/newview/skins/default/xui/ja/floater_model_preview.xml b/indra/newview/skins/default/xui/ja/floater_model_preview.xml index 471cc3d01d..f670ba4ac8 100644 --- a/indra/newview/skins/default/xui/ja/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/ja/floater_model_preview.xml @@ -337,7 +337,7 @@ - ステップ2:分析 + ステップ2:殻への変換(オプション) 方法: @@ -352,6 +352,28 @@ + + + @@ -1720,7 +1720,7 @@ width="430"> tool_tip="Copy changes to the opposite joint." left_pad="1" top_delta="0" - width="43" > + width="53"> @@ -1742,7 +1742,7 @@ width="430"> left="2" top_pad="0" tool_tip="Make rotational changes relative to World" - width="18" > + width="18"> @@ -1763,7 +1763,7 @@ width="430"> left_pad="0" top_delta="0" tool_tip="Make rotational changes relative to Avatar" - width="15" > + width="15"> @@ -1784,7 +1784,7 @@ width="430"> left_pad="0" top_delta="0" tool_tip="Make rotational changes relative to Screen" - width="15" > + width="15"> @@ -1804,7 +1804,7 @@ width="430"> tool_tip="Click to copy change from left side to right side." left_pad="1" top_delta="0" - width="67" > + width="77"> @@ -1825,7 +1825,7 @@ width="430"> tool_tip="Click to copy change from right side to left side." left_pad="1" top_delta="0" - width="67" > + width="77"> @@ -1991,7 +1991,7 @@ width="430"> left_pad="1" top_delta="0" tool_tip="Load, save and manage the poses you make" - width="105" > + width="125" > From 2411d626a68ee13e7f3586f33a9bfa0d37c8ea0c Mon Sep 17 00:00:00 2001 From: Ansariel Date: Tue, 25 Nov 2025 23:37:16 +0100 Subject: [PATCH 21/40] Update German translation --- indra/newview/skins/default/xui/de/floater_fs_poser.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/de/floater_fs_poser.xml b/indra/newview/skins/default/xui/de/floater_fs_poser.xml index 4ffe3de5fc..5692aaac65 100644 --- a/indra/newview/skins/default/xui/de/floater_fs_poser.xml +++ b/indra/newview/skins/default/xui/de/floater_fs_poser.xml @@ -186,7 +186,7 @@ - + Hoch/Runter: @@ -245,7 +245,7 @@ diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml index 11e03193c4..ca8ab6128d 100644 --- a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml @@ -9,6 +9,7 @@ + diff --git a/indra/newview/skins/default/xui/fr/menu_conversation.xml b/indra/newview/skins/default/xui/fr/menu_conversation.xml index 3d5785e9bf..ac3cff20d3 100644 --- a/indra/newview/skins/default/xui/fr/menu_conversation.xml +++ b/indra/newview/skins/default/xui/fr/menu_conversation.xml @@ -25,7 +25,7 @@ - + diff --git a/indra/newview/skins/default/xui/fr/menu_fs_contacts_friends.xml b/indra/newview/skins/default/xui/fr/menu_fs_contacts_friends.xml index 75d91d238d..6d42fb5016 100644 --- a/indra/newview/skins/default/xui/fr/menu_fs_contacts_friends.xml +++ b/indra/newview/skins/default/xui/fr/menu_fs_contacts_friends.xml @@ -12,7 +12,8 @@ - + + diff --git a/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml b/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml index f86d41e0ab..7ae7c38a4b 100644 --- a/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml @@ -4,4 +4,5 @@ + diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml index 8e650e5b6c..1cfbf9597a 100644 --- a/indra/newview/skins/default/xui/fr/menu_object.xml +++ b/indra/newview/skins/default/xui/fr/menu_object.xml @@ -2,6 +2,7 @@ + @@ -21,7 +22,7 @@ - + diff --git a/indra/newview/skins/default/xui/fr/menu_object_icon.xml b/indra/newview/skins/default/xui/fr/menu_object_icon.xml index 97f78949a0..19498fab66 100644 --- a/indra/newview/skins/default/xui/fr/menu_object_icon.xml +++ b/indra/newview/skins/default/xui/fr/menu_object_icon.xml @@ -3,6 +3,7 @@ + diff --git a/indra/newview/skins/default/xui/fr/menu_participant_list.xml b/indra/newview/skins/default/xui/fr/menu_participant_list.xml index 4a2df63059..f3def29811 100644 --- a/indra/newview/skins/default/xui/fr/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/fr/menu_participant_list.xml @@ -11,15 +11,18 @@ - + - + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml index b006db24e0..e19edaac6d 100644 --- a/indra/newview/skins/default/xui/fr/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/fr/menu_url_agent.xml @@ -13,6 +13,14 @@ + + + + + + - + + + diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml index 8a320b27ff..acd4c26b65 100644 --- a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml @@ -3,6 +3,7 @@ + diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 3f8337ef38..ff11211a19 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -882,6 +882,15 @@ Assurez-vous que le fichier a l'extension correcte. Impossible de lire le fichier son chargé : [FILE] + +Le chargement de modèles n'est pas encore disponible sur Apple Silicon, mais sera pris en charge dans une prochaine version. + +Solution de contournement : cliquez avec le bouton droit sur l'application [APP_NAME] dans le Finder, sélectionnez +« Obtenir des informations », puis cochez « Ouvrir avec Rosetta ». + + + La bibliothèque physique n'est pas présente, certaines fonctionnalités du programme de chargement de modèles peuvent ne pas fonctionner ou ne pas fonctionner correctement. + Il semble que le fichier ne soit pas un fichier RIFF WAVE : [FILE] @@ -5187,6 +5196,10 @@ Ils peuvent utiliser http://opensimulator.org/wiki/inventory pour résoudre les Impossible de déplacer les fichiers. Chemin précédent rétabli. + + Votre système dispose de [TOTAL_MEM] Mo de mémoire, ce qui peut s'avérer insuffisant pour exécuter la visionneuse avec des paramètres élevés et risque d'entraîner des problèmes. + + Problème lors de l'enregistrement des droits d'objet par défaut : [REASON]. Réessayez de définir les droits par défaut ultérieurement. @@ -5404,6 +5417,12 @@ la région "[REGION]" ? Impossible de créer un autre favori car le nombre maximum de favoris a déjà été créé. + +Êtes-vous sûr de vouloir modifier la visibilité de votre statut en ligne pour tous vos amis à la fois ? + +En raison de la charge du serveur, cette modification en masse peut prendre un certain temps avant de prendre effet et peut entraîner des problèmes temporaires pour certains amis qui voient votre statut en ligne. + + En raison de la charge du serveur, le basculement massif de la visibilité du statut en ligne peut prendre un certain temps avant d'être effectif. Veuillez être patient. @@ -5655,6 +5674,10 @@ https://wiki.firestormviewer.org/antivirus_whitelisting Remplacer la pose “[POSE_NAME]”? + + Un grand nombre de tenues ont été détectées : [AMOUNT]. Cela peut entraîner des blocages ou des déconnexions de la visionneuse. Envisagez de réduire le nombre de tenues pour améliorer les performances (en dessous de [MAX]). IL S'AGIT UNIQUEMENT D'UNE SUGGESTION. Si votre ordinateur fonctionne normalement, vous pouvez ignorer cette recommandation. + + Demande de connexion refusée par Primfeed. diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml index 9c6bbbb254..4c79b5389b 100644 --- a/indra/newview/skins/default/xui/fr/panel_people.xml +++ b/indra/newview/skins/default/xui/fr/panel_people.xml @@ -47,6 +47,7 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://