diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 07418d1b5e98354beae9e369027c4caf37ea9b65..9d911777d12f2000448e790b61cdc7a9491b387f 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8635,7 +8635,7 @@ <key>Type</key> <string>Boolean</string> <key>Value</key> - <integer>0</integer> + <integer>1</integer> </map> <key>ShowBetaGrids</key> <map> diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index f7ae320a6fc9f29f7740c93c8c3ed1157fb1cf00..1edc96e1652200861bc4e909d2888b19d2a3cd9b 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -115,6 +115,7 @@ void LLInitialWearablesFetch::processContents() LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t wearable_array; LLFindWearables is_wearable; + llassert_always(mComplete.size() != 0); gInventory.collectDescendentsIf(mComplete.front(), cat_array, wearable_array, LLInventoryModel::EXCLUDE_TRASH, is_wearable); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 94286fd799f8b120ce17d13066ae5aa6830345d1..7159d89d21d09b201e214794a6e4d9928977e5f2 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2307,12 +2307,17 @@ bool LLAppearanceMgr::updateBaseOutfit() void LLAppearanceMgr::divvyWearablesByType(const LLInventoryModel::item_array_t& items, wearables_by_type_t& items_by_type) { - items_by_type.reserve(LLWearableType::WT_COUNT); + items_by_type.resize(LLWearableType::WT_COUNT); if (items.empty()) return; for (S32 i=0; i<items.count(); i++) { LLViewerInventoryItem *item = items.get(i); + if (!item) + { + LL_WARNS("Appearance") << "NULL item found" << llendl; + continue; + } // Ignore non-wearables. if (!item->isWearableType()) continue; @@ -2335,6 +2340,7 @@ std::string build_order_string(LLWearableType::EType type, U32 i) struct WearablesOrderComparator { + LOG_CLASS(WearablesOrderComparator); WearablesOrderComparator(const LLWearableType::EType type) { mControlSize = build_order_string(type, 0).size(); diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 78c2142ea563b52f2d37b137726a243110966d12..c65d9dc9eeda8448d3c3042fb336a14d2d095fa4 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -42,6 +42,8 @@ class LLOutfitUnLockTimer; class LLAppearanceMgr: public LLSingleton<LLAppearanceMgr> { + LOG_CLASS(LLAppearanceMgr); + friend class LLSingleton<LLAppearanceMgr>; friend class LLOutfitUnLockTimer; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index b00a663a9af78afb9ce9ed4691f8d52701dd2c4d..129c9aec142de34d4d4392368a8aa9068b4d0a3b 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -3077,7 +3077,9 @@ public: std::string saved; if(offline == IM_OFFLINE) { - saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); + LLStringUtil::format_map_t args; + args["[LONG_TIMESTAMP]"] = formatted_time(timestamp); + saved = LLTrans::getString("Saved_message", args); } std::string buffer = saved + message; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 08229d3a50d00a4bfab48bad8043e23495b194c6..53835f0166ebed6a4cb51644243d84661d3f8527 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -501,7 +501,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id, for(S32 i = 0; i < count; ++i) { item = item_array->get(i); - if (item->getActualType() == LLAssetType::AT_LINK_FOLDER) + if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER) { LLViewerInventoryCategory *linked_cat = item->getLinkedCategory(); if (linked_cat && linked_cat->getPreferredType() != LLFolderType::FT_OUTFIT) diff --git a/indra/newview/lllandmarklist.cpp b/indra/newview/lllandmarklist.cpp index 87257832b654c03ba6ca5b3fe5aebe226cb4f8a1..dd402de394a9564037492d74123440e8d417c7d8 100644 --- a/indra/newview/lllandmarklist.cpp +++ b/indra/newview/lllandmarklist.cpp @@ -159,6 +159,11 @@ void LLLandmarkList::processGetAssetReply( } +BOOL LLLandmarkList::isAssetInLoadedCallbackMap(const LLUUID& asset_uuid) +{ + return mLoadedCallbackMap.find(asset_uuid) != mLoadedCallbackMap.end(); +} + BOOL LLLandmarkList::assetExists(const LLUUID& asset_uuid) { return mList.count(asset_uuid) != 0 || mBadList.count(asset_uuid) != 0; diff --git a/indra/newview/lllandmarklist.h b/indra/newview/lllandmarklist.h index 6d32f0e75b44b8686a0de748d53baa53bc1a70bf..3356f866ce453aa83c8ebaef1e783e84fd7a8d0a 100644 --- a/indra/newview/lllandmarklist.h +++ b/indra/newview/lllandmarklist.h @@ -59,6 +59,10 @@ public: S32 status, LLExtStat ext_status ); + // Returns TRUE if loading the landmark with given asset_uuid has been requested + // but is not complete yet. + BOOL isAssetInLoadedCallbackMap(const LLUUID& asset_uuid); + protected: void onRegionHandle(const LLUUID& landmark_id); void makeCallbacks(const LLUUID& landmark_id); diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index 43814ac652095650b994275b277d850114e6c37a..ff15e3f08ed09b09afc7c5a12248dd05088d202b 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -974,7 +974,28 @@ bool LLLandmarksPanel::isActionEnabled(const LLSD& userdata) const ) { // disable some commands for multi-selection. EXT-1757 - return root_folder_view && root_folder_view->getSelectedCount() == 1; + bool is_single_selection = root_folder_view && root_folder_view->getSelectedCount() == 1; + if (!is_single_selection) + { + return false; + } + + if ("show_on_map" == command_name) + { + LLFolderViewItem* cur_item = root_folder_view->getCurSelectedItem(); + if (!cur_item) return false; + + LLViewerInventoryItem* inv_item = cur_item->getInventoryItem(); + if (!inv_item) return false; + + LLUUID asset_uuid = inv_item->getAssetUUID(); + if (asset_uuid.isNull()) return false; + + // Disable "Show on Map" if landmark loading is in progress. + return !gLandmarkList.isAssetInLoadedCallbackMap(asset_uuid); + } + + return true; } else if ("rename" == command_name) { @@ -1099,7 +1120,8 @@ bool LLLandmarksPanel::canSelectedBeModified(const std::string& command_name) co if ("cut" == command_name) { - can_be_modified = root_folder->canCut(); + // "Cut" disabled for folders. See EXT-8697. + can_be_modified = root_folder->canCut() && listenerp->getInventoryType() != LLInventoryType::IT_CATEGORY; } else if ("rename" == command_name) { @@ -1188,6 +1210,7 @@ void LLLandmarksPanel::doShowOnMap(LLLandmark* landmark) } mShowOnMapBtn->setEnabled(TRUE); + mGearLandmarkMenu->setItemEnabled("show_on_map", TRUE); } void LLLandmarksPanel::doProcessParcelInfo(LLLandmark* landmark, diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 92c61ddefebc854dcce52bf12fe26312c1369375..82bc084f6820f144c54fe4284062497ae1c99fd3 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2183,7 +2183,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) std::string saved; if(offline == IM_OFFLINE) { - saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); + LLStringUtil::format_map_t args; + args["[LONG_TIMESTAMP]"] = formatted_time(timestamp); + saved = LLTrans::getString("Saved_message", args); } buffer = saved + message; diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml index 0f02de866b9a91a0a8f96b76cb8c4fe18d4335db..b373be438280c7a54330cf7f2bdb16a39b5714a5 100644 --- a/indra/newview/skins/default/xui/de/panel_login.xml +++ b/indra/newview/skins/default/xui/de/panel_login.xml @@ -20,7 +20,7 @@ <text name="start_location_text"> Hier anfangen: </text> - <combo_box name="start_location_combo" width="150"> + <combo_box name="start_location_combo"> <combo_box.item label="Mein letzter Standort" name="MyLastLocation"/> <combo_box.item label="Mein Zuhause" name="MyHome"/> <combo_box.item label="<Region eingeben>" name="Typeregionname"/> diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml index 9fac296e26cd7aaba7b15a840b30a6b790c80f53..751dc0bf3e4b4b5a220617f3f7c16ba685ce319d 100644 --- a/indra/newview/skins/default/xui/en/menu_login.xml +++ b/indra/newview/skins/default/xui/en/menu_login.xml @@ -64,6 +64,7 @@ parameter="UseDebugMenus" /> </menu_item_check> <menu + create_jump_keys="true" visible="false" create_jump_keys="true" label="Debug" @@ -102,6 +103,7 @@ </menu_item_call> --> <menu + create_jump_keys="true" label="UI Tests" name="UI Tests" tear_off="true"> diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 0b85074eb6ce4249c9a75a31b6f09bf7a313ccec..c79a484ef63d5b46f00b71bfe17a8dd3433f152d 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -4,6 +4,7 @@ follows="left|top|right" name="Main Menu"> <menu + create_jump_keys="true" label="Me" name="Me" tear_off="true"> @@ -94,6 +95,7 @@ parameter="voice_effect" /> </menu_item_check> <menu + create_jump_keys="true" label="My Status" name="Status" tear_off="true"> @@ -138,6 +140,7 @@ </menu_item_call> </menu> <menu + create_jump_keys="true" label="Communicate" name="Communicate" tear_off="true"> @@ -188,6 +191,7 @@ </menu_item_call> </menu> <menu + create_jump_keys="true" label="World" name="World" tear_off="true"> @@ -901,6 +905,7 @@ </menu> </menu> <menu + create_jump_keys="true" label="Help" name="Help" tear_off="true"> @@ -947,6 +952,7 @@ </menu_item_call> </menu> <menu + create_jump_keys="true" label="Advanced" name="Advanced" tear_off="true" @@ -1451,6 +1457,7 @@ <menu_item_separator/> <menu + create_jump_keys="true" label="Shortcuts" name="Shortcuts" tear_off="true" diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 0499873fb071365dd126ca161374489917f1dc72..6b136495d2960b53149ff41b56a39d77fd7d47b9 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -130,7 +130,7 @@ control_name="LoginLocation" max_chars="128" top_pad="0" name="start_location_combo" - width="135"> + width="170"> <combo_box.item label="My last location" name="MyLastLocation" diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index cf174da2f07d2b5dd928f30f8282dbbe78f40050..e6714af943a394ae853fa529574c5064096e5d8b 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -295,7 +295,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap auto_resize="true" default_tab_group="3" height="450" - min_height="53" + min_height="73" name="add_wearables_panel" width="313" tab_group="2" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 676bef2d0be736242a364a42d14c28dcd8fc4cce..cf040b10c7a5add2a8bfc9759c51e6a53d5a6da1 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -3005,6 +3005,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="IM_default_text_label">Click here to instant message.</string> <string name="IM_to_label">To</string> <string name="IM_moderator_label">(Moderator)</string> + <string name="Saved_message">(Saved [LONG_TIMESTAMP])</string> <!-- voice calls --> <string name="answered_call">Your call has been answered</string> diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml index 1b3e1c1c90928e0ff2ea7fd03aa7e824e4b53309..b3ab2f4f90341f800ba2bd3c63dd197a39a68e36 100644 --- a/indra/newview/skins/default/xui/fr/panel_login.xml +++ b/indra/newview/skins/default/xui/fr/panel_login.xml @@ -20,7 +20,7 @@ <text name="start_location_text"> Lieu de départ : </text> - <combo_box name="start_location_combo" width="152"> + <combo_box name="start_location_combo"> <combo_box.item label="Dernier emplacement" name="MyLastLocation"/> <combo_box.item label="Domicile" name="MyHome"/> <combo_box.item label="<Saisir le nom de la région>" name="Typeregionname"/> diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml index 47d7a88b4c2effabe1eadda827f5c7fee4e9e674..808f19a16d40805ea5d77ae42cb09858af0027ab 100644 --- a/indra/newview/skins/default/xui/ja/panel_login.xml +++ b/indra/newview/skins/default/xui/ja/panel_login.xml @@ -20,7 +20,7 @@ <text name="start_location_text"> 開始地点: </text> - <combo_box name="start_location_combo" width="160"> + <combo_box name="start_location_combo"> <combo_box.item label="最後ã«ãƒã‚°ã‚¢ã‚¦ãƒˆã—ãŸå ´æ‰€" name="MyLastLocation"/> <combo_box.item label="ホーム" name="MyHome"/> <combo_box.item label="<地域åを入力>" name="Typeregionname"/>