From 27046fcc14239d36604790c993a90394361ec873 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Mon, 21 Nov 2022 13:48:23 +0000 Subject: SL-18629 - moving createNewCategory to AIS3 --- indra/newview/llappearancemgr.cpp | 7 +++++-- indra/newview/llinventorymodel.cpp | 9 +++++---- 2 files changed, 10 insertions(+), 6 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 909f32cd21..ab7adeeedc 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1701,6 +1701,7 @@ void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& ds { parent_id = gInventory.getRootFolderID(); } + // USES UDP PATH LLUUID subfolder_id = gInventory.createNewCategory( parent_id, LLFolderType::FT_NONE, src_cat->getName()); @@ -2725,7 +2726,8 @@ void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool ap { pid = gInventory.getRootFolderID(); } - + + // UDP PATH LLUUID new_cat_id = gInventory.createNewCategory( pid, LLFolderType::FT_NONE, @@ -3994,7 +3996,8 @@ void LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, boo func); } else - { + { + // UDP PATH LLUUID folder_id = gInventory.createNewCategory( parent_id, LLFolderType::FT_OUTFIT, diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index fab7ae8f1a..36797a3f28 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -664,24 +664,25 @@ const LLUUID LLInventoryModel::findLibraryCategoryUUIDForType(LLFolderType::ETyp // updateCategory() with a newly generated UUID category, but this // version will take care of details like what the name should be // based on preferred type. Returns the UUID of the new category. +// +// On failure, returns a null UUID. +// FIXME: callers do not check for or handle a null results currently. LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, LLFolderType::EType preferred_type, const std::string& pname, inventory_func_type callback) { - LLUUID id; + LLUUID id; // Initially null. if (!isInventoryUsable()) { LL_WARNS(LOG_INV) << "Inventory is not usable; can't create requested category of type " << preferred_type << LL_ENDL; - // FIXME failing but still returning an id? return id; } if(LLFolderType::lookup(preferred_type) == LLFolderType::badLookup()) { LL_DEBUGS(LOG_INV) << "Attempt to create undefined category." << LL_ENDL; - // FIXME failing but still returning an id? return id; } @@ -708,7 +709,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, std::string url; if ( viewer_region ) url = viewer_region->getCapability("CreateInventoryCategory"); - + if (!url.empty() && callback) { //Let's use the new capability. -- cgit v1.2.3 From f6208020f5b27b84aeb9ca258e8dbddce9c49bce Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 22 Nov 2022 15:46:08 +0000 Subject: SL-18629 - use AISAPI for some paths of new category creation --- indra/newview/llaisapi.cpp | 30 +++++++++++++++++++++++++++--- indra/newview/llaisapi.h | 3 ++- indra/newview/llappearancemgr.cpp | 1 + indra/newview/llinventorymodel.cpp | 35 +++++++++-------------------------- 4 files changed, 39 insertions(+), 30 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 005259bcb8..d2c59cfaba 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -100,7 +100,7 @@ void AISAPI::CreateInventory(const LLUUID& parentId, const LLSD& newInventory, c tid.generate(); std::string url = cap + std::string("/category/") + parentId.asString() + "?tid=" + tid.asString(); - LL_DEBUGS("Inventory") << "url: " << url << LL_ENDL; + LL_DEBUGS("Inventory") << "url: " << url << " parentID " << parentId << " newInventory " << newInventory << LL_ENDL; // I may be suffering from golden hammer here, but the first part of this bind // is actually a static cast for &HttpCoroutineAdapter::postAndSuspend so that @@ -124,7 +124,7 @@ void AISAPI::CreateInventory(const LLUUID& parentId, const LLSD& newInventory, c (&LLCoreHttpUtil::HttpCoroutineAdapter::postAndSuspend), _1, _2, _3, _4, _5, _6); LLCoprocedureManager::CoProcedure_t proc(boost::bind(&AISAPI::InvokeAISCommandCoro, - _1, postFn, url, parentId, newInventory, callback, COPYINVENTORY)); + _1, postFn, url, parentId, newInventory, callback, CREATEINVENTORY)); EnqueueAISCommand("CreateInventory", proc); } @@ -478,6 +478,7 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht LL_WARNS("Inventory") << ll_pretty_print_sd(result) << LL_ENDL; } + LL_DEBUGS("Inventory") << result << LL_ENDL; gInventory.onAISUpdateReceived("AISCommand", result); if (callback && !callback.empty()) @@ -487,9 +488,32 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht if (result.has("category_id") && (type == COPYLIBRARYCATEGORY)) { id = result["category_id"]; + callback(id); } + if (type == CREATEINVENTORY) + { + if (result.has("_created_categories")) + { + LLSD& cats = result["_created_categories"]; + LLSD::array_const_iterator cat_iter; + for (cat_iter = cats.beginArray(); cat_iter != cats.endArray(); ++cat_iter) + { + LLUUID cat_id = *cat_iter; + callback(cat_id); + } + } + if (result.has("_created_items")) + { + LLSD& items = result["_created_items"]; + LLSD::array_const_iterator item_iter; + for (item_iter = items.beginArray(); item_iter != items.endArray(); ++item_iter) + { + LLUUID item_id = *item_iter; + callback(item_id); + } + } + } - callback(id); } } diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 856f3fc180..6e9cc19baa 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -61,7 +61,8 @@ private: PURGEDESCENDENTS, UPDATECATEGORY, UPDATEITEM, - COPYLIBRARYCATEGORY + COPYLIBRARYCATEGORY, + CREATEINVENTORY } COMMAND_TYPE; static const std::string INVENTORY_CAP_NAME; diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index ab7adeeedc..4fc09c7739 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -3989,6 +3989,7 @@ void LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, boo // existence of AIS as an indicator the fix is present. Does // not actually use AIS to create the category. inventory_func_type func = boost::bind(&LLAppearanceMgr::onOutfitFolderCreated,this,_1,show_panel); + LLUUID folder_id = gInventory.createNewCategory( parent_id, LLFolderType::FT_OUTFIT, diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 36797a3f28..a7b3076e52 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -694,38 +694,20 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, LL_WARNS(LOG_INV) << "Creating new system folder, type " << preferred_type << LL_ENDL; } - id.generate(); std::string name = pname; - if(!pname.empty()) - { - name.assign(pname); - } - else + if (pname.empty()) { name.assign(LLViewerFolderType::lookupNewCategoryName(preferred_type)); } - LLViewerRegion* viewer_region = gAgent.getRegion(); - std::string url; - if ( viewer_region ) - url = viewer_region->getCapability("CreateInventoryCategory"); - - if (!url.empty() && callback) + if (callback) { - //Let's use the new capability. - - LLSD request, body; - body["folder_id"] = id; - body["parent_id"] = parent_id; - body["type"] = (LLSD::Integer) preferred_type; - body["name"] = name; - - request["message"] = "CreateInventoryCategory"; - request["payload"] = body; - - LL_DEBUGS(LOG_INV) << "Creating category via request: " << ll_pretty_print_sd(request) << LL_ENDL; - LLCoros::instance().launch("LLInventoryModel::createNewCategoryCoro", - boost::bind(&LLInventoryModel::createNewCategoryCoro, this, url, body, callback)); + LLSD new_inventory = LLSD::emptyMap(); + new_inventory["categories"] = LLSD::emptyArray(); + LLViewerInventoryCategory cat(LLUUID::null, parent_id, preferred_type, name, gAgent.getID()); + LLSD cat_sd = cat.asLLSD(); + new_inventory["categories"].append(cat_sd); + AISAPI::CreateInventory(parent_id, new_inventory, callback); return LLUUID::null; } @@ -740,6 +722,7 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, // assuming instant success. // Add the category to the internal representation + id.generate(); LLPointer cat = new LLViewerInventoryCategory(id, parent_id, preferred_type, name, gAgent.getID()); cat->setVersion(LLViewerInventoryCategory::VERSION_INITIAL - 1); // accountForUpdate() will icrease version by 1 -- cgit v1.2.3 From ce5ac93883b71b6abf8cffa35204541e257c6b02 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Tue, 24 Jan 2023 20:15:22 +0000 Subject: SL-18629 - various notes on work for D567 --- indra/newview/llappearancemgr.cpp | 7 ++++++- indra/newview/llfloateropenobject.cpp | 2 ++ indra/newview/llinventoryfunctions.cpp | 1 + indra/newview/llinventorymodel.cpp | 37 +++++++++++++++++++++++++++++++++- 4 files changed, 45 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 4fc09c7739..d05c30d722 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1702,6 +1702,7 @@ void LLAppearanceMgr::shallowCopyCategory(const LLUUID& src_id, const LLUUID& ds parent_id = gInventory.getRootFolderID(); } // USES UDP PATH + // D567 needs to carry over thumbnail info LLUUID subfolder_id = gInventory.createNewCategory( parent_id, LLFolderType::FT_NONE, src_cat->getName()); @@ -2728,6 +2729,7 @@ void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool ap } // UDP PATH + // D567 needs to carry over thumbnail info if present LLUUID new_cat_id = gInventory.createNewCategory( pid, LLFolderType::FT_NONE, @@ -3983,6 +3985,7 @@ void LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, boo // First, make a folder in the My Outfits directory. const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS); + // D567 replace with coros if (AISAPI::isAvailable()) { // cap-based category creation was buggy until recently. use @@ -3990,6 +3993,7 @@ void LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, boo // not actually use AIS to create the category. inventory_func_type func = boost::bind(&LLAppearanceMgr::onOutfitFolderCreated,this,_1,show_panel); + // D567 copy thumbnail info from source folder LLUUID folder_id = gInventory.createNewCategory( parent_id, LLFolderType::FT_OUTFIT, @@ -3998,7 +4002,8 @@ void LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, boo } else { - // UDP PATH + // UDP PATH, should remove + // D567 copy thumbnail info from source folder LLUUID folder_id = gInventory.createNewCategory( parent_id, LLFolderType::FT_OUTFIT, diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp index 2a1749bd42..cff42f72b7 100644 --- a/indra/newview/llfloateropenobject.cpp +++ b/indra/newview/llfloateropenobject.cpp @@ -166,6 +166,7 @@ void LLFloaterOpenObject::moveToInventory(bool wear, bool replace) } inventory_func_type func = boost::bind(LLFloaterOpenObject::callbackCreateInventoryCategory,_1,object_id,wear,replace); + // D567 copy thumbnail info LLUUID category_id = gInventory.createNewCategory(parent_category_id, LLFolderType::FT_NONE, name, @@ -173,6 +174,7 @@ void LLFloaterOpenObject::moveToInventory(bool wear, bool replace) //If we get a null category ID, we are using a capability in createNewCategory and we will //handle the following in the callbackCreateInventoryCategory routine. + // D567 review if ( category_id.notNull() ) { LLCatAndWear* data = new LLCatAndWear; diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 27edc8148e..145cdf6476 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -403,6 +403,7 @@ void copy_inventory_category(LLInventoryModel* model, bool move_no_copy_items ) { // Create the initial folder + // D567 needs to handle new fields inventory_func_type func = boost::bind(©_inventory_category_content, _1, model, cat, root_copy_id, move_no_copy_items); gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName(), func); } diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index a7b3076e52..b64dd431db 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -700,8 +700,13 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, name.assign(LLViewerFolderType::lookupNewCategoryName(preferred_type)); } +#ifdef USE_AIS_FOR_NC + // D567 currently this doesn't really work due to limitations in + // AIS3, also violates the common caller assumption that we can + // assign the id and return immediately. if (callback) { + // D567 note that we no longer assign the UUID in the viewer, so various workflows need to change. LLSD new_inventory = LLSD::emptyMap(); new_inventory["categories"] = LLSD::emptyArray(); LLViewerInventoryCategory cat(LLUUID::null, parent_id, preferred_type, name, gAgent.getID()); @@ -711,17 +716,47 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id, return LLUUID::null; } +#else + LLViewerRegion* viewer_region = gAgent.getRegion(); + std::string url; + if ( viewer_region ) + url = viewer_region->getCapability("CreateInventoryCategory"); + + if (!url.empty() && callback) + { + //Let's use the new capability. + + id.generate(); + LLSD request, body; + body["folder_id"] = id; + body["parent_id"] = parent_id; + body["type"] = (LLSD::Integer) preferred_type; + body["name"] = name; + + request["message"] = "CreateInventoryCategory"; + request["payload"] = body; + + LL_DEBUGS(LOG_INV) << "Creating category via request: " << ll_pretty_print_sd(request) << LL_ENDL; + LLCoros::instance().launch("LLInventoryModel::createNewCategoryCoro", + boost::bind(&LLInventoryModel::createNewCategoryCoro, this, url, body, callback)); + + return LLUUID::null; + } +#endif + if (!gMessageSystem) { return LLUUID::null; } - // FIXME this UDP code path needs to be removed. Requires + // D567 FIXME this UDP code path needs to be removed. Requires // reworking many of the callers to use callbacks rather than // assuming instant success. // Add the category to the internal representation + LL_WARNS() << "D567 need to remove this usage" << LL_ENDL; + id.generate(); LLPointer cat = new LLViewerInventoryCategory(id, parent_id, preferred_type, name, gAgent.getID()); -- cgit v1.2.3 From 1140ae3489a9e260a0abb808b4152f2d57384d67 Mon Sep 17 00:00:00 2001 From: Kitty Barnett Date: Thu, 29 Dec 2022 19:51:33 +0100 Subject: Add a texture inspector and show it when hovering over an inventory textory (or folder containing - among others - exactly one texture) and when hovering over notecard embedded textures --- indra/newview/CMakeLists.txt | 2 + indra/newview/llinspecttexture.cpp | 301 +++++++++++++++++++++ indra/newview/llinspecttexture.h | 52 ++++ indra/newview/llinventorymodel.cpp | 25 ++ indra/newview/llinventorymodel.h | 1 + indra/newview/llinventorypanel.cpp | 23 ++ indra/newview/llinventorypanel.h | 1 + indra/newview/llviewerfloaterreg.cpp | 2 + indra/newview/llviewertexteditor.cpp | 11 + .../skins/default/xui/en/inspect_texture.xml | 63 +++++ 10 files changed, 481 insertions(+) create mode 100644 indra/newview/llinspecttexture.cpp create mode 100644 indra/newview/llinspecttexture.h create mode 100644 indra/newview/skins/default/xui/en/inspect_texture.xml (limited to 'indra/newview') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 9eee5338ec..b94a1415a2 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -374,6 +374,7 @@ set(viewer_SOURCE_FILES llinspectgroup.cpp llinspectobject.cpp llinspectremoteobject.cpp + llinspecttexture.cpp llinspecttoast.cpp llinventorybridge.cpp llinventoryfilter.cpp @@ -1014,6 +1015,7 @@ set(viewer_HEADER_FILES llinspectgroup.h llinspectobject.h llinspectremoteobject.h + llinspecttexture.h llinspecttoast.h llinventorybridge.h llinventoryfilter.h diff --git a/indra/newview/llinspecttexture.cpp b/indra/newview/llinspecttexture.cpp new file mode 100644 index 0000000000..cd288e9603 --- /dev/null +++ b/indra/newview/llinspecttexture.cpp @@ -0,0 +1,301 @@ +/** + * @file llinspecttexture.cpp + * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterreg.h" +#include "llinspect.h" +#include "llinspecttexture.h" +#include "llinventoryfunctions.h" +#include "llinventorymodel.h" +#include "lltexturectrl.h" +#include "lltrans.h" +#include "llviewertexturelist.h" + +// ============================================================================ +// LLInspectTexture class +// + +class LLInspectTexture : public LLInspect +{ + friend class LLFloaterReg; +public: + LLInspectTexture(const LLSD& sdKey); + ~LLInspectTexture(); + +public: + void onOpen(const LLSD& sdData) override; + BOOL postBuild() override; + +public: + const LLUUID& getAssetId() const { return mAssetId; } + const LLUUID& getItemId() const { return mItemId; } + +protected: + LLUUID mAssetId; + LLUUID mItemId; // Item UUID relative to gInventoryModel (or null if not displaying an inventory texture) + LLUUID mNotecardId; + LLTextureCtrl* mTextureCtrl = nullptr; + LLTextBox* mTextureName = nullptr; +}; + +LLInspectTexture::LLInspectTexture(const LLSD& sdKey) + : LLInspect(LLSD()) +{ +} + +LLInspectTexture::~LLInspectTexture() +{ +} + +void LLInspectTexture::onOpen(const LLSD& sdData) +{ + // Start fade animation + LLInspect::onOpen(sdData); + + bool fIsAsset = sdData.has("asset_id"); + bool fIsInventory = sdData.has("item_id"); + + // Skip if we're being asked to display the same thing + const LLUUID idAsset = (fIsAsset) ? sdData["asset_id"].asUUID() : LLUUID::null; + const LLUUID idItem = (fIsInventory) ? sdData["item_id"].asUUID() : LLUUID::null; + if ( (getVisible()) && ( ((fIsAsset) && (idAsset == mAssetId)) || ((fIsInventory) && (idItem == mItemId)) ) ) + { + return; + } + + // Position the inspector relative to the mouse cursor + // Similar to how tooltips are positioned [see LLToolTipMgr::createToolTip()] + if (sdData.has("pos")) + LLUI::instance().positionViewNearMouse(this, sdData["pos"]["x"].asInteger(), sdData["pos"]["y"].asInteger()); + else + LLUI::instance().positionViewNearMouse(this); + + std::string strName = sdData["name"].asString(); + if (fIsAsset) + { + mAssetId = idAsset; + mItemId = idItem; // Will be non-null in the case of a notecard + mNotecardId = sdData["notecard_id"].asUUID(); + } + else if (fIsInventory) + { + const LLViewerInventoryItem* pItem = gInventory.getItem(idItem); + if ( (pItem) && (LLAssetType::AT_TEXTURE == pItem->getType()) ) + { + if (strName.empty()) + strName = pItem->getName(); + mAssetId = pItem->getAssetUUID(); + mItemId = idItem; + } + else + { + mAssetId.setNull(); + mItemId.setNull(); + } + mNotecardId = LLUUID::null; + } + + mTextureCtrl->setImageAssetID(mAssetId); + mTextureName->setText(strName); +} + +BOOL LLInspectTexture::postBuild() +{ + mTextureCtrl = getChild("texture_ctrl"); + mTextureName = getChild("texture_name"); + + return TRUE; +} + +// ============================================================================ +// Helper functions +// + +LLToolTip* LLInspectTextureUtil::createInventoryToolTip(LLToolTip::Params p) +{ + const LLSD& sdTooltip = p.create_params; + + LLInventoryType::EType eInvType = (sdTooltip.has("inv_type")) ? (LLInventoryType::EType)sdTooltip["inv_type"].asInteger() : LLInventoryType::IT_NONE; + switch (eInvType) + { + case LLInventoryType::IT_SNAPSHOT: + case LLInventoryType::IT_TEXTURE: + return LLUICtrlFactory::create(p); + case LLInventoryType::IT_CATEGORY: + { + if (sdTooltip.has("item_id")) + { + const LLUUID idCategory = sdTooltip["item_id"].asUUID(); + + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLIsOfAssetType f(LLAssetType::AT_TEXTURE); + gInventory.getDirectDescendentsOf(idCategory, cats, items, f); + + // Exactly one texture found => show the texture tooltip + if (1 == items.size()) + { + p.create_params.getValue()["asset_id"] = items.front()->getAssetUUID(); + return LLUICtrlFactory::create(p); + } + } + + // No or more than one texture found => show default tooltip + return LLUICtrlFactory::create(p); + } + default: + return LLUICtrlFactory::create(p); + } +} + +void LLInspectTextureUtil::registerFloater() +{ + LLFloaterReg::add("inspect_texture", "inspect_texture.xml", &LLFloaterReg::build); +} + +// ============================================================================ +// LLTexturePreviewView helper class +// + +class LLTexturePreviewView : public LLView +{ +public: + LLTexturePreviewView(const LLView::Params& p); + ~LLTexturePreviewView(); + +public: + void draw() override; + +public: + void setImageFromAssetId(const LLUUID& idAsset); + void setImageFromItemId(const LLUUID& idItem); + +protected: + LLPointer m_Image; + S32 mImageBoostLevel = LLGLTexture::BOOST_NONE; + std::string mLoadingText; +}; + + +LLTexturePreviewView::LLTexturePreviewView(const LLView::Params& p) + : LLView(p) +{ + mLoadingText = LLTrans::getString("texture_loading"); +} + +LLTexturePreviewView::~LLTexturePreviewView() +{ + if (m_Image) + { + m_Image->setBoostLevel(mImageBoostLevel); + m_Image = nullptr; + } +} + +void LLTexturePreviewView::draw() +{ + if (m_Image) + { + LLRect rctClient = getLocalRect(); + + gl_rect_2d(rctClient, LLColor4::black); + rctClient.stretch(-2); + if (4 == m_Image->getComponents()) + gl_rect_2d_checkerboard(rctClient); + gl_draw_scaled_image(rctClient.mLeft, rctClient.mBottom, rctClient.getWidth(), rctClient.getHeight(), m_Image); + + bool isLoading = (!m_Image->isFullyLoaded()) && (m_Image->getDiscardLevel() > 0); + if (isLoading) + LLFontGL::getFontSansSerif()->renderUTF8(mLoadingText, 0, llfloor(rctClient.mLeft + 3), llfloor(rctClient.mTop - 25), LLColor4::white, LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::DROP_SHADOW); + m_Image->addTextureStats((isLoading) ? MAX_IMAGE_AREA : (F32)(rctClient.getWidth() * rctClient.getHeight())); + } +} + +void LLTexturePreviewView::setImageFromAssetId(const LLUUID& idAsset) +{ + m_Image = LLViewerTextureManager::getFetchedTexture(idAsset, FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE); + if (m_Image) + { + mImageBoostLevel = m_Image->getBoostLevel(); + m_Image->setBoostLevel(LLGLTexture::BOOST_PREVIEW); + m_Image->forceToSaveRawImage(0); + if ( (!m_Image->isFullyLoaded()) && (!m_Image->hasFetcher()) ) + { + if (m_Image->isInFastCacheList()) + { + m_Image->loadFromFastCache(); + } + gTextureList.forceImmediateUpdate(m_Image); + } + } +} + +void LLTexturePreviewView::setImageFromItemId(const LLUUID& idItem) +{ + const LLViewerInventoryItem* pItem = gInventory.getItem(idItem); + setImageFromAssetId( (pItem) ? pItem->getAssetUUID() : LLUUID::null ); +} + +// ============================================================================ +// LLTextureToolTip class +// + +LLTextureToolTip::LLTextureToolTip(const LLToolTip::Params& p) + : LLToolTip(p) + , mPreviewView(nullptr) + , mPreviewSize(256) +{ + mMaxWidth = llmax(mMaxWidth, mPreviewSize); +} + +LLTextureToolTip::~LLTextureToolTip() +{ +} + +void LLTextureToolTip::initFromParams(const LLToolTip::Params& p) +{ + LLToolTip::initFromParams(p); + + // Create and add the preview control + LLView::Params p_preview; + p_preview.name = "texture_preview"; + LLRect rctPreview; + rctPreview.setOriginAndSize(mPadding, mTextBox->getRect().mTop, mPreviewSize, mPreviewSize); + p_preview.rect = rctPreview; + mPreviewView = LLUICtrlFactory::create(p_preview); + addChild(mPreviewView); + + // Parse the control params + const LLSD& sdTextureParams = p.create_params; + if (sdTextureParams.has("asset_id")) + mPreviewView->setImageFromAssetId(sdTextureParams["asset_id"].asUUID()); + else if (sdTextureParams.has("item_id")) + mPreviewView->setImageFromItemId(sdTextureParams["item_id"].asUUID()); + + snapToChildren(); +} + +// ============================================================================ diff --git a/indra/newview/llinspecttexture.h b/indra/newview/llinspecttexture.h new file mode 100644 index 0000000000..192aafc3b4 --- /dev/null +++ b/indra/newview/llinspecttexture.h @@ -0,0 +1,52 @@ +/** + * @file llinspecttexture.h + * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#pragma once + +#include "lltooltip.h" + +class LLTexturePreviewView; + +namespace LLInspectTextureUtil +{ + LLToolTip* createInventoryToolTip(LLToolTip::Params p); + + // Register with LLFloaterReg + void registerFloater(); +} + +class LLTextureToolTip : public LLToolTip +{ +public: + LLTextureToolTip(const LLToolTip::Params& p); + ~LLTextureToolTip(); + +public: + void initFromParams(const LLToolTip::Params& p) override; + +protected: + LLTexturePreviewView* mPreviewView; + S32 mPreviewSize; +}; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 8b2a1a14f0..edd489f021 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -451,6 +451,31 @@ void LLInventoryModel::getDirectDescendentsOf(const LLUUID& cat_id, items = get_ptr_in_map(mParentChildItemTree, cat_id); } +void LLInventoryModel::getDirectDescendentsOf(const LLUUID& cat_id, cat_array_t& categories, item_array_t& items, LLInventoryCollectFunctor& f) const +{ + if (cat_array_t* categoriesp = get_ptr_in_map(mParentChildCategoryTree, cat_id)) + { + for (LLViewerInventoryCategory* pFolder : *categoriesp) + { + if (f(pFolder, nullptr)) + { + categories.push_back(pFolder); + } + } + } + + if (item_array_t* itemsp = get_ptr_in_map(mParentChildItemTree, cat_id)) + { + for (LLViewerInventoryItem* pItem : *itemsp) + { + if (f(nullptr, pItem)) + { + items.push_back(pItem); + } + } + } +} + LLMD5 LLInventoryModel::hashDirectDescendentNames(const LLUUID& cat_id) const { LLInventoryModel::cat_array_t* cat_array; diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index c4133ff9bb..b03181d646 100644 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -256,6 +256,7 @@ public: void getDirectDescendentsOf(const LLUUID& cat_id, cat_array_t*& categories, item_array_t*& items) const; + void getDirectDescendentsOf(const LLUUID& cat_id, cat_array_t& categories, item_array_t& items, LLInventoryCollectFunctor& f) const; // Compute a hash of direct descendant names (for detecting child name changes) LLMD5 hashDirectDescendentNames(const LLUUID& cat_id) const; diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 6b102c7500..dabe633b8c 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -40,6 +40,7 @@ #include "llfolderviewitem.h" #include "llfloaterimcontainer.h" #include "llimview.h" +#include "llinspecttexture.h" #include "llinventorybridge.h" #include "llinventoryfunctions.h" #include "llinventorymodelbackgroundfetch.h" @@ -1278,6 +1279,28 @@ BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask) return TRUE; } +BOOL LLInventoryPanel::handleToolTip(S32 x, S32 y, MASK mask) +{ + if (const LLFolderViewItem* hover_item_p = (!mFolderRoot.isDead()) ? mFolderRoot.get()->getHoveredItem() : nullptr) + { + if (const LLFolderViewModelItemInventory* vm_item_p = static_cast(hover_item_p->getViewModelItem())) + { + // Copy/pasted from LLView::handleToolTip() + F32 nTimeout = LLToolTipMgr::instance().toolTipVisible() + ? LLUI::getInstance()->mSettingGroups["config"]->getF32("ToolTipFastDelay") + : LLUI::getInstance()->mSettingGroups["config"]->getF32("ToolTipDelay"); + LLToolTipMgr::instance().show(LLToolTip::Params() + .message(hover_item_p->getToolTip()) + .sticky_rect(hover_item_p->calcScreenRect()) + .delay_time(nTimeout) + .create_callback(boost::bind(&LLInspectTextureUtil::createInventoryToolTip, _1)) + .create_params(LLSD().with("inv_type", vm_item_p->getInventoryType()).with("item_id", vm_item_p->getUUID()))); + return TRUE; + } + } + return LLPanel::handleToolTip(x, y, mask); +} + BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 552c61b915..d5dc8cdba6 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -168,6 +168,7 @@ public: void* cargo_data, EAcceptance* accept, std::string& tooltip_msg); + BOOL handleToolTip(S32 x, S32 y, MASK mask) override; // LLUICtrl methods /*virtual*/ void onFocusLost(); /*virtual*/ void onFocusReceived(); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 59654350e4..77a7fd21a8 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -153,6 +153,7 @@ #include "llinspectgroup.h" #include "llinspectobject.h" #include "llinspectremoteobject.h" +#include "llinspecttexture.h" #include "llinspecttoast.h" #include "llmoveview.h" #include "llfloaterimnearbychat.h" @@ -281,6 +282,7 @@ void LLViewerFloaterReg::registerFloaters() LLInspectAvatarUtil::registerFloater(); LLInspectGroupUtil::registerFloater(); LLInspectObjectUtil::registerFloater(); + LLInspectTextureUtil::registerFloater(); LLInspectRemoteObjectUtil::registerFloater(); LLFloaterVoiceVolumeUtil::registerFloater(); LLNotificationsUI::registerFloater(); diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index e2de7ac825..299047d91b 100644 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -36,6 +36,7 @@ #include "llfloatersidepanelcontainer.h" #include "llfloaterworldmap.h" #include "llfocusmgr.h" +#include "llinspecttexture.h" #include "llinventorybridge.h" #include "llinventorydefines.h" #include "llinventorymodel.h" @@ -245,6 +246,16 @@ public: } virtual BOOL handleToolTip(S32 x, S32 y, MASK mask ) { + if (LLAssetType::AT_TEXTURE == mItem->getType()) + { + LLToolTipMgr::instance().show(LLToolTip::Params() + .message(mToolTip) + .create_callback(boost::bind(&LLInspectTextureUtil::createInventoryToolTip, _1)) + .create_params(LLSD().with("inv_type", mItem->getInventoryType()).with("asset_id", mItem->getAssetUUID()))); + + return TRUE; + } + if (!mToolTip.empty()) { LLToolTipMgr::instance().show(mToolTip); diff --git a/indra/newview/skins/default/xui/en/inspect_texture.xml b/indra/newview/skins/default/xui/en/inspect_texture.xml new file mode 100644 index 0000000000..30be90cfa0 --- /dev/null +++ b/indra/newview/skins/default/xui/en/inspect_texture.xml @@ -0,0 +1,63 @@ + + + + + + + -- cgit v1.2.3 From e7a1ac5db84c6ec77053e5115c997236ae6bf0df Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 24 Apr 2023 21:37:24 +0300 Subject: SL-19503 Deleting a thumbnail for folder does not remove thumbnail in viewer --- indra/newview/llviewerinventory.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 8b0d14b3e9..96f0b500a0 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -1377,11 +1377,8 @@ void update_inventory_category( return; } - LLPointer new_cat = new LLViewerInventoryCategory(obj); - new_cat->fromLLSD(updates); - LLSD new_llsd = new_cat->asLLSD(); AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1); - AISAPI::UpdateCategory(cat_id, new_llsd, cr); + AISAPI::UpdateCategory(cat_id, updates, cr); } } -- cgit v1.2.3 From 4c3a7b106429f3ede827fd28acd25cc00fcb8649 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 25 Apr 2023 00:03:42 +0300 Subject: SL-19503 Fix thumbnails not being restored from cache --- indra/newview/llinventorymodel.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 32acd0eb03..873d3e1ccf 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -2638,12 +2638,6 @@ bool LLInventoryModel::loadSkeleton( cat->setUUID(folder_id.asUUID()); cat->setParent(parent_id.asUUID()); - LLSD thumbnail = (*it)["thumbnail"]; - if (thumbnail.isMap()) - { - cat->setThumbnailUUID(thumbnail["asset_id"].asUUID()); - } - LLFolderType::EType preferred_type = LLFolderType::FT_NONE; LLSD type_default = (*it)["type_default"]; if(type_default.isDefined()) @@ -2735,6 +2729,10 @@ bool LLInventoryModel::loadSkeleton( else { cached_ids.insert(tcat->getUUID()); + + // At the moment download does not provide a thumbnail + // uuid, use the one from cache + tcat->setThumbnailUUID(cat->getThumbnailUUID()); } } -- cgit v1.2.3 From 9c2b0c709b3d1cf1a9243853a8df7089e2494057 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 25 Apr 2023 01:34:35 +0300 Subject: SL-19533 Special COF handling --- indra/newview/llaisapi.cpp | 40 +++++++++++++++++++++++ indra/newview/llaisapi.h | 2 ++ indra/newview/llinventorymodelbackgroundfetch.cpp | 6 ++++ indra/newview/llinventorymodelbackgroundfetch.h | 1 + indra/newview/llstartup.cpp | 1 + 5 files changed, 50 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index d39bb57304..117a596cd2 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -592,6 +592,40 @@ void AISAPI::FetchCategoryCategories(const LLUUID &catId, ITEM_TYPE type, bool r EnqueueAISCommand("FetchCategoryCategories", proc); } +/*static*/ +// Will get COF folder, links in it and items those links point to +void AISAPI::FetchCOF(completion_t callback) +{ + std::string cap = getInvCap(); + if (cap.empty()) + { + LL_WARNS("Inventory") << "Inventory cap not found!" << LL_ENDL; + if (callback) + { + callback(LLUUID::null); + } + return; + } + std::string url = cap + std::string("/category/current/links"); + + invokationFn_t getFn = boost::bind( + // Humans ignore next line. It is just a cast to specify which LLCoreHttpUtil::HttpCoroutineAdapter routine overload. + static_cast + //---- + // _1 -> httpAdapter + // _2 -> httpRequest + // _3 -> url + // _4 -> body + // _5 -> httpOptions + // _6 -> httpHeaders + (&LLCoreHttpUtil::HttpCoroutineAdapter::getAndSuspend), _1, _2, _3, _5, _6); + + LLCoprocedureManager::CoProcedure_t proc(boost::bind(&AISAPI::InvokeAISCommandCoro, + _1, getFn, url, LLUUID::null, LLSD(), callback, FETCHCOF)); + + EnqueueAISCommand("FetchCOF", proc); +} + /*static*/ void AISAPI::FetchOrphans(completion_t callback) { @@ -687,6 +721,7 @@ void AISAPI::onUpdateReceived(const std::string& context, const LLSD& update, CO bool is_fetch = (type == FETCHITEM) || (type == FETCHCATEGORYCHILDREN) || (type == FETCHCATEGORYCATEGORIES) + || (type == FETCHCOF) || (type == FETCHORPHANS); // parse update llsd into stuff to do or parse received items. S32 depth = 0; @@ -1095,6 +1130,11 @@ void AISUpdate::parseLink(const LLSD& link_map) mCatDescendentDeltas[parent_id]++; new_link->setComplete(true); } + + if (link_map.has("_embedded")) + { + parseEmbedded(link_map["_embedded"], S32_MAX); + } } else { diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 4e1c6e5a7d..0ca0144d7b 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -59,6 +59,7 @@ public: static void FetchCategoryChildren(const LLUUID &catId, ITEM_TYPE type = AISAPI::ITEM_TYPE::INVENTORY, bool recursive = false, completion_t callback = completion_t(), S32 depth = 0); static void FetchCategoryChildren(const std::string &identifier, bool recursive = false, completion_t callback = completion_t(), S32 depth = 0); static void FetchCategoryCategories(const LLUUID &catId, ITEM_TYPE type = AISAPI::ITEM_TYPE::INVENTORY, bool recursive = false, completion_t callback = completion_t(), S32 depth = 0); + static void FetchCOF(completion_t callback = completion_t()); static void FetchOrphans(completion_t callback = completion_t() ); static void CopyLibraryCategory(const LLUUID& sourceId, const LLUUID& destId, bool copySubfolders, completion_t callback = completion_t()); @@ -76,6 +77,7 @@ private: FETCHITEM, FETCHCATEGORYCHILDREN, FETCHCATEGORYCATEGORIES, + FETCHCOF, FETCHORPHANS, } COMMAND_TYPE; diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index bfb5ad9d12..f56532ff8c 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -391,6 +391,12 @@ void LLInventoryModelBackgroundFetch::findLostItems() gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); } +void LLInventoryModelBackgroundFetch::fetchCOF() +{ + // Will get COF folder, links in it and items those links point to + AISAPI::FetchCOF(); +} + void LLInventoryModelBackgroundFetch::setAllFoldersFetched() { if (mRecursiveInventoryFetchStarted && diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index 1881322e7a..db2d6db323 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -65,6 +65,7 @@ public: bool inventoryFetchInProgress() const; void findLostItems(); + void fetchCOF(); void incrFetchCount(S32 fetching); void incrFetchFolderCount(S32 fetching); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index a1f2753ada..161beaff19 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1898,6 +1898,7 @@ bool idle_startup() } LLInventoryModelBackgroundFetch::instance().start(); + LLInventoryModelBackgroundFetch::instance().fetchCOF(); gInventory.createCommonSystemCategories(); // It's debatable whether this flag is a good idea - sets all -- cgit v1.2.3 From 154ab03bf8a5dacc3128718d1f15160f0cbe2b33 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 25 Apr 2023 03:38:26 +0300 Subject: SL-19533 Special COF handling #2 --- indra/newview/llappearancemgr.cpp | 33 ++++++++++++++++------- indra/newview/llappearancemgr.h | 1 + indra/newview/llinventorymodelbackgroundfetch.cpp | 18 +------------ indra/newview/llinventorymodelbackgroundfetch.h | 5 ++-- indra/newview/llstartup.cpp | 3 +-- 5 files changed, 28 insertions(+), 32 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 9115d7e5c2..297403fc6c 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4561,18 +4561,31 @@ protected: nullary_func_t mCallable; }; +void callAfterCOFFetch(nullary_func_t cb) +{ + if (AISAPI::isAvailable()) + { + AISAPI::FetchCOF([cb](const LLUUID& id) { cb(); }); + } + else + { + LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); + callAfterCategoryFetch(cat_id, cb); + } +} + void callAfterCategoryFetch(const LLUUID& cat_id, nullary_func_t cb) { - CallAfterCategoryFetchStage1 *stage1 = new CallAfterCategoryFetchStage1(cat_id, cb); - stage1->startFetch(); - if (stage1->isFinished()) - { - stage1->done(); - } - else - { - gInventory.addObserver(stage1); - } + CallAfterCategoryFetchStage1* stage1 = new CallAfterCategoryFetchStage1(cat_id, cb); + stage1->startFetch(); + if (stage1->isFinished()) + { + stage1->done(); + } + else + { + gInventory.addObserver(stage1); + } } void add_wearable_type_counts(const uuid_vec_t& ids, diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index cf953d21ac..f6aa30d865 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -338,6 +338,7 @@ public: LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id,const std::string& name); // Invoke a given callable after category contents are fully fetched. +void callAfterCOFFetch(nullary_func_t cb); void callAfterCategoryFetch(const LLUUID& cat_id, nullary_func_t cb); // Wear all items in a uuid vector. diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index f56532ff8c..277ddb16ba 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -354,17 +354,7 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& id, bool recursive) void LLInventoryModelBackgroundFetch::scheduleFolderFetch(const LLUUID& cat_id, bool forced) { - if (AISAPI::isAvailable()) - { - if (mFetchFolderQueue.empty() || mFetchFolderQueue.back().mUUID != cat_id) - { - // On AIS make sure root goes to the top and follow up recursive - // fetches, not individual requests - mFetchFolderQueue.push_back(FetchQueueInfo(cat_id, forced ? FT_FORCED : FT_DEFAULT)); - gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); - } - } - else if (mFetchFolderQueue.empty() || mFetchFolderQueue.front().mUUID != cat_id) + if (mFetchFolderQueue.empty() || mFetchFolderQueue.front().mUUID != cat_id) { // Specific folder requests go to front of queue. mFetchFolderQueue.push_front(FetchQueueInfo(cat_id, forced ? FT_FORCED : FT_DEFAULT)); @@ -391,12 +381,6 @@ void LLInventoryModelBackgroundFetch::findLostItems() gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); } -void LLInventoryModelBackgroundFetch::fetchCOF() -{ - // Will get COF folder, links in it and items those links point to - AISAPI::FetchCOF(); -} - void LLInventoryModelBackgroundFetch::setAllFoldersFetched() { if (mRecursiveInventoryFetchStarted && diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index db2d6db323..363d04486d 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -64,9 +64,8 @@ public: bool inventoryFetchCompleted() const; bool inventoryFetchInProgress() const; - void findLostItems(); - void fetchCOF(); - void incrFetchCount(S32 fetching); + void findLostItems(); + void incrFetchCount(S32 fetching); void incrFetchFolderCount(S32 fetching); bool isBulkFetchProcessingComplete() const; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 161beaff19..3a96a7bced 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1898,7 +1898,6 @@ bool idle_startup() } LLInventoryModelBackgroundFetch::instance().start(); - LLInventoryModelBackgroundFetch::instance().fetchCOF(); gInventory.createCommonSystemCategories(); // It's debatable whether this flag is a good idea - sets all @@ -2161,7 +2160,7 @@ bool idle_startup() gAgentWearables.notifyLoadingStarted(); gAgent.setOutfitChosen(TRUE); gAgentWearables.sendDummyAgentWearablesUpdate(); - callAfterCategoryFetch(LLAppearanceMgr::instance().getCOF(), set_flags_and_update_appearance); + callAfterCOFFetch(set_flags_and_update_appearance); } display_startup(); -- cgit v1.2.3 From c008d3e030ca4019e24de9a4831dc36727555fd2 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 25 Apr 2023 12:25:15 +0300 Subject: SL-19533 Reduce inventory fetch stalls --- indra/newview/llaisapi.cpp | 11 ++++++++++- indra/newview/llaisapi.h | 6 ++++++ indra/newview/llinventoryfilter.cpp | 12 ++++++------ indra/newview/llinventorymodel.cpp | 3 ++- indra/newview/llinventorymodelbackgroundfetch.cpp | 9 +++++++-- 5 files changed, 31 insertions(+), 10 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 117a596cd2..7c293fcf63 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -771,7 +771,7 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht LL_DEBUGS("Inventory") << "Request type: " << (S32)type << " \nRequest target: " << targetId - << " \nElapsed time ince request: " << elapsed_time + << " \nElapsed time since request: " << elapsed_time << " \nstatus: " << status.toULong() << LL_ENDL; } else @@ -904,6 +904,8 @@ AISUpdate::AISUpdate(const LLSD& update, bool fetch, S32 depth) : mFetch(fetch) , mFetchDepth(depth) { + mTimer.setTimerExpirySec(debugLoggingEnabled("Inventory") ? EXPIRY_SECONDS_DEBUG : EXPIRY_SECONDS_LIVE); + mTimer.start(); parseUpdate(update); } @@ -1279,6 +1281,13 @@ void AISUpdate::parseDescendentCount(const LLUUID& category_id, const LLSD& embe void AISUpdate::parseEmbedded(const LLSD& embedded, S32 depth) { + if (mTimer.hasExpired()) + { + llcoro::suspend(); + LLCoros::checkStop(); + mTimer.setTimerExpirySec(debugLoggingEnabled("Inventory") ? EXPIRY_SECONDS_DEBUG : EXPIRY_SECONDS_LIVE); + } + if (embedded.has("links")) // _embedded in a category { parseEmbeddedLinks(embedded["links"]); diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 0ca0144d7b..1969448627 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -124,6 +124,11 @@ public: private: void clearParseResults(); + // Debug is very log-heavy, give it more time or it will take forever to process + // Todo: find a way to make throttle static isntead of per-request + const F32 EXPIRY_SECONDS_DEBUG = 1.f; + const F32 EXPIRY_SECONDS_LIVE = 0.01f; + typedef std::map uuid_int_map_t; uuid_int_map_t mCatDescendentDeltas; uuid_int_map_t mCatDescendentsKnown; @@ -144,6 +149,7 @@ private: uuid_list_t mCategoryIds; bool mFetch; S32 mFetchDepth; + LLTimer mTimer; }; #endif diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index d8e7b8ca67..5d6c3be168 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -195,11 +195,6 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const return true; } - if(!checkAgainstFilterThumbnails(folder_id)) - { - return false; - } - // when applying a filter, matching folders get their contents downloaded first // but make sure we are not interfering with pre-download if (isNotDefault() @@ -207,7 +202,7 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const && !LLInventoryModelBackgroundFetch::instance().inventoryFetchInProgress()) { LLViewerInventoryCategory* cat = gInventory.getCategory(folder_id); - if (!cat || (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN)) + if ((!cat && folder_id.notNull()) || (cat && cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN)) { // At the moment background fetch only cares about VERSION_UNKNOWN, // so do not check isCategoryComplete that compares descendant count @@ -215,6 +210,11 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const } } + if (!checkAgainstFilterThumbnails(folder_id)) + { + return false; + } + // Marketplace folder filtering const U32 filterTypes = mFilterOps.mFilterTypes; const U32 marketplace_filter = FILTERTYPE_MARKETPLACE_ACTIVE | FILTERTYPE_MARKETPLACE_INACTIVE | diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 873d3e1ccf..48539f4748 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -4681,7 +4681,6 @@ LLPointer LLInventoryModel::validate() const } else if (count_under_root > 1) { - LL_WARNS("Inventory") << "Fatal inventory corruption: system folder type has excess copies under root, type " << ft << " count " << count_under_root << LL_ENDL; validation_info->mDuplicateRequiredSystemFolders.insert(folder_type); if (!is_automatic && folder_type != LLFolderType::FT_SETTINGS) { @@ -4689,6 +4688,7 @@ LLPointer LLInventoryModel::validate() const // outfits, trash and other non-automatic folders. validation_info->mFatalSystemDuplicate++; fatal_errs++; + LL_WARNS("Inventory") << "Fatal inventory corruption: system folder type has excess copies under root, type " << ft << " count " << count_under_root << LL_ENDL; } else { @@ -4697,6 +4697,7 @@ LLPointer LLInventoryModel::validate() const // Exception: FT_SETTINGS is not automatic, but only deserves a warning. validation_info->mWarnings["non_fatal_system_duplicate_under_root"]++; warning_count++; + LL_WARNS("Inventory") << "System folder type has excess copies under root, type " << ft << " count " << count_under_root << LL_ENDL; } } if (count_elsewhere > 0) diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 277ddb16ba..c5fb40409f 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -555,6 +555,8 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() } static LLCachedControl ais_pool(gSavedSettings, "PoolSizeAIS", 20); + // Don't have too many requests at once + // Reserve one request for actions outside of fetch (like renames) const U32 max_concurrent_fetches = llmax(1, ais_pool - 1); if (mFetchCount >= max_concurrent_fetches) @@ -562,6 +564,9 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() return; } + // Don't fire all requests at once + const U32 max_requests_this_run = llmin(mFetchCount + 5, max_concurrent_fetches); + // Don't loop for too long (in case of large, fully loaded inventory) F64 curent_time = LLTimer::getTotalSeconds(); const F64 max_time = LLStartUp::getStartupState() > STATE_WEARABLES_WAIT @@ -570,7 +575,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() const F64 end_time = curent_time + max_time; S32 last_fetch_count = mFetchCount; - while (!mFetchFolderQueue.empty() && mFetchCount < max_concurrent_fetches && curent_time < end_time) + while (!mFetchFolderQueue.empty() && mFetchCount < max_requests_this_run && curent_time < end_time) { const FetchQueueInfo & fetch_info(mFetchFolderQueue.front()); bulkFetchViaAis(fetch_info); @@ -581,7 +586,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() // Ideally we shouldn't fetch items if recursive fetch isn't done, // but there is a chance some request will start timeouting and recursive // fetch will get stuck on a signle folder, don't block item fetch in such case - while (!mFetchItemQueue.empty() && mFetchCount < max_concurrent_fetches && curent_time < end_time) + while (!mFetchItemQueue.empty() && mFetchCount < max_requests_this_run && curent_time < end_time) { const FetchQueueInfo& fetch_info(mFetchItemQueue.front()); bulkFetchViaAis(fetch_info); -- cgit v1.2.3 From 8166a8d8d480d63c645ead7cd81b1b0afda225b4 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 25 Apr 2023 13:10:51 +0300 Subject: SL-19533 Fix a fetch blunder --- indra/newview/llaisapi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 7c293fcf63..e16029f063 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -462,7 +462,7 @@ void AISAPI::FetchCategoryChildren(const LLUUID &catId, ITEM_TYPE type, bool rec } else { - depth = llmax(depth, 50); + depth = llmin(depth, 50); } url += "?depth=" + std::to_string(depth); @@ -515,7 +515,7 @@ void AISAPI::FetchCategoryChildren(const std::string &identifier, bool recursive } else { - depth = llmax(depth, 50); + depth = llmin(depth, 50); } url += "?depth=" + std::to_string(depth); @@ -566,7 +566,7 @@ void AISAPI::FetchCategoryCategories(const LLUUID &catId, ITEM_TYPE type, bool r } else { - depth = llmax(depth, 50); + depth = llmin(depth, 50); } url += "?depth=" + std::to_string(depth); -- cgit v1.2.3 From c1a3c7b239dcde347403c818d4ad1eeedf45d280 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 25 Apr 2023 13:51:23 +0300 Subject: SL-19533 Special COF handling #3 --- indra/newview/llappearancemgr.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 297403fc6c..d79525ec62 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4563,13 +4563,16 @@ protected: void callAfterCOFFetch(nullary_func_t cb) { - if (AISAPI::isAvailable()) + LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); + LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); + if (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN && AISAPI::isAvailable()) { + // Assume that we have no relevant cache. Fetch cof, and items cof's links point to. AISAPI::FetchCOF([cb](const LLUUID& id) { cb(); }); } else { - LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); + // Assume that cache is present. Process like a normal folder. callAfterCategoryFetch(cat_id, cb); } } -- cgit v1.2.3 From 7c3452fe44eb6a1a0b7a8b927d0b9620142e88d1 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Tue, 25 Apr 2023 17:29:46 +0300 Subject: SL-19409 FIXED Received items panel in multiple inventory windows does not sync New tag status between windows --- indra/newview/llpanelmarketplaceinboxinventory.cpp | 34 +++++++++++++++++++++- indra/newview/llpanelmarketplaceinboxinventory.h | 11 ++++++- 2 files changed, 43 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp index 7a6631448b..e13bd0412d 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.cpp +++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp @@ -62,10 +62,13 @@ LLInboxInventoryPanel::LLInboxInventoryPanel(const LLInboxInventoryPanel::Params : LLInventoryPanel(p) { LLInboxNewItemsStorage::getInstance()->load(); + LLInboxNewItemsStorage::getInstance()->addInboxPanel(this); } LLInboxInventoryPanel::~LLInboxInventoryPanel() -{} +{ + LLInboxNewItemsStorage::getInstance()->removeInboxPanel(this); +} void LLInboxInventoryPanel::initFromParams(const LLInventoryPanel::Params& params) { @@ -108,6 +111,21 @@ LLFolderViewItem * LLInboxInventoryPanel::createFolderViewItem(LLInvFVBridge * b return LLUICtrlFactory::create(params); } +void LLInboxInventoryPanel::onRemoveItemFreshness(const LLUUID& item_id) +{ + LLInboxFolderViewFolder* inbox_folder_view = dynamic_cast(getFolderByID(item_id)); + if(inbox_folder_view) + { + inbox_folder_view->setFresh(false); + } + + LLInboxFolderViewItem* inbox_item_view = dynamic_cast(getItemByID(item_id)); + if(inbox_item_view) + { + inbox_item_view->setFresh(false); + } +} + // // LLInboxFolderViewFolder Implementation // @@ -340,4 +358,18 @@ void LLInboxNewItemsStorage::load() } } } + +void LLInboxNewItemsStorage::removeItem(const LLUUID& id) +{ + mNewItemsIDs.erase(id); + + //notify inbox panels + for (auto inbox : mInboxPanels) + { + if(inbox) + { + inbox->onRemoveItemFreshness(id); + } + } +} // eof diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index 3e508e801b..9eef5f209c 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -49,6 +49,8 @@ public: void initFromParams(const LLInventoryPanel::Params&); LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge, bool allow_drop); LLFolderViewItem * createFolderViewItem(LLInvFVBridge * bridge); + + void onRemoveItemFreshness(const LLUUID& item_id); }; @@ -77,6 +79,7 @@ public: void deFreshify(); bool isFresh() const { return mFresh; } + void setFresh(bool is_fresh) { mFresh = is_fresh; } protected: bool mFresh; @@ -108,6 +111,7 @@ public: void deFreshify(); bool isFresh() const { return mFresh; } + void setFresh(bool is_fresh) { mFresh = is_fresh; } protected: bool mFresh; @@ -125,11 +129,16 @@ public: void load(); void addFreshItem(const LLUUID& id) { mNewItemsIDs.insert(id); } - void removeItem(const LLUUID& id) { mNewItemsIDs.erase(id); } + void removeItem(const LLUUID& id); bool isItemFresh(const LLUUID& id) { return (mNewItemsIDs.find(id) != mNewItemsIDs.end()); } + void addInboxPanel(LLInboxInventoryPanel* inbox) { mInboxPanels.insert(inbox); } + void removeInboxPanel(LLInboxInventoryPanel* inbox) { mInboxPanels.erase(inbox); } + private: std::set mNewItemsIDs; + + std::set mInboxPanels; }; #endif //LL_INBOXINVENTORYPANEL_H -- cgit v1.2.3 From 1491eea28c9355ba3d69ce566ae5263e69db3daf Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 25 Apr 2023 22:47:31 +0300 Subject: SL-19652 Folder fetch dupplicate protection and over limit handling --- indra/newview/llinventorymodelbackgroundfetch.cpp | 44 ++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 4a9b471a47..0bb56c7d0c 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -408,6 +408,7 @@ void LLInventoryModelBackgroundFetch::bulkFetch() // *TODO: Think I'd like to get a shared pointer to this and share it // among all the folder requests. uuid_vec_t recursive_cats; + uuid_vec_t all_cats; // dupplicate avoidance LLSD folder_request_body; LLSD folder_request_body_lib; @@ -436,7 +437,7 @@ void LLInventoryModelBackgroundFetch::bulkFetch() { const LLViewerInventoryCategory * cat(gInventory.getCategory(cat_id)); - if (cat) + if (cat && std::find(all_cats.begin(), all_cats.end(), cat_id) == all_cats.end()) { if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion()) { @@ -477,6 +478,7 @@ void LLInventoryModelBackgroundFetch::bulkFetch() { recursive_cats.push_back(cat_id); } + all_cats.push_back(cat_id); } else { @@ -796,6 +798,46 @@ void BGFolderHttpHandler::processFailure(LLCore::HttpStatus status, LLCore::Http << LLCoreHttpUtil::responseToString(response) << "]" << LL_ENDL; // Could use a 404 test here to try to detect revoked caps... + + if(status == LLCore::HttpStatus(HTTP_FORBIDDEN)) + { + // too large, split into two, assume that this isn't the library + const std::string url(gAgent.getRegionCapability("FetchInventoryDescendents2")); + S32 size = mRequestSD["folders"].size(); + + if (!gDisconnected && !LLApp::isExiting() && !url.empty() && size > 1) + { + LLSD folders; + uuid_vec_t recursive_cats; + LLSD::array_iterator iter = mRequestSD["folders"].beginArray(); + LLSD::array_iterator end = mRequestSD["folders"].endArray(); + while (iter != end) + { + folders.append(*iter); + LLUUID fodler_id = iter->get("folder_id").asUUID(); + if (std::find(mRecursiveCatUUIDs.begin(), mRecursiveCatUUIDs.end(), fodler_id) != mRecursiveCatUUIDs.end()) + { + recursive_cats.push_back(fodler_id); + } + if (folders.size() == (S32)(size / 2)) + { + LLSD request_body; + request_body["folders"] = folders; + LLCore::HttpHandler::ptr_t handler(new BGFolderHttpHandler(request_body, recursive_cats)); + gInventory.requestPost(false, url, request_body, handler, "Inventory Folder"); + recursive_cats.clear(); + folders.clear(); + } + iter++; + } + + LLSD request_body; + request_body["folders"] = folders; + LLCore::HttpHandler::ptr_t handler(new BGFolderHttpHandler(request_body, recursive_cats)); + gInventory.requestPost(false, url, request_body, handler, "Inventory Folder"); + return; + } + } // This was originally the request retry logic for the inventory // request which tested on HTTP_INTERNAL_ERROR status. This -- cgit v1.2.3 From 895ce616ea71b2001ec4e826b80310da80db9a0e Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 6 Apr 2023 21:19:44 +0300 Subject: SL-19652 Fixed 'working' cursor flicker --- indra/newview/llinventorypanel.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 8029486d6f..2799cb4cdf 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1268,8 +1268,10 @@ BOOL LLInventoryPanel::handleHover(S32 x, S32 y, MASK mask) { BOOL handled = LLView::handleHover(x, y, mask); if(handled) - { - ECursorType cursor = getWindow()->getCursor(); + { + // getCursor gets current cursor, setCursor sets next cursor + // check that children didn't set own 'next' cursor + ECursorType cursor = getWindow()->getNextCursor(); if (LLInventoryModelBackgroundFetch::instance().folderFetchActive() && cursor == UI_CURSOR_ARROW) { // replace arrow cursor with arrow and hourglass cursor -- cgit v1.2.3 From 0091fa0cbaba034da09d42d49f68c63f2cc7df14 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 26 Apr 2023 03:53:05 +0300 Subject: SL-19583 Uniform risizing for combination inventory view --- indra/newview/llaisapi.cpp | 21 ++-- indra/newview/llaisapi.h | 1 + indra/newview/llinventorygallery.h | 1 + indra/newview/llpanelmaininventory.cpp | 47 +++++++-- indra/newview/llpanelmaininventory.h | 3 +- .../skins/default/xui/en/panel_main_inventory.xml | 114 ++++++++------------- 6 files changed, 98 insertions(+), 89 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index e16029f063..6d13a06c54 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -924,6 +924,16 @@ void AISUpdate::clearParseResults() mCategoryIds.clear(); } +void AISUpdate::checkTimeout() +{ + if (mTimer.hasExpired()) + { + llcoro::suspend(); + LLCoros::checkStop(); + mTimer.setTimerExpirySec(debugLoggingEnabled("Inventory") ? EXPIRY_SECONDS_DEBUG : EXPIRY_SECONDS_LIVE); + } +} + void AISUpdate::parseUpdate(const LLSD& update) { clearParseResults(); @@ -1281,12 +1291,7 @@ void AISUpdate::parseDescendentCount(const LLUUID& category_id, const LLSD& embe void AISUpdate::parseEmbedded(const LLSD& embedded, S32 depth) { - if (mTimer.hasExpired()) - { - llcoro::suspend(); - LLCoros::checkStop(); - mTimer.setTimerExpirySec(debugLoggingEnabled("Inventory") ? EXPIRY_SECONDS_DEBUG : EXPIRY_SECONDS_LIVE); - } + checkTimeout(); if (embedded.has("links")) // _embedded in a category { @@ -1408,6 +1413,8 @@ void AISUpdate::parseEmbeddedCategories(const LLSD& categories, S32 depth) void AISUpdate::doUpdate() { + checkTimeout(); + // Do version/descendant accounting. for (std::map::const_iterator catit = mCatDescendentDeltas.begin(); catit != mCatDescendentDeltas.end(); ++catit) @@ -1571,6 +1578,8 @@ void AISUpdate::doUpdate() } } + checkTimeout(); + gInventory.notifyObservers(); } diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 1969448627..6afbbbd16e 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -123,6 +123,7 @@ public: void doUpdate(); private: void clearParseResults(); + void checkTimeout(); // Debug is very log-heavy, give it more time or it will take forever to process // Todo: find a way to make throttle static isntead of per-request diff --git a/indra/newview/llinventorygallery.h b/indra/newview/llinventorygallery.h index 1760535524..2cf038b7d8 100644 --- a/indra/newview/llinventorygallery.h +++ b/indra/newview/llinventorygallery.h @@ -128,6 +128,7 @@ public: bool hasDescendents(const LLUUID& cat_id); bool hasVisibleItems(); void handleModifiedFilter(); + LLScrollContainer* getScrollableContainer() { return mScrollPanel; } protected: diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 98099dd407..7cd6d7cb82 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -266,6 +266,8 @@ BOOL LLPanelMainInventory::postBuild() comb_gallery_filter.markDefault(); mCombinationGalleryPanel->setRootChangedCallback(boost::bind(&LLPanelMainInventory::onCombinationRootChanged, this, true)); + mCombinationScroller = getChild("combination_scroller"); + initListCommandsHandlers(); const std::string texture_upload_cost_str = std::to_string(LLAgentBenefitsMgr::current().getTextureUploadCost()); @@ -928,6 +930,7 @@ void LLPanelMainInventory::draw() mActivePanel->setSortOrder(order); mResortActivePanel = false; } + LLPanel::draw(); updateItemcountText(); updateCombinationVisibility(); @@ -1503,7 +1506,7 @@ void LLPanelMainInventory::toggleViewMode() getChild("default_inventory_panel")->setVisible(!mSingleFolderMode); getChild("single_folder_inventory")->setVisible(mSingleFolderMode && isListViewMode()); getChild("gallery_view_inventory")->setVisible(mSingleFolderMode && isGalleryViewMode()); - getChild("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); + getChild("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); getChild("nav_buttons")->setVisible(mSingleFolderMode); getChild("view_mode_btn")->setImageOverlay(mSingleFolderMode ? getString("default_mode_btn") : getString("single_folder_mode_btn")); @@ -2214,19 +2217,41 @@ void LLPanelMainInventory::updateCombinationVisibility() { if(mSingleFolderMode && isCombinationViewMode()) { - bool is_gallery_empty = !mCombinationGalleryPanel->hasVisibleItems(); - bool show_inv_pane = mCombinationInventoryPanel->hasVisibleItems() || is_gallery_empty || mForceShowInvLayout; - getChild("comb_gallery_layout")->setVisible(!is_gallery_empty); - getChild("comb_inventory_layout")->setVisible(show_inv_pane); - mCombinationInventoryPanel->getRootFolder()->setForceArrange(!show_inv_pane); - if(mCombinationInventoryPanel->hasVisibleItems()) + LLRect inner_rect = mCombinationInventoryPanel->getScrollableContainer()->getScrolledViewRect(); + LLRect inv_rect = mCombinationInventoryPanel->getRect(); + inv_rect.mBottom = 0; + inv_rect.mRight = inv_rect.mLeft + inner_rect.getWidth(); + if (!mCombinationGalleryPanel->hasVisibleItems() || mCombinationInventoryPanel->hasVisibleItems()) + { + inv_rect.mTop = inv_rect.mBottom + inner_rect.getHeight(); + } + else { - mForceShowInvLayout = false; + inv_rect.mTop = inv_rect.mBottom; } - if(is_gallery_empty) + + inner_rect = mCombinationGalleryPanel->getScrollableContainer()->getScrolledViewRect(); + LLRect galery_rect = mCombinationGalleryPanel->getRect(); + galery_rect.mBottom = inv_rect.mTop; + if (mCombinationGalleryPanel->hasVisibleItems()) { - mCombinationGalleryPanel->handleModifiedFilter(); + mCombinationGalleryPanel->setVisible(true); + galery_rect.mTop = galery_rect.mBottom + inner_rect.getHeight(); } + else + { + mCombinationGalleryPanel->setVisible(false); + galery_rect.mTop = galery_rect.mBottom; + } + + LLRect scroller_rect = mCombinationScroller->getRect(); + scroller_rect.mBottom = 0; + scroller_rect.mTop = scroller_rect.mBottom + inv_rect.getHeight() + galery_rect.getHeight(); + scroller_rect.mRight = scroller_rect.mLeft + llmax(inv_rect.getWidth(), galery_rect.getWidth()); + + mCombinationScroller->setRect(scroller_rect); + mCombinationGalleryPanel->handleReshape(galery_rect, false); + mCombinationInventoryPanel->handleReshape(inv_rect, false); getActivePanel()->getRootFolder(); } @@ -2293,7 +2318,7 @@ void LLPanelMainInventory::setViewMode(EViewModeType mode) getChild("single_folder_inventory")->setVisible(mSingleFolderMode && isListViewMode()); getChild("gallery_view_inventory")->setVisible(mSingleFolderMode && isGalleryViewMode()); - getChild("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); + getChild("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); if(isListViewMode()) { diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index e5b9ba929d..8e7ad776b0 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -143,8 +143,6 @@ protected: static BOOL filtersVisible(void* user_data); void onClearSearch(); - static void onFoldersByName(void *user_data); - static BOOL checkFoldersByName(void *user_data); static BOOL incrementalFind(LLFolderViewItem* first_item, const char *find_text, BOOL backward); void onFilterSelected(); @@ -196,6 +194,7 @@ private: LLInventorySingleFolderPanel* mCombinationInventoryPanel; LLInventoryGallery* mCombinationGalleryPanel; + LLView* mCombinationScroller; boost::signals2::connection mListViewRootUpdatedConnection; boost::signals2::connection mGalleryRootUpdatedConnection; diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 5bc0113367..f772c1fde2 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -327,7 +327,7 @@ follows="all" layout="topleft" /> - - - - + + + + + + + - - - - - - - - - + -- cgit v1.2.3 From 697d3be3c9906a6d578a961710fc43816b6adeae Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 27 Apr 2023 01:30:57 +0300 Subject: SL-19533 Implement subset variant of children request --- indra/newview/llaisapi.cpp | 158 ++++++++++++++---- indra/newview/llaisapi.h | 13 +- indra/newview/llappearancemgr.cpp | 13 +- indra/newview/llinventorymodelbackgroundfetch.cpp | 195 +++++++++++++++++++--- indra/newview/llinventorymodelbackgroundfetch.h | 6 +- 5 files changed, 320 insertions(+), 65 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 6d13a06c54..c17b246ef1 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -51,6 +51,10 @@ std::list AISAPI::sPostponedQuery; const S32 MAX_SIMULTANEOUS_COROUTINES = 2048; +// AIS3 allows '*' requests, but in reality those will be cut at some point +// Specify own depth to be able to anticipate it and mark folders as incomplete +const S32 MAX_FOLDER_DEPTH_REQUEST = 50; + //------------------------------------------------------------------------- /*static*/ bool AISAPI::isAvailable() @@ -458,11 +462,11 @@ void AISAPI::FetchCategoryChildren(const LLUUID &catId, ITEM_TYPE type, bool rec { // can specify depth=*, but server side is going to cap requests // and reject everything 'over the top',. - depth = 50; + depth = MAX_FOLDER_DEPTH_REQUEST; } else { - depth = llmin(depth, 50); + depth = llmin(depth, MAX_FOLDER_DEPTH_REQUEST); } url += "?depth=" + std::to_string(depth); @@ -511,11 +515,11 @@ void AISAPI::FetchCategoryChildren(const std::string &identifier, bool recursive { // can specify depth=*, but server side is going to cap requests // and reject everything 'over the top',. - depth = 50; + depth = MAX_FOLDER_DEPTH_REQUEST; } else { - depth = llmin(depth, 50); + depth = llmin(depth, MAX_FOLDER_DEPTH_REQUEST); } url += "?depth=" + std::to_string(depth); @@ -562,11 +566,11 @@ void AISAPI::FetchCategoryCategories(const LLUUID &catId, ITEM_TYPE type, bool r { // can specify depth=*, but server side is going to cap requests // and reject everything 'over the top',. - depth = 50; + depth = MAX_FOLDER_DEPTH_REQUEST; } else { - depth = llmin(depth, 50); + depth = llmin(depth, MAX_FOLDER_DEPTH_REQUEST); } url += "?depth=" + std::to_string(depth); @@ -592,6 +596,83 @@ void AISAPI::FetchCategoryCategories(const LLUUID &catId, ITEM_TYPE type, bool r EnqueueAISCommand("FetchCategoryCategories", proc); } +void AISAPI::FetchCategorySubset(const LLUUID& catId, + const uuid_vec_t specificChildren, + ITEM_TYPE type, + bool recursive, + completion_t callback, + S32 depth) +{ + std::string cap = (type == INVENTORY) ? getInvCap() : getLibCap(); + if (cap.empty()) + { + LL_WARNS("Inventory") << "Inventory cap not found!" << LL_ENDL; + if (callback) + { + callback(LLUUID::null); + } + return; + } + if (specificChildren.empty()) + { + LL_WARNS("Inventory") << "Empty request!" << LL_ENDL; + if (callback) + { + callback(LLUUID::null); + } + return; + } + // category/any_folder_id/children?depth=*&children=child_id1,child_id2,child_id3 + std::string url = cap + std::string("/category/") + catId.asString() + "/children"; + + if (recursive) + { + depth = MAX_FOLDER_DEPTH_REQUEST; + } + else + { + depth = llmin(depth, MAX_FOLDER_DEPTH_REQUEST); + } + + uuid_vec_t::const_iterator iter = specificChildren.begin(); + uuid_vec_t::const_iterator end = specificChildren.end(); + + url += "?depth=" + std::to_string(depth) + "&children=" + iter->asString(); + iter++; + + while (iter != end) + { + url += "," + iter->asString(); + iter++; + } + + const S32 MAX_URL_LENGH = 2000; // RFC documentation specifies a maximum length of 2048 + if (url.length() > MAX_URL_LENGH) + { + LL_WARNS("Inventory") << "Request url is too long, url: " << url << LL_ENDL; + } + + invokationFn_t getFn = boost::bind( + // Humans ignore next line. It is just a cast to specify which LLCoreHttpUtil::HttpCoroutineAdapter routine overload. + static_cast + //---- + // _1 -> httpAdapter + // _2 -> httpRequest + // _3 -> url + // _4 -> body + // _5 -> httpOptions + // _6 -> httpHeaders + (&LLCoreHttpUtil::HttpCoroutineAdapter::getAndSuspend), _1, _2, _3, _5, _6); + + // get doesn't use body, can pass additional data + LLSD body; + body["depth"] = depth; + LLCoprocedureManager::CoProcedure_t proc(boost::bind(&AISAPI::InvokeAISCommandCoro, + _1, getFn, url, catId, body, callback, FETCHCATEGORYSUBSET)); + + EnqueueAISCommand("FetchCategorySubset", proc); +} + /*static*/ // Will get COF folder, links in it and items those links point to void AISAPI::FetchCOF(completion_t callback) @@ -710,7 +791,7 @@ void AISAPI::onIdle(void *userdata) } /*static*/ -void AISAPI::onUpdateReceived(const std::string& context, const LLSD& update, COMMAND_TYPE type, const LLSD& request_body) +void AISAPI::onUpdateReceived(const LLSD& update, COMMAND_TYPE type, const LLSD& request_body) { LLTimer timer; if ( (type == UPDATECATEGORY || type == UPDATEITEM) @@ -718,18 +799,8 @@ void AISAPI::onUpdateReceived(const std::string& context, const LLSD& update, CO { dump_sequential_xml(gAgentAvatarp->getFullname() + "_ais_update", update); } - bool is_fetch = (type == FETCHITEM) - || (type == FETCHCATEGORYCHILDREN) - || (type == FETCHCATEGORYCATEGORIES) - || (type == FETCHCOF) - || (type == FETCHORPHANS); - // parse update llsd into stuff to do or parse received items. - S32 depth = 0; - if (is_fetch && request_body.has("depth")) - { - depth = request_body["depth"].asInteger(); - } - AISUpdate ais_update(update, is_fetch, depth); + + AISUpdate ais_update(update, type, request_body); ais_update.doUpdate(); // execute the updates in the appropriate order. LL_DEBUGS("Inventory", "AIS3") << "Elapsed processing: " << timer.getElapsedTimeF32() << LL_ENDL; } @@ -833,7 +904,7 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht } LL_DEBUGS("Inventory", "AIS3") << "Result: " << result << LL_ENDL; - onUpdateReceived("AISCommand", result, type, body); + onUpdateReceived(result, type, body); if (callback && !callback.empty()) { @@ -900,10 +971,22 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht } //------------------------------------------------------------------------- -AISUpdate::AISUpdate(const LLSD& update, bool fetch, S32 depth) -: mFetch(fetch) -, mFetchDepth(depth) +AISUpdate::AISUpdate(const LLSD& update, AISAPI::COMMAND_TYPE type, const LLSD& request_body) +: mType(type) { + mFetch = (type == AISAPI::FETCHITEM) + || (type == AISAPI::FETCHCATEGORYCHILDREN) + || (type == AISAPI::FETCHCATEGORYCATEGORIES) + || (type == AISAPI::FETCHCATEGORYSUBSET) + || (type == AISAPI::FETCHCOF) + || (type == AISAPI::FETCHORPHANS); + // parse update llsd into stuff to do or parse received items. + mFetchDepth = MAX_FOLDER_DEPTH_REQUEST; + if (mFetch && request_body.has("depth")) + { + mFetchDepth = request_body["depth"].asInteger(); + } + mTimer.setTimerExpirySec(debugLoggingEnabled("Inventory") ? EXPIRY_SECONDS_DEBUG : EXPIRY_SECONDS_LIVE); mTimer.start(); parseUpdate(update); @@ -1023,17 +1106,26 @@ void AISUpdate::parseContent(const LLSD& update) { if (update.has("linked_id")) { - parseLink(update); + parseLink(update, mFetchDepth); } else if (update.has("item_id")) { parseItem(update); } - if (update.has("category_id")) - { - parseCategory(update, mFetchDepth); - } + if (mType == AISAPI::FETCHCATEGORYSUBSET) + { + // initial category is incomplete, don't process it, + // go for content instead + if (update.has("_embedded")) + { + parseEmbedded(update["_embedded"], mFetchDepth - 1); + } + } + else if (update.has("category_id")) + { + parseCategory(update, mFetchDepth); + } else { if (update.has("_embedded")) @@ -1089,7 +1181,7 @@ void AISUpdate::parseItem(const LLSD& item_map) } } -void AISUpdate::parseLink(const LLSD& link_map) +void AISUpdate::parseLink(const LLSD& link_map, S32 depth) { LLUUID item_id = link_map["item_id"].asUUID(); LLPointer new_link(new LLViewerInventoryItem); @@ -1145,7 +1237,7 @@ void AISUpdate::parseLink(const LLSD& link_map) if (link_map.has("_embedded")) { - parseEmbedded(link_map["_embedded"], S32_MAX); + parseEmbedded(link_map["_embedded"], depth); } } else @@ -1295,7 +1387,7 @@ void AISUpdate::parseEmbedded(const LLSD& embedded, S32 depth) if (embedded.has("links")) // _embedded in a category { - parseEmbeddedLinks(embedded["links"]); + parseEmbeddedLinks(embedded["links"], depth); } if (embedded.has("items")) // _embedded in a category { @@ -1328,7 +1420,7 @@ void AISUpdate::parseUUIDArray(const LLSD& content, const std::string& name, uui } } -void AISUpdate::parseEmbeddedLinks(const LLSD& links) +void AISUpdate::parseEmbeddedLinks(const LLSD& links, S32 depth) { for(LLSD::map_const_iterator linkit = links.beginMap(), linkend = links.endMap(); @@ -1342,7 +1434,7 @@ void AISUpdate::parseEmbeddedLinks(const LLSD& links) } else { - parseLink(link_map); + parseLink(link_map, depth); } } } diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 6afbbbd16e..691c5db592 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -59,11 +59,11 @@ public: static void FetchCategoryChildren(const LLUUID &catId, ITEM_TYPE type = AISAPI::ITEM_TYPE::INVENTORY, bool recursive = false, completion_t callback = completion_t(), S32 depth = 0); static void FetchCategoryChildren(const std::string &identifier, bool recursive = false, completion_t callback = completion_t(), S32 depth = 0); static void FetchCategoryCategories(const LLUUID &catId, ITEM_TYPE type = AISAPI::ITEM_TYPE::INVENTORY, bool recursive = false, completion_t callback = completion_t(), S32 depth = 0); + static void FetchCategorySubset(const LLUUID& catId, const uuid_vec_t specificChildren, ITEM_TYPE type = AISAPI::ITEM_TYPE::INVENTORY, bool recursive = false, completion_t callback = completion_t(), S32 depth = 0); static void FetchCOF(completion_t callback = completion_t()); static void FetchOrphans(completion_t callback = completion_t() ); static void CopyLibraryCategory(const LLUUID& sourceId, const LLUUID& destId, bool copySubfolders, completion_t callback = completion_t()); -private: typedef enum { COPYINVENTORY, SLAMFOLDER, @@ -77,10 +77,12 @@ private: FETCHITEM, FETCHCATEGORYCHILDREN, FETCHCATEGORYCATEGORIES, + FETCHCATEGORYSUBSET, FETCHCOF, FETCHORPHANS, } COMMAND_TYPE; +private: static const std::string INVENTORY_CAP_NAME; static const std::string LIBRARY_CAP_NAME; @@ -89,7 +91,7 @@ private: static void EnqueueAISCommand(const std::string &procName, LLCoprocedureManager::CoProcedure_t proc); static void onIdle(void *userdata); // launches postponed AIS commands - static void onUpdateReceived(const std::string& context, const LLSD& update, COMMAND_TYPE type, const LLSD& request_body); + static void onUpdateReceived(const LLSD& update, COMMAND_TYPE type, const LLSD& request_body); static std::string getInvCap(); static std::string getLibCap(); @@ -105,17 +107,17 @@ private: class AISUpdate { public: - AISUpdate(const LLSD& update, bool fetch, S32 depth); + AISUpdate(const LLSD& update, AISAPI::COMMAND_TYPE type, const LLSD& request_body); void parseUpdate(const LLSD& update); void parseMeta(const LLSD& update); void parseContent(const LLSD& update); void parseUUIDArray(const LLSD& content, const std::string& name, uuid_list_t& ids); - void parseLink(const LLSD& link_map); + void parseLink(const LLSD& link_map, S32 depth); void parseItem(const LLSD& link_map); void parseCategory(const LLSD& link_map, S32 depth); void parseDescendentCount(const LLUUID& category_id, const LLSD& embedded); void parseEmbedded(const LLSD& embedded, S32 depth); - void parseEmbeddedLinks(const LLSD& links); + void parseEmbeddedLinks(const LLSD& links, S32 depth); void parseEmbeddedItems(const LLSD& items); void parseEmbeddedCategories(const LLSD& categories, S32 depth); void parseEmbeddedItem(const LLSD& item); @@ -151,6 +153,7 @@ private: bool mFetch; S32 mFetchDepth; LLTimer mTimer; + AISAPI::COMMAND_TYPE mType; }; #endif diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index d79525ec62..4133470973 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4568,7 +4568,18 @@ void callAfterCOFFetch(nullary_func_t cb) if (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN && AISAPI::isAvailable()) { // Assume that we have no relevant cache. Fetch cof, and items cof's links point to. - AISAPI::FetchCOF([cb](const LLUUID& id) { cb(); }); + AISAPI::FetchCOF([cb](const LLUUID& id) + { + cb(); + LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); + LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); + if (cat) + { + cat->setFetching(LLViewerInventoryCategory::FETCH_NONE); + } + }); + // Mark it so that background fetch won't request it if it didn't already + cat->setFetching(LLViewerInventoryCategory::FETCH_RECURSIVE); } else { diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index c5fb40409f..b8fdfab98a 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -299,7 +299,7 @@ void LLInventoryModelBackgroundFetch::start(const LLUUID& id, bool recursive) // Not only root folder can be massive, but // most system folders will be requested independently // so request root folder and content separately - mFetchFolderQueue.push_front(FetchQueueInfo(gInventory.getRootFolderID(), FT_CONTENT_RECURSIVE)); + mFetchFolderQueue.push_front(FetchQueueInfo(gInventory.getRootFolderID(), FT_FOLDER_AND_CONTENT)); } else { @@ -455,10 +455,67 @@ void ais_simple_item_callback(const LLUUID& inv_id) LLInventoryModelBackgroundFetch::instance().incrFetchCount(-1); } -void LLInventoryModelBackgroundFetch::onAISFolderCalback(const LLUUID &request_id, const LLUUID &response_id, EFetchType recursion) +void LLInventoryModelBackgroundFetch::onAISContentCalback( + const LLUUID& request_id, + const uuid_vec_t& content_ids, + const LLUUID& response_id, + EFetchType fetch_type) { + // Don't push_front on failure - there is a chance it was fired from inside bulkFetchViaAis incrFetchFolderCount(-1); - std::list::const_iterator found = std::find(mExpectedFolderIds.begin() , mExpectedFolderIds.end(), request_id); + + uuid_vec_t::const_iterator folder_iter = content_ids.begin(); + uuid_vec_t::const_iterator folder_end = content_ids.end(); + while (folder_iter != folder_end) + { + std::list::const_iterator found = std::find(mExpectedFolderIds.begin(), mExpectedFolderIds.end(), *folder_iter); + if (found != mExpectedFolderIds.end()) + { + mExpectedFolderIds.erase(found); + } + + LLViewerInventoryCategory* cat(gInventory.getCategory(*folder_iter)); + if (cat) + { + cat->setFetching(LLViewerInventoryCategory::FETCH_NONE); + } + if (response_id.isNull()) + { + // Failed to fetch, get it individually + mFetchFolderQueue.push_back(FetchQueueInfo(*folder_iter, FT_RECURSIVE)); + } + else + { + // push descendant back to verify they are fetched fully (ex: didn't encounter depth limit) + LLInventoryModel::cat_array_t* categories(NULL); + LLInventoryModel::item_array_t* items(NULL); + gInventory.getDirectDescendentsOf(*folder_iter, categories, items); + if (categories) + { + for (LLInventoryModel::cat_array_t::const_iterator it = categories->begin(); + it != categories->end(); + ++it) + { + mFetchFolderQueue.push_back(FetchQueueInfo((*it)->getUUID(), FT_RECURSIVE)); + } + } + } + + folder_iter++; + } + + if (!mFetchFolderQueue.empty()) + { + mBackgroundFetchActive = true; + mFolderFetchActive = true; + gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + } +} +void LLInventoryModelBackgroundFetch::onAISFolderCalback(const LLUUID &request_id, const LLUUID &response_id, EFetchType fetch_type) +{ + // Don't push_front on failure - there is a chance it was fired from inside bulkFetchViaAis + incrFetchFolderCount(-1); + std::list::const_iterator found = std::find(mExpectedFolderIds.begin(), mExpectedFolderIds.end(), request_id); if (found != mExpectedFolderIds.end()) { mExpectedFolderIds.erase(found); @@ -480,32 +537,34 @@ void LLInventoryModelBackgroundFetch::onAISFolderCalback(const LLUUID &request_i if (response_id.isNull()) // Failure { LL_DEBUGS(LOG_INV , "AIS3") << "Failure response for folder " << request_id << LL_ENDL; - if (recursion == FT_RECURSIVE) + if (fetch_type == FT_RECURSIVE) { // A full recursive request failed. // Try requesting folder and nested content separately - mBackgroundFetchActive = true; - mFolderFetchActive = true; - mFetchFolderQueue.push_front(FetchQueueInfo(request_id, FT_CONTENT_RECURSIVE)); - gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + mFetchFolderQueue.push_back(FetchQueueInfo(request_id, FT_FOLDER_AND_CONTENT)); } - else if (recursion == FT_CONTENT_RECURSIVE) + else if (fetch_type == FT_FOLDER_AND_CONTENT) { LL_WARNS() << "Failed to download folder: " << request_id << " Requesting known content separately" << LL_ENDL; - request_descendants = true; + mFetchFolderQueue.push_back(FetchQueueInfo(request_id, FT_CONTENT_RECURSIVE)); } } else { - if (recursion == FT_CONTENT_RECURSIVE || recursion == FT_RECURSIVE) + if (fetch_type == FT_RECURSIVE) { - // Got the folder, now recursively request content + // Got the folder and content, now verify content // Request content even for FT_RECURSIVE in case of changes, failures // or if depth limit gets imlemented. // This shouldn't redownload folders if they already have version request_descendants = true; LL_DEBUGS(LOG_INV, "AIS3") << "Got folder " << request_id << ". Requesting content" << LL_ENDL; } + else if (fetch_type == FT_FOLDER_AND_CONTENT) + { + // readd folder for content request + mFetchFolderQueue.push_front(FetchQueueInfo(request_id, FT_CONTENT_RECURSIVE)); + } else { LL_DEBUGS(LOG_INV, "AIS3") << "Got folder " << request_id << "." << LL_ENDL; @@ -524,17 +583,18 @@ void LLInventoryModelBackgroundFetch::onAISFolderCalback(const LLUUID &request_i it != categories->end(); ++it) { - mFetchFolderQueue.push_front(FetchQueueInfo((*it)->getUUID(), FT_RECURSIVE)); - } - if (!mFetchFolderQueue.empty()) - { - mBackgroundFetchActive = true; - mFolderFetchActive = true; - gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + mFetchFolderQueue.push_back(FetchQueueInfo((*it)->getUUID(), FT_RECURSIVE)); } } } + if (!mFetchFolderQueue.empty()) + { + mBackgroundFetchActive = true; + mFolderFetchActive = true; + gIdleCallbacks.addFunction(&LLInventoryModelBackgroundFetch::backgroundFetchCB, NULL); + } + // done LLViewerInventoryCategory * cat(gInventory.getCategory(request_id)); if (cat) @@ -555,9 +615,9 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() } static LLCachedControl ais_pool(gSavedSettings, "PoolSizeAIS", 20); - // Don't have too many requests at once + // Don't have too many requests at once, AIS throttles // Reserve one request for actions outside of fetch (like renames) - const U32 max_concurrent_fetches = llmax(1, ais_pool - 1); + const U32 max_concurrent_fetches = llclamp(ais_pool - 1, 1, 50); if (mFetchCount >= max_concurrent_fetches) { @@ -663,10 +723,97 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc LLViewerInventoryCategory * cat(gInventory.getCategory(cat_id)); if (cat) { - if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion() || fetch_info.mFetchType == FT_FORCED) + if (fetch_info.mFetchType == FT_CONTENT_RECURSIVE) + { + // fetch content only, ignore cat itself + uuid_vec_t children; + LLInventoryModel::cat_array_t* categories(NULL); + LLInventoryModel::item_array_t* items(NULL); + gInventory.getDirectDescendentsOf(cat_id, categories, items); + + LLViewerInventoryCategory::EFetchType target_state = + fetch_info.mFetchType > FT_CONTENT_RECURSIVE + ? LLViewerInventoryCategory::FETCH_RECURSIVE + : LLViewerInventoryCategory::FETCH_NORMAL; + // technically limit is 'as many as you can put into url', but for now stop at 10 + const S32 batch_limit = 10; + bool content_done = true; + + for (LLInventoryModel::cat_array_t::iterator it = categories->begin(); + it != categories->end(); + ++it) + { + LLViewerInventoryCategory* child_cat = (*it); + if (LLViewerInventoryCategory::VERSION_UNKNOWN != child_cat->getVersion() + || child_cat->getFetching() >= target_state) + { + // push it back to verify everything inside is fetched + mFetchFolderQueue.push_back(FetchQueueInfo((*it)->getUUID(), FT_RECURSIVE)); + continue; + } + + if (child_cat->getPreferredType() == LLFolderType::FT_MARKETPLACE_LISTINGS) + { + // special case + content_done = false; + if (children.empty()) + { + // fetch marketplace alone + children.push_back(child_cat->getUUID()); + mExpectedFolderIds.push_back(child_cat->getUUID()); + child_cat->setFetching(target_state); + break; + } + else + { + // fetch marketplace alone next run + continue; + } + } + + children.push_back(child_cat->getUUID()); + mExpectedFolderIds.push_back(child_cat->getUUID()); + child_cat->setFetching(target_state); + + if (children.size() >= batch_limit) + { + content_done = false; + break; + } + } + + if (!children.empty()) + { + // increment before call in case of immediate callback + incrFetchFolderCount(1); + + EFetchType type = fetch_info.mFetchType; + LLUUID cat_id = cat->getUUID(); // need a copy for lambda + AISAPI::completion_t cb = [cat_id, children, type](const LLUUID& response_id) + { + LLInventoryModelBackgroundFetch::instance().onAISContentCalback(cat_id, children, response_id, type); + }; + + AISAPI::ITEM_TYPE item_type = AISAPI::INVENTORY; + if (ALEXANDRIA_LINDEN_ID == cat->getOwnerID()) + { + item_type = AISAPI::LIBRARY; + } + + AISAPI::FetchCategorySubset(cat_id, children, item_type, true, cb, 0); + } + + if (!content_done) + { + // send it back to get the rest + mFetchFolderQueue.push_back(FetchQueueInfo(cat_id, FT_CONTENT_RECURSIVE)); + } + } + else if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion() + || fetch_info.mFetchType == FT_FORCED) { LLViewerInventoryCategory::EFetchType target_state = - fetch_info.mFetchType >= FT_CONTENT_RECURSIVE + fetch_info.mFetchType > FT_CONTENT_RECURSIVE ? LLViewerInventoryCategory::FETCH_RECURSIVE : LLViewerInventoryCategory::FETCH_NORMAL; // start again if we did a non-recursive fetch before @@ -711,7 +858,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc } } } - } // else? + } // else try to fetch folder either way? } } else diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index 363d04486d..1fd7426312 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -82,8 +82,9 @@ protected: typedef enum { FT_DEFAULT = 0, - FT_FORCED, // request even if already loaded + FT_FORCED, // request non-recursively even if already loaded FT_CONTENT_RECURSIVE, // request content recursively + FT_FOLDER_AND_CONTENT, // request content recursively FT_RECURSIVE, // request everything recursively } EFetchType; struct FetchQueueInfo @@ -100,7 +101,8 @@ protected: }; typedef std::deque fetch_queue_t; - void onAISFolderCalback(const LLUUID &request_id, const LLUUID &response_id, EFetchType recursion); + void onAISContentCalback(const LLUUID& request_id, const uuid_vec_t &content_ids, const LLUUID& response_id, EFetchType fetch_type); + void onAISFolderCalback(const LLUUID &request_id, const LLUUID &response_id, EFetchType fetch_type); void bulkFetchViaAis(); void bulkFetchViaAis(const FetchQueueInfo& fetch_info); void bulkFetch(); -- cgit v1.2.3 From 30b87c11e92f1917aec95662f95a8e5a136c937e Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Thu, 27 Apr 2023 18:23:56 +0300 Subject: SL-19583 WIP fixed the issue with item selection and restored filter handling for gallery panel --- indra/newview/llpanelmaininventory.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 7cd6d7cb82..b9099bbebf 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -2217,26 +2217,31 @@ void LLPanelMainInventory::updateCombinationVisibility() { if(mSingleFolderMode && isCombinationViewMode()) { - LLRect inner_rect = mCombinationInventoryPanel->getScrollableContainer()->getScrolledViewRect(); + if (!mCombinationGalleryPanel->hasVisibleItems()) + { + mCombinationGalleryPanel->handleModifiedFilter(); + } LLRect inv_rect = mCombinationInventoryPanel->getRect(); + LLRect inv_inner_rect = mCombinationInventoryPanel->getScrollableContainer()->getScrolledViewRect(); + LLRect galery_rect = mCombinationGalleryPanel->getRect(); + LLRect inner_galery_rect = mCombinationGalleryPanel->getScrollableContainer()->getScrolledViewRect(); + inv_rect.mBottom = 0; - inv_rect.mRight = inv_rect.mLeft + inner_rect.getWidth(); + inv_rect.mRight = inv_rect.mLeft + inv_inner_rect.getWidth(); if (!mCombinationGalleryPanel->hasVisibleItems() || mCombinationInventoryPanel->hasVisibleItems()) { - inv_rect.mTop = inv_rect.mBottom + inner_rect.getHeight(); + inv_rect.mTop = inv_rect.mBottom + inv_inner_rect.getHeight(); } else { inv_rect.mTop = inv_rect.mBottom; } - inner_rect = mCombinationGalleryPanel->getScrollableContainer()->getScrolledViewRect(); - LLRect galery_rect = mCombinationGalleryPanel->getRect(); galery_rect.mBottom = inv_rect.mTop; if (mCombinationGalleryPanel->hasVisibleItems()) { mCombinationGalleryPanel->setVisible(true); - galery_rect.mTop = galery_rect.mBottom + inner_rect.getHeight(); + galery_rect.mTop = galery_rect.mBottom + inner_galery_rect.getHeight(); } else { @@ -2244,16 +2249,9 @@ void LLPanelMainInventory::updateCombinationVisibility() galery_rect.mTop = galery_rect.mBottom; } - LLRect scroller_rect = mCombinationScroller->getRect(); - scroller_rect.mBottom = 0; - scroller_rect.mTop = scroller_rect.mBottom + inv_rect.getHeight() + galery_rect.getHeight(); - scroller_rect.mRight = scroller_rect.mLeft + llmax(inv_rect.getWidth(), galery_rect.getWidth()); - - mCombinationScroller->setRect(scroller_rect); + mCombinationScroller->reshape(llmax(inv_rect.getWidth(), galery_rect.getWidth()), inv_rect.getHeight() + galery_rect.getHeight(), true); mCombinationGalleryPanel->handleReshape(galery_rect, false); mCombinationInventoryPanel->handleReshape(inv_rect, false); - - getActivePanel()->getRootFolder(); } } -- cgit v1.2.3 From 7bb564496997e26a4c9770cb509955d0a22d1617 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 27 Apr 2023 20:23:13 +0300 Subject: SL-19533 Subset fetch fixes --- indra/newview/llaisapi.cpp | 2 ++ indra/newview/llinventorymodelbackgroundfetch.cpp | 28 ++++++++++++++++------- indra/newview/llinventorymodelbackgroundfetch.h | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index c17b246ef1..e63d77cea3 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -916,6 +916,8 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht case COPYLIBRARYCATEGORY: case FETCHCATEGORYCATEGORIES: case FETCHCATEGORYCHILDREN: + case FETCHCATEGORYSUBSET: + case FETCHCOF: if (result.has("category_id")) { id = result["category_id"]; diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index b8fdfab98a..3a2120750b 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -731,10 +731,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc LLInventoryModel::item_array_t* items(NULL); gInventory.getDirectDescendentsOf(cat_id, categories, items); - LLViewerInventoryCategory::EFetchType target_state = - fetch_info.mFetchType > FT_CONTENT_RECURSIVE - ? LLViewerInventoryCategory::FETCH_RECURSIVE - : LLViewerInventoryCategory::FETCH_NORMAL; + LLViewerInventoryCategory::EFetchType target_state = LLViewerInventoryCategory::FETCH_RECURSIVE; // technically limit is 'as many as you can put into url', but for now stop at 10 const S32 batch_limit = 10; bool content_done = true; @@ -747,8 +744,6 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc if (LLViewerInventoryCategory::VERSION_UNKNOWN != child_cat->getVersion() || child_cat->getFetching() >= target_state) { - // push it back to verify everything inside is fetched - mFetchFolderQueue.push_back(FetchQueueInfo((*it)->getUUID(), FT_RECURSIVE)); continue; } @@ -759,6 +754,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc if (children.empty()) { // fetch marketplace alone + // Should it actually be fetched as FT_FOLDER_AND_CONTENT? children.push_back(child_cat->getUUID()); mExpectedFolderIds.push_back(child_cat->getUUID()); child_cat->setFetching(target_state); @@ -803,7 +799,23 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc AISAPI::FetchCategorySubset(cat_id, children, item_type, true, cb, 0); } - if (!content_done) + if (content_done) + { + // This will have a bit of overlap with onAISContentCalback, + // but something else might have dowloaded folders, so verify + // every child that is complete has it's children done as well + for (LLInventoryModel::cat_array_t::iterator it = categories->begin(); + it != categories->end(); + ++it) + { + LLViewerInventoryCategory* child_cat = (*it); + if (LLViewerInventoryCategory::VERSION_UNKNOWN != child_cat->getVersion()) + { + mFetchFolderQueue.push_back(FetchQueueInfo(child_cat->getUUID(), FT_RECURSIVE)); + } + } + } + else { // send it back to get the rest mFetchFolderQueue.push_back(FetchQueueInfo(cat_id, FT_CONTENT_RECURSIVE)); @@ -844,7 +856,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc else { // Already fetched, check if anything inside needs fetching - if (fetch_info.mFetchType >= FT_CONTENT_RECURSIVE) + if (fetch_info.mFetchType == FT_RECURSIVE) { LLInventoryModel::cat_array_t * categories(NULL); LLInventoryModel::item_array_t * items(NULL); diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h index 1fd7426312..e7be265a3d 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.h +++ b/indra/newview/llinventorymodelbackgroundfetch.h @@ -84,7 +84,7 @@ protected: FT_DEFAULT = 0, FT_FORCED, // request non-recursively even if already loaded FT_CONTENT_RECURSIVE, // request content recursively - FT_FOLDER_AND_CONTENT, // request content recursively + FT_FOLDER_AND_CONTENT, // request folder, then content recursively FT_RECURSIVE, // request everything recursively } EFetchType; struct FetchQueueInfo -- cgit v1.2.3 From 377f177a8667702eee12414fb5534fd6732da1d2 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 27 Apr 2023 21:32:17 +0300 Subject: SL-19533 Removed per-run limit Doesn't seem to work like expected and I never get more than 7-9 requests running total --- indra/newview/llinventorymodelbackgroundfetch.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 3a2120750b..5b8ee6e244 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -624,9 +624,6 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() return; } - // Don't fire all requests at once - const U32 max_requests_this_run = llmin(mFetchCount + 5, max_concurrent_fetches); - // Don't loop for too long (in case of large, fully loaded inventory) F64 curent_time = LLTimer::getTotalSeconds(); const F64 max_time = LLStartUp::getStartupState() > STATE_WEARABLES_WAIT @@ -635,7 +632,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() const F64 end_time = curent_time + max_time; S32 last_fetch_count = mFetchCount; - while (!mFetchFolderQueue.empty() && mFetchCount < max_requests_this_run && curent_time < end_time) + while (!mFetchFolderQueue.empty() && mFetchCount < max_concurrent_fetches && curent_time < end_time) { const FetchQueueInfo & fetch_info(mFetchFolderQueue.front()); bulkFetchViaAis(fetch_info); @@ -646,7 +643,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis() // Ideally we shouldn't fetch items if recursive fetch isn't done, // but there is a chance some request will start timeouting and recursive // fetch will get stuck on a signle folder, don't block item fetch in such case - while (!mFetchItemQueue.empty() && mFetchCount < max_requests_this_run && curent_time < end_time) + while (!mFetchItemQueue.empty() && mFetchCount < max_concurrent_fetches && curent_time < end_time) { const FetchQueueInfo& fetch_info(mFetchItemQueue.front()); bulkFetchViaAis(fetch_info); -- cgit v1.2.3 From 9349a9b5d4ccb21f195e5c156d897836399fd11b Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 28 Apr 2023 00:18:46 +0300 Subject: SL-19533 More children per subset fetch request --- indra/newview/llinventorymodelbackgroundfetch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 5b8ee6e244..5f7950df08 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -730,7 +730,7 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc LLViewerInventoryCategory::EFetchType target_state = LLViewerInventoryCategory::FETCH_RECURSIVE; // technically limit is 'as many as you can put into url', but for now stop at 10 - const S32 batch_limit = 10; + const S32 batch_limit = 20; bool content_done = true; for (LLInventoryModel::cat_array_t::iterator it = categories->begin(); -- cgit v1.2.3 From 4bfcf182d7a961d8ebfe17b453e54cfac26347ce Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 28 Apr 2023 19:34:26 +0300 Subject: SL-19533 Fetch stall prevention #2 --- indra/newview/llaisapi.cpp | 15 +++++++++++++++ indra/newview/llaisapi.h | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index e63d77cea3..951860e39d 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -1550,6 +1550,7 @@ void AISUpdate::doUpdate() } // CREATE CATEGORIES + const S32 MAX_UPDATE_BACKLOG = 50; // stall prevention for (deferred_category_map_t::const_iterator create_it = mCategoriesCreated.begin(); create_it != mCategoriesCreated.end(); ++create_it) { @@ -1558,6 +1559,13 @@ void AISUpdate::doUpdate() gInventory.updateCategory(new_category, LLInventoryObserver::CREATE); LL_DEBUGS("Inventory") << "created category " << category_id << LL_ENDL; + + // fetching can receive massive amount of items and fodlers + if (gInventory.getChangedIDs().size() > MAX_UPDATE_BACKLOG) + { + gInventory.notifyObservers(); + checkTimeout(); + } } // UPDATE CATEGORIES @@ -1612,6 +1620,13 @@ void AISUpdate::doUpdate() // case this is create. LL_DEBUGS("Inventory") << "created item " << item_id << LL_ENDL; gInventory.updateItem(new_item, LLInventoryObserver::CREATE); + + // fetching can receive massive amount of items and fodlers + if (gInventory.getChangedIDs().size() > MAX_UPDATE_BACKLOG) + { + gInventory.notifyObservers(); + checkTimeout(); + } } // UPDATE ITEMS diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 691c5db592..6270a34081 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -130,7 +130,7 @@ private: // Debug is very log-heavy, give it more time or it will take forever to process // Todo: find a way to make throttle static isntead of per-request const F32 EXPIRY_SECONDS_DEBUG = 1.f; - const F32 EXPIRY_SECONDS_LIVE = 0.01f; + const F32 EXPIRY_SECONDS_LIVE = 0.008f; typedef std::map uuid_int_map_t; uuid_int_map_t mCatDescendentDeltas; -- cgit v1.2.3 From 80bfc56ff070614fee5b353056076ebed90f9039 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Fri, 28 Apr 2023 19:51:00 +0300 Subject: SL-19583 force reshape inventory panel when changing root in combination view --- indra/newview/llpanelmaininventory.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index b9099bbebf..4d6ff63f94 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -2211,6 +2211,9 @@ void LLPanelMainInventory::onCombinationRootChanged(bool gallery_clicked) } mForceShowInvLayout = false; updateTitle(); + + //force update scroll container + mCombinationInventoryPanel->reshape(getChild("combination_view_inventory")->getRect().getWidth(), 1, true); } void LLPanelMainInventory::updateCombinationVisibility() @@ -2250,8 +2253,8 @@ void LLPanelMainInventory::updateCombinationVisibility() } mCombinationScroller->reshape(llmax(inv_rect.getWidth(), galery_rect.getWidth()), inv_rect.getHeight() + galery_rect.getHeight(), true); - mCombinationGalleryPanel->handleReshape(galery_rect, false); - mCombinationInventoryPanel->handleReshape(inv_rect, false); + mCombinationGalleryPanel->setShape(galery_rect, false); + mCombinationInventoryPanel->setShape(inv_rect, false); } } -- cgit v1.2.3 From 03c263a1cdd88ec5967e751cba8640edf9896e51 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 28 Apr 2023 23:37:34 +0300 Subject: SL-19533 Fix 'fetching' state timeout --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llaisapi.cpp | 3 ++- indra/newview/llaisapi.h | 1 + indra/newview/llinventorymodelbackgroundfetch.cpp | 6 ++++-- indra/newview/llviewerinventory.cpp | 11 +++++++++-- 5 files changed, 27 insertions(+), 5 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index a2a1b3f117..43d3f63a34 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -15283,6 +15283,17 @@ Value 1 + BatchSizeAIS3 + + Comment + Amount of folder ais packs into category subset request + Persist + 1 + Type + S32 + Value + 20 + PoolSizeAIS Comment diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index 951860e39d..b09b8ec517 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -46,6 +46,7 @@ //========================================================================= const std::string AISAPI::INVENTORY_CAP_NAME("InventoryAPIv3"); const std::string AISAPI::LIBRARY_CAP_NAME("LibraryAPIv3"); +const S32 AISAPI::HTTP_TIMEOUT = 180; std::list AISAPI::sPostponedQuery; @@ -823,7 +824,7 @@ void AISAPI::InvokeAISCommandCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t ht LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest()); LLCore::HttpHeaders::ptr_t httpHeaders; - httpOptions->setTimeout(180); + httpOptions->setTimeout(HTTP_TIMEOUT); LL_DEBUGS("Inventory") << "Request url: " << url << LL_ENDL; diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 6270a34081..973c82a847 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -38,6 +38,7 @@ class AISAPI { public: + static const S32 HTTP_TIMEOUT; typedef enum { INVENTORY, LIBRARY diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 5f7950df08..8f1012868f 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -729,10 +729,12 @@ void LLInventoryModelBackgroundFetch::bulkFetchViaAis(const FetchQueueInfo& fetc gInventory.getDirectDescendentsOf(cat_id, categories, items); LLViewerInventoryCategory::EFetchType target_state = LLViewerInventoryCategory::FETCH_RECURSIVE; - // technically limit is 'as many as you can put into url', but for now stop at 10 - const S32 batch_limit = 20; bool content_done = true; + // Top limit is 'as many as you can put into url' + static LLCachedControl ais_batch(gSavedSettings, "BatchSizeAIS3", 20); + S32 batch_limit = llclamp(ais_batch(), 1, 40); + for (LLInventoryModel::cat_array_t::iterator it = categories->begin(); it != categories->end(); ++it) diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 96f0b500a0..80e4f5f6d5 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -690,9 +690,16 @@ void LLViewerInventoryCategory::setFetching(LLViewerInventoryCategory::EFetchTyp { if (mDescendentsRequested.hasExpired() || (mFetching == FETCH_NONE)) { - const F32 FETCH_TIMER_EXPIRY = 30.0f; mDescendentsRequested.reset(); - mDescendentsRequested.setTimerExpirySec(FETCH_TIMER_EXPIRY); + if (AISAPI::isAvailable()) + { + mDescendentsRequested.setTimerExpirySec(AISAPI::HTTP_TIMEOUT); + } + else + { + const F32 FETCH_TIMER_EXPIRY = 30.0f; + mDescendentsRequested.setTimerExpirySec(FETCH_TIMER_EXPIRY); + } } mFetching = fetching; } -- cgit v1.2.3 From 002ff88a130b16f03e26e159f7ea5f38782b16b6 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Tue, 2 May 2023 15:22:21 +0300 Subject: SL-19650 don't rebuild views right after initialising panel --- indra/newview/llinventorypanel.cpp | 14 +++++++++----- indra/newview/llinventorypanel.h | 2 ++ 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 2c7c6d2056..c8c9d6c351 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -907,7 +907,10 @@ void LLInventoryPanel::initializeViews(F64 max_time) gIdleCallbacks.addFunction(idle, this); - openStartFolderOrMyInventory(); + if(mParams.open_first_folder) + { + openStartFolderOrMyInventory(); + } // Special case for new user login if (gAgent.isFirstLogin()) @@ -2098,10 +2101,11 @@ void LLInventorySingleFolderPanel::setSelectCallback(const boost::function folder_view; Optional folder; Optional item; + Optional open_first_folder; // All item and folder views will be initialized on init if true (default) // Will initialize on visibility change otherwise. @@ -126,6 +127,7 @@ public: show_root_folder("show_root_folder", false), allow_drop_on_root("allow_drop_on_root", true), use_marketplace_folders("use_marketplace_folders", false), + open_first_folder("open_first_folder", true), scroll("scroll"), accepts_drag_and_drop("accepts_drag_and_drop"), folder_view("folder_view"), -- cgit v1.2.3 From d1e3959fef60d70c5f928422b9895b11e36ef343 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pantera=20P=C3=B3=C5=82nocy?= Date: Tue, 2 May 2023 19:19:03 +0200 Subject: Update floater_scene_load_stats.xml Reducing the packet loss... --- .../skins/default/xui/en/floater_scene_load_stats.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml index 37efbe654e..b757f4eab8 100644 --- a/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml +++ b/indra/newview/skins/default/xui/en/floater_scene_load_stats.xml @@ -414,7 +414,7 @@ name="frame_stats" label="Frame breakdown" show_label="true"> - - - - - - Date: Tue, 2 May 2023 19:35:14 +0200 Subject: Fixing a small typo in llviewerstats.cpp --- indra/newview/llviewerstats.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp index 519166af63..1607296194 100644 --- a/indra/newview/llviewerstats.cpp +++ b/indra/newview/llviewerstats.cpp @@ -124,7 +124,7 @@ SimMeasurement<> SIM_TIME_DILATION("simtimedilation", "Simulator time scale", SIM_MAIN_AGENTS("simmainagents", "Number of avatars in current region", LL_SIM_STAT_NUMAGENTMAIN), SIM_CHILD_AGENTS("simchildagents", "Number of avatars in neighboring regions", LL_SIM_STAT_NUMAGENTCHILD), SIM_OBJECTS("simobjects", "", LL_SIM_STAT_NUMTASKS), - SIM_ACTIVE_OBJECTS("simactiveobjects", "Number of scripted and/or mocing objects", LL_SIM_STAT_NUMTASKSACTIVE), + SIM_ACTIVE_OBJECTS("simactiveobjects", "Number of scripted and/or moving objects", LL_SIM_STAT_NUMTASKSACTIVE), SIM_ACTIVE_SCRIPTS("simactivescripts", "Number of scripted objects", LL_SIM_STAT_NUMSCRIPTSACTIVE), SIM_IN_PACKETS_PER_SEC("siminpps", "", LL_SIM_STAT_INPPS), SIM_OUT_PACKETS_PER_SEC("simoutpps", "", LL_SIM_STAT_OUTPPS), -- cgit v1.2.3 From 171b8dbeb32e49d43f40189ae55df05693804fbf Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 2 May 2023 23:07:46 +0300 Subject: SL-19583 Fix rename's width and update frequency This way of calculating scroll turns out to be one large hack. Probably needs a proper combination view instead of combining two different views that have own scrolls or those views need to support not having personal scroll. --- indra/newview/llagentwearables.cpp | 5 ++-- indra/newview/llpanelmaininventory.cpp | 45 +++++++++++++++++++++++++++------- indra/newview/llpanelmaininventory.h | 5 +++- indra/newview/lltoolbarview.cpp | 2 +- 4 files changed, 44 insertions(+), 13 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index 2e769dc737..24c6d82b0d 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1307,8 +1307,9 @@ void LLAgentWearables::findAttachmentsAddRemoveInfo(LLInventoryModel::item_array } // Build up list of objects to be removed and items currently attached. - for (LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); - iter != gAgentAvatarp->mAttachmentPoints.end();) + LLVOAvatar::attachment_map_t::iterator iter = gAgentAvatarp->mAttachmentPoints.begin(); + LLVOAvatar::attachment_map_t::iterator end = gAgentAvatarp->mAttachmentPoints.end(); + while (iter != end) { LLVOAvatar::attachment_map_t::iterator curiter = iter++; LLViewerJointAttachment* attachment = curiter->second; diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 4d6ff63f94..fc4cc124b8 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -120,6 +120,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p) mSingleFolderMode(false), mForceShowInvLayout(false), mViewMode(MODE_COMBINATION), + mCombinationShapeDirty(true), mListViewRootUpdatedConnection(), mGalleryRootUpdatedConnection() { @@ -253,6 +254,8 @@ BOOL LLPanelMainInventory::postBuild() mInventoryGalleryPanel = getChild("gallery_view_inv"); mGalleryRootUpdatedConnection = mInventoryGalleryPanel->setRootChangedCallback(boost::bind(&LLPanelMainInventory::updateTitle, this)); + mCombinationScrollPanel = getChild("combination_view_inventory"); + mCombinationInventoryPanel = getChild("comb_single_folder_inv"); LLInventoryFilter& comb_inv_filter = mCombinationInventoryPanel->getFilter(); comb_inv_filter.setFilterThumbnails(LLInventoryFilter::FILTER_EXCLUDE_THUMBNAILS); @@ -899,9 +902,18 @@ BOOL LLPanelMainInventory::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, } // virtual -void LLPanelMainInventory::changed(U32) +void LLPanelMainInventory::changed(U32 mask) { updateItemcountText(); + if ((mask & LLInventoryObserver::REBUILD) + || (mask & LLInventoryObserver::STRUCTURE) + || (mask & LLInventoryObserver::REMOVE) + || (mask & LLInventoryObserver::ADD) + || (mask & LLInventoryObserver::LABEL)) + { + // todo: can be limited to just observed folder + mCombinationShapeDirty = true; + } } void LLPanelMainInventory::setFocusFilterEditor() @@ -912,6 +924,13 @@ void LLPanelMainInventory::setFocusFilterEditor() } } + +void LLPanelMainInventory::reshape(S32 width, S32 height, BOOL called_from_parent) +{ + mCombinationShapeDirty = true; + LLPanel::reshape(width, height, called_from_parent); +} + // virtual void LLPanelMainInventory::draw() { @@ -1506,9 +1525,9 @@ void LLPanelMainInventory::toggleViewMode() getChild("default_inventory_panel")->setVisible(!mSingleFolderMode); getChild("single_folder_inventory")->setVisible(mSingleFolderMode && isListViewMode()); getChild("gallery_view_inventory")->setVisible(mSingleFolderMode && isGalleryViewMode()); - getChild("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); getChild("nav_buttons")->setVisible(mSingleFolderMode); getChild("view_mode_btn")->setImageOverlay(mSingleFolderMode ? getString("default_mode_btn") : getString("single_folder_mode_btn")); + mCombinationScrollPanel->setVisible(mSingleFolderMode && isCombinationViewMode()); setActivePanel(); updateTitle(); @@ -2213,13 +2232,15 @@ void LLPanelMainInventory::onCombinationRootChanged(bool gallery_clicked) updateTitle(); //force update scroll container - mCombinationInventoryPanel->reshape(getChild("combination_view_inventory")->getRect().getWidth(), 1, true); + mCombinationShapeDirty = true; } void LLPanelMainInventory::updateCombinationVisibility() { - if(mSingleFolderMode && isCombinationViewMode()) + if(mSingleFolderMode && isCombinationViewMode() && mCombinationShapeDirty) { + mCombinationShapeDirty = false; + mCombinationInventoryPanel->reshape(1,1); // force reduce visible area if (!mCombinationGalleryPanel->hasVisibleItems()) { mCombinationGalleryPanel->handleModifiedFilter(); @@ -2228,12 +2249,17 @@ void LLPanelMainInventory::updateCombinationVisibility() LLRect inv_inner_rect = mCombinationInventoryPanel->getScrollableContainer()->getScrolledViewRect(); LLRect galery_rect = mCombinationGalleryPanel->getRect(); LLRect inner_galery_rect = mCombinationGalleryPanel->getScrollableContainer()->getScrolledViewRect(); + LLScrollContainer* scroll = static_cast(mCombinationScrollPanel); + LLRect scroller_window_rect = scroll->getContentWindowRect(); + + const S32 BORDER_PAD = 1; + S32 desired_width = llmax(inv_inner_rect.getWidth(), scroller_window_rect.getWidth()) + BORDER_PAD; inv_rect.mBottom = 0; - inv_rect.mRight = inv_rect.mLeft + inv_inner_rect.getWidth(); + inv_rect.mRight = inv_rect.mLeft + desired_width; if (!mCombinationGalleryPanel->hasVisibleItems() || mCombinationInventoryPanel->hasVisibleItems()) { - inv_rect.mTop = inv_rect.mBottom + inv_inner_rect.getHeight(); + inv_rect.mTop = inv_rect.mBottom + inv_inner_rect.getHeight() + BORDER_PAD; } else { @@ -2241,10 +2267,11 @@ void LLPanelMainInventory::updateCombinationVisibility() } galery_rect.mBottom = inv_rect.mTop; + galery_rect.mRight = galery_rect.mLeft + scroller_window_rect.getWidth(); if (mCombinationGalleryPanel->hasVisibleItems()) { mCombinationGalleryPanel->setVisible(true); - galery_rect.mTop = galery_rect.mBottom + inner_galery_rect.getHeight(); + galery_rect.mTop = galery_rect.mBottom + inner_galery_rect.getHeight() + BORDER_PAD; } else { @@ -2252,7 +2279,7 @@ void LLPanelMainInventory::updateCombinationVisibility() galery_rect.mTop = galery_rect.mBottom; } - mCombinationScroller->reshape(llmax(inv_rect.getWidth(), galery_rect.getWidth()), inv_rect.getHeight() + galery_rect.getHeight(), true); + mCombinationScroller->reshape(desired_width, inv_rect.getHeight() + galery_rect.getHeight() + BORDER_PAD, true); mCombinationGalleryPanel->setShape(galery_rect, false); mCombinationInventoryPanel->setShape(inv_rect, false); } @@ -2319,7 +2346,7 @@ void LLPanelMainInventory::setViewMode(EViewModeType mode) getChild("single_folder_inventory")->setVisible(mSingleFolderMode && isListViewMode()); getChild("gallery_view_inventory")->setVisible(mSingleFolderMode && isGalleryViewMode()); - getChild("combination_view_inventory")->setVisible(mSingleFolderMode && isCombinationViewMode()); + mCombinationScrollPanel->setVisible(mSingleFolderMode && isCombinationViewMode()); if(isListViewMode()) { diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 8e7ad776b0..4f792878a5 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -83,8 +83,9 @@ public: EAcceptance* accept, std::string& tooltip_msg); /*virtual*/ void changed(U32); + /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); /*virtual*/ void draw(); - /*virtual*/ void onVisibilityChange ( BOOL new_visibility ); + /*virtual*/ void onVisibilityChange ( BOOL new_visibility ); LLInventoryPanel* getPanel() { return mActivePanel; } LLInventoryPanel* getActivePanel() { return mActivePanel; } @@ -192,6 +193,7 @@ private: LLInventorySingleFolderPanel* mSingleFolderPanelInventory; LLInventoryGallery* mInventoryGalleryPanel; + LLUICtrl* mCombinationScrollPanel; LLInventorySingleFolderPanel* mCombinationInventoryPanel; LLInventoryGallery* mCombinationGalleryPanel; LLView* mCombinationScroller; @@ -232,6 +234,7 @@ private: bool mNeedUploadCost; bool mForceShowInvLayout; + bool mCombinationShapeDirty; // List Commands // //////////////////////////////////////////////////////////////////////////////// }; diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 4f47c465c4..f6628293ee 100644 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -322,9 +322,9 @@ bool LLToolBarView::loadToolbars(bool force_default) } // SL-18581: Don't show the starter avatar toolbar button for NUX users - LLViewerInventoryCategory* my_outfits_cat = gInventory.getCategory(gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS)); if (gAgent.isFirstLogin()) { + LLViewerInventoryCategory* my_outfits_cat = gInventory.getCategory(gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS)); LL_WARNS() << "First login: checking for NUX user." << LL_ENDL; if (my_outfits_cat != NULL && my_outfits_cat->getDescendentCount() > 0) { -- cgit v1.2.3 From 1866368673f06084860c30cbd78446f55f600a1e Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 3 May 2023 02:06:09 +0300 Subject: SL-19583 Fix height not accounting for borders properly --- indra/newview/llpanelmaininventory.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index fc4cc124b8..0a6ac5f92e 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -287,6 +287,7 @@ BOOL LLPanelMainInventory::postBuild() // Trigger callback for focus received so we can deselect items in inbox/outbox LLFocusableElement::setFocusReceivedCallback(boost::bind(&LLPanelMainInventory::onFocusReceived, this)); + mCombinationShapeDirty = true; return TRUE; } @@ -1964,6 +1965,7 @@ void LLPanelMainInventory::onVisibilityChange( BOOL new_visibility ) } getActivePanel()->getRootFolder()->finishRenamingItem(); } + mCombinationShapeDirty = true; } bool LLPanelMainInventory::isSaveTextureEnabled(const LLSD& userdata) @@ -2240,7 +2242,7 @@ void LLPanelMainInventory::updateCombinationVisibility() if(mSingleFolderMode && isCombinationViewMode() && mCombinationShapeDirty) { mCombinationShapeDirty = false; - mCombinationInventoryPanel->reshape(1,1); // force reduce visible area + mCombinationInventoryPanel->reshape(1,1); // HACK: force reduce visible area if (!mCombinationGalleryPanel->hasVisibleItems()) { mCombinationGalleryPanel->handleModifiedFilter(); @@ -2251,9 +2253,8 @@ void LLPanelMainInventory::updateCombinationVisibility() LLRect inner_galery_rect = mCombinationGalleryPanel->getScrollableContainer()->getScrolledViewRect(); LLScrollContainer* scroll = static_cast(mCombinationScrollPanel); LLRect scroller_window_rect = scroll->getContentWindowRect(); - - const S32 BORDER_PAD = 1; - S32 desired_width = llmax(inv_inner_rect.getWidth(), scroller_window_rect.getWidth()) + BORDER_PAD; + S32 desired_width = llmax(inv_inner_rect.getWidth(), scroller_window_rect.getWidth()); + const S32 BORDER_PAD = 2; // two sides inv_rect.mBottom = 0; inv_rect.mRight = inv_rect.mLeft + desired_width; @@ -2279,7 +2280,7 @@ void LLPanelMainInventory::updateCombinationVisibility() galery_rect.mTop = galery_rect.mBottom; } - mCombinationScroller->reshape(desired_width, inv_rect.getHeight() + galery_rect.getHeight() + BORDER_PAD, true); + mCombinationScroller->reshape(desired_width, inv_rect.getHeight() + galery_rect.getHeight(), true); mCombinationGalleryPanel->setShape(galery_rect, false); mCombinationInventoryPanel->setShape(inv_rect, false); } -- cgit v1.2.3 From b3e02c4264a8a3b9d189b347d0faddf3ac21e87b Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 3 May 2023 18:46:18 +0300 Subject: SL-19583 Scroll fixes --- indra/newview/llinventorypanel.cpp | 7 +++++++ indra/newview/llinventorypanel.h | 3 ++- indra/newview/llpanelmaininventory.cpp | 20 ++++++++++++++++---- 3 files changed, 25 insertions(+), 5 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index c8c9d6c351..6d739c909c 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -2246,6 +2246,13 @@ void LLInventorySingleFolderPanel::doCreate(const LLSD& userdata) /* Asset Pre-Filtered Inventory Panel related class */ /************************************************************************/ +LLAssetFilteredInventoryPanel::LLAssetFilteredInventoryPanel(const Params& p) + : LLInventoryPanel(p) + , mAssetType(LLAssetType::AT_NONE) +{ +} + + void LLAssetFilteredInventoryPanel::initFromParams(const Params& p) { mAssetType = LLAssetType::lookup(p.filter_asset_type.getValue()); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index d334d55611..f2eab4a642 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -214,6 +214,7 @@ public: LLUUID getRootFolderID(); LLScrollContainer* getScrollableContainer() { return mScroller; } bool getAllowDropOnRoot() { return mParams.allow_drop_on_root; } + bool areViewsInitialized() { return mViewsInitialized == VIEWS_INITIALIZED && !mFolderRoot.get()->needsArrange(); } void onSelectionChange(const std::deque &items, BOOL user_action); @@ -455,7 +456,7 @@ public: void initFromParams(const Params& p); protected: - LLAssetFilteredInventoryPanel(const Params& p) : LLInventoryPanel(p) {} + LLAssetFilteredInventoryPanel(const Params& p); friend class LLUICtrlFactory; public: ~LLAssetFilteredInventoryPanel() {} diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 0a6ac5f92e..3110adff15 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -736,6 +736,8 @@ void LLPanelMainInventory::onClearSearch() inbox_panel->onClearSearch(); } } + + mCombinationShapeDirty = true; } void LLPanelMainInventory::onFilterEdit(const std::string& search_string ) @@ -793,6 +795,8 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string ) inbox_panel->onFilterEdit(search_string); } } + + mCombinationShapeDirty = true; } @@ -1681,6 +1685,8 @@ void LLPanelMainInventory::setSingleFolderViewRoot(const LLUUID& folder_id, bool mCombinationInventoryPanel->changeFolderRoot(folder_id); } updateNavButtons(); + + mCombinationShapeDirty = true; } LLUUID LLPanelMainInventory::getSingleFolderViewRoot() @@ -2235,14 +2241,20 @@ void LLPanelMainInventory::onCombinationRootChanged(bool gallery_clicked) //force update scroll container mCombinationShapeDirty = true; + mCombinationInventoryPanel->reshape(1, 1); } void LLPanelMainInventory::updateCombinationVisibility() { - if(mSingleFolderMode && isCombinationViewMode() && mCombinationShapeDirty) + if(mSingleFolderMode + && isCombinationViewMode() + && mCombinationShapeDirty) { - mCombinationShapeDirty = false; - mCombinationInventoryPanel->reshape(1,1); // HACK: force reduce visible area + if (mCombinationInventoryPanel->areViewsInitialized()) + { + mCombinationShapeDirty = false; + mCombinationInventoryPanel->reshape(1,1); // HACK: force reduce visible area + } if (!mCombinationGalleryPanel->hasVisibleItems()) { mCombinationGalleryPanel->handleModifiedFilter(); @@ -2253,8 +2265,8 @@ void LLPanelMainInventory::updateCombinationVisibility() LLRect inner_galery_rect = mCombinationGalleryPanel->getScrollableContainer()->getScrolledViewRect(); LLScrollContainer* scroll = static_cast(mCombinationScrollPanel); LLRect scroller_window_rect = scroll->getContentWindowRect(); - S32 desired_width = llmax(inv_inner_rect.getWidth(), scroller_window_rect.getWidth()); const S32 BORDER_PAD = 2; // two sides + S32 desired_width = llmax(inv_inner_rect.getWidth(), scroller_window_rect.getWidth() - BORDER_PAD); inv_rect.mBottom = 0; inv_rect.mRight = inv_rect.mLeft + desired_width; -- cgit v1.2.3 From 22a07b1121bb429e6bfe10b5a5e859bcea1262b6 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 3 May 2023 12:48:22 -0400 Subject: SL-18330: fix strip_deprecated_header(cur_size) param to llssize. --- indra/newview/llmeshrepository.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index f937754368..18420a2356 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -1865,7 +1865,7 @@ EMeshProcessingResult LLMeshRepoThread::headerReceived(const LLVolumeParams& mes U32 header_size = 0; if (data_size > 0) { - U32 dsize = data_size; + llssize dsize = data_size; char* result_ptr = strip_deprecated_header((char*)data, dsize, &header_size); data_size = dsize; -- cgit v1.2.3 From e8c1a18105bddc29951d4c4b1700dc0af37c83c2 Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 4 May 2023 16:52:35 +0100 Subject: First work on sl-19676 - Stats on updates --- indra/newview/app_settings/settings.xml | 33 +++ indra/newview/llappviewer.cpp | 7 +- indra/newview/llfloater360capture.cpp | 18 +- indra/newview/lltexturefetch.cpp | 5 - indra/newview/llviewermenu.cpp | 143 ++++++----- indra/newview/llviewerobjectlist.cpp | 42 ++-- indra/newview/llviewerregion.cpp | 17 +- indra/newview/llviewerregion.h | 12 +- indra/newview/llviewerstatsrecorder.cpp | 267 +++++++++++++-------- indra/newview/llviewerstatsrecorder.h | 117 +++++---- indra/newview/skins/default/xui/en/menu_viewer.xml | 24 +- 11 files changed, 409 insertions(+), 276 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9fffab70f4..3d1a384793 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -17085,5 +17085,38 @@ Value 0 + StatsReportMaxDuration + + Comment + Maximum seconds for viewer stats file data, prevents huge file + Persist + 1 + Type + F32 + Value + 300 + + StatsReportFileInterval + + Comment + Interval to save viewer stats file data + Persist + 1 + Type + F32 + Value + 0.2 + + StatsReportSkipZeroDataSaves + + Comment + In viewer stats data file, skip saving entry if there is no data + Persist + 0 + Type + Boolean + Value + 0 + diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 8d77a39c74..9c194562f9 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1536,7 +1536,12 @@ bool LLAppViewer::doFrame() LLFloaterSimpleOutfitSnapshot::update(); gGLActive = FALSE; } - } + + if (LLViewerStatsRecorder::instanceExists()) + { + LLViewerStatsRecorder::instance().idle(); + } + } } { diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index 23f86e2361..9c25cdbc7d 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -197,21 +197,18 @@ void LLFloater360Capture::changeInterestListMode(bool send_everything) if (gAgent.requestPostCapability("InterestList", body, [](const LLSD & response) { - LL_INFOS("360Capture") << - "InterestList capability responded: \n" << + LL_DEBUGS("360Capture") << "InterestList capability responded: \n" << ll_pretty_print_sd(response) << LL_ENDL; })) { - LL_INFOS("360Capture") << - "Successfully posted an InterestList capability request with payload: \n" << + LL_DEBUGS("360Capture") << "Successfully posted an InterestList capability request with payload: \n" << ll_pretty_print_sd(body) << LL_ENDL; } else { - LL_INFOS("360Capture") << - "Unable to post an InterestList capability request with payload: \n" << + LL_WARNS("360Capture") << "Unable to post an InterestList capability request with payload: \n" << ll_pretty_print_sd(body) << LL_ENDL; } @@ -632,11 +629,8 @@ void LLFloater360Capture::capture360Images() // display time to encode all 6 images. It tends to be a fairly linear // time for each so we don't need to worry about displaying the time // for each - this gives us plenty to use for optimizing - LL_INFOS("360Capture") << - "Time to encode and save 6 images was " << - encode_time_total << - " seconds" << - LL_ENDL; + LL_INFOS("360Capture") << "Time to encode and save 6 images was " << + encode_time_total << " seconds" << LL_ENDL; // Write the JavaScript file footer (the bottom of the file after the // declarations of the actual data URLs array). The footer comprises of @@ -668,7 +662,7 @@ void LLFloater360Capture::capture360Images() // as a change - only the subsequent 5 are if (camera_changed_times < 5) { - LL_INFOS("360Capture") << "Warning: we only captured " << camera_changed_times << " images." << LL_ENDL; + LL_WARNS("360Capture") << "360 image capture expected 5 or more images, only captured " << camera_changed_times << " images." << LL_ENDL; } // now we have the 6 shots saved in a well specified location, diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index a7dcb1a9bb..b0d6a5d466 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2258,11 +2258,6 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response, mLoaded = TRUE; setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority); - if (LLViewerStatsRecorder::instanceExists()) - { - // Do not create this instance inside thread - LLViewerStatsRecorder::instance().log(0.2f); - } return data_size ; } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 998f5c020e..77cb5f86af 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -119,6 +119,7 @@ #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" #include "llviewerstats.h" +#include "llviewerstatsrecorder.h" #include "llvoavatarself.h" #include "llvoicevivox.h" #include "llworldmap.h" @@ -1295,49 +1296,99 @@ class LLAdvancedDumpRegionObjectCache : public view_listener_t } }; -class LLAdvancedInterestListFullUpdate : public view_listener_t +class LLAdvancedToggleInterestList360Mode : public view_listener_t { - bool handleEvent(const LLSD& userdata) - { - LLSD request; - LLSD body; - static bool using_360 = false; - - if (using_360) - { - body["mode"] = LLSD::String("default"); - } - else - { - body["mode"] = LLSD::String("360"); - } - using_360 = !using_360; +public: + bool handleEvent(const LLSD &userdata) + { + LLSD request; + LLSD body; + + // First do a GET to report on current mode and update stats + if (gAgent.requestGetCapability("InterestList", + [](const LLSD &response) { + LL_DEBUGS("360Capture") << "InterestList capability GET responded: \n" + << ll_pretty_print_sd(response) << LL_ENDL; + })) + { + LL_DEBUGS("360Capture") << "Successful GET InterestList capability request with return body: \n" + << ll_pretty_print_sd(body) << LL_ENDL; + } + else + { + LL_WARNS("360Capture") << "Unable to GET InterestList capability request with return body: \n" + << ll_pretty_print_sd(body) << LL_ENDL; + } - if (gAgent.requestPostCapability("InterestList", body, [](const LLSD& response) + // Now do a POST to change the mode + if (sUsing360) { - LL_INFOS("360Capture") << - "InterestList capability responded: \n" << - ll_pretty_print_sd(response) << - LL_ENDL; - })) + body["mode"] = LLSD::String("default"); + } + else { - LL_INFOS("360Capture") << - "Successfully posted an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; + body["mode"] = LLSD::String("360"); + } + sUsing360 = !sUsing360; + LL_INFOS("360Capture") << "Setting InterestList capability mode to " << body["mode"].asString() << LL_ENDL; + + if (gAgent.requestPostCapability("InterestList", body, + [](const LLSD &response) { + LL_DEBUGS("360Capture") << "InterestList capability responded: \n" + << ll_pretty_print_sd(response) << LL_ENDL; + })) + { + LL_DEBUGS("360Capture") << "Successfully posted an InterestList capability request with payload: \n" + << ll_pretty_print_sd(body) << LL_ENDL; return true; } else { - LL_INFOS("360Capture") << - "Unable to post an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; + LL_DEBUGS("360Capture") << "Unable to post an InterestList capability request with payload: \n" + << ll_pretty_print_sd(body) << LL_ENDL; return false; } + }; + + static bool sUsing360; +}; + +bool LLAdvancedToggleInterestList360Mode::sUsing360 = false; + +class LLAdvancedCheckInterestList360Mode : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + return LLAdvancedToggleInterestList360Mode::sUsing360; } }; +class LLAdvancedToggleStatsRecorder : public view_listener_t +{ + bool handleEvent(const LLSD &userdata) + { + if (LLViewerStatsRecorder::instance().isEnabled()) + { // Turn off both recording and logging + LLViewerStatsRecorder::instance().enableObjectStatsRecording(false); + } + else + { // Turn on both recording and logging + LLViewerStatsRecorder::instance().enableObjectStatsRecording(true, true); + } + return true; + } +}; + +class LLAdvancedCheckStatsRecorder : public view_listener_t +{ + bool handleEvent(const LLSD &userdata) + { // Use the logging state as the indicator of whether the stats recorder is on + return LLViewerStatsRecorder::instance().isLogging(); + } +}; + + + class LLAdvancedBuyCurrencyTest : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -4492,33 +4543,6 @@ void handle_duplicate_in_place(void*) LLSelectMgr::getInstance()->selectDuplicate(offset, TRUE); } -/* dead code 30-apr-2008 -void handle_deed_object_to_group(void*) -{ - LLUUID group_id; - - LLSelectMgr::getInstance()->selectGetGroup(group_id); - LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE); - LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT); -} - -BOOL enable_deed_object_to_group(void*) -{ - if(LLSelectMgr::getInstance()->getSelection()->isEmpty()) return FALSE; - LLPermissions perm; - LLUUID group_id; - - if (LLSelectMgr::getInstance()->selectGetGroup(group_id) && - gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED) && - LLSelectMgr::getInstance()->selectGetPermissions(perm) && - perm.deedToGroup(gAgent.getID(), group_id)) - { - return TRUE; - } - return FALSE; -} - -*/ /* @@ -9448,7 +9472,10 @@ void initialize_menus() // Advanced > World view_listener_t::addMenu(new LLAdvancedDumpScriptedCamera(), "Advanced.DumpScriptedCamera"); view_listener_t::addMenu(new LLAdvancedDumpRegionObjectCache(), "Advanced.DumpRegionObjectCache"); - view_listener_t::addMenu(new LLAdvancedInterestListFullUpdate(), "Advanced.InterestListFullUpdate"); + view_listener_t::addMenu(new LLAdvancedToggleInterestList360Mode(), "Advanced.ToggleInterestList360Mode"); + view_listener_t::addMenu(new LLAdvancedCheckInterestList360Mode(), "Advanced.CheckInterestList360Mode"); + view_listener_t::addMenu(new LLAdvancedToggleStatsRecorder(), "Advanced.ToggleStatsRecorder"); + view_listener_t::addMenu(new LLAdvancedCheckStatsRecorder(), "Advanced.CheckStatsRecorder"); // Advanced > UI commit.add("Advanced.WebBrowserTest", boost::bind(&handle_web_browser_test, _2)); // sigh! this one opens the MEDIA browser diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index efc4ded79e..0c9e929cf3 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -369,7 +369,7 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry* if (!objectp) { LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL; - recorder.objectUpdateFailure(entry->getLocalID(), OUT_FULL_CACHED, 0); + recorder.objectUpdateFailure(0); return NULL; } justCreated = true; @@ -393,7 +393,6 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry* objectp->setLastUpdateType(OUT_FULL_COMPRESSED); //newly cached objectp->setLastUpdateCached(TRUE); } - recorder.log(0.2f); LLVOAvatar::cullAvatarsByPixelArea(); return objectp; @@ -472,18 +471,15 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, for (i = 0; i < num_objects; i++) { - // timer is unused? - LLTimer update_timer; BOOL justCreated = FALSE; S32 msg_size = 0; bool update_cache = false; //update object cache if it is a full-update or terse update if (compressed) { - S32 uncompressed_length = 2048; compressed_dp.reset(); - uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); + S32 uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); LL_DEBUGS("ObjectUpdate") << "got binary data from message to compressed_dpbuffer" << LL_ENDL; mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i, 2048); compressed_dp.assignBuffer(compressed_dpbuffer, uncompressed_length); @@ -505,7 +501,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, << " Flags: " << flags << " Region: " << regionp->getName() << " Region id: " << regionp->getRegionID() << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(msg_size); continue; } else if ((flags & FLAGS_TEMPORARY_ON_REZ) == 0) @@ -616,7 +612,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (update_type == OUT_TERSE_IMPROVED) { // LL_INFOS() << "terse update for an unknown object (compressed):" << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(msg_size); continue; } } @@ -625,7 +621,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (update_type != OUT_FULL) { //LL_INFOS() << "terse update for an unknown object:" << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(msg_size); continue; } @@ -638,7 +634,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, { mNumDeadObjectUpdates++; //LL_INFOS() << "update for a dead object:" << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(msg_size); continue; } #endif @@ -651,7 +647,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (!objectp) { LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL; - recorder.objectUpdateFailure(local_id, update_type, msg_size); + recorder.objectUpdateFailure(msg_size); continue; } @@ -681,11 +677,11 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if(!(flags & FLAGS_TEMPORARY_ON_REZ)) { - bCached = true; + bCached = true; LLViewerRegion::eCacheUpdateResult result = objectp->mRegionp->cacheFullUpdate(objectp, compressed_dp, flags); - recorder.cacheFullUpdate(local_id, update_type, result, objectp, msg_size); + recorder.cacheFullUpdate(result); + } } - } #endif } else @@ -696,12 +692,10 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, } processUpdateCore(objectp, user_data, i, update_type, NULL, justCreated); } - recorder.objectUpdateEvent(local_id, update_type, objectp, msg_size); + recorder.objectUpdateEvent(update_type); objectp->setLastUpdateType(update_type); } - recorder.log(0.2f); - LLVOAvatar::cullAvatarsByPixelArea(); } @@ -748,14 +742,14 @@ void LLViewerObjectList::processCachedObjectUpdate(LLMessageSystem *mesgsys, // Lookup data packer and add this id to cache miss lists if necessary. U8 cache_miss_type = LLViewerRegion::CACHE_MISS_TYPE_NONE; - if(!regionp->probeCache(id, crc, flags, cache_miss_type)) - { - // Cache Miss. + if (regionp->probeCache(id, crc, flags, cache_miss_type)) + { // Cache Hit + recorder.cacheHitEvent(); + } + else + { // Cache Miss LL_DEBUGS("ObjectUpdate") << "cache miss for id " << id << " crc " << crc << " miss type " << (S32) cache_miss_type << LL_ENDL; - - recorder.cacheMissEvent(id, update_type, cache_miss_type, msg_size); - - continue; // no data packer, skip this object + recorder.cacheMissEvent(cache_miss_type); } } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index ad7321ca4b..3d1a81694a 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -2618,14 +2618,10 @@ LLVOCacheEntry* LLViewerRegion::getCacheEntry(U32 local_id, bool valid) return NULL; } -void LLViewerRegion::addCacheMiss(U32 id, LLViewerRegion::eCacheMissType miss_type) +void LLViewerRegion::addCacheMiss(U32 id, LLViewerRegion::eCacheMissType cache_miss_type) { mRegionCacheMissCount++; -#if 0 - mCacheMissList.insert(CacheMissItem(id, miss_type)); -#else - mCacheMissList.push_back(CacheMissItem(id, miss_type)); -#endif + mCacheMissList.push_back(CacheMissItem(id, cache_miss_type)); } //check if a non-cacheable object is already created. @@ -2701,10 +2697,10 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss } } else - { + { // Total miss, don't have the object in cache // LL_INFOS() << "Cache miss for " << local_id << LL_ENDL; - addCacheMiss(local_id, CACHE_MISS_TYPE_FULL); - cache_miss_type = CACHE_MISS_TYPE_FULL; + addCacheMiss(local_id, CACHE_MISS_TYPE_TOTAL); + cache_miss_type = CACHE_MISS_TYPE_TOTAL; } return false; @@ -2712,7 +2708,7 @@ bool LLViewerRegion::probeCache(U32 local_id, U32 crc, U32 flags, U8 &cache_miss void LLViewerRegion::addCacheMissFull(const U32 local_id) { - addCacheMiss(local_id, CACHE_MISS_TYPE_FULL); + addCacheMiss(local_id, CACHE_MISS_TYPE_TOTAL); } void LLViewerRegion::requestCacheMisses() @@ -2763,7 +2759,6 @@ void LLViewerRegion::requestCacheMisses() mCacheDirty = TRUE ; // LL_INFOS() << "KILLDEBUG Sent cache miss full " << full_count << " crc " << crc_count << LL_ENDL; LLViewerStatsRecorder::instance().requestCacheMissesEvent(mCacheMissList.size()); - LLViewerStatsRecorder::instance().log(0.2f); mCacheMissList.clear(); } diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 6548e8d372..81371b7f30 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -332,9 +332,9 @@ public: typedef enum { - CACHE_MISS_TYPE_FULL = 0, - CACHE_MISS_TYPE_CRC, - CACHE_MISS_TYPE_NONE + CACHE_MISS_TYPE_TOTAL = 0, // total cache miss - object not in cache + CACHE_MISS_TYPE_CRC, // object in cache, but CRC doesn't match + CACHE_MISS_TYPE_NONE // not a miss: cache hit } eCacheMissType; typedef enum @@ -551,10 +551,10 @@ private: class CacheMissItem { public: - CacheMissItem(U32 id, LLViewerRegion::eCacheMissType miss_type) : mID(id), mType(miss_type){} + CacheMissItem(U32 id, LLViewerRegion::eCacheMissType miss_type) : mID(id), mType(miss_type) {} - U32 mID; //local object id - LLViewerRegion::eCacheMissType mType; //cache miss type + U32 mID; //local object id + LLViewerRegion::eCacheMissType mType; // cache miss type typedef std::list cache_miss_list_t; }; diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp index b5ccf4ffa0..64167135ac 100644 --- a/indra/newview/llviewerstatsrecorder.cpp +++ b/indra/newview/llviewerstatsrecorder.cpp @@ -28,24 +28,25 @@ #include "llviewerstatsrecorder.h" +#include "llcontrol.h" #include "llfile.h" #include "llviewerregion.h" #include "llviewerobject.h" +#include "llworld.h" - -// To do - something using region name or global position -#if LL_WINDOWS - static const std::string STATS_FILE_NAME("C:\\ViewerObjectCacheStats.csv"); -#else - static const std::string STATS_FILE_NAME("/tmp/viewerstats.csv"); -#endif +extern LLControlGroup gSavedSettings; LLViewerStatsRecorder* LLViewerStatsRecorder::sInstance = NULL; LLViewerStatsRecorder::LLViewerStatsRecorder() : - mObjectCacheFile(NULL), + mStatsFile(NULL), mTimer(), - mStartTime(0.0), - mLastSnapshotTime(0.0) + mFileOpenTime(0.0), + mLastSnapshotTime(0.0), + mEnableStatsRecording(false), + mEnableStatsLogging(false), + mInterval(0.2), + mMaxDuration(300.f), + mSkipSaveIfZeros(false) { if (NULL != sInstance) { @@ -57,30 +58,22 @@ LLViewerStatsRecorder::LLViewerStatsRecorder() : LLViewerStatsRecorder::~LLViewerStatsRecorder() { - if (mObjectCacheFile != NULL) + if (mStatsFile) { - // last chance snapshot - writeToLog(0.f); - LLFile::close(mObjectCacheFile); - mObjectCacheFile = NULL; + writeToLog(0.f); // Save last data + closeStatsFile(); } } void LLViewerStatsRecorder::clearStats() { mObjectCacheHitCount = 0; - mObjectCacheHitSize = 0; mObjectCacheMissFullCount = 0; - mObjectCacheMissFullSize = 0; mObjectCacheMissCrcCount = 0; - mObjectCacheMissCrcSize = 0; mObjectFullUpdates = 0; - mObjectFullUpdatesSize = 0; mObjectTerseUpdates = 0; - mObjectTerseUpdatesSize = 0; mObjectCacheMissRequests = 0; mObjectCacheMissResponses = 0; - mObjectCacheMissResponsesSize = 0; mObjectCacheUpdateDupes = 0; mObjectCacheUpdateChanges = 0; mObjectCacheUpdateAdds = 0; @@ -91,45 +84,57 @@ void LLViewerStatsRecorder::clearStats() } -void LLViewerStatsRecorder::recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size) +void LLViewerStatsRecorder::enableObjectStatsRecording(bool enable, bool logging /* false */) +{ + mEnableStatsRecording = enable; + + // if logging is stopping, close the file + if (mStatsFile && !logging) + { + writeToLog(0.f); // Save last data + closeStatsFile(); + } + mEnableStatsLogging = logging; +} + + + +void LLViewerStatsRecorder::recordObjectUpdateFailure(S32 msg_size) { mObjectUpdateFailures++; mObjectUpdateFailuresSize += msg_size; } -void LLViewerStatsRecorder::recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size) +void LLViewerStatsRecorder::recordCacheMissEvent(U8 cache_miss_type) { - if (LLViewerRegion::CACHE_MISS_TYPE_FULL == cache_miss_type) + if (LLViewerRegion::CACHE_MISS_TYPE_TOTAL == cache_miss_type) { mObjectCacheMissFullCount++; - mObjectCacheMissFullSize += msg_size; } else { mObjectCacheMissCrcCount++; - mObjectCacheMissCrcSize += msg_size; } } -void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size) + +void LLViewerStatsRecorder::recordCacheHitEvent() +{ + mObjectCacheHitCount++; +} + +void LLViewerStatsRecorder::recordObjectUpdateEvent(const EObjectUpdateType update_type) { - switch (update_type) + switch (update_type) { case OUT_FULL: mObjectFullUpdates++; - mObjectFullUpdatesSize += msg_size; break; case OUT_TERSE_IMPROVED: mObjectTerseUpdates++; - mObjectTerseUpdatesSize += msg_size; break; case OUT_FULL_COMPRESSED: mObjectCacheMissResponses++; - mObjectCacheMissResponsesSize += msg_size; - break; - case OUT_FULL_CACHED: - mObjectCacheHitCount++; - mObjectCacheHitSize += msg_size; break; default: LL_WARNS() << "Unknown update_type" << LL_ENDL; @@ -137,9 +142,9 @@ void LLViewerStatsRecorder::recordObjectUpdateEvent(U32 local_id, const EObjectU }; } -void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size) +void LLViewerStatsRecorder::recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result) { - switch (update_result) + switch (update_result) { case LLViewerRegion::CACHE_UPDATE_DUPE: mObjectCacheUpdateDupes++; @@ -154,7 +159,7 @@ void LLViewerStatsRecorder::recordCacheFullUpdate(U32 local_id, const EObjectUpd mObjectCacheUpdateReplacements++; break; default: - LL_WARNS() << "Unknown update_result type" << LL_ENDL; + LL_WARNS() << "Unknown update_result type " << (S32) update_result << LL_ENDL; break; }; } @@ -166,14 +171,30 @@ void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count) void LLViewerStatsRecorder::writeToLog( F32 interval ) { + if (!mEnableStatsLogging || !mEnableStatsRecording) + { + return; + } + size_t data_size = 0; - F64 delta_time = LLTimer::getTotalSeconds() - mLastSnapshotTime; - S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; + F64 delta_time = LLFrameTimer::getTotalSeconds() - mLastSnapshotTime; + if (delta_time < interval) + return; - if ( delta_time < interval || total_objects == 0) return; + if (mSkipSaveIfZeros) + { + S32 total_events = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; + if (total_events == 0) + { + LL_DEBUGS("ILXZeroData") << "ILX: not saving zero data" << LL_ENDL; + return; + } + } - mLastSnapshotTime = LLTimer::getTotalSeconds(); - LL_DEBUGS() << "ILX: " + mLastSnapshotTime = LLFrameTimer::getTotalSeconds(); + LL_DEBUGS("ILX") << "ILX: " << mObjectCacheHitCount << " hits, " << mObjectCacheMissFullCount << " full misses, " << mObjectCacheMissCrcCount << " crc misses, " @@ -188,84 +209,124 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << mObjectUpdateFailures << " update failures" << LL_ENDL; - if (mObjectCacheFile == NULL) + if (mStatsFile == NULL) { - mStartTime = LLTimer::getTotalSeconds(); - mObjectCacheFile = LLFile::fopen(STATS_FILE_NAME, "wb"); - if (mObjectCacheFile) - { // Write column headers - std::ostringstream data_msg; - data_msg << "EventTime(ms)\t" - << "Cache Hits\t" - << "Cache Full Misses\t" - << "Cache Crc Misses\t" - << "Full Updates\t" - << "Terse Updates\t" - << "Cache Miss Requests\t" - << "Cache Miss Responses\t" - << "Cache Update Dupes\t" - << "Cache Update Changes\t" - << "Cache Update Adds\t" - << "Cache Update Replacements\t" - << "Update Failures\t" - << "Cache Hits bps\t" - << "Cache Full Misses bps\t" - << "Cache Crc Misses bps\t" - << "Full Updates bps\t" - << "Terse Updates bps\t" - << "Cache Miss Responses bps\t" - << "Texture Fetch bps\t" - << "\n"; - - data_size = data_msg.str().size(); - if (fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ) != data_size) + // Refresh settings + mInterval = gSavedSettings.getF32("StatsReportFileInterval"); + mSkipSaveIfZeros = gSavedSettings.getBOOL("StatsReportSkipZeroDataSaves"); + mMaxDuration = gSavedSettings.getF32("StatsReportMaxDuration"); + + // Open the data file + makeStatsFileName(); + mStatsFile = LLFile::fopen(mStatsFileName, "wb"); + + if (mStatsFile) + { + LL_INFOS("ILX") << "ILX: Writing update information to " << mStatsFileName << LL_ENDL; + + mFileOpenTime = LLFrameTimer::getTotalSeconds(); + + // Write column headers + std::ostringstream col_headers; + col_headers << "Time (sec)," + << "Regions," + << "Active Cached Objects," + << "Cache Hits," + << "Cache Full Misses," + << "Cache Crc Misses," + << "Full Updates," + << "Terse Updates," + << "Cache Miss Requests," + << "Cache Miss Responses," + << "Cache Update Dupes," + << "Cache Update Changes," + << "Cache Update Adds," + << "Cache Update Replacements," + << "Update Failures," + << "Texture Fetch bps," + << "\n"; + + data_size = col_headers.str().size(); + if (fwrite(col_headers.str().c_str(), 1, data_size, mStatsFile ) != data_size) { - LL_WARNS() << "failed to write full headers to " << STATS_FILE_NAME << LL_ENDL; + LL_WARNS() << "failed to write full headers to " << mStatsFileName << LL_ENDL; } } else - { - //LL_WARNS() << "Couldn't open " << STATS_FILE_NAME << " for logging." << LL_ENDL; + { // Failed to open file + LL_WARNS() << "Couldn't open " << mStatsFileName << " for logging, turning off stats recording." << LL_ENDL; + mEnableStatsLogging = false; return; } } - std::ostringstream data_msg; - - data_msg << getTimeSinceStart() - << "\t " << mObjectCacheHitCount - << "\t" << mObjectCacheMissFullCount - << "\t" << mObjectCacheMissCrcCount - << "\t" << mObjectFullUpdates - << "\t" << mObjectTerseUpdates - << "\t" << mObjectCacheMissRequests - << "\t" << mObjectCacheMissResponses - << "\t" << mObjectCacheUpdateDupes - << "\t" << mObjectCacheUpdateChanges - << "\t" << mObjectCacheUpdateAdds - << "\t" << mObjectCacheUpdateReplacements - << "\t" << mObjectUpdateFailures - << "\t" << (mObjectCacheHitSize * 8 / delta_time) - << "\t" << (mObjectCacheMissFullSize * 8 / delta_time) - << "\t" << (mObjectCacheMissCrcSize * 8 / delta_time) - << "\t" << (mObjectFullUpdatesSize * 8 / delta_time) - << "\t" << (mObjectTerseUpdatesSize * 8 / delta_time) - << "\t" << (mObjectCacheMissResponsesSize * 8 / delta_time) - << "\t" << (mTextureFetchSize * 8 / delta_time) + std::ostringstream stats_data; + + stats_data << getTimeSinceStart() + << "," << LLWorld::getInstance()->getRegionList().size() + << "," << LLWorld::getInstance()->getNumOfActiveCachedObjects() + << "," << mObjectCacheHitCount + << "," << mObjectCacheMissFullCount + << "," << mObjectCacheMissCrcCount + << "," << mObjectFullUpdates + << "," << mObjectTerseUpdates + << "," << mObjectCacheMissRequests + << "," << mObjectCacheMissResponses + << "," << mObjectCacheUpdateDupes + << "," << mObjectCacheUpdateChanges + << "," << mObjectCacheUpdateAdds + << "," << mObjectCacheUpdateReplacements + << "," << mObjectUpdateFailures + << "," << (mTextureFetchSize * 8 / delta_time) << "\n"; - data_size = data_msg.str().size(); - if ( data_size != fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile )) + data_size = stats_data.str().size(); + if ( data_size != fwrite(stats_data.str().c_str(), 1, data_size, mStatsFile )) { - LL_WARNS() << "Unable to write complete column data to " << STATS_FILE_NAME << LL_ENDL; - } + LL_WARNS() << "Unable to write complete column data to " << mStatsFileName << LL_ENDL; + closeStatsFile(); + } clearStats(); + + if (getTimeSinceStart() >= mMaxDuration) + { // If file recording has been running for too long, stop it. + closeStatsFile(); + } +} + +void LLViewerStatsRecorder::closeStatsFile() +{ + if (mStatsFile) + { + LL_INFOS("ILX") << "ILX: Stopped writing update information to " << mStatsFileName << " after " << getTimeSinceStart() + << " seconds." << LL_ENDL; + LLFile::close(mStatsFile); + mStatsFile = NULL; + } + mEnableStatsLogging = false; +} + +void LLViewerStatsRecorder::makeStatsFileName() +{ + // Create filename - tbd: use pid? +#if LL_WINDOWS + std::string stats_file_name("SLViewerStats-"); +#else + std::string stats_file_name("slviewerstats-"); +#endif + + F64 now = LLFrameTimer::getTotalSeconds(); + std::string date_str = LLDate(now).asString(); + std::replace(date_str.begin(), date_str.end(), ':', '-'); // Make it valid for a filename + stats_file_name.append(date_str); + stats_file_name.append(".csv"); + mStatsFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, stats_file_name); } F32 LLViewerStatsRecorder::getTimeSinceStart() { - return (F32) (LLTimer::getTotalSeconds() - mStartTime); + return (F32) (LLFrameTimer::getTotalSeconds() - mFileOpenTime); } void LLViewerStatsRecorder::recordTextureFetch( S32 msg_size ) diff --git a/indra/newview/llviewerstatsrecorder.h b/indra/newview/llviewerstatsrecorder.h index c974bea49d..90f8ca8742 100644 --- a/indra/newview/llviewerstatsrecorder.h +++ b/indra/newview/llviewerstatsrecorder.h @@ -31,10 +31,6 @@ // This is a diagnostic class used to record information from the viewer // for analysis. -// This is normally 0. Set to 1 to enable viewer stats recording -#define LL_RECORD_VIEWER_STATS 0 - - #include "llframetimer.h" #include "llviewerobject.h" #include "llviewerregion.h" @@ -49,86 +45,111 @@ class LLViewerStatsRecorder : public LLSingleton ~LLViewerStatsRecorder(); public: - void objectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size) - { -#if LL_RECORD_VIEWER_STATS - recordObjectUpdateFailure(local_id, update_type, msg_size); -#endif + // Enable/disable stats recording. This is broken down into two + // flags so we can record stats without writing them to the log + // file. This is useful to analyzing updates for scene loading. + void enableObjectStatsRecording(bool enable, bool logging = false); + + bool isEnabled() const { return mEnableStatsRecording; } + bool isLogging() const { return mEnableStatsLogging; } + + void objectUpdateFailure(S32 msg_size) + { + if (mEnableStatsRecording) + { + recordObjectUpdateFailure(msg_size); + } } - void cacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size) + void cacheMissEvent(U8 cache_miss_type) { -#if LL_RECORD_VIEWER_STATS - recordCacheMissEvent(local_id, update_type, cache_miss_type, msg_size); -#endif + if (mEnableStatsRecording) + { + recordCacheMissEvent(cache_miss_type); + } + } + + void cacheHitEvent() + { + if (mEnableStatsRecording) + { + recordCacheHitEvent(); + } + } + + void objectUpdateEvent(const EObjectUpdateType update_type) + { + if (mEnableStatsRecording) + { + recordObjectUpdateEvent(update_type); + } } - void objectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size) - { -#if LL_RECORD_VIEWER_STATS - recordObjectUpdateEvent(local_id, update_type, objectp, msg_size); -#endif - } - - void cacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size) - { -#if LL_RECORD_VIEWER_STATS - recordCacheFullUpdate(local_id, update_type, update_result, objectp, msg_size); -#endif + void cacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result) + { + if (mEnableStatsRecording) + { + recordCacheFullUpdate(update_result); + } } void requestCacheMissesEvent(S32 count) { -#if LL_RECORD_VIEWER_STATS - recordRequestCacheMissesEvent(count); -#endif + if (mEnableStatsRecording) + { + recordRequestCacheMissesEvent(count); + } } void textureFetch(S32 msg_size) { -#if LL_RECORD_VIEWER_STATS - recordTextureFetch(msg_size); -#endif + if (mEnableStatsRecording) + { + recordTextureFetch(msg_size); + } } - void log(F32 interval) + void idle() { -#if LL_RECORD_VIEWER_STATS - writeToLog(interval); -#endif + writeToLog(mInterval); } F32 getTimeSinceStart(); private: - void recordObjectUpdateFailure(U32 local_id, const EObjectUpdateType update_type, S32 msg_size); - void recordCacheMissEvent(U32 local_id, const EObjectUpdateType update_type, U8 cache_miss_type, S32 msg_size); - void recordObjectUpdateEvent(U32 local_id, const EObjectUpdateType update_type, LLViewerObject * objectp, S32 msg_size); - void recordCacheFullUpdate(U32 local_id, const EObjectUpdateType update_type, LLViewerRegion::eCacheUpdateResult update_result, LLViewerObject* objectp, S32 msg_size); + void recordObjectUpdateFailure(S32 msg_size); + void recordCacheMissEvent(U8 cache_miss_type); + void recordCacheHitEvent(); + void recordObjectUpdateEvent(const EObjectUpdateType update_type); + void recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result); void recordRequestCacheMissesEvent(S32 count); void recordTextureFetch(S32 msg_size); void writeToLog(F32 interval); + void closeStatsFile(); + void makeStatsFileName(); static LLViewerStatsRecorder* sInstance; - LLFILE * mObjectCacheFile; // File to write data into + LLFILE * mStatsFile; // File to write data into + std::string mStatsFileName; + LLFrameTimer mTimer; - F64 mStartTime; + F64 mFileOpenTime; F64 mLastSnapshotTime; + F32 mInterval; // Interval between data log writes + F32 mMaxDuration; // Time limit on file + + bool mEnableStatsRecording; // Set to true to enable recording stats data + bool mEnableStatsLogging; // Set true to write stats to log file + bool mSkipSaveIfZeros; // Set true to skip saving stats if all values are zero S32 mObjectCacheHitCount; - S32 mObjectCacheHitSize; S32 mObjectCacheMissFullCount; - S32 mObjectCacheMissFullSize; S32 mObjectCacheMissCrcCount; - S32 mObjectCacheMissCrcSize; S32 mObjectFullUpdates; - S32 mObjectFullUpdatesSize; S32 mObjectTerseUpdates; - S32 mObjectTerseUpdatesSize; S32 mObjectCacheMissRequests; S32 mObjectCacheMissResponses; - S32 mObjectCacheMissResponsesSize; S32 mObjectCacheUpdateDupes; S32 mObjectCacheUpdateChanges; S32 mObjectCacheUpdateAdds; @@ -137,9 +158,7 @@ private: S32 mObjectUpdateFailuresSize; S32 mTextureFetchSize; - void clearStats(); }; #endif // LLVIEWERSTATSRECORDER_H - diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index f72d1f0bf9..d78ebf17e3 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -3463,14 +3463,24 @@ function="World.EnvPreset" - - - - + + + + + + + Date: Thu, 4 May 2023 19:19:32 +0300 Subject: SL-19683 Add menu items should be disabled for some folders in single-folder view --- indra/newview/llpanelmaininventory.cpp | 50 ++++++++++++++++++++++++++++++++++ indra/newview/llpanelmaininventory.h | 1 + 2 files changed, 51 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 3110adff15..b0422b7bd9 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1494,6 +1494,7 @@ void LLPanelMainInventory::onAddButtonClick() LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get(); if (menu) { + disableAddIfNeeded(); menu->getChild("New Folder")->setEnabled(!isRecentItemsPanelSelected()); setUploadCostIfNeeded(); @@ -2199,6 +2200,55 @@ void LLPanelMainInventory::setUploadCostIfNeeded() } } +bool is_add_allowed(LLUUID folder_id) +{ + if(!gInventory.isObjectDescendentOf(folder_id, gInventory.getRootFolderID())) + { + return false; + } + + std::vector not_allowed_types; + not_allowed_types.push_back(LLFolderType::FT_LOST_AND_FOUND); + not_allowed_types.push_back(LLFolderType::FT_FAVORITE); + not_allowed_types.push_back(LLFolderType::FT_MARKETPLACE_LISTINGS); + not_allowed_types.push_back(LLFolderType::FT_TRASH); + not_allowed_types.push_back(LLFolderType::FT_CURRENT_OUTFIT); + not_allowed_types.push_back(LLFolderType::FT_INBOX); + + for (std::vector::const_iterator it = not_allowed_types.begin(); + it != not_allowed_types.end(); ++it) + { + if(gInventory.isObjectDescendentOf(folder_id, gInventory.findCategoryUUIDForType(*it))) + { + return false; + } + } + + LLViewerInventoryCategory* cat = gInventory.getCategory(folder_id); + if (cat && (cat->getPreferredType() == LLFolderType::FT_OUTFIT)) + { + return false; + } + return true; +} + +void LLPanelMainInventory::disableAddIfNeeded() +{ + LLMenuGL* menu = (LLMenuGL*)mMenuAddHandle.get(); + if (menu) + { + bool enable = !mSingleFolderMode || is_add_allowed(getCurrentSFVRoot()); + + menu->getChild("New Folder")->setEnabled(enable); + menu->getChild("New Script")->setEnabled(enable); + menu->getChild("New Note")->setEnabled(enable); + menu->getChild("New Gesture")->setEnabled(enable); + menu->setItemEnabled("New Clothes", enable); + menu->setItemEnabled("New Body Parts", enable); + menu->setItemEnabled("New Settings", enable); + } +} + bool LLPanelMainInventory::hasSettingsInventory() { return LLEnvironment::instance().isInventoryEnabled(); diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 4f792878a5..21e08bbac8 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -222,6 +222,7 @@ protected: * Set upload cost in "Upload" sub menu. */ void setUploadCostIfNeeded(); + void disableAddIfNeeded(); private: LLToggleableMenu* mMenuGearDefault; LLToggleableMenu* mMenuViewDefault; -- cgit v1.2.3 From 98681ef73ff33e0c0ff321e839a8e79b2cb334de Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 5 May 2023 15:56:21 +0300 Subject: SL-19533 Prevent COF dupplicate request --- indra/newview/llappearancemgr.cpp | 20 +++++++++++++++----- indra/newview/llinventorymodel.cpp | 13 +++++++++++-- indra/newview/llstartup.cpp | 14 +++++++++++++- 3 files changed, 39 insertions(+), 8 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 4133470973..454ac5d88c 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4565,10 +4565,14 @@ void callAfterCOFFetch(nullary_func_t cb) { LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); - if (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN && AISAPI::isAvailable()) + if (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN) { - // Assume that we have no relevant cache. Fetch cof, and items cof's links point to. - AISAPI::FetchCOF([cb](const LLUUID& id) + if (AISAPI::isAvailable()) + { + // Mark cof (update timer) so that background fetch won't request it + cat->setFetching(LLViewerInventoryCategory::FETCH_RECURSIVE); + // Assume that we have no relevant cache. Fetch cof, and items cof's links point to. + AISAPI::FetchCOF([cb](const LLUUID& id) { cb(); LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); @@ -4578,8 +4582,14 @@ void callAfterCOFFetch(nullary_func_t cb) cat->setFetching(LLViewerInventoryCategory::FETCH_NONE); } }); - // Mark it so that background fetch won't request it if it didn't already - cat->setFetching(LLViewerInventoryCategory::FETCH_RECURSIVE); + } + else + { + LL_WARNS() << "AIS API v3 not available, can't use AISAPI::FetchCOF" << LL_ENDL; + // startup should have marked folder as fetching, remove that + cat->setFetching(LLViewerInventoryCategory::FETCH_NONE); + callAfterCategoryFetch(cat_id, cb); + } } else { diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 48539f4748..c65901a754 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -853,8 +853,17 @@ void LLInventoryModel::ensureCategoryForTypeExists(LLFolderType::EType preferred LLStringUtil::null, [preferred_type](const LLUUID &new_cat_id) { - LL_DEBUGS("Inventory") << "Created category: " << new_cat_id - << " for type: " << preferred_type << LL_ENDL; + if (new_cat_id.isNull()) + { + LL_WARNS("Inventory") + << "Failed to create folder of type " << preferred_type + << LL_ENDL; + } + else + { + LL_DEBUGS("Inventory") << "Created category: " << new_cat_id + << " for type: " << preferred_type << LL_ENDL; + } } ); } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 5d1df21c9b..10ddd59f34 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1900,9 +1900,21 @@ bool idle_startup() LLNotificationsUtil::add("InventoryUnusable"); } - LLInventoryModelBackgroundFetch::instance().start(); gInventory.createCommonSystemCategories(); + LLInventoryModelBackgroundFetch::instance().start(); + LLUUID cof_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); + LLViewerInventoryCategory* cof = gInventory.getCategory(cof_id); + if (cof + && cof->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN) + { + // Special case, dupplicate request prevention. + // Cof folder will be requested via FetchCOF + // in appearance manager, prevent recursive fetch + cof->setFetching(LLViewerInventoryCategory::FETCH_RECURSIVE); + } + + // It's debatable whether this flag is a good idea - sets all // bits, and in general it isn't true that inventory // initialization generates all types of changes. Maybe add an -- cgit v1.2.3 From 61818417d619c8d17cf861f0d72b314a14269e2f Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Fri, 5 May 2023 18:17:00 +0300 Subject: SL-19641 FIXED Gallery item is not selected after using 'Find original' --- indra/newview/llinventorygallery.cpp | 5 +++ indra/newview/llinventorygallery.h | 1 + indra/newview/llpanelmaininventory.cpp | 70 +++++++++++++++++++++++++++++++--- indra/newview/llpanelmaininventory.h | 7 +++- 4 files changed, 76 insertions(+), 7 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index a078d6c81d..37801c8dd5 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -882,6 +882,11 @@ void LLInventoryGallery::scrollToShowItem(const LLUUID& item_id) } } +LLInventoryGalleryItem* LLInventoryGallery::getSelectedItem() +{ + return mItemMap[mSelectedItemID]; +} + void LLInventoryGallery::updateMessageVisibility() { diff --git a/indra/newview/llinventorygallery.h b/indra/newview/llinventorygallery.h index 2cf038b7d8..dfb7be6a86 100644 --- a/indra/newview/llinventorygallery.h +++ b/indra/newview/llinventorygallery.h @@ -129,6 +129,7 @@ public: bool hasVisibleItems(); void handleModifiedFilter(); LLScrollContainer* getScrollableContainer() { return mScrollPanel; } + LLInventoryGalleryItem* getSelectedItem(); protected: diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index b0422b7bd9..2f6276ff77 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -122,7 +122,9 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p) mViewMode(MODE_COMBINATION), mCombinationShapeDirty(true), mListViewRootUpdatedConnection(), - mGalleryRootUpdatedConnection() + mGalleryRootUpdatedConnection(), + mDelayedCombGalleryScroll(false), + mDelayedCombInvPanelScroll(false) { // Menu Callbacks (non contex menus) mCommitCallbackRegistrar.add("Inventory.DoToSelected", boost::bind(&LLPanelMainInventory::doToSelected, this, _2)); @@ -466,7 +468,7 @@ void LLPanelMainInventory::newFolderWindow(LLUUID folder_id, LLUUID item_to_sele main_inventory->setFocus(true); if(item_to_select.notNull()) { - sidepanel_inventory->getActivePanel()->setSelection(item_to_select, TAKE_FOCUS_YES); + main_inventory->setGallerySelection(item_to_select); } return; } @@ -491,7 +493,7 @@ void LLPanelMainInventory::newFolderWindow(LLUUID folder_id, LLUUID item_to_sele main_inventory->setSingleFolderViewRoot(folder_id); if(item_to_select.notNull()) { - sidepanel_inventory->getActivePanel()->setSelection(item_to_select, TAKE_FOCUS_YES); + main_inventory->setGallerySelection(item_to_select, true); } } } @@ -2345,6 +2347,15 @@ void LLPanelMainInventory::updateCombinationVisibility() mCombinationScroller->reshape(desired_width, inv_rect.getHeight() + galery_rect.getHeight(), true); mCombinationGalleryPanel->setShape(galery_rect, false); mCombinationInventoryPanel->setShape(inv_rect, false); + + if(mDelayedCombGalleryScroll) + { + scrollToGallerySelection(); + } + else if(mDelayedCombInvPanelScroll) + { + scrollToInvPanelSelection(); + } } } @@ -2478,7 +2489,7 @@ LLInventoryFilter& LLPanelMainInventory::getCurrentFilter() } } -void LLPanelMainInventory::setGallerySelection(const LLUUID& item_id) +void LLPanelMainInventory::setGallerySelection(const LLUUID& item_id, bool new_window) { if(mSingleFolderMode && isGalleryViewMode()) { @@ -2488,13 +2499,60 @@ void LLPanelMainInventory::setGallerySelection(const LLUUID& item_id) { if(mCombinationGalleryPanel->getFilter().checkAgainstFilterThumbnails(item_id)) { - mCombinationGalleryPanel->changeItemSelection(item_id, true); + mCombinationGalleryPanel->changeItemSelection(item_id, false); + if(new_window) + { + mDelayedCombGalleryScroll = new_window; + } + else + { + scrollToGallerySelection(); + } } else { - mCombinationInventoryPanel->setSelection(item_id, false); + mCombinationInventoryPanel->setSelection(item_id, true); + if(new_window) + { + mDelayedCombInvPanelScroll = new_window; + } + else + { + scrollToInvPanelSelection(); + } } } + else if (mSingleFolderMode && isListViewMode()) + { + mSingleFolderPanelInventory->setSelection(item_id, true); + } +} + +void LLPanelMainInventory::scrollToGallerySelection() +{ + LLInventoryGalleryItem* item = mCombinationGalleryPanel->getSelectedItem(); + LLScrollContainer* scroll_panel = getChild("combination_view_inventory"); + + if(item) + { + LLRect item_rect; + item->localRectToOtherView(item->getLocalRect(), &item_rect, mCombinationScroller); + scroll_panel->scrollToShowRect(item_rect); + } } + +void LLPanelMainInventory::scrollToInvPanelSelection() +{ + LLFolderViewItem* item = mCombinationInventoryPanel->getRootFolder()->getCurSelectedItem(); + LLScrollContainer* scroll_panel = getChild("combination_view_inventory"); + + if(item) + { + LLRect item_rect; + item->localRectToOtherView(item->getLocalRect(), &item_rect, mCombinationScroller); + scroll_panel->scrollToShowRect(item_rect); + } +} + // List Commands // //////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 21e08bbac8..44beba6b4f 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -120,10 +120,13 @@ public: void onBackFolderClicked(); void onForwardFolderClicked(); void setSingleFolderViewRoot(const LLUUID& folder_id, bool clear_nav_history = true); - void setGallerySelection(const LLUUID& item_id); + void setGallerySelection(const LLUUID& item_id, bool new_window = false); LLUUID getSingleFolderViewRoot(); bool isSingleFolderMode() { return mSingleFolderMode; } + void scrollToGallerySelection(); + void scrollToInvPanelSelection(); + void setViewMode(EViewModeType mode); bool isListViewMode() { return (mViewMode == MODE_LIST); } bool isGalleryViewMode() { return (mViewMode == MODE_GALLERY); } @@ -236,6 +239,8 @@ private: bool mForceShowInvLayout; bool mCombinationShapeDirty; + bool mDelayedCombGalleryScroll; + bool mDelayedCombInvPanelScroll; // List Commands // //////////////////////////////////////////////////////////////////////////////// }; -- cgit v1.2.3 From 03ed823e5993acf874289e6439e6df31732e4743 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Sat, 6 May 2023 02:33:39 +0300 Subject: SL-19688 Fix combined view not updating on thumbnail change --- indra/newview/llpanelmaininventory.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 2f6276ff77..c57ff26b91 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -916,6 +916,7 @@ void LLPanelMainInventory::changed(U32 mask) || (mask & LLInventoryObserver::STRUCTURE) || (mask & LLInventoryObserver::REMOVE) || (mask & LLInventoryObserver::ADD) + || (mask & LLInventoryObserver::INTERNAL) // Thumbnail || (mask & LLInventoryObserver::LABEL)) { // todo: can be limited to just observed folder -- cgit v1.2.3 From eaf95d084a585c8a0a9ac086679487fa40e1db71 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Sat, 6 May 2023 03:17:45 +0300 Subject: SL-19689 In combination view 'raname' field doesn't update position properly --- indra/newview/llpanelmaininventory.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index c57ff26b91..06b71d0f7a 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -2357,6 +2357,12 @@ void LLPanelMainInventory::updateCombinationVisibility() { scrollToInvPanelSelection(); } + + LLFolderView* root_folder = mCombinationInventoryPanel->getRootFolder(); + if (root_folder) + { + root_folder->updateRenamerPosition(); + } } } -- cgit v1.2.3 From 90631fccef6ab1596655b18fb7dbdc87a4cb80ac Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 9 May 2023 17:16:26 +0100 Subject: SL-19676 - more update and scene loading stats. Added texture and mesh count --- indra/newview/llmeshrepository.cpp | 3 +++ indra/newview/lltexturefetch.cpp | 8 +++++++- indra/newview/llviewerstatsrecorder.cpp | 19 +++++++++++++------ indra/newview/llviewerstatsrecorder.h | 18 ++++++++++++++---- 4 files changed, 37 insertions(+), 11 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index f937754368..e2fb218b1b 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -56,6 +56,7 @@ #include "llviewermessage.h" #include "llviewerobjectlist.h" #include "llviewerregion.h" +#include "llviewerstatsrecorder.h" #include "llviewertexturelist.h" #include "llvolume.h" #include "llvolumemgr.h" @@ -4089,6 +4090,8 @@ void LLMeshRepository::notifyMeshLoaded(const LLVolumeParams& mesh_params, LLVol } mLoadingMeshes[detail].erase(obj_iter); + + LLViewerStatsRecorder::instance().meshLoaded(); } } diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index b0d6a5d466..eea56af0ae 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -2183,7 +2183,6 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response, LL_DEBUGS(LOG_TXT) << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL; if (data_size > 0) { - LLViewerStatsRecorder::instance().textureFetch(data_size); // *TODO: set the formatted image data here directly to avoid the copy // Hold on to body for later copy @@ -2249,6 +2248,13 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response, mHaveAllData = TRUE; } mRequestedSize = data_size; + + if (mHaveAllData) + { + LLViewerStatsRecorder::instance().textureFetch(); + } + + // *TODO: set the formatted image data here directly to avoid the copy } else { diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp index 64167135ac..f95a960186 100644 --- a/indra/newview/llviewerstatsrecorder.cpp +++ b/indra/newview/llviewerstatsrecorder.cpp @@ -80,7 +80,8 @@ void LLViewerStatsRecorder::clearStats() mObjectCacheUpdateReplacements = 0; mObjectUpdateFailures = 0; mObjectUpdateFailuresSize = 0; - mTextureFetchSize = 0; + mTextureFetchCount = 0; + mMeshLoadedCount = 0; } @@ -243,8 +244,9 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << "Cache Update Adds," << "Cache Update Replacements," << "Update Failures," - << "Texture Fetch bps," - << "\n"; + << "Texture Count," + << "Mesh Load Count," + << "\n"; data_size = col_headers.str().size(); if (fwrite(col_headers.str().c_str(), 1, data_size, mStatsFile ) != data_size) @@ -277,7 +279,8 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << "," << mObjectCacheUpdateAdds << "," << mObjectCacheUpdateReplacements << "," << mObjectUpdateFailures - << "," << (mTextureFetchSize * 8 / delta_time) + << "," << mTextureFetchCount + << "," << mMeshLoadedCount << "\n"; data_size = stats_data.str().size(); @@ -329,10 +332,14 @@ F32 LLViewerStatsRecorder::getTimeSinceStart() return (F32) (LLFrameTimer::getTotalSeconds() - mFileOpenTime); } -void LLViewerStatsRecorder::recordTextureFetch( S32 msg_size ) +void LLViewerStatsRecorder::recordTextureFetch() { - mTextureFetchSize += msg_size; + mTextureFetchCount += 1; } +void LLViewerStatsRecorder::recordMeshLoaded() +{ + mMeshLoadedCount += 1; +} diff --git a/indra/newview/llviewerstatsrecorder.h b/indra/newview/llviewerstatsrecorder.h index 90f8ca8742..37c08a51cf 100644 --- a/indra/newview/llviewerstatsrecorder.h +++ b/indra/newview/llviewerstatsrecorder.h @@ -101,14 +101,22 @@ class LLViewerStatsRecorder : public LLSingleton } } - void textureFetch(S32 msg_size) + void textureFetch() { if (mEnableStatsRecording) { - recordTextureFetch(msg_size); + recordTextureFetch(); } } + void meshLoaded() + { + if (mEnableStatsRecording) + { + recordMeshLoaded(); + } + } + void idle() { writeToLog(mInterval); @@ -123,7 +131,8 @@ private: void recordObjectUpdateEvent(const EObjectUpdateType update_type); void recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result); void recordRequestCacheMissesEvent(S32 count); - void recordTextureFetch(S32 msg_size); + void recordTextureFetch(); + void recordMeshLoaded(); void writeToLog(F32 interval); void closeStatsFile(); void makeStatsFileName(); @@ -156,7 +165,8 @@ private: S32 mObjectCacheUpdateReplacements; S32 mObjectUpdateFailures; S32 mObjectUpdateFailuresSize; - S32 mTextureFetchSize; + S32 mTextureFetchCount; + S32 mMeshLoadedCount; void clearStats(); }; -- cgit v1.2.3 From 06f63d9b871458f71340ba7d0126bf964d17048f Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Wed, 10 May 2023 12:02:09 +0300 Subject: SL-19683 'New folder' menu item should be disable for the listed folders in sfv --- indra/newview/llpanelmaininventory.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 06b71d0f7a..4577c1defa 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -1498,7 +1498,6 @@ void LLPanelMainInventory::onAddButtonClick() if (menu) { disableAddIfNeeded(); - menu->getChild("New Folder")->setEnabled(!isRecentItemsPanelSelected()); setUploadCostIfNeeded(); @@ -2242,7 +2241,7 @@ void LLPanelMainInventory::disableAddIfNeeded() { bool enable = !mSingleFolderMode || is_add_allowed(getCurrentSFVRoot()); - menu->getChild("New Folder")->setEnabled(enable); + menu->getChild("New Folder")->setEnabled(enable && !isRecentItemsPanelSelected()); menu->getChild("New Script")->setEnabled(enable); menu->getChild("New Note")->setEnabled(enable); menu->getChild("New Gesture")->setEnabled(enable); -- cgit v1.2.3 From 8a1cb8c00cf75ff1e09c72c2fb487728ec77c66b Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Wed, 10 May 2023 12:51:08 +0300 Subject: SL-19697 FIXED Clicking on inventory item in list view does not unselect item in gallery view --- indra/newview/llinventorygallery.cpp | 8 ++++++++ indra/newview/llinventorygallery.h | 1 + indra/newview/llpanelmaininventory.cpp | 21 ++++++++++++++++++++- indra/newview/llpanelmaininventory.h | 2 ++ 4 files changed, 31 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 37801c8dd5..9c7e96e97e 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -1056,6 +1056,14 @@ void LLInventoryGallery::deselectItem(const LLUUID& category_id) } } +void LLInventoryGallery::clearSelection() +{ + if(mSelectedItemID != LLUUID::null) + { + changeItemSelection(LLUUID::null); + } +} + void LLInventoryGallery::signalSelectionItemID(const LLUUID& category_id) { mSelectionChangeSignal(category_id); diff --git a/indra/newview/llinventorygallery.h b/indra/newview/llinventorygallery.h index dfb7be6a86..f7065afdae 100644 --- a/indra/newview/llinventorygallery.h +++ b/indra/newview/llinventorygallery.h @@ -116,6 +116,7 @@ public: void computeDifference(const LLInventoryModel::cat_array_t vcats, const LLInventoryModel::item_array_t vitems, uuid_vec_t& vadded, uuid_vec_t& vremoved); void deselectItem(const LLUUID& category_id); + void clearSelection(); void changeItemSelection(const LLUUID& item_id, bool scroll_to_selection = false); void scrollToShowItem(const LLUUID& item_id); void signalSelectionItemID(const LLUUID& category_id); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 4577c1defa..a8c8ce994d 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -262,7 +262,7 @@ BOOL LLPanelMainInventory::postBuild() LLInventoryFilter& comb_inv_filter = mCombinationInventoryPanel->getFilter(); comb_inv_filter.setFilterThumbnails(LLInventoryFilter::FILTER_EXCLUDE_THUMBNAILS); comb_inv_filter.markDefault(); - mCombinationInventoryPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onSelectionChange, this, mCombinationInventoryPanel, _1, _2)); + mCombinationInventoryPanel->setSelectCallback(boost::bind(&LLPanelMainInventory::onCombinationInventorySelectionChanged, this, _1, _2)); mCombinationInventoryPanel->setRootChangedCallback(boost::bind(&LLPanelMainInventory::onCombinationRootChanged, this, false)); mCombinationGalleryPanel = getChild("comb_gallery_view_inv"); @@ -270,6 +270,7 @@ BOOL LLPanelMainInventory::postBuild() comb_gallery_filter.setFilterThumbnails(LLInventoryFilter::FILTER_ONLY_THUMBNAILS); comb_gallery_filter.markDefault(); mCombinationGalleryPanel->setRootChangedCallback(boost::bind(&LLPanelMainInventory::onCombinationRootChanged, this, true)); + mCombinationGalleryPanel->setSelectionChangeCallback(boost::bind(&LLPanelMainInventory::onCombinationGallerySelectionChanged, this, _1)); mCombinationScroller = getChild("combination_scroller"); @@ -2296,6 +2297,24 @@ void LLPanelMainInventory::onCombinationRootChanged(bool gallery_clicked) mCombinationInventoryPanel->reshape(1, 1); } +void LLPanelMainInventory::onCombinationGallerySelectionChanged(const LLUUID& category_id) +{ + if(category_id != LLUUID::null) + { + mCombinationInventoryPanel->unSelectAll(); + } +} + +void LLPanelMainInventory::onCombinationInventorySelectionChanged(const std::deque& items, BOOL user_action) +{ + onSelectionChange(mCombinationInventoryPanel, items, user_action); + + if(!items.empty()) + { + mCombinationGalleryPanel->clearSelection(); + } +} + void LLPanelMainInventory::updateCombinationVisibility() { if(mSingleFolderMode diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 44beba6b4f..bc010ff37f 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -221,6 +221,8 @@ protected: void updateNavButtons(); void onCombinationRootChanged(bool gallery_clicked); + void onCombinationGallerySelectionChanged(const LLUUID& category_id); + void onCombinationInventorySelectionChanged(const std::deque& items, BOOL user_action); /** * Set upload cost in "Upload" sub menu. */ -- cgit v1.2.3 From 4a09f190d55483857ad70b7d2ddb75a98f0f57d7 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Wed, 10 May 2023 16:02:14 +0300 Subject: SL-19650 don't build anything except direct children views for single-folder panel --- indra/newview/llinventorypanel.cpp | 28 ++++++++++++++++++++-------- indra/newview/llinventorypanel.h | 5 ++++- 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 6d739c909c..d6eee523f4 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -161,7 +161,8 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) : mInvFVBridgeBuilder(NULL), mInventoryViewModel(p.name), mGroupedItemBridge(new LLFolderViewGroupedItemBridge), - mFocusSelection(false) + mFocusSelection(false), + mBuildChildrenViews(true) { mInvFVBridgeBuilder = &INVENTORY_BRIDGE_BUILDER; @@ -1016,8 +1017,11 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id, LLInventoryObject const* objectp, LLFolderViewItem *folder_view_item, LLFolderViewFolder *parent_folder, - const EBuildModes &mode) + const EBuildModes &mode, + S32 depth) { + depth++; + // Force the creation of an extra root level folder item if required by the inventory panel (default is "false") bool allow_drop = true; bool create_root = false; @@ -1117,7 +1121,8 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id, } } - bool create_children = folder_view_item && objectp->getType() == LLAssetType::AT_CATEGORY; + bool create_children = folder_view_item && objectp->getType() == LLAssetType::AT_CATEGORY + && (mBuildChildrenViews || depth == 0); if (create_children) { @@ -1137,7 +1142,10 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id, { create_children = false; // run it again for the sake of creating children - mBuildViewsQueue.push_back(id); + if (mBuildChildrenViews || depth == 0) + { + mBuildViewsQueue.push_back(id); + } } else { @@ -1150,7 +1158,10 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id, { create_children = false; // run it to create children, current caller is only interested in current view - mBuildViewsQueue.push_back(id); + if (mBuildChildrenViews || depth == 0) + { + mBuildViewsQueue.push_back(id); + } break; } case BUILD_ONE_FOLDER: @@ -1198,11 +1209,11 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id, // each time, especially since content is growing, we can just // iter over copy of mItemMap in some way LLFolderViewItem* view_itemp = getItemByID(cat->getUUID()); - buildViewsTree(cat->getUUID(), id, cat, view_itemp, parentp, (mode == BUILD_ONE_FOLDER ? BUILD_NO_CHILDREN : mode)); + buildViewsTree(cat->getUUID(), id, cat, view_itemp, parentp, (mode == BUILD_ONE_FOLDER ? BUILD_NO_CHILDREN : mode), depth); } else { - buildViewsTree(cat->getUUID(), id, cat, NULL, parentp, (mode == BUILD_ONE_FOLDER ? BUILD_NO_CHILDREN : mode)); + buildViewsTree(cat->getUUID(), id, cat, NULL, parentp, (mode == BUILD_ONE_FOLDER ? BUILD_NO_CHILDREN : mode), depth); } } } @@ -1222,7 +1233,7 @@ LLFolderViewItem* LLInventoryPanel::buildViewsTree(const LLUUID& id, // each time, especially since content is growing, we can just // iter over copy of mItemMap in some way LLFolderViewItem* view_itemp = getItemByID(item->getUUID()); - buildViewsTree(item->getUUID(), id, item, view_itemp, parentp, mode); + buildViewsTree(item->getUUID(), id, item, view_itemp, parentp, mode, depth); } } } @@ -2078,6 +2089,7 @@ static LLDefaultChildRegistry::Register t_single_f LLInventorySingleFolderPanel::LLInventorySingleFolderPanel(const Params& params) : LLInventoryPanel(params) { + mBuildChildrenViews = false; getFilter().setSingleFolderMode(true); getFilter().setEmptyLookupMessage("InventorySingleFolderNoMatches"); getFilter().setDefaultEmptyLookupMessage("InventorySingleFolderEmpty"); diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index f2eab4a642..1476194195 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -305,6 +305,8 @@ protected: */ const LLInventoryFolderViewModelBuilder* mInvFVBridgeBuilder; + bool mBuildChildrenViews; + //-------------------------------------------------------------------- // Sorting @@ -372,7 +374,8 @@ private: LLInventoryObject const* objectp, LLFolderViewItem *target_view, LLFolderViewFolder *parent_folder_view, - const EBuildModes &mode); + const EBuildModes &mode, + S32 depth = -1); typedef enum e_views_initialization_state { -- cgit v1.2.3 From 42f16180a985fc0e4704a4e25489ada9d662631a Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 10 May 2023 18:41:55 +0300 Subject: SL-19536 SL-19652 Fix inventory fetching --- indra/newview/llinventorymodelbackgroundfetch.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 0bb56c7d0c..6b88d0aaf7 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -437,9 +437,10 @@ void LLInventoryModelBackgroundFetch::bulkFetch() { const LLViewerInventoryCategory * cat(gInventory.getCategory(cat_id)); - if (cat && std::find(all_cats.begin(), all_cats.end(), cat_id) == all_cats.end()) + if (cat) { - if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion()) + if (LLViewerInventoryCategory::VERSION_UNKNOWN == cat->getVersion() + && std::find(all_cats.begin(), all_cats.end(), cat_id) == all_cats.end()) { LLSD folder_sd; folder_sd["folder_id"] = cat->getUUID(); -- cgit v1.2.3 From 4173cae02165e36d96638761f29bd6d00ac24ddc Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 11 May 2023 01:16:42 +0100 Subject: sl-19676 - more loading stats and 360 Interest List mode work --- indra/newview/app_settings/settings.xml | 11 ----- indra/newview/llagent.cpp | 76 +++++++++++++++++++----------- indra/newview/llagent.h | 5 ++ indra/newview/llfloater360capture.cpp | 66 +++++--------------------- indra/newview/llfloater360capture.h | 4 +- indra/newview/llviewermenu.cpp | 59 +++--------------------- indra/newview/llviewermessage.cpp | 36 ++++++++------- indra/newview/llviewerobjectlist.cpp | 12 ++--- indra/newview/llviewerregion.cpp | 82 ++++++++++++++++++++++++++++++++- indra/newview/llviewerregion.h | 18 ++++++++ indra/newview/llviewerstatsrecorder.cpp | 56 +++++++--------------- indra/newview/llviewerstatsrecorder.h | 28 +++++------ 12 files changed, 231 insertions(+), 222 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 9f2d6f746d..775ddb0571 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -16964,17 +16964,6 @@ Value 0 - 360CaptureUseInterestListCap - - Comment - Flag if set, uses the new InterestList cap to ask the simulator for full content - Persist - 1 - Type - Boolean - Value - 1 - 360CaptureJPEGEncodeQuality Comment diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 8cc9be7244..89d4df7caa 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -401,6 +401,7 @@ LLAgent::LLAgent() : mHttpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID), mTeleportState(TELEPORT_NONE), mRegionp(NULL), + mUse360Mode(false), mAgentOriginGlobal(), mPositionGlobal(), @@ -894,11 +895,20 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal // static void LLAgent::capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion *regionp) -{ - if (regionp && regionp->getRegionID() == region_id) +{ // Changed regions and now have the region capabilities + if (regionp) { - regionp->requestSimulatorFeatures(); - LLAppViewer::instance()->updateNameLookupUrl(regionp); + if (regionp->getRegionID() == region_id) + { + regionp->requestSimulatorFeatures(); + LLAppViewer::instance()->updateNameLookupUrl(regionp); + } + + if (gAgent.getInterestList360Mode()) + { + const bool use_360_mode = true; + gAgent.changeInterestListMode(use_360_mode); + } } } @@ -2910,39 +2920,53 @@ void LLAgent::processMaturityPreferenceFromServer(const LLSD &result, U8 perferr handlePreferredMaturityResult(maturity); } - -bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure) -{ - if (!getRegion()) +// Using a new capability, tell the simulator that we want it to send everything +// it knows about and not just what is in front of the camera, in its view +// frustum. We need this feature so that the contents of the region that appears +// in the 6 snapshots which we cannot see and is normally not "considered", is +// also rendered. Typically, this is turned on when the 360 capture floater is +// opened and turned off when it is closed. +// Note: for this version, we do not have a way to determine when "everything" +// has arrived and has been rendered so for now, the proposal is that users +// will need to experiment with the low resolution version and wait for some +// (hopefully) small period of time while the full contents resolves. +// Pass in a flag to ask the simulator/interest list to "send everything" or +// not (the default mode) +void LLAgent::changeInterestListMode(bool use_360_mode) +{ + mUse360Mode = use_360_mode; + + // Change interest list mode for all regions. If they are already set for the current mode, + // the setting will have no effect. + for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); + iter != LLWorld::getInstance()->getRegionList().end(); + ++iter) { - return false; + LLViewerRegion *regionp = *iter; + if (regionp && regionp->isAlive() && regionp->capabilitiesReceived()) + { + regionp->setInterestList360Mode(mUse360Mode); + } } - std::string url = getRegion()->getCapability(capName); +} - if (url.empty()) + +bool LLAgent::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + if (getRegion()) { - LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL; - return false; + return getRegion()->requestPostCapability(capName, postData, cbSuccess, cbFailure); } - - LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, mHttpPolicy, postData, cbSuccess, cbFailure); - return true; + return false; } bool LLAgent::requestGetCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure) { - std::string url; - - url = getRegionCapability(capName); - - if (url.empty()) + if (getRegion()) { - LL_WARNS("Agent") << "Could not retrieve region capability \"" << capName << "\"" << LL_ENDL; - return false; + return getRegion()->requestGetCapability(capName, cbSuccess, cbFailure); } - - LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(url, mHttpPolicy, cbSuccess, cbFailure); - return true; + return false; } BOOL LLAgent::getAdminOverride() const diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 498bea3c07..ef8df13fc6 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -294,9 +294,14 @@ public: boost::signals2::connection addRegionChangedCallback(const region_changed_signal_t::slot_type& cb); void removeRegionChangedCallback(boost::signals2::connection callback); + + void changeInterestListMode(bool use_360_mode); + bool getInterestList360Mode() const { return mUse360Mode; } + private: LLViewerRegion *mRegionp; region_changed_signal_t mRegionChangedSignal; + bool mUse360Mode; //-------------------------------------------------------------------- // History diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index 9c25cdbc7d..a0889abe2d 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -64,12 +64,11 @@ LLFloater360Capture::LLFloater360Capture(const LLSD& key) // such time as we ask it not to (the dtor). If we crash or // otherwise, exit before this is turned off, the Simulator // will take care of cleaning up for us. - if (gSavedSettings.getBOOL("360CaptureUseInterestListCap")) - { - // send everything to us for as long as this floater is open - const bool send_everything = true; - changeInterestListMode(send_everything); - } + mWasIn360Mode = gAgent.getInterestList360Mode(); + + // send everything to us for as long as this floater is open + const bool use_360_mode = true; + gAgent.changeInterestListMode(use_360_mode); } LLFloater360Capture::~LLFloater360Capture() @@ -81,13 +80,15 @@ LLFloater360Capture::~LLFloater360Capture() mWebBrowser->unloadMediaSource(); } - // Tell the Simulator not to send us everything anymore - // and revert to the regular "keyhole" frustum of interest + // Restore interest list mode to the state when started + // Normally LLFloater360Capture tells the Simulator send everything + // and now reverts to the regular "keyhole" frustum of interest // list updates. - if (!LLApp::isExiting() && gSavedSettings.getBOOL("360CaptureUseInterestListCap")) + if (!LLApp::isExiting() && + gSavedSettings.getBOOL("360CaptureUseInterestListCap") && + mWasIn360Mode != gAgent.getInterestList360Mode()) { - const bool send_everything = false; - changeInterestListMode(send_everything); + gAgent.changeInterestListMode(mWasIn360Mode); } } @@ -170,49 +171,6 @@ void LLFloater360Capture::onChooseQualityRadioGroup() setSourceImageSize(); } -// Using a new capability, tell the simulator that we want it to send everything -// it knows about and not just what is in front of the camera, in its view -// frustum. We need this feature so that the contents of the region that appears -// in the 6 snapshots which we cannot see and is normally not "considered", is -// also rendered. Typically, this is turned on when the 360 capture floater is -// opened and turned off when it is closed. -// Note: for this version, we do not have a way to determine when "everything" -// has arrived and has been rendered so for now, the proposal is that users -// will need to experiment with the low resolution version and wait for some -// (hopefully) small period of time while the full contents resolves. -// Pass in a flag to ask the simulator/interest list to "send everything" or -// not (the default mode) -void LLFloater360Capture::changeInterestListMode(bool send_everything) -{ - LLSD body; - - if (send_everything) - { - body["mode"] = LLSD::String("360"); - } - else - { - body["mode"] = LLSD::String("default"); - } - - if (gAgent.requestPostCapability("InterestList", body, [](const LLSD & response) - { - LL_DEBUGS("360Capture") << "InterestList capability responded: \n" << - ll_pretty_print_sd(response) << - LL_ENDL; - })) - { - LL_DEBUGS("360Capture") << "Successfully posted an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; - } - else - { - LL_WARNS("360Capture") << "Unable to post an InterestList capability request with payload: \n" << - ll_pretty_print_sd(body) << - LL_ENDL; - } -} // There is is a setting (360CaptureSourceImageSize) that holds the size // (width == height since it's a square) of each of the 6 source snapshots. diff --git a/indra/newview/llfloater360capture.h b/indra/newview/llfloater360capture.h index 8f765c0b1b..61316c65f3 100644 --- a/indra/newview/llfloater360capture.h +++ b/indra/newview/llfloater360capture.h @@ -50,8 +50,6 @@ class LLFloater360Capture: void onOpen(const LLSD& key) override; void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override; - void changeInterestListMode(bool send_everything); - const std::string getHTMLBaseFolder(); void capture360Images(); @@ -93,6 +91,8 @@ class LLFloater360Capture: std::string mImageSaveDir; LLPointer mRawImages[6]; + + bool mWasIn360Mode; }; #endif // LL_FLOATER_360CAPTURE_H diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index d1b240d2c4..23abd0fe16 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1301,65 +1301,18 @@ class LLAdvancedToggleInterestList360Mode : public view_listener_t public: bool handleEvent(const LLSD &userdata) { - LLSD request; - LLSD body; - - // First do a GET to report on current mode and update stats - if (gAgent.requestGetCapability("InterestList", - [](const LLSD &response) { - LL_DEBUGS("360Capture") << "InterestList capability GET responded: \n" - << ll_pretty_print_sd(response) << LL_ENDL; - })) - { - LL_DEBUGS("360Capture") << "Successful GET InterestList capability request with return body: \n" - << ll_pretty_print_sd(body) << LL_ENDL; - } - else - { - LL_WARNS("360Capture") << "Unable to GET InterestList capability request with return body: \n" - << ll_pretty_print_sd(body) << LL_ENDL; - } - - // Now do a POST to change the mode - if (sUsing360) - { - body["mode"] = LLSD::String("default"); - } - else - { - body["mode"] = LLSD::String("360"); - } - sUsing360 = !sUsing360; - LL_INFOS("360Capture") << "Setting InterestList capability mode to " << body["mode"].asString() << LL_ENDL; - - if (gAgent.requestPostCapability("InterestList", body, - [](const LLSD &response) { - LL_DEBUGS("360Capture") << "InterestList capability responded: \n" - << ll_pretty_print_sd(response) << LL_ENDL; - })) - { - LL_DEBUGS("360Capture") << "Successfully posted an InterestList capability request with payload: \n" - << ll_pretty_print_sd(body) << LL_ENDL; - return true; - } - else - { - LL_DEBUGS("360Capture") << "Unable to post an InterestList capability request with payload: \n" - << ll_pretty_print_sd(body) << LL_ENDL; - return false; - } - }; - - static bool sUsing360; + // Toggle the mode - regions will get updated + bool new_mode = !gAgent.getInterestList360Mode(); + gAgent.changeInterestListMode(new_mode); + return true; + } }; -bool LLAdvancedToggleInterestList360Mode::sUsing360 = false; - class LLAdvancedCheckInterestList360Mode : public view_listener_t { bool handleEvent(const LLSD& userdata) { - return LLAdvancedToggleInterestList360Mode::sUsing360; + return gAgent.getInterestList360Mode(); } }; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index a60f11d97b..ef83fa161b 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -99,6 +99,7 @@ #include "llviewerobjectlist.h" #include "llviewerparcelmgr.h" #include "llviewerstats.h" +#include "llviewerstatsrecorder.h" #include "llviewertexteditor.h" #include "llviewerthrottle.h" #include "llviewerwindow.h" @@ -3759,31 +3760,34 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data) continue; } - LLViewerObject *objectp = gObjectList.findObject(id); - if (objectp) + LLViewerObject *objectp = gObjectList.findObject(id); + if (objectp) + { + // Display green bubble on kill + if ( gShowObjectUpdates ) { - // Display green bubble on kill - if ( gShowObjectUpdates ) - { - LLColor4 color(0.f,1.f,0.f,1.f); - gPipeline.addDebugBlip(objectp->getPositionAgent(), color); - LL_DEBUGS("MessageBlip") << "Kill blip for local " << local_id << " at " << objectp->getPositionAgent() << LL_ENDL; - } - - // Do the kill - gObjectList.killObject(objectp); + LLColor4 color(0.f,1.f,0.f,1.f); + gPipeline.addDebugBlip(objectp->getPositionAgent(), color); + LL_DEBUGS("MessageBlip") << "Kill blip for local " << local_id << " at " << objectp->getPositionAgent() << LL_ENDL; } - if(delete_object) - { - regionp->killCacheEntry(local_id); + // Do the kill + gObjectList.killObject(objectp); + } + + if(delete_object) + { + regionp->killCacheEntry(local_id); } // We should remove the object from selection after it is marked dead by gObjectList to make LLToolGrab, // which is using the object, release the mouse capture correctly when the object dies. // See LLToolGrab::handleHoverActive() and LLToolGrab::handleHoverNonPhysical(). LLSelectMgr::getInstance()->removeObjectFromSelections(id); - } + + } // end for loop + + LLViewerStatsRecorder::instance().recordObjectKills(num_objects); } void process_time_synch(LLMessageSystem *mesgsys, void **user_data) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 0c9e929cf3..5f0e331baa 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -369,7 +369,7 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry* if (!objectp) { LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL; - recorder.objectUpdateFailure(0); + recorder.objectUpdateFailure(); return NULL; } justCreated = true; @@ -501,7 +501,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, << " Flags: " << flags << " Region: " << regionp->getName() << " Region id: " << regionp->getRegionID() << LL_ENDL; - recorder.objectUpdateFailure(msg_size); + recorder.objectUpdateFailure(); continue; } else if ((flags & FLAGS_TEMPORARY_ON_REZ) == 0) @@ -612,7 +612,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (update_type == OUT_TERSE_IMPROVED) { // LL_INFOS() << "terse update for an unknown object (compressed):" << fullid << LL_ENDL; - recorder.objectUpdateFailure(msg_size); + recorder.objectUpdateFailure(); continue; } } @@ -621,7 +621,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (update_type != OUT_FULL) { //LL_INFOS() << "terse update for an unknown object:" << fullid << LL_ENDL; - recorder.objectUpdateFailure(msg_size); + recorder.objectUpdateFailure(); continue; } @@ -634,7 +634,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, { mNumDeadObjectUpdates++; //LL_INFOS() << "update for a dead object:" << fullid << LL_ENDL; - recorder.objectUpdateFailure(msg_size); + recorder.objectUpdateFailure(); continue; } #endif @@ -647,7 +647,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, if (!objectp) { LL_INFOS() << "createObject failure for object: " << fullid << LL_ENDL; - recorder.objectUpdateFailure(msg_size); + recorder.objectUpdateFailure(); continue; } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 54d787366f..7abd77505d 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -646,7 +646,8 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, mInvisibilityCheckHistory(-1), mPaused(FALSE), mRegionCacheHitCount(0), - mRegionCacheMissCount(0) + mRegionCacheMissCount(0), + mUse360Mode(false) { mWidth = region_width_meters; mImpl->mOriginGlobal = from_region_handle(handle); @@ -3283,6 +3284,9 @@ void LLViewerRegion::setCapabilitiesReceived(bool received) // This is a single-shot signal. Forget callbacks to save resources. mCapabilitiesReceivedSignal.disconnect_all_slots(); + + // Set the region to the desired interest list mode + setInterestList360Mode(gAgent.getInterestList360Mode()); } } @@ -3301,6 +3305,82 @@ void LLViewerRegion::logActiveCapabilities() const log_capabilities(mImpl->mCapabilities); } + +bool LLViewerRegion::requestPostCapability(const std::string &capName, LLSD &postData, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + std::string url = getCapability(capName); + + if (url.empty()) + { + LL_WARNS("Region") << "Could not retrieve region " << getRegionID() + << " POST capability \"" << capName << "\"" << LL_ENDL; + return false; + } + + LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpPost(url, gAgent.getAgentPolicy(), postData, cbSuccess, cbFailure); + return true; +} + +bool LLViewerRegion::requestGetCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + std::string url; + + url = getCapability(capName); + + if (url.empty()) + { + LL_WARNS("Region") << "Could not retrieve region " << getRegionID() + << " GET capability \"" << capName << "\"" << LL_ENDL; + return false; + } + + LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpGet(url, gAgent.getAgentPolicy(), cbSuccess, cbFailure); + return true; +} + + +void LLViewerRegion::setInterestList360Mode(bool use_360_mode) +{ + if (use_360_mode != mUse360Mode) + { + LLSD body; + mUse360Mode = use_360_mode; + + if (mUse360Mode) + { + body["mode"] = LLSD::String("360"); + } + else + { + body["mode"] = LLSD::String("default"); + } + + if (requestPostCapability("InterestList", body, + [](const LLSD &response) { + LL_DEBUGS("360Capture") << "InterestList capability responded: \n" + << ll_pretty_print_sd(response) << LL_ENDL; + })) + { + LL_DEBUGS("360Capture") << "Region " << getRegionID() + << " Successfully posted an InterestList capability request with payload: \n" + << ll_pretty_print_sd(body) << LL_ENDL; + } + else + { + LL_WARNS("360Capture") << "Region " << getRegionID() + << " Unable to post an InterestList capability request with payload: \n" + << ll_pretty_print_sd(body) << LL_ENDL; + } + } + else + { + LL_DEBUGS("360Capture") << "Region " << getRegionID() << "No change, skipping Interest List mode POST to " + << (use_360_mode ? "360" : "default") << " mode" << LL_ENDL; + } +} + + + LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type) { if (type < mImpl->mObjectPartition.size() && type < PARTITION_VO_CACHE) diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 81371b7f30..3da0c376d3 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -32,6 +32,7 @@ #include #include +#include "llcorehttputil.h" #include "llwind.h" #include "v3dmath.h" #include "llstring.h" @@ -278,6 +279,15 @@ public: static bool isSpecialCapabilityName(const std::string &name); void logActiveCapabilities() const; + // Utilities to post and get via + // HTTP using the agent's policy settings and headers. + typedef LLCoreHttpUtil::HttpCoroutineAdapter::completionCallback_t httpCallback_t; + bool requestPostCapability(const std::string &capName, + LLSD &postData, + httpCallback_t cbSuccess = NULL, + httpCallback_t cbFailure = NULL); + bool requestGetCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); + /// implements LLCapabilityProvider /*virtual*/ const LLHost& getHost() const; const U64 &getHandle() const { return mHandle; } @@ -477,6 +487,11 @@ public: }; typedef std::set region_priority_list_t; + void setInterestList360Mode(bool use_360_mode); + bool getInterestList360Mode() const { return mUse360Mode; } + + + private: static S32 sNewObjectCreationThrottle; LLViewerRegionImpl * mImpl; @@ -574,6 +589,9 @@ private: LLFrameTimer mMaterialsCapThrottleTimer; LLFrameTimer mRenderInfoRequestTimer; LLFrameTimer mRenderInfoReportTimer; + + // how the server interest list works + bool mUse360Mode; }; inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp index f95a960186..6372679a07 100644 --- a/indra/newview/llviewerstatsrecorder.cpp +++ b/indra/newview/llviewerstatsrecorder.cpp @@ -73,15 +73,14 @@ void LLViewerStatsRecorder::clearStats() mObjectFullUpdates = 0; mObjectTerseUpdates = 0; mObjectCacheMissRequests = 0; - mObjectCacheMissResponses = 0; mObjectCacheUpdateDupes = 0; mObjectCacheUpdateChanges = 0; mObjectCacheUpdateAdds = 0; mObjectCacheUpdateReplacements = 0; mObjectUpdateFailures = 0; - mObjectUpdateFailuresSize = 0; mTextureFetchCount = 0; mMeshLoadedCount = 0; + mObjectKills = 0; } @@ -100,12 +99,6 @@ void LLViewerStatsRecorder::enableObjectStatsRecording(bool enable, bool logging -void LLViewerStatsRecorder::recordObjectUpdateFailure(S32 msg_size) -{ - mObjectUpdateFailures++; - mObjectUpdateFailuresSize += msg_size; -} - void LLViewerStatsRecorder::recordCacheMissEvent(U8 cache_miss_type) { if (LLViewerRegion::CACHE_MISS_TYPE_TOTAL == cache_miss_type) @@ -119,24 +112,17 @@ void LLViewerStatsRecorder::recordCacheMissEvent(U8 cache_miss_type) } -void LLViewerStatsRecorder::recordCacheHitEvent() -{ - mObjectCacheHitCount++; -} - void LLViewerStatsRecorder::recordObjectUpdateEvent(const EObjectUpdateType update_type) { switch (update_type) { case OUT_FULL: - mObjectFullUpdates++; + case OUT_FULL_COMPRESSED: + mObjectFullUpdates++; break; case OUT_TERSE_IMPROVED: mObjectTerseUpdates++; break; - case OUT_FULL_COMPRESSED: - mObjectCacheMissResponses++; - break; default: LL_WARNS() << "Unknown update_type" << LL_ENDL; break; @@ -165,11 +151,6 @@ void LLViewerStatsRecorder::recordCacheFullUpdate(LLViewerRegion::eCacheUpdateRe }; } -void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count) -{ - mObjectCacheMissRequests += count; -} - void LLViewerStatsRecorder::writeToLog( F32 interval ) { if (!mEnableStatsLogging || !mEnableStatsRecording) @@ -185,7 +166,7 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) if (mSkipSaveIfZeros) { S32 total_events = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + - mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures; if (total_events == 0) { @@ -202,14 +183,16 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << mObjectFullUpdates << " full updates, " << mObjectTerseUpdates << " terse updates, " << mObjectCacheMissRequests << " cache miss requests, " - << mObjectCacheMissResponses << " cache miss responses, " << mObjectCacheUpdateDupes << " cache update dupes, " << mObjectCacheUpdateChanges << " cache update changes, " << mObjectCacheUpdateAdds << " cache update adds, " - << mObjectCacheUpdateReplacements << " cache update replacements, " - << mObjectUpdateFailures << " update failures" + << mObjectCacheUpdateReplacements << " cache update replacements," + << mObjectUpdateFailures << " update failures," + << mTextureFetchCount << " texture fetches, " + << mMeshLoadedCount << " mesh loads, " + << mObjectKills << " object kills" << LL_ENDL; - + if (mStatsFile == NULL) { // Refresh settings @@ -237,8 +220,7 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << "Cache Crc Misses," << "Full Updates," << "Terse Updates," - << "Cache Miss Requests," - << "Cache Miss Responses," + << "Cache Miss Requests," // Normally results in a Full Update from simulator << "Cache Update Dupes," << "Cache Update Changes," << "Cache Update Adds," @@ -246,12 +228,16 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << "Update Failures," << "Texture Count," << "Mesh Load Count," + << "Object Kills" << "\n"; data_size = col_headers.str().size(); if (fwrite(col_headers.str().c_str(), 1, data_size, mStatsFile ) != data_size) { LL_WARNS() << "failed to write full headers to " << mStatsFileName << LL_ENDL; + // Close the file and turn off stats logging + closeStatsFile(); + return; } } else @@ -273,7 +259,6 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << "," << mObjectFullUpdates << "," << mObjectTerseUpdates << "," << mObjectCacheMissRequests - << "," << mObjectCacheMissResponses << "," << mObjectCacheUpdateDupes << "," << mObjectCacheUpdateChanges << "," << mObjectCacheUpdateAdds @@ -281,6 +266,7 @@ void LLViewerStatsRecorder::writeToLog( F32 interval ) << "," << mObjectUpdateFailures << "," << mTextureFetchCount << "," << mMeshLoadedCount + << "," << mObjectKills << "\n"; data_size = stats_data.str().size(); @@ -332,14 +318,4 @@ F32 LLViewerStatsRecorder::getTimeSinceStart() return (F32) (LLFrameTimer::getTotalSeconds() - mFileOpenTime); } -void LLViewerStatsRecorder::recordTextureFetch() -{ - mTextureFetchCount += 1; -} - -void LLViewerStatsRecorder::recordMeshLoaded() -{ - mMeshLoadedCount += 1; -} - diff --git a/indra/newview/llviewerstatsrecorder.h b/indra/newview/llviewerstatsrecorder.h index 37c08a51cf..b9fe02e54d 100644 --- a/indra/newview/llviewerstatsrecorder.h +++ b/indra/newview/llviewerstatsrecorder.h @@ -53,11 +53,11 @@ class LLViewerStatsRecorder : public LLSingleton bool isEnabled() const { return mEnableStatsRecording; } bool isLogging() const { return mEnableStatsLogging; } - void objectUpdateFailure(S32 msg_size) + void objectUpdateFailure() { if (mEnableStatsRecording) { - recordObjectUpdateFailure(msg_size); + mObjectUpdateFailures++; } } @@ -73,7 +73,7 @@ class LLViewerStatsRecorder : public LLSingleton { if (mEnableStatsRecording) { - recordCacheHitEvent(); + mObjectCacheHitCount++; } } @@ -97,7 +97,7 @@ class LLViewerStatsRecorder : public LLSingleton { if (mEnableStatsRecording) { - recordRequestCacheMissesEvent(count); + mObjectCacheMissRequests += count; } } @@ -105,7 +105,7 @@ class LLViewerStatsRecorder : public LLSingleton { if (mEnableStatsRecording) { - recordTextureFetch(); + mTextureFetchCount += 1; } } @@ -113,10 +113,18 @@ class LLViewerStatsRecorder : public LLSingleton { if (mEnableStatsRecording) { - recordMeshLoaded(); + mMeshLoadedCount += 1; } } + void recordObjectKills(S32 num_objects) + { + if (mEnableStatsRecording) + { + mObjectKills += num_objects; + } + } + void idle() { writeToLog(mInterval); @@ -125,14 +133,9 @@ class LLViewerStatsRecorder : public LLSingleton F32 getTimeSinceStart(); private: - void recordObjectUpdateFailure(S32 msg_size); void recordCacheMissEvent(U8 cache_miss_type); - void recordCacheHitEvent(); void recordObjectUpdateEvent(const EObjectUpdateType update_type); void recordCacheFullUpdate(LLViewerRegion::eCacheUpdateResult update_result); - void recordRequestCacheMissesEvent(S32 count); - void recordTextureFetch(); - void recordMeshLoaded(); void writeToLog(F32 interval); void closeStatsFile(); void makeStatsFileName(); @@ -158,15 +161,14 @@ private: S32 mObjectFullUpdates; S32 mObjectTerseUpdates; S32 mObjectCacheMissRequests; - S32 mObjectCacheMissResponses; S32 mObjectCacheUpdateDupes; S32 mObjectCacheUpdateChanges; S32 mObjectCacheUpdateAdds; S32 mObjectCacheUpdateReplacements; S32 mObjectUpdateFailures; - S32 mObjectUpdateFailuresSize; S32 mTextureFetchCount; S32 mMeshLoadedCount; + S32 mObjectKills; void clearStats(); }; -- cgit v1.2.3 From f7872f7ed1aaf42a6dc4a7999a554f428f6dfe60 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Thu, 11 May 2023 17:54:35 +0300 Subject: SL-19701 Clicking on 'Show' in inventory offering does not open inventory in Single folder --- indra/newview/llinventorypanel.cpp | 11 ++++++++--- indra/newview/llinventorypanel.h | 2 +- indra/newview/llviewermessage.cpp | 20 +++++++++++++++++++- 3 files changed, 28 insertions(+), 5 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index d6eee523f4..ca5abfd661 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1798,14 +1798,14 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open) } //static -void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id, BOOL main_panel, BOOL take_keyboard_focus, BOOL reset_filter) +void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id, BOOL use_main_panel, BOOL take_keyboard_focus, BOOL reset_filter) { LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory"); sidepanel_inventory->showInventoryPanel(); bool in_inbox = (gInventory.isObjectDescendentOf(obj_id, gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX))); - if (!in_inbox && (main_panel || !sidepanel_inventory->getMainInventoryPanel()->isRecentItemsPanelSelected())) + if (!in_inbox && (use_main_panel || !sidepanel_inventory->getMainInventoryPanel()->isRecentItemsPanelSelected())) { sidepanel_inventory->selectAllItemsPanel(); } @@ -1822,7 +1822,12 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L } } - + LLPanelMainInventory* main_inventory = sidepanel_inventory->getMainInventoryPanel(); + if (main_inventory && main_inventory->isSingleFolderMode() + && use_main_panel) + { + main_inventory->toggleViewMode(); + } LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open); if (active_panel) diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 1476194195..f323a6c6d7 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -246,7 +246,7 @@ public: static void openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id, - BOOL main_panel = FALSE, + BOOL use_main_panel = FALSE, BOOL take_keyboard_focus = TAKE_FOCUS_YES, BOOL reset_filter = FALSE); static void setSFViewAndOpenFolder(const LLInventoryPanel* panel, const LLUUID& folder_id); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 065e3ab3ad..78241a7c71 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -76,6 +76,7 @@ #include "llnotifications.h" #include "llnotificationsutil.h" #include "llpanelgrouplandmoney.h" +#include "llpanelmaininventory.h" #include "llrecentpeople.h" #include "llscriptfloater.h" #include "llscriptruntimeperms.h" @@ -1536,11 +1537,28 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam } //////////////////////////////////////////////////////////////////////////////// + static LLUICachedControl find_original_new_floater("FindOriginalOpenWindow", false); + //show in a new single-folder window + if(find_original_new_floater) + { + const LLInventoryObject *obj = gInventory.getObject(obj_id); + if (obj && obj->getParentUUID().notNull()) + { + LLPanelMainInventory::newFolderWindow(obj->getParentUUID(), obj_id); + } + } + else + { // Highlight item const BOOL auto_open = gSavedSettings.getBOOL("ShowInInventory") && // don't open if showininventory is false !from_name.empty(); // don't open if it's not from anyone. - LLInventoryPanel::openInventoryPanelAndSetSelection(auto_open, obj_id); + if(auto_open) + { + LLFloaterReg::showInstance("inventory"); + } + LLInventoryPanel::openInventoryPanelAndSetSelection(auto_open, obj_id, true); + } } } -- cgit v1.2.3 From 6e2e9d5904b3cc89deb755f3552d915104065aa0 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 12 May 2023 18:26:02 +0300 Subject: SL-19649 Adjust other classes for new deleteAllChildren mechanics --- indra/newview/llinspecttoast.cpp | 7 +++++++ indra/newview/llinventorymodel.cpp | 5 ++++- indra/newview/lltooldraganddrop.cpp | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp index 68801b0895..6f93a78ca6 100644 --- a/indra/newview/llinspecttoast.cpp +++ b/indra/newview/llinspecttoast.cpp @@ -47,6 +47,7 @@ public: /*virtual*/ void onOpen(const LLSD& notification_id); /*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask); + /*virtual*/ void deleteAllChildren(); /*virtual*/ void removeChild(LLView* child); private: void onToastDestroy(LLToast * toast); @@ -122,6 +123,12 @@ BOOL LLInspectToast::handleToolTip(S32 x, S32 y, MASK mask) return LLFloater::handleToolTip(x, y, mask); } +void LLInspectToast::deleteAllChildren() +{ + mPanel = NULL; + LLInspect::deleteAllChildren(); +} + // virtual void LLInspectToast::removeChild(LLView* child) { diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index c65901a754..bc0d523bd2 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -906,7 +906,10 @@ const LLUUID LLInventoryModel::findCategoryUUIDForTypeInRoot( } } - if(rv.isNull() && root_id.notNull() && preferred_type != LLFolderType::FT_MARKETPLACE_LISTINGS) + if(rv.isNull() + && root_id.notNull() + && preferred_type != LLFolderType::FT_MARKETPLACE_LISTINGS + && preferred_type != LLFolderType::FT_OUTBOX) { // if it does not exists, it should either be added // to createCommonSystemCategories or server should diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index d10b999220..78e068f808 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1733,7 +1733,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( } const LLUUID &outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX); - if(gInventory.isObjectDescendentOf(item->getUUID(), outbox_id)) + if(outbox_id.notNull() && gInventory.isObjectDescendentOf(item->getUUID(), outbox_id)) { // Legacy return ACCEPT_NO; @@ -2160,7 +2160,7 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory( } const LLUUID &outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX); - if(gInventory.isObjectDescendentOf(category->getUUID(), outbox_id)) + if(outbox_id.notNull() && gInventory.isObjectDescendentOf(category->getUUID(), outbox_id)) { // Legacy return ACCEPT_NO; -- cgit v1.2.3 From b4d0aeee37973525589223842e149caa28dea2af Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 12 May 2023 19:17:31 +0300 Subject: SL-19712 Folders and items shouldn't be both called items --- indra/newview/llfloaterchangeitemthumbnail.cpp | 2 ++ .../skins/default/xui/en/floater_change_item_thumbnail.xml | 8 ++++++++ 2 files changed, 10 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llfloaterchangeitemthumbnail.cpp b/indra/newview/llfloaterchangeitemthumbnail.cpp index 4249ae9305..3070c437bd 100644 --- a/indra/newview/llfloaterchangeitemthumbnail.cpp +++ b/indra/newview/llfloaterchangeitemthumbnail.cpp @@ -335,6 +335,7 @@ void LLFloaterChangeItemThumbnail::refreshFromObject(LLInventoryObject* obj) LLViewerInventoryItem* item = dynamic_cast(obj); if (item) { + setTitle(getString("title_item_thumbnail")); // This floater probably shouldn't be possible to open // for imcomplete items llassert(item->isFinished()); @@ -348,6 +349,7 @@ void LLFloaterChangeItemThumbnail::refreshFromObject(LLInventoryObject* obj) if (cat) { + setTitle(getString("title_folder_thumbnail")); icon_img = LLUI::getUIImage(LLViewerFolderType::lookupIconName(cat->getPreferredType(), true)); if (thumbnail_id.isNull() && (cat->getPreferredType() == LLFolderType::FT_OUTFIT)) diff --git a/indra/newview/skins/default/xui/en/floater_change_item_thumbnail.xml b/indra/newview/skins/default/xui/en/floater_change_item_thumbnail.xml index f3f8ee0daa..ec2961b0f3 100644 --- a/indra/newview/skins/default/xui/en/floater_change_item_thumbnail.xml +++ b/indra/newview/skins/default/xui/en/floater_change_item_thumbnail.xml @@ -8,6 +8,14 @@ title="CHANGE ITEM IMAGE" width="319"> + + CHANGE ITEM IMAGE + + + CHANGE FOLDER IMAGE + Upload from computer -- cgit v1.2.3 From a6d867bccea37467d51cd037d6a58aca02a27e97 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 12 May 2023 21:14:14 +0300 Subject: SL-19583 Fix scrollbars flashing when resizing floater --- indra/newview/llpanelmaininventory.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index a8c8ce994d..5a8565b5aa 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -938,6 +938,7 @@ void LLPanelMainInventory::reshape(S32 width, S32 height, BOOL called_from_paren { mCombinationShapeDirty = true; LLPanel::reshape(width, height, called_from_parent); + updateCombinationVisibility(); } // virtual @@ -959,9 +960,9 @@ void LLPanelMainInventory::draw() mResortActivePanel = false; } + updateCombinationVisibility(); LLPanel::draw(); updateItemcountText(); - updateCombinationVisibility(); } void LLPanelMainInventory::updateItemcountText() -- cgit v1.2.3 From 81f1be67109885f98f649974022aa6d444dd633d Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 13 May 2023 04:10:28 +0100 Subject: sl-19676 - 360 Intereset list mode. Changed mode to be a string for future expansion instead of a bool toggle --- indra/newview/llagent.cpp | 36 ++++++++++++++++++++--------------- indra/newview/llagent.h | 7 ++++--- indra/newview/llfloater360capture.cpp | 9 ++++----- indra/newview/llfloater360capture.h | 2 +- indra/newview/llviewermenu.cpp | 12 +++++++++--- indra/newview/llviewerregion.cpp | 34 +++++++++++++++++---------------- indra/newview/llviewerregion.h | 11 ++++++----- 7 files changed, 63 insertions(+), 48 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 89d4df7caa..307f73fab4 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -401,7 +401,7 @@ LLAgent::LLAgent() : mHttpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID), mTeleportState(TELEPORT_NONE), mRegionp(NULL), - mUse360Mode(false), + mInterestListMode(LLViewerRegion::IL_MODE_DEFAULT), mAgentOriginGlobal(), mPositionGlobal(), @@ -904,10 +904,9 @@ void LLAgent::capabilityReceivedCallback(const LLUUID ®ion_id, LLViewerRegion LLAppViewer::instance()->updateNameLookupUrl(regionp); } - if (gAgent.getInterestList360Mode()) + if (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360) { - const bool use_360_mode = true; - gAgent.changeInterestListMode(use_360_mode); + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); } } } @@ -2932,22 +2931,29 @@ void LLAgent::processMaturityPreferenceFromServer(const LLSD &result, U8 perferr // (hopefully) small period of time while the full contents resolves. // Pass in a flag to ask the simulator/interest list to "send everything" or // not (the default mode) -void LLAgent::changeInterestListMode(bool use_360_mode) +void LLAgent::changeInterestListMode(const std::string &new_mode) { - mUse360Mode = use_360_mode; - - // Change interest list mode for all regions. If they are already set for the current mode, - // the setting will have no effect. - for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); - iter != LLWorld::getInstance()->getRegionList().end(); - ++iter) + if (new_mode != mInterestListMode) { - LLViewerRegion *regionp = *iter; - if (regionp && regionp->isAlive() && regionp->capabilitiesReceived()) + mInterestListMode = new_mode; + + // Change interest list mode for all regions. If they are already set for the current mode, + // the setting will have no effect. + for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); + iter != LLWorld::getInstance()->getRegionList().end(); + ++iter) { - regionp->setInterestList360Mode(mUse360Mode); + LLViewerRegion *regionp = *iter; + if (regionp && regionp->isAlive() && regionp->capabilitiesReceived()) + { + regionp->setInterestListMode(mInterestListMode); + } } } + else + { + LL_DEBUGS("360Capture") << "Agent interest list mode is already set to " << mInterestListMode << LL_ENDL; + } } diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index ef8df13fc6..b8ac47827a 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -295,13 +295,14 @@ public: void removeRegionChangedCallback(boost::signals2::connection callback); - void changeInterestListMode(bool use_360_mode); - bool getInterestList360Mode() const { return mUse360Mode; } + void changeInterestListMode(const std::string & new_mode); + const std::string & getInterestListMode() const { return mInterestListMode; } private: LLViewerRegion *mRegionp; region_changed_signal_t mRegionChangedSignal; - bool mUse360Mode; + + std::string mInterestListMode; // How agent wants regions to send updates //-------------------------------------------------------------------- // History diff --git a/indra/newview/llfloater360capture.cpp b/indra/newview/llfloater360capture.cpp index a0889abe2d..2c638fa959 100644 --- a/indra/newview/llfloater360capture.cpp +++ b/indra/newview/llfloater360capture.cpp @@ -64,11 +64,10 @@ LLFloater360Capture::LLFloater360Capture(const LLSD& key) // such time as we ask it not to (the dtor). If we crash or // otherwise, exit before this is turned off, the Simulator // will take care of cleaning up for us. - mWasIn360Mode = gAgent.getInterestList360Mode(); + mStartILMode = gAgent.getInterestListMode(); // send everything to us for as long as this floater is open - const bool use_360_mode = true; - gAgent.changeInterestListMode(use_360_mode); + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); } LLFloater360Capture::~LLFloater360Capture() @@ -86,9 +85,9 @@ LLFloater360Capture::~LLFloater360Capture() // list updates. if (!LLApp::isExiting() && gSavedSettings.getBOOL("360CaptureUseInterestListCap") && - mWasIn360Mode != gAgent.getInterestList360Mode()) + mStartILMode != gAgent.getInterestListMode()) { - gAgent.changeInterestListMode(mWasIn360Mode); + gAgent.changeInterestListMode(mStartILMode); } } diff --git a/indra/newview/llfloater360capture.h b/indra/newview/llfloater360capture.h index 61316c65f3..3fb2c7f3c7 100644 --- a/indra/newview/llfloater360capture.h +++ b/indra/newview/llfloater360capture.h @@ -92,7 +92,7 @@ class LLFloater360Capture: LLPointer mRawImages[6]; - bool mWasIn360Mode; + std::string mStartILMode; }; #endif // LL_FLOATER_360CAPTURE_H diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 23abd0fe16..fe6676759d 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1302,8 +1302,14 @@ public: bool handleEvent(const LLSD &userdata) { // Toggle the mode - regions will get updated - bool new_mode = !gAgent.getInterestList360Mode(); - gAgent.changeInterestListMode(new_mode); + if (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360) + { + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_DEFAULT); + } + else + { + gAgent.changeInterestListMode(LLViewerRegion::IL_MODE_360); + } return true; } }; @@ -1312,7 +1318,7 @@ class LLAdvancedCheckInterestList360Mode : public view_listener_t { bool handleEvent(const LLSD& userdata) { - return gAgent.getInterestList360Mode(); + return (gAgent.getInterestListMode() == LLViewerRegion::IL_MODE_360); } }; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 7abd77505d..9c2dc3c761 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -104,6 +104,9 @@ S32 LLViewerRegion::sLastCameraUpdated = 0; S32 LLViewerRegion::sNewObjectCreationThrottle = -1; LLViewerRegion::vocache_entry_map_t LLViewerRegion::sRegionCacheCleanup; +const std::string LLViewerRegion::IL_MODE_DEFAULT = "default"; +const std::string LLViewerRegion::IL_MODE_360 = "360"; + typedef std::map CapabilityMap; static void log_capabilities(const CapabilityMap &capmap); @@ -647,7 +650,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, mPaused(FALSE), mRegionCacheHitCount(0), mRegionCacheMissCount(0), - mUse360Mode(false) + mInterestListMode(IL_MODE_DEFAULT) { mWidth = region_width_meters; mImpl->mOriginGlobal = from_region_handle(handle); @@ -3286,7 +3289,7 @@ void LLViewerRegion::setCapabilitiesReceived(bool received) mCapabilitiesReceivedSignal.disconnect_all_slots(); // Set the region to the desired interest list mode - setInterestList360Mode(gAgent.getInterestList360Mode()); + setInterestListMode(gAgent.getInterestListMode()); } } @@ -3339,22 +3342,21 @@ bool LLViewerRegion::requestGetCapability(const std::string &capName, httpCallba } -void LLViewerRegion::setInterestList360Mode(bool use_360_mode) +void LLViewerRegion::setInterestListMode(const std::string &new_mode) { - if (use_360_mode != mUse360Mode) + if (new_mode != mInterestListMode) { - LLSD body; - mUse360Mode = use_360_mode; + mInterestListMode = new_mode; - if (mUse360Mode) - { - body["mode"] = LLSD::String("360"); - } - else - { - body["mode"] = LLSD::String("default"); - } + if (mInterestListMode != std::string(IL_MODE_DEFAULT) && mInterestListMode != std::string(IL_MODE_360)) + { + LL_WARNS("360Capture") << "Region " << getRegionID() << " setInterestListMode() invalid interest list mode: " + << mInterestListMode << ", setting to default" << LL_ENDL; + mInterestListMode = IL_MODE_DEFAULT; + } + LLSD body; + body["mode"] = mInterestListMode; if (requestPostCapability("InterestList", body, [](const LLSD &response) { LL_DEBUGS("360Capture") << "InterestList capability responded: \n" @@ -3375,13 +3377,13 @@ void LLViewerRegion::setInterestList360Mode(bool use_360_mode) else { LL_DEBUGS("360Capture") << "Region " << getRegionID() << "No change, skipping Interest List mode POST to " - << (use_360_mode ? "360" : "default") << " mode" << LL_ENDL; + << new_mode << " mode" << LL_ENDL; } } -LLSpatialPartition* LLViewerRegion::getSpatialPartition(U32 type) +LLSpatialPartition *LLViewerRegion::getSpatialPartition(U32 type) { if (type < mImpl->mObjectPartition.size() && type < PARTITION_VO_CACHE) { diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 3da0c376d3..6308058f63 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -487,12 +487,13 @@ public: }; typedef std::set region_priority_list_t; - void setInterestList360Mode(bool use_360_mode); - bool getInterestList360Mode() const { return mUse360Mode; } + void setInterestListMode(const std::string & new_mode); + const std::string & getInterestListMode() const { return mInterestListMode; } + static const std::string IL_MODE_DEFAULT; + static const std::string IL_MODE_360; - -private: + private: static S32 sNewObjectCreationThrottle; LLViewerRegionImpl * mImpl; LLFrameTimer mRegionTimer; @@ -591,7 +592,7 @@ private: LLFrameTimer mRenderInfoReportTimer; // how the server interest list works - bool mUse360Mode; + std::string mInterestListMode; }; inline BOOL LLViewerRegion::getRegionProtocol(U64 protocol) const -- cgit v1.2.3 From 74687f270545ededb77f29a7409f64303dcb2e2d Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 15 May 2023 23:05:39 +0300 Subject: SL-19643 Shutdown and startup should not warn about attachments. Initial attachments usually are not 'expected', shutdown is expected to detach everything --- indra/newview/llattachmentsmgr.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llattachmentsmgr.cpp b/indra/newview/llattachmentsmgr.cpp index d43048a8b6..1feefc3ef8 100644 --- a/indra/newview/llattachmentsmgr.cpp +++ b/indra/newview/llattachmentsmgr.cpp @@ -31,6 +31,7 @@ #include "llagent.h" #include "llappearancemgr.h" #include "llinventorymodel.h" +#include "llstartup.h" #include "lltooldraganddrop.h" // pack_permissions_slam #include "llviewerinventory.h" #include "llviewerregion.h" @@ -372,7 +373,7 @@ void LLAttachmentsMgr::onAttachmentArrived(const LLUUID& inv_item_id) { LLTimer timer; bool expected = mAttachmentRequests.getTime(inv_item_id, timer); - if (!expected) + if (!expected && LLStartUp::getStartupState() > STATE_WEARABLES_WAIT) { LLInventoryItem *item = gInventory.getItem(inv_item_id); LL_WARNS() << "ATT Attachment was unexpected or arrived after " << MAX_ATTACHMENT_REQUEST_LIFETIME << " seconds: " @@ -411,11 +412,15 @@ void LLAttachmentsMgr::onDetachCompleted(const LLUUID& inv_item_id) LL_DEBUGS("Avatar") << "ATT all detach requests have completed" << LL_ENDL; } } - else + else if (!LLApp::isExiting()) { LL_WARNS() << "ATT unexpected detach for " << (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL; } + else + { + LL_DEBUGS("Avatar") << "ATT detach on shutdown for " << (item ? item->getName() : "UNKNOWN") << " " << inv_item_id << LL_ENDL; + } LL_DEBUGS("Avatar") << "ATT detached item flagging as questionable for COF link checking " << (item ? item->getName() : "UNKNOWN") << " id " << inv_item_id << LL_ENDL; -- cgit v1.2.3 From 2dca661b6a7b40c1dcf94a08f5304df277542597 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 15 May 2023 23:24:00 +0100 Subject: SL-19676 - more IL control, added Reset Interest List Debug menu command --- indra/newview/llviewermenu.cpp | 31 ++++++++++++++++++++-- indra/newview/llviewerregion.cpp | 29 ++++++++++++++++++++ indra/newview/llviewerregion.h | 3 +++ indra/newview/skins/default/xui/en/menu_viewer.xml | 27 +++++++++++-------- 4 files changed, 77 insertions(+), 13 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index fe6676759d..c762e796aa 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -122,6 +122,7 @@ #include "llviewerstatsrecorder.h" #include "llvoavatarself.h" #include "llvoicevivox.h" +#include "llworld.h" #include "llworldmap.h" #include "pipeline.h" #include "llviewerjoystick.h" @@ -333,6 +334,7 @@ void handle_debug_avatar_textures(void*); void handle_grab_baked_texture(void*); BOOL enable_grab_baked_texture(void*); void handle_dump_region_object_cache(void*); +void handle_reset_interest_lists(void *); BOOL enable_save_into_task_inventory(void*); @@ -1346,6 +1348,14 @@ class LLAdvancedCheckStatsRecorder : public view_listener_t } }; +class LLAdvancedResetInterestLists : public view_listener_t +{ + bool handleEvent(const LLSD &userdata) + { // Reset all region interest lists + handle_reset_interest_lists(NULL); + return true; + } +}; class LLAdvancedBuyCurrencyTest : public view_listener_t @@ -3892,6 +3902,22 @@ void handle_dump_region_object_cache(void*) } } +void handle_reset_interest_lists(void *) +{ + // Check all regions and reset their interest list + for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin(); + iter != LLWorld::getInstance()->getRegionList().end(); + ++iter) + { + LLViewerRegion *regionp = *iter; + if (regionp && regionp->isAlive() && regionp->capabilitiesReceived()) + { + regionp->resetInterestList(); + } + } +} + + void handle_dump_focus() { LLUICtrl *ctrl = dynamic_cast(gFocusMgr.getKeyboardFocus()); @@ -9452,10 +9478,11 @@ void initialize_menus() // Advanced > World view_listener_t::addMenu(new LLAdvancedDumpScriptedCamera(), "Advanced.DumpScriptedCamera"); view_listener_t::addMenu(new LLAdvancedDumpRegionObjectCache(), "Advanced.DumpRegionObjectCache"); - view_listener_t::addMenu(new LLAdvancedToggleInterestList360Mode(), "Advanced.ToggleInterestList360Mode"); - view_listener_t::addMenu(new LLAdvancedCheckInterestList360Mode(), "Advanced.CheckInterestList360Mode"); view_listener_t::addMenu(new LLAdvancedToggleStatsRecorder(), "Advanced.ToggleStatsRecorder"); view_listener_t::addMenu(new LLAdvancedCheckStatsRecorder(), "Advanced.CheckStatsRecorder"); + view_listener_t::addMenu(new LLAdvancedToggleInterestList360Mode(), "Advanced.ToggleInterestList360Mode"); + view_listener_t::addMenu(new LLAdvancedCheckInterestList360Mode(), "Advanced.CheckInterestList360Mode"); + view_listener_t::addMenu(new LLAdvancedResetInterestLists(), "Advanced.ResetInterestLists"); // Advanced > UI commit.add("Advanced.WebBrowserTest", boost::bind(&handle_web_browser_test, _2)); // sigh! this one opens the MEDIA browser diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 9c2dc3c761..5254d766a8 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -3341,6 +3341,21 @@ bool LLViewerRegion::requestGetCapability(const std::string &capName, httpCallba return true; } +bool LLViewerRegion::requestDelCapability(const std::string &capName, httpCallback_t cbSuccess, httpCallback_t cbFailure) +{ + std::string url; + + url = getCapability(capName); + + if (url.empty()) + { + LL_WARNS("Region") << "Could not retrieve region " << getRegionID() << " DEL capability \"" << capName << "\"" << LL_ENDL; + return false; + } + + LLCoreHttpUtil::HttpCoroutineAdapter::callbackHttpDel(url, gAgent.getAgentPolicy(), cbSuccess, cbFailure); + return true; +} void LLViewerRegion::setInterestListMode(const std::string &new_mode) { @@ -3382,6 +3397,20 @@ void LLViewerRegion::setInterestListMode(const std::string &new_mode) } +void LLViewerRegion::resetInterestList() +{ + if (requestDelCapability("InterestList", [](const LLSD &response) { + LL_DEBUGS("360Capture") << "InterestList capability DEL responded: \n" << ll_pretty_print_sd(response) << LL_ENDL; + })) + { + LL_DEBUGS("360Capture") << "Region " << getRegionID() << " Successfully reset InterestList capability" << LL_ENDL; + } + else + { + LL_WARNS("360Capture") << "Region " << getRegionID() << " Unable to DEL InterestList capability request" << LL_ENDL; + } +} + LLSpatialPartition *LLViewerRegion::getSpatialPartition(U32 type) { diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 6308058f63..6956e9eb08 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -287,6 +287,7 @@ public: httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); bool requestGetCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); + bool requestDelCapability(const std::string &capName, httpCallback_t cbSuccess = NULL, httpCallback_t cbFailure = NULL); /// implements LLCapabilityProvider /*virtual*/ const LLHost& getHost() const; @@ -490,6 +491,8 @@ public: void setInterestListMode(const std::string & new_mode); const std::string & getInterestListMode() const { return mInterestListMode; } + void resetInterestList(); + static const std::string IL_MODE_DEFAULT; static const std::string IL_MODE_360; diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 07471ed5bb..51ac3d17ab 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -3485,16 +3485,6 @@ function="World.EnvPreset" - - - - - @@ -3503,7 +3493,22 @@ function="World.EnvPreset" - + + + + + + + + Date: Tue, 16 May 2023 02:00:51 +0300 Subject: SL-19602 Alt-Zoom overcompensates for z pelvis fixup Alt zoom was pointing near ground instead of agent's actual position --- indra/newview/llagentcamera.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 77131efd75..2cf86cb001 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -401,10 +401,15 @@ LLVector3 LLAgentCamera::calcFocusOffset(LLViewerObject *object, LLVector3 origi // if is avatar - don't do any funk heuristics to position the focal point // see DEV-30589 - if (object->isAvatar() || (object->isAnimatedObject() && object->getControlAvatar())) + if ((object->isAvatar() && !object->isRoot()) || (object->isAnimatedObject() && object->getControlAvatar())) { return original_focus_point - obj_pos; } + if (object->isAvatar()) + { + LLVOAvatar* av = object->asAvatar(); + return original_focus_point - av->getCharacterPosition(); + } LLQuaternion inv_obj_rot = ~obj_rot; // get inverse of rotation LLVector3 object_extents = object->getScale(); -- cgit v1.2.3 From 474012abd603f7e7963344fcd9d14cdc7db7bb9a Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Tue, 16 May 2023 18:03:57 +0300 Subject: SL-19686 reduce delay when switching between folders --- indra/newview/llinventorypanel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index ca5abfd661..edcd45db79 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -2195,8 +2195,8 @@ void LLInventorySingleFolderPanel::updateSingleFolderRoot() LLUUID root_id = mFolderID; if (mFolderRoot.get()) { - removeItemID(getRootFolderID()); - mFolderRoot.get()->destroyView(); + mItemMap.clear(); + mFolderRoot.get()->destroyRoot(); } mCommitCallbackRegistrar.pushScope(); -- cgit v1.2.3 From 55fb718598b474680ab66cdc667a9e779fb7807a Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Tue, 16 May 2023 18:34:32 +0300 Subject: SL-19701 open shared folder instead of just selecting it --- indra/newview/llviewermessage.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 78241a7c71..b359ef6df4 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1544,7 +1544,14 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam const LLInventoryObject *obj = gInventory.getObject(obj_id); if (obj && obj->getParentUUID().notNull()) { - LLPanelMainInventory::newFolderWindow(obj->getParentUUID(), obj_id); + if (obj->getActualType() == LLAssetType::AT_CATEGORY) + { + LLPanelMainInventory::newFolderWindow(obj_id); + } + else + { + LLPanelMainInventory::newFolderWindow(obj->getParentUUID(), obj_id); + } } } else -- cgit v1.2.3 From 86fc10f710ced7d2e7b1ddf01eef945aafd60e8b Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Tue, 16 May 2023 22:36:26 +0300 Subject: SL-19717 don't open new floater when taking an object from in-world or copying content --- indra/newview/llviewermessage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index b359ef6df4..3adb5db3bc 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1539,7 +1539,7 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam //////////////////////////////////////////////////////////////////////////////// static LLUICachedControl find_original_new_floater("FindOriginalOpenWindow", false); //show in a new single-folder window - if(find_original_new_floater) + if(find_original_new_floater && !from_name.empty()) { const LLInventoryObject *obj = gInventory.getObject(obj_id); if (obj && obj->getParentUUID().notNull()) -- cgit v1.2.3 From 07dc391ab76a8860d04bfb001cdc686cd576663d Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 17 May 2023 00:00:44 +0300 Subject: SL-19720 Fix missing buttons for replacing body parts --- indra/newview/llwearableitemslist.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp index 89b74ae962..8681f7c14e 100644 --- a/indra/newview/llwearableitemslist.cpp +++ b/indra/newview/llwearableitemslist.cpp @@ -104,8 +104,6 @@ BOOL LLPanelWearableOutfitItem::postBuild() { LLPanelWearableListItem::postBuild(); - LLViewerInventoryItem* inv_item = getItem(); - mShowWidgets &= (inv_item->getType() != LLAssetType::AT_BODYPART); if(mShowWidgets) { addWidgetToRightSide("add_wearable"); @@ -208,7 +206,12 @@ void LLPanelWearableOutfitItem::updateItem(const std::string& name, if(mShowWidgets) { setShowWidget("add_wearable", !is_worn); - setShowWidget("remove_wearable", is_worn); + + // Body parts can't be removed, only replaced + LLViewerInventoryItem* inv_item = getItem(); + bool show_remove = is_worn && inv_item && (inv_item->getType() != LLAssetType::AT_BODYPART); + setShowWidget("remove_wearable", show_remove); + if(mHovered) { setWidgetsVisible(true); -- cgit v1.2.3 From 784436a5b89062df69251c9ac28904f06a018011 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Wed, 17 May 2023 18:38:23 +0300 Subject: SL-19721 use LLOutfitObserver to handle cof changes --- indra/newview/llinventorygallery.cpp | 4 ++-- indra/newview/lloutfitslist.cpp | 3 +-- indra/newview/llpanelwearing.cpp | 13 ++----------- indra/newview/llpanelwearing.h | 1 - 4 files changed, 5 insertions(+), 16 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 9c7e96e97e..f97cb9dbf4 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -45,6 +45,7 @@ #include "llfriendcard.h" #include "llgesturemgr.h" #include "llmarketplacefunctions.h" +#include "lloutfitobserver.h" #include "lltrans.h" #include "llviewerassettype.h" #include "llviewermessage.h" @@ -244,8 +245,7 @@ void LLInventoryGallery::updateRootFolder() } } - const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); - mCategoriesObserver->addCategory(cof, boost::bind(&LLInventoryGallery::onCOFChanged, this)); + LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLInventoryGallery::onCOFChanged, this)); if (!mGalleryCreated) { diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index fe15d21e36..5c7792b0df 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -122,9 +122,8 @@ void LLOutfitsList::onOpen(const LLSD& info) { if (!mIsInitialized) { - const LLUUID cof = gInventory.findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT); // Start observing changes in Current Outfit category. - mCategoriesObserver->addCategory(cof, boost::bind(&LLOutfitsList::onCOFChanged, this)); + LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLOutfitsList::onCOFChanged, this)); } LLOutfitListBase::onOpen(info); diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp index 3347c40687..062150dc56 100644 --- a/indra/newview/llpanelwearing.cpp +++ b/indra/newview/llpanelwearing.cpp @@ -40,6 +40,7 @@ #include "llinventorymodel.h" #include "llinventoryobserver.h" #include "llmenubutton.h" +#include "lloutfitobserver.h" #include "llscrolllistctrl.h" #include "llviewermenu.h" #include "llviewerregion.h" @@ -218,8 +219,6 @@ LLPanelWearing::LLPanelWearing() , mIsInitialized(false) , mAttachmentsChangedConnection() { - mCategoriesObserver = new LLInventoryCategoriesObserver(); - mGearMenu = new LLWearingGearMenu(this); mContextMenu = new LLWearingContextMenu(); mAttachmentsMenu = new LLTempAttachmentsContextMenu(this); @@ -231,12 +230,6 @@ LLPanelWearing::~LLPanelWearing() delete mContextMenu; delete mAttachmentsMenu; - if (gInventory.containsObserver(mCategoriesObserver)) - { - gInventory.removeObserver(mCategoriesObserver); - } - delete mCategoriesObserver; - if (mAttachmentsChangedConnection.connected()) { mAttachmentsChangedConnection.disconnect(); @@ -281,10 +274,8 @@ void LLPanelWearing::onOpen(const LLSD& /*info*/) if (!category) return; - gInventory.addObserver(mCategoriesObserver); - // Start observing changes in Current Outfit category. - mCategoriesObserver->addCategory(cof, boost::bind(&LLWearableItemsList::updateList, mCOFItemsList, cof)); + LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&LLWearableItemsList::updateList, mCOFItemsList, cof)); // Fetch Current Outfit contents and refresh the list to display // initially fetched items. If not all items are fetched now diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h index 715404a457..18e543eec6 100644 --- a/indra/newview/llpanelwearing.h +++ b/indra/newview/llpanelwearing.h @@ -90,7 +90,6 @@ private: void getAttachmentLimitsCoro(std::string url); - LLInventoryCategoriesObserver* mCategoriesObserver; LLWearableItemsList* mCOFItemsList; LLScrollListCtrl* mTempItemsList; LLWearingGearMenu* mGearMenu; -- cgit v1.2.3 From c40ee46eb19c67d139e535ae262acc59c05ee315 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 17 May 2023 21:20:41 +0300 Subject: SL-19719 Fix packaging related warnings --- .../installers/windows/installer_template.nsi | 17 +---------------- indra/newview/installers/windows/lang_zh.nsi | Bin 10144 -> 10154 bytes 2 files changed, 1 insertion(+), 16 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 60e26274cb..ed37f541c8 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -507,7 +507,7 @@ Call un.UserSettingsFiles SectionEnd ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Make sure the user can install +;; Make sure the user can install/uninstall ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Function CheckIfAdministrator DetailPrint $(CheckAdministratorInstDP) @@ -521,21 +521,6 @@ lbl_is_admin: FunctionEnd -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Make sure the user can uninstall -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.CheckIfAdministrator - DetailPrint $(CheckAdministratorUnInstDP) - UserInfo::GetAccountType - Pop $R0 - StrCmp $R0 "Admin" lbl_is_admin - MessageBox MB_OK $(CheckAdministratorUnInstMB) - Quit -lbl_is_admin: - Return - -FunctionEnd - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Function CheckWillUninstallV2 ;; diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi index 7922d9df52..0985663041 100755 Binary files a/indra/newview/installers/windows/lang_zh.nsi and b/indra/newview/installers/windows/lang_zh.nsi differ -- cgit v1.2.3 From 706d8f17273f4718a2adf5a43c1de5a1dc08abad Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 18 May 2023 22:22:07 +0300 Subject: SL-19732 Fix folder's thumbnail from sticking over folder's content --- indra/newview/llinventorypanel.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index edcd45db79..c5d3fa3f7a 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1311,10 +1311,18 @@ BOOL LLInventoryPanel::handleToolTip(S32 x, S32 y, MASK mask) params["inv_type"] = vm_item_p->getInventoryType(); params["thumbnail_id"] = vm_item_p->getThumbnailUUID(); params["item_id"] = vm_item_p->getUUID(); - + + // tooltip should only show over folder, but screen + // rect includes items under folder as well + LLRect actionable_rect = hover_item_p->calcScreenRect(); + if (hover_item_p->isOpen() && hover_item_p->hasVisibleChildren()) + { + actionable_rect.mBottom = actionable_rect.mTop - hover_item_p->getItemHeight(); + } + LLToolTipMgr::instance().show(LLToolTip::Params() .message(hover_item_p->getToolTip()) - .sticky_rect(hover_item_p->calcScreenRect()) + .sticky_rect(actionable_rect) .delay_time(LLView::getTooltipTimeout()) .create_callback(boost::bind(&LLInspectTextureUtil::createInventoryToolTip, _1)) .create_params(params)); -- cgit v1.2.3 From 100ace48f1cd64a364179c06900465209aac4945 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Thu, 18 May 2023 23:22:58 +0300 Subject: SL-19686 don't build gallery items without thumbnails in combination view --- indra/newview/llinventorygallery.cpp | 65 ++++++++++++++++++++++++++++++++++-- indra/newview/llinventorygallery.h | 4 +++ 2 files changed, 66 insertions(+), 3 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index f97cb9dbf4..18a7068b66 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -200,6 +200,14 @@ void LLInventoryGallery::updateRootFolder() delete mCategoriesObserver; mCategoriesObserver = new LLInventoryCategoriesObserver(); + + if (gInventory.containsObserver(mThumbnailsObserver)) + { + gInventory.removeObserver(mThumbnailsObserver); + } + delete mThumbnailsObserver; + mThumbnailsObserver = new LLThumbnailsObserver(); + gInventory.addObserver(mThumbnailsObserver); } { mRootChangedSignal(); @@ -699,7 +707,11 @@ void LLInventoryGallery::updateAddedItem(LLUUID item_id) LL_WARNS("InventoryGallery") << "Failed to find item: " << item_id << LL_ENDL; return; } - + if(!mFilter->checkAgainstFilterThumbnails(item_id)) + { + mThumbnailsObserver->addSkippedItem(item_id, boost::bind(&LLInventoryGallery::onThumbnailAdded, this, item_id)); + return; + } std::string name = obj->getName(); LLUUID thumbnail_id = obj->getThumbnailUUID();; LLInventoryType::EType inventory_type(LLInventoryType::IT_CATEGORY); @@ -816,6 +828,15 @@ void LLInventoryGallery::updateItemThumbnail(LLUUID item_id) } } +void LLInventoryGallery::onThumbnailAdded(LLUUID item_id) +{ + if((mItemMap.count(item_id) == 0) && mFilter->checkAgainstFilterThumbnails(item_id)) + { + updateAddedItem(item_id); + reArrangeRows(); + } +} + void LLInventoryGallery::showContextMenu(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& item_id) { if (mInventoryGalleryMenu && item_id.notNull()) @@ -1525,9 +1546,33 @@ void LLInventoryGalleryItem::updateNameText() void LLThumbnailsObserver::changed(U32 mask) { - if (!mItemMap.size()) - return; std::vector deleted_ids; + for (item_map_t::iterator iter = mSkippedItems.begin(); + iter != mSkippedItems.end(); + ++iter) + { + const LLUUID& obj_id = (*iter).first; + LLItemData& data = (*iter).second; + + LLInventoryObject* obj = gInventory.getObject(obj_id); + if (!obj) + { + deleted_ids.push_back(obj_id); + continue; + } + + const LLUUID thumbnail_id = obj->getThumbnailUUID(); + if (data.mThumbnailID != thumbnail_id) + { + data.mThumbnailID = thumbnail_id; + data.mCallback(); + } + } + for (std::vector::iterator deleted_id = deleted_ids.begin(); deleted_id != deleted_ids.end(); ++deleted_id) + { + removeSkippedItem(*deleted_id); + } + deleted_ids.clear(); for (item_map_t::iterator iter = mItemMap.begin(); iter != mItemMap.end(); @@ -1569,11 +1614,25 @@ bool LLThumbnailsObserver::addItem(const LLUUID& obj_id, callback_t cb) return false; } +void LLThumbnailsObserver::addSkippedItem(const LLUUID& obj_id, callback_t cb) +{ + LLInventoryObject* obj = gInventory.getObject(obj_id); + if (obj) + { + mSkippedItems.insert(item_map_value_t(obj_id, LLItemData(obj_id, obj->getThumbnailUUID(), cb))); + } +} + void LLThumbnailsObserver::removeItem(const LLUUID& obj_id) { mItemMap.erase(obj_id); } +void LLThumbnailsObserver::removeSkippedItem(const LLUUID& obj_id) +{ + mSkippedItems.erase(obj_id); +} + //----------------------------- // Helper drag&drop functions //----------------------------- diff --git a/indra/newview/llinventorygallery.h b/indra/newview/llinventorygallery.h index f7065afdae..473d1a1db4 100644 --- a/indra/newview/llinventorygallery.h +++ b/indra/newview/llinventorygallery.h @@ -89,6 +89,7 @@ public: void updateRemovedItem(LLUUID item_id); void updateChangedItemName(LLUUID item_id, std::string name); void updateItemThumbnail(LLUUID item_id); + void onThumbnailAdded(LLUUID item_id); void updateWornItem(LLUUID item_id, bool is_worn); void updateMessageVisibility(); @@ -308,7 +309,9 @@ public: virtual void changed(U32 mask); bool addItem(const LLUUID& obj_id, callback_t cb); + void addSkippedItem(const LLUUID& obj_id, callback_t cb); void removeItem(const LLUUID& obj_id); + void removeSkippedItem(const LLUUID& obj_id); protected: @@ -328,6 +331,7 @@ protected: typedef std::map item_map_t; typedef item_map_t::value_type item_map_value_t; item_map_t mItemMap; + item_map_t mSkippedItems; }; class LLGalleryGestureObserver : public LLGestureManagerObserver -- cgit v1.2.3 From cc8af5f37df1e200bc0b55740887a99157066e35 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 12 May 2023 18:26:02 +0300 Subject: SL-19649 Adjust other classes for new deleteAllChildren mechanics --- indra/newview/llinspecttoast.cpp | 7 +++++++ indra/newview/llinventorymodel.cpp | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp index 68801b0895..6f93a78ca6 100644 --- a/indra/newview/llinspecttoast.cpp +++ b/indra/newview/llinspecttoast.cpp @@ -47,6 +47,7 @@ public: /*virtual*/ void onOpen(const LLSD& notification_id); /*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask); + /*virtual*/ void deleteAllChildren(); /*virtual*/ void removeChild(LLView* child); private: void onToastDestroy(LLToast * toast); @@ -122,6 +123,12 @@ BOOL LLInspectToast::handleToolTip(S32 x, S32 y, MASK mask) return LLFloater::handleToolTip(x, y, mask); } +void LLInspectToast::deleteAllChildren() +{ + mPanel = NULL; + LLInspect::deleteAllChildren(); +} + // virtual void LLInspectToast::removeChild(LLView* child) { diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 0bbf201dc6..b4727de77f 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -594,7 +594,11 @@ const LLUUID LLInventoryModel::findCategoryUUIDForTypeInRoot( } } - if(rv.isNull() && create_folder && root_id.notNull()) + if(rv.isNull() + && root_id.notNull() + && create_folder + && preferred_type != LLFolderType::FT_MARKETPLACE_LISTINGS + && preferred_type != LLFolderType::FT_OUTBOX) { if (isInventoryUsable()) -- cgit v1.2.3 From 7140640b6963dacfa012dfec679798fc4dd13a17 Mon Sep 17 00:00:00 2001 From: Andrey Lihatskiy Date: Fri, 19 May 2023 02:31:28 +0300 Subject: DRTVWR-580 Post-merge fix - unused code --- indra/newview/llfilepicker.cpp | 8 -------- 1 file changed, 8 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index ab5f88e210..f1f156c2e0 100644 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -745,14 +745,6 @@ void set_nav_save_data(LLFilePicker::ESaveFilter filter, std::string &extension, creator = "\?\?\?\?"; extension = "xaf"; break; - -#ifdef _CORY_TESTING - case LLFilePicker::FFSAVE_GEOMETRY: - type = "\?\?\?\?"; - creator = "\?\?\?\?"; - extension = "slg"; - break; -#endif case LLFilePicker::FFSAVE_XML: type = "\?\?\?\?"; -- cgit v1.2.3 From d53c8a7d65cabaab303c21db7bb6d2ce4370c331 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Fri, 19 May 2023 18:09:35 +0300 Subject: SL-19738 don't switch the view when creating an item --- indra/newview/llinventorypanel.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index c5d3fa3f7a..604bffb96e 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1834,7 +1834,13 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L if (main_inventory && main_inventory->isSingleFolderMode() && use_main_panel) { - main_inventory->toggleViewMode(); + const LLInventoryObject *obj = gInventory.getObject(obj_id); + if (obj) + { + main_inventory->setSingleFolderViewRoot(obj->getParentUUID(), false); + main_inventory->setGallerySelection(obj_id); + return; + } } LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open); -- cgit v1.2.3 From b61ea595b5f2cac0f108b05526f0a371f512bfd4 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Fri, 19 May 2023 17:33:27 -0400 Subject: SL-18837: Clean up more set-but-unused variables for Xcode 14.3 --- indra/newview/llagent.cpp | 2 -- indra/newview/llmodelpreview.cpp | 5 ----- indra/newview/llpanelnearbymedia.cpp | 6 +----- indra/newview/llsceneview.cpp | 5 +---- indra/newview/llselectmgr.cpp | 12 ++++++------ indra/newview/llsprite.cpp | 5 ----- indra/newview/llstartup.cpp | 2 +- indra/newview/lltextureview.cpp | 4 ++-- indra/newview/llviewerobjectlist.cpp | 3 --- indra/newview/llvosurfacepatch.cpp | 7 ------- indra/newview/llvovolume.cpp | 13 +------------ 11 files changed, 12 insertions(+), 52 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 9018a5f168..f158d312ff 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3707,7 +3707,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **) // take controls msg->getU32("Data", "Controls", controls, block_index ); msg->getBOOL("Data", "PassToAgent", passon, block_index ); - U32 total_count = 0; for (i = 0; i < TOTAL_CONTROLS; i++) { if (controls & ( 1 << i)) @@ -3720,7 +3719,6 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **) { gAgent.mControlsTakenCount[i]++; } - total_count++; } } } diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index e1a5b22490..495153981b 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -2685,9 +2685,6 @@ void LLModelPreview::clearBuffers() void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights) { - U32 mesh_count = 0; - - LLModelLoader::model_list* model = NULL; if (lod < 0 || lod > 4) @@ -2818,8 +2815,6 @@ void LLModelPreview::genBuffers(S32 lod, bool include_skin_weights) vb->flush(); mVertexBuffer[lod][mdl].push_back(vb); - - ++mesh_count; } } } diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index 02911313ed..3c3cd5d522 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -619,7 +619,6 @@ void LLPanelNearByMedia::refreshList() LLViewerMedia::impl_list impls = media_inst->getPriorityList(); LLViewerMedia::impl_list::iterator priority_iter; - U32 enabled_count = 0; U32 disabled_count = 0; // iterate over the impl list, creating rows as necessary. @@ -662,13 +661,10 @@ void LLPanelNearByMedia::refreshList() { disabled_count++; } - else { - enabled_count++; } } - } mDisableAllCtrl->setEnabled((gSavedSettings.getBOOL("AudioStreamingMusic") || - gSavedSettings.getBOOL("AudioStreamingMedia")) && + gSavedSettings.getBOOL("AudioStreamingMedia")) && (media_inst->isAnyMediaShowing() || media_inst->isParcelMediaPlaying() || media_inst->isParcelAudioPlaying())); diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp index 5e339a52bf..9b1d2d48c6 100644 --- a/indra/newview/llsceneview.cpp +++ b/indra/newview/llsceneview.cpp @@ -100,8 +100,6 @@ void LLSceneView::draw() F32 total_physics[] = { 0.f, 0.f }; - U32 object_count = 0; - LLViewerRegion* region = gAgent.getRegion(); if (region) { @@ -116,8 +114,7 @@ void LLSceneView::draw() U32 idx = object->isAttachment() ? 1 : 0; LLVolume* volume = object->getVolume(); - object_count++; - + F32 radius = object->getScale().magVec(); size[idx].push_back(radius); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 86f7d2bf25..195b172102 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5274,8 +5274,8 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, LLViewerRegion* last_region; LLViewerRegion* current_region; - S32 objects_sent = 0; - S32 packets_sent = 0; +// S32 objects_sent = 0; +// S32 packets_sent = 0; S32 objects_in_this_packet = 0; bool link_operation = message_name == "ObjectLink"; @@ -5407,7 +5407,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, (*pack_body)(node, user_data); // do any related logging (*log_func)(node, user_data); - ++objects_sent; +// ++objects_sent; ++objects_in_this_packet; // and on to the next object @@ -5425,7 +5425,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, { // otherwise send current message and start new one gMessageSystem->sendReliable( last_region->getHost()); - packets_sent++; +// packets_sent++; objects_in_this_packet = 0; gMessageSystem->newMessage(message_name.c_str()); @@ -5442,7 +5442,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, { // add root instance into new message (*pack_body)(linkset_root, user_data); - ++objects_sent; +// ++objects_sent; ++objects_in_this_packet; } } @@ -5456,7 +5456,7 @@ void LLSelectMgr::sendListToRegions(LLObjectSelectionHandle selected_handle, if (gMessageSystem->getCurrentSendTotal() > 0) { gMessageSystem->sendReliable( current_region->getHost()); - packets_sent++; +// packets_sent++; } else { diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp index c3eb70f850..fd41cdf0d7 100644 --- a/indra/newview/llsprite.cpp +++ b/indra/newview/llsprite.cpp @@ -79,7 +79,6 @@ void LLSprite::updateFace(LLFace &face) // First, figure out how many vertices/indices we need. U32 num_vertices, num_indices; - U32 vertex_count = 0; // Get the total number of vertices and indices if (mFollow) @@ -203,25 +202,21 @@ void LLSprite::updateFace(LLFace &face) *verticesp = mC; tex_coordsp++; verticesp++; - vertex_count++; *tex_coordsp = LLVector2(0.f, 1.f); *verticesp = mB; tex_coordsp++; verticesp++; - vertex_count++; *tex_coordsp = LLVector2(1.f, 1.f); *verticesp = mA; tex_coordsp++; verticesp++; - vertex_count++; *tex_coordsp = LLVector2(1.f, 0.0f); *verticesp = mD; tex_coordsp++; verticesp++; - vertex_count++; // Generate indices, since they're easy. // Just a series of quads. diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 6883ead5ee..70ca41c821 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -3244,7 +3244,7 @@ LLSD transform_cert_args(LLPointer cert) // are actually arrays, and we want to format them as comma separated // strings, so special case those. LLSDSerialize::toXML(cert_info[iter->first], std::cout); - if((iter->first== std::string(CERT_KEY_USAGE)) | + if((iter->first == std::string(CERT_KEY_USAGE)) || (iter->first == std::string(CERT_EXTENDED_KEY_USAGE))) { value = ""; diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index cf9211767e..84b61fc612 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -845,8 +845,8 @@ void LLTextureView::draw() if (imagep->getID() == LLAppViewer::getTextureFetch()->mDebugID) { - static S32 debug_count = 0; - ++debug_count; // for breakpoints +// static S32 debug_count = 0; +// ++debug_count; // for breakpoints } F32 pri; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index efc4ded79e..9666533db8 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -773,7 +773,6 @@ void LLViewerObjectList::dirtyAllObjectInventory() void LLViewerObjectList::updateApparentAngles(LLAgent &agent) { S32 i; - S32 num_objects = 0; LLViewerObject *objectp; S32 num_updates, max_value; @@ -830,8 +829,6 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent) objectp = mObjects[i]; if (!objectp->isDead()) { - num_objects++; - // Update distance & gpw objectp->setPixelAreaAndAngle(agent); // Also sets the approx. pixel area objectp->updateTextures(); // Update the image levels of textures for this object. diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index b0af565867..5cb7e7478b 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -408,7 +408,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, LLStrider &indicesp, U32 &index_offset) { - S32 vertex_count = 0; S32 i, x, y; S32 num_vertices; @@ -443,7 +442,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } // North patch @@ -456,7 +454,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } @@ -493,7 +490,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } // Iterate through the north patch's points @@ -507,7 +503,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } @@ -551,7 +546,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } // Iterate through the north patch's points @@ -565,7 +559,6 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep, normalsp++; texCoords0p++; texCoords1p++; - vertex_count++; } for (i = 0; i < length; i++) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 2e7ccc8334..97b129db18 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -6287,7 +6287,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace LLSpatialGroup::buffer_map_t buffer_map; LLViewerTexture* last_tex = NULL; - S32 buffer_index = 0; S32 texture_index_channels = 1; @@ -6300,11 +6299,6 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace { texture_index_channels = gDeferredAlphaProgram.mFeatures.mIndexedTextureChannels; } - - if (distance_sort) - { - buffer_index = -1; - } static LLCachedControl max_texture_index(gSavedSettings, "RenderMaxTextureIndex", 16); texture_index_channels = llmin(texture_index_channels, (S32) max_texture_index); @@ -6328,14 +6322,9 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace tex = NULL; } - if (last_tex == tex) - { - buffer_index++; - } - else + if (last_tex != tex) { last_tex = tex; - buffer_index = 0; } bool bake_sunlight = LLPipeline::sBakeSunlight && facep->getDrawable()->isStatic(); -- cgit v1.2.3 From f366853f22ec6914471d7b265adf53736f080527 Mon Sep 17 00:00:00 2001 From: Maxim Nikolenko Date: Mon, 22 May 2023 14:42:31 +0300 Subject: SL-19735 Remove FB Connect Test; remove unused variable --- indra/newview/llviewerobjectlist.cpp | 7 ------- indra/newview/skins/default/xui/en/menu_viewer.xml | 7 ------- 2 files changed, 14 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 5f0e331baa..61f0e05825 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -472,7 +472,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, for (i = 0; i < num_objects; i++) { BOOL justCreated = FALSE; - S32 msg_size = 0; bool update_cache = false; //update object cache if it is a full-update or terse update if (compressed) @@ -529,7 +528,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, else if (update_type != OUT_FULL) // !compressed, !OUT_FULL ==> OUT_FULL_CACHED only? { mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i); - msg_size += sizeof(U32); getUUIDFromLocal(fullid, local_id, @@ -550,8 +548,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, update_cache = true; mesgsys->getUUIDFast(_PREHASH_ObjectData, _PREHASH_FullID, fullid, i); mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, local_id, i); - msg_size += sizeof(LLUUID); - msg_size += sizeof(U32); LL_DEBUGS("ObjectUpdate") << "Full Update, obj " << local_id << ", global ID " << fullid << " from " << mesgsys->getSender() << LL_ENDL; } objectp = findObject(fullid); @@ -626,7 +622,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, } mesgsys->getU8Fast(_PREHASH_ObjectData, _PREHASH_PCode, pcode, i); - msg_size += sizeof(U8); } #ifdef IGNORE_DEAD @@ -728,14 +723,12 @@ void LLViewerObjectList::processCachedObjectUpdate(LLMessageSystem *mesgsys, for (S32 i = 0; i < num_objects; i++) { - S32 msg_size = 0; U32 id; U32 crc; U32 flags; mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_ID, id, i); mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_CRC, crc, i); mesgsys->getU32Fast(_PREHASH_ObjectData, _PREHASH_UpdateFlags, flags, i); - msg_size += sizeof(U32) * 2; LL_DEBUGS("ObjectUpdate") << "got probe for id " << id << " crc " << crc << LL_ENDL; dumpStack("ObjectUpdateStack"); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 51ac3d17ab..810d3fddd5 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -3522,13 +3522,6 @@ function="World.EnvPreset" function="Advanced.WebContentTest" parameter="http://duckduckgo.com"/> - - - -- cgit v1.2.3 From 1d1a63abe4a3d3a6191172c1693ffbdb0ffb2d71 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Fri, 19 May 2023 19:56:57 +0300 Subject: SL-19635 Implement DeepL tranlation support --- indra/newview/app_settings/settings.xml | 11 + indra/newview/llfloatertranslationsettings.cpp | 132 +++++++-- indra/newview/llfloatertranslationsettings.h | 10 +- indra/newview/lltranslate.cpp | 311 ++++++++++++++++++++- indra/newview/lltranslate.h | 1 + .../xui/en/floater_translation_settings.xml | 97 ++++++- 6 files changed, 527 insertions(+), 35 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index fa241dc30c..ca1b1e2f20 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -13014,6 +13014,17 @@ Value + DeepLTranslateAPIKey + + Comment + DeepL Translation service data to use with the DeepL Translator API + Persist + 1 + Type + LLSD + Value + + TutorialURL Comment diff --git a/indra/newview/llfloatertranslationsettings.cpp b/indra/newview/llfloatertranslationsettings.cpp index e14227f490..d29ecbbf95 100644 --- a/indra/newview/llfloatertranslationsettings.cpp +++ b/indra/newview/llfloatertranslationsettings.cpp @@ -47,6 +47,7 @@ LLFloaterTranslationSettings::LLFloaterTranslationSettings(const LLSD& key) , mMachineTranslationCB(NULL) , mAzureKeyVerified(false) , mGoogleKeyVerified(false) +, mDeepLKeyVerified(false) { } @@ -60,8 +61,11 @@ BOOL LLFloaterTranslationSettings::postBuild() mAzureAPIKeyEditor = getChild("azure_api_key"); mAzureAPIRegionEditor = getChild("azure_api_region"); mGoogleAPIKeyEditor = getChild("google_api_key"); + mDeepLAPIDomainCombo = getChild("deepl_api_domain_combo"); + mDeepLAPIKeyEditor = getChild("deepl_api_key"); mAzureVerifyBtn = getChild("verify_azure_api_key_btn"); mGoogleVerifyBtn = getChild("verify_google_api_key_btn"); + mDeepLVerifyBtn = getChild("verify_deepl_api_key_btn"); mOKBtn = getChild("ok_btn"); mMachineTranslationCB->setCommitCallback(boost::bind(&LLFloaterTranslationSettings::updateControlsEnabledState, this)); @@ -70,18 +74,37 @@ BOOL LLFloaterTranslationSettings::postBuild() getChild("cancel_btn")->setClickedCallback(boost::bind(&LLFloater::closeFloater, this, false)); mAzureVerifyBtn->setClickedCallback(boost::bind(&LLFloaterTranslationSettings::onBtnAzureVerify, this)); mGoogleVerifyBtn->setClickedCallback(boost::bind(&LLFloaterTranslationSettings::onBtnGoogleVerify, this)); + mDeepLVerifyBtn->setClickedCallback(boost::bind(&LLFloaterTranslationSettings::onBtnDeepLVerify, this)); mAzureAPIKeyEditor->setFocusReceivedCallback(boost::bind(&LLFloaterTranslationSettings::onEditorFocused, this, _1)); mAzureAPIKeyEditor->setKeystrokeCallback(boost::bind(&LLFloaterTranslationSettings::onAzureKeyEdited, this), NULL); mAzureAPIRegionEditor->setFocusReceivedCallback(boost::bind(&LLFloaterTranslationSettings::onEditorFocused, this, _1)); mAzureAPIRegionEditor->setKeystrokeCallback(boost::bind(&LLFloaterTranslationSettings::onAzureKeyEdited, this), NULL); - mAzureAPIEndpointEditor->setFocusLostCallback(boost::bind(&LLFloaterTranslationSettings::onAzureKeyEdited, this)); - mAzureAPIEndpointEditor->setCommitCallback(boost::bind(&LLFloaterTranslationSettings::onAzureKeyEdited, this)); + mAzureAPIEndpointEditor->setFocusLostCallback([this](LLFocusableElement*) + { + setAzureVerified(false, false, 0); + }); + mAzureAPIEndpointEditor->setCommitCallback([this](LLUICtrl* ctrl, const LLSD& param) + { + setAzureVerified(false, false, 0); + }); mGoogleAPIKeyEditor->setFocusReceivedCallback(boost::bind(&LLFloaterTranslationSettings::onEditorFocused, this, _1)); mGoogleAPIKeyEditor->setKeystrokeCallback(boost::bind(&LLFloaterTranslationSettings::onGoogleKeyEdited, this), NULL); + mDeepLAPIKeyEditor->setFocusReceivedCallback(boost::bind(&LLFloaterTranslationSettings::onEditorFocused, this, _1)); + mDeepLAPIKeyEditor->setKeystrokeCallback(boost::bind(&LLFloaterTranslationSettings::onDeepLKeyEdited, this), NULL); + + mDeepLAPIDomainCombo->setFocusLostCallback([this](LLFocusableElement*) + { + setDeepLVerified(false, false, 0); + }); + mDeepLAPIDomainCombo->setCommitCallback([this](LLUICtrl* ctrl, const LLSD& param) + { + setDeepLVerified(false, false, 0); + }); + center(); return TRUE; } @@ -130,6 +153,20 @@ void LLFloaterTranslationSettings::onOpen(const LLSD& key) mGoogleKeyVerified = FALSE; } + LLSD deepl_key = gSavedSettings.getLLSD("DeepLTranslateAPIKey"); + if (deepl_key.isMap() && !deepl_key["id"].asString().empty()) + { + mDeepLAPIKeyEditor->setText(deepl_key["id"].asString()); + mDeepLAPIKeyEditor->setTentative(false); + mDeepLAPIDomainCombo->setValue(deepl_key["domain"]); + verifyKey(LLTranslate::SERVICE_DEEPL, deepl_key, false); + } + else + { + mDeepLAPIKeyEditor->setTentative(TRUE); + mDeepLKeyVerified = FALSE; + } + updateControlsEnabledState(); } @@ -155,6 +192,17 @@ void LLFloaterTranslationSettings::setGoogleVerified(bool ok, bool alert, S32 st updateControlsEnabledState(); } +void LLFloaterTranslationSettings::setDeepLVerified(bool ok, bool alert, S32 status) +{ + if (alert) + { + showAlert(ok ? "deepl_api_key_verified" : "deepl_api_key_not_verified", status); + } + + mDeepLKeyVerified = ok; + updateControlsEnabledState(); +} + std::string LLFloaterTranslationSettings::getSelectedService() const { return mTranslationServiceRadioGroup->getSelectedValue().asString(); @@ -180,6 +228,17 @@ std::string LLFloaterTranslationSettings::getEnteredGoogleKey() const return mGoogleAPIKeyEditor->getTentative() ? LLStringUtil::null : mGoogleAPIKeyEditor->getText(); } +LLSD LLFloaterTranslationSettings::getEnteredDeepLKey() const +{ + LLSD key; + if (!mDeepLAPIKeyEditor->getTentative()) + { + key["domain"] = mDeepLAPIDomainCombo->getValue(); + key["id"] = mDeepLAPIKeyEditor->getText(); + } + return key; +} + void LLFloaterTranslationSettings::showAlert(const std::string& msg_name, S32 status) const { LLStringUtil::format_map_t string_args; @@ -199,29 +258,42 @@ void LLFloaterTranslationSettings::updateControlsEnabledState() std::string service = getSelectedService(); bool azure_selected = service == "azure"; bool google_selected = service == "google"; + bool deepl_selected = service == "deepl"; mTranslationServiceRadioGroup->setEnabled(on); mLanguageCombo->setEnabled(on); - getChild("azure_api_endoint_label")->setEnabled(on); - mAzureAPIEndpointEditor->setEnabled(on); + // MS Azure + getChild("azure_api_endoint_label")->setEnabled(on); + mAzureAPIEndpointEditor->setEnabled(on && azure_selected); getChild("azure_api_key_label")->setEnabled(on); - mAzureAPIKeyEditor->setEnabled(on); + mAzureAPIKeyEditor->setEnabled(on && azure_selected); getChild("azure_api_region_label")->setEnabled(on); - mAzureAPIRegionEditor->setEnabled(on); + mAzureAPIRegionEditor->setEnabled(on && azure_selected); - getChild("google_api_key_label")->setEnabled(on); - mGoogleAPIKeyEditor->setEnabled(on); + mAzureVerifyBtn->setEnabled(on && azure_selected && + !mAzureKeyVerified && getEnteredAzureKey().isMap()); - mAzureAPIKeyEditor->setEnabled(on && azure_selected); - mGoogleAPIKeyEditor->setEnabled(on && google_selected); + // Google + getChild("google_api_key_label")->setEnabled(on); + mGoogleAPIKeyEditor->setEnabled(on && google_selected); - mAzureVerifyBtn->setEnabled(on && azure_selected && - !mAzureKeyVerified && getEnteredAzureKey().isMap()); mGoogleVerifyBtn->setEnabled(on && google_selected && !mGoogleKeyVerified && !getEnteredGoogleKey().empty()); - bool service_verified = (azure_selected && mAzureKeyVerified) || (google_selected && mGoogleKeyVerified); + // DeepL + getChild("deepl_api_domain_label")->setEnabled(on); + mDeepLAPIDomainCombo->setEnabled(on && deepl_selected); + getChild("deepl_api_key_label")->setEnabled(on); + mDeepLAPIKeyEditor->setEnabled(on && deepl_selected); + + mDeepLVerifyBtn->setEnabled(on && deepl_selected && + !mDeepLKeyVerified && getEnteredDeepLKey().isMap()); + + bool service_verified = + (azure_selected && mAzureKeyVerified) + || (google_selected && mGoogleKeyVerified) + || (deepl_selected && mDeepLKeyVerified); gSavedPerAccountSettings.setBOOL("TranslatingEnabled", service_verified); mOKBtn->setEnabled(!on || service_verified); @@ -247,6 +319,9 @@ void LLFloaterTranslationSettings::setVerificationStatus(int service, bool ok, b case LLTranslate::SERVICE_GOOGLE: floater->setGoogleVerified(ok, alert, status); break; + case LLTranslate::SERVICE_DEEPL: + floater->setDeepLVerified(ok, alert, status); + break; } } @@ -273,8 +348,7 @@ void LLFloaterTranslationSettings::onEditorFocused(LLFocusableElement* control) void LLFloaterTranslationSettings::onAzureKeyEdited() { if (mAzureAPIKeyEditor->isDirty() - || mAzureAPIRegionEditor->isDirty() - || mAzureAPIEndpointEditor->getValue().isString()) + || mAzureAPIRegionEditor->isDirty()) { // todo: verify mAzureAPIEndpointEditor url setAzureVerified(false, false, 0); @@ -289,6 +363,14 @@ void LLFloaterTranslationSettings::onGoogleKeyEdited() } } +void LLFloaterTranslationSettings::onDeepLKeyEdited() +{ + if (mDeepLAPIKeyEditor->isDirty()) + { + setDeepLVerified(false, false, 0); + } +} + void LLFloaterTranslationSettings::onBtnAzureVerify() { LLSD key = getEnteredAzureKey(); @@ -306,15 +388,28 @@ void LLFloaterTranslationSettings::onBtnGoogleVerify() verifyKey(LLTranslate::SERVICE_GOOGLE, LLSD(key)); } } + +void LLFloaterTranslationSettings::onBtnDeepLVerify() +{ + LLSD key = getEnteredDeepLKey(); + if (key.isMap()) + { + verifyKey(LLTranslate::SERVICE_DEEPL, key); + } +} + void LLFloaterTranslationSettings::onClose(bool app_quitting) { std::string service = gSavedSettings.getString("TranslationService"); bool azure_selected = service == "azure"; bool google_selected = service == "google"; + bool deepl_selected = service == "deepl"; - bool service_verified = (azure_selected && mAzureKeyVerified) || (google_selected && mGoogleKeyVerified); - gSavedPerAccountSettings.setBOOL("TranslatingEnabled", service_verified); - + bool service_verified = + (azure_selected && mAzureKeyVerified) + || (google_selected && mGoogleKeyVerified) + || (deepl_selected && mDeepLKeyVerified); + gSavedPerAccountSettings.setBOOL("TranslatingEnabled", service_verified); } void LLFloaterTranslationSettings::onBtnOK() { @@ -323,6 +418,7 @@ void LLFloaterTranslationSettings::onBtnOK() gSavedSettings.setString("TranslationService", getSelectedService()); gSavedSettings.setLLSD("AzureTranslateAPIKey", getEnteredAzureKey()); gSavedSettings.setString("GoogleTranslateAPIKey", getEnteredGoogleKey()); + gSavedSettings.setLLSD("DeepLTranslateAPIKey", getEnteredDeepLKey()); closeFloater(false); } diff --git a/indra/newview/llfloatertranslationsettings.h b/indra/newview/llfloatertranslationsettings.h index f039d90e27..eff0803fdd 100644 --- a/indra/newview/llfloatertranslationsettings.h +++ b/indra/newview/llfloatertranslationsettings.h @@ -44,12 +44,14 @@ public: void setAzureVerified(bool ok, bool alert, S32 status); void setGoogleVerified(bool ok, bool alert, S32 status); + void setDeepLVerified(bool ok, bool alert, S32 status); void onClose(bool app_quitting); private: std::string getSelectedService() const; LLSD getEnteredAzureKey() const; std::string getEnteredGoogleKey() const; + LLSD getEnteredDeepLKey() const; void showAlert(const std::string& msg_name, S32 status) const; void updateControlsEnabledState(); void verifyKey(int service, const LLSD& key, bool alert = true); @@ -57,25 +59,31 @@ private: void onEditorFocused(LLFocusableElement* control); void onAzureKeyEdited(); void onGoogleKeyEdited(); + void onDeepLKeyEdited(); void onBtnAzureVerify(); void onBtnGoogleVerify(); + void onBtnDeepLVerify(); void onBtnOK(); static void setVerificationStatus(int service, bool alert, bool ok, S32 status); LLCheckBoxCtrl* mMachineTranslationCB; LLComboBox* mLanguageCombo; - LLComboBox* mAzureAPIEndpointEditor;; + LLComboBox* mAzureAPIEndpointEditor; LLLineEditor* mAzureAPIKeyEditor; LLLineEditor* mAzureAPIRegionEditor; LLLineEditor* mGoogleAPIKeyEditor; + LLComboBox* mDeepLAPIDomainCombo; + LLLineEditor* mDeepLAPIKeyEditor; LLRadioGroup* mTranslationServiceRadioGroup; LLButton* mAzureVerifyBtn; LLButton* mGoogleVerifyBtn; + LLButton* mDeepLVerifyBtn; LLButton* mOKBtn; bool mAzureKeyVerified; bool mGoogleKeyVerified; + bool mDeepLKeyVerified; }; #endif // LL_LLFLOATERTRANSLATIONSETTINGS_H diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp index 6589ce06c4..70a40921ef 100644 --- a/indra/newview/lltranslate.cpp +++ b/indra/newview/lltranslate.cpp @@ -133,7 +133,9 @@ public: LLCore::HttpOptions::ptr_t options, LLCore::HttpHeaders::ptr_t headers, const std::string & url, - const std::string & msg) const = 0; + const std::string & msg, + const std::string& from_lang, + const std::string& to_lang) const = 0; virtual LLSD verifyAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter, LLCore::HttpRequest::ptr_t request, LLCore::HttpOptions::ptr_t options, @@ -230,7 +232,7 @@ void LLTranslationAPIHandler::translateMessageCoro(LanguagePair_t fromTo, std::s return; } - LLSD result = sendMessageAndSuspend(httpAdapter, httpRequest, httpOpts, httpHeaders, url, msg); + LLSD result = sendMessageAndSuspend(httpAdapter, httpRequest, httpOpts, httpHeaders, url, msg, fromTo.first, fromTo.second); if (LLApp::isQuitting()) { @@ -331,7 +333,9 @@ public: LLCore::HttpOptions::ptr_t options, LLCore::HttpHeaders::ptr_t headers, const std::string & url, - const std::string & msg) const override; + const std::string & msg, + const std::string& from_lang, + const std::string& to_lang) const override; LLSD verifyAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter, LLCore::HttpRequest::ptr_t request, @@ -508,7 +512,9 @@ LLSD LLGoogleTranslationHandler::sendMessageAndSuspend(LLCoreHttpUtil::HttpCorou LLCore::HttpOptions::ptr_t options, LLCore::HttpHeaders::ptr_t headers, const std::string & url, - const std::string & msg) const + const std::string & msg, + const std::string& from_lang, + const std::string& to_lang) const { return adapter->getRawAndSuspend(request, url, options, headers); } @@ -558,7 +564,9 @@ public: LLCore::HttpOptions::ptr_t options, LLCore::HttpHeaders::ptr_t headers, const std::string & url, - const std::string & msg) const override; + const std::string & msg, + const std::string& from_lang, + const std::string& to_lang) const override; LLSD verifyAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter, LLCore::HttpRequest::ptr_t request, @@ -728,7 +736,7 @@ bool LLAzureTranslationHandler::parseResponse( // virtual bool LLAzureTranslationHandler::isConfigured() const { - return !getAPIKey().isMap(); + return getAPIKey().isMap(); } //static @@ -814,7 +822,9 @@ LLSD LLAzureTranslationHandler::sendMessageAndSuspend(LLCoreHttpUtil::HttpCorout LLCore::HttpOptions::ptr_t options, LLCore::HttpHeaders::ptr_t headers, const std::string & url, - const std::string & msg) const + const std::string & msg, + const std::string& from_lang, + const std::string& to_lang) const { LLCore::BufferArray::ptr_t rawbody(new LLCore::BufferArray); LLCore::BufferArrayStream outs(rawbody.get()); @@ -838,6 +848,259 @@ LLSD LLAzureTranslationHandler::verifyAndSuspend(LLCoreHttpUtil::HttpCoroutineAd return adapter->postRawAndSuspend(request, url, rawbody, options, headers); } +//========================================================================= +/// DeepL Translator API handler. +class LLDeepLTranslationHandler: public LLTranslationAPIHandler +{ + LOG_CLASS(LLDeepLTranslationHandler); + +public: + std::string getTranslateURL( + const std::string& from_lang, + const std::string& to_lang, + const std::string& text) const override; + std::string getKeyVerificationURL( + const LLSD& key) const override; + bool checkVerificationResponse( + const LLSD& response, + int status) const override; + bool parseResponse( + const LLSD& http_response, + int& status, + const std::string& body, + std::string& translation, + std::string& detected_lang, + std::string& err_msg) const override; + bool isConfigured() const override; + + LLTranslate::EService getCurrentService() override + { + return LLTranslate::EService::SERVICE_DEEPL; + } + + void verifyKey(const LLSD& key, LLTranslate::KeyVerificationResult_fn fnc) override; + + void initHttpHeader(LLCore::HttpHeaders::ptr_t headers, const std::string& user_agent) const override; + void initHttpHeader(LLCore::HttpHeaders::ptr_t headers, const std::string& user_agent, const LLSD& key) const override; + LLSD sendMessageAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter, + LLCore::HttpRequest::ptr_t request, + LLCore::HttpOptions::ptr_t options, + LLCore::HttpHeaders::ptr_t headers, + const std::string& url, + const std::string& msg, + const std::string& from_lang, + const std::string& to_lang) const override; + + LLSD verifyAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter, + LLCore::HttpRequest::ptr_t request, + LLCore::HttpOptions::ptr_t options, + LLCore::HttpHeaders::ptr_t headers, + const std::string& url) const override; +private: + static std::string parseErrorResponse( + const std::string& body); + static LLSD getAPIKey(); + static std::string getAPILanguageCode(const std::string& lang); +}; + +//------------------------------------------------------------------------- +// virtual +std::string LLDeepLTranslationHandler::getTranslateURL( + const std::string& from_lang, + const std::string& to_lang, + const std::string& text) const +{ + std::string url; + LLSD key = getAPIKey(); + if (key.isMap()) + { + url = key["domain"].asString(); + + if (*url.rbegin() != '/') + { + url += "/"; + } + url += std::string("v2/translate"); + } + return url; +} + + +// virtual +std::string LLDeepLTranslationHandler::getKeyVerificationURL( + const LLSD& key) const +{ + std::string url; + if (key.isMap()) + { + url = key["domain"].asString(); + + if (*url.rbegin() != '/') + { + url += "/"; + } + url += std::string("v2/translate"); + } + return url; +} + +//virtual +bool LLDeepLTranslationHandler::checkVerificationResponse( + const LLSD& response, + int status) const +{ + return status == HTTP_OK; +} + +// virtual +bool LLDeepLTranslationHandler::parseResponse( + const LLSD& http_response, + int& status, + const std::string& body, + std::string& translation, + std::string& detected_lang, + std::string& err_msg) const +{ + if (status != HTTP_OK) + { + if (http_response.has("error_body")) + err_msg = parseErrorResponse(http_response["error_body"].asString()); + return false; + } + + //Example: + // "{\"translations\":[{\"detected_source_language\":\"EN\",\"text\":\"test\"}]}" + + Json::Value root; + Json::Reader reader; + + if (!reader.parse(body, root)) + { + err_msg = reader.getFormatedErrorMessages(); + return false; + } + + if (!root.isObject() + || !root.isMember("translations")) // empty response? should not happen + { + return false; + } + + // Request succeeded, extract translation from the response. + const Json::Value& translations = root["translations"]; + if (!translations.isArray() || translations.size() == 0) + { + return false; + } + + const Json::Value& data= translations[0U]; + if (!data.isObject() + || !data.isMember("detected_source_language") + || !data.isMember("text")) + { + return false; + } + + + detected_lang = data["detected_source_language"].asString(); + LLStringUtil::toLower(detected_lang); + translation = data["text"].asString(); + + return true; +} + +// virtual +bool LLDeepLTranslationHandler::isConfigured() const +{ + return getAPIKey().isMap(); +} + +//static +std::string LLDeepLTranslationHandler::parseErrorResponse( + const std::string& body) +{ + // DeepL doesn't seem to have any error handling beyoun http codes + return std::string(); +} + +// static +LLSD LLDeepLTranslationHandler::getAPIKey() +{ + static LLCachedControl deepl_key(gSavedSettings, "DeepLTranslateAPIKey"); + return deepl_key; +} + +// static +std::string LLDeepLTranslationHandler::getAPILanguageCode(const std::string& lang) +{ + return lang == "zh" ? "zh-CHT" : lang; // treat Chinese as Traditional Chinese +} + +/*virtual*/ +void LLDeepLTranslationHandler::verifyKey(const LLSD& key, LLTranslate::KeyVerificationResult_fn fnc) +{ + LLCoros::instance().launch("DeepL /Verify Key", boost::bind(&LLTranslationAPIHandler::verifyKeyCoro, + this, LLTranslate::SERVICE_DEEPL, key, fnc)); +} +/*virtual*/ +void LLDeepLTranslationHandler::initHttpHeader( + LLCore::HttpHeaders::ptr_t headers, + const std::string& user_agent) const +{ + initHttpHeader(headers, user_agent, getAPIKey()); +} + +/*virtual*/ +void LLDeepLTranslationHandler::initHttpHeader( + LLCore::HttpHeaders::ptr_t headers, + const std::string& user_agent, + const LLSD& key) const +{ + headers->append(HTTP_OUT_HEADER_CONTENT_TYPE, "application/x-www-form-urlencoded"); + headers->append(HTTP_OUT_HEADER_USER_AGENT, user_agent); + + if (key.has("id")) + { + std::string authkey = "DeepL-Auth-Key " + key["id"].asString(); + headers->append(HTTP_OUT_HEADER_AUTHORIZATION, authkey); + } +} + +LLSD LLDeepLTranslationHandler::sendMessageAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter, + LLCore::HttpRequest::ptr_t request, + LLCore::HttpOptions::ptr_t options, + LLCore::HttpHeaders::ptr_t headers, + const std::string& url, + const std::string& msg, + const std::string& from_lang, + const std::string& to_lang) const +{ + LLCore::BufferArray::ptr_t rawbody(new LLCore::BufferArray); + LLCore::BufferArrayStream outs(rawbody.get()); + outs << "text="; + std::string escaped_string = LLURI::escape(msg); + outs << escaped_string; + outs << "&target_lang="; + std::string lang = to_lang; + LLStringUtil::toUpper(lang); + outs << lang; + + return adapter->postRawAndSuspend(request, url, rawbody, options, headers); +} + +LLSD LLDeepLTranslationHandler::verifyAndSuspend(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t adapter, + LLCore::HttpRequest::ptr_t request, + LLCore::HttpOptions::ptr_t options, + LLCore::HttpHeaders::ptr_t headers, + const std::string& url) const +{ + LLCore::BufferArray::ptr_t rawbody(new LLCore::BufferArray); + LLCore::BufferArrayStream outs(rawbody.get()); + outs << "text=&target_lang=EN"; + + return adapter->postRawAndSuspend(request, url, rawbody, options, headers); +} + //========================================================================= LLTranslate::LLTranslate(): mCharsSeen(0), @@ -867,6 +1130,11 @@ std::string LLTranslate::addNoTranslateTags(std::string mesg) return mesg; } + if (getPreferredHandler().getCurrentService() == SERVICE_DEEPL) + { + return mesg; + } + if (getPreferredHandler().getCurrentService() == SERVICE_AZURE) { // https://learn.microsoft.com/en-us/azure/cognitive-services/translator/prevent-translation @@ -892,6 +1160,10 @@ std::string LLTranslate::removeNoTranslateTags(std::string mesg) { return mesg; } + if (getPreferredHandler().getCurrentService() == SERVICE_DEEPL) + { + return mesg; + } if (getPreferredHandler().getCurrentService() == SERVICE_AZURE) { @@ -997,6 +1269,14 @@ LLTranslationAPIHandler& LLTranslate::getPreferredHandler() { service = SERVICE_GOOGLE; } + if (service_str == "azure") + { + service = SERVICE_AZURE; + } + if (service_str == "deepl") + { + service = SERVICE_DEEPL; + } return getHandler(service); } @@ -1006,11 +1286,18 @@ LLTranslationAPIHandler& LLTranslate::getHandler(EService service) { static LLGoogleTranslationHandler google; static LLAzureTranslationHandler azure; + static LLDeepLTranslationHandler deepl; - if (service == SERVICE_GOOGLE) - { - return google; - } + switch (service) + { + case SERVICE_AZURE: + return azure; + case SERVICE_GOOGLE: + return google; + case SERVICE_DEEPL: + return deepl; + } + + return azure; - return azure; } diff --git a/indra/newview/lltranslate.h b/indra/newview/lltranslate.h index ffbbb05e62..4a5d80737c 100644 --- a/indra/newview/lltranslate.h +++ b/indra/newview/lltranslate.h @@ -61,6 +61,7 @@ public : typedef enum e_service { SERVICE_AZURE, SERVICE_GOOGLE, + SERVICE_DEEPL, } EService; typedef boost::function KeyVerificationResult_fn; diff --git a/indra/newview/skins/default/xui/en/floater_translation_settings.xml b/indra/newview/skins/default/xui/en/floater_translation_settings.xml index dc3e072adf..8a97d5e5d9 100644 --- a/indra/newview/skins/default/xui/en/floater_translation_settings.xml +++ b/indra/newview/skins/default/xui/en/floater_translation_settings.xml @@ -1,7 +1,7 @@ Azure service identifier not verified. Status: [STATUS]. Please check your settings and try again. Google API key not verified. Status: [STATUS]. Please check your key and try again. + DeepL Auth Key key not verified. Status: [STATUS]. Please check your key and try again. Azure service identifier verified. Google API key verified. + DeepL API key verified. + [https://learn.microsoft.com/en-us/azure/cognitive-services/translator/create-translator-resource Setup] @@ -286,7 +294,7 @@ left_pad="10" name="verify_google_api_key_btn" top_delta="-2" - width="90" /> + width="90" /> + + Domain: + + + + + + + + + DeepL API key: + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml index b9e10c071c..da3d71e31b 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml @@ -1,27 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml index fa1137c7c5..aae708e257 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml index 01699d1593..8c697317a5 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml @@ -1,14 +1,14 @@ - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml index 3e706cd403..8a691467a8 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml index 59c80bdb0e..0b60751bb3 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml index e4f78cad31..eb696ec534 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml index b0a619bcb0..80ed3b19c8 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml @@ -1,37 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml index aa07b9476e..3e4ab1f856 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml index eb5faa2545..8af5189f87 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml index d984342896..47d4f76e48 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml index 07bcefd9b3..f6ce0e6c6c 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml index 0de6a5f22f..ff6884f24d 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml @@ -1,33 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 c9d4f947a4..7e43b8b61f 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml index bd4812603f..c239eb9543 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml new file mode 100644 index 0000000000..819b05f854 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml new file mode 100644 index 0000000000..ac211997bf --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml new file mode 100644 index 0000000000..80d7eeff31 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml new file mode 100644 index 0000000000..ed1491298f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml new file mode 100644 index 0000000000..92e0ec74ba --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml new file mode 100644 index 0000000000..9504f39ef1 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml new file mode 100644 index 0000000000..1ee1d6a914 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml new file mode 100644 index 0000000000..a596fbe103 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_edit.xml b/indra/newview/skins/default/xui/ja/menu_edit.xml index c2ef0179b2..0152675de7 100644 --- a/indra/newview/skins/default/xui/ja/menu_edit.xml +++ b/indra/newview/skins/default/xui/ja/menu_edit.xml @@ -1,12 +1,12 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml index 4708b1446c..94361555fe 100644 --- a/indra/newview/skins/default/xui/ja/menu_favorites.xml +++ b/indra/newview/skins/default/xui/ja/menu_favorites.xml @@ -1,10 +1,14 @@ - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml index 88c3aee042..2527e373f4 100644 --- a/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml @@ -1,23 +1,35 @@ - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml index 3eacfb3507..333db46380 100644 --- a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml @@ -1,10 +1,11 @@ - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml index 3787f7d645..52cc5e69e1 100644 --- a/indra/newview/skins/default/xui/ja/menu_group_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_group_plus.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml index 2e633ae1b2..3a9fb3570a 100644 --- a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml @@ -1,6 +1,5 @@ - - - - + + + \ No newline at end of file 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 55cd6610f7..8899b69f1a 100644 --- a/indra/newview/skins/default/xui/ja/menu_im_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_im_conversation.xml @@ -1,15 +1,16 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml index 222a741718..5ef2a4152a 100644 --- a/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml +++ b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml index 8cd6fa4a27..26b581b793 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml index 5bcb96f083..7ae8765df4 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml index 5453f998fa..61a9bae73c 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml index 5a0519ba19..ec5abea6b2 100644 --- a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml @@ -1,19 +1,19 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml index 9a4a8138f5..d9642e3c0c 100644 --- a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml +++ b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index 7f68c18e0b..f25c32c084 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -1,117 +1,133 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml index eecf166a70..3f43469c6f 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml @@ -1,40 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml index ad60b0d01f..7a8adcb9fb 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml @@ -1,18 +1,21 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml b/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml new file mode 100644 index 0000000000..f76be9631a --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_land.xml b/indra/newview/skins/default/xui/ja/menu_land.xml index 3754bd7fa4..a65504b14c 100644 --- a/indra/newview/skins/default/xui/ja/menu_land.xml +++ b/indra/newview/skins/default/xui/ja/menu_land.xml @@ -1,10 +1,13 @@ - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml index c134422955..06345c5074 100644 --- a/indra/newview/skins/default/xui/ja/menu_landmark.xml +++ b/indra/newview/skins/default/xui/ja/menu_landmark.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml index 61b473858b..5ba2092648 100644 --- a/indra/newview/skins/default/xui/ja/menu_login.xml +++ b/indra/newview/skins/default/xui/ja/menu_login.xml @@ -1,39 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml b/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml index bf38075556..6c6913db5d 100644 --- a/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml index faae4ef717..6f4f4938f4 100644 --- a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml @@ -1,7 +1,8 @@ - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml index 2e733ee24b..77a2e60cda 100644 --- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml index 43f86e84bf..f35e74afc5 100644 --- a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml +++ b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml @@ -1,8 +1,8 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_mute_particle.xml b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml index 8dab025309..38b736ae9b 100644 --- a/indra/newview/skins/default/xui/ja/menu_mute_particle.xml +++ b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml index 9ae2e58198..f3e274313e 100644 --- a/indra/newview/skins/default/xui/ja/menu_navbar.xml +++ b/indra/newview/skins/default/xui/ja/menu_navbar.xml @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml index c2e4a27686..42a6c66168 100644 --- a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml +++ b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml @@ -1,9 +1,12 @@ - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml index 913bae8958..3852efcdd4 100644 --- a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml +++ b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml index 8da1d5d000..2a1dd7f648 100644 --- a/indra/newview/skins/default/xui/ja/menu_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_object.xml @@ -1,35 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_object_icon.xml b/indra/newview/skins/default/xui/ja/menu_object_icon.xml index 7b55a64eef..163c8d1779 100644 --- a/indra/newview/skins/default/xui/ja/menu_object_icon.xml +++ b/indra/newview/skins/default/xui/ja/menu_object_icon.xml @@ -1,8 +1,9 @@ - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml index 4946d58fd8..962d25bb07 100644 --- a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml @@ -1,36 +1,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml index 9491c22f31..66ebb79bb9 100644 --- a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml index 64d8ded722..2f40a033da 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_list.xml @@ -1,21 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_participant_view.xml b/indra/newview/skins/default/xui/ja/menu_participant_view.xml index 5816351d9d..ef61874763 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_view.xml @@ -1,13 +1,16 @@ - - - - - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml index f74399f2ba..8d80ddebad 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml @@ -1,9 +1,10 @@ - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml index 3e74b2ddff..1d89e15f64 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml index 4b86a353f4..db586365b2 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml index f290bec652..fee506c511 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups.xml b/indra/newview/skins/default/xui/ja/menu_people_groups.xml index 2c0c85ba28..91044bd283 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_groups.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_groups.xml @@ -1,8 +1,8 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml index 4a9e402fa4..07144be420 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml index 87f1d26ca4..641eba496a 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml @@ -1,18 +1,18 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml index fe85e278cf..34935305d1 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml index 2217288987..7b56f1daf8 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml index feaeba4398..da27372963 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml index 011d3d2526..4a5a42ad05 100644 --- a/indra/newview/skins/default/xui/ja/menu_picks.xml +++ b/indra/newview/skins/default/xui/ja/menu_picks.xml @@ -1,8 +1,10 @@ - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml index 84bf90fea0..62eb8327bc 100644 --- a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml index a9f05e126d..f45f9211ed 100644 --- a/indra/newview/skins/default/xui/ja/menu_place.xml +++ b/indra/newview/skins/default/xui/ja/menu_place.xml @@ -1,7 +1,5 @@ - - - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml index d19bc44451..d6a13b92ba 100644 --- a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml +++ b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml index c455204722..c9fa92b6a2 100644 --- a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml @@ -1,16 +1,15 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml index 579f2c2cbd..16508dde4a 100644 --- a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml @@ -1,19 +1,22 @@ - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml new file mode 100644 index 0000000000..197b61af30 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_profile_other.xml b/indra/newview/skins/default/xui/ja/menu_profile_other.xml new file mode 100644 index 0000000000..760186506f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_profile_other.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml index 9d3a5dda1c..1dd29a9c2a 100644 --- a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml @@ -1,12 +1,12 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_profile_self.xml b/indra/newview/skins/default/xui/ja/menu_profile_self.xml new file mode 100644 index 0000000000..ec10d92629 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_profile_self.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml index 6513d9264a..6d8f2381d9 100644 --- a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml +++ b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_save_settings.xml b/indra/newview/skins/default/xui/ja/menu_save_settings.xml index 44fb1fb30b..f24700d449 100644 --- a/indra/newview/skins/default/xui/ja/menu_save_settings.xml +++ b/indra/newview/skins/default/xui/ja/menu_save_settings.xml @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml index a89dd0bcbe..c4bc424927 100644 --- a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml +++ b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_settings_add.xml b/indra/newview/skins/default/xui/ja/menu_settings_add.xml index 814ad9c1a6..9e64476446 100644 --- a/indra/newview/skins/default/xui/ja/menu_settings_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_settings_add.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_settings_gear.xml b/indra/newview/skins/default/xui/ja/menu_settings_gear.xml index 064eae95bf..a44786b414 100644 --- a/indra/newview/skins/default/xui/ja/menu_settings_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_settings_gear.xml @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml index 61ba3085d9..9e58ec31b7 100644 --- a/indra/newview/skins/default/xui/ja/menu_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_slurl.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml index 901eab9166..fd4dffeefa 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml @@ -1,6 +1,7 @@ - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml index 1cc230e5b6..dc34bc6463 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml index 4dd44d2ec8..391be973f8 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_text_editor.xml b/indra/newview/skins/default/xui/ja/menu_text_editor.xml index eda973c888..48fd8ad243 100644 --- a/indra/newview/skins/default/xui/ja/menu_text_editor.xml +++ b/indra/newview/skins/default/xui/ja/menu_text_editor.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_toolbars.xml b/indra/newview/skins/default/xui/ja/menu_toolbars.xml index d5363a5131..9bb4eaf496 100644 --- a/indra/newview/skins/default/xui/ja/menu_toolbars.xml +++ b/indra/newview/skins/default/xui/ja/menu_toolbars.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml index 1a67a2a8f7..ea1e12ab2b 100644 --- a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml +++ b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml @@ -1,7 +1,11 @@ - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml index 639602ce3c..d6488af27b 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml @@ -1,9 +1,10 @@ - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_email.xml b/indra/newview/skins/default/xui/ja/menu_url_email.xml index 6c41d759fe..1ba8d6a64e 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_email.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_email.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_experience.xml b/indra/newview/skins/default/xui/ja/menu_url_experience.xml index 582784c2f0..83d7029527 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_experience.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_experience.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml index 1dd3d79438..9214d67dea 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_group.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_group.xml @@ -1,6 +1,7 @@ - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml index c3da8a8686..0bec7cd2be 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_http.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_http.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml index 147ab44a1b..7a13030b64 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml @@ -1,6 +1,7 @@ - + - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_map.xml b/indra/newview/skins/default/xui/ja/menu_url_map.xml index 8d41e1a571..75813f9017 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_map.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_map.xml @@ -1,6 +1,8 @@ - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml index 96f8b3f7b1..ef76e5484f 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml @@ -1,10 +1,12 @@ - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml index 8d264059d3..0c1eab8dad 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml @@ -1,6 +1,8 @@ - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml index a516c5a075..78f3997bf8 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml @@ -1,5 +1,6 @@ - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml index 2c857ec915..e0d4427008 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml @@ -1,7 +1,9 @@ - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml index c3507a9a33..e6941fb8bd 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml @@ -1,6 +1,8 @@ - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index d5ac67b9e6..2428ab51cd 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -1,495 +1,669 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml index 02029230ba..f6473c1e82 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml index 48aac2ed05..75fa3f69b3 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml @@ -1,8 +1,8 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml index 8c331bc008..7845ff9aad 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/mime_types.xml b/indra/newview/skins/default/xui/ja/mime_types.xml index 3b29a622a4..23bab3b0b2 100644 --- a/indra/newview/skins/default/xui/ja/mime_types.xml +++ b/indra/newview/skins/default/xui/ja/mime_types.xml @@ -1,240 +1,143 @@ - - - - ここにWebコンテンツがあります。 - - - Webコンテンツを表示 - - - - - - ここにはムービーがあります - - - ムービー再生 - - - - - - ここには画像があります - - - ここの画像を表示 - - - - - - ここではオーディオが聞けます - - - ここのオーディオを再生する - - - - - - ここにメディアなし - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + (不明) + なし + + + この場所には、Webコンテンツが含まれています。 + Web コンテンツを表示する + + + + この場所には、ムービーがあります。 + ムービーを再生する + + + + この場所には、画像があります + この場所の画像を表示する + + + + この場所には、オーディオがあります。 + この場所のオーディオを再生する + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/mime_types_linux.xml b/indra/newview/skins/default/xui/ja/mime_types_linux.xml index cb1e48148f..61574b74f9 100644 --- a/indra/newview/skins/default/xui/ja/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_linux.xml @@ -1,225 +1,131 @@ - - - - このロケーションには Web コンテンツが含まれています - - - Web コンテンツを表示する - - - - - - ここにはムービーがあります - - - ムービーを再生する - - - - - - このロケーションには画像があります - - - このロケーションの画像を表示する - - - - - - このロケーションにはオーディオがあります - - - このロケーションのオーディオを再生する - - - - - - ここにメディアなし - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + (不明) + なし + + + この場所には、Webコンテンツが含まれています。 + Web コンテンツを表示する + + + + この場所には、ムービーがあります。 + ムービーを再生する + + + + この場所には、画像があります + この場所の画像を表示する + + + + この場所には、オーディオがあります。 + この場所のオーディオを再生する + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/mime_types_mac.xml b/indra/newview/skins/default/xui/ja/mime_types_mac.xml index cb1e48148f..0bfc9aeb99 100644 --- a/indra/newview/skins/default/xui/ja/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_mac.xml @@ -1,225 +1,134 @@ - - - - このロケーションには Web コンテンツが含まれています - - - Web コンテンツを表示する - - - - - - ここにはムービーがあります - - - ムービーを再生する - - - - - - このロケーションには画像があります - - - このロケーションの画像を表示する - - - - - - このロケーションにはオーディオがあります - - - このロケーションのオーディオを再生する - - - - - - ここにメディアなし - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + (不明) + なし + + + この場所には、Webコンテンツが含まれています。 + Web コンテンツを表示する + + + + この場所には、ムービーがあります。 + ムービーを再生する + + + + この場所には、画像があります + この場所の画像を表示する + + + + この場所には、オーディオがあります。 + この場所のオーディオを再生する + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 72b4d21eb2..7521c2da01 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1,3184 +1,5317 @@ - + - 今後は表示しない - 以後、これを表示しない + 次回からこのメッセージを表示しない + + 次回からこのメッセージを表示しない (現セッションで) - 常にこのオプションを選択 - 閉じる - - - - - - - - - あなたの [APP_NAME] のバージョンでは今受け取った通知メッセージを表示することができません。 最新ビューワがインストールされているかご確認ください。 - -エラー詳細: 「 [_NAME] 」という通知は notifications.xml にありませんでした。 - - - - フロータエラー:下記のコントロールが見つかりませんでした: + + 常にこのオプションを選択 + + 閉じる + + + + + + + + + + + + + + + + 現在使用中の[APP_NAME]のバージョンでは、受け取った通知メッセージを表示することができません。 +最新のビューアーがインストールされている事をご確認ください。 + +エラー詳細:「 [_NAME] 」という通知メッセージは、notifications.xmlに定義されていませんでした。 + fail + + + + フローターエラー:以下のコントロールが見つかりませんでした: + [CONTROLS] - - - - 現在利用可能なチュートリアルはありません。 - - - [MESSAGE] - - [MESSAGE] - - - - [MESSAGE] - - - - [APP_NAME] をアップデート中にエラーが発生しました。 ビューワの [http://get.secondlife.com 最新バージョンをダウンロード] してください。 - - - - [SECOND_LIFE_GRID] に接続できませんでした。 -「[DIAGNOSTIC]」 -インターネット接続が正常かご確認ください。 - - - - メッセージテンプレート [PATH] がありませんでした。 - - - - 現在の衣類、身体部位の変更を保存しますか? - - - - これらのアイテムの 1 つまたは複数をマーチャントアウトボックスにコピーする許可がありません。移動するか、置き去りにすることはできます。 - - - - マーチャントアウトボックスの最上位に転送した各アイテムにつき、それぞれ 1 つの新しいフォルダが作成されました。 - - - - 成功 - -マーケットプレイスに正常に送信されたすべてのフォルダ - - - - 一部のフォルダは転送されませんでした - -一部のフォルダがマーケットプレイスに送信されたときにエラーが発生しました。これらのフォルダはまだマーチャントアウトボックス内にあります。 - -詳細については、[[MARKETPLACE_IMPORTS_URL] エラーログ]をご覧ください。 - - - - '[ERROR_CODE]' エラーで転送できませんでした - -システムまたはネットワークのエラーのため、フォルダはマーケットプレイスに送信されませんでした。後でもう一度お試しください。 - - - - '[ERROR_CODE]' エラーでマーケットプレイスを初期化できませんでした - -システムまたはネットワークのエラーのため、マーケットプレイスの初期化に失敗しました。後でもう一度お試しください。 - - - - 在庫フォルダへのコピーまたは移動がエラーにより失敗しました: + fail + + -'[ERROR_CODE]' - - - - マーケットプレイスのリストへのコピーまたは移動がエラーにより失敗しました: + 現在利用可能なチュートリアルはありません。 + fail + + -'[ERROR_CODE]' - - - - マーケットプレイスによる取引が次のエラーにより失敗しました: - -[ERROR_REASON][ERROR_DESCRIPTION] - - - - この製品をリストに表示できないか、バージョンフォルダを有効にできません。通常、これはリスト説明フォームに情報が不足しているために起こりますが、フォルダ構造のエラーが原因の場合もあります。リストを編集するか、リストフォルダにエラーがないか確認してください。 - - - - マーケットプレイスへのリスト表示が次のエラーで失敗しました : - -'[ERROR_CODE]' - - - - このバージョンフォルダの有効化が次のエラーにより失敗しました : + [MESSAGE] + + [MESSAGE] + + + [MESSAGE] + + + + [APP_NAME]のアップデート中にエラーが発生しました。[http://get.secondlife.com 最新バージョンのビューアーをダウンロード]してください。 + + + + [SECOND_LIFE_GRID]に接続できませんでした。 +[DIAGNOSTIC] + +インターネット接続が正常かご確認ください。 + fail + + + + ビューアがサーバーから不正な形式の応答を受け取りました。インターネット接続が正常に機能していることを確認してから、後でもう一度お試しください。 + +これが誤りだと思われる場合は、サポートにお問い合わせください。 + fail + + + + メッセージテンプレート[PATH]がありませんでした。 + + fail + + + 現在の服装/身体部位の変更を保存しますか? + + + + これらのアイテムの1つ以上を販売用の送信トレイにコピーする権限がありません。移動したり残したままにすることはできます。 + + + + 販売ボックスの最上位に転送した各アイテムにつき、それぞれ1つの新しいフォルダが作成されました。 + + + + + 成功しました。 + +すべてのフォルダが、マーケットプレイスに正常に送信されました。 + + + + 一部のフォルダは送信できていません。 + +一部のフォルダが、マーケットプレイスに送信されるときにエラーが発生しました。これらのフォルダは、販売者の送信トレイにまだ残っています。 + +詳細につきましては、[[MARKETPLACE_IMPORTS_URL] エラーログ]をご確認ください。 + + + 以下のエラーで転送できませんでした:[ERROR_CODE] + +システムまたはネットワークのエラーのため、フォルダはマーケットプレイスに送信されませんでした。お手数ですが、後でもう一度やり直してください。 + + + + 以下のエラーでマーケットプレイスを初期化できませんでした:[ERROR_CODE] + +システムまたはネットワークのエラーのため、マーケットプレイスの初期化に失敗しました。お手数ですが、後でもう一度やり直してください。 + + + + 在庫フォルダへのコピーまたは移動がエラーにより失敗しました:[ERROR_CODE] + + + マーケットプレイスのリストへのコピーまたは移動が以下のエラーにより失敗しました:[ERROR_CODE] + + + マーケットプレイスによる取引が以下のエラーにより失敗しました:[ERROR_REASON] +[ERROR_DESCRIPTION] + + + この商品をリストに表示できないか、バージョンフォルダを有効にできません。通常、これはリスト説明フォームに情報が不足しているために起こりますが、フォルダ構造のエラーが原因の場合もあります。 +リストを編集するか、リストフォルダにエラーがないか確認してください。 + + + マーケットプレイスへのリスト表示が次のエラーで失敗しました: '[ERROR_CODE]' - - - - リストを作成するために、リストするコンテンツの階層を固定しました。 - - - - この操作により、このリストの有効な内容が変更されます。続けますか? - - - - マーケットプレイスのリストウィンドウにドラッグしたアイテムは元の場所からコピーされるのではなく、移動します。続けますか? - - - - リストフォルダを移動または削除すると、マーケットプレイスのリストが削除されます。マーケットプレイスのリストを維持する場合は、変更するバージョンフォルダの中身を移動または削除してください。続けますか? - - - - これらのアイテムの 1 つまたは複数をマーケットプレイスにコピーする権限がありません。移動するか、置き去りにすることはできます。 - - - - この操作により、このリストが削除されます。続けますか? - - - - この操作により、現在のリストのバージョンフォルダが無効になります。続けますか? - - - - このリストをアップデートできませんでした。 -[[URL] ここをクリック] してマーケットプレイスで編集します。 - - - マーケットプレイスのリストフォルダにある衣服やボディパーツを着用できません。 - リスト ID が無効です。 - - このリストには複数のバージョンフォルダがあるか、バージョンフォルダがありません。後で、単独でバージョンフォルダを選択して有効にする必要があります。 - - - - 各種の在庫品目を別々の在庫フォルダに分けたため、フォルダはリストに表示できるように配置されています。 - - - - 在庫が空のため、リストを削除しました。もう一度リストを表示するには、在庫フォルダにユニットを追加する必要があります。 - - - - バージョンフォルダが空のため、リストを削除しました。もう一度リストを表示するには、バージョンフォルダにアイテムを追加する必要があります。 - - - アニメーションデータの書き込みに問題があります。後でもう一度お試しください。 - 次の理由で、オークションのスナップショットのアップロード時に問題が起こりました。 -[REASON] - 一度に複数のアイテムの中身を表示できません。 -アイテムを 1 つだけ選択して、もう一度お試しください。 - - 衣服、身体部位に対する変更をすべて保存しますか? - - - - フレンド以外の人からのコールや、インスタントメッセージを無視する設定にしたことを、相手に知られることはありません。 - - - - 注意:このオプションを有効にすると、このパソコンを使うユーザーは誰でも、あなたのお気に入りの場所を見ることができるようになります。 - - - - 複数の Second Life ビューワを実行することはサポートされていません。テクスチャキャッシュのコリジョンや破損、およびビジュアルとパフォーマンスの低下につながる恐れがあります。 - - - - 他人に修正権限を与えると、権限を与えられた人はあなたが所有するインワールドのオブジェクトを変更、削除、持ち帰ることができます。この権限を与える際には十分に注意してください。 -[NAME] に修正権限を与えますか? - - - - 他人に修正権限を与えると、権限を与えられた人はあなたが所有するインワールドのオブジェクトを変更することができます。 この権限を与える際には十分に注意してください。 -選択した住人に修正権限を与えますか? - - - - [NAME] の修正権限を解約しますか? - - - - 選択した住人から変更権限を取り下げますか? - - - - グループ名は [MIN_LEN] ~ [MAX_LEN] 文字である必要があります。 - - - - グループを作成できません。 -[MESSAGE] - - - - [NEEDS_APPLY_MESSAGE] + + + このバージョンフォルダの有効化が次のエラーにより失敗しました: +'[ERROR_CODE]' + + + リストを作成するために、リストするコンテンツの階層を固定しました。 + confirm + + + この操作により、このリストの有効な内容が変更されます。続けてもよろしいですか? + confirm + + + マーケットプレイスのリストウィンドウにドラッグしたアイテムは、元の場所からコピーされるのではなく移動となります。続けてもよろしいですか? + confirm + + + リストフォルダを移動または削除すると、マーケットプレイスのリストが削除されます。マーケットプレイスのリストを維持する場合は、変更するバージョンフォルダの中身を移動または削除してください。続けてもよろしいですか? + confirm + + + これらのアイテムの1つまたは複数をマーケットプレイスにコピーする権限がありません。移動するか、残したままにすることはできます。 + confirm + + + この操作により、このリストが削除されます。続けてもよろしいですか? + confirm + + + この操作により、現在のリストのバージョンフォルダが無効になります。続けてもよろしいですか? + confirm + + + このリストをアップデートできませんでした。 +[[URL] ここをクリック]してマーケットプレイスで編集します。 + + + マーケットプレイスのリストフォルダにある衣服装やボディパーツを着用できません。 + fail + + リストIDが無効です。 + fail + + このリストには複数のバージョンフォルダがあるか、バージョンフォルダがありません。後で、単独でバージョンフォルダを選択して有効にする必要があります。 + confirm + + + 各種の在庫品目を別々の在庫フォルダに分けたため、フォルダはリストに表示できるように配置されています。 + confirm + + + 在庫が空のため、リストを削除しました。もう一度リストを表示するには、在庫フォルダにユニットを追加する必要があります。 + confirm + + + バージョンフォルダが空のため、リストを削除しました。もう一度リストを表示するには、バージョンフォルダにアイテムを追加する必要があります。 + confirm + + + アニメーションデータの書き込みに問題があります。後でもう一度お試しください。 + fail + + 以下の理由で、オークションのスナップショットのアップロード時に問題が起こりました:[REASON] + fail + + 一度に複数のアイテムの中身を表示できません。 +アイテムを1つだけ選択して、もう一度お試しください。 + fail + + 服装、身体部位に対する変更をすべて保存しますか? + confirm + + + フレンド以外の人からのコールや、インスタントメッセージを無視する設定にしたことを、相手に知られることはありません。 + + + 注意:このオプションを有効にすると、このパソコンを使うユーザーは誰でも、あなたのお気に入りの場所を見ることができるようになります。 + + + Second Lifeビューアーの多重起動はサポートされていません。 +テクスチャキャッシュの競合による破損や、およびビジュアルとパフォーマンスの低下につながる恐れがあります。 + + + 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更、削除、持ち帰ることができます。この権限を与える際には十分に注意してください。 +[NAME]に修正権限を与えますか? + + + 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更することができます。 +この権限を与える際には十分に注意してください。選択した住人に修正権限を与えますか? + confirm + + + [NAME]の修正権限を解除しますか? + confirm + + + 選択した住人から変更権限を取り下げますか? + confirm + + + グループ名は[MIN_LEN]~[MAX_LEN]文字である必要があります。 + group + fail + + + グループを作成できません。 +[MESSAGE] + group + fail + + + [NEEDS_APPLY_MESSAGE] [WANT_APPLY_MESSAGE] - - - - グループ通知の送信には、件名の記入が必要です。 - - - - あなたは [ROLE_NAME] の役割にメンバーを与えようとしています。 -任命されたメンバーが自ら退任しない限り、 -役柄から削除できません。 + group + fail + + + グループ通知の送信には、件名の記入が必要です。 + group + fail + + + あなたは、[ROLE_NAME]の役割にメンバーを与えようとしています。任命されたメンバーが自ら退任しない限り、 役柄から削除できません。 操作を続行しますか? - - - - あなたは [ROLE_NAME] に [ACTION_NAME] の能力を -与えようとしています。 - - *警告* -この能力を持つ役割のメンバーは、 -自分と他のメンバーに現在より強力な権限を割り当て、 -自分をオーナーとほぼ同様の立場に任命することもできるようになります。 -この行為の意味をよく理解してから実行してください。 + + + あなたは[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 +*警告* +この能力を持つ役割のメンバーは、 自分と他のメンバーに現在より強力な権限を割り当て、 自分をオーナーとほぼ同様の立場に任命することもできるようになります。 +この行為の意味をよく理解してから実行してください。 この能力を [ROLE_NAME] に割り当てますか? - - - - あなたは [ROLE_NAME] に [ACTION_NAME] の能力を -与えようとしています。 - - *警告* -この能力をもつ役割のメンバーは、 -自分と他のメンバーにすべての能力を割り当て、 -自分をオーナーとほぼ同様の立場に任命できます。 + + + あなたは、[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 -この能力を [ROLE_NAME] に割り当てますか? - - - - 役割 '[ROLE_NAME]' に能力 '[ACTION_NAME]' を追加しようとしています。 +*警告* +この能力をもつ役割のメンバーは、自分と他のメンバーにすべての能力を割り当て、自分をオーナーとほぼ同様の立場に任命できます。 +この能力を[ROLE_NAME] に割り当てますか? + + + 役割「[ROLE_NAME]」に能力「[ACTION_NAME]」を追加しようとしています。 *警告* -この能力を持つ役割のメンバーにも能力 '[ACTION_NAME_2]' と '[ACTION_NAME_3]' が許可されます - - - - 役割 '[ROLE_NAME]' から能力 '[ACTION_NAME]' を削除しようとしています。 +この能力を持つ役割のメンバーにも能力「[ACTION_NAME_2]」と「[ACTION_NAME_3]」が許可されます。 + + + 役割「[ROLE_NAME]」から能力「[ACTION_NAME]」を削除しようとしています。 *警告* -この能力を削除しても能力 '[ACTION_NAME_2]' と '[ACTION_NAME_3]' は削除されません。 - +この能力を削除しても能力「[ACTION_NAME_2]」と「[ACTION_NAME_3]」は削除されません。 これらの能力をこの役割に許可しない場合は、すぐに削除してください! - - - - [AVATAR_NAME] をグループから追放しようとしています。 - - - - [COUNT] 名のメンバーをグループから追放しようとしています。 - - - - [AVATAR_NAME] をグループから追放しようとしています。 - - - - [COUNT] 名のメンバーをグループから追放しようとしています。 - - - 一部の住人がグループから追放されたため、招待状が送られませんでした。 - - アタッチメントを下に置こうとしています。 -続けますか? - - - - このグループに参加するには、L$ [COST] かかります。 -続行しますか? - - - - <nolink>[NAME]</nolink> というグループに入ろうとしています。 -続けますか? - - - このグループに加入するには、L$ [COST] 必要です。 -L$ が不足しているのでこのグループに参加することができません。 - - このグループ作成にかかる費用:L$[COST] + + + [AVATAR_NAME]をグループから追放しようとしています。 + group + confirm + + + [COUNT]名のメンバーをグループから追放しようとしています。 + group + confirm + + + [AVATAR_NAME]をグループから追放しようとしています。 + group + confirm + + + [COUNT]名のメンバーをグループから追放しようとしています。 + group + confirm + + + 一部の住人がグループから追放されたため、招待状が送られませんでした。 + 装着物を下に置こうとしています。 +このまま続けてもよろしいですか? + + + このグループに参加するには、L$ [COST]かかります。 +このまま続けてもよろしいですか? + confirm + funds + group + + + 「<nolink>[NAME]</nolink>」というグループに入ろうとしています。 +このまま続けてもよろしいですか? + group + confirm + + + このグループに加入するには、L$ [COST]必要です。 +L$が不足しているので、このグループに参加することができません。 + group + fail + funds + + このグループ作成にかかる費用:L$[COST] 一人ではグループにならないので、永久に削除されてしまいます。 -48 時間以内にメンバーを勧誘し、入会してもらってください。 - - - - あなたはグループに参加することはできません。 - - - - グループ参加リクエスト中にエラーが発生しました。 - - - - グループに参加できません: [reason] - - - - 申し訳ありませんが、トライアルユーザーはグループに参加できません。 - - - - 「<nolink>[group_name]</nolink>」に参加できません: -既に [group_count] グループのメンバーになっています。参加できるのは最大 [max_groups] グループまでです。 - - - - 「<nolink>[group_name]</nolink>」に参加できません: +48時間以内にメンバーを勧誘し、入会してもらってください。 + group + funds + + + あなたはグループに参加することはできません。 + group_id + success + + + グループ参加リクエスト中にエラーが発生しました。 + group_id + success + + + 以下のグループに参加できませんでした:[reason] + group_id + success + reason + + + 申し訳ありませんが、トライアルユーザーはグループに参加できません。 + group_id + success + + + 「<nolink>[group_name]</nolink>」に参加できません: +既に[group_count]個のグループのメンバーになっています。参加できるのは最大[max_groups]グループまでです。 + success + group_id + group_name + group_count + max_groups + + + 「<nolink>[group_name]</nolink>」に参加できません: このグループは現在、参加が制限されています。 - - - - このユーザーグループに追加されました - - - - 会員料金として必要な L$ [membership_fee] を送金することができません。 - - - - L$ [COST] で [TIME] 時間 [PARCEL_NAME] に入ることができます。 -入場許可を購入しますか? - - - 不特定の人に売却する場合には、 -売却価格はL$ 0 以上に設定する必要があります。 -売却価格をL$ 0 に設定する場合は、 -売却する個人を選択してください。 - - 選択した [LAND_SIZE] 平方メートルの土地は、売り出し中に設定されています。 -売却価格 L$ [SALE_PRICE] で、[NAME] に売却を認可します。 - - - - 注意: 「誰にでも販売」をクリックすることで、あなたの土地はこのリージョンにいる人に限らず [SECOND_LIFE] コミュニティ全体で利用可能となります。 - -選択した [LAND_SIZE] 平方メートルの土地は、販売対象に設定されました。 -販売価格 L$ [SALE_PRICE] で、[NAME] が販売対象者となります。 - - - - グループ「<nolink>[NAME]</nolink>」と共有するこのにある区画のすべてのオブジェクトを前のオーナーのインベントリに返却しますか? - -*注意*この操作をすると、グループに譲渡された譲渡禁止のオブジェクトを削除することになります。 - -オブジェクト: [N] - - - - この区画で、 -住人 [NAME] が所有する全てのオブジェクトを -本人のインベントリに本当に返却してもよいですか? - -オブジェクト: [N] - - - - この土地区画内にある、あなたが所有するすべてのオブジェクトを、 -あなたのインベントリに戻そうとしています。続けますか? - -オブジェクト: [N] - - - - この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、 -それぞれの所有者のインベントリに戻そうとしています。 -操作を続行しますか? -グループに譲渡された「再販・プレゼント可」のオブジェクトは、以前の所有者に返却されます。 - -*警告* これにより、 -グループに譲渡された「再販・プレゼント不可」のオブジェクトは削除されます! -オブジェクト: [N] - - - - この土地区画内にある、 -[NAME]以外による所有のオブジェクトをすべてそれぞれの所有者のインベントリに返却しようとしています。 -操作を続行しますか?グループに譲渡された「再販・プレゼント可」のオブジェクトは、以前の所有者に返却されます。 - -*警告* これにより、 -グループに譲渡された「再販・プレゼント不可」のオブジェクトは削除されます! -オブジェクト: [N] - - - - リストされた全てのオブジェクトを所有者の持ち物に戻しますか?これによりすべてのスクリプト化されたオブジェクトがリージョンに戻ります! - - - - このリージョン(地域)内のすべてのオブジェクトを無効にしようとしています。操作を続行しますか? - - - - グループ <nolink>[NAME]</nolink> と共有されていない、この区画にあるオブジェクトを前のオーナーに返却しますか? - -オブジェクト: [N] - - - スクリプトを無効にできません。 + group_id + success + + + このユーザーグループに入会しました。 + group_id + success + + + 会員料金として必要なL$ [membership_fee]を送金することができません。 + group_id + success + + + この区画([PARCEL_NAME])は、L$ [COST]で[TIME]時間入ることができます。入場許可証を購入しますか? + fail + funds + confirm + + + 不特定の人に売却する場合には、売却価格はL$ 0以上に設定する必要があります。 +売却価格をL$ 0に設定する場合は、売却する個人を選択してください。 + fail + + 選択した[LAND_SIZE]㎡の土地は、売り出し中に設定されています。 +売却価格L$ [SALE_PRICE]で、[NAME]に売却を認可します。 + confirm + + + 注意:「誰にでも販売」をクリックすることで、あなたの土地はこのリージョンにいる人に限らず、[SECOND_LIFE]コミュニティ全体で利用可能となります。 +選択した[LAND_SIZE]㎡の土地は、販売対象に設定されました。 +販売価格L$ [SALE_PRICE]で、[NAME]が販売対象者となります。 + confirm + + + グループ「<nolink>[NAME]</nolink>」と共有するこのにある区画のすべてのオブジェクトを前のオーナーのインベントリに返却しますか? +*警告* +この操作をすると、グループに譲渡された譲渡禁止のオブジェクトを削除することになります。 +オブジェクト:[N] + confirm + group + + + この区画で、住人[NAME]が所有する全てのオブジェクトを本人のインベントリに本当に返却してもよいですか? +オブジェクト:[N] + confirm + + + この土地区画内にある、あなたが所有するすべてのオブジェクトを、あなたのインベントリに戻そうとしています。このまま続けてもよろしいですか? +オブジェクト:[N] + confirm + + + この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、それぞれの所有者のインベントリに戻そうとしています。このまま操作を続行してもよろしいですか? +グループに譲渡された「再販・譲渡可」のオブジェクトは、以前の所有者に返却されます。 + +*警告* + +これにより、グループに譲渡された「再販・譲渡不可」のオブジェクトは削除されます! +オブジェクト:[N] + confirm + + + この土地区画内にある、[NAME]以外による所有のオブジェクトをすべてそれぞれの所有者のインベントリに返却しようとしています。このまま操作を続行してもよろしいですか? +グループに譲渡された「再販・譲渡可」のオブジェクトは、以前の所有者に返却されます。 + +*警告* + +これにより、グループに譲渡された「再販・譲渡不可」のオブジェクトは削除されます! +オブジェクト:[N] + confirm + + + リストされた全てのオブジェクトを所有者の持ち物に戻しますか? +これによりすべてのスクリプト化されたオブジェクトがリージョンに戻ります! + confirm + + + このリージョン(地域)内のすべてのオブジェクトを無効にしようとしています。このまま操作を続行してもよろしいですか? + confirm + + + グループ <nolink>[NAME]</nolink>と共有されていない、この区画にあるオブジェクトを前のオーナーに返却しますか? +オブジェクト:[N] + confirm + + + スクリプトを無効にできません。 このリージョン(地域)全体が「ダメージ有効」に設定されています。 -武器を使用するにはスクリプトの実行を許可する必要があります。 - - 現在複数の面が選択されています。 +武器を使用するには、スクリプトの実行を許可する必要があります。 + fail + + 現在複数の面が選択されています。 このまま続けた場合、メディアの別々のインスタンスがオブジェクトの複数の面に設定されます。 -メディアを 1 つの面だけに取り付けるには、「面を選択」を選んでオブジェクトの希望する面をクリック、それから「追加」をクリックしてください。 - - - 着地点を設定するには、この区画の内側に -立ってください。 - 受信者の有効なメールアドレスを入力してください。 - あなたのメールアドレスを入力してください。 - - デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか? - - - スナップショットデータの処理エラー - スナップショットのエンコード化でエラーが出ました! - このアイテムをアップロードするには L$[COST] が必要です。 - インベントリに写真を保存するには L$[COST] が必要です。L$ を購入するか、代わりに写真をっコンピュータに保存できます。 - インベントリにテクスチャを保存するには L$[COST] が必要です。L$ を購入するか、代わりに写真をコンピュータに保存できます。 - 次の理由で、スナップショットの送信時に問題が起こりました: [REASON] - 次の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました。 [REASON] - [SECOND_LIFE] へのログインを続けるには、Second Life の利用規約、プライバシーポリシー、およびサービス規約に同意する必要があります。 - アウトフィットを装着できません。 -アウトフィットフォルダに衣類、身体部位、アタッチメントがありません。 - ごみ箱にある衣類や身体部位の着用はできません。 - オブジェクトを付けられませんでした。 -最大数の [MAX_ATTACHMENTS] 個を越えています。 どれか取り外してからお試しください。 - まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。 - ログインするためにパスワードを入力してください - - 注意:記入漏れの箇所があります。 +メディアを1つの面だけに取り付けるには、「面を選択」を選んでオブジェクトの希望する面をクリック、それから「追加」をクリックしてください。 + confirm + + + 着地点を設定するには、この区画の内側に立ってください。 + fail + + 受信者の有効なメールアドレスを入力してください。 + fail + + あなたのメールアドレスを入力してください。 + fail + + デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか? + confirm + + + スナップショットデータの処理エラー + fail + + スナップショットのエンコードエラー + fail + + このアイテムをアップロードするには、L$ [COST]が必要です。 + fail + + インベントリに写真を保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 + fail + + インベントリにテクスチャを保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 + fail + + 以下の理由でスナップショットの送信時に問題が起こりました:[REASON] + fail + + 以下の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました:[REASON] + fail + + [SECOND_LIFE]へのログインを続けるには、Second Lifeの利用規約、プライバシーポリシー、およびサービス規約に同意する必要があります。 + fail + + アウトフィットを装着できません。 +アウトフィットフォルダに服装、身体部位、装着物がありません。 + fail + + ごみ箱にある服装や身体部位は、着用できません。 + fail + + オブジェクトを装着できませんでした。 +最大装着数[MAX_ATTACHMENTS]個を越えています。どれか取り外してからお試しください。 + fail + + まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。 + fail + + ログインするためにパスワードを入力してください。 + fail + + おっと、記入漏れがあります。 アバターのユーザー名を入力してください。 -[SECOND_LIFE] に入るにはアカウントが必要です。今すぐアカウントを作成しますか? - [create_account_url] - - - ユーザー名のフィールドにアバターのユーザー名もしくは氏名を入力してから、再度ログインする必要があります。 - '[GRID]' は有効なグリッド ID ではありません。 - ログイン位置で有効なグリッドが指定されませんでした。 - - クラシファイド広告 [NAME] を削除しますか? +[SECOND_LIFE]に入るにはアカウントが必要です。今すぐアカウントを作成しますか? + confirm + [create_account_url] + + + ユーザー名のフィールドにアバターのユーザー名もしくは氏名を入力してから、再度ログインする必要があります。 + fail + + 「[GRID]」は、有効なグリッドIDではありません。 + fail + + ログイン位置で有効なグリッドが指定されませんでした。 + fail + + クラシファイド広告『[NAME]』を削除してもよろしいですか? 支払い済みの料金は返金されません。 - - - - この面にあるメディアを削除する選択をしました。 -続けますか? - - - - クラシファイド広告 [NAME] への変更を保存しますか? - - - - クラシファイド広告を出すには、資金が足りません。 - - - - <nolink>[PICK]</nolink> を削除しますか? - - - - 選択したアウトフィットを削除しますか? - - - - [SECOND_LIFE] イベント Web ページに移動しますか? - http://secondlife.com/events/?lang=ja-JP - - - 表示する提案を選択してください。 - 表示する履歴アイテムを選択してください。 - [APP_NAME] を再起動後にキャッシュがクリアされます。 - [APP_NAME] を再起動後にキャッシュが移動されます。 -ご注意: キャッシュがクリアされます。 - ポートの設定は [APP_NAME] を再起動後に反映されます。 - デバッグ設定の変更は [APP_NAME] を再起動後に反映されます。 - 新しいスキンは [APP_NAME] を再起動後に表示されます。 - 言語の変更は [APP_NAME] を再起動後に反映されます。 - - [SECOND_LIFE]の Web ページに移動し、入札あるいはオークションの詳細を確認しますか? - http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID] - - - - 変更を保存しますか? - - - - ノートカードを削除しますか? - - - - 以前のスクリーンショットをレポートに使用しますか? - - - ジェスチャーの保存に失敗しました。 + confirm + + + この顔に紐づけられたメディアの削除を選択しました。 +続行してもよろしいですか? + confirm + + + クラシファイド広告[NAME]への変更を保存しますか? + confirm + + + クラシファイド広告を出すには、資金が足りません。 + fail + + + + クラシファイド広告<nolink>[CLASSIFIED]</nolink>を削除してもよろしいですか? + confirm + + + ピック<nolink>[PICK]</nolink>を削除してもよろしいですか? + confirm + + + 未公開のクラシファイド広告があります。 +ウィンドウを閉じると変更が失われます。 + confirm + + + 保存されていない変更があります。 + confirm + save + + + 「<nolink>[PICK]</nolink>」を削除してもよろしいですか? + + + このアウトフィットを削除してもよろしいですか? + confirm + + + [SECOND_LIFE]イベントWebページに移動しますか? + https://secondlife.com/my/community/events/?lang=ja-JP + confirm + + + 表示する提案を選択してください。 + fail + + 表示する履歴アイテムを選択してください。 + fail + + + + + キャッシュは、[APP_NAME]再起動後にクリアされます。 + キャッシュは、[APP_NAME]再起動後が移動されます。 +注意:キャッシュがクリアされます。 + ポートの設定は、[APP_NAME]再起動後に反映されます。 + デバッグ設定の変更は、[APP_NAME]再起動後に反映されます。 + 新しいスキンは、[APP_NAME]再起動後に表示されます。 + 言語の変更は、[APP_NAME]再起動後に反映されます。 + [SECOND_LIFE]のWebページに移動し、入札あるいはオークションの詳細を確認しますか? + confirm + http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID] + + + 変更を保存しますか? + confirm + + + このノートカードを削除してもよろしいですか? + + confirm + + + 以前のスクリーンショットをレポートに使用しますか? + + + ジェスチャーの保存に失敗しました。 ステップが多すぎます。 -ステップをいくつか削除してから再保存してください - ジェスチャーの保存に失敗しました。少し待ってからもう一度試してください。 - ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 -オブジェクトが範囲内に存在しないか、または削除された可能性があります。 - 次の理由で、ジェスチャーの保存時に問題が起こりました。 [REASON]。 後でもう一度試してください。 - ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 -オブジェクトが範囲内に存在しないか、または削除された可能性があります。 - 次の理由で、ノートカードの保存時に問題が起こりました。 [REASON]。 後でもう一度試してください。 - - あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。 +ステップをいくつか削除してから再保存してください + fail + + ジェスチャーの保存に失敗しました。 +少し待ってからもう一度試してください。 + fail + + ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 +オブジェクトが範囲内に存在しないか、削除された可能性があります。 + fail + + 以下の理由で、ジェスチャーの保存時に問題が起こりました:[REASON] +お手数ですが、後でもう一度試してください。 + fail + + ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 +オブジェクトが範囲内に存在しないか、削除された可能性があります。 + fail + + 以下の理由で、ノートカードの保存時に問題が起こりました:[REASON] +お手数ですが、後でもう一度試してください。 + fail + + あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。 サーバーの最新保存バージョンをロードしますか? (**警告**:この操作後元に戻すことはできません) - - - スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。 -オブジェクトは範囲外か、または削除されているかもしれません。 - - ログイン位置が指定されていません。 + confirm + + + スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。 +オブジェクトは範囲外か、または削除されているかもしれません。 + fail + + ログイン位置が指定されていません。 ログイン位置の欄にリージョン名を入力するか、「最後にログアウトした場所」か「自宅(ホーム)」を選択してください。 - - - スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 -オブジェクトが範囲内に存在しないか、または削除された可能性があります。 - ファイルをダウンロードできません。 - - [SECOND_LIFE] でサポートされていないファイルのダウンロードを要求しました。 - - - ファイル [[FILE]] を書き込めません。 - - お使いのコンピューターは [APP_NAME] の必要最低限の動作環境を満たしていません。 パフォーマンスの低下を感じるかもしれません。 恐れ入りますが [SUPPORT_SITE] ではサポート対象外のシステムに関する技術的サポートは行っておりません。 - -[_URL] に移動して確認をしますか? - http://secondlife.com/support/sysreqs.php?lang=ja - - - ビューワ実行ファイルを直接実行しないでください。代わりに、既存のショートカットの内のどれかをアップデートし、SL_Launcher を実行してください。 - - グラフィックスチップに最新のドライバがある可能性があります。グラフィックドライバを更新することにより、大幅にパフォーマンスが向上します。 - - ドライバの更新を確認するために [URL] にアクセスしますか? - [URL] - - - - お使いのシステムには、[APP_NAME] が認識できないグラフィックカードが搭載されています。 -[APP_NAME] でまだテストされていない最新ハードウェアのためだと考えられます。 問題ないとは思いますが、グラフィックの設定を調整する必要があるかもしれません。 -(ミー > 環境設定 > グラフィック) - - - - - グラフィックドライバを初期化中に [APP_NAME] がクラッシュしました。 -ドライバの一般的なエラーを防ぐために、画質が低に設定されます。 そのため、一部のグラフィック特性に制限が出ます。 + fail + + + スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 +オブジェクトが範囲内に存在しないか、または削除された可能性があります。 + fail + + ファイルをダウンロードできません。 + fail + + ダウンロードをリクエストしたファイルは、[SECOND_LIFE]でサポートされていません。 + + confirm + + + ファイル[[FILE]]に書き込むことができませんでした。 + fail + + お使いのコンピュータは、[APP_NAME]の最小システム要件を満たしていません。 +このためパフォーマンスが低下する場合があります。恐れ入りますが[SUPPORT_SITE]は、サポートされていないシステム構成に対する技術的サポートを提供できません。 + +詳細について、[_URL]を確認しますか? + http://secondlife.com/support/sysreqs.php?lang=ja + fail + + + グラフィックスチップに最新のドライバがある可能性があります。グラフィックドライバを更新することにより、大幅にパフォーマンスが向上します。 +ドライバの更新を確認するために[URL]にアクセスしますか? + [URL] + confirm + fail + + + お使いのシステムには、[APP_NAME]が認識できないグラフィックカードが搭載されています。[APP_NAME]でまだテストされていない最新ハードウェアのためだと考えられます。 +問題ないとは思いますが、グラフィックの設定を調整する必要があるかもしれません。 +(「私」>「初期設定」>「グラフィック」) + fail +
+ + +
+ グラフィックドライバを初期化中に[APP_NAME]がクラッシュしました。 +ドライバの一般的なエラーを防ぐために、画質が低に設定されます。このため、一部のグラフィック特性に制限が出ます。 お使いのグラフィックカードのドライバをアップデートするようおすすめします。 -画質は、環境設定 > グラフィック で設定できます。 - [REGION] では、地形の変更ができません。 - あなたには [PARCEL] 区画を地形編集する許可がありません。 - - あなたには次アイテムをコピーする権限がありません: -<nolink>[ITEMS]</nolink> -他の住人に譲ると、そのアイテムはあなたの持ち物から削除されます。本当にこれらのアイテムを譲りますか? - - - インベントリのアイテムを渡せません。 - 取引がキャンセルされました。 - 一度に 42 個以上のアイテムは渡せません。 - 選択したアイテムを渡す権限がありません。 - - あなたは選択した [COUNT] 個のアイテムののコピーを許されていません。 +画質は、「初期設定」>「グラフィック」で設定できます。 + fail + + この設定を変更すると、「自動調整」の設定が無効になります。 +続けてもよろしいですか? + confirm + + + 高度な照明をオンにするには、品質をレベル4以上にする必要があります。 + confirm + + + 影を有効にするには、品質をレベルを4以上にする必要があります。 + confirm + + + [REGION]では、地形の変更ができません。 + fail + + [PARCEL]区画の地形を編集する権限がありません。 + fail + + 以下のアイテムをコピーする権限がありません: +<nolink>[ITEMS]</nolink> +他の人に譲ると、そのアイテムはあなたの持ち物から削除されます。本当にこれらのアイテムを譲ってもよろしいですか? + confirm + fail + + + インベントリのアイテムを渡すことができません。 + fail + + 取引がキャンセルされました。 + fail + + 一度に42個以上のアイテムを渡すことはできません。 + fail + + 選択したアイテムを渡す権限がありません。 + fail + + あなたは選択した[COUNT]個のアイテムをコピーする権限がありません。 これらのアイテムはあなたのインベントリから失われます。 -本当にアイテムを渡したいですか? - - - 選択したフォルダを渡す権限がありません - - このアバターをフリーズしますか? +本当にアイテムを渡してもよろしいですか? + confirm + fail + + + 選択したフォルダを渡す権限がありません。 + fail + + このアバターをフリーズしますか? アバターは一時的に動けなくなり、チャットを含めインワールドで何もできなくなります。 - - - - [AVATAR_NAME]をフリーズしますか? + confirm + + + [AVATAR_NAME]をフリーズしますか? フリーズされた人は一時的に動けなくなり、チャットなど、この世界に対する関わりを持つことができなくなります。 - - - - あなたの土地から [AVATAR_NAME] を追放しますか? - - - - このアバターをあなたの土地から追放しますか? - - - - [AVATAR_NAME] をあなたの土地から追放しますか? - - - <nolink>[GROUP_NAME]</nolink> から [AVATAR_NAME] を追放しました - 取得エラー:選択したオブジェクトの数が多すぎます。 - 取得エラー: -オブジェクトが複数のリージョン(地域)にまたがって存在しています。 -すべて同じリージョン内に移動させてから取得してください。 - - [EXTRA] - -[_URL] に移動してリンデンドル購入に関する情報を確認しますか? - http://secondlife.com/app/currency/?lang=ja-JP - - - [MUTE_LIMIT] エントリの制限に達したため、ブロックリストに新しいエントリを追加できません。 - [COUNT] 個のオブジェクトをリンクできません。 -リンクできるのは最大 [MAX] 個です。 - セットで揃っているオブジェクトのみリンクできます。 -複数のオブジェクトを選択してください。 - すべてのオブジェクトの修正許可がないためリンクできません。 - -どのオブジェクトもロックされておらず、あなたのものであることを確認してください。 - 地域(リージョン)の境界を越えてオブジェクトをリンクできません。 - 地域(リージョン)の境界を越えてオブジェクトをリンクできません。 - 所有者が異なるため、オブジェクトをリンクできません。 - -自分が所有しているオブジェクトだけを選択してください。 - 「 [FILE] 」の拡張子が無効です。 + confirm + + + あなたの土地から[AVATAR_NAME]を追放しますか? + confirm + + + このアバターをあなたの土地から追放しますか? + confirm + + + [AVATAR_NAME]をあなたの土地から追放しますか? + confirm + + + <nolink>[GROUP_NAME]</nolink>から[AVATAR_NAME]を追放しました。 + group + + 取得エラー:選択したオブジェクトの数が多すぎます。 + fail + + 取得エラー:オブジェクトが複数のリージョン(地域)にまたがって存在しています。 +すべて同じリージョン内に移動させてから取得してください。 + fail + + [EXTRA] + +[_URL]に移動してリンデンドル購入に関する情報を確認しますか? + https://secondlife.com/my/lindex/?lang=ja-JP + + + [MUTE_LIMIT]エントリの制限に達したため、ブロックリストに新しいエントリを追加できません。 + fail + + [COUNT]個のオブジェクトをリンクできませんでした。 +リンクできるオブジェクトは最大[MAX]個です。 + fail + + セットが揃っているオブジェクトのみリンクできます。複数のオブジェクトを選択してください。 + fail + + すべてのオブジェクトの修正許可がないためリンクできません。 + +どのオブジェクトもロックされておらず、あなたのものであることを確認してください。 + fail + + リージョン(地域)の境界を越えてオブジェクトをリンクできません。 + fail + + リージョン(地域)の境界を越えてオブジェクトをリンクできません。 + fail + + 所有者が異なるため、オブジェクトをリンクできません。 +自分が所有しているオブジェクトだけを選択してください。 + fail + + ファイル「[FILE]」は、無効な拡張子です。 このファイルの拡張子が正しいかどうかを確認してください。 - - [EXTENSION] は無効です。 -正しい拡張子:[VALIDS] - - - 読み込みのためにアップロードされたサウンドファイルを開けません: -[FILE] - RIFF WAVE ファイルとして認識されません: -[FILE] - PCM WAVE オーディオファイルとして認識されません: -[FILE] - ファイルのチャンネル数が無効です(モノラルまたはステレオを使用する必要があります): -[FILE] - ファイルのサンプルレートがサポートされていません(44.1k である必要があります): -[FILE] - ファイルのワードサイズがサポートされていません(8 または 16 ビットである必要があります): -[FILE] - WAV ヘッダーにデータチャンクが見つかりません: -[FILE] - WAV ファイルのチャンクサイズが間違っています: -[FILE] - オーディオファイルが長すぎます。(最大 10 秒): -[FILE] - 「 [FILE] 」に問題があります。 - -[ERROR] - 書き込み用の一時圧縮サウンドファイルを開くことができません:[FILE] - 不明の Vorbis のエンコードに失敗: [FILE] - 次のファイルのエンコードができません: [FILE] - - ユーザー名とパスワードを自動入力できません。これはネットワーク設定が変更された場合に起こります - - - 破損したリソースファイル: [FILE] - 不明のリンデンリソースファイルのバージョン: [FILE] - 出力ファイルを作成できません: [FILE] - 現在 [APP_NAME] では、BVH 形式のアニメーションファイルの一括アップロードはサポートされていません。 - 次の理由で、「 [FILE] 」をアップロードできません: [REASON] -あとでもう一度試してください。 - 「 [LANDMARK_NAME] 」を「 [FOLDER_NAME] 」フォルダに追加しました。 - - 現在地のランドマークを既に持っています。 - - - 土地の所有者が許可していないため、ランドマークを作成することはできません。 - 「リコンパイル」できません。 -スクリプトのオブジェクトを選択してください。 - 「リコンパイル」できません。 - -修正修正権限のあるスクリプトのオブジェクトを選択してください。 - 「再設定」ができません。 - -スクリプトのオブジェクトを選択してください。 - 「再設定」ができません。 - -修正権限のあるスクリプトのオブジェクトを選択してください。 - 修正権限のないオブジェクトのスクリプトは開くことはできません。 - スクリプトの「実行」ができません。 - -スクリプトのオブジェクトを選択してください。 - スクリプトを「実行しない」設定にできません。 - -スクリプトのオブジェクトを選択してください。 - 保存する frontmost フロータがありません。 - 指定した検索クエリは変更され、短すぎる語句は取り除かれています。 - -検索語句: [FINALQUERY] - 指定した検索語句が短すぎたため、検索は行われませんでした。 - テレポートに失敗しました。 -[REASON] - テレポート処理中に問題が発生しました。 ログインし直す必要があるかもしれません。 -このメッセージが何度も出る場合は、[SUPPORT_SITE] をご確認ください。 - リージョン間の移動中に問題が発生しました。 ログインし直す必要があるかもしれません。 -このメッセージが何度も出る場合は、[SUPPORT_SITE] をご確認ください。 - 申し訳ございません。テレポートは現在、ブロックされています。しばらくしてから再度お試しください。 -それでもテレポートできない場合は、ログアウトし、ログインし直して問題を解決してください。 - 申し訳ございません。ランドマークの目的地が見つかりませんでした。 - 申し訳ございません。システムによるテレポート接続が完了できませんでした。 -しばらくしてから再度お試しください。 - 残念ながら、目的地へアクセスが許可されていないため、テレポートできません。 - 添付物がまだ届いていません。テレポートをする前にあと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてください。 - このリージョンのアセットキューが現在混み合っているため、テレポートのリクエストをすぐに処理することが難しい状況です。 -数分後にやり直すか、混雑していない他のリージョンでお試しください。 - 申し訳ございません。システムはテレポートのリクエストを時間どおりに完了できませんでした。数分後にやり直してください。 - 申し訳ございません。システムはリージョン間の移動を時間どおりに完了できませんでした。 -数分後にやり直してください。 - テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、すでに消滅している可能性があります。数分後にやり直してください。 - インベントリシステムは現在利用できません。 - 土地所有者設定ができません: -区画が選定されていません。 - 複数のリージョンが選択されたため、土地の所有権を取得できません。 -選択する面積を小さくして、もう一度お試しください。 - - この区画はオークションに出されています。 所有権を変更するとオークションはキャンセルとなり、既にオークションに参加している住人がいればその人に迷惑をかけてしまいます。 + 「[EXTENSION]」は、無効な拡張子です。 +有効な拡張子:[VALIDS] + fail + + + 読み込みのためにアップロードされたサウンドファイルを開けません: +[FILE] + fail + + RIFF WAVEファイルとして認識されません: +[FILE] + fail + + PCM WAVEオーディオファイルとして認識されません: +[FILE] + fail + + このファイルのチャンネル数は無効です(モノラルか、ステレオである必要があります): +[FILE] + fail + + このファイルのサンプリングレートはサポートされていません(44.1kである必要があります): +[FILE] + fail + + このファイルのビットサイズはサポートされていません(8bitか、16bitである必要があります): +[FILE] + fail + + WAVヘッダーにデータチャンクが見つかりません: +[FILE] + fail + + WAVファイルのチャンクサイズが間違っています: +[FILE] + fail + + オーディオファイルが長すぎます。(最大10秒): +[FILE] + fail + + 「[FILE]」に問題があります。 + +[ERROR] + fail + + 書き込み用の一時圧縮サウンドファイルを開くことができません: +[FILE] + fail + + 不明なVorbisのエンコードに失敗しました: +[FILE] + fail + + 次のファイルのエンコードができません: +[FILE] + fail + + ユーザー名とパスワードを自動入力できません。これはネットワーク設定が変更された場合に起こります + fail + + + 破損したリソースファイル: +[FILE] + fail + + 不明なLindenリソースファイルのバージョンです: +[FILE] + fail + + 出力ファイルを作成できません: +[FILE] + fail + + 現在[APP_NAME]では、BVH形式のアニメーションファイルの一括アップロードはサポートされていません。 + fail + + 以下の理由で「[FILE]」をアップロードできませんでした: +[REASON] + +お手数ですがもう一度やり直してください。 + fail + + 「[LANDMARK_NAME]」を「[FOLDER_NAME]」フォルダに追加しました。 + この場所のランドマークは、既に持っています。 + fail + + + + +フォルダ名を入力してください: + confirm +
+ + +
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml index df9ef40113..098128bb6d 100644 --- a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml @@ -1,11 +1,12 @@ - - - - - - -
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml index b9e10c071c..4f5d1c61de 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml @@ -1,27 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml index fa1137c7c5..aae708e257 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml index 01699d1593..8c697317a5 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml @@ -1,14 +1,14 @@ - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml index 3e706cd403..8a691467a8 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml @@ -1,26 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml index 59c80bdb0e..0b60751bb3 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml index e4f78cad31..eb696ec534 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml index b0a619bcb0..80ed3b19c8 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml @@ -1,37 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml index aa07b9476e..3e4ab1f856 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml index eb5faa2545..8af5189f87 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml index d984342896..47d4f76e48 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml index 07bcefd9b3..f6ce0e6c6c 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml index 0de6a5f22f..ff6884f24d 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml @@ -1,33 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 c9d4f947a4..7e43b8b61f 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml index bd4812603f..c239eb9543 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml new file mode 100644 index 0000000000..819b05f854 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml new file mode 100644 index 0000000000..ac211997bf --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml new file mode 100644 index 0000000000..80d7eeff31 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml new file mode 100644 index 0000000000..ed1491298f --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml new file mode 100644 index 0000000000..92e0ec74ba --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml new file mode 100644 index 0000000000..9504f39ef1 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml new file mode 100644 index 0000000000..1ee1d6a914 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml new file mode 100644 index 0000000000..a596fbe103 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_edit.xml b/indra/newview/skins/default/xui/ja/menu_edit.xml index c2ef0179b2..0152675de7 100644 --- a/indra/newview/skins/default/xui/ja/menu_edit.xml +++ b/indra/newview/skins/default/xui/ja/menu_edit.xml @@ -1,12 +1,12 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml index 4708b1446c..94361555fe 100644 --- a/indra/newview/skins/default/xui/ja/menu_favorites.xml +++ b/indra/newview/skins/default/xui/ja/menu_favorites.xml @@ -1,10 +1,14 @@ - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml index 88c3aee042..2527e373f4 100644 --- a/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml @@ -1,23 +1,35 @@ - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml index 3eacfb3507..333db46380 100644 --- a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml @@ -1,10 +1,11 @@ - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml index 3787f7d645..52cc5e69e1 100644 --- a/indra/newview/skins/default/xui/ja/menu_group_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_group_plus.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml index 2e633ae1b2..3a9fb3570a 100644 --- a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml @@ -1,6 +1,5 @@ - - - - + + +
\ No newline at end of file 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 55cd6610f7..8899b69f1a 100644 --- a/indra/newview/skins/default/xui/ja/menu_im_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_im_conversation.xml @@ -1,15 +1,16 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml index 222a741718..5ef2a4152a 100644 --- a/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml +++ b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml index 8cd6fa4a27..26b581b793 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml @@ -1,4 +1,4 @@ - - + +
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml index 5bcb96f083..7ae8765df4 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml @@ -1,6 +1,6 @@ - - - - + + + +
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml index 5453f998fa..61a9bae73c 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml @@ -1,7 +1,7 @@ - - - - - + + + + +
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml index 5a0519ba19..ec5abea6b2 100644 --- a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml @@ -1,19 +1,19 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml index 9a4a8138f5..d9642e3c0c 100644 --- a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml +++ b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index 7f68c18e0b..f25c32c084 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -1,117 +1,133 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml index eecf166a70..3f43469c6f 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml @@ -1,40 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml index ad60b0d01f..7a8adcb9fb 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml @@ -1,18 +1,21 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml b/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml new file mode 100644 index 0000000000..f76be9631a --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_land.xml b/indra/newview/skins/default/xui/ja/menu_land.xml index 3754bd7fa4..a65504b14c 100644 --- a/indra/newview/skins/default/xui/ja/menu_land.xml +++ b/indra/newview/skins/default/xui/ja/menu_land.xml @@ -1,10 +1,13 @@ - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml index c134422955..06345c5074 100644 --- a/indra/newview/skins/default/xui/ja/menu_landmark.xml +++ b/indra/newview/skins/default/xui/ja/menu_landmark.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml index 61b473858b..5ba2092648 100644 --- a/indra/newview/skins/default/xui/ja/menu_login.xml +++ b/indra/newview/skins/default/xui/ja/menu_login.xml @@ -1,39 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml b/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml index bf38075556..6c6913db5d 100644 --- a/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml index faae4ef717..6f4f4938f4 100644 --- a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml @@ -1,7 +1,8 @@ - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml index 2e733ee24b..77a2e60cda 100644 --- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml index 43f86e84bf..f35e74afc5 100644 --- a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml +++ b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml @@ -1,8 +1,8 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_mute_particle.xml b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml index 8dab025309..38b736ae9b 100644 --- a/indra/newview/skins/default/xui/ja/menu_mute_particle.xml +++ b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml index 9ae2e58198..f3e274313e 100644 --- a/indra/newview/skins/default/xui/ja/menu_navbar.xml +++ b/indra/newview/skins/default/xui/ja/menu_navbar.xml @@ -1,11 +1,11 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml index c2e4a27686..42a6c66168 100644 --- a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml +++ b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml @@ -1,9 +1,12 @@ - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml index 913bae8958..3852efcdd4 100644 --- a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml +++ b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml index 8da1d5d000..f7e64e015a 100644 --- a/indra/newview/skins/default/xui/ja/menu_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_object.xml @@ -1,35 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_object_icon.xml b/indra/newview/skins/default/xui/ja/menu_object_icon.xml index 7b55a64eef..163c8d1779 100644 --- a/indra/newview/skins/default/xui/ja/menu_object_icon.xml +++ b/indra/newview/skins/default/xui/ja/menu_object_icon.xml @@ -1,8 +1,9 @@ - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml index 4946d58fd8..962d25bb07 100644 --- a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml @@ -1,36 +1,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml index 9491c22f31..042a3222d1 100644 --- a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml @@ -1,9 +1,9 @@ - - - - - - - - - + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml index 64d8ded722..f64a6dc55c 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_list.xml @@ -1,21 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_participant_view.xml b/indra/newview/skins/default/xui/ja/menu_participant_view.xml index 5816351d9d..ef61874763 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_view.xml @@ -1,13 +1,16 @@ - - - - - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml index f74399f2ba..8d80ddebad 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml @@ -1,9 +1,10 @@ - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml index 3e74b2ddff..1d89e15f64 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml index 4b86a353f4..db586365b2 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml index f290bec652..fee506c511 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups.xml b/indra/newview/skins/default/xui/ja/menu_people_groups.xml index 2c0c85ba28..91044bd283 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_groups.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_groups.xml @@ -1,8 +1,8 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml index 4a9e402fa4..07144be420 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml index 87f1d26ca4..f59ebfa154 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml @@ -1,18 +1,18 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml index fe85e278cf..5c73eb5a4f 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml index 2217288987..7b56f1daf8 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml index feaeba4398..da27372963 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml index 011d3d2526..4a5a42ad05 100644 --- a/indra/newview/skins/default/xui/ja/menu_picks.xml +++ b/indra/newview/skins/default/xui/ja/menu_picks.xml @@ -1,8 +1,10 @@ - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml index 84bf90fea0..62eb8327bc 100644 --- a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml index a9f05e126d..f45f9211ed 100644 --- a/indra/newview/skins/default/xui/ja/menu_place.xml +++ b/indra/newview/skins/default/xui/ja/menu_place.xml @@ -1,7 +1,5 @@ - - - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml index d19bc44451..d6a13b92ba 100644 --- a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml +++ b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml index c455204722..c9fa92b6a2 100644 --- a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml @@ -1,16 +1,15 @@ - + - - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml index 579f2c2cbd..16508dde4a 100644 --- a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml @@ -1,19 +1,22 @@ - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml new file mode 100644 index 0000000000..197b61af30 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_profile_other.xml b/indra/newview/skins/default/xui/ja/menu_profile_other.xml new file mode 100644 index 0000000000..0ff41f91a2 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_profile_other.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml index 9d3a5dda1c..67c481cdd6 100644 --- a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml @@ -1,12 +1,12 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_profile_self.xml b/indra/newview/skins/default/xui/ja/menu_profile_self.xml new file mode 100644 index 0000000000..ec10d92629 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_profile_self.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml index 6513d9264a..6d8f2381d9 100644 --- a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml +++ b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_save_settings.xml b/indra/newview/skins/default/xui/ja/menu_save_settings.xml index 44fb1fb30b..a8bb95a661 100644 --- a/indra/newview/skins/default/xui/ja/menu_save_settings.xml +++ b/indra/newview/skins/default/xui/ja/menu_save_settings.xml @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml index a89dd0bcbe..c4bc424927 100644 --- a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml +++ b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_settings_add.xml b/indra/newview/skins/default/xui/ja/menu_settings_add.xml index 814ad9c1a6..9e64476446 100644 --- a/indra/newview/skins/default/xui/ja/menu_settings_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_settings_add.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_settings_gear.xml b/indra/newview/skins/default/xui/ja/menu_settings_gear.xml index 064eae95bf..a44786b414 100644 --- a/indra/newview/skins/default/xui/ja/menu_settings_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_settings_gear.xml @@ -1,10 +1,10 @@ - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml index 61ba3085d9..3d5ea3f616 100644 --- a/indra/newview/skins/default/xui/ja/menu_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_slurl.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml index 901eab9166..fd4dffeefa 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml @@ -1,6 +1,7 @@ - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml index 1cc230e5b6..dc34bc6463 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml @@ -1,6 +1,6 @@ - - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml index 4dd44d2ec8..391be973f8 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_text_editor.xml b/indra/newview/skins/default/xui/ja/menu_text_editor.xml index eda973c888..48fd8ad243 100644 --- a/indra/newview/skins/default/xui/ja/menu_text_editor.xml +++ b/indra/newview/skins/default/xui/ja/menu_text_editor.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_toolbars.xml b/indra/newview/skins/default/xui/ja/menu_toolbars.xml index d5363a5131..9bb4eaf496 100644 --- a/indra/newview/skins/default/xui/ja/menu_toolbars.xml +++ b/indra/newview/skins/default/xui/ja/menu_toolbars.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml index 1a67a2a8f7..ea1e12ab2b 100644 --- a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml +++ b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml @@ -1,7 +1,11 @@ - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml index 639602ce3c..dc9a6af8fe 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml @@ -1,9 +1,10 @@ - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_email.xml b/indra/newview/skins/default/xui/ja/menu_url_email.xml index 6c41d759fe..1ba8d6a64e 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_email.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_email.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_experience.xml b/indra/newview/skins/default/xui/ja/menu_url_experience.xml index 582784c2f0..83d7029527 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_experience.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_experience.xml @@ -1,4 +1,4 @@ - - + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml index 1dd3d79438..9214d67dea 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_group.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_group.xml @@ -1,6 +1,7 @@ - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml index c3da8a8686..ba5048094d 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_http.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_http.xml @@ -1,7 +1,7 @@ - - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml index 147ab44a1b..7a13030b64 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml @@ -1,6 +1,7 @@ - + - - - - + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_map.xml b/indra/newview/skins/default/xui/ja/menu_url_map.xml index 8d41e1a571..75813f9017 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_map.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_map.xml @@ -1,6 +1,8 @@ - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml index 96f8b3f7b1..ef76e5484f 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml @@ -1,10 +1,12 @@ - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml index 8d264059d3..0c1eab8dad 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml @@ -1,6 +1,8 @@ - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml index a516c5a075..78f3997bf8 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml @@ -1,5 +1,6 @@ - - - + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml index 2c857ec915..e0d4427008 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml @@ -1,7 +1,9 @@ - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml index c3507a9a33..e6941fb8bd 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml @@ -1,6 +1,8 @@ - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index d5ac67b9e6..35e4db743b 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -1,495 +1,669 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml index 02029230ba..7ea696d6ca 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml index 48aac2ed05..75fa3f69b3 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml @@ -1,8 +1,8 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml index 8c331bc008..7845ff9aad 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml @@ -1,9 +1,9 @@ - - - - - - - + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/mime_types.xml b/indra/newview/skins/default/xui/ja/mime_types.xml index 3b29a622a4..23bab3b0b2 100644 --- a/indra/newview/skins/default/xui/ja/mime_types.xml +++ b/indra/newview/skins/default/xui/ja/mime_types.xml @@ -1,240 +1,143 @@ - - - - ここにWebコンテンツがあります。 - - - Webコンテンツを表示 - - - - - - ここにはムービーがあります - - - ムービー再生 - - - - - - ここには画像があります - - - ここの画像を表示 - - - - - - ここではオーディオが聞けます - - - ここのオーディオを再生する - - - - - - ここにメディアなし - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + (不明) + なし + + + この場所には、Webコンテンツが含まれています。 + Web コンテンツを表示する + + + + この場所には、ムービーがあります。 + ムービーを再生する + + + + この場所には、画像があります + この場所の画像を表示する + + + + この場所には、オーディオがあります。 + この場所のオーディオを再生する + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/mime_types_linux.xml b/indra/newview/skins/default/xui/ja/mime_types_linux.xml index cb1e48148f..61574b74f9 100644 --- a/indra/newview/skins/default/xui/ja/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_linux.xml @@ -1,225 +1,131 @@ - - - - このロケーションには Web コンテンツが含まれています - - - Web コンテンツを表示する - - - - - - ここにはムービーがあります - - - ムービーを再生する - - - - - - このロケーションには画像があります - - - このロケーションの画像を表示する - - - - - - このロケーションにはオーディオがあります - - - このロケーションのオーディオを再生する - - - - - - ここにメディアなし - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + (不明) + なし + + + この場所には、Webコンテンツが含まれています。 + Web コンテンツを表示する + + + + この場所には、ムービーがあります。 + ムービーを再生する + + + + この場所には、画像があります + この場所の画像を表示する + + + + この場所には、オーディオがあります。 + この場所のオーディオを再生する + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/mime_types_mac.xml b/indra/newview/skins/default/xui/ja/mime_types_mac.xml index cb1e48148f..0bfc9aeb99 100644 --- a/indra/newview/skins/default/xui/ja/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_mac.xml @@ -1,225 +1,134 @@ - - - - このロケーションには Web コンテンツが含まれています - - - Web コンテンツを表示する - - - - - - ここにはムービーがあります - - - ムービーを再生する - - - - - - このロケーションには画像があります - - - このロケーションの画像を表示する - - - - - - このロケーションにはオーディオがあります - - - このロケーションのオーディオを再生する - - - - - - ここにメディアなし - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + (不明) + なし + + + この場所には、Webコンテンツが含まれています。 + Web コンテンツを表示する + + + + この場所には、ムービーがあります。 + ムービーを再生する + + + + この場所には、画像があります + この場所の画像を表示する + + + + この場所には、オーディオがあります。 + この場所のオーディオを再生する + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 72b4d21eb2..48983f3157 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1,3184 +1,5315 @@ - + - 今後は表示しない - 以後、これを表示しない + 次回からこのメッセージを表示しない + + 次回からこのメッセージを表示しない (現セッションで) - 常にこのオプションを選択 - 閉じる - - - - - - - - - あなたの [APP_NAME] のバージョンでは今受け取った通知メッセージを表示することができません。 最新ビューワがインストールされているかご確認ください。 - -エラー詳細: 「 [_NAME] 」という通知は notifications.xml にありませんでした。 - - - - フロータエラー:下記のコントロールが見つかりませんでした: + + 常にこのオプションを選択 + + 閉じる + + + + + + + + + + + + + + + + 現在使用中の[APP_NAME]のバージョンでは、受け取った通知メッセージを表示することができません。 +最新のビューアーがインストールされている事をご確認ください。 + +エラー詳細:「 [_NAME] 」という通知メッセージは、notifications.xmlに定義されていませんでした。 + fail + + + + フローターエラー:以下のコントロールが見つかりませんでした: + [CONTROLS] - - - - 現在利用可能なチュートリアルはありません。 - - - [MESSAGE] - - [MESSAGE] - - - - [MESSAGE] - - - - [APP_NAME] をアップデート中にエラーが発生しました。 ビューワの [http://get.secondlife.com 最新バージョンをダウンロード] してください。 - - - - [SECOND_LIFE_GRID] に接続できませんでした。 -「[DIAGNOSTIC]」 -インターネット接続が正常かご確認ください。 - - - - メッセージテンプレート [PATH] がありませんでした。 - - - - 現在の衣類、身体部位の変更を保存しますか? - - - - これらのアイテムの 1 つまたは複数をマーチャントアウトボックスにコピーする許可がありません。移動するか、置き去りにすることはできます。 - - - - マーチャントアウトボックスの最上位に転送した各アイテムにつき、それぞれ 1 つの新しいフォルダが作成されました。 - - - - 成功 - -マーケットプレイスに正常に送信されたすべてのフォルダ - - - - 一部のフォルダは転送されませんでした - -一部のフォルダがマーケットプレイスに送信されたときにエラーが発生しました。これらのフォルダはまだマーチャントアウトボックス内にあります。 - -詳細については、[[MARKETPLACE_IMPORTS_URL] エラーログ]をご覧ください。 - - - - '[ERROR_CODE]' エラーで転送できませんでした - -システムまたはネットワークのエラーのため、フォルダはマーケットプレイスに送信されませんでした。後でもう一度お試しください。 - - - - '[ERROR_CODE]' エラーでマーケットプレイスを初期化できませんでした - -システムまたはネットワークのエラーのため、マーケットプレイスの初期化に失敗しました。後でもう一度お試しください。 - - - - 在庫フォルダへのコピーまたは移動がエラーにより失敗しました: + fail + + -'[ERROR_CODE]' - - - - マーケットプレイスのリストへのコピーまたは移動がエラーにより失敗しました: + 現在利用可能なチュートリアルはありません。 + fail + + -'[ERROR_CODE]' - - - - マーケットプレイスによる取引が次のエラーにより失敗しました: - -[ERROR_REASON][ERROR_DESCRIPTION] - - - - この製品をリストに表示できないか、バージョンフォルダを有効にできません。通常、これはリスト説明フォームに情報が不足しているために起こりますが、フォルダ構造のエラーが原因の場合もあります。リストを編集するか、リストフォルダにエラーがないか確認してください。 - - - - マーケットプレイスへのリスト表示が次のエラーで失敗しました : - -'[ERROR_CODE]' - - - - このバージョンフォルダの有効化が次のエラーにより失敗しました : + [MESSAGE] + + [MESSAGE] + + + [MESSAGE] + + + + [APP_NAME]のアップデート中にエラーが発生しました。[http://get.secondlife.com 最新バージョンのビューアーをダウンロード]してください。 + + + + [SECOND_LIFE_GRID]に接続できませんでした。 +[DIAGNOSTIC] + +インターネット接続が正常かご確認ください。 + fail + + + + ビューアがサーバーから不正な形式の応答を受け取りました。インターネット接続が正常に機能していることを確認してから、後でもう一度お試しください。 + +これが誤りだと思われる場合は、サポートにお問い合わせください。 + fail + + + + メッセージテンプレート[PATH]がありませんでした。 + + fail + + + 現在の服装/身体部位の変更を保存しますか? + + + + これらのアイテムの1つ以上を販売用の送信トレイにコピーする権限がありません。移動したり残したままにすることはできます。 + + + + 販売ボックスの最上位に転送した各アイテムにつき、それぞれ1つの新しいフォルダが作成されました。 + + + + + 成功しました。 + +すべてのフォルダが、マーケットプレイスに正常に送信されました。 + + + + 一部のフォルダは送信できていません。 + +一部のフォルダが、マーケットプレイスに送信されるときにエラーが発生しました。これらのフォルダは、販売者の送信トレイにまだ残っています。 + +詳細につきましては、[[MARKETPLACE_IMPORTS_URL] エラーログ]をご確認ください。 + + + 以下のエラーで転送できませんでした:[ERROR_CODE] + +システムまたはネットワークのエラーのため、フォルダはマーケットプレイスに送信されませんでした。お手数ですが、後でもう一度やり直してください。 + + + + 以下のエラーでマーケットプレイスを初期化できませんでした:[ERROR_CODE] + +システムまたはネットワークのエラーのため、マーケットプレイスの初期化に失敗しました。お手数ですが、後でもう一度やり直してください。 + + + + 在庫フォルダへのコピーまたは移動がエラーにより失敗しました:[ERROR_CODE] + + + マーケットプレイスのリストへのコピーまたは移動が以下のエラーにより失敗しました:[ERROR_CODE] + + + マーケットプレイスによる取引が以下のエラーにより失敗しました:[ERROR_REASON] +[ERROR_DESCRIPTION] + + + この商品をリストに表示できないか、バージョンフォルダを有効にできません。通常、これはリスト説明フォームに情報が不足しているために起こりますが、フォルダ構造のエラーが原因の場合もあります。 +リストを編集するか、リストフォルダにエラーがないか確認してください。 + + + マーケットプレイスへのリスト表示が次のエラーで失敗しました: '[ERROR_CODE]' - - - - リストを作成するために、リストするコンテンツの階層を固定しました。 - - - - この操作により、このリストの有効な内容が変更されます。続けますか? - - - - マーケットプレイスのリストウィンドウにドラッグしたアイテムは元の場所からコピーされるのではなく、移動します。続けますか? - - - - リストフォルダを移動または削除すると、マーケットプレイスのリストが削除されます。マーケットプレイスのリストを維持する場合は、変更するバージョンフォルダの中身を移動または削除してください。続けますか? - - - - これらのアイテムの 1 つまたは複数をマーケットプレイスにコピーする権限がありません。移動するか、置き去りにすることはできます。 - - - - この操作により、このリストが削除されます。続けますか? - - - - この操作により、現在のリストのバージョンフォルダが無効になります。続けますか? - - - - このリストをアップデートできませんでした。 -[[URL] ここをクリック] してマーケットプレイスで編集します。 - - - マーケットプレイスのリストフォルダにある衣服やボディパーツを着用できません。 - リスト ID が無効です。 - - このリストには複数のバージョンフォルダがあるか、バージョンフォルダがありません。後で、単独でバージョンフォルダを選択して有効にする必要があります。 - - - - 各種の在庫品目を別々の在庫フォルダに分けたため、フォルダはリストに表示できるように配置されています。 - - - - 在庫が空のため、リストを削除しました。もう一度リストを表示するには、在庫フォルダにユニットを追加する必要があります。 - - - - バージョンフォルダが空のため、リストを削除しました。もう一度リストを表示するには、バージョンフォルダにアイテムを追加する必要があります。 - - - アニメーションデータの書き込みに問題があります。後でもう一度お試しください。 - 次の理由で、オークションのスナップショットのアップロード時に問題が起こりました。 -[REASON] - 一度に複数のアイテムの中身を表示できません。 -アイテムを 1 つだけ選択して、もう一度お試しください。 - - 衣服、身体部位に対する変更をすべて保存しますか? - - - - フレンド以外の人からのコールや、インスタントメッセージを無視する設定にしたことを、相手に知られることはありません。 - - - - 注意:このオプションを有効にすると、このパソコンを使うユーザーは誰でも、あなたのお気に入りの場所を見ることができるようになります。 - - - - 複数の Second Life ビューワを実行することはサポートされていません。テクスチャキャッシュのコリジョンや破損、およびビジュアルとパフォーマンスの低下につながる恐れがあります。 - - - - 他人に修正権限を与えると、権限を与えられた人はあなたが所有するインワールドのオブジェクトを変更、削除、持ち帰ることができます。この権限を与える際には十分に注意してください。 -[NAME] に修正権限を与えますか? - - - - 他人に修正権限を与えると、権限を与えられた人はあなたが所有するインワールドのオブジェクトを変更することができます。 この権限を与える際には十分に注意してください。 -選択した住人に修正権限を与えますか? - - - - [NAME] の修正権限を解約しますか? - - - - 選択した住人から変更権限を取り下げますか? - - - - グループ名は [MIN_LEN] ~ [MAX_LEN] 文字である必要があります。 - - - - グループを作成できません。 -[MESSAGE] - - - - [NEEDS_APPLY_MESSAGE] + + + このバージョンフォルダの有効化が次のエラーにより失敗しました: +'[ERROR_CODE]' + + + リストを作成するために、リストするコンテンツの階層を固定しました。 + confirm + + + この操作により、このリストの有効な内容が変更されます。続けてもよろしいですか? + confirm + + + マーケットプレイスのリストウィンドウにドラッグしたアイテムは、元の場所からコピーされるのではなく移動となります。続けてもよろしいですか? + confirm + + + リストフォルダを移動または削除すると、マーケットプレイスのリストが削除されます。マーケットプレイスのリストを維持する場合は、変更するバージョンフォルダの中身を移動または削除してください。続けてもよろしいですか? + confirm + + + これらのアイテムの1つまたは複数をマーケットプレイスにコピーする権限がありません。移動するか、残したままにすることはできます。 + confirm + + + この操作により、このリストが削除されます。続けてもよろしいですか? + confirm + + + この操作により、現在のリストのバージョンフォルダが無効になります。続けてもよろしいですか? + confirm + + + このリストをアップデートできませんでした。 +[[URL] ここをクリック]してマーケットプレイスで編集します。 + + + マーケットプレイスのリストフォルダにある衣服装やボディパーツを着用できません。 + fail + + リストIDが無効です。 + fail + + このリストには複数のバージョンフォルダがあるか、バージョンフォルダがありません。後で、単独でバージョンフォルダを選択して有効にする必要があります。 + confirm + + + 各種の在庫品目を別々の在庫フォルダに分けたため、フォルダはリストに表示できるように配置されています。 + confirm + + + 在庫が空のため、リストを削除しました。もう一度リストを表示するには、在庫フォルダにユニットを追加する必要があります。 + confirm + + + バージョンフォルダが空のため、リストを削除しました。もう一度リストを表示するには、バージョンフォルダにアイテムを追加する必要があります。 + confirm + + + アニメーションデータの書き込みに問題があります。後でもう一度お試しください。 + fail + + 以下の理由で、オークションのスナップショットのアップロード時に問題が起こりました:[REASON] + fail + + 一度に複数のアイテムの中身を表示できません。 +アイテムを1つだけ選択して、もう一度お試しください。 + fail + + 服装、身体部位に対する変更をすべて保存しますか? + confirm + + + フレンド以外の人からのコールや、インスタントメッセージを無視する設定にしたことを、相手に知られることはありません。 + + + 注意:このオプションを有効にすると、このパソコンを使うユーザーは誰でも、あなたのお気に入りの場所を見ることができるようになります。 + + + Second Lifeビューアーの多重起動はサポートされていません。 +テクスチャキャッシュの競合による破損や、およびビジュアルとパフォーマンスの低下につながる恐れがあります。 + + + 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更、削除、持ち帰ることができます。この権限を与える際には十分に注意してください。 +[NAME]に修正権限を与えますか? + + + 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更することができます。 +この権限を与える際には十分に注意してください。選択した住人に修正権限を与えますか? + confirm + + + [NAME]の修正権限を解除しますか? + confirm + + + 選択した住人から変更権限を取り下げますか? + confirm + + + グループ名は[MIN_LEN]~[MAX_LEN]文字である必要があります。 + group + fail + + + グループを作成できません。 +[MESSAGE] + group + fail + + + [NEEDS_APPLY_MESSAGE] [WANT_APPLY_MESSAGE] - - - - グループ通知の送信には、件名の記入が必要です。 - - - - あなたは [ROLE_NAME] の役割にメンバーを与えようとしています。 -任命されたメンバーが自ら退任しない限り、 -役柄から削除できません。 + group + fail + + + グループ通知の送信には、件名の記入が必要です。 + group + fail + + + あなたは、[ROLE_NAME]の役割にメンバーを与えようとしています。任命されたメンバーが自ら退任しない限り、 役柄から削除できません。 操作を続行しますか? - - - - あなたは [ROLE_NAME] に [ACTION_NAME] の能力を -与えようとしています。 - - *警告* -この能力を持つ役割のメンバーは、 -自分と他のメンバーに現在より強力な権限を割り当て、 -自分をオーナーとほぼ同様の立場に任命することもできるようになります。 -この行為の意味をよく理解してから実行してください。 + + + あなたは[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 +*警告* +この能力を持つ役割のメンバーは、 自分と他のメンバーに現在より強力な権限を割り当て、 自分をオーナーとほぼ同様の立場に任命することもできるようになります。 +この行為の意味をよく理解してから実行してください。 この能力を [ROLE_NAME] に割り当てますか? - - - - あなたは [ROLE_NAME] に [ACTION_NAME] の能力を -与えようとしています。 - - *警告* -この能力をもつ役割のメンバーは、 -自分と他のメンバーにすべての能力を割り当て、 -自分をオーナーとほぼ同様の立場に任命できます。 + + + あなたは、[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 -この能力を [ROLE_NAME] に割り当てますか? - - - - 役割 '[ROLE_NAME]' に能力 '[ACTION_NAME]' を追加しようとしています。 +*警告* +この能力をもつ役割のメンバーは、自分と他のメンバーにすべての能力を割り当て、自分をオーナーとほぼ同様の立場に任命できます。 +この能力を[ROLE_NAME] に割り当てますか? + + + 役割「[ROLE_NAME]」に能力「[ACTION_NAME]」を追加しようとしています。 *警告* -この能力を持つ役割のメンバーにも能力 '[ACTION_NAME_2]' と '[ACTION_NAME_3]' が許可されます - - - - 役割 '[ROLE_NAME]' から能力 '[ACTION_NAME]' を削除しようとしています。 +この能力を持つ役割のメンバーにも能力「[ACTION_NAME_2]」と「[ACTION_NAME_3]」が許可されます。 + + + 役割「[ROLE_NAME]」から能力「[ACTION_NAME]」を削除しようとしています。 *警告* -この能力を削除しても能力 '[ACTION_NAME_2]' と '[ACTION_NAME_3]' は削除されません。 - +この能力を削除しても能力「[ACTION_NAME_2]」と「[ACTION_NAME_3]」は削除されません。 これらの能力をこの役割に許可しない場合は、すぐに削除してください! - - - - [AVATAR_NAME] をグループから追放しようとしています。 - - - - [COUNT] 名のメンバーをグループから追放しようとしています。 - - - - [AVATAR_NAME] をグループから追放しようとしています。 - - - - [COUNT] 名のメンバーをグループから追放しようとしています。 - - - 一部の住人がグループから追放されたため、招待状が送られませんでした。 - - アタッチメントを下に置こうとしています。 -続けますか? - - - - このグループに参加するには、L$ [COST] かかります。 -続行しますか? - - - - <nolink>[NAME]</nolink> というグループに入ろうとしています。 -続けますか? - - - このグループに加入するには、L$ [COST] 必要です。 -L$ が不足しているのでこのグループに参加することができません。 - - このグループ作成にかかる費用:L$[COST] + + + [AVATAR_NAME]をグループから追放しようとしています。 + group + confirm + + + [COUNT]名のメンバーをグループから追放しようとしています。 + group + confirm + + + [AVATAR_NAME]をグループから追放しようとしています。 + group + confirm + + + [COUNT]名のメンバーをグループから追放しようとしています。 + group + confirm + + + 一部の住人がグループから追放されたため、招待状が送られませんでした。 + 装着物を下に置こうとしています。 +このまま続けてもよろしいですか? + + + このグループに参加するには、L$ [COST]かかります。 +このまま続けてもよろしいですか? + confirm + funds + group + + + 「<nolink>[NAME]</nolink>」というグループに入ろうとしています。 +このまま続けてもよろしいですか? + group + confirm + + + このグループに加入するには、L$ [COST]必要です。 +L$が不足しているので、このグループに参加することができません。 + group + fail + funds + + このグループ作成にかかる費用:L$[COST] 一人ではグループにならないので、永久に削除されてしまいます。 -48 時間以内にメンバーを勧誘し、入会してもらってください。 - - - - あなたはグループに参加することはできません。 - - - - グループ参加リクエスト中にエラーが発生しました。 - - - - グループに参加できません: [reason] - - - - 申し訳ありませんが、トライアルユーザーはグループに参加できません。 - - - - 「<nolink>[group_name]</nolink>」に参加できません: -既に [group_count] グループのメンバーになっています。参加できるのは最大 [max_groups] グループまでです。 - - - - 「<nolink>[group_name]</nolink>」に参加できません: +48時間以内にメンバーを勧誘し、入会してもらってください。 + group + funds + + + あなたはグループに参加することはできません。 + group_id + success + + + グループ参加リクエスト中にエラーが発生しました。 + group_id + success + + + 以下のグループに参加できませんでした:[reason] + group_id + success + reason + + + 申し訳ありませんが、トライアルユーザーはグループに参加できません。 + group_id + success + + + 「<nolink>[group_name]</nolink>」に参加できません: +既に[group_count]個のグループのメンバーになっています。参加できるのは最大[max_groups]グループまでです。 + success + group_id + group_name + group_count + max_groups + + + 「<nolink>[group_name]</nolink>」に参加できません: このグループは現在、参加が制限されています。 - - - - このユーザーグループに追加されました - - - - 会員料金として必要な L$ [membership_fee] を送金することができません。 - - - - L$ [COST] で [TIME] 時間 [PARCEL_NAME] に入ることができます。 -入場許可を購入しますか? - - - 不特定の人に売却する場合には、 -売却価格はL$ 0 以上に設定する必要があります。 -売却価格をL$ 0 に設定する場合は、 -売却する個人を選択してください。 - - 選択した [LAND_SIZE] 平方メートルの土地は、売り出し中に設定されています。 -売却価格 L$ [SALE_PRICE] で、[NAME] に売却を認可します。 - - - - 注意: 「誰にでも販売」をクリックすることで、あなたの土地はこのリージョンにいる人に限らず [SECOND_LIFE] コミュニティ全体で利用可能となります。 - -選択した [LAND_SIZE] 平方メートルの土地は、販売対象に設定されました。 -販売価格 L$ [SALE_PRICE] で、[NAME] が販売対象者となります。 - - - - グループ「<nolink>[NAME]</nolink>」と共有するこのにある区画のすべてのオブジェクトを前のオーナーのインベントリに返却しますか? - -*注意*この操作をすると、グループに譲渡された譲渡禁止のオブジェクトを削除することになります。 - -オブジェクト: [N] - - - - この区画で、 -住人 [NAME] が所有する全てのオブジェクトを -本人のインベントリに本当に返却してもよいですか? - -オブジェクト: [N] - - - - この土地区画内にある、あなたが所有するすべてのオブジェクトを、 -あなたのインベントリに戻そうとしています。続けますか? - -オブジェクト: [N] - - - - この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、 -それぞれの所有者のインベントリに戻そうとしています。 -操作を続行しますか? -グループに譲渡された「再販・プレゼント可」のオブジェクトは、以前の所有者に返却されます。 - -*警告* これにより、 -グループに譲渡された「再販・プレゼント不可」のオブジェクトは削除されます! -オブジェクト: [N] - - - - この土地区画内にある、 -[NAME]以外による所有のオブジェクトをすべてそれぞれの所有者のインベントリに返却しようとしています。 -操作を続行しますか?グループに譲渡された「再販・プレゼント可」のオブジェクトは、以前の所有者に返却されます。 - -*警告* これにより、 -グループに譲渡された「再販・プレゼント不可」のオブジェクトは削除されます! -オブジェクト: [N] - - - - リストされた全てのオブジェクトを所有者の持ち物に戻しますか?これによりすべてのスクリプト化されたオブジェクトがリージョンに戻ります! - - - - このリージョン(地域)内のすべてのオブジェクトを無効にしようとしています。操作を続行しますか? - - - - グループ <nolink>[NAME]</nolink> と共有されていない、この区画にあるオブジェクトを前のオーナーに返却しますか? - -オブジェクト: [N] - - - スクリプトを無効にできません。 + group_id + success + + + このユーザーグループに入会しました。 + group_id + success + + + 会員料金として必要なL$ [membership_fee]を送金することができません。 + group_id + success + + + この区画([PARCEL_NAME])は、L$ [COST]で[TIME]時間入ることができます。入場許可証を購入しますか? + fail + funds + confirm + + + 不特定の人に売却する場合には、売却価格はL$ 0以上に設定する必要があります。 +売却価格をL$ 0に設定する場合は、売却する個人を選択してください。 + fail + + 選択した[LAND_SIZE]㎡の土地は、売り出し中に設定されています。 +売却価格L$ [SALE_PRICE]で、[NAME]に売却を認可します。 + confirm + + + 注意:「誰にでも販売」をクリックすることで、あなたの土地はこのリージョンにいる人に限らず、[SECOND_LIFE]コミュニティ全体で利用可能となります。 +選択した[LAND_SIZE]㎡の土地は、販売対象に設定されました。 +販売価格L$ [SALE_PRICE]で、[NAME]が販売対象者となります。 + confirm + + + グループ「<nolink>[NAME]</nolink>」と共有するこのにある区画のすべてのオブジェクトを前のオーナーのインベントリに返却しますか? +*警告* +この操作をすると、グループに譲渡された譲渡禁止のオブジェクトを削除することになります。 +オブジェクト:[N] + confirm + group + + + この区画で、住人[NAME]が所有する全てのオブジェクトを本人のインベントリに本当に返却してもよいですか? +オブジェクト:[N] + confirm + + + この土地区画内にある、あなたが所有するすべてのオブジェクトを、あなたのインベントリに戻そうとしています。このまま続けてもよろしいですか? +オブジェクト:[N] + confirm + + + この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、それぞれの所有者のインベントリに戻そうとしています。このまま操作を続行してもよろしいですか? +グループに譲渡された「再販・譲渡可」のオブジェクトは、以前の所有者に返却されます。 + +*警告* + +これにより、グループに譲渡された「再販・譲渡不可」のオブジェクトは削除されます! +オブジェクト:[N] + confirm + + + この土地区画内にある、[NAME]以外による所有のオブジェクトをすべてそれぞれの所有者のインベントリに返却しようとしています。このまま操作を続行してもよろしいですか? +グループに譲渡された「再販・譲渡可」のオブジェクトは、以前の所有者に返却されます。 + +*警告* + +これにより、グループに譲渡された「再販・譲渡不可」のオブジェクトは削除されます! +オブジェクト:[N] + confirm + + + リストされた全てのオブジェクトを所有者の持ち物に戻しますか? +これによりすべてのスクリプト化されたオブジェクトがリージョンに戻ります! + confirm + + + このリージョン(地域)内のすべてのオブジェクトを無効にしようとしています。このまま操作を続行してもよろしいですか? + confirm + + + グループ <nolink>[NAME]</nolink>と共有されていない、この区画にあるオブジェクトを前のオーナーに返却しますか? +オブジェクト:[N] + confirm + + + スクリプトを無効にできません。 このリージョン(地域)全体が「ダメージ有効」に設定されています。 -武器を使用するにはスクリプトの実行を許可する必要があります。 - - 現在複数の面が選択されています。 +武器を使用するには、スクリプトの実行を許可する必要があります。 + fail + + 現在複数の面が選択されています。 このまま続けた場合、メディアの別々のインスタンスがオブジェクトの複数の面に設定されます。 -メディアを 1 つの面だけに取り付けるには、「面を選択」を選んでオブジェクトの希望する面をクリック、それから「追加」をクリックしてください。 - - - 着地点を設定するには、この区画の内側に -立ってください。 - 受信者の有効なメールアドレスを入力してください。 - あなたのメールアドレスを入力してください。 - - デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか? - - - スナップショットデータの処理エラー - スナップショットのエンコード化でエラーが出ました! - このアイテムをアップロードするには L$[COST] が必要です。 - インベントリに写真を保存するには L$[COST] が必要です。L$ を購入するか、代わりに写真をっコンピュータに保存できます。 - インベントリにテクスチャを保存するには L$[COST] が必要です。L$ を購入するか、代わりに写真をコンピュータに保存できます。 - 次の理由で、スナップショットの送信時に問題が起こりました: [REASON] - 次の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました。 [REASON] - [SECOND_LIFE] へのログインを続けるには、Second Life の利用規約、プライバシーポリシー、およびサービス規約に同意する必要があります。 - アウトフィットを装着できません。 -アウトフィットフォルダに衣類、身体部位、アタッチメントがありません。 - ごみ箱にある衣類や身体部位の着用はできません。 - オブジェクトを付けられませんでした。 -最大数の [MAX_ATTACHMENTS] 個を越えています。 どれか取り外してからお試しください。 - まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。 - ログインするためにパスワードを入力してください - - 注意:記入漏れの箇所があります。 +メディアを1つの面だけに取り付けるには、「面を選択」を選んでオブジェクトの希望する面をクリック、それから「追加」をクリックしてください。 + confirm + + + 着地点を設定するには、この区画の内側に立ってください。 + fail + + 受信者の有効なメールアドレスを入力してください。 + fail + + あなたのメールアドレスを入力してください。 + fail + + デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか? + confirm + + + スナップショットデータの処理エラー + fail + + スナップショットのエンコードエラー + fail + + このアイテムをアップロードするには、L$ [COST]が必要です。 + fail + + インベントリに写真を保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 + fail + + インベントリにテクスチャを保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 + fail + + 以下の理由でスナップショットの送信時に問題が起こりました:[REASON] + fail + + 以下の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました:[REASON] + fail + + [SECOND_LIFE]へのログインを続けるには、Second Lifeの利用規約、プライバシーポリシー、およびサービス規約に同意する必要があります。 + fail + + アウトフィットを装着できません。 +アウトフィットフォルダに服装、身体部位、装着物がありません。 + fail + + ごみ箱にある服装や身体部位は、着用できません。 + fail + + オブジェクトを装着できませんでした。 +最大装着数[MAX_ATTACHMENTS]個を越えています。どれか取り外してからお試しください。 + fail + + まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。 + fail + + ログインするためにパスワードを入力してください。 + fail + + おっと、記入漏れがあります。 アバターのユーザー名を入力してください。 -[SECOND_LIFE] に入るにはアカウントが必要です。今すぐアカウントを作成しますか? - [create_account_url] - - - ユーザー名のフィールドにアバターのユーザー名もしくは氏名を入力してから、再度ログインする必要があります。 - '[GRID]' は有効なグリッド ID ではありません。 - ログイン位置で有効なグリッドが指定されませんでした。 - - クラシファイド広告 [NAME] を削除しますか? +[SECOND_LIFE]に入るにはアカウントが必要です。今すぐアカウントを作成しますか? + confirm + [create_account_url] + + + ユーザー名のフィールドにアバターのユーザー名もしくは氏名を入力してから、再度ログインする必要があります。 + fail + + 「[GRID]」は、有効なグリッドIDではありません。 + fail + + ログイン位置で有効なグリッドが指定されませんでした。 + fail + + クラシファイド広告『[NAME]』を削除してもよろしいですか? 支払い済みの料金は返金されません。 - - - - この面にあるメディアを削除する選択をしました。 -続けますか? - - - - クラシファイド広告 [NAME] への変更を保存しますか? - - - - クラシファイド広告を出すには、資金が足りません。 - - - - <nolink>[PICK]</nolink> を削除しますか? - - - - 選択したアウトフィットを削除しますか? - - - - [SECOND_LIFE] イベント Web ページに移動しますか? - http://secondlife.com/events/?lang=ja-JP - - - 表示する提案を選択してください。 - 表示する履歴アイテムを選択してください。 - [APP_NAME] を再起動後にキャッシュがクリアされます。 - [APP_NAME] を再起動後にキャッシュが移動されます。 -ご注意: キャッシュがクリアされます。 - ポートの設定は [APP_NAME] を再起動後に反映されます。 - デバッグ設定の変更は [APP_NAME] を再起動後に反映されます。 - 新しいスキンは [APP_NAME] を再起動後に表示されます。 - 言語の変更は [APP_NAME] を再起動後に反映されます。 - - [SECOND_LIFE]の Web ページに移動し、入札あるいはオークションの詳細を確認しますか? - http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID] - - - - 変更を保存しますか? - - - - ノートカードを削除しますか? - - - - 以前のスクリーンショットをレポートに使用しますか? - - - ジェスチャーの保存に失敗しました。 + confirm + + + この顔に紐づけられたメディアの削除を選択しました。 +続行してもよろしいですか? + confirm + + + クラシファイド広告[NAME]への変更を保存しますか? + confirm + + + クラシファイド広告を出すには、資金が足りません。 + fail + + + + クラシファイド広告<nolink>[CLASSIFIED]</nolink>を削除してもよろしいですか? + confirm + + + ピック<nolink>[PICK]</nolink>を削除してもよろしいですか? + confirm + + + 未公開のクラシファイド広告があります。 +ウィンドウを閉じると変更が失われます。 + confirm + + + 保存されていない変更があります。 + confirm + save + + + 「<nolink>[PICK]</nolink>」を削除してもよろしいですか? + + + このアウトフィットを削除してもよろしいですか? + confirm + + + [SECOND_LIFE]イベントWebページに移動しますか? + https://secondlife.com/my/community/events/?lang=ja-JP + confirm + + + 表示する提案を選択してください。 + fail + + 表示する履歴アイテムを選択してください。 + fail + + + + + キャッシュは、[APP_NAME]再起動後にクリアされます。 + キャッシュは、[APP_NAME]再起動後が移動されます。 +注意:キャッシュがクリアされます。 + ポートの設定は、[APP_NAME]再起動後に反映されます。 + デバッグ設定の変更は、[APP_NAME]再起動後に反映されます。 + 新しいスキンは、[APP_NAME]再起動後に表示されます。 + 言語の変更は、[APP_NAME]再起動後に反映されます。 + [SECOND_LIFE]のWebページに移動し、入札あるいはオークションの詳細を確認しますか? + confirm + http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID] + + + 変更を保存しますか? + confirm + + + このノートカードを削除してもよろしいですか? + + confirm + + + 以前のスクリーンショットをレポートに使用しますか? + + + ジェスチャーの保存に失敗しました。 ステップが多すぎます。 -ステップをいくつか削除してから再保存してください - ジェスチャーの保存に失敗しました。少し待ってからもう一度試してください。 - ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 -オブジェクトが範囲内に存在しないか、または削除された可能性があります。 - 次の理由で、ジェスチャーの保存時に問題が起こりました。 [REASON]。 後でもう一度試してください。 - ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 -オブジェクトが範囲内に存在しないか、または削除された可能性があります。 - 次の理由で、ノートカードの保存時に問題が起こりました。 [REASON]。 後でもう一度試してください。 - - あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。 +ステップをいくつか削除してから再保存してください + fail + + ジェスチャーの保存に失敗しました。 +少し待ってからもう一度試してください。 + fail + + ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 +オブジェクトが範囲内に存在しないか、削除された可能性があります。 + fail + + 以下の理由で、ジェスチャーの保存時に問題が起こりました:[REASON] +お手数ですが、後でもう一度試してください。 + fail + + ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 +オブジェクトが範囲内に存在しないか、削除された可能性があります。 + fail + + 以下の理由で、ノートカードの保存時に問題が起こりました:[REASON] +お手数ですが、後でもう一度試してください。 + fail + + あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。 サーバーの最新保存バージョンをロードしますか? (**警告**:この操作後元に戻すことはできません) - - - スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。 -オブジェクトは範囲外か、または削除されているかもしれません。 - - ログイン位置が指定されていません。 + confirm + + + スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。 +オブジェクトは範囲外か、または削除されているかもしれません。 + fail + + ログイン位置が指定されていません。 ログイン位置の欄にリージョン名を入力するか、「最後にログアウトした場所」か「自宅(ホーム)」を選択してください。 - - - スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 -オブジェクトが範囲内に存在しないか、または削除された可能性があります。 - ファイルをダウンロードできません。 - - [SECOND_LIFE] でサポートされていないファイルのダウンロードを要求しました。 - - - ファイル [[FILE]] を書き込めません。 - - お使いのコンピューターは [APP_NAME] の必要最低限の動作環境を満たしていません。 パフォーマンスの低下を感じるかもしれません。 恐れ入りますが [SUPPORT_SITE] ではサポート対象外のシステムに関する技術的サポートは行っておりません。 - -[_URL] に移動して確認をしますか? - http://secondlife.com/support/sysreqs.php?lang=ja - - - ビューワ実行ファイルを直接実行しないでください。代わりに、既存のショートカットの内のどれかをアップデートし、SL_Launcher を実行してください。 - - グラフィックスチップに最新のドライバがある可能性があります。グラフィックドライバを更新することにより、大幅にパフォーマンスが向上します。 - - ドライバの更新を確認するために [URL] にアクセスしますか? - [URL] - - - - お使いのシステムには、[APP_NAME] が認識できないグラフィックカードが搭載されています。 -[APP_NAME] でまだテストされていない最新ハードウェアのためだと考えられます。 問題ないとは思いますが、グラフィックの設定を調整する必要があるかもしれません。 -(ミー > 環境設定 > グラフィック) -
- - -
- グラフィックドライバを初期化中に [APP_NAME] がクラッシュしました。 -ドライバの一般的なエラーを防ぐために、画質が低に設定されます。 そのため、一部のグラフィック特性に制限が出ます。 + fail + + + スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 +オブジェクトが範囲内に存在しないか、または削除された可能性があります。 + fail + + ファイルをダウンロードできません。 + fail + + ダウンロードをリクエストしたファイルは、[SECOND_LIFE]でサポートされていません。 + + confirm + + + ファイル[[FILE]]に書き込むことができませんでした。 + fail + + お使いのコンピュータは、[APP_NAME]の最小システム要件を満たしていません。 +このためパフォーマンスが低下する場合があります。恐れ入りますが[SUPPORT_SITE]は、サポートされていないシステム構成に対する技術的サポートを提供できません。 + +詳細について、[_URL]を確認しますか? + http://secondlife.com/support/sysreqs.php?lang=ja + fail + + + グラフィックスチップに最新のドライバがある可能性があります。グラフィックドライバを更新することにより、大幅にパフォーマンスが向上します。 +ドライバの更新を確認するために[URL]にアクセスしますか? + [URL] + confirm + fail + + + お使いのシステムには、[APP_NAME]が認識できないグラフィックカードが搭載されています。[APP_NAME]でまだテストされていない最新ハードウェアのためだと考えられます。 +問題ないとは思いますが、グラフィックの設定を調整する必要があるかもしれません。 +(「私」>「初期設定」>「グラフィック」) + fail +
+ + +
+ グラフィックドライバを初期化中に[APP_NAME]がクラッシュしました。 +ドライバの一般的なエラーを防ぐために、画質が低に設定されます。このため、一部のグラフィック特性に制限が出ます。 お使いのグラフィックカードのドライバをアップデートするようおすすめします。 -画質は、環境設定 > グラフィック で設定できます。 - [REGION] では、地形の変更ができません。 - あなたには [PARCEL] 区画を地形編集する許可がありません。 - - あなたには次アイテムをコピーする権限がありません: -<nolink>[ITEMS]</nolink> -他の住人に譲ると、そのアイテムはあなたの持ち物から削除されます。本当にこれらのアイテムを譲りますか? - - - インベントリのアイテムを渡せません。 - 取引がキャンセルされました。 - 一度に 42 個以上のアイテムは渡せません。 - 選択したアイテムを渡す権限がありません。 - - あなたは選択した [COUNT] 個のアイテムののコピーを許されていません。 +画質は、「初期設定」>「グラフィック」で設定できます。 + fail + + この設定を変更すると、「自動調整」の設定が無効になります。 +続けてもよろしいですか? + confirm + + + 高度な照明をオンにするには、品質をレベル4以上にする必要があります。 + confirm + + + 影を有効にするには、品質をレベルを4以上にする必要があります。 + confirm + + + [REGION]では、地形の変更ができません。 + fail + + [PARCEL]区画の地形を編集する権限がありません。 + fail + + 以下のアイテムをコピーする権限がありません: +<nolink>[ITEMS]</nolink> +他の人に譲ると、そのアイテムはあなたの持ち物から削除されます。本当にこれらのアイテムを譲ってもよろしいですか? + confirm + fail + + + インベントリのアイテムを渡すことができません。 + fail + + 取引がキャンセルされました。 + fail + + 一度に42個以上のアイテムを渡すことはできません。 + fail + + 選択したアイテムを渡す権限がありません。 + fail + + あなたは選択した[COUNT]個のアイテムをコピーする権限がありません。 これらのアイテムはあなたのインベントリから失われます。 -本当にアイテムを渡したいですか? - - - 選択したフォルダを渡す権限がありません - - このアバターをフリーズしますか? +本当にアイテムを渡してもよろしいですか? + confirm + fail + + + 選択したフォルダを渡す権限がありません。 + fail + + このアバターをフリーズしますか? アバターは一時的に動けなくなり、チャットを含めインワールドで何もできなくなります。 - - - - [AVATAR_NAME]をフリーズしますか? -フリーズされた人は一時的に動けなくなり、チャットなど、この世界に対する関わりを持つことができなくなります。 - - - - あなたの土地から [AVATAR_NAME] を追放しますか? - - - - このアバターをあなたの土地から追放しますか? - - - - [AVATAR_NAME] をあなたの土地から追放しますか? - - - <nolink>[GROUP_NAME]</nolink> から [AVATAR_NAME] を追放しました - 取得エラー:選択したオブジェクトの数が多すぎます。 - 取得エラー: -オブジェクトが複数のリージョン(地域)にまたがって存在しています。 -すべて同じリージョン内に移動させてから取得してください。 - - [EXTRA] - -[_URL] に移動してリンデンドル購入に関する情報を確認しますか? - http://secondlife.com/app/currency/?lang=ja-JP - - - [MUTE_LIMIT] エントリの制限に達したため、ブロックリストに新しいエントリを追加できません。 - [COUNT] 個のオブジェクトをリンクできません。 -リンクできるのは最大 [MAX] 個です。 - セットで揃っているオブジェクトのみリンクできます。 -複数のオブジェクトを選択してください。 - すべてのオブジェクトの修正許可がないためリンクできません。 - -どのオブジェクトもロックされておらず、あなたのものであることを確認してください。 - 地域(リージョン)の境界を越えてオブジェクトをリンクできません。 - 地域(リージョン)の境界を越えてオブジェクトをリンクできません。 - 所有者が異なるため、オブジェクトをリンクできません。 - -自分が所有しているオブジェクトだけを選択してください。 - 「 [FILE] 」の拡張子が無効です。 + confirm + + + [AVATAR_NAME]をフリーズしますか? +フリーズされた人は一時的に動けなくなり、チャットなど、ワールドに対する関わりを持つことができなくなります。 + confirm + + + あなたの土地から[AVATAR_NAME]を追放しますか? + confirm + + + このアバターをあなたの土地から追放しますか? + confirm + + + [AVATAR_NAME]をあなたの土地から追放しますか? + confirm + + + <nolink>[GROUP_NAME]</nolink>から[AVATAR_NAME]を追放しました。 + group + + 取得エラー:選択したオブジェクトの数が多すぎます。 + fail + + 取得エラー:オブジェクトが複数のリージョン(地域)にまたがって存在しています。 +すべて同じリージョン内に移動させてから取得してください。 + fail + + [EXTRA] + +[_URL]に移動してリンデンドル購入に関する情報を確認しますか? + https://secondlife.com/my/lindex/?lang=ja-JP + + + [MUTE_LIMIT]エントリの制限に達したため、ブロックリストに新しいエントリを追加できません。 + fail + + [COUNT]個のオブジェクトをリンクできませんでした。 +リンクできるオブジェクトは最大[MAX]個です。 + fail + + セットが揃っているオブジェクトのみリンクできます。複数のオブジェクトを選択してください。 + fail + + すべてのオブジェクトの修正許可がないためリンクできません。 + +どのオブジェクトもロックされておらず、あなたのものであることを確認してください。 + fail + + リージョン(地域)の境界を越えてオブジェクトをリンクできません。 + fail + + リージョン(地域)の境界を越えてオブジェクトをリンクできません。 + fail + + 所有者が異なるため、オブジェクトをリンクできません。 +自分が所有しているオブジェクトだけを選択してください。 + fail + + ファイル「[FILE]」は、無効な拡張子です。 このファイルの拡張子が正しいかどうかを確認してください。 - - [EXTENSION] は無効です。 -正しい拡張子:[VALIDS] - - - 読み込みのためにアップロードされたサウンドファイルを開けません: -[FILE] - RIFF WAVE ファイルとして認識されません: -[FILE] - PCM WAVE オーディオファイルとして認識されません: -[FILE] - ファイルのチャンネル数が無効です(モノラルまたはステレオを使用する必要があります): -[FILE] - ファイルのサンプルレートがサポートされていません(44.1k である必要があります): -[FILE] - ファイルのワードサイズがサポートされていません(8 または 16 ビットである必要があります): -[FILE] - WAV ヘッダーにデータチャンクが見つかりません: -[FILE] - WAV ファイルのチャンクサイズが間違っています: -[FILE] - オーディオファイルが長すぎます。(最大 10 秒): -[FILE] - 「 [FILE] 」に問題があります。 - -[ERROR] - 書き込み用の一時圧縮サウンドファイルを開くことができません:[FILE] - 不明の Vorbis のエンコードに失敗: [FILE] - 次のファイルのエンコードができません: [FILE] - - ユーザー名とパスワードを自動入力できません。これはネットワーク設定が変更された場合に起こります - - - 破損したリソースファイル: [FILE] - 不明のリンデンリソースファイルのバージョン: [FILE] - 出力ファイルを作成できません: [FILE] - 現在 [APP_NAME] では、BVH 形式のアニメーションファイルの一括アップロードはサポートされていません。 - 次の理由で、「 [FILE] 」をアップロードできません: [REASON] -あとでもう一度試してください。 - 「 [LANDMARK_NAME] 」を「 [FOLDER_NAME] 」フォルダに追加しました。 - - 現在地のランドマークを既に持っています。 - - - 土地の所有者が許可していないため、ランドマークを作成することはできません。 - 「リコンパイル」できません。 -スクリプトのオブジェクトを選択してください。 - 「リコンパイル」できません。 - -修正修正権限のあるスクリプトのオブジェクトを選択してください。 - 「再設定」ができません。 - -スクリプトのオブジェクトを選択してください。 - 「再設定」ができません。 - -修正権限のあるスクリプトのオブジェクトを選択してください。 - 修正権限のないオブジェクトのスクリプトは開くことはできません。 - スクリプトの「実行」ができません。 - -スクリプトのオブジェクトを選択してください。 - スクリプトを「実行しない」設定にできません。 - -スクリプトのオブジェクトを選択してください。 - 保存する frontmost フロータがありません。 - 指定した検索クエリは変更され、短すぎる語句は取り除かれています。 - -検索語句: [FINALQUERY] - 指定した検索語句が短すぎたため、検索は行われませんでした。 - テレポートに失敗しました。 -[REASON] - テレポート処理中に問題が発生しました。 ログインし直す必要があるかもしれません。 -このメッセージが何度も出る場合は、[SUPPORT_SITE] をご確認ください。 - リージョン間の移動中に問題が発生しました。 ログインし直す必要があるかもしれません。 -このメッセージが何度も出る場合は、[SUPPORT_SITE] をご確認ください。 - 申し訳ございません。テレポートは現在、ブロックされています。しばらくしてから再度お試しください。 -それでもテレポートできない場合は、ログアウトし、ログインし直して問題を解決してください。 - 申し訳ございません。ランドマークの目的地が見つかりませんでした。 - 申し訳ございません。システムによるテレポート接続が完了できませんでした。 -しばらくしてから再度お試しください。 - 残念ながら、目的地へアクセスが許可されていないため、テレポートできません。 - 添付物がまだ届いていません。テレポートをする前にあと数秒間お待ちいただくか、いったんログアウトし、再度ログインしてください。 - このリージョンのアセットキューが現在混み合っているため、テレポートのリクエストをすぐに処理することが難しい状況です。 -数分後にやり直すか、混雑していない他のリージョンでお試しください。 - 申し訳ございません。システムはテレポートのリクエストを時間どおりに完了できませんでした。数分後にやり直してください。 - 申し訳ございません。システムはリージョン間の移動を時間どおりに完了できませんでした。 -数分後にやり直してください。 - テレポート目的地を見つけられません。目的地が一時的に利用できない状態か、すでに消滅している可能性があります。数分後にやり直してください。 - インベントリシステムは現在利用できません。 - 土地所有者設定ができません: -区画が選定されていません。 - 複数のリージョンが選択されたため、土地の所有権を取得できません。 -選択する面積を小さくして、もう一度お試しください。 - - この区画はオークションに出されています。 所有権を変更するとオークションはキャンセルとなり、既にオークションに参加している住人がいればその人に迷惑をかけてしまいます。 + 「[EXTENSION]」は、無効な拡張子です。 +有効な拡張子:[VALIDS] + fail + + + 読み込みのためにアップロードされたサウンドファイルを開けません: +[FILE] + fail + + RIFF WAVEファイルとして認識されません: +[FILE] + fail + + PCM WAVEオーディオファイルとして認識されません: +[FILE] + fail + + このファイルのチャンネル数は無効です(モノラルか、ステレオである必要があります): +[FILE] + fail + + このファイルのサンプリングレートはサポートされていません(44.1kである必要があります): +[FILE] + fail + + このファイルのビットサイズはサポートされていません(8bitか、16bitである必要があります): +[FILE] + fail + + WAVヘッダーにデータチャンクが見つかりません: +[FILE] + fail + + WAVファイルのチャンクサイズが間違っています: +[FILE] + fail + + オーディオファイルが長すぎます。(最大10秒): +[FILE] + fail + + 「[FILE]」に問題があります。 + +[ERROR] + fail + + 書き込み用の一時圧縮サウンドファイルを開くことができません: +[FILE] + fail + + 不明なVorbisのエンコードに失敗しました: +[FILE] + fail + + 次のファイルのエンコードができません: +[FILE] + fail + + ユーザー名とパスワードを自動入力できません。これはネットワーク設定が変更された場合に起こります + fail + + + 破損したリソースファイル: +[FILE] + fail + + 不明なLindenリソースファイルのバージョンです: +[FILE] + fail + + 出力ファイルを作成できません: +[FILE] + fail + + 現在[APP_NAME]では、BVH形式のアニメーションファイルの一括アップロードはサポートされていません。 + fail + + 以下の理由で「[FILE]」をアップロードできませんでした: +[REASON] + +お手数ですがもう一度やり直してください。 + fail + + 「[LANDMARK_NAME]」を「[FOLDER_NAME]」フォルダに追加しました。 + この場所のランドマークは、既に持っています。 + fail + + + + +フォルダ名を入力してください: + confirm +
+ + +
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml index df9ef40113..098128bb6d 100644 --- a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml @@ -1,11 +1,12 @@ - - - - - - - + + + + 名前タグ: + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml new file mode 100644 index 0000000000..21dabb133c --- /dev/null +++ b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml @@ -0,0 +1,66 @@ + + + + + + 0 + [https://community.secondlife.com/t5/Featured-News/Why-are-all-these-people-made-of-colored-jelly/ba-p/3031255 これはなんですか?] + + + +
- + diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml index 3f43469c6f..8311f0859f 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml @@ -34,7 +34,7 @@ - +
\ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml index f64a6dc55c..76b484a816 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_list.xml @@ -5,7 +5,7 @@ - + diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index cc5bed8331..5227c0d583 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -326,7 +326,7 @@ - + diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 66ac069be4..13f94172b6 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -3303,7 +3303,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ fail - [TO_NAME]にテレポートを送りました。 + [TO_NAME]にテレポートのオファーを送りました。 [NAME_SLURL] は、テレポートであなたを呼んでいます。 [MESSAGE] @@ -3329,7 +3329,7 @@ Webページにリンクすると、他人がこの場所に簡単にアクセ [MESSAGE] -(デフォルト設定だとお互いのオンライン状態を見ることができます) +(デフォルトの設定では、お互いのオンライン状態を知ることができます。) friendship confirm @@ -3984,10 +3984,10 @@ UDP:3478, 3479, 5060, 5062, 6250, 12000-32000 - ⒈クリックで移動 -行地面の一箇所をクリックすると、その場所まで歩きます。 + 1,クリックで移動 +地面をクリックすると、その場所まで歩きます。 -⒉クリック・ドラッグで視界を回転 +2,クリック・ドラッグで視界を回転 任意の場所をクリックしてドラッグすると視界を回転させることができます。 custom_skin diff --git a/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml index 21dabb133c..f5f1bc1b03 100644 --- a/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml +++ b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml @@ -38,10 +38,10 @@ - - 水の効果を簡素化するかオフにすると、フレームレートが大幅に向上します。 + 水面 + 水面の効果を簡素化するかオフにすると、フレームレートが大幅に向上します。 - 水の反射: + 水面の反射: @@ -56,11 +56,11 @@ 詳細度を最大にすると撮影に適した画像になりますが、フレームレートが下がります。 (0.0~4.0の値を入れてください) - 1 - 2 - 3 - 4 - 5 - 6 - 7 + 1 + 2 + 3 + 4 + 5 + 6 + 7 \ No newline at end of file diff --git a/indra/newview/skins/default/xui/ja/panel_region_environment.xml b/indra/newview/skins/default/xui/ja/panel_region_environment.xml index a11ebb1fb3..092ea431b9 100644 --- a/indra/newview/skins/default/xui/ja/panel_region_environment.xml +++ b/indra/newview/skins/default/xui/ja/panel_region_environment.xml @@ -2,12 +2,12 @@ 既定の設定を使用 リージョン(地域)の設定を使用 - 空 [INDEX]([ALTITUDE]m) - 区画が選択されていません。環境設定が無効になっています。 - リージョン(地域)の境界では環境設定ができません。 - このリージョン(地域)で環境設定はできません。 - 不動産マネージャーが、このリージョン(地域)で区画の環境を変更することを許可していません。 - 環境をサポートするには、最低でも128㎡の区画が必要です。 + 空 [INDEX]([ALTITUDE]m) + 区画が選択されていません。環境の設定は無効になっています。 + リージョン(地域)の境界では環境の設定ができません。 + このリージョン(地域)で環境の設定ができません。 + このリージョン(地域)の不動産マネージャーは、区画ごとの環境の変更を許可していません。 + 環境を変更するには、最低でも128㎡の区画が必要です。 (空) (リージョンの環境) @@ -22,7 +22,7 @@ +
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml index 6dd6b486a7..284449d59d 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml @@ -1,36 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml index aae708e257..d2e46447a0 100644 --- a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml index 8c697317a5..f032327dd9 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml @@ -1,14 +1,14 @@ - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml index 237d66c54d..a7989b35c8 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml @@ -1,38 +1,29 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml index 0205564756..3c824840a5 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml index 65f7fae6bd..15021859bb 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_rendering_settings_add.xml @@ -1,6 +1,5 @@ - - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml index 80ed3b19c8..f0100f6f08 100644 --- a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml @@ -1,37 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml index 3e4ab1f856..154db254da 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml index 8af5189f87..eb5faa2545 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml index 47d4f76e48..f94e5d393c 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml index f6ce0e6c6c..c60b27111e 100644 --- a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml index ff6884f24d..047f5d57cf 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml @@ -1,34 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 7e43b8b61f..78c46d13b4 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml index c239eb9543..bcda112d2f 100644 --- a/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml index 819b05f854..b58b08ebb2 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_color.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml index ac211997bf..6105fd5296 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_features.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml index 80d7eeff31..0f069dfffa 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_light.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml index ed1491298f..b2d3672019 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_object.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml index 92e0ec74ba..3589d7bd4c 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_pos.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml index 9504f39ef1..7a77a74b67 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_rot.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml index 1ee1d6a914..3b813ba97f 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_size.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml b/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml index a596fbe103..0947a66b9a 100644 --- a/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml +++ b/indra/newview/skins/default/xui/ja/menu_copy_paste_texture.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_edit.xml b/indra/newview/skins/default/xui/ja/menu_edit.xml index 0152675de7..121b3d699b 100644 --- a/indra/newview/skins/default/xui/ja/menu_edit.xml +++ b/indra/newview/skins/default/xui/ja/menu_edit.xml @@ -1,12 +1,12 @@ - - - - - - - - - - \ No newline at end of file + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml index 94361555fe..58347b55fb 100644 --- a/indra/newview/skins/default/xui/ja/menu_favorites.xml +++ b/indra/newview/skins/default/xui/ja/menu_favorites.xml @@ -1,14 +1,14 @@ - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml index 2527e373f4..5540c9a234 100644 --- a/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_gallery_outfit_tab.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml index 333db46380..e1f24cdb39 100644 --- a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml @@ -1,11 +1,11 @@ - - - - - - - - - \ No newline at end of file + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml index 52cc5e69e1..db403ac938 100644 --- a/indra/newview/skins/default/xui/ja/menu_group_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_group_plus.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml index 3a9fb3570a..d9d6e51867 100644 --- a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml +++ b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + +
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 8899b69f1a..b3d3917965 100644 --- a/indra/newview/skins/default/xui/ja/menu_im_conversation.xml +++ b/indra/newview/skins/default/xui/ja/menu_im_conversation.xml @@ -1,16 +1,16 @@ - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml index 5ef2a4152a..73e4164407 100644 --- a/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml +++ b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml index 26b581b793..8cd6fa4a27 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml @@ -1,4 +1,4 @@ - - \ No newline at end of file + +
diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml index 7ae8765df4..e7f5cb310a 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml index 61a9bae73c..edcc0f751a 100644 --- a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml index ec5abea6b2..55b2e8b21b 100644 --- a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml @@ -1,19 +1,19 @@ - + - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml index d9642e3c0c..9a4a8138f5 100644 --- a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml +++ b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml @@ -1,4 +1,4 @@ - - \ No newline at end of file + + diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml index 03e02ff200..c7cba4845d 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml @@ -1,133 +1,129 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml index 8311f0859f..0de24d1c7a 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml @@ -1,40 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml index 7a8adcb9fb..975e1b147a 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml b/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml index f76be9631a..2395c9e7b3 100644 --- a/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml +++ b/indra/newview/skins/default/xui/ja/menu_inventory_search_visibility.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_land.xml b/indra/newview/skins/default/xui/ja/menu_land.xml index a65504b14c..bef249d203 100644 --- a/indra/newview/skins/default/xui/ja/menu_land.xml +++ b/indra/newview/skins/default/xui/ja/menu_land.xml @@ -1,13 +1,10 @@ - - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml index 06345c5074..c134422955 100644 --- a/indra/newview/skins/default/xui/ja/menu_landmark.xml +++ b/indra/newview/skins/default/xui/ja/menu_landmark.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml index 5ba2092648..f59b0b7e5e 100644 --- a/indra/newview/skins/default/xui/ja/menu_login.xml +++ b/indra/newview/skins/default/xui/ja/menu_login.xml @@ -1,39 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml b/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml index 6c6913db5d..ad02ada4b9 100644 --- a/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_marketplace_view.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml index 6f4f4938f4..3c566a87a4 100644 --- a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml @@ -1,8 +1,8 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml index 77a2e60cda..eee3fb7690 100644 --- a/indra/newview/skins/default/xui/ja/menu_mini_map.xml +++ b/indra/newview/skins/default/xui/ja/menu_mini_map.xml @@ -1,11 +1,11 @@ - - - - - - - - - \ No newline at end of file + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml index f35e74afc5..9472255128 100644 --- a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml +++ b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml @@ -1,8 +1,8 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_mute_particle.xml b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml index 38b736ae9b..8befe0cf57 100644 --- a/indra/newview/skins/default/xui/ja/menu_mute_particle.xml +++ b/indra/newview/skins/default/xui/ja/menu_mute_particle.xml @@ -1,5 +1,4 @@ - - - \ No newline at end of file + + diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml index f3e274313e..9954c17ddc 100644 --- a/indra/newview/skins/default/xui/ja/menu_navbar.xml +++ b/indra/newview/skins/default/xui/ja/menu_navbar.xml @@ -1,11 +1,11 @@ - - - - - - - - - \ No newline at end of file + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml index 42a6c66168..1665efe46a 100644 --- a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml +++ b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml @@ -1,12 +1,12 @@ - - - - - - - - - - \ No newline at end of file + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml index 3852efcdd4..913bae8958 100644 --- a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml +++ b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml @@ -1,4 +1,4 @@ - - \ No newline at end of file + + diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml index f7e64e015a..14db32081b 100644 --- a/indra/newview/skins/default/xui/ja/menu_object.xml +++ b/indra/newview/skins/default/xui/ja/menu_object.xml @@ -1,36 +1,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_object_icon.xml b/indra/newview/skins/default/xui/ja/menu_object_icon.xml index 163c8d1779..e7cd4b40b8 100644 --- a/indra/newview/skins/default/xui/ja/menu_object_icon.xml +++ b/indra/newview/skins/default/xui/ja/menu_object_icon.xml @@ -1,9 +1,9 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml index 962d25bb07..b869e67923 100644 --- a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml @@ -1,42 +1,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml index 66ebb79bb9..cc04ac6dcf 100644 --- a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml @@ -1,9 +1,9 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml index 76b484a816..ebce5f7e6b 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_list.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_list.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_participant_view.xml b/indra/newview/skins/default/xui/ja/menu_participant_view.xml index ef61874763..be9fffae04 100644 --- a/indra/newview/skins/default/xui/ja/menu_participant_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_participant_view.xml @@ -1,16 +1,16 @@ - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml index 8d80ddebad..ac1757cc48 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml @@ -1,10 +1,10 @@ - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml index 1d89e15f64..a87c55038f 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml index db586365b2..80d9d43005 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml index fee506c511..e761c506bf 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml @@ -1,9 +1,9 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups.xml b/indra/newview/skins/default/xui/ja/menu_people_groups.xml index 91044bd283..2c0c85ba28 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_groups.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_groups.xml @@ -1,8 +1,8 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml index 07144be420..4a9e402fa4 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml @@ -1,4 +1,4 @@ - - \ No newline at end of file + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml index f59ebfa154..bbe842a37e 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml @@ -1,18 +1,18 @@ - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml index 5c73eb5a4f..4e3dbd3279 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml @@ -1,10 +1,10 @@ - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml index 7b56f1daf8..68e5ec88bf 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml @@ -1,10 +1,10 @@ - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml index da27372963..84b24726f4 100644 --- a/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml +++ b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml index 4a5a42ad05..ef4d9bc369 100644 --- a/indra/newview/skins/default/xui/ja/menu_picks.xml +++ b/indra/newview/skins/default/xui/ja/menu_picks.xml @@ -1,10 +1,10 @@ - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml index 62eb8327bc..84bf90fea0 100644 --- a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml index f45f9211ed..fc1ec43c6c 100644 --- a/indra/newview/skins/default/xui/ja/menu_place.xml +++ b/indra/newview/skins/default/xui/ja/menu_place.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml index d6a13b92ba..575b61ffa5 100644 --- a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml +++ b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml index c9fa92b6a2..9b1bd4f18b 100644 --- a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml index 16508dde4a..594a2016b1 100644 --- a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml @@ -1,22 +1,22 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml index 197b61af30..70dd50c25d 100644 --- a/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml +++ b/indra/newview/skins/default/xui/ja/menu_places_gear_sorting.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + 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 0ff41f91a2..0247a60803 100644 --- a/indra/newview/skins/default/xui/ja/menu_profile_other.xml +++ b/indra/newview/skins/default/xui/ja/menu_profile_other.xml @@ -1,23 +1,23 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml index 67c481cdd6..24304689ce 100644 --- a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml +++ b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml @@ -1,12 +1,12 @@ - - - - - - - - - - \ No newline at end of file + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_profile_self.xml b/indra/newview/skins/default/xui/ja/menu_profile_self.xml index ec10d92629..7c9570378e 100644 --- a/indra/newview/skins/default/xui/ja/menu_profile_self.xml +++ b/indra/newview/skins/default/xui/ja/menu_profile_self.xml @@ -1,12 +1,12 @@ - - - - - - - - - - \ No newline at end of file + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml index 6d8f2381d9..0533c8677b 100644 --- a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml +++ b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_save_settings.xml b/indra/newview/skins/default/xui/ja/menu_save_settings.xml index a8bb95a661..0e8e25955f 100644 --- a/indra/newview/skins/default/xui/ja/menu_save_settings.xml +++ b/indra/newview/skins/default/xui/ja/menu_save_settings.xml @@ -1,9 +1,9 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml index c4bc424927..a89dd0bcbe 100644 --- a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml +++ b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml @@ -1,4 +1,4 @@ - - \ No newline at end of file + + diff --git a/indra/newview/skins/default/xui/ja/menu_settings_add.xml b/indra/newview/skins/default/xui/ja/menu_settings_add.xml index 9e64476446..814ad9c1a6 100644 --- a/indra/newview/skins/default/xui/ja/menu_settings_add.xml +++ b/indra/newview/skins/default/xui/ja/menu_settings_add.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_settings_gear.xml b/indra/newview/skins/default/xui/ja/menu_settings_gear.xml index a44786b414..a8ff0d3721 100644 --- a/indra/newview/skins/default/xui/ja/menu_settings_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_settings_gear.xml @@ -1,10 +1,10 @@ - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml index 3d5ea3f616..820cc3cd53 100644 --- a/indra/newview/skins/default/xui/ja/menu_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_slurl.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml index fd4dffeefa..e5e5b7b1ba 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml index dc34bc6463..c26b70e9e1 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml index 391be973f8..4dd44d2ec8 100644 --- a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_text_editor.xml b/indra/newview/skins/default/xui/ja/menu_text_editor.xml index 48fd8ad243..3a5892bafc 100644 --- a/indra/newview/skins/default/xui/ja/menu_text_editor.xml +++ b/indra/newview/skins/default/xui/ja/menu_text_editor.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_toolbars.xml b/indra/newview/skins/default/xui/ja/menu_toolbars.xml index 9bb4eaf496..a54f7bdef7 100644 --- a/indra/newview/skins/default/xui/ja/menu_toolbars.xml +++ b/indra/newview/skins/default/xui/ja/menu_toolbars.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml index ea1e12ab2b..326e6d232b 100644 --- a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml +++ b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml @@ -1,11 +1,9 @@ - - - - - - - - \ No newline at end of file + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml index dc9a6af8fe..9ce9a070f2 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml @@ -1,10 +1,10 @@ - - - - - - - - \ No newline at end of file + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_email.xml b/indra/newview/skins/default/xui/ja/menu_url_email.xml index 1ba8d6a64e..6c41d759fe 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_email.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_email.xml @@ -1,5 +1,5 @@ - - - \ No newline at end of file + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_experience.xml b/indra/newview/skins/default/xui/ja/menu_url_experience.xml index 83d7029527..09d4dce74d 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_experience.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_experience.xml @@ -1,4 +1,4 @@ - - \ No newline at end of file + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml index 9214d67dea..ebd7f25d6e 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_group.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_group.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml index ba5048094d..ae97e8bd8d 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_http.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_http.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml index 7a13030b64..1805fb03bb 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml @@ -1,7 +1,7 @@ - - - - - \ No newline at end of file + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_map.xml b/indra/newview/skins/default/xui/ja/menu_url_map.xml index 75813f9017..041b30d05b 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_map.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_map.xml @@ -1,8 +1,8 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml index ef76e5484f..06defa7aed 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml @@ -1,12 +1,12 @@ - - - - - - - - - - \ No newline at end of file + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml index 0c1eab8dad..93aa1372c5 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml @@ -1,8 +1,8 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml index 78f3997bf8..c80351bdae 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml @@ -1,6 +1,6 @@ - - - - \ No newline at end of file + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml index e0d4427008..100dbd0f99 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml @@ -1,9 +1,9 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml index e6941fb8bd..a2097ec1f9 100644 --- a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml +++ b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml @@ -1,8 +1,8 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index 5227c0d583..a1f3980df4 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -1,690 +1,573 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml index 7ea696d6ca..213a554bbd 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml @@ -1,15 +1,15 @@ - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml index 75fa3f69b3..54c30757ea 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml @@ -1,8 +1,8 @@ - - - - - - \ No newline at end of file + + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml index 7845ff9aad..7d305e4e34 100644 --- a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml +++ b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml @@ -1,9 +1,9 @@ - - - - - - - \ No newline at end of file + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/mime_types.xml b/indra/newview/skins/default/xui/ja/mime_types.xml index 23bab3b0b2..b25d4dd0cc 100644 --- a/indra/newview/skins/default/xui/ja/mime_types.xml +++ b/indra/newview/skins/default/xui/ja/mime_types.xml @@ -1,143 +1,251 @@ - (不明) - なし - - - この場所には、Webコンテンツが含まれています。 - Web コンテンツを表示する - - - - この場所には、ムービーがあります。 - ムービーを再生する - - - - この場所には、画像があります - この場所の画像を表示する - - - - この場所には、オーディオがあります。 - この場所のオーディオを再生する - - - - この場所には、メディアがありません。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + (不明) + + + なし + + + + + この場所には、Webコンテンツが含まれています。 + + + Web コンテンツを表示する + + + + + + この場所には、ムービーがあります。 + + + ムービーを再生する + + + + + + この場所には、画像があります + + + この場所の画像を表示する + + + + + + この場所には、オーディオがあります。 + + + この場所のオーディオを再生する + + + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/mime_types_linux.xml b/indra/newview/skins/default/xui/ja/mime_types_linux.xml index 61574b74f9..3bc18c65b0 100644 --- a/indra/newview/skins/default/xui/ja/mime_types_linux.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_linux.xml @@ -1,131 +1,231 @@ - (不明) - なし - - - この場所には、Webコンテンツが含まれています。 - Web コンテンツを表示する - - - - この場所には、ムービーがあります。 - ムービーを再生する - - - - この場所には、画像があります - この場所の画像を表示する - - - - この場所には、オーディオがあります。 - この場所のオーディオを再生する - - - - この場所には、メディアがありません。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + (不明) + + + なし + + + + + この場所には、Webコンテンツが含まれています。 + + + Web コンテンツを表示する + + + + + + この場所には、ムービーがあります。 + + + ムービーを再生する + + + + + + この場所には、画像があります + + + この場所の画像を表示する + + + + + + この場所には、オーディオがあります。 + + + この場所のオーディオを再生する + + + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/mime_types_mac.xml b/indra/newview/skins/default/xui/ja/mime_types_mac.xml index 0bfc9aeb99..a76394703b 100644 --- a/indra/newview/skins/default/xui/ja/mime_types_mac.xml +++ b/indra/newview/skins/default/xui/ja/mime_types_mac.xml @@ -1,134 +1,236 @@ - (不明) - なし - - - この場所には、Webコンテンツが含まれています。 - Web コンテンツを表示する - - - - この場所には、ムービーがあります。 - ムービーを再生する - - - - この場所には、画像があります - この場所の画像を表示する - - - - この場所には、オーディオがあります。 - この場所のオーディオを再生する - - - - この場所には、メディアがありません。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + (不明) + + + なし + + + + + この場所には、Webコンテンツが含まれています。 + + + Web コンテンツを表示する + + + + + + この場所には、ムービーがあります。 + + + ムービーを再生する + + + + + + この場所には、画像があります + + + この場所の画像を表示する + + + + + + この場所には、オーディオがあります。 + + + この場所のオーディオを再生する + + + + + + この場所には、メディアがありません。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 31c54b58e8..123e95df04 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -1,1639 +1,2188 @@ - 次回からこのメッセージを表示しない - - 次回からこのメッセージを表示しない -(現セッションで) - - 常にこのオプションを選択 - - 閉じる - - - - - - - - - - - - - - - - 現在使用中の[APP_NAME]のバージョンでは、受け取った通知メッセージを表示することができません。 + + 次回からこのメッセージを表示しない + + + 次回からこのメッセージを表示しない +(現セッションで) + + + 常にこのオプションを選択 + + + 閉じる + + + + + + + + + 現在使用中の[APP_NAME]のバージョンでは、受け取った通知メッセージを表示することができません。 最新のビューアーがインストールされている事をご確認ください。 エラー詳細:「 [_NAME] 」という通知メッセージは、notifications.xmlに定義されていませんでした。 - fail - - - - フローターエラー:以下のコントロールが見つかりませんでした: + + fail + + + + フローターエラー:以下のコントロールが見つかりませんでした: [CONTROLS] - fail - - - - 現在利用可能なチュートリアルはありません。 - fail - - - - [MESSAGE] - - [MESSAGE] - - - - [MESSAGE] - - - - [APP_NAME]のアップデート中にエラーが発生しました。[http://get.secondlife.com 最新バージョンのビューアーをダウンロード]してください。 - - - - [SECOND_LIFE_GRID]に接続できませんでした。 + + fail + + + + 現在利用可能なチュートリアルはありません。 + + fail + + + + + [MESSAGE] + + [MESSAGE] + + + [MESSAGE] + + + [APP_NAME]のアップデート中にエラーが発生しました。[http://get.secondlife.com 最新バージョンのビューアーをダウンロード]してください。 + + + [SECOND_LIFE_GRID]に接続できませんでした。 [DIAGNOSTIC] インターネット接続が正常かご確認ください。 - fail - - - - ビューアがサーバーから不正な形式の応答を受け取りました。インターネット接続が正常に機能していることを確認してから、後でもう一度お試しください。 + + fail + + + + ビューアがサーバーから不正な形式の応答を受け取りました。インターネット接続が正常に機能していることを確認してから、後でもう一度お試しください。 これが誤りだと思われる場合は、サポートにお問い合わせください。 - fail + + fail + + + + メッセージテンプレート[PATH]がありませんでした。 - - - メッセージテンプレート[PATH]がありませんでした。 - - fail - - - 現在の服装/身体部位の変更を保存しますか? - - - - これらのアイテムの1つ以上を販売用の送信トレイにコピーする権限がありません。移動したり残したままにすることはできます。 - - - - 販売ボックスの最上位に転送した各アイテムにつき、それぞれ1つの新しいフォルダが作成されました。 - - - - - 成功しました。 + + fail + + + 現在の服装/身体部位の変更を保存しますか? + + + これらのアイテムの1つ以上を販売用の送信トレイにコピーする権限がありません。移動したり残したままにすることはできます。 + + + 販売ボックスの最上位に転送した各アイテムにつき、それぞれ1つの新しいフォルダが作成されました。 + + + + 成功しました。 すべてのフォルダが、マーケットプレイスに正常に送信されました。 - - - - 一部のフォルダは送信できていません。 + + + 一部のフォルダは送信できていません。 一部のフォルダが、マーケットプレイスに送信されるときにエラーが発生しました。これらのフォルダは、販売者の送信トレイにまだ残っています。 詳細につきましては、[[MARKETPLACE_IMPORTS_URL] エラーログ]をご確認ください。 - - - 以下のエラーで転送できませんでした:[ERROR_CODE] + + + 以下のエラーで転送できませんでした:[ERROR_CODE] システムまたはネットワークのエラーのため、フォルダはマーケットプレイスに送信されませんでした。お手数ですが、後でもう一度やり直してください。 - - - - 以下のエラーでマーケットプレイスを初期化できませんでした:[ERROR_CODE] + + + 以下のエラーでマーケットプレイスを初期化できませんでした:[ERROR_CODE] システムまたはネットワークのエラーのため、マーケットプレイスの初期化に失敗しました。お手数ですが、後でもう一度やり直してください。 - - - - 在庫フォルダへのコピーまたは移動がエラーにより失敗しました:[ERROR_CODE] - - - マーケットプレイスのリストへのコピーまたは移動が以下のエラーにより失敗しました:[ERROR_CODE] - - - マーケットプレイスによる取引が以下のエラーにより失敗しました:[ERROR_REASON] + + + 在庫フォルダへのコピーまたは移動がエラーにより失敗しました:[ERROR_CODE] + + + マーケットプレイスのリストへのコピーまたは移動が以下のエラーにより失敗しました:[ERROR_CODE] + + + マーケットプレイスによる取引が以下のエラーにより失敗しました:[ERROR_REASON] [ERROR_DESCRIPTION] - - - この商品をリストに表示できないか、バージョンフォルダを有効にできません。通常、これはリスト説明フォームに情報が不足しているために起こりますが、フォルダ構造のエラーが原因の場合もあります。 + + + この商品をリストに表示できないか、バージョンフォルダを有効にできません。通常、これはリスト説明フォームに情報が不足しているために起こりますが、フォルダ構造のエラーが原因の場合もあります。 リストを編集するか、リストフォルダにエラーがないか確認してください。 - - - マーケットプレイスへのリスト表示が次のエラーで失敗しました: + + + マーケットプレイスへのリスト表示が次のエラーで失敗しました: '[ERROR_CODE]' - - - このバージョンフォルダの有効化が次のエラーにより失敗しました: + + + このバージョンフォルダの有効化が次のエラーにより失敗しました: '[ERROR_CODE]' - - - リストを作成するために、リストするコンテンツの階層を固定しました。 - confirm - - - この操作により、このリストの有効な内容が変更されます。続けてもよろしいですか? - confirm - - - マーケットプレイスのリストウィンドウにドラッグしたアイテムは、元の場所からコピーされるのではなく移動となります。続けてもよろしいですか? - confirm - - - リストフォルダを移動または削除すると、マーケットプレイスのリストが削除されます。マーケットプレイスのリストを維持する場合は、変更するバージョンフォルダの中身を移動または削除してください。続けてもよろしいですか? - confirm - - - これらのアイテムの1つまたは複数をマーケットプレイスにコピーする権限がありません。移動するか、残したままにすることはできます。 - confirm - - - この操作により、このリストが削除されます。続けてもよろしいですか? - confirm - - - この操作により、現在のリストのバージョンフォルダが無効になります。続けてもよろしいですか? - confirm - - - このリストをアップデートできませんでした。 + + + リストを作成するために、リストするコンテンツの階層を固定しました。 + + confirm + + + + この操作により、このリストの有効な内容が変更されます。続けてもよろしいですか? + + confirm + + + + マーケットプレイスのリストウィンドウにドラッグしたアイテムは、元の場所からコピーされるのではなく移動となります。続けてもよろしいですか? + + confirm + + + + リストフォルダを移動または削除すると、マーケットプレイスのリストが削除されます。マーケットプレイスのリストを維持する場合は、変更するバージョンフォルダの中身を移動または削除してください。続けてもよろしいですか? + + confirm + + + + これらのアイテムの1つまたは複数をマーケットプレイスにコピーする権限がありません。移動するか、残したままにすることはできます。 + + confirm + + + + この操作により、このリストが削除されます。続けてもよろしいですか? + + confirm + + + + この操作により、現在のリストのバージョンフォルダが無効になります。続けてもよろしいですか? + + confirm + + + + このリストをアップデートできませんでした。 [[URL] ここをクリック]してマーケットプレイスで編集します。 - - - マーケットプレイスのリストフォルダにある衣服装やボディパーツを着用できません。 - fail - - リストIDが無効です。 - fail - - このリストには複数のバージョンフォルダがあるか、バージョンフォルダがありません。後で、単独でバージョンフォルダを選択して有効にする必要があります。 - confirm - - - 各種の在庫品目を別々の在庫フォルダに分けたため、フォルダはリストに表示できるように配置されています。 - confirm - - - 在庫が空のため、リストを削除しました。もう一度リストを表示するには、在庫フォルダにユニットを追加する必要があります。 - confirm - - - バージョンフォルダが空のため、リストを削除しました。もう一度リストを表示するには、バージョンフォルダにアイテムを追加する必要があります。 - confirm - - - アニメーションデータの書き込みに問題があります。後でもう一度お試しください。 - fail - - 以下の理由で、オークションのスナップショットのアップロード時に問題が起こりました:[REASON] - fail - - 一度に複数のアイテムの中身を表示できません。 + + + マーケットプレイスのリストフォルダにある衣服装やボディパーツを着用できません。 + + fail + + + リストIDが無効です。 + + fail + + + このリストには複数のバージョンフォルダがあるか、バージョンフォルダがありません。後で、単独でバージョンフォルダを選択して有効にする必要があります。 + + confirm + + + + 各種の在庫品目を別々の在庫フォルダに分けたため、フォルダはリストに表示できるように配置されています。 + + confirm + + + + 在庫が空のため、リストを削除しました。もう一度リストを表示するには、在庫フォルダにユニットを追加する必要があります。 + + confirm + + + + バージョンフォルダが空のため、リストを削除しました。もう一度リストを表示するには、バージョンフォルダにアイテムを追加する必要があります。 + + confirm + + + + アニメーションデータの書き込みに問題があります。後でもう一度お試しください。 + + fail + + + 以下の理由で、オークションのスナップショットのアップロード時に問題が起こりました:[REASON] + + fail + + + 一度に複数のアイテムの中身を表示できません。 アイテムを1つだけ選択して、もう一度お試しください。 - fail - - 服装、身体部位に対する変更をすべて保存しますか? - confirm - - - フレンド以外の人からのコールや、インスタントメッセージを無視する設定にしたことを、相手に知られることはありません。 - - - 注意:このオプションを有効にすると、このパソコンを使うユーザーは誰でも、あなたのお気に入りの場所を見ることができるようになります。 - - - Second Lifeビューアーの多重起動はサポートされていません。 + + fail + + + 服装、身体部位に対する変更をすべて保存しますか? + + confirm + + + + フレンド以外の人からのコールや、インスタントメッセージを無視する設定にしたことを、相手に知られることはありません。 + + + 注意:このオプションを有効にすると、このパソコンを使うユーザーは誰でも、あなたのお気に入りの場所を見ることができるようになります。 + + + Second Lifeビューアーの多重起動はサポートされていません。 テクスチャキャッシュの競合による破損や、およびビジュアルとパフォーマンスの低下につながる恐れがあります。 - - - 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更、削除、持ち帰ることができます。この権限を与える際には十分に注意してください。 + + + 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更、削除、持ち帰ることができます。この権限を与える際には十分に注意してください。 [NAME]に修正権限を与えますか? - - - 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更することができます。 + + + 他人に修正権限を与えると、権限を与えられた人はあなたが所有する、インワールドのオブジェクトを変更することができます。 この権限を与える際には十分に注意してください。選択した住人に修正権限を与えますか? - confirm - - - [NAME]の修正権限を解除しますか? - confirm - - - 選択した住人から変更権限を取り下げますか? - confirm - - - グループ名は[MIN_LEN]~[MAX_LEN]文字である必要があります。 - group - fail - - - グループを作成できません。 + + confirm + + + + [NAME]の修正権限を解除しますか? + + confirm + + + + 選択した住人から変更権限を取り下げますか? + + confirm + + + + グループ名は[MIN_LEN]~[MAX_LEN]文字である必要があります。 + + group + + + fail + + + + グループを作成できません。 [MESSAGE] - group - fail - - - [NEEDS_APPLY_MESSAGE] + + group + + + fail + + + + [NEEDS_APPLY_MESSAGE] [WANT_APPLY_MESSAGE] - group - fail - - - グループ通知の送信には、件名の記入が必要です。 - group - fail - - - あなたは、[ROLE_NAME]の役割にメンバーを与えようとしています。任命されたメンバーが自ら退任しない限り、 役柄から削除できません。 + + group + + + fail + + + + グループ通知の送信には、件名の記入が必要です。 + + group + + + fail + + + + あなたは、[ROLE_NAME]の役割にメンバーを与えようとしています。任命されたメンバーが自ら退任しない限り、 役柄から削除できません。 操作を続行しますか? - - - あなたは[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 + + + あなたは[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 *警告* この能力を持つ役割のメンバーは、 自分と他のメンバーに現在より強力な権限を割り当て、 自分をオーナーとほぼ同様の立場に任命することもできるようになります。 この行為の意味をよく理解してから実行してください。 この能力を [ROLE_NAME] に割り当てますか? - - - あなたは、[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 + + + あなたは、[ROLE_NAME]に[ACTION_NAME]の能力を与えようとしています。 *警告* この能力をもつ役割のメンバーは、自分と他のメンバーにすべての能力を割り当て、自分をオーナーとほぼ同様の立場に任命できます。 この能力を[ROLE_NAME] に割り当てますか? - - - 役割「[ROLE_NAME]」に能力「[ACTION_NAME]」を追加しようとしています。 + + + 役割「[ROLE_NAME]」に能力「[ACTION_NAME]」を追加しようとしています。 *警告* この能力を持つ役割のメンバーにも能力「[ACTION_NAME_2]」と「[ACTION_NAME_3]」が許可されます。 - - - 役割「[ROLE_NAME]」から能力「[ACTION_NAME]」を削除しようとしています。 + + + 役割「[ROLE_NAME]」から能力「[ACTION_NAME]」を削除しようとしています。 *警告* この能力を削除しても能力「[ACTION_NAME_2]」と「[ACTION_NAME_3]」は削除されません。 これらの能力をこの役割に許可しない場合は、すぐに削除してください! - - - [AVATAR_NAME]をグループから追放しようとしています。 - group - confirm - - - [COUNT]名のメンバーをグループから追放しようとしています。 - group - confirm - - - [AVATAR_NAME]をグループから追放しようとしています。 - group - confirm - - - [COUNT]名のメンバーをグループから追放しようとしています。 - group - confirm - - - 一部の住人がグループから追放されたため、招待状が送られませんでした。 - 装着物を下に置こうとしています。 + + + [AVATAR_NAME]をグループから追放しようとしています。 + + group + + + confirm + + + + [COUNT]名のメンバーをグループから追放しようとしています。 + + group + + + confirm + + + + [AVATAR_NAME]をグループから追放しようとしています。 + + group + + + confirm + + + + [COUNT]名のメンバーをグループから追放しようとしています。 + + group + + + confirm + + + + + 一部の住人がグループから追放されたため、招待状が送られませんでした。 + + 装着物を下に置こうとしています。 このまま続けてもよろしいですか? - - - このグループに参加するには、L$ [COST]かかります。 + + + このグループに参加するには、L$ [COST]かかります。 このまま続けてもよろしいですか? - confirm - funds - group - - - 「<nolink>[NAME]</nolink>」というグループに入ろうとしています。 + + confirm + + + funds + + + group + + + + 「<nolink>[NAME]</nolink>」というグループに入ろうとしています。 このまま続けてもよろしいですか? - group - confirm - - - このグループに加入するには、L$ [COST]必要です。 + + group + + + confirm + + + + このグループに加入するには、L$ [COST]必要です。 L$が不足しているので、このグループに参加することができません。 - group - fail - funds - - このグループ作成にかかる費用:L$ [COST] + + group + + + fail + + + funds + + + このグループ作成にかかる費用:L$ [COST] 一人ではグループにならないので、永久に削除されてしまいます。 48時間以内にメンバーを勧誘し、入会してもらってください。 - group - funds - - - あなたはグループに参加することはできません。 - group_id - success - - - グループ参加リクエスト中にエラーが発生しました。 - group_id - success - - - 以下のグループに参加できませんでした:[reason] - group_id - success - reason - - - 申し訳ありませんが、トライアルユーザーはグループに参加できません。 - group_id - success - - - 「<nolink>[group_name]</nolink>」に参加できません: + + group + + + funds + + + + あなたはグループに参加することはできません。 + + group_id + + + success + + + + グループ参加リクエスト中にエラーが発生しました。 + + group_id + + + success + + + + 以下のグループに参加できませんでした:[reason] + + group_id + + + success + + + reason + + + + 申し訳ありませんが、トライアルユーザーはグループに参加できません。 + + group_id + + + success + + + + 「<nolink>[group_name]</nolink>」に参加できません: 既に[group_count]個のグループのメンバーになっています。参加できるのは最大[max_groups]グループまでです。 - success - group_id - group_name - group_count - max_groups - - - 「<nolink>[group_name]</nolink>」に参加できません: + + success + + + group_id + + + group_name + + + group_count + + + max_groups + + + + 「<nolink>[group_name]</nolink>」に参加できません: このグループは現在、参加が制限されています。 - group_id - success - - - このユーザーグループに入会しました。 - group_id - success - - - 会員料金として必要なL$ [membership_fee]を送金することができません。 - group_id - success - - - この区画([PARCEL_NAME])は、L$ [COST]で[TIME]時間入ることができます。入場許可証を購入しますか? - fail - funds - confirm - - - 不特定の人に売却する場合には、売却価格はL$ 0以上に設定する必要があります。 + + group_id + + + success + + + + このユーザーグループに入会しました。 + + group_id + + + success + + + + 会員料金として必要なL$ [membership_fee]を送金することができません。 + + group_id + + + success + + + + この区画([PARCEL_NAME])は、L$ [COST]で[TIME]時間入ることができます。入場許可証を購入しますか? + + fail + + + funds + + + confirm + + + + 不特定の人に売却する場合には、売却価格はL$ 0以上に設定する必要があります。 売却価格をL$ 0に設定する場合は、売却する個人を選択してください。 - fail - - 選択した[LAND_SIZE]㎡の土地は、売り出し中に設定されています。 + + fail + + + 選択した[LAND_SIZE]㎡の土地は、売り出し中に設定されています。 売却価格L$ [SALE_PRICE]で、[NAME]に売却を認可します。 - confirm - - - 注意:「誰にでも販売」をクリックすることで、あなたの土地はこのリージョンにいる人に限らず、[SECOND_LIFE]コミュニティ全体で利用可能となります。 + + confirm + + + + 注意:「誰にでも販売」をクリックすることで、あなたの土地はこのリージョンにいる人に限らず、[SECOND_LIFE]コミュニティ全体で利用可能となります。 選択した[LAND_SIZE]㎡の土地は、販売対象に設定されました。 販売価格L$ [SALE_PRICE]で、[NAME]が販売対象者となります。 - confirm - - - グループ「<nolink>[NAME]</nolink>」と共有するこのにある区画のすべてのオブジェクトを前のオーナーのインベントリに返却しますか? + + confirm + + + + グループ「<nolink>[NAME]</nolink>」と共有するこのにある区画のすべてのオブジェクトを前のオーナーのインベントリに返却しますか? *警告* この操作をすると、グループに譲渡された譲渡禁止のオブジェクトを削除することになります。 オブジェクト:[N] - confirm - group - - - この区画で、住人[NAME]が所有する全てのオブジェクトを本人のインベントリに本当に返却してもよいですか? + + confirm + + + group + + + + この区画で、住人[NAME]が所有する全てのオブジェクトを本人のインベントリに本当に返却してもよいですか? オブジェクト:[N] - confirm - - - この土地区画内にある、あなたが所有するすべてのオブジェクトを、あなたのインベントリに戻そうとしています。このまま続けてもよろしいですか? + + confirm + + + + この土地区画内にある、あなたが所有するすべてのオブジェクトを、あなたのインベントリに戻そうとしています。このまま続けてもよろしいですか? オブジェクト:[N] - confirm - - - この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、それぞれの所有者のインベントリに戻そうとしています。このまま操作を続行してもよろしいですか? + + confirm + + + + この土地区画内にある、あなた以外が所有するすべてのオブジェクトを、それぞれの所有者のインベントリに戻そうとしています。このまま操作を続行してもよろしいですか? グループに譲渡された「再販・譲渡可」のオブジェクトは、以前の所有者に返却されます。 *警告* これにより、グループに譲渡された「再販・譲渡不可」のオブジェクトは削除されます! オブジェクト:[N] - confirm - - - この土地区画内にある、[NAME]以外による所有のオブジェクトをすべてそれぞれの所有者のインベントリに返却しようとしています。このまま操作を続行してもよろしいですか? + + confirm + + + + この土地区画内にある、[NAME]以外による所有のオブジェクトをすべてそれぞれの所有者のインベントリに返却しようとしています。このまま操作を続行してもよろしいですか? グループに譲渡された「再販・譲渡可」のオブジェクトは、以前の所有者に返却されます。 *警告* これにより、グループに譲渡された「再販・譲渡不可」のオブジェクトは削除されます! オブジェクト:[N] - confirm - - - リストされた全てのオブジェクトを所有者のインベントリに戻しますか? + + confirm + + + + リストされた全てのオブジェクトを所有者のインベントリに戻しますか? これによりすべてのスクリプト化されたオブジェクトがリージョンに戻ります! - confirm - - - このリージョン(地域)内のすべてのオブジェクトを無効にしようとしています。このまま操作を続行してもよろしいですか? - confirm - - - グループ <nolink>[NAME]</nolink>と共有されていない、この区画にあるオブジェクトを前のオーナーに返却しますか? + + confirm + + + + このリージョン(地域)内のすべてのオブジェクトを無効にしようとしています。このまま操作を続行してもよろしいですか? + + confirm + + + + グループ <nolink>[NAME]</nolink>と共有されていない、この区画にあるオブジェクトを前のオーナーに返却しますか? オブジェクト:[N] - confirm - - - スクリプトを無効にできません。 + + confirm + + + + スクリプトを無効にできません。 このリージョン(地域)全体が「ダメージ有効」に設定されています。 武器を使用するには、スクリプトの実行を許可する必要があります。 - fail - - 現在複数の面が選択されています。 + + fail + + + 現在複数の面が選択されています。 このまま続けた場合、メディアの別々のインスタンスがオブジェクトの複数の面に設定されます。 メディアを1つの面だけに取り付けるには、「面を選択」を選んでオブジェクトの希望する面をクリック、それから「追加」をクリックしてください。 - confirm - - - 着地点を設定するには、この区画の内側に立ってください。 - fail - - 受信者の有効なメールアドレスを入力してください。 - fail - - あなたのメールアドレスを入力してください。 - fail - - デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか? - confirm - - - スナップショットデータの処理エラー - fail - - スナップショットのエンコードエラー - fail - - このアイテムをアップロードするには、L$ [COST]が必要です。 - fail - - インベントリに写真を保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 - fail - - インベントリにテクスチャを保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 - fail - - 以下の理由でスナップショットの送信時に問題が起こりました:[REASON] - fail - - 以下の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました:[REASON] - fail - - [SECOND_LIFE]へのログインを続けるには、Second Lifeの利用規約、プライバシーポリシー、およびサービス規約に同意する必要があります。 - fail - - アウトフィットを装着できません。 + + confirm + + + + 着地点を設定するには、この区画の内側に立ってください。 + + fail + + + 受信者の有効なメールアドレスを入力してください。 + + fail + + + あなたのメールアドレスを入力してください。 + + fail + + + デフォルトの件名またはメッセージを付けて、スナップショットを送信しますか? + + confirm + + + + スナップショットデータの処理エラー + + fail + + + スナップショットのエンコードエラー + + fail + + + このアイテムをアップロードするには、L$ [COST]が必要です。 + + fail + + + インベントリに写真を保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 + + fail + + + インベントリにテクスチャを保存するには、L$ [COST]が必要です。L$を購入するか、代わりに写真をコンピュータに保存できます。 + + fail + + + 以下の理由でスナップショットの送信時に問題が起こりました:[REASON] + + fail + + + 以下の理由で、レポートのスクリーンショットのアップロード時に問題が起こりました:[REASON] + + fail + + + [SECOND_LIFE]へのログインを続けるには、Second Lifeの利用規約、プライバシーポリシー、およびサービス規約に同意する必要があります。 + + fail + + + アウトフィットを装着できません。 アウトフィットフォルダに服装、身体部位、装着物がありません。 - fail - - ごみ箱にある服装や身体部位は、着用できません。 - fail - - オブジェクトを装着できませんでした。 + + fail + + + ごみ箱にある服装や身体部位は、着用できません。 + + fail + + + オブジェクトを装着できませんでした。 最大装着数[MAX_ATTACHMENTS]個を越えています。どれか取り外してからお試しください。 - fail - - まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。 - fail - - ログインするためにパスワードを入力してください。 - fail - - おっと、記入漏れがあります。 + + fail + + + まだ読み込まれていないため、そのアイテムを装着できません。後でやり直してください。 + + fail + + + ログインするためにパスワードを入力してください。 + + fail + + + おっと、記入漏れがあります。 アバターのユーザー名を入力してください。 [SECOND_LIFE]に入るにはアカウントが必要です。今すぐアカウントを作成しますか? - confirm - [create_account_url] - - - ユーザー名のフィールドにアバターのユーザー名もしくは氏名を入力してから、再度ログインする必要があります。 - fail - - 「[GRID]」は、有効なグリッドIDではありません。 - fail - - ログイン位置で有効なグリッドが指定されませんでした。 - fail - - クラシファイド広告『[NAME]』を削除してもよろしいですか? + + confirm + + + [create_account_url] + + + + ユーザー名のフィールドにアバターのユーザー名もしくは氏名を入力してから、再度ログインする必要があります。 + + fail + + + 「[GRID]」は、有効なグリッドIDではありません。 + + fail + + + ログイン位置で有効なグリッドが指定されませんでした。 + + fail + + + クラシファイド広告『[NAME]』を削除してもよろしいですか? 支払い済みの料金は返金されません。 - confirm - - - この顔に紐づけられたメディアの削除を選択しました。 + + confirm + + + + この顔に紐づけられたメディアの削除を選択しました。 続行してもよろしいですか? - confirm - - - クラシファイド広告[NAME]への変更を保存しますか? - confirm - - - クラシファイド広告を出すには、資金が足りません。 - fail - - - - クラシファイド広告<nolink>[CLASSIFIED]</nolink>を削除してもよろしいですか? - confirm - - - ピック<nolink>[PICK]</nolink>を削除してもよろしいですか? - confirm - - - 未公開のクラシファイド広告があります。 + + confirm + + + + クラシファイド広告[NAME]への変更を保存しますか? + + confirm + + + + クラシファイド広告を出すには、資金が足りません。 + + fail + + + + クラシファイド広告<nolink>[CLASSIFIED]</nolink>を削除してもよろしいですか? + + confirm + + + + ピック<nolink>[PICK]</nolink>を削除してもよろしいですか? + + confirm + + + + 未公開のクラシファイド広告があります。 ウィンドウを閉じると変更が失われます。 - confirm - - - 保存されていない変更があります。 - confirm - save - - - 「<nolink>[PICK]</nolink>」を削除してもよろしいですか? - - - このアウトフィットを削除してもよろしいですか? - confirm - - - [SECOND_LIFE]イベントWebページに移動しますか? - https://secondlife.com/my/community/events/?lang=ja-JP - confirm - - - 表示する提案を選択してください。 - fail - - 表示する履歴アイテムを選択してください。 - fail - - - - - キャッシュは、[APP_NAME]再起動後にクリアされます。 - キャッシュは、[APP_NAME]再起動後が移動されます。 -注意:キャッシュがクリアされます。 - ポートの設定は、[APP_NAME]再起動後に反映されます。 - デバッグ設定の変更は、[APP_NAME]再起動後に反映されます。 - 新しいスキンは、[APP_NAME]再起動後に表示されます。 - 言語の変更は、[APP_NAME]再起動後に反映されます。 - [SECOND_LIFE]のWebページに移動し、入札あるいはオークションの詳細を確認しますか? - confirm - http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]&lang=ja-JP - - - 変更を保存しますか? - confirm - - - このノートカードを削除してもよろしいですか? - - confirm - - - 以前のスクリーンショットをレポートに使用しますか? - - - ジェスチャーの保存に失敗しました。 + + confirm + + + + 保存されていない変更があります。 + + confirm + + + save + + + + 「<nolink>[PICK]</nolink>」を削除してもよろしいですか? + + + このアウトフィットを削除してもよろしいですか? + + confirm + + + + [SECOND_LIFE]イベントWebページに移動しますか? + + https://secondlife.com/my/community/events/?lang=ja-JP + + + confirm + + + + 表示する提案を選択してください。 + + fail + + + 表示する履歴アイテムを選択してください。 + + fail + + + + キャッシュは、[APP_NAME]再起動後にクリアされます。 + + + キャッシュは、[APP_NAME]再起動後が移動されます。 +注意:キャッシュがクリアされます。 + + + ポートの設定は、[APP_NAME]再起動後に反映されます。 + + + デバッグ設定の変更は、[APP_NAME]再起動後に反映されます。 + + + 新しいスキンは、[APP_NAME]再起動後に表示されます。 + + + 言語の変更は、[APP_NAME]再起動後に反映されます。 + + [SECOND_LIFE]のWebページに移動し、入札あるいはオークションの詳細を確認しますか? + + confirm + + + http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]&lang=ja-JP + + + + 変更を保存しますか? + + confirm + + + + このノートカードを削除してもよろしいですか? + + + confirm + + + + 以前のスクリーンショットをレポートに使用しますか? + + + ジェスチャーの保存に失敗しました。 ステップが多すぎます。 ステップをいくつか削除してから再保存してください - fail - - ジェスチャーの保存に失敗しました。 + + fail + + + ジェスチャーの保存に失敗しました。 少し待ってからもう一度試してください。 - fail - - ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 + + fail + + + ジェスチャーの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 オブジェクトが範囲内に存在しないか、削除された可能性があります。 - fail - - 以下の理由で、ジェスチャーの保存時に問題が起こりました:[REASON] + + fail + + + 以下の理由で、ジェスチャーの保存時に問題が起こりました:[REASON] お手数ですが、後でもう一度試してください。 - fail - - ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 + + fail + + + ノートカードの保存に失敗しました。オブジェクト、または関連するオブジェクトインベントリが見つかりません。 オブジェクトが範囲内に存在しないか、削除された可能性があります。 - fail - - 以下の理由で、ノートカードの保存時に問題が起こりました:[REASON] + + fail + + + 以下の理由で、ノートカードの保存時に問題が起こりました:[REASON] お手数ですが、後でもう一度試してください。 - fail - - あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。 + + fail + + + あなたのスクリプトのバージョンでは、変更を元に戻すことはできませんでした。 サーバーの最新保存バージョンをロードしますか? (**警告**:この操作後元に戻すことはできません) - confirm - - - スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。 + + confirm + + + + スクリプトの保存に失敗しました。スクリプトが入ったオブジェクトが見つかりません。 オブジェクトは範囲外か、または削除されているかもしれません。 - fail - - ログイン位置が指定されていません。 + + fail + + + ログイン位置が指定されていません。 ログイン位置の欄にリージョン名を入力するか、「最後にログアウトした場所」か「自宅(ホーム)」を選択してください。 - fail - - - スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 + + fail + + + + スクリプトの起動または停止に失敗しました。スクリプトが格納されているオブジェクトが見つかりません。 オブジェクトが範囲内に存在しないか、または削除された可能性があります。 - fail - - ファイルをダウンロードできません。 - fail - - ダウンロードをリクエストしたファイルは、[SECOND_LIFE]でサポートされていません。 - - confirm - - - ファイル[[FILE]]に書き込むことができませんでした。 - fail - - お使いのコンピュータは、[APP_NAME]の最小システム要件を満たしていません。 + + fail + + + ファイルをダウンロードできません。 + + fail + + + ダウンロードをリクエストしたファイルは、[SECOND_LIFE]でサポートされていません。 + + + confirm + + + + ファイル[[FILE]]に書き込むことができませんでした。 + + fail + + + お使いのコンピュータは、[APP_NAME]の最小システム要件を満たしていません。 このためパフォーマンスが低下する場合があります。恐れ入りますが[SUPPORT_SITE]は、サポートされていないシステム構成に対する技術的サポートを提供できません。 詳細について、[_URL] を確認しますか? - https://secondlife.com/system-requirements?lang=ja - fail - - - グラフィックスチップに最新のドライバがある可能性があります。グラフィックドライバを更新することにより、大幅にパフォーマンスが向上します。 + + https://secondlife.com/system-requirements?lang=ja + + + fail + + + + グラフィックスチップに最新のドライバがある可能性があります。グラフィックドライバを更新することにより、大幅にパフォーマンスが向上します。 ドライバの更新を確認するために[URL] にアクセスしますか? - [URL] - confirm - fail - - - お使いのシステムには、[APP_NAME]が認識できないグラフィックカードが搭載されています。[APP_NAME]でまだテストされていない最新ハードウェアのためだと考えられます。 + + [URL] + + + confirm + + + fail + + + + お使いのシステムには、[APP_NAME]が認識できないグラフィックカードが搭載されています。[APP_NAME]でまだテストされていない最新ハードウェアのためだと考えられます。 問題ないとは思いますが、グラフィックの設定を調整する必要があるかもしれません。 (「私」>「初期設定」>「グラフィック」) - fail - - - - - グラフィックドライバを初期化中に[APP_NAME]がクラッシュしました。 + + fail + +
+ + +
+ グラフィックドライバを初期化中に[APP_NAME]がクラッシュしました。 ドライバの一般的なエラーを防ぐために、画質が低に設定されます。このため、一部のグラフィック特性に制限が出ます。 お使いのグラフィックカードのドライバをアップデートするようおすすめします。 画質は、「初期設定」>「グラフィック」で設定できます。 - fail - - この設定を変更すると、「自動調整」の設定が無効になります。 + + fail + + + この設定を変更すると、「自動調整」の設定が無効になります。 続けてもよろしいですか? - confirm - - - 高度な照明をオンにするには、品質をレベル4以上にする必要があります。 - confirm - - - 影を有効にするには、品質をレベルを4以上にする必要があります。 - confirm - - - [REGION]では、地形の変更ができません。 - fail - - [PARCEL]区画の地形を編集する権限がありません。 - fail - - 以下のアイテムをコピーする権限がありません: + + confirm + + + + 高度な照明をオンにするには、品質をレベル4以上にする必要があります。 + + confirm + + + + 影を有効にするには、品質をレベルを4以上にする必要があります。 + + confirm + + + + [REGION]では、地形の変更ができません。 + + fail + + + [PARCEL]区画の地形を編集する権限がありません。 + + fail + + + 以下のアイテムをコピーする権限がありません: <nolink>[ITEMS]</nolink> 他の人に譲ると、そのアイテムはあなたのインベントリから削除されます。本当にこれらのアイテムを譲ってもよろしいですか? - confirm - fail - - - インベントリのアイテムを渡すことができません。 - fail - - 取引がキャンセルされました。 - fail - - 一度に42個以上のアイテムを渡すことはできません。 - fail - - 選択したアイテムを渡す権限がありません。 - fail - - あなたは選択した[COUNT]個のアイテムをコピーする権限がありません。 + + confirm + + + fail + + + + インベントリのアイテムを渡すことができません。 + + fail + + + 取引がキャンセルされました。 + + fail + + + 一度に42個以上のアイテムを渡すことはできません。 + + fail + + + 選択したアイテムを渡す権限がありません。 + + fail + + + あなたは選択した[COUNT]個のアイテムをコピーする権限がありません。 これらのアイテムはあなたのインベントリから失われます。 本当にアイテムを渡してもよろしいですか? - confirm - fail - - - 選択したフォルダを渡す権限がありません。 - fail - - このアバターをフリーズしますか? + + confirm + + + fail + + + + 選択したフォルダを渡す権限がありません。 + + fail + + + このアバターをフリーズしますか? アバターは一時的に動けなくなり、チャットを含めインワールドで何もできなくなります。 - confirm - - - [AVATAR_NAME]をフリーズしますか? + + confirm + + + + [AVATAR_NAME]をフリーズしますか? フリーズされた人は一時的に動けなくなり、チャットなど、この世界に対する関わりを持つことができなくなります。 - confirm - - - あなたの土地から[AVATAR_NAME]を追放しますか? - confirm - - - このアバターをあなたの土地から追放しますか? - confirm - - - [AVATAR_NAME]をあなたの土地から追放しますか? - confirm - - - <nolink>[GROUP_NAME]</nolink>から[AVATAR_NAME]を追放しました。 - group - - 取得エラー:選択したオブジェクトの数が多すぎます。 - fail - - 取得エラー:オブジェクトが複数のリージョン(地域)にまたがって存在しています。 + + confirm + + + + あなたの土地から[AVATAR_NAME]を追放しますか? + + confirm + + + + このアバターをあなたの土地から追放しますか? + + confirm + + + + [AVATAR_NAME]をあなたの土地から追放しますか? + + confirm + + + + <nolink>[GROUP_NAME]</nolink>から[AVATAR_NAME]を追放しました。 + + group + + + 取得エラー:選択したオブジェクトの数が多すぎます。 + + fail + + + 取得エラー:オブジェクトが複数のリージョン(地域)にまたがって存在しています。 すべて同じリージョン内に移動させてから取得してください。 - fail - - [EXTRA] + + fail + + + [EXTRA] [_URL] に移動してリンデンドル購入に関する情報を確認しますか? - https://secondlife.com/my/lindex/?lang=ja-JP - - - [MUTE_LIMIT]エントリの制限に達したため、ブロックリストに新しいエントリを追加できません。 - fail - - [COUNT]個のオブジェクトをリンクできませんでした。 + + https://secondlife.com/my/lindex/?lang=ja-JP + + + + [MUTE_LIMIT]エントリの制限に達したため、ブロックリストに新しいエントリを追加できません。 + + fail + + + [COUNT]個のオブジェクトをリンクできませんでした。 リンクできるオブジェクトは最大[MAX]個です。 - fail - - セットが揃っているオブジェクトのみリンクできます。複数のオブジェクトを選択してください。 - fail - - すべてのオブジェクトの修正許可がないためリンクできません。 + + fail + + + セットが揃っているオブジェクトのみリンクできます。複数のオブジェクトを選択してください。 + + fail + + + すべてのオブジェクトの修正許可がないためリンクできません。 どのオブジェクトもロックされておらず、あなたのものであることを確認してください。 - fail - - リージョン(地域)の境界を越えてオブジェクトをリンクできません。 - fail - - リージョン(地域)の境界を越えてオブジェクトをリンクできません。 - fail - - 所有者が異なるため、オブジェクトをリンクできません。 + + fail + + + リージョン(地域)の境界を越えてオブジェクトをリンクできません。 + + fail + + + リージョン(地域)の境界を越えてオブジェクトをリンクできません。 + + fail + + + 所有者が異なるため、オブジェクトをリンクできません。 自分が所有しているオブジェクトだけを選択してください。 - fail - - ファイル「[FILE]」は、無効な拡張子です。 - -このファイルの拡張子が正しいかどうかを確認してください。 - 「[EXTENSION]」は、無効な拡張子です。 + + fail + + + + ファイル「[FILE]」は、無効な拡張子です。 + +このファイルの拡張子が正しいかどうかを確認してください。 + + 「[EXTENSION]」は、無効な拡張子です。 有効な拡張子:[VALIDS] - fail - - - 読み込みのためにアップロードされたサウンドファイルを開けません: + + fail + + + + 読み込みのためにアップロードされたサウンドファイルを開けません: [FILE] - fail - - RIFF WAVEファイルとして認識されません: + + fail + + + RIFF WAVEファイルとして認識されません: [FILE] - fail - - PCM WAVEオーディオファイルとして認識されません: + + fail + + + PCM WAVEオーディオファイルとして認識されません: [FILE] - fail - - このファイルのチャンネル数は無効です(モノラルか、ステレオである必要があります): + + fail + + + このファイルのチャンネル数は無効です(モノラルか、ステレオである必要があります): [FILE] - fail - - このファイルのサンプリングレートはサポートされていません(44.1kである必要があります): + + fail + + + このファイルのサンプリングレートはサポートされていません(44.1kである必要があります): [FILE] - fail - - このファイルのビットサイズはサポートされていません(8bitか、16bitである必要があります): + + fail + + + このファイルのビットサイズはサポートされていません(8bitか、16bitである必要があります): [FILE] - fail - - WAVヘッダーにデータチャンクが見つかりません: + + fail + + + WAVヘッダーにデータチャンクが見つかりません: [FILE] - fail - - WAVファイルのチャンクサイズが間違っています: + + fail + + + WAVファイルのチャンクサイズが間違っています: [FILE] - fail - - オーディオファイルが長すぎます。(最大10秒): + + fail + + + オーディオファイルが長すぎます。(最大10秒): [FILE] - fail - - 「[FILE]」に問題があります。 + + fail + + + 「[FILE]」に問題があります。 [ERROR] - fail - - 書き込み用の一時圧縮サウンドファイルを開くことができません: + + fail + + + 書き込み用の一時圧縮サウンドファイルを開くことができません: [FILE] - fail - - 不明なVorbisのエンコードに失敗しました: + + fail + + + 不明なVorbisのエンコードに失敗しました: [FILE] - fail - - 次のファイルのエンコードができません: + + fail + + + 次のファイルのエンコードができません: [FILE] - fail - - ユーザー名とパスワードを自動入力できません。これはネットワーク設定が変更された場合に起こります - fail - - - 破損したリソースファイル: + + fail + + + ユーザー名とパスワードを自動入力できません。これはネットワーク設定が変更された場合に起こります + + fail + + + + 破損したリソースファイル: [FILE] - fail - - 不明なLindenリソースファイルのバージョンです: + + fail + + + 不明なLindenリソースファイルのバージョンです: [FILE] - fail - - 出力ファイルを作成できません: + + fail + + + 出力ファイルを作成できません: [FILE] - fail - - 現在[APP_NAME]では、BVH形式のアニメーションファイルの一括アップロードはサポートされていません。 - fail - - 以下の理由で「[FILE]」をアップロードできませんでした: + + fail + + + 現在[APP_NAME]では、BVH形式のアニメーションファイルの一括アップロードはサポートされていません。 + + fail + + + 以下の理由で「[FILE]」をアップロードできませんでした: [REASON] お手数ですがもう一度やり直してください。 - fail - - 「[LANDMARK_NAME]」を「[FOLDER_NAME]」フォルダに追加しました。 - この場所のランドマークは、既に持っています。 - fail - - - - + + fail + + + + 「[LANDMARK_NAME]」を「[FOLDER_NAME]」フォルダに追加しました。 + + この場所のランドマークは、既に持っています。 + + fail + + + + + フォルダ名を入力してください: - confirm -
- + + confirm + + + -
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml index 098128bb6d..94766ee8fa 100644 --- a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml @@ -1,12 +1,12 @@ - - - - - - - - - - - - 名前タグ: - - - - - - - \ No newline at end of file + + + + + 名前タグ: + + + + + + + diff --git a/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml index f5f1bc1b03..a031cd7176 100644 --- a/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml +++ b/indra/newview/skins/default/xui/ja/panel_performance_preferences.xml @@ -1,66 +1,120 @@ -
Date: Wed, 6 Sep 2023 21:47:33 +0300 Subject: SL-19826 Basic 'shift' support for gallery Part#4 --- indra/newview/llinventorygallery.cpp | 159 +++++++++++++++++++++++++---------- indra/newview/llinventorygallery.h | 3 +- 2 files changed, 116 insertions(+), 46 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index eab15b79ad..1ee08eb01c 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -217,6 +217,14 @@ void LLInventoryGallery::setRootFolder(const LLUUID cat_id) gIdleCallbacks.deleteFunction(onIdle, (void*)this); + for (const LLUUID& id : mSelectedItemIDs) + { + if (mItemMap[id]) + { + mItemMap[id]->setSelected(FALSE); + } + } + mFolderID = cat_id; mItemsToSelect.clear(); mSelectedItemIDs.clear(); @@ -1153,7 +1161,7 @@ void LLInventoryGallery::moveUp(MASK mask) if (mInventoryGalleryMenu && mSelectedItemIDs.size() > 0 && mItemsAddedCount > 1) { - LLInventoryGalleryItem* item = mItemMap[mLastSelectedUUID]; + LLInventoryGalleryItem* item = mItemMap[mLastInteractedUUID]; if (item) { if (mask == MASK_NONE || mask == MASK_CONTROL) @@ -1180,10 +1188,10 @@ void LLInventoryGallery::moveUp(MASK mask) { S32 n = mItemIndexMap[item]; S32 target = llmax(0, n - mItemsInRow); - toggleSelectionRange(target, n - 1); if (target != n) { item = mIndexToItemMap[target]; + toggleSelectionRangeFromLast(item->getUUID()); item->setFocus(TRUE); claimEditHandler(); } @@ -1198,7 +1206,7 @@ void LLInventoryGallery::moveDown(MASK mask) if (mInventoryGalleryMenu && mSelectedItemIDs.size() > 0 && mItemsAddedCount > 1) { - LLInventoryGalleryItem* item = mItemMap[mLastSelectedUUID]; + LLInventoryGalleryItem* item = mItemMap[mLastInteractedUUID]; if (item) { if (mask == MASK_NONE || mask == MASK_CONTROL) @@ -1225,10 +1233,10 @@ void LLInventoryGallery::moveDown(MASK mask) { S32 n = mItemIndexMap[item]; S32 target = llmin(mItemsAddedCount - 1, n + mItemsInRow); - toggleSelectionRange(n + 1, target); if (target != n) { item = mIndexToItemMap[target]; + toggleSelectionRangeFromLast(item->getUUID()); item->setFocus(TRUE); claimEditHandler(); } @@ -1243,10 +1251,10 @@ void LLInventoryGallery::moveLeft(MASK mask) if (mInventoryGalleryMenu && mSelectedItemIDs.size() > 0 && mItemsAddedCount > 1) { - LLInventoryGalleryItem* item = mItemMap[mLastSelectedUUID]; + LLInventoryGalleryItem* item = mItemMap[mLastInteractedUUID]; if (mask == MASK_SHIFT) { - item = mItemMap[mLastSelectedUUID]; + item = mItemMap[mLastInteractedUUID]; } if (item) { @@ -1265,7 +1273,15 @@ void LLInventoryGallery::moveLeft(MASK mask) } else if (mask == MASK_SHIFT) { - toggleItemSelection(item_id, true); + if (item->isSelected()) + { + toggleItemSelection(mLastInteractedUUID, true); + } + else + { + toggleItemSelection(item_id, true); + } + mLastInteractedUUID = item_id; } else { @@ -1283,7 +1299,7 @@ void LLInventoryGallery::moveRight(MASK mask) if (mInventoryGalleryMenu && mSelectedItemIDs.size() > 0 && mItemsAddedCount > 1) { - LLInventoryGalleryItem* item = mItemMap[mLastSelectedUUID]; + LLInventoryGalleryItem* item = mItemMap[mLastInteractedUUID]; if (item) { S32 n = mItemIndexMap[item]; @@ -1300,7 +1316,15 @@ void LLInventoryGallery::moveRight(MASK mask) } else if (mask == MASK_SHIFT) { - toggleItemSelection(item_id, true); + if (item->isSelected()) + { + toggleItemSelection(mLastInteractedUUID, true); + } + else + { + toggleItemSelection(item_id, true); + } + mLastInteractedUUID = item_id; } else { @@ -1315,35 +1339,62 @@ void LLInventoryGallery::moveRight(MASK mask) void LLInventoryGallery::toggleSelectionRange(S32 start_idx, S32 end_idx) { LLInventoryGalleryItem* item = NULL; - for (S32 i = start_idx; i <= end_idx; i++) + if (end_idx > start_idx) + { + for (S32 i = start_idx; i <= end_idx; i++) + { + item = mIndexToItemMap[i]; + LLUUID item_id = item->getUUID(); + toggleItemSelection(item_id, true); + } + } + else { - item = mIndexToItemMap[i]; - LLUUID item_id = item->getUUID(); - toggleItemSelection(item_id, true); + for (S32 i = start_idx; i >= end_idx; i--) + { + item = mIndexToItemMap[i]; + LLUUID item_id = item->getUUID(); + toggleItemSelection(item_id, true); + } } } void LLInventoryGallery::toggleSelectionRangeFromLast(const LLUUID target) { - if (mLastSelectedUUID == target) + if (mLastInteractedUUID == target) { return; } - LLInventoryGalleryItem* last_item = mItemMap[mLastSelectedUUID]; + LLInventoryGalleryItem* last_item = mItemMap[mLastInteractedUUID]; LLInventoryGalleryItem* next_item = mItemMap[target]; if (last_item && next_item) { S32 last_idx = mItemIndexMap[last_item]; S32 next_idx = mItemIndexMap[next_item]; - if (last_idx < next_idx) + if (next_item->isSelected()) { - toggleSelectionRange(last_idx + 1, next_idx); + if (last_idx < next_idx) + { + toggleSelectionRange(last_idx, next_idx - 1); + } + else + { + toggleSelectionRange(last_idx, next_idx + 1); + } } else { - toggleSelectionRange(next_idx, last_idx - 1); + if (last_idx < next_idx) + { + toggleSelectionRange(last_idx + 1, next_idx); + } + else + { + toggleSelectionRange(last_idx - 1, next_idx); + } } } + mLastInteractedUUID = next_item->getUUID(); } void LLInventoryGallery::onFocusLost() @@ -1408,7 +1459,6 @@ void LLInventoryGallery::showContextMenu(LLUICtrl* ctrl, S32 x, S32 y, const LLU { if (std::find(mSelectedItemIDs.begin(), mSelectedItemIDs.end(), item_id) == mSelectedItemIDs.end()) { - mSelectedItemIDs.clear(); changeItemSelection(item_id, false); } uuid_vec_t selected_uuids(mSelectedItemIDs.begin(), mSelectedItemIDs.end()); @@ -1426,10 +1476,10 @@ void LLInventoryGallery::changeItemSelection(const LLUUID& item_id, bool scroll_ } } mSelectedItemIDs.clear(); + mItemsToSelect.clear(); if ((mItemMap.count(item_id) == 0) || mNeedsArrange) { - mItemsToSelect.clear(); mItemsToSelect.push_back(item_id); return; } @@ -1446,7 +1496,7 @@ void LLInventoryGallery::changeItemSelection(const LLUUID& item_id, bool scroll_ } mSelectedItemIDs.push_back(item_id); signalSelectionItemID(item_id); - mLastSelectedUUID = item_id; + mLastInteractedUUID = item_id; if (scroll_to_selection) { @@ -1473,7 +1523,7 @@ void LLInventoryGallery::addItemSelection(const LLUUID& item_id, bool scroll_to_ } mSelectedItemIDs.push_back(item_id); signalSelectionItemID(item_id); - mLastSelectedUUID = item_id; + mLastInteractedUUID = item_id; if (scroll_to_selection) { @@ -1507,9 +1557,9 @@ bool LLInventoryGallery::toggleItemSelection(const LLUUID& item_id, bool scroll_ } mSelectedItemIDs.push_back(item_id); signalSelectionItemID(item_id); - mLastSelectedUUID = item_id; result = true; } + mLastInteractedUUID = item_id; if (scroll_to_selection) { @@ -2338,6 +2388,43 @@ BOOL LLInventoryGallery::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, return handled; } +void LLInventoryGallery::startDrag() +{ + std::vector types; + uuid_vec_t ids; + LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_AGENT; + for (LLUUID& selected_id : mSelectedItemIDs) + { + const LLInventoryItem* item = gInventory.getItem(selected_id); + if (item) + { + if (item->getPermissions().getOwner() == ALEXANDRIA_LINDEN_ID) + { + src = LLToolDragAndDrop::SOURCE_LIBRARY; + } + + EDragAndDropType type = LLViewerAssetType::lookupDragAndDropType(item->getType()); + types.push_back(type); + ids.push_back(selected_id); + } + + const LLViewerInventoryCategory* cat = gInventory.getCategory(selected_id); + if (cat && gInventory.isObjectDescendentOf(selected_id, gInventory.getRootFolderID()) + && !LLFolderType::lookupIsProtectedType((cat)->getPreferredType())) + { + if (cat->getOwnerID() == ALEXANDRIA_LINDEN_ID) + { + src = LLToolDragAndDrop::SOURCE_LIBRARY; + } + + EDragAndDropType type = LLViewerAssetType::lookupDragAndDropType(cat->getType()); + types.push_back(type); + ids.push_back(selected_id); + } + } + LLToolDragAndDrop::getInstance()->beginMultiDrag(types, ids, LLToolDragAndDrop::SOURCE_AGENT); +} + bool LLInventoryGallery::areViewsInitialized() { return mGalleryCreated && mItemBuildQuery.empty(); @@ -2620,7 +2707,7 @@ BOOL LLInventoryGalleryItem::handleMouseDown(S32 x, S32 y, MASK mask) { mGallery->toggleSelectionRangeFromLast(mUUID); } - else + else if (!isSelected()) { mGallery->changeItemSelection(mUUID, false); } @@ -2663,28 +2750,10 @@ BOOL LLInventoryGalleryItem::handleHover(S32 x, S32 y, MASK mask) S32 screen_y; localPointToScreen(x, y, &screen_x, &screen_y ); - if(LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y)) + if(LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y) && mGallery) { - const LLInventoryItem *item = gInventory.getItem(mUUID); - if(item) - { - EDragAndDropType type = LLViewerAssetType::lookupDragAndDropType(item->getType()); - LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_LIBRARY; - if(item->getPermissions().getOwner() == gAgent.getID()) - { - src = LLToolDragAndDrop::SOURCE_AGENT; - } - LLToolDragAndDrop::getInstance()->beginDrag(type, item->getUUID(), src); - return LLToolDragAndDrop::getInstance()->handleHover(x, y, mask ); - } - - const LLInventoryCategory *cat = gInventory.getCategory(mUUID); - if(cat && gInventory.isObjectDescendentOf(mUUID, gInventory.getRootFolderID()) - && !LLFolderType::lookupIsProtectedType((cat)->getPreferredType())) - { - LLToolDragAndDrop::getInstance()->beginDrag(LLViewerAssetType::lookupDragAndDropType(cat->getType()), cat->getUUID(), LLToolDragAndDrop::SOURCE_AGENT); - return LLToolDragAndDrop::getInstance()->handleHover(x, y, mask ); - } + mGallery->startDrag(); + return LLToolDragAndDrop::getInstance()->handleHover(x, y, mask); } } return LLUICtrl::handleHover(x,y,mask); diff --git a/indra/newview/llinventorygallery.h b/indra/newview/llinventorygallery.h index 44e0dcf960..9b3f12701f 100644 --- a/indra/newview/llinventorygallery.h +++ b/indra/newview/llinventorygallery.h @@ -80,6 +80,7 @@ public: void onVisibilityChange(BOOL new_visibility) override; BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, EAcceptance* accept, std::string& tooltip_msg) override; + void startDrag(); BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override; BOOL handleKeyHere(KEY key, MASK mask) override; void moveUp(MASK mask); @@ -199,7 +200,7 @@ protected: LLInventoryObserver* mInventoryObserver; selection_deque mSelectedItemIDs; selection_deque mItemsToSelect; - LLUUID mLastSelectedUUID; + LLUUID mLastInteractedUUID; bool mIsInitialized; bool mRootDirty; -- cgit v1.2.3 From cfb69846f1e8309ed86d4a18eb26a889f6dbaccc Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Sat, 9 Sep 2023 00:00:22 +0300 Subject: SL-20261 Allow and resize existing textures as necessary for thumbnails --- indra/newview/llfloaterchangeitemthumbnail.cpp | 132 ++++++++++++++++++++- indra/newview/llfloaterchangeitemthumbnail.h | 9 +- indra/newview/llfloatersimplesnapshot.cpp | 15 +++ indra/newview/llfloatersimplesnapshot.h | 1 + indra/newview/llsnapshotlivepreview.cpp | 32 +---- indra/newview/lltexturectrl.cpp | 5 +- indra/newview/lltexturectrl.h | 2 +- indra/newview/llviewertexturelist.cpp | 39 ++++++ indra/newview/llviewertexturelist.h | 4 + .../skins/default/xui/en/floater_texture_ctrl.xml | 2 +- 10 files changed, 197 insertions(+), 44 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llfloaterchangeitemthumbnail.cpp b/indra/newview/llfloaterchangeitemthumbnail.cpp index 77212507ab..780130039b 100644 --- a/indra/newview/llfloaterchangeitemthumbnail.cpp +++ b/indra/newview/llfloaterchangeitemthumbnail.cpp @@ -512,6 +512,13 @@ void LLFloaterChangeItemThumbnail::onPasteFromClipboard(void *userdata) asset_id = potential_uuid; } } + + LLInventoryObject* obj = self->getInventoryObject(); + if (obj && obj->getThumbnailUUID() == asset_id) + { + // nothing to do + return; + } if (asset_id.notNull()) { self->assignAndValidateAsset(asset_id); @@ -547,6 +554,8 @@ struct ImageLoadedData LLUUID mObjectId; LLHandle mFloaterHandle; bool mSilent; + // Keep image reference to prevent deletion on timeout + LLPointer mTexturep; }; void LLFloaterChangeItemThumbnail::assignAndValidateAsset(const LLUUID &asset_id, bool silent) @@ -576,8 +585,9 @@ void LLFloaterChangeItemThumbnail::assignAndValidateAsset(const LLUUID &asset_id data->mThumbnailId = asset_id; data->mFloaterHandle = getHandle(); data->mSilent = silent; + data->mTexturep = texturep; - texturep->setLoadedCallback(onImageLoaded, + texturep->setLoadedCallback(onImageDataLoaded, MAX_DISCARD_LEVEL, // Don't need full image, just size data FALSE, FALSE, @@ -636,7 +646,7 @@ bool LLFloaterChangeItemThumbnail::validateAsset(const LLUUID &asset_id) } //static -void LLFloaterChangeItemThumbnail::onImageLoaded( +void LLFloaterChangeItemThumbnail::onImageDataLoaded( BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, @@ -678,6 +688,45 @@ void LLFloaterChangeItemThumbnail::onImageLoaded( delete data; } +//static +void LLFloaterChangeItemThumbnail::onFullImageLoaded( + BOOL success, + LLViewerFetchedTexture* src_vi, + LLImageRaw* src, + LLImageRaw* aux_src, + S32 discard_level, + BOOL final, + void* userdata) +{ + if (!userdata) return; + + if (!final && success) return; //not done yet + + ImageLoadedData* data = (ImageLoadedData*)userdata; + + if (success) + { + if (src_vi->getFullWidth() != src_vi->getFullHeight() + || src_vi->getFullWidth() < LLFloaterSimpleSnapshot::THUMBNAIL_SNAPSHOT_DIM_MIN) + { + if (!data->mSilent) + { + LLNotificationsUtil::add("ThumbnailDimentionsLimit"); + } + } + else if (src_vi->getFullWidth() > LLFloaterSimpleSnapshot::THUMBNAIL_SNAPSHOT_DIM_MAX) + { + LLFloaterSimpleSnapshot::uploadThumbnail(src, data->mObjectId, LLUUID::null); + } + else + { + setThumbnailId(data->mThumbnailId, data->mObjectId); + } + } + + delete data; +} + void LLFloaterChangeItemThumbnail::showTexturePicker(const LLUUID &thumbnail_id) { // show hourglass cursor when loading inventory window @@ -725,8 +774,7 @@ void LLFloaterChangeItemThumbnail::showTexturePicker(const LLUUID &thumbnail_id) texture_floaterp->setBakeTextureEnabled(FALSE); texture_floaterp->setCanApplyImmediately(false); texture_floaterp->setCanApply(false, true, false /*Hide 'preview disabled'*/); - texture_floaterp->setDimentionsLimits(LLFloaterSimpleSnapshot::THUMBNAIL_SNAPSHOT_DIM_MAX, - LLFloaterSimpleSnapshot::THUMBNAIL_SNAPSHOT_DIM_MIN); + texture_floaterp->setMinDimentionsLimits(LLFloaterSimpleSnapshot::THUMBNAIL_SNAPSHOT_DIM_MIN); addDependentFloater(texture_floaterp); } @@ -743,14 +791,86 @@ void LLFloaterChangeItemThumbnail::onTexturePickerCommit() if (floaterp) { LLUUID asset_id = floaterp->getAssetID(); - if (validateAsset(asset_id)) + + if (asset_id.isNull()) { setThumbnailId(asset_id); + return; } - else + + LLInventoryObject* obj = getInventoryObject(); + if (obj && obj->getThumbnailUUID() == asset_id) + { + // nothing to do + return; + } + + LLPointer texturep = LLViewerTextureManager::findFetchedTexture(asset_id, TEX_LIST_STANDARD); + if (!texturep) + { + LL_WARNS() << "Image " << asset_id << " doesn't exist" << LL_ENDL; + return; + } + + if (texturep->isMissingAsset()) + { + LL_WARNS() << "Image " << asset_id << " is missing" << LL_ENDL; + return; + } + + if (texturep->getFullWidth() != texturep->getFullHeight()) + { + LLNotificationsUtil::add("ThumbnailDimentionsLimit"); + return; + } + + if (texturep->getFullWidth() < LLFloaterSimpleSnapshot::THUMBNAIL_SNAPSHOT_DIM_MIN + && texturep->getFullWidth() > 0) { LLNotificationsUtil::add("ThumbnailDimentionsLimit"); + return; + } + + if (texturep->getFullWidth() > LLFloaterSimpleSnapshot::THUMBNAIL_SNAPSHOT_DIM_MAX + || texturep->getFullWidth() == 0) + { + if (texturep->isFullyLoaded() + && (texturep->getCachedRawImageLevel() == 0 || texturep->getRawImageLevel() == 0) + && (texturep->isCachedRawImageReady() || texturep->isRawImageValid())) + { + if (texturep->isRawImageValid()) + { + LLFloaterSimpleSnapshot::uploadThumbnail(texturep->getRawImage(), mItemId, mTaskId); + } + else + { + LLFloaterSimpleSnapshot::uploadThumbnail(texturep->getCachedRawImage(), mItemId, mTaskId); + } + } + else + { + ImageLoadedData* data = new ImageLoadedData(); + data->mObjectId = mItemId; + data->mThumbnailId = asset_id; + data->mFloaterHandle = getHandle(); + data->mSilent = false; + data->mTexturep = texturep; + + texturep->setBoostLevel(LLGLTexture::BOOST_PREVIEW); + texturep->setMinDiscardLevel(0); + texturep->setLoadedCallback(onFullImageLoaded, + 0, // Need best quality + TRUE, + FALSE, + (void*)data, + NULL, + FALSE); + texturep->forceToSaveRawImage(0); + } + return; } + + setThumbnailId(asset_id); } } diff --git a/indra/newview/llfloaterchangeitemthumbnail.h b/indra/newview/llfloaterchangeitemthumbnail.h index 02f934337b..a91e9b8ee9 100644 --- a/indra/newview/llfloaterchangeitemthumbnail.h +++ b/indra/newview/llfloaterchangeitemthumbnail.h @@ -83,13 +83,20 @@ private: static void onRemovalConfirmation(const LLSD& notification, const LLSD& response, LLHandle handle); void assignAndValidateAsset(const LLUUID &asset_id, bool silent = false); - static void onImageLoaded(BOOL success, + static void onImageDataLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata); + static void onFullImageLoaded(BOOL success, + LLViewerFetchedTexture* src_vi, + LLImageRaw* src, + LLImageRaw* aux_src, + S32 discard_level, + BOOL final, + void* userdata); void showTexturePicker(const LLUUID &thumbnail_id); void onTexturePickerCommit(); diff --git a/indra/newview/llfloatersimplesnapshot.cpp b/indra/newview/llfloatersimplesnapshot.cpp index 757ac605e3..58604c5628 100644 --- a/indra/newview/llfloatersimplesnapshot.cpp +++ b/indra/newview/llfloatersimplesnapshot.cpp @@ -397,6 +397,21 @@ void LLFloaterSimpleSnapshot::uploadThumbnail(const std::string &file_path, cons uploadImageUploadFile(temp_file, inventory_id, task_id); } +// static +void LLFloaterSimpleSnapshot::uploadThumbnail(LLPointer raw_image, const LLUUID& inventory_id, const LLUUID& task_id) +{ + std::string temp_file = gDirUtilp->getTempFilename(); + if (!LLViewerTextureList::createUploadFile(raw_image, temp_file, THUMBNAIL_SNAPSHOT_DIM_MAX, THUMBNAIL_SNAPSHOT_DIM_MIN)) + { + LLSD notif_args; + notif_args["REASON"] = LLImage::getLastError().c_str(); + LLNotificationsUtil::add("CannotUploadTexture", notif_args); + LL_WARNS("Thumbnail") << "Failed to upload thumbnail for " << inventory_id << " " << task_id << ", reason: " << notif_args["REASON"].asString() << LL_ENDL; + return; + } + uploadImageUploadFile(temp_file, inventory_id, task_id); +} + // static void LLFloaterSimpleSnapshot::uploadImageUploadFile(const std::string &temp_file, const LLUUID &inventory_id, const LLUUID &task_id) { diff --git a/indra/newview/llfloatersimplesnapshot.h b/indra/newview/llfloatersimplesnapshot.h index a2bf2946d4..91a81ee5c3 100644 --- a/indra/newview/llfloatersimplesnapshot.h +++ b/indra/newview/llfloatersimplesnapshot.h @@ -63,6 +63,7 @@ public: void postSave(); static void uploadThumbnail(const std::string &file_path, const LLUUID &inventory_id, const LLUUID &task_id); + static void uploadThumbnail(LLPointer raw_image, const LLUUID& inventory_id, const LLUUID& task_id); class Impl; friend class Impl; diff --git a/indra/newview/llsnapshotlivepreview.cpp b/indra/newview/llsnapshotlivepreview.cpp index 37ebcd1266..b7a1832b17 100644 --- a/indra/newview/llsnapshotlivepreview.cpp +++ b/indra/newview/llsnapshotlivepreview.cpp @@ -876,37 +876,7 @@ LLPointer LLSnapshotLivePreview::getEncodedImage() bool LLSnapshotLivePreview::createUploadFile(const std::string &out_filename, const S32 max_image_dimentions, const S32 min_image_dimentions) { - // make a copy, since convertToUploadFile modifies raw image - LLPointer raw_image = new LLImageRaw( - mPreviewImage->getData(), - mPreviewImage->getWidth(), - mPreviewImage->getHeight(), - mPreviewImage->getComponents()); - - LLPointer compressedImage = LLViewerTextureList::convertToUploadFile(raw_image, max_image_dimentions); - if (compressedImage->getWidth() < min_image_dimentions || compressedImage->getHeight() < min_image_dimentions) - { - std::string reason = llformat("Images below %d x %d pixels are not allowed. Actual size: %d x %dpx", - min_image_dimentions, - min_image_dimentions, - compressedImage->getWidth(), - compressedImage->getHeight()); - compressedImage->setLastError(reason); - return FALSE; - } - if (compressedImage.isNull()) - { - compressedImage->setLastError("Couldn't convert the image to jpeg2000."); - LL_INFOS() << "Couldn't convert to j2c, file : " << out_filename << LL_ENDL; - return false; - } - if (!compressedImage->save(out_filename)) - { - compressedImage->setLastError("Couldn't create the jpeg2000 image for upload."); - LL_INFOS() << "Couldn't create output file : " << out_filename << LL_ENDL; - return false; - } - return true; + return LLViewerTextureList::createUploadFile(mPreviewImage, out_filename, max_image_dimentions, min_image_dimentions); } // We actually estimate the data size so that we do not require actual compression when showing the preview diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index a746744e53..0c3730d084 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -1197,15 +1197,12 @@ void LLFloaterTexturePicker::setCanApply(bool can_preview, bool can_apply, bool mPreviewSettingChanged = true; } -void LLFloaterTexturePicker::setDimentionsLimits(S32 max_dim, S32 min_dim) +void LLFloaterTexturePicker::setMinDimentionsLimits(S32 min_dim) { - mMaxDim = max_dim; mMinDim = min_dim; std::string formatted_dims = llformat("%dx%d", mMinDim, mMinDim); mResolutionWarning->setTextArg("[MINTEXDIM]", formatted_dims); - formatted_dims = llformat("%dx%d", mMaxDim, mMaxDim); - mResolutionWarning->setTextArg("[MAXTEXDIM]", formatted_dims); } void LLFloaterTexturePicker::onFilterEdit(const std::string& search_string ) diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h index 60543191b6..7239b97552 100644 --- a/indra/newview/lltexturectrl.h +++ b/indra/newview/lltexturectrl.h @@ -323,7 +323,7 @@ public: void onFilterEdit(const std::string& search_string); void setCanApply(bool can_preview, bool can_apply, bool inworld_image = true); - void setDimentionsLimits(S32 max_dim, S32 min_dim); + void setMinDimentionsLimits(S32 min_dim); void setTextureSelectedCallback(const texture_selected_callback& cb) { mTextureSelectedCallback = cb; } void setOnFloaterCloseCallback(const floater_close_callback& cb) { mOnFloaterCloseCallback = cb; } void setOnFloaterCommitCallback(const floater_commit_callback& cb) { mOnFloaterCommitCallback = cb; } diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index d10e1ea8c9..f9fe8054a4 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -1285,6 +1285,45 @@ void LLViewerTextureList::decodeAllImages(F32 max_time) << LL_ENDL; } +bool LLViewerTextureList::createUploadFile(LLPointer raw_image, + const std::string& out_filename, + const S32 max_image_dimentions, + const S32 min_image_dimentions) +{ + LL_PROFILE_ZONE_SCOPED_CATEGORY_TEXTURE; + + // make a copy, since convertToUploadFile scales raw image + LLPointer scale_image = new LLImageRaw( + raw_image->getData(), + raw_image->getWidth(), + raw_image->getHeight(), + raw_image->getComponents()); + + LLPointer compressedImage = LLViewerTextureList::convertToUploadFile(scale_image, max_image_dimentions); + if (compressedImage->getWidth() < min_image_dimentions || compressedImage->getHeight() < min_image_dimentions) + { + std::string reason = llformat("Images below %d x %d pixels are not allowed. Actual size: %d x %dpx", + min_image_dimentions, + min_image_dimentions, + compressedImage->getWidth(), + compressedImage->getHeight()); + compressedImage->setLastError(reason); + return false; + } + if (compressedImage.isNull()) + { + compressedImage->setLastError("Couldn't convert the image to jpeg2000."); + LL_INFOS() << "Couldn't convert to j2c, file : " << out_filename << LL_ENDL; + return false; + } + if (!compressedImage->save(out_filename)) + { + compressedImage->setLastError("Couldn't create the jpeg2000 image for upload."); + LL_INFOS() << "Couldn't create output file : " << out_filename << LL_ENDL; + return false; + } + return true; +} BOOL LLViewerTextureList::createUploadFile(const std::string& filename, const std::string& out_filename, diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index 8fc65fc9ce..82dec6b329 100644 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -92,6 +92,10 @@ class LLViewerTextureList friend class LLLocalBitmap; public: + static bool createUploadFile(LLPointer raw_image, + const std::string& out_filename, + const S32 max_image_dimentions = LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT, + const S32 min_image_dimentions = 0); static BOOL createUploadFile(const std::string& filename, const std::string& out_filename, const U8 codec, diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml index 771113d989..8081af6673 100644 --- a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml +++ b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml @@ -96,7 +96,7 @@ name="over_limit_lbl" visible="false" top_delta="0"> - Selected texture is [TEXDIM]. Inventory image must be square, between [MINTEXDIM] and [MAXTEXDIM]. + Selected texture is [TEXDIM]. Inventory image must be square, no less than [MINTEXDIM]. -- cgit v1.2.3 From 1514ade10dc0f64c476ff405256b86fb6a1d9b57 Mon Sep 17 00:00:00 2001 From: RunitaiLinden Date: Mon, 11 Sep 2023 09:20:00 -0500 Subject: SL-19842 WIP -- Now that probes can override ambient, unroll ambient darkening hacks. --- indra/newview/app_settings/settings.xml | 8 ++++---- .../app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl | 8 ++------ indra/newview/llsettingsvo.cpp | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b4e149f0e0..35ab1e9d40 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -10654,7 +10654,7 @@ Type F32 Value - 0.7 + 1.0 RenderSkyAutoAdjustHDRScale @@ -10709,7 +10709,7 @@ Type F32 Value - 1.0 + 0.001 RenderSkySunlightScale @@ -10720,7 +10720,7 @@ Type F32 Value - 1.5 + 1.0 RenderSkyAmbientScale @@ -10731,7 +10731,7 @@ Type F32 Value - 0.5 + 0.7 RenderReflectionProbeMaxLocalLightAmbiance diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl index 53474ded7f..a8aa5a36a3 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsFuncs.glsl @@ -39,7 +39,6 @@ uniform float max_y; uniform vec3 glow; uniform float scene_light_strength; uniform float sun_moon_glow_factor; -uniform float sky_hdr_scale; uniform float sky_sunlight_scale; uniform float sky_ambient_scale; @@ -150,12 +149,9 @@ void calcAtmosphericVarsLinear(vec3 inPositionEye, vec3 norm, vec3 light_dir, ou // multiply to get similar colors as when the "scaleSoftClip" implementation was doubling color values // (allows for mixing of light sources other than sunlight e.g. reflection probes) - sunlit *= sky_sunlight_scale; //1.5; - amblit *= sky_ambient_scale; //0.5; + sunlit *= sky_sunlight_scale; + amblit *= sky_ambient_scale; - // override amblit with ambient_color if sky probe ambiance is not zero - amblit = mix(amblit, ambient_color, clamp(sky_hdr_scale-1.0, 0.0, 1.0)); - amblit = srgb_to_linear(amblit); amblit *= ambientLighting(norm, light_dir); } diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp index 9ccac82e63..b7c4dbe648 100644 --- a/indra/newview/llsettingsvo.cpp +++ b/indra/newview/llsettingsvo.cpp @@ -742,7 +742,7 @@ void LLSettingsVOSky::applySpecial(void *ptarget, bool force) { if (psky->getReflectionProbeAmbiance() != 0.f) { - shader->uniform3fv(LLShaderMgr::AMBIENT, getAmbientColor().mV); + shader->uniform3fv(LLShaderMgr::AMBIENT, LLVector3(ambient.mV)); shader->uniform1f(LLShaderMgr::SKY_HDR_SCALE, sqrtf(g)*2.0); // use a modifier here so 1.0 maps to the "most desirable" default and the maximum value doesn't go off the rails } else if (psky->canAutoAdjust() && should_auto_adjust) -- cgit v1.2.3 From f107d8431ccbd85bbe6f2ac0fd47cd409b8c0cfc Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Mon, 11 Sep 2023 17:31:08 +0300 Subject: SL-20199 Fix invalid or oversized folder being refetched indefinetely --- indra/newview/llinventorymodelbackgroundfetch.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'indra/newview') diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp index 44eccd955e..07d5713fc8 100644 --- a/indra/newview/llinventorymodelbackgroundfetch.cpp +++ b/indra/newview/llinventorymodelbackgroundfetch.cpp @@ -549,6 +549,13 @@ void LLInventoryModelBackgroundFetch::onAISFolderCalback(const LLUUID &request_i { LL_WARNS() << "Failed to download folder: " << request_id << " Requesting known content separately" << LL_ENDL; mFetchFolderQueue.push_back(FetchQueueInfo(request_id, FT_CONTENT_RECURSIVE)); + + // set folder's version to prevent viewer from trying to request folder indefinetely + LLViewerInventoryCategory* cat(gInventory.getCategory(request_id)); + if (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN) + { + cat->setVersion(0); + } } } else -- cgit v1.2.3 From 0b02bf5d262fe9a6de968686420c4d525ac04077 Mon Sep 17 00:00:00 2001 From: Alexander Gavriliuk Date: Mon, 7 Aug 2023 18:44:04 +0200 Subject: SL-20090 BugSplat Crash: LLViewerFetchedTexture::updateFetch(2099) --- indra/newview/llviewertexture.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index cb58588848..9fc092d4b9 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -2096,7 +2096,8 @@ bool LLViewerFetchedTexture::updateFetch() } } - llassert_always(mRawImage.notNull() || (!mNeedsCreateTexture && !mIsRawImageValid)); + llassert_always(mRawImage.notNull() || !mIsRawImageValid); + llassert_always(mRawImage.notNull() || !mNeedsCreateTexture); return mIsFetching ? true : false; } -- cgit v1.2.3 From b5c745185f4e3d2d215b5a171dc96a57d01eb079 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Tue, 12 Sep 2023 19:51:13 +0300 Subject: SL-20162 Option for debuging folder version in UI Shows folder's data instead of a suffix. Will need either a new inventory window or to toggle UI debug on early. --- indra/newview/llinventorybridge.cpp | 21 ++++++++++++++++++++- indra/newview/skins/default/xui/en/strings.xml | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 49b6275c3e..481b221870 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2321,13 +2321,32 @@ void LLFolderBridge::buildDisplayName() const std::string LLFolderBridge::getLabelSuffix() const { static LLCachedControl folder_loading_message_delay(gSavedSettings, "FolderLoadingMessageWaitTime", 0.5f); + static LLCachedControl xui_debug(gSavedSettings, "DebugShowXUINames", 0); if (mIsLoading && mTimeSinceRequestStart.getElapsedTimeF32() >= folder_loading_message_delay()) { return llformat(" ( %s ) ", LLTrans::getString("LoadingData").c_str()); } std::string suffix = ""; - if(mShowDescendantsCount) + if (xui_debug) + { + LLInventoryModel::cat_array_t* cats; + LLInventoryModel::item_array_t* items; + gInventory.getDirectDescendentsOf(getUUID(), cats, items); + + LLViewerInventoryCategory* cat = gInventory.getCategory(getUUID()); + if (cat) + { + LLStringUtil::format_map_t args; + args["[FOLDER_COUNT]"] = llformat("%d", cats->size()); + args["[ITEMS_COUNT]"] = llformat("%d", items->size()); + args["[VERSION]"] = llformat("%d", cat->getVersion()); + args["[VIEWER_DESCENDANT_COUNT]"] = llformat("%d", cats->size() + items->size()); + args["[SERVER_DESCENDANT_COUNT]"] = llformat("%d", cat->getDescendentCount()); + suffix = " " + LLTrans::getString("InventoryFolderDebug", args); + } + } + else if(mShowDescendantsCount) { LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t item_array; diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 4cdc8f2835..04b374cb00 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2355,6 +2355,7 @@ If you continue to receive this message, please contact Second Life support for Drag folders to this area to list them for sale on the [[MARKETPLACE_DASHBOARD_URL] Marketplace]. + ( F:[FOLDER_COUNT] I:[ITEMS_COUNT] V:[VERSION] DC:[VIEWER_DESCENDANT_COUNT]/[SERVER_DESCENDANT_COUNT] ) ( [ITEMS_COUNT] Items ) stock folder must be contained by a version folder -- cgit v1.2.3 From 2e7cf2c1afd9cec1b2e69a5ac7fbbe7ad745c457 Mon Sep 17 00:00:00 2001 From: Mnikolenko Productengine Date: Thu, 14 Sep 2023 14:55:41 +0300 Subject: SL-20268 FIXED clicking Cancel doesn't revert Materials perms --- indra/newview/llfloaterperms.cpp | 2 +- indra/newview/llfloaterperms.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview') diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp index fb55c6c6c4..b53839977e 100644 --- a/indra/newview/llfloaterperms.cpp +++ b/indra/newview/llfloaterperms.cpp @@ -122,7 +122,7 @@ const std::string LLFloaterPermsDefault::sCategoryNames[CAT_LAST] = "Notecards", "Gestures", "Wearables", - "Settings" + "Settings", "Materials" }; diff --git a/indra/newview/llfloaterperms.h b/indra/newview/llfloaterperms.h index 02359a256e..97ddec7cba 100644 --- a/indra/newview/llfloaterperms.h +++ b/indra/newview/llfloaterperms.h @@ -75,6 +75,7 @@ enum Categories CAT_GESTURES, CAT_WEARABLES, CAT_SETTINGS, + CAT_MATERIALS, CAT_LAST }; -- cgit v1.2.3 From fa47e4402b7925a45c5fec9fb9d92fb5e34a589e Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 14 Sep 2023 18:42:42 +0300 Subject: SL-20285 Sturdier cof and fixed link fetching --- indra/newview/llaisapi.cpp | 62 +++++++++++++++++++---------------- indra/newview/llaisapi.h | 2 +- indra/newview/llappearancemgr.cpp | 58 ++++++++++++++++---------------- indra/newview/llattachmentsmgr.cpp | 1 + indra/newview/llinventoryobserver.cpp | 19 ++++------- 5 files changed, 70 insertions(+), 72 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp index d8d30037c8..087cfb8d48 100644 --- a/indra/newview/llaisapi.cpp +++ b/indra/newview/llaisapi.cpp @@ -741,8 +741,10 @@ void AISAPI::FetchCategoryLinks(const LLUUID &catId, completion_t callback) (&LLCoreHttpUtil::HttpCoroutineAdapter::getAndSuspend), _1, _2, _3, _5, _6); + LLSD body; + body["depth"] = 0; LLCoprocedureManager::CoProcedure_t proc( - boost::bind(&AISAPI::InvokeAISCommandCoro, _1, getFn, url, LLUUID::null, LLSD(), callback, FETCHCATEGORYLINKS)); + boost::bind(&AISAPI::InvokeAISCommandCoro, _1, getFn, url, LLUUID::null, body, callback, FETCHCATEGORYLINKS)); EnqueueAISCommand("FetchCategoryLinks", proc); } @@ -1337,13 +1339,6 @@ void AISUpdate::parseCategory(const LLSD& category_map, S32 depth) return; } - // Check descendent count first, as it may be needed - // to populate newly created categories - if (category_map.has("_embedded")) - { - parseDescendentCount(category_id, category_map["_embedded"]); - } - LLPointer new_cat; if (curr_cat) { @@ -1366,6 +1361,13 @@ void AISUpdate::parseCategory(const LLSD& category_map, S32 depth) // *NOTE: unpackMessage does not unpack version or descendent count. if (rv) { + // Check descendent count first, as it may be needed + // to populate newly created categories + if (category_map.has("_embedded")) + { + parseDescendentCount(category_id, new_cat->getPreferredType(), category_map["_embedded"]); + } + if (mFetch) { uuid_int_map_t::const_iterator lookup_it = mCatDescendentsKnown.find(category_id); @@ -1379,10 +1381,20 @@ void AISUpdate::parseCategory(const LLSD& category_map, S32 depth) // set version only if we are sure this update has full data and embeded items // since viewer uses version to decide if folder and content still need fetching if (version > LLViewerInventoryCategory::VERSION_UNKNOWN - && (depth >= 0 || (curr_cat && curr_cat->getVersion() > LLViewerInventoryCategory::VERSION_UNKNOWN))) + && depth >= 0) { - LL_DEBUGS("Inventory") << "Setting version to " << version - << " for category " << category_id << LL_ENDL; + if (curr_cat && curr_cat->getVersion() > version) + { + LL_WARNS("Inventory") << "Version was " << curr_cat->getVersion() + << ", but fetch returned version " << version + << " for category " << category_id << LL_ENDL; + } + else + { + LL_DEBUGS("Inventory") << "Setting version to " << version + << " for category " << category_id << LL_ENDL; + } + new_cat->setVersion(version); } } @@ -1445,27 +1457,21 @@ void AISUpdate::parseCategory(const LLSD& category_map, S32 depth) } } -void AISUpdate::parseDescendentCount(const LLUUID& category_id, const LLSD& embedded) +void AISUpdate::parseDescendentCount(const LLUUID& category_id, LLFolderType::EType type, const LLSD& embedded) { - if (mType == AISAPI::FETCHCOF) + // We can only determine true descendent count if this contains all descendent types. + if (embedded.has("categories") && + embedded.has("links") && + embedded.has("items")) { - // contains only links - if (embedded.has("links")) - { - mCatDescendentsKnown[category_id] = embedded["links"].size(); - } + mCatDescendentsKnown[category_id] = embedded["categories"].size(); + mCatDescendentsKnown[category_id] += embedded["links"].size(); + mCatDescendentsKnown[category_id] += embedded["items"].size(); } - else + else if (mFetch && embedded.has("links") && (type == LLFolderType::FT_CURRENT_OUTFIT || type == LLFolderType::FT_OUTFIT)) { - // We can only determine true descendent count if this contains all descendent types. - if (embedded.has("categories") && - embedded.has("links") && - embedded.has("items")) - { - mCatDescendentsKnown[category_id] = embedded["categories"].size(); - mCatDescendentsKnown[category_id] += embedded["links"].size(); - mCatDescendentsKnown[category_id] += embedded["items"].size(); - } + // COF and outfits contain links only + mCatDescendentsKnown[category_id] = embedded["links"].size(); } } diff --git a/indra/newview/llaisapi.h b/indra/newview/llaisapi.h index 53c74ae078..0fdf4a0b74 100644 --- a/indra/newview/llaisapi.h +++ b/indra/newview/llaisapi.h @@ -118,7 +118,7 @@ public: void parseLink(const LLSD& link_map, S32 depth); void parseItem(const LLSD& link_map); void parseCategory(const LLSD& link_map, S32 depth); - void parseDescendentCount(const LLUUID& category_id, const LLSD& embedded); + void parseDescendentCount(const LLUUID& category_id, LLFolderType::EType type, const LLSD& embedded); void parseEmbedded(const LLSD& embedded, S32 depth); void parseEmbeddedLinks(const LLSD& links, S32 depth); void parseEmbeddedItems(const LLSD& items); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 80ef5e3bae..876ae23e62 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4446,7 +4446,7 @@ public: { LLViewerInventoryCategory* cat = gInventory.getCategory(*it); if (!cat) continue; - if (!isCategoryComplete(cat)) + if (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN) { // CHECK IT: isCategoryComplete() checks both version and descendant count but // fetch() only works for Unknown version and doesn't care about descentants, @@ -4456,6 +4456,12 @@ public: cat->fetch(); //blindly fetch it without seeing if anything else is fetching it. mIncomplete.push_back(*it); //Add to list of things being downloaded for this observer. } + else if (!isCategoryComplete(cat)) + { + LL_DEBUGS("Inventory") << "Categoty " << *it << " incomplete despite having version" << LL_ENDL; + LLInventoryModelBackgroundFetch::instance().scheduleFolderFetch(*it, true); + mIncomplete.push_back(*it); + } else if (ais3) { LLInventoryModel::cat_array_t* cats; @@ -4484,10 +4490,7 @@ public: if (incomplete_count > MAX_INDIVIDUAL_FETCH || (incomplete_count > 1 && complete_count == 0)) { - // To prevent premature removal from mIncomplete and - // since we are doing a full refetch anyway, mark unknown - cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN); - cat->fetch(); + LLInventoryModelBackgroundFetch::instance().scheduleFolderFetch(*it, true); mIncomplete.push_back(*it); } else @@ -4496,6 +4499,7 @@ public: mComplete.push_back(*it); } } + // else should have been handled by isCategoryComplete } else { @@ -4519,13 +4523,11 @@ public: // What we do here is get the complete information on the // items in the requested category, and set up an observer // that will wait for that to happen. - LLInventoryModel::cat_array_t cat_array; - LLInventoryModel::item_array_t item_array; - gInventory.collectDescendents(mComplete.front(), - cat_array, - item_array, - LLInventoryModel::EXCLUDE_TRASH); - S32 count = item_array.size(); + LLInventoryModel::cat_array_t* cats; + LLInventoryModel::item_array_t* items; + gInventory.getDirectDescendentsOf(mComplete.front(), cats, items); + + S32 count = items->size(); if(!count) { LL_WARNS() << "Nothing fetched in category " << mComplete.front() @@ -4537,11 +4539,13 @@ public: return; } - LL_INFOS() << "stage1 got " << item_array.size() << " items, passing to stage2 " << LL_ENDL; + LLViewerInventoryCategory* cat = gInventory.getCategory(mComplete.front()); + S32 version = cat ? cat->getVersion() : -2; + LL_INFOS() << "stage1, category " << mComplete.front() << " got " << count << " items, version " << version << " passing to stage2 " << LL_ENDL; uuid_vec_t ids; for(S32 i = 0; i < count; ++i) { - ids.push_back(item_array.at(i)->getUUID()); + ids.push_back(items->at(i)->getUUID()); } gInventory.removeObserver(this); @@ -4570,14 +4574,14 @@ void callAfterCOFFetch(nullary_func_t cb) { LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id); - if (cat->getVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN) + + if (AISAPI::isAvailable()) { - if (AISAPI::isAvailable()) - { - // Mark cof (update timer) so that background fetch won't request it - cat->setFetching(LLViewerInventoryCategory::FETCH_RECURSIVE); - // Assume that we have no relevant cache. Fetch cof, and items cof's links point to. - AISAPI::FetchCOF([cb](const LLUUID& id) + // Mark cof (update timer) so that background fetch won't request it + cat->setFetching(LLViewerInventoryCategory::FETCH_RECURSIVE); + // For reliability assume that we have no relevant cache, so + // fetch cof along with items cof's links point to. + AISAPI::FetchCOF([cb](const LLUUID& id) { cb(); LLUUID cat_id = LLAppearanceMgr::instance().getCOF(); @@ -4587,18 +4591,12 @@ void callAfterCOFFetch(nullary_func_t cb) cat->setFetching(LLViewerInventoryCategory::FETCH_NONE); } }); - } - else - { - LL_WARNS() << "AIS API v3 not available, can't use AISAPI::FetchCOF" << LL_ENDL; - // startup should have marked folder as fetching, remove that - cat->setFetching(LLViewerInventoryCategory::FETCH_NONE); - callAfterCategoryFetch(cat_id, cb); - } } else { - // Assume that cache is present. Process like a normal folder. + LL_INFOS() << "AIS API v3 not available, using callAfterCategoryFetch" << LL_ENDL; + // startup should have marked folder as fetching, remove that + cat->setFetching(LLViewerInventoryCategory::FETCH_NONE); callAfterCategoryFetch(cat_id, cb); } } diff --git a/indra/newview/llattachmentsmgr.cpp b/indra/newview/llattachmentsmgr.cpp index bcd89cf8db..d3fce306bc 100644 --- a/indra/newview/llattachmentsmgr.cpp +++ b/indra/newview/llattachmentsmgr.cpp @@ -243,6 +243,7 @@ void LLAttachmentsMgr::linkRecentlyArrivedAttachments() if (LLAppearanceMgr::instance().getCOFVersion() == LLViewerInventoryCategory::VERSION_UNKNOWN) { // Wait for cof to load + LL_DEBUGS_ONCE("Avatar") << "Received atachments, but cof isn't loaded yet, postponing processing" << LL_ENDL; return; } diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 227d4285eb..51be44bef4 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -334,21 +334,14 @@ void LLInventoryFetchItemsObserver::startFetch() if (aisv3) { - const S32 MAX_INDIVIDUAL_REQUESTS = 10; + const S32 MAX_INDIVIDUAL_REQUESTS = 7; for (requests_by_folders_t::value_type &folder : requests) { - LLViewerInventoryCategory* cat = gInventory.getCategory(folder.first); if (folder.second.size() > MAX_INDIVIDUAL_REQUESTS) { // requesting one by one will take a while // do whole folder - if (cat) - { - // Either drop version or use scheduleFolderFetch to force-fetch - // otherwise background fetch will ignore folders with set version - cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN); - } - LLInventoryModelBackgroundFetch::getInstance()->start(folder.first); + LLInventoryModelBackgroundFetch::getInstance()->scheduleFolderFetch(folder.first, true); } else { @@ -360,12 +353,11 @@ void LLInventoryFetchItemsObserver::startFetch() // start fetching whole folder since it's not ready either way cat->fetch(); } - else if (cat->getViewerDescendentCount() <= folder.second.size()) + else if (cat->getViewerDescendentCount() <= folder.second.size() + || cat->getDescendentCount() <= folder.second.size()) { // Start fetching whole folder since we need all items - // Drop version or use scheduleFolderFetch - cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN); - cat->fetch(); + LLInventoryModelBackgroundFetch::getInstance()->scheduleFolderFetch(folder.first, true); } else @@ -382,6 +374,7 @@ void LLInventoryFetchItemsObserver::startFetch() // Isn't supposed to happen? We should have all folders // and if item exists, folder is supposed to exist as well. llassert(false); + LL_WARNS("Inventory") << "Missing folder: " << folder.first << " fetching items individually" << LL_ENDL; // get items one by one for (LLUUID &item_id : folder.second) -- cgit v1.2.3 From b09c19d27ceb2a3695cd688b1ccffcb3084f0e46 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 14 Sep 2023 20:58:42 +0300 Subject: SL-20285 Updated individual request count declaration --- indra/newview/llappearancemgr.cpp | 3 +-- indra/newview/llinventoryobserver.cpp | 4 ++-- indra/newview/llinventoryobserver.h | 3 +++ 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 876ae23e62..8010b84c20 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4486,8 +4486,7 @@ public: // AIS can fetch couple items, but if there // is more than a dozen it will be very slow // it's faster to get whole folder in such case - const S32 MAX_INDIVIDUAL_FETCH = 10; - if (incomplete_count > MAX_INDIVIDUAL_FETCH + if (incomplete_count > LLInventoryFetchItemsObserver::MAX_INDIVIDUAL_ITEM_REQUESTS || (incomplete_count > 1 && complete_count == 0)) { LLInventoryModelBackgroundFetch::instance().scheduleFolderFetch(*it, true); diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp index 51be44bef4..281a8bc789 100644 --- a/indra/newview/llinventoryobserver.cpp +++ b/indra/newview/llinventoryobserver.cpp @@ -58,6 +58,7 @@ #include "llsdutil.h" #include +const S32 LLInventoryFetchItemsObserver::MAX_INDIVIDUAL_ITEM_REQUESTS = 7; const F32 LLInventoryFetchItemsObserver::FETCH_TIMER_EXPIRY = 60.0f; @@ -334,10 +335,9 @@ void LLInventoryFetchItemsObserver::startFetch() if (aisv3) { - const S32 MAX_INDIVIDUAL_REQUESTS = 7; for (requests_by_folders_t::value_type &folder : requests) { - if (folder.second.size() > MAX_INDIVIDUAL_REQUESTS) + if (folder.second.size() > MAX_INDIVIDUAL_ITEM_REQUESTS) { // requesting one by one will take a while // do whole folder diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h index 93109a70ac..bec08d2cdf 100644 --- a/indra/newview/llinventoryobserver.h +++ b/indra/newview/llinventoryobserver.h @@ -104,6 +104,9 @@ public: /*virtual*/ void startFetch(); /*virtual*/ void changed(U32 mask); + + // For attempts to group requests if too many items are requested + static const S32 MAX_INDIVIDUAL_ITEM_REQUESTS; private: LLTimer mFetchingPeriod; -- cgit v1.2.3 From 76c6dc025d39adba54cff2c112337274efaddd10 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Thu, 14 Sep 2023 23:59:58 +0300 Subject: SL-19826 Gallery multiselect support, fix right click --- indra/newview/llinventorygallery.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 1ee08eb01c..4838ba7a47 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -1012,20 +1012,16 @@ BOOL LLInventoryGallery::handleRightMouseDown(S32 x, S32 y, MASK mask) { if (mSelectedItemIDs.size() > 0) { - selection_deque::iterator iter = mSelectedItemIDs.begin(); - if (mItemMap[*iter]) - { - mItemMap[*iter]->setFocus(false); - setFocus(true); - } + setFocus(true); } - clearSelection(); + mLastInteractedUUID = LLUUID::null; // Scroll is going to always return true BOOL res = LLPanel::handleRightMouseDown(x, y, mask); - if (mSelectedItemIDs.empty()) + if (mLastInteractedUUID.isNull()) // no child were hit { + clearSelection(); if (mInventoryGalleryMenu && mFolderID.notNull()) { uuid_vec_t selected_uuids; @@ -1487,6 +1483,7 @@ void LLInventoryGallery::changeItemSelection(const LLUUID& item_id, bool scroll_ && std::find(mSelectedItemIDs.begin(), mSelectedItemIDs.end(), item_id) != mSelectedItemIDs.end()) { // Already selected + mLastInteractedUUID = item_id; return; } @@ -1514,6 +1511,7 @@ void LLInventoryGallery::addItemSelection(const LLUUID& item_id, bool scroll_to_ if (std::find(mSelectedItemIDs.begin(), mSelectedItemIDs.end(), item_id) != mSelectedItemIDs.end()) { // Already selected + mLastInteractedUUID = item_id; return; } @@ -2707,7 +2705,7 @@ BOOL LLInventoryGalleryItem::handleMouseDown(S32 x, S32 y, MASK mask) { mGallery->toggleSelectionRangeFromLast(mUUID); } - else if (!isSelected()) + else { mGallery->changeItemSelection(mUUID, false); } @@ -2724,6 +2722,15 @@ BOOL LLInventoryGalleryItem::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLInventoryGalleryItem::handleRightMouseDown(S32 x, S32 y, MASK mask) { + if (!isSelected()) + { + mGallery->changeItemSelection(mUUID, false); + } + else + { + // refresh last interacted + mGallery->addItemSelection(mUUID, false); + } setFocus(TRUE); mGallery->claimEditHandler(); mGallery->showContextMenu(this, x, y, mUUID); -- cgit v1.2.3 From 69a98a8465f910d58911456dfe840a7b829ccc65 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 13 Sep 2023 18:50:42 +0300 Subject: SL-20278 Disconnect saving MFA from saving password --- indra/newview/llfloaterforgetuser.cpp | 1 + indra/newview/lllogininstance.cpp | 28 +++++++++++++++------ indra/newview/lllogininstance.h | 3 +++ indra/newview/llpanellogin.cpp | 5 ---- indra/newview/llstartup.cpp | 11 +++++++- indra/newview/lltoastalertpanel.cpp | 8 ++++++ .../newview/skins/default/xui/en/notifications.xml | 29 ++++++++++++++++++++-- 7 files changed, 69 insertions(+), 16 deletions(-) (limited to 'indra/newview') diff --git a/indra/newview/llfloaterforgetuser.cpp b/indra/newview/llfloaterforgetuser.cpp index 97b022699f..05e0b07584 100644 --- a/indra/newview/llfloaterforgetuser.cpp +++ b/indra/newview/llfloaterforgetuser.cpp @@ -229,6 +229,7 @@ void LLFloaterForgetUser::forgetUser(const std::string &userid, const std::strin { // Remove creds gSecAPIHandler->removeFromCredentialMap("login_list", grid, userid); + gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, userid); LLPointer cred = gSecAPIHandler->loadCredential(grid); if (cred.notNull() && cred->userID() == userid) diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index dd8c9b2dde..01496fa7ce 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -87,6 +87,7 @@ LLLoginInstance::LLLoginInstance() : mLoginModule(new LLLogin()), mNotifications(NULL), mLoginState("offline"), + mSaveMFA(true), mAttemptComplete(false), mTransferRate(0.0f), mDispatcher("LLLoginInstance", "change") @@ -449,10 +450,7 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event) gViewerWindow->setShowProgress(FALSE); } - LLSD args(llsd::map( "MESSAGE", LLTrans::getString(response["message_id"]) )); - LLSD payload; - LLNotificationsUtil::add("PromptMFAToken", args, payload, - boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2)); + showMFAChallange(LLTrans::getString(response["message_id"])); } else if( reason_response == "key" || reason_response == "presence" @@ -540,10 +538,7 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key) { // SL-18511 this TOS failure happened while we are in the middle of an MFA challenge/response. // the previously entered token is very likely expired, so prompt again - LLSD args(llsd::map( "MESSAGE", LLTrans::getString("LoginFailedAuthenticationMFARequired") )); - LLSD payload; - LLNotificationsUtil::add("PromptMFAToken", args, payload, - boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2)); + showMFAChallange(LLTrans::getString("LoginFailedAuthenticationMFARequired")); } else { @@ -561,6 +556,22 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key) return true; } +void LLLoginInstance::showMFAChallange(const std::string& message) +{ + LLSD args(llsd::map("MESSAGE", message)); + LLSD payload; + if (gSavedSettings.getBOOL("RememberUser")) + { + LLNotificationsUtil::add("PromptMFATokenWithSave", args, payload, + boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2)); + } + else + { + LLNotificationsUtil::add("PromptMFAToken", args, payload, + boost::bind(&LLLoginInstance::handleMFAChallenge, this, _1, _2)); + } +} + bool LLLoginInstance::handleMFAChallenge(LLSD const & notif, LLSD const & response) { bool continue_clicked = response["continue"].asBoolean(); @@ -576,6 +587,7 @@ bool LLLoginInstance::handleMFAChallenge(LLSD const & notif, LLSD const & respon // Set the request data to true and retry login. mRequestData["params"]["token"] = token; + mSaveMFA = response.has("ignore") ? response["ignore"].asBoolean() : false; reconnect(); } else { LL_INFOS("LLLogin") << "PromptMFAToken: no token, attemptComplete" << LL_ENDL; diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h index ee3ef0e4b1..2e9aab7c00 100644 --- a/indra/newview/lllogininstance.h +++ b/indra/newview/lllogininstance.h @@ -56,6 +56,7 @@ public: bool authSuccess() { return mAttemptComplete && mLoginState == "online"; } const std::string& getLoginState() { return mLoginState; } + bool saveMFA() const { return mSaveMFA; } LLSD getResponse(const std::string& key) { return getResponse()[key]; } LLSD getResponse(); @@ -84,6 +85,7 @@ private: void syncWithUpdater(ResponsePtr resp, const LLSD& notification, const LLSD& response); bool handleTOSResponse(bool v, const std::string& key); + void showMFAChallange(const std::string& message); bool handleMFAChallenge(LLSD const & notif, LLSD const & response); void attemptComplete() { mAttemptComplete = true; } // In the future an event? @@ -95,6 +97,7 @@ private: LLSD mRequestData; LLSD mResponseData; bool mAttemptComplete; + bool mSaveMFA; F64 mTransferRate; std::string mSerialNumber; int mLastExecEvent; diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index 8f1e57e44c..49756a4e09 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -1110,11 +1110,6 @@ void LLPanelLogin::onRememberPasswordCheck(void*) std::string grid(LLGridManager::getInstance()->getGridId()); std::string user_id(cred->userID()); - if (!remember_password) - { - gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, user_id); - gSecAPIHandler->syncProtectedMap(); - } } } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index ced6ffa32e..ad87fca25b 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -3795,7 +3795,9 @@ bool process_login_success_response() // Only save mfa_hash for future logins if the user wants their info remembered. - if(response.has("mfa_hash") && gSavedSettings.getBOOL("RememberUser") && gSavedSettings.getBOOL("RememberPassword")) + if(response.has("mfa_hash") + && gSavedSettings.getBOOL("RememberUser") + && LLLoginInstance::getInstance()->saveMFA()) { std::string grid(LLGridManager::getInstance()->getGridId()); std::string user_id(gUserCredential->userID()); @@ -3803,6 +3805,13 @@ bool process_login_success_response() // TODO(brad) - related to SL-17223 consider building a better interface that sync's automatically gSecAPIHandler->syncProtectedMap(); } + else if (!LLLoginInstance::getInstance()->saveMFA()) + { + std::string grid(LLGridManager::getInstance()->getGridId()); + std::string user_id(gUserCredential->userID()); + gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, user_id); + gSecAPIHandler->syncProtectedMap(); + } bool success = false; // JC: gesture loading done below, when we have an asset system diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index 692e8d91a9..d35833fac9 100644 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -279,6 +279,10 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal if (!edit_text_name.empty()) { S32 y = VPAD + BTN_HEIGHT + VPAD/2; + if (form->getIgnoreType() != LLNotificationForm::IGNORE_NO) + { + y += EDITOR_HEIGHT; + } mLineEditor = LLUICtrlFactory::getInstance()->createFromFile("alert_line_editor.xml", this, LLPanel::child_registry_t::instance()); if (mLineEditor) @@ -522,6 +526,10 @@ void LLToastAlertPanel::onButtonPressed( const LLSD& data, S32 button ) { response[mLineEditor->getName()] = mLineEditor->getValue(); } + if (mNotification->getForm()->getIgnoreType() != LLNotificationForm::IGNORE_NO) + { + response["ignore"] = mNotification->isIgnored(); + } response[button_data->mButton->getName()] = true; // If we declared a URL and chose the URL option, go to the url diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index ef720e65e3..204fead7e0 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -11988,16 +11988,41 @@ Packing: [PACK_TIME]s [PSIZE]KB Unpacking: [UNPACK_TIME]s [USIZE]KB fail - + + + [MESSAGE] + confirm +
+ +