summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llchatmentionhelper.cpp9
-rw-r--r--indra/llwebrtc/llwebrtc.cpp8
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/icons/release/secondlife.icnsbin113020 -> 302511 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_128x128.pngbin0 -> 8653 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_128x128@2x.pngbin0 -> 19795 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_16x16.pngbin0 -> 681 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_16x16@2x.pngbin0 -> 1508 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_256x256.pngbin0 -> 19795 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_256x256@2x.pngbin0 -> 50874 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_32x32.pngbin0 -> 1508 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_32x32@2x.pngbin0 -> 3697 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_512x512.pngbin0 -> 50874 bytes
-rw-r--r--indra/newview/icons/release/secondlife.iconset/icon_512x512@2x.pngbin0 -> 105494 bytes
-rw-r--r--indra/newview/icons/release/secondlife_1024.pngbin0 -> 105494 bytes
-rw-r--r--indra/newview/icons/release/secondlife_128.pngbin5320 -> 0 bytes
-rw-r--r--indra/newview/icons/release/secondlife_16.pngbin669 -> 0 bytes
-rw-r--r--indra/newview/icons/release/secondlife_256.pngbin11572 -> 0 bytes
-rw-r--r--indra/newview/icons/release/secondlife_32.pngbin1283 -> 0 bytes
-rw-r--r--indra/newview/icons/release/secondlife_48.pngbin1958 -> 0 bytes
-rw-r--r--indra/newview/llavatarlistitem.cpp3
-rw-r--r--indra/newview/llimview.cpp6
-rw-r--r--indra/newview/llinventorybridge.cpp63
-rw-r--r--indra/newview/llinventorybridge.h2
-rw-r--r--indra/newview/llinventoryfunctions.cpp33
-rw-r--r--indra/newview/llinventoryfunctions.h1
-rw-r--r--indra/newview/llinventorygallery.cpp13
-rw-r--r--indra/newview/lllogininstance.cpp27
-rw-r--r--indra/newview/lllogininstance.h2
-rw-r--r--indra/newview/llmeshrepository.cpp8
-rw-r--r--indra/newview/llmodelpreview.cpp18
-rw-r--r--indra/newview/lloutfitgallery.cpp11
-rw-r--r--indra/newview/lloutfitslist.cpp77
-rw-r--r--indra/newview/lloutfitslist.h2
-rw-r--r--indra/newview/llpanelface.cpp13
-rw-r--r--indra/newview/llstartup.cpp20
-rw-r--r--indra/newview/llviewercamera.cpp19
-rw-r--r--indra/newview/llviewercamera.h4
-rwxr-xr-xindra/newview/llviewerregion.cpp6
-rw-r--r--indra/newview/llviewerregion.h1
-rw-r--r--indra/newview/skins/default/colors.xml2
-rw-r--r--indra/newview/tests/lllogininstance_test.cpp1
42 files changed, 207 insertions, 144 deletions
diff --git a/indra/llui/llchatmentionhelper.cpp b/indra/llui/llchatmentionhelper.cpp
index f7769b2cbe..5745389a58 100644
--- a/indra/llui/llchatmentionhelper.cpp
+++ b/indra/llui/llchatmentionhelper.cpp
@@ -98,7 +98,14 @@ void LLChatMentionHelper::showHelper(LLUICtrl* host_ctrl, S32 local_x, S32 local
LLRect rect = av_picker_floater->getRect();
rect.setLeftTopAndSize(floater_x, floater_y + rect.getHeight(), rect.getWidth(), rect.getHeight());
av_picker_floater->setRect(rect);
- av_picker_floater->openFloater(LLSD().with("av_name", av_name));
+ if (av_picker_floater->isShown())
+ {
+ av_picker_floater->onOpen(LLSD().with("av_name", av_name));
+ }
+ else
+ {
+ av_picker_floater->openFloater(LLSD().with("av_name", av_name));
+ }
}
void LLChatMentionHelper::hideHelper(const LLUICtrl* ctrl)
diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp
index 9b3dde4d0f..2ee6d912c1 100644
--- a/indra/llwebrtc/llwebrtc.cpp
+++ b/indra/llwebrtc/llwebrtc.cpp
@@ -432,9 +432,7 @@ void ll_set_device_module_capture_device(rtc::scoped_refptr<webrtc::AudioDeviceM
// has it at 0
device_module->SetRecordingDevice(device + 1);
#endif
- device_module->SetStereoRecording(false);
device_module->InitMicrophone();
- device_module->InitRecording();
}
void LLWebRTCImpl::setCaptureDevice(const std::string &id)
@@ -475,6 +473,8 @@ void LLWebRTCImpl::setCaptureDevice(const std::string &id)
ll_set_device_module_capture_device(mPeerDeviceModule, recordingDevice);
if (recording)
{
+ mPeerDeviceModule->SetStereoRecording(false);
+ mPeerDeviceModule->InitRecording();
mPeerDeviceModule->StartRecording();
}
});
@@ -496,9 +496,7 @@ void ll_set_device_module_render_device(rtc::scoped_refptr<webrtc::AudioDeviceMo
#else
device_module->SetPlayoutDevice(device + 1);
#endif
- device_module->SetStereoPlayout(true);
device_module->InitSpeaker();
- device_module->InitPlayout();
}
void LLWebRTCImpl::setRenderDevice(const std::string &id)
@@ -542,6 +540,8 @@ void LLWebRTCImpl::setRenderDevice(const std::string &id)
ll_set_device_module_render_device(mPeerDeviceModule, playoutDevice);
if (playing)
{
+ mPeerDeviceModule->SetStereoPlayout(true);
+ mPeerDeviceModule->InitPlayout();
mPeerDeviceModule->StartPlayout();
}
});
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f65294b3ec..3156439181 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -7907,7 +7907,7 @@
<key>RenderMinFreeMainMemoryThreshold</key>
<map>
<key>Comment</key>
- <string>Minimum of available physical memory in MB before textures get scaled down</string>
+ <string>If available free physical memory is below this value textures get agresively scaled down</string>
<key>Persist</key>
<integer>0</integer>
<key>Type</key>
diff --git a/indra/newview/icons/release/secondlife.icns b/indra/newview/icons/release/secondlife.icns
index a30b51b67a..00d9867814 100644
--- a/indra/newview/icons/release/secondlife.icns
+++ b/indra/newview/icons/release/secondlife.icns
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_128x128.png b/indra/newview/icons/release/secondlife.iconset/icon_128x128.png
new file mode 100644
index 0000000000..4c519db265
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_128x128.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_128x128@2x.png b/indra/newview/icons/release/secondlife.iconset/icon_128x128@2x.png
new file mode 100644
index 0000000000..2a3a0092b2
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_128x128@2x.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_16x16.png b/indra/newview/icons/release/secondlife.iconset/icon_16x16.png
new file mode 100644
index 0000000000..fda2f276ee
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_16x16.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_16x16@2x.png b/indra/newview/icons/release/secondlife.iconset/icon_16x16@2x.png
new file mode 100644
index 0000000000..aa4a74f204
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_16x16@2x.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_256x256.png b/indra/newview/icons/release/secondlife.iconset/icon_256x256.png
new file mode 100644
index 0000000000..2a3a0092b2
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_256x256.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_256x256@2x.png b/indra/newview/icons/release/secondlife.iconset/icon_256x256@2x.png
new file mode 100644
index 0000000000..4c28add76c
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_256x256@2x.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_32x32.png b/indra/newview/icons/release/secondlife.iconset/icon_32x32.png
new file mode 100644
index 0000000000..aa4a74f204
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_32x32.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_32x32@2x.png b/indra/newview/icons/release/secondlife.iconset/icon_32x32@2x.png
new file mode 100644
index 0000000000..23a36f66cb
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_32x32@2x.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_512x512.png b/indra/newview/icons/release/secondlife.iconset/icon_512x512.png
new file mode 100644
index 0000000000..4c28add76c
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_512x512.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife.iconset/icon_512x512@2x.png b/indra/newview/icons/release/secondlife.iconset/icon_512x512@2x.png
new file mode 100644
index 0000000000..a53a6697f1
--- /dev/null
+++ b/indra/newview/icons/release/secondlife.iconset/icon_512x512@2x.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_1024.png b/indra/newview/icons/release/secondlife_1024.png
new file mode 100644
index 0000000000..a53a6697f1
--- /dev/null
+++ b/indra/newview/icons/release/secondlife_1024.png
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_128.png b/indra/newview/icons/release/secondlife_128.png
deleted file mode 100644
index 2f21c1c7fc..0000000000
--- a/indra/newview/icons/release/secondlife_128.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_16.png b/indra/newview/icons/release/secondlife_16.png
deleted file mode 100644
index 68f1427309..0000000000
--- a/indra/newview/icons/release/secondlife_16.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_256.png b/indra/newview/icons/release/secondlife_256.png
deleted file mode 100644
index 8f324910e7..0000000000
--- a/indra/newview/icons/release/secondlife_256.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_32.png b/indra/newview/icons/release/secondlife_32.png
deleted file mode 100644
index 2b7cdef03d..0000000000
--- a/indra/newview/icons/release/secondlife_32.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/icons/release/secondlife_48.png b/indra/newview/icons/release/secondlife_48.png
deleted file mode 100644
index c2ef372dd7..0000000000
--- a/indra/newview/icons/release/secondlife_48.png
+++ /dev/null
Binary files differ
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
index 1db7d63309..f6bc59c748 100644
--- a/indra/newview/llavatarlistitem.cpp
+++ b/indra/newview/llavatarlistitem.cpp
@@ -351,7 +351,8 @@ void LLAvatarListItem::setShowProfileBtn(bool show)
void LLAvatarListItem::showSpeakingIndicator(bool visible)
{
- if (mSpeakingIndicator)
+ // used only to hide indicator to not contradict with SpeakingIndicatorManager functionality
+ if (mSpeakingIndicator && !visible)
{
mSpeakingIndicator->setIsActiveChannel(visible);
mSpeakingIndicator->setShowParticipantsSpeaking(visible);
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 4017cd9629..0a941403f2 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -3263,7 +3263,11 @@ void LLIMMgr::addMessage(
//Play sound for new conversations
if (!skip_message && !gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation")))
{
- make_ui_sound("UISndNewIncomingIMSession");
+ static LLCachedControl<bool> play_snd_mention_pref(gSavedSettings, "PlaySoundChatMention", false);
+ if (!play_snd_mention_pref || !LLUrlRegistry::getInstance()->containsAgentMention(msg))
+ {
+ make_ui_sound("UISndNewIncomingIMSession");
+ }
}
}
else
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index adfd0aadba..25025038d2 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2981,12 +2981,16 @@ bool LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
if (dest_res == MY_OUTFITS_SUBFOLDER && create_outfit)
{
// turn it into outfit
- dropToMyOutfitsSubfolder(inv_cat, mUUID, LLFolderType::FT_OUTFIT, cb);
+ dropToMyOutfitsSubfolder(inv_cat, mUUID, cb);
}
else
{
- // or link it?
- dropToMyOutfitsSubfolder(inv_cat, mUUID, LLFolderType::FT_NONE, cb);
+ LLInvFVBridge::changeCategoryParent(
+ model,
+ (LLViewerInventoryCategory*)inv_cat,
+ mUUID,
+ move_is_into_trash);
+ if (cb) cb->fire(inv_cat->getUUID());
}
break;
case MY_OUTFITS_SUBFOLDER:
@@ -4114,10 +4118,14 @@ void LLFolderBridge::perform_pasteFromClipboard()
}
if (move_is_into_outfit)
{
- if (!move_is_into_my_outfits && item && can_move_to_outfit(item, move_is_into_current_outfit))
+ bool handled = false;
+ if (mUUID != my_outifts_id
+ && dest_folder->getPreferredType() == LLFolderType::FT_OUTFIT
+ && item
+ && can_move_to_outfit(item, move_is_into_current_outfit))
{
- // todo: this is going to create dupplicate folders?
dropToOutfit(item, move_is_into_current_outfit, cb);
+ handled = true;
}
else if (move_is_into_my_outfits && LLAssetType::AT_CATEGORY == obj->getType())
{
@@ -4128,39 +4136,39 @@ void LLFolderBridge::perform_pasteFromClipboard()
if (mUUID == my_outifts_id)
{
dropToMyOutfits(cat, cb);
+ handled = true;
}
- else if (move_is_into_my_outfits)
+ else
{
- EMyOutfitsSubfolderType res = myoutfit_object_subfolder_type(model, mUUID, my_outifts_id);
- if (res == MY_OUTFITS_SUBFOLDER)
+ EMyOutfitsSubfolderType dest_res = myoutfit_object_subfolder_type(model, mUUID, my_outifts_id);
+ if (dest_res == MY_OUTFITS_SUBFOLDER)
{
// turn it into outfit
- dropToMyOutfitsSubfolder(cat, mUUID, LLFolderType::FT_OUTFIT, cb);
- }
- else
- {
- dropToMyOutfitsSubfolder(cat, mUUID, LLFolderType::FT_NONE, cb);
+ dropToMyOutfitsSubfolder(cat, mUUID, cb);
+ handled = true;
}
}
}
- else if (cat && can_move_to_my_outfits_as_subfolder(model, cat))
+ if (!handled && cat && can_move_to_my_outfits_as_subfolder(model, cat))
{
- if (LLClipboard::instance().isCutMode())
+ EMyOutfitsSubfolderType dest_res = myoutfit_object_subfolder_type(model, mUUID, my_outifts_id);
+ if (dest_res == MY_OUTFITS_SUBFOLDER || mUUID == my_outifts_id)
{
- changeCategoryParent(model, cat, parent_id, false);
+ if (LLClipboard::instance().isCutMode())
+ {
+ changeCategoryParent(model, cat, parent_id, false);
+ }
+ else
+ {
+ copy_inventory_category(model, cat, parent_id);
+ }
if (cb) cb->fire(item_id);
- }
- else
- {
- copy_inventory_category(model, cat, parent_id);
+ handled = true;
}
}
- else
- {
- LLNotificationsUtil::add("MyOutfitsPasteFailed");
- }
}
- else
+
+ if (!handled)
{
LLNotificationsUtil::add("MyOutfitsPasteFailed");
}
@@ -5502,12 +5510,11 @@ void LLFolderBridge::dropToMyOutfits(LLInventoryCategory* inv_cat, LLPointer<LLI
inv_cat->getThumbnailUUID());
}
-void LLFolderBridge::dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id, LLFolderType::EType preferred_type, LLPointer<LLInventoryCallback> cb)
+void LLFolderBridge::dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id, LLPointer<LLInventoryCallback> cb)
{
- const LLUUID outfits_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
inventory_func_type func = boost::bind(outfitFolderCreatedCallback, inv_cat->getUUID(), _1, cb, mInventoryPanel);
getInventoryModel()->createNewCategory(dest_id,
- preferred_type,
+ LLFolderType::FT_OUTFIT,
inv_cat->getName(),
func,
inv_cat->getThumbnailUUID());
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index a101c7368a..b7bdef9b21 100644
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -369,7 +369,7 @@ protected:
void dropToFavorites(LLInventoryItem* inv_item, LLPointer<LLInventoryCallback> cb = NULL);
void dropToOutfit(LLInventoryItem* inv_item, bool move_is_into_current_outfit, LLPointer<LLInventoryCallback> cb = NULL);
void dropToMyOutfits(LLInventoryCategory* inv_cat, LLPointer<LLInventoryCallback> cb = NULL);
- void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest, LLFolderType::EType preferred_type, LLPointer<LLInventoryCallback> cb = NULL);
+ void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest, LLPointer<LLInventoryCallback> cb = NULL);
//--------------------------------------------------------------------
// Messy hacks for handling folder options
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 9967318e92..1077ce74ae 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -438,7 +438,13 @@ void copy_inventory_category(LLInventoryModel* model,
{
copy_inventory_category_content(new_id, model, cat, root_copy_id, move_no_copy_items);
};
- gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName(), func, cat->getThumbnailUUID());
+ LLFolderType::EType type = LLFolderType::FT_NONE;
+ if (cat->getPreferredType() == LLFolderType::FT_OUTFIT)
+ {
+ // at the moment only permitting copy of outfits and normal folders
+ type = LLFolderType::FT_OUTFIT;
+ }
+ gInventory.createNewCategory(parent_id, type, cat->getName(), func, cat->getThumbnailUUID());
}
void copy_inventory_category(LLInventoryModel* model,
@@ -460,6 +466,25 @@ void copy_inventory_category(LLInventoryModel* model,
gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName(), func, cat->getThumbnailUUID());
}
+void copy_inventory_category(LLInventoryModel* model,
+ LLViewerInventoryCategory* cat,
+ const LLUUID& parent_id,
+ const LLUUID& root_copy_id,
+ bool move_no_copy_items,
+ LLPointer<LLInventoryCallback> callback)
+{
+ // Create the initial folder
+ inventory_func_type func = [model, cat, root_copy_id, move_no_copy_items, callback](const LLUUID& new_id)
+ {
+ copy_inventory_category_content(new_id, model, cat, root_copy_id, move_no_copy_items);
+ if (callback)
+ {
+ callback.get()->fire(new_id);
+ }
+ };
+ gInventory.createNewCategory(parent_id, LLFolderType::FT_NONE, cat->getName(), func, cat->getThumbnailUUID());
+}
+
void copy_cb(const LLUUID& dest_folder, const LLUUID& root_id)
{
// Decrement the count in root_id since that one item won't be copied over
@@ -2365,6 +2390,12 @@ bool can_move_to_my_outfits_as_subfolder(LLInventoryModel* model, LLInventoryCat
return false;
}
+ if (inv_cat->getPreferredType() != LLFolderType::FT_NONE)
+ {
+ // only normal folders can become subfodlers
+ return false;
+ }
+
constexpr size_t MAX_CONTENT = 255;
if (cats->size() > MAX_CONTENT)
{
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index f56413bf5d..b23f82a189 100644
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -78,6 +78,7 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s
void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id = LLUUID::null, bool move_no_copy_items = false);
void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id, bool move_no_copy_items, inventory_func_type callback);
+void copy_inventory_category(LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& parent_id, const LLUUID& root_copy_id, bool move_no_copy_items, LLPointer<LLInventoryCallback> callback);
void copy_inventory_category_content(const LLUUID& new_cat_uuid, LLInventoryModel* model, LLViewerInventoryCategory* cat, const LLUUID& root_copy_id, bool move_no_copy_items);
diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp
index 3222dff1b2..43d4edb069 100644
--- a/indra/newview/llinventorygallery.cpp
+++ b/indra/newview/llinventorygallery.cpp
@@ -65,7 +65,7 @@ const S32 FAST_LOAD_THUMBNAIL_TRSHOLD = 50; // load folders below this value imm
bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat, bool drop, std::string& tooltip_msg, bool is_link);
bool dragItemIntoFolder(LLUUID folder_id, LLInventoryItem* inv_item, bool drop, std::string& tooltip_msg, bool user_confirm);
void dropToMyOutfits(LLInventoryCategory* inv_cat);
-void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id, LLFolderType::EType preferred_type);
+void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID& dest_id);
class LLGalleryPanel: public LLPanel
{
@@ -3964,11 +3964,14 @@ bool dragCategoryIntoFolder(LLUUID dest_id, LLInventoryCategory* inv_cat,
if (dest_res == MY_OUTFITS_SUBFOLDER && create_outfit)
{
// turn it into outfit
- dropToMyOutfitsSubfolder(inv_cat, dest_id, LLFolderType::FT_OUTFIT);
+ dropToMyOutfitsSubfolder(inv_cat, dest_id);
}
else
{
- dropToMyOutfitsSubfolder(inv_cat, dest_id, LLFolderType::FT_NONE);
+ gInventory.changeCategoryParent(
+ (LLViewerInventoryCategory*)inv_cat,
+ dest_id,
+ move_is_into_trash);
}
break;
case MY_OUTFITS_SUBFOLDER:
@@ -4147,10 +4150,10 @@ void dropToMyOutfits(LLInventoryCategory* inv_cat)
gInventory.createNewCategory(dest_id, LLFolderType::FT_OUTFIT, inv_cat->getName(), func, inv_cat->getThumbnailUUID());
}
-void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID &dest_id, LLFolderType::EType preferred_type)
+void dropToMyOutfitsSubfolder(LLInventoryCategory* inv_cat, const LLUUID &dest_id)
{
// Note: creation will take time, so passing folder id to callback is slightly unreliable,
// but so is collecting and passing descendants' ids
inventory_func_type func = boost::bind(&outfitFolderCreatedCallback, inv_cat->getUUID(), _1);
- gInventory.createNewCategory(dest_id, preferred_type, inv_cat->getName(), func, inv_cat->getThumbnailUUID());
+ gInventory.createNewCategory(dest_id, LLFolderType::FT_OUTFIT, inv_cat->getName(), func, inv_cat->getThumbnailUUID());
}
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index cbc3744aa3..4bffe7feac 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -329,6 +329,15 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
LL_DEBUGS("LLLogin") << "reason " << reason_response
<< " message " << message_response
<< LL_ENDL;
+
+ if (response.has("mfa_hash"))
+ {
+ mRequestData["params"]["mfa_hash"] = response["mfa_hash"];
+ mRequestData["params"]["token"] = "";
+
+ saveMFAHash(response);
+ }
+
// For the cases of critical message or TOS agreement,
// start the TOS dialog. The dialog response will be handled
// by the LLLoginInstance::handleTOSResponse() callback.
@@ -593,6 +602,24 @@ bool LLLoginInstance::handleMFAChallenge(LLSD const & notif, LLSD const & respon
return true;
}
+void LLLoginInstance::saveMFAHash(LLSD const& response)
+{
+ std::string grid(LLGridManager::getInstance()->getGridId());
+ std::string user_id(LLStartUp::getUserId());
+
+ // Only save mfa_hash for future logins if the user wants their info remembered.
+ if (response.has("mfa_hash") && gSavedSettings.getBOOL("RememberUser") && LLLoginInstance::getInstance()->saveMFA())
+ {
+ gSecAPIHandler->addToProtectedMap("mfa_hash", grid, user_id, response["mfa_hash"]);
+ }
+ else if (!LLLoginInstance::getInstance()->saveMFA())
+ {
+ gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, user_id);
+ }
+ // TODO(brad) - related to SL-17223 consider building a better interface that sync's automatically
+ gSecAPIHandler->syncProtectedMap();
+}
+
std::string construct_start_string()
{
std::string start;
diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h
index 748909c069..941b378b14 100644
--- a/indra/newview/lllogininstance.h
+++ b/indra/newview/lllogininstance.h
@@ -70,6 +70,8 @@ public:
void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; }
LLNotificationsInterface& getNotificationsInterface() const { return *mNotifications; }
+ void saveMFAHash(LLSD const& response);
+
private:
typedef std::shared_ptr<LLEventAPI::Response> ResponsePtr;
void constructAuthParams(LLPointer<LLCredential> user_credentials);
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 851107b3be..e7e95034b2 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -5976,13 +5976,7 @@ bool LLMeshRepository::meshUploadEnabled()
bool LLMeshRepository::meshRezEnabled()
{
static LLCachedControl<bool> mesh_enabled(gSavedSettings, "MeshEnabled");
- LLViewerRegion *region = gAgent.getRegion();
- if(mesh_enabled &&
- region)
- {
- return region->meshRezEnabled();
- }
- return false;
+ return mesh_enabled;
}
// Threading: main thread only
diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp
index d8e05e1d01..c73282dad3 100644
--- a/indra/newview/llmodelpreview.cpp
+++ b/indra/newview/llmodelpreview.cpp
@@ -2498,6 +2498,8 @@ void LLModelPreview::updateStatusMessages()
S32 phys_tris = 0;
S32 phys_hulls = 0;
S32 phys_points = 0;
+ S32 which_mode = 0;
+ S32 file_mode = 1;
//get the triangle count for the whole scene
for (LLModelLoader::scene::iterator iter = mScene[LLModel::LOD_PHYSICS].begin(), endIter = mScene[LLModel::LOD_PHYSICS].end(); iter != endIter; ++iter)
@@ -2619,18 +2621,16 @@ void LLModelPreview::updateStatusMessages()
fmp->childEnable("simplify_cancel");
fmp->childEnable("decompose_cancel");
}
- }
-
- LLCtrlSelectionInterface* iface = fmp->childGetSelectionInterface("physics_lod_combo");
- S32 which_mode = 0;
- S32 file_mode = 1;
- if (iface)
- {
- which_mode = iface->getFirstSelectedIndex();
- file_mode = iface->getItemCount() - 1;
+ LLCtrlSelectionInterface* iface = fmp->childGetSelectionInterface("physics_lod_combo");
+ if (iface)
+ {
+ which_mode = iface->getFirstSelectedIndex();
+ file_mode = iface->getItemCount() - 1;
+ }
}
+
if (which_mode == file_mode)
{
mFMP->childEnable("physics_file");
diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp
index b1d5cd9e16..b84b0b3a8c 100644
--- a/indra/newview/lloutfitgallery.cpp
+++ b/indra/newview/lloutfitgallery.cpp
@@ -793,6 +793,17 @@ void LLOutfitGallery::updateAddedCategory(LLUUID cat_id)
LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
if (!cat) return;
+ if (!isOutfitFolder(cat))
+ {
+ // Assume a subfolder that contains or will contain outfits, track it
+ const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+ mOutfitsObserver->addCategory(cat_id, [this, outfits]()
+ {
+ observerCallback(outfits);
+ });
+ return;
+ }
+
std::string name = cat->getName();
LLOutfitGalleryItem* item = buildGalleryItem(name, cat_id);
mOutfitMap.insert(LLOutfitGallery::outfit_map_value_t(cat_id, item));
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index 9d8493549d..df53c66ec1 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -142,6 +142,17 @@ void LLOutfitsList::updateAddedCategory(LLUUID cat_id)
LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id);
if (!cat) return;
+ if (!isOutfitFolder(cat))
+ {
+ // Assume a subfolder that contains or will contain outfits, track it
+ const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+ mCategoriesObserver->addCategory(cat_id, [this, outfits]()
+ {
+ observerCallback(outfits);
+ });
+ return;
+ }
+
std::string name = cat->getName();
outfit_accordion_tab_params tab_params(get_accordion_tab_params());
@@ -819,49 +830,38 @@ void LLOutfitListBase::observerCallback(const LLUUID& category_id)
refreshList(category_id);
}
-class LLIsOutfitListFolder : public LLInventoryCollectFunctor
+bool LLOutfitListBase::isOutfitFolder(LLViewerInventoryCategory* cat) const
{
-public:
- LLIsOutfitListFolder()
+ if (!cat)
{
- mOutfitsId = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+ return false;
}
- virtual ~LLIsOutfitListFolder() {}
-
- bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) override
+ if (cat->getPreferredType() == LLFolderType::FT_OUTFIT)
{
- if (cat)
+ return true;
+ }
+ // assumes that folder is somewhere inside MyOutfits
+ if (cat->getPreferredType() == LLFolderType::FT_NONE)
+ {
+ LLViewerInventoryCategory* inv_cat = dynamic_cast<LLViewerInventoryCategory*>(cat);
+ if (inv_cat && inv_cat->getDescendentCount() > 3)
{
- if (cat->getPreferredType() == LLFolderType::FT_OUTFIT)
+ LLInventoryModel::cat_array_t* cats;
+ LLInventoryModel::item_array_t* items;
+ gInventory.getDirectDescendentsOf(inv_cat->getUUID(), cats, items);
+ if (cats->empty() // protection against outfits inside
+ && items->size() > 3) // arbitrary, if doesn't have at least base parts, not an outfit
{
+ // For now assume this to be an old style outfit, not a subfolder
+ // but ideally no such 'outfits' should be left in My Outfits
+ // Todo: stop counting FT_NONE as outfits,
+ // convert obvious outfits into FT_OUTFIT
return true;
}
- if (cat->getPreferredType() == LLFolderType::FT_NONE
- && cat->getParentUUID() == mOutfitsId)
- {
- LLViewerInventoryCategory* inv_cat = dynamic_cast<LLViewerInventoryCategory*>(cat);
- if (inv_cat && inv_cat->getDescendentCount() > 3)
- {
- LLInventoryModel::cat_array_t* cats;
- LLInventoryModel::item_array_t* items;
- gInventory.getDirectDescendentsOf(inv_cat->getUUID(), cats, items);
- if (cats->empty() // protection against outfits inside
- && items->size() > 3) // eyes, skin, hair and shape are required
- {
- // For now assume this to be an old style outfit, not a subfolder
- // but ideally no such 'outfits' should be left in My Outfits
- // Todo: stop counting FT_NONE as outfits,
- // convert obvious outfits into FT_OUTFIT
- return true;
- }
- }
- }
}
- return false;
}
-protected:
- LLUUID mOutfitsId;
-};
+ return false;
+}
void LLOutfitListBase::refreshList(const LLUUID& category_id)
{
@@ -872,13 +872,13 @@ void LLOutfitListBase::refreshList(const LLUUID& category_id)
LLInventoryModel::item_array_t item_array;
// Collect all sub-categories of a given category.
- LLIsOutfitListFolder is_outfit;
+ LLIsType is_category(LLAssetType::AT_CATEGORY);
gInventory.collectDescendentsIf(
category_id,
cat_array,
item_array,
LLInventoryModel::EXCLUDE_TRASH,
- is_outfit);
+ is_category);
// Memorize item names for each UUID
std::map<LLUUID, std::string> names;
@@ -1396,7 +1396,12 @@ bool LLOutfitAccordionCtrlTab::handleToolTip(S32 x, S32 y, MASK mask)
{
LLSD params;
params["inv_type"] = LLInventoryType::IT_CATEGORY;
- params["thumbnail_id"] = gInventory.getCategory(mFolderID)->getThumbnailUUID();
+ LLViewerInventoryCategory* cat = gInventory.getCategory(mFolderID);
+ if (cat)
+ {
+ params["thumbnail_id"] = cat->getThumbnailUUID();
+ }
+ // else consider returning
params["item_id"] = mFolderID;
LLToolTipMgr::instance().show(LLToolTip::Params()
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
index f581b419d9..fad0e638fb 100644
--- a/indra/newview/lloutfitslist.h
+++ b/indra/newview/lloutfitslist.h
@@ -118,6 +118,8 @@ protected:
void onOutfitsRemovalConfirmation(const LLSD& notification, const LLSD& response);
virtual void onChangeOutfitSelection(LLWearableItemsList* list, const LLUUID& category_id) = 0;
+ bool isOutfitFolder(LLViewerInventoryCategory* cat) const;
+
static void onIdle(void* userdata);
void onIdleRefreshList();
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
index f938c07efe..5b059516cd 100644
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -1099,7 +1099,6 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
}
mRadioPbrType->setEnabled(editable);
const bool pbr_selected = mComboMatMedia->getCurrentIndex() == MATMEDIA_PBR;
- const bool media_selected = mComboMatMedia->getCurrentIndex() == MATMEDIA_MEDIA;
const bool texture_info_selected = pbr_selected && mRadioPbrType->getSelectedIndex() != PBRTYPE_RENDER_MATERIAL_ID;
mCheckSyncSettings->setEnabled(editable);
@@ -1403,7 +1402,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
mShinyScaleU->setValue(spec_scale_s);
mBumpyScaleU->setValue(norm_scale_s);
- mTexScaleU->setEnabled(editable && (has_material || media_selected));
+ mTexScaleU->setEnabled(editable && has_material);
mShinyScaleU->setEnabled(editable && has_material && specmap_id.notNull());
mBumpyScaleU->setEnabled(editable && has_material && normmap_id.notNull());
@@ -1442,7 +1441,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
bool norm_scale_tentative = !identical_norm_scale_t;
bool spec_scale_tentative = !identical_spec_scale_t;
- mTexScaleV->setEnabled(editable && (has_material || media_selected));
+ mTexScaleV->setEnabled(editable && has_material);
mShinyScaleV->setEnabled(editable && has_material && specmap_id.notNull());
mBumpyScaleV->setEnabled(editable && has_material && normmap_id.notNull());
@@ -1488,7 +1487,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
mShinyOffsetU->setTentative(LLSD(spec_offset_u_tentative));
mBumpyOffsetU->setTentative(LLSD(norm_offset_u_tentative));
- mTexOffsetU->setEnabled(editable && (has_material || media_selected));
+ mTexOffsetU->setEnabled(editable && has_material);
mShinyOffsetU->setEnabled(editable && has_material && specmap_id.notNull());
mBumpyOffsetU->setEnabled(editable && has_material && normmap_id.notNull());
}
@@ -1518,7 +1517,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
mBumpyOffsetV->setTentative(LLSD(norm_offset_v_tentative));
mShinyOffsetV->setTentative(LLSD(spec_offset_v_tentative));
- mTexOffsetV->setEnabled(editable && (has_material || media_selected));
+ mTexOffsetV->setEnabled(editable && has_material);
mShinyOffsetV->setEnabled(editable && has_material && specmap_id.notNull());
mBumpyOffsetV->setEnabled(editable && has_material && normmap_id.notNull());
}
@@ -1545,7 +1544,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
F32 norm_rot_deg = norm_rotation * RAD_TO_DEG;
F32 spec_rot_deg = spec_rotation * RAD_TO_DEG;
- mTexRotate->setEnabled(editable && (has_material || media_selected));
+ mTexRotate->setEnabled(editable && has_material);
mShinyRotate->setEnabled(editable && has_material && specmap_id.notNull());
mBumpyRotate->setEnabled(editable && has_material && normmap_id.notNull());
@@ -1662,7 +1661,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)
mTexRepeat->setValue(editable ? repeats : 1.0f);
}
mTexRepeat->setTentative(LLSD(repeats_tentative));
- mTexRepeat->setEnabled(!identical_planar_texgen && enabled && (has_material || media_selected));
+ mTexRepeat->setEnabled(has_material && !identical_planar_texgen && enabled);
}
}
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index feb7ed9774..858c7b6656 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -3922,25 +3922,7 @@ bool process_login_success_response()
LLViewerMedia::getInstance()->openIDSetup(openid_url, openid_token);
}
-
- // Only save mfa_hash for future logins if the user wants their info remembered.
- if(response.has("mfa_hash")
- && gSavedSettings.getBOOL("RememberUser")
- && LLLoginInstance::getInstance()->saveMFA())
- {
- std::string grid(LLGridManager::getInstance()->getGridId());
- std::string user_id(gUserCredential->userID());
- gSecAPIHandler->addToProtectedMap("mfa_hash", grid, user_id, response["mfa_hash"]);
- // 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();
- }
+ LLLoginInstance::getInstance()->saveMFAHash(response);
bool success = false;
// JC: gesture loading done below, when we have an asset system
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
index 6cf99b68b2..9949bae8ac 100644
--- a/indra/newview/llviewercamera.cpp
+++ b/indra/newview/llviewercamera.cpp
@@ -73,12 +73,14 @@ LLViewerCamera::LLViewerCamera() : LLCamera()
mAverageSpeed = 0.f;
mAverageAngularSpeed = 0.f;
- mCameraAngleChangedSignal = gSavedSettings.getControl("CameraAngle")->getCommitSignal()->connect(boost::bind(&LLViewerCamera::updateCameraAngle, this, _2));
-}
-
-LLViewerCamera::~LLViewerCamera()
-{
- mCameraAngleChangedSignal.disconnect();
+ LLPointer<LLControlVariable> cntrl_ptr = gSavedSettings.getControl("CameraAngle");
+ if (cntrl_ptr.notNull())
+ {
+ cntrl_ptr->getCommitSignal()->connect([](LLControlVariable* control, const LLSD& value, const LLSD& previous)
+ {
+ LLViewerCamera::getInstance()->setDefaultFOV((F32)value.asReal());
+ });
+ }
}
void LLViewerCamera::updateCameraLocation(const LLVector3 &center, const LLVector3 &up_direction, const LLVector3 &point_of_interest)
@@ -816,8 +818,3 @@ bool LLViewerCamera::isDefaultFOVChanged()
return false;
}
-void LLViewerCamera::updateCameraAngle(const LLSD& value)
-{
- setDefaultFOV((F32)value.asReal());
-}
-
diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h
index a204b85d88..91d26f09f2 100644
--- a/indra/newview/llviewercamera.h
+++ b/indra/newview/llviewercamera.h
@@ -43,7 +43,6 @@ class alignas(16) LLViewerCamera : public LLCamera, public LLSimpleton<LLViewerC
LL_ALIGN_NEW
public:
LLViewerCamera();
- ~LLViewerCamera();
typedef enum
{
@@ -66,7 +65,6 @@ public:
const LLVector3 &point_of_interest);
static void updateFrustumPlanes(LLCamera& camera, bool ortho = false, bool zflip = false, bool no_hacks = false);
- void updateCameraAngle(const LLSD& value);
void setPerspective(bool for_selection, S32 x, S32 y_from_bot, S32 width, S32 height, bool limit_select_distance, F32 z_near = 0, F32 z_far = 0);
const LLMatrix4 &getProjection() const;
@@ -126,8 +124,6 @@ protected:
F32 mZoomFactor;
S16 mZoomSubregion;
- boost::signals2::connection mCameraAngleChangedSignal;
-
public:
};
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 697433148b..b9f52e11aa 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -3720,12 +3720,6 @@ bool LLViewerRegion::bakesOnMeshEnabled() const
mSimulatorFeatures["BakesOnMeshEnabled"].asBoolean());
}
-bool LLViewerRegion::meshRezEnabled() const
-{
- return (mSimulatorFeatures.has("MeshRezEnabled") &&
- mSimulatorFeatures["MeshRezEnabled"].asBoolean());
-}
-
bool LLViewerRegion::dynamicPathfindingEnabled() const
{
return ( mSimulatorFeatures.has("DynamicPathfindingEnabled") &&
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index d0ec1fe877..244e2b7835 100644
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -333,7 +333,6 @@ public:
void getInfo(LLSD& info);
- bool meshRezEnabled() const;
bool meshUploadEnabled() const;
bool bakesOnMeshEnabled() const;
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 668f878629..00ca6e3bb0 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -1012,7 +1012,7 @@
value="0.82 0.91 0.98 0.15" />
<color
name="ChatSelfMentionHighlight"
- value="1 1 0 1" />
+ value="1 1 0 0.35" />
<color
name="MentionFlashBgColor"
value="1 1 0 0.5" />
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index bff2289a7c..29ca903256 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -66,6 +66,7 @@ static LLEventStream gTestPump("test_pump");
#include "../llstartup.h"
LLSLURL LLStartUp::sStartSLURL;
LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; }
+std::string LLStartUp::getUserId() { return ""; };
#include "lllogin.h"