diff --git a/autobuild.xml b/autobuild.xml
index 08be06fb8f..3c95a13fa7 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -838,9 +838,9 @@
archivenamelinux64
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index fa83293ac7..78db4e07ea 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -659,7 +659,8 @@ void LLConsole::Paragraph::updateLines(F32 screen_width, const LLFontGL* font, L
// FIRE-8257: Sometimes text is cut off on left side of console
else
{
- break;
+ mLines.push_back(Line());
+ skip_chars = 1;
}
//
paragraph_offset += (drawable + skip_chars);
diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp
index 3738341bae..900fe7974b 100644
--- a/indra/media_plugins/cef/media_plugin_cef.cpp
+++ b/indra/media_plugins/cef/media_plugin_cef.cpp
@@ -120,9 +120,6 @@ MediaPluginBase(host_send_func, host_user_data)
mPluginsEnabled = false;
mJavascriptEnabled = true;
mDisableGPU = false;
-#ifdef LL_LINUX // Do not use GPU on Linux, using GPU messes with some window managers (https://bitbucket.org/NickyD/phoenix-firestorm-lgpl-linux/commits/14c936db5a02cf0f3ff24eb7f1c92136#comment-6048984)
- mDisableGPU = true;
-#endif
mUserAgentSubtring = "";
mAuthUsername = "";
mAuthPassword = "";
diff --git a/indra/newview/ao.cpp b/indra/newview/ao.cpp
index 43ceb3e0f9..9867381df8 100644
--- a/indra/newview/ao.cpp
+++ b/indra/newview/ao.cpp
@@ -131,12 +131,6 @@ void FloaterAO::updateList()
mReloadButton->setEnabled(TRUE);
mImportRunning = FALSE;
- std::string currentSetName = mSetSelector->getSelectedItemLabel();
- if (currentSetName.empty())
- {
- currentSetName = AOEngine::instance().getCurrentSetName();
- }
-
// Lambda provides simple Alpha sorting, note this is case sensitive.
auto sortRuleLambda = [](const AOSet* s1, const AOSet* s2) -> bool
{
@@ -146,6 +140,9 @@ void FloaterAO::updateList()
mSetList=AOEngine::instance().getSetList();
std::sort(mSetList.begin(), mSetList.end(), sortRuleLambda);
+ // remember currently selected animation set name
+ std::string currentSetName = mSetSelector->getSelectedItemLabel();
+
mSetSelector->removeall();
mSetSelectorSmall->removeall();
mSetSelector->clear();
@@ -166,6 +163,21 @@ void FloaterAO::updateList()
return;
}
+ // make sure we have an animation set name to display
+ if (currentSetName.empty())
+ {
+ // selected animation set was empty, get the currently active animation set from the engine
+ currentSetName = AOEngine::instance().getCurrentSetName();
+ LL_DEBUGS("AOEngine") << "Current set name was empty, fetched name \"" << currentSetName << "\" from AOEngine" << LL_ENDL;
+
+ if(currentSetName.empty())
+ {
+ // selected animation set was empty, get the name of the first animation set in the list
+ currentSetName = mSetList[0]->getName();
+ LL_DEBUGS("AOEngine") << "Current set name still empty, fetched first set's name \"" << currentSetName << "\"" << LL_ENDL;
+ }
+ }
+
for (U32 index = 0; index < mSetList.size(); ++index)
{
std::string setName = mSetList[index]->getName();
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 5513f13260..847f5c6515 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16417,17 +16417,6 @@ Change of this parameter will affect the layout of buttons in notification toast
Value1.0
- HUDScaleFactor
-
UIScaleFactor
- // Clear out username first, as we get some crashes that has the OS set as username, let's see if this fixes it.
- sBugSplatSender->setDefaultUserName( WCSTR("") );
+ // Clear out username first, as we get some crashes that has the OS set as username, let's see if this fixes it. Use Crash.Linden as a usr can never have a "Linden"
+ // name and on the other hand a Linden will not likely ever crash on Firestom.
+ sBugSplatSender->setDefaultUserName( WCSTR("Crash.Linden") );
// Only send avatar name if enabled via prefs
if (gCrashSettings.getBOOL("CrashSubmitName"))
@@ -679,6 +680,7 @@ LLAppViewerWin32::~LLAppViewerWin32()
bool LLAppViewerWin32::init()
{
+ bool success{ false }; // For BugSplat we need to call base::init() early on or there's no access to settings.
// Platform specific initialization.
// Turn off Windows Error Reporting
@@ -702,7 +704,21 @@ bool LLAppViewerWin32::init()
#else // LL_BUGSPLAT
#pragma message("Building with BugSplat")
+ // Pre BugSplat dance, make sure settings are valid, query crash behavior and then set up Bugsplat accordingly"
+ success = LLAppViewer::init();
+ if (!success)
+ return false;
+ S32 nCrashSubmitBehavior = gCrashSettings.getS32("CrashSubmitBehavior");
+ // Don't ever send? bail out!
+ if (nCrashSubmitBehavior == 2 /*CRASH_BEHAVIOR_NEVER_SEND*/)
+ return success;
+
+ DWORD dwAsk{ MDSF_NONINTERACTIVE };
+ if (nCrashSubmitBehavior == 0 /*CRASH_BEHAVIOR_ASK*/)
+ dwAsk = 0;
+ //
+
std::string build_data_fname(
gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, "build_data.json"));
// Use llifstream instead of std::ifstream because LL_PATH_EXECUTABLE
@@ -740,13 +756,26 @@ bool LLAppViewerWin32::init()
LL_VIEWER_VERSION_BUILD));
// have to convert normal wide strings to strings of __wchar_t
+
+ // Set up Bugsplat to ask or always send
+
+ // sBugSplatSender = new MiniDmpSender(
+ // WCSTR(BugSplat_DB.asString()),
+ // WCSTR(LL_TO_WSTRING(LL_VIEWER_CHANNEL)),
+ // WCSTR(version_string),
+ // nullptr, // szAppIdentifier -- set later
+ // MDSF_NONINTERACTIVE | // automatically submit report without prompting
+ // MDSF_PREVENTHIJACKING); // disallow swiping Exception filter
+
sBugSplatSender = new MiniDmpSender(
WCSTR(BugSplat_DB.asString()),
WCSTR(LL_TO_WSTRING(LL_VIEWER_CHANNEL)),
WCSTR(version_string),
nullptr, // szAppIdentifier -- set later
- MDSF_NONINTERACTIVE | // automatically submit report without prompting
+ dwAsk |
MDSF_PREVENTHIJACKING); // disallow swiping Exception filter
+ //
+
sBugSplatSender->setCallback(bugsplatSendLog);
// engage stringize() overload that converts from wstring
@@ -759,7 +788,12 @@ bool LLAppViewerWin32::init()
#endif // LL_BUGSPLAT
#endif // LL_SEND_CRASH_REPORTS
- bool success = LLAppViewer::init();
+ // base::init() was potentially called earlier.
+ // bool success = LLAppViewer::init();
+ //
+
+ if( !success )
+ success = LLAppViewer::init();
return success;
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 947c83433c..7f1e215927 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -4975,6 +4975,10 @@ BOOL LLPanelPreferenceCrashReports::postBuild()
getChild("textInformation4")->setTextArg("[URL]", getString("PrivacyPolicyUrl"));
+#if LL_SEND_CRASH_REPORTS && defined(LL_BUGSPLAT)
+ childSetVisible("textRestartRequired", true);
+#endif
+
refresh();
return LLPanelPreference::postBuild();
@@ -4989,13 +4993,6 @@ void LLPanelPreferenceCrashReports::refresh()
getChild("checkSendCrashReportsAlwaysAsk")->setEnabled(fEnable);
getChild("checkSendSettings")->setEnabled(fEnable);
getChild("checkSendName")->setEnabled(fEnable);
-
-// Disable options not available when compiling with Bugsplat and set those to default values.
-#ifdef LL_BUGSPLAT
- getChild("checkSendCrashReportsAlwaysAsk")->setEnabled(false);
- getChild("checkSendCrashReportsAlwaysAsk")->setValue(false);
-#endif
-//
}
void LLPanelPreferenceCrashReports::apply()
diff --git a/indra/newview/llfloaterpreferenceviewadvanced.cpp b/indra/newview/llfloaterpreferenceviewadvanced.cpp
index 131c5a3802..7843d14c98 100644
--- a/indra/newview/llfloaterpreferenceviewadvanced.cpp
+++ b/indra/newview/llfloaterpreferenceviewadvanced.cpp
@@ -90,10 +90,9 @@ void LLFloaterPreferenceViewAdvanced::onSavePreset()
LLFloaterReg::hideInstance("load_pref_preset", PRESETS_CAMERA);
LLSD key;
- key["subdirectory"] = PRESETS_CAMERA;
std::string current_preset = gSavedSettings.getString("PresetCameraActive");
bool is_custom_preset = current_preset != "" && !LLPresetsManager::getInstance()->isDefaultCameraPreset(current_preset);
key["index"] = is_custom_preset ? 1 : 0;
- LLFloaterReg::showInstance("save_pref_preset", key);
+ LLFloaterReg::showInstance("save_camera_preset", key);
}
//
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 81aa1e444b..8a051242fc 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4381,6 +4381,7 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND);
const LLUUID &favorites = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
const LLUUID &marketplace_listings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
+ const LLUUID &outfits_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); // Fix "outfits" context menu
// FIRE-11628: Option to delete broken links from AO folder
if (mUUID == AOEngine::instance().getAOFolder())
@@ -4388,6 +4389,12 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
items.push_back(std::string("Cleanup broken Links"));
}
//
+ // Fix "outfits" context menu
+ if (outfits_id == mUUID)
+ {
+ items.push_back(std::string("New Outfit"));
+ }
+ //
if (lost_and_found_id == mUUID)
{
// This is the lost+found folder.
@@ -4489,7 +4496,10 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
// Not sure what the right thing is to do here.
if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
{
- if (!isInboxFolder()) // don't allow creation in inbox
+ // Fix "outfits" context menu
+ //if (!isInboxFolder()) // don't allow creation in inbox
+ if (!isInboxFolder() && outfits_id != mUUID) // don't allow creation in inbox
+ //
{
// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
@@ -8540,6 +8550,7 @@ void LLWornItemsFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
items.erase(std::remove(items.begin(), items.end(), std::string("New Gesture")), items.end());
items.erase(std::remove(items.begin(), items.end(), std::string("New Script")), items.end());
items.erase(std::remove(items.begin(), items.end(), std::string("New Folder")), items.end());
+ items.erase(std::remove(items.begin(), items.end(), std::string("New Settings")), items.end()); // Don't allow creating settings on the "worn" tab
hide_context_entries(menu, items, disabled_items);
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index a38917f1d0..211621bc2e 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -5237,8 +5237,10 @@ void handle_reset_view()
}
// Added optional V1 behavior so the avatar turns into camera direction after hitting ESC
- if(gSavedSettings.getBOOL("ResetViewTurnsAvatar"))
- gAgentCamera.resetView();
+ if (!gSavedSettings.getBOOL("ResetViewTurnsAvatar"))
+ {
+ gAgentCamera.setFocusOnAvatar(TRUE, FALSE, FALSE);
+ }
//
reset_view_final( TRUE );
diff --git a/indra/newview/skins/default/xui/de/floater_delete_pref_preset.xml b/indra/newview/skins/default/xui/de/floater_delete_pref_preset.xml
index 21c3a0e39b..5008fc8d44 100644
--- a/indra/newview/skins/default/xui/de/floater_delete_pref_preset.xml
+++ b/indra/newview/skins/default/xui/de/floater_delete_pref_preset.xml
@@ -1,5 +1,5 @@
-
+
Grafik-Voreinstellung löschen
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml
index 606651c4b7..2845a4eba2 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory.xml
@@ -18,6 +18,7 @@
+
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_crashreports.xml b/indra/newview/skins/default/xui/de/panel_preferences_crashreports.xml
index d15b516e78..8269fd66e2 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_crashreports.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_crashreports.xml
@@ -10,6 +10,9 @@
(für eventuelle Rückfragen)
+
+ Änderungen an jeglichen Einstellungen werden erst nach einem Neustart aktiv.
+
Sofern nicht ausgewählt, enthalten die Meldungen nur absturzrelevante Informationen.
diff --git a/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml b/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml
index e249209b80..a75fd6292f 100644
--- a/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml
+++ b/indra/newview/skins/default/xui/en/floater_delete_pref_preset.xml
@@ -7,7 +7,7 @@
name="delete_pref_preset"
save_rect="true"
title="Delete Pref Preset"
- width="300">
+ width="240">
Delete Graphic PresetDelete Camera Preset
@@ -16,7 +16,7 @@
follows="top|left|right"
height="10"
layout="topleft"
- left="20"
+ left="10"
name="Preset"
top="30"
width="200">
@@ -25,19 +25,19 @@
+ width="220"/>
+ width="100"/>
+ width="100"/>
diff --git a/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml b/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml
index 54fdb6d167..447be5aa35 100644
--- a/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml
+++ b/indra/newview/skins/default/xui/en/floater_save_camera_preset.xml
@@ -1,20 +1,20 @@
+ width="240">
SaveReplace
@@ -38,7 +38,7 @@
follows="top|left"
height="23"
layout="topleft"
- left="41"
+ left="26"
name="preset_txt_editor"
width="200"
top="45"/>
@@ -48,9 +48,9 @@
label="Save"
layout="topleft"
top="145"
- left="25"
+ left="10"
name="save"
- width="110"/>
+ width="100"/>
+ width="100"/>
diff --git a/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml b/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml
index 62260274f5..8c0646c2c5 100644
--- a/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml
+++ b/indra/newview/skins/default/xui/en/floater_save_pref_preset.xml
@@ -1,42 +1,42 @@
+ width="245">
+ width="220">
Type a name for the preset or choose an existing preset.
+ width="220"/>
+ width="100"/>
+ width="100"/>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index b9f9613f65..8f4bb71acc 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -151,6 +151,14 @@
function="Inventory.DoCreate"
parameter="category" />
+
+
+
- (contains Second Life name)
+ (contains username)
@@ -77,6 +77,21 @@
(used to ask for additional information if needed)
+
+ Changes made to any setting require a restart to become effective.
+
+
Unless checked above crash reports only contain information relevant to the crash.
@@ -100,7 +115,7 @@
mouse_opaque="false"
name="textInformation2"
width="475" >
- Second Life logs are not sent, please review the contents and email separately
+ Logs are not sent, please review the contents and email separately
Somehow, we started leaving the - separating the variant from the app name
# on the beginning of the channel qualifier. This screws up later processing that
# depends on the channel type. If it's there, we chop it off.
- # Well, not for 6.3.9...this is broken elsewhere and we're too rushed to fix
- # it properly, so we kludge our way around it elsewhere.
- #if channel_qualifier[0] == '-':
- # channel_qualifier = channel_qualifier[1:]
+ if channel_qualifier[0] == '-':
+ channel_qualifier = channel_qualifier[1:]
if channel_qualifier.startswith('release'):
channel_type='release'
elif channel_qualifier.startswith('beta'):
@@ -277,8 +275,9 @@ class ViewerManifest(LLManifest,FSViewerManifest):
# get any part of the channel name after the CHANNEL_VENDOR_BASE
suffix=self.channel_variant()
# by ancient convention, we don't use Release in the app name
- if self.channel_type() == 'release':
- suffix=suffix.replace('Release', '').strip()
+ # Well, LL doesn't, but we do. Don't remove it.
+ #if self.channel_type() == 'release':
+ # suffix=suffix.replace('Release', '').strip()
# for the base release viewer, suffix will now be null - for any other, append what remains
if suffix:
#suffix = "_".join([''] + suffix.split())
@@ -308,10 +307,12 @@ class ViewerManifest(LLManifest,FSViewerManifest):
def app_name(self):
global CHANNEL_VENDOR_BASE
channel_type=self.channel_type()
- if channel_type == 'release':
- app_suffix='Viewer'
- else:
- app_suffix=self.channel_variant()
+ # LL uses "Viewer" in the name of their release package. We use "Release".
+ #if channel_type == 'release':
+ # app_suffix='Viewer'
+ #else:
+ # app_suffix=self.channel_variant()
+ app_suffix=self.channel_variant()
# tag "OS" after CHANNEL_VENDOR_BASE and before any suffix
if self.fs_is_opensim():