Merge branch 'release/2025.04.1' of https://github.com/secondlife/viewer

# Conflicts:
#	indra/newview/app_settings/commands.xml
#	indra/newview/llfloateravatarwelcomepack.cpp
#	indra/newview/llfloateravatarwelcomepack.h
#	indra/newview/llstartup.cpp
#	indra/newview/llviewerfloaterreg.cpp
#	indra/newview/llviewerwindow.cpp
#	indra/newview/skins/default/xui/en/menu_viewer.xml
#	indra/newview/skins/default/xui/en/strings.xml
master
Ansariel 2025-06-13 19:39:16 +02:00
commit f82e171a30
16 changed files with 110 additions and 63 deletions

View File

@ -302,11 +302,11 @@ set(viewer_SOURCE_FILES
llflexibleobject.cpp
llfloater360capture.cpp
llfloaterabout.cpp
llfloateravatarwelcomepack.cpp
llfloaterbvhpreview.cpp
llfloateraddpaymentmethod.cpp
llfloaterauction.cpp
llfloaterautoreplacesettings.cpp
llfloateravatar.cpp
llfloateravatarpicker.cpp
llfloateravatarrendersettings.cpp
llfloateravatartextures.cpp
@ -1141,11 +1141,11 @@ set(viewer_HEADER_FILES
llflexibleobject.h
llfloater360capture.h
llfloaterabout.h
llfloateravatarwelcomepack.h
llfloaterbvhpreview.h
llfloateraddpaymentmethod.h
llfloaterauction.h
llfloaterautoreplacesettings.h
llfloateravatar.h
llfloateravatarpicker.h
llfloateravatarrendersettings.h
llfloateravatartextures.h

View File

@ -1 +1 @@
7.1.14
7.1.15

View File

@ -28,11 +28,11 @@
label_ref="Command_Avatar_Label"
tooltip_ref="Command_Avatar_Tooltip"
execute_function="Floater.Toggle"
execute_parameters="avatar"
execute_parameters="avatar_welcome_pack"
is_enabled_function="GridFeatureCheck"
is_enabled_parameters="avatar_picker"
is_running_function="Floater.IsOpen"
is_running_parameters="avatar"
is_running_parameters="avatar_welcome_pack"
/>
<command name="build"
available_in_toybox="true"

View File

@ -2197,16 +2197,16 @@
<key>Value</key>
<real>16.0</real>
</map>
<key>AvatarPickerURL</key>
<key>AvatarWelcomePack</key>
<map>
<key>Comment</key>
<string>Avatar picker contents</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/avatars.html</string>
<key>Comment</key>
<string>Avatar Welcome Pack contents</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/vawp/index.html</string>
</map>
<key>AvatarRotateThresholdSlow</key>
<map>

View File

@ -208,7 +208,7 @@ void LFSimFeatureHandler::setSupportedFeatures()
}
else if (LLGridManager::instance().isInSecondLife())
{
mAvatarPickerURL = gSavedSettings.getString("AvatarPickerURL");
mAvatarPickerURL = gSavedSettings.getString("AvatarWelcomePack");
}
else
{
@ -300,7 +300,7 @@ void LFSimFeatureHandler::setSupportedFeatures()
}
else if (in_sl)
{
mAvatarPickerURL = gSavedSettings.getString("AvatarPickerURL");
mAvatarPickerURL = gSavedSettings.getString("AvatarWelcomePack");
}
else
{

View File

@ -1,7 +1,7 @@
/**
* @file llfloateravatar.h
* @author Leyla Farazha
* @brief floater for the avatar changer
* @file llfloateravatarwelcomepack.cpp
* @author Callum Prentice (callum@lindenlab.com)
* @brief Floater container for the Avatar Welcome Pack we app
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
@ -27,7 +27,7 @@
#include "llviewerprecompiledheaders.h"
#include "llfloateravatar.h"
#include "llfloateravatarwelcomepack.h"
#include "lluictrlfactory.h"
#include "llmediactrl.h"
@ -35,13 +35,13 @@
#include "llhttpconstants.h"
#include "llweb.h"
LLFloaterAvatar::LLFloaterAvatar(const LLSD& key)
LLFloaterAvatarWelcomePack::LLFloaterAvatarWelcomePack(const LLSD& key)
: LLFloater(key),
mAvatarPickerUrlChangedSignal() // <FS:Ansariel> Avatar chooser does not change between OpenSim grids
{
}
LLFloaterAvatar::~LLFloaterAvatar()
LLFloaterAvatarWelcomePack::~LLFloaterAvatarWelcomePack()
{
if (mAvatarPicker)
{
@ -58,32 +58,32 @@ LLFloaterAvatar::~LLFloaterAvatar()
// </FS:Ansariel>
}
bool LLFloaterAvatar::postBuild()
bool LLFloaterAvatarWelcomePack::postBuild()
{
mAvatarPicker = findChild<LLMediaCtrl>("avatar_picker_contents");
if (mAvatarPicker)
{
mAvatarPicker->clearCache();
}
enableResizeCtrls(true, true, false);
return true;
}
// <FS:Ansariel> Avatar chooser does not change between OpenSim grids
void LLFloaterAvatar::onOpen(const LLSD& key)
void LLFloaterAvatarWelcomePack::onOpen(const LLSD& key)
{
// Connect during onOpen instead of ctor because LLFloaterAvatar instance
// Connect during onOpen instead of ctor because LLFloaterAvatarWelcomePack instance
// gets created before we can safely create a LFSimFeatureHandler instance!
// Assuming we receive the avatar picker URL via login response and it
// is the same URL being sent by region caps so we will be good for the initial
// region the avatar logs into as well.
if (!mAvatarPickerUrlChangedSignal.connected())
{
mAvatarPickerUrlChangedSignal = LFSimFeatureHandler::instance().setAvatarPickerCallback(boost::bind(&LLFloaterAvatar::handleUrlChanged, this, _1));
mAvatarPickerUrlChangedSignal = LFSimFeatureHandler::instance().setAvatarPickerCallback(boost::bind(&LLFloaterAvatarWelcomePack::handleUrlChanged, this, _1));
}
}
void LLFloaterAvatar::handleUrlChanged(const std::string& url)
void LLFloaterAvatarWelcomePack::handleUrlChanged(const std::string& url)
{
getChild<LLMediaCtrl>("avatar_picker_contents")->navigateTo(LLWeb::expandURLSubstitutions(url, LLSD()), HTTP_CONTENT_TEXT_HTML);
}

View File

@ -1,7 +1,7 @@
/**
* @file llfloateravatar.h
* @author Leyla Farazha
* @brief floater for the avatar changer
* @file llfloateravatarwelcomepack.h
* @author Callum Prentice (callum@lindenlab.com)
* @brief Floater container for the Avatar Welcome Pack we app
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
@ -25,29 +25,28 @@
* $/LicenseInfo$
*/
#ifndef LL_FLOATER_AVATAR_H
#define LL_FLOATER_AVATAR_H
#pragma once
#include "llfloater.h"
class LLMediaCtrl;
class LLFloaterAvatar:
class LLFloaterAvatarWelcomePack:
public LLFloater
{
friend class LLFloaterReg;
private:
LLFloaterAvatar(const LLSD& key);
~LLFloaterAvatar();
bool postBuild() override;
LLMediaCtrl* mAvatarPicker;
private:
LLFloaterAvatarWelcomePack(const LLSD& key);
~LLFloaterAvatarWelcomePack();
bool postBuild() override;
LLMediaCtrl* mAvatarPicker;
// <FS:Ansariel> Avatar chooser does not change between OpenSim grids
/*virtual*/ void onOpen(const LLSD& key) override;
void onOpen(const LLSD& key) override;
void handleUrlChanged(const std::string& url);
boost::signals2::connection mAvatarPickerUrlChangedSignal;
// </FS:Ansariel>
};
#endif

View File

@ -2910,9 +2910,6 @@ bool idle_startup()
do_startup_frame();
// We're successfully logged in.
gSavedSettings.setBOOL("FirstLoginThisInstall", false);
LLFloaterReg::showInitialVisibleInstances();
LLFloaterGridStatus::getInstance()->startGridStatusTimer();
@ -3342,6 +3339,30 @@ bool idle_startup()
LLPerfStats::StatsRecorder::setAutotuneInit();
// Display Avatar Welcome Pack the first time a user logs in
// (or clears their settings....)
if (gSavedSettings.getBOOL("FirstLoginThisInstall"))
{
LLFloater* avatar_welcome_pack_floater = LLFloaterReg::findInstance("avatar_welcome_pack");
if (avatar_welcome_pack_floater != nullptr)
{
// There is a (very - 1 in ~50 times) hard to repro bug where the login
// page is not hidden when the AWP floater is presented. This (agressive)
// approach to always close it seems like the best fix for now.
// <FS:Ansariel> [FS Login Panel]
//LLPanelLogin::closePanel();
FSPanelLogin::closePanel();
// </FS:Ansariel> [FS Login Panel]
avatar_welcome_pack_floater->setVisible(true);
}
}
//// We're successfully logged in.
// 2025-06 Moved lower down in the state machine so the Avatar Welcome Pack
// floater display can be triggered correctly.
gSavedSettings.setBOOL("FirstLoginThisInstall", false);
// <FS:Techwolf Lupindo> FIRE-6643 Display MOTD when login screens are disabled
if (gSavedSettings.getBOOL("FSDisableLoginScreens"))
{

View File

@ -38,8 +38,8 @@
#include "llfloateraddpaymentmethod.h"
#include "llfloaterauction.h"
#include "llfloaterautoreplacesettings.h"
#include "llfloateravatar.h"
#include "llfloateravatarpicker.h"
#include "llfloateravatarwelcomepack.h"
//#include "llfloateravatarrendersettings.h" // <FS:Ansariel> [FS Persisted Avatar Render Settings]
#include "llfloateravatartextures.h"
#include "llfloaterbanduration.h"
@ -399,8 +399,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("appearance", "floater_my_appearance.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSidePanelContainer>);
LLFloaterReg::add("associate_listing", "floater_associate_listing.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAssociateListing>);
LLFloaterReg::add("auction", "floater_auction.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAuction>);
LLFloaterReg::add("avatar", "floater_avatar.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatar>);
LLFloaterReg::add("avatar_picker", "floater_avatar_picker.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarPicker>);
LLFloaterReg::add("avatar_welcome_pack", "floater_avatar_welcome_pack.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarWelcomePack>);
// <FS:Ansariel> [FS Persisted Avatar Render Settings]
//LLFloaterReg::add("avatar_render_settings", "floater_avatar_render_settings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarRenderSettings>);
LLFloaterReg::add("avatar_textures", "floater_avatar_textures.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterAvatarTextures>);

View File

@ -2493,13 +2493,13 @@ void LLViewerWindow::initWorldUI()
// url = LLWeb::expandURLSubstitutions(url, LLSD());
// destinations->navigateTo(url, "text/html");
// }
// LLMediaCtrl* avatar_picker = LLFloaterReg::getInstance("avatar")->findChild<LLMediaCtrl>("avatar_picker_contents");
// if (avatar_picker)
// LLMediaCtrl* avatar_welcome_pack = LLFloaterReg::getInstance("avatar_welcome_pack")->findChild<LLMediaCtrl>("avatar_picker_contents");
// if (avatar_welcome_pack)
// {
// avatar_picker->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
// std::string url = gSavedSettings.getString("AvatarPickerURL");
// avatar_welcome_pack->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
// std::string url = gSavedSettings.getString("AvatarWelcomePack");
// url = LLWeb::expandURLSubstitutions(url, LLSD());
// avatar_picker->navigateTo(url, "text/html");
// avatar_welcome_pack->navigateTo(url, "text/html");
// }
std::string destination_guide_url;
#ifdef OPENSIM // <FS:AW optional opensim support>
@ -2540,18 +2540,18 @@ void LLViewerWindow::initWorldUI()
else
#endif // OPENSIM // <FS:AW optional opensim support>
{
avatar_picker_url = gSavedSettings.getString("AvatarPickerURL");
avatar_picker_url = gSavedSettings.getString("AvatarWelcomePack");
}
if(!avatar_picker_url.empty())
{
LLMediaCtrl* avatar_picker = LLFloaterReg::getInstance("avatar")->findChild<LLMediaCtrl>("avatar_picker_contents");
if (avatar_picker)
LLMediaCtrl* avatar_welcome_pack = LLFloaterReg::getInstance("avatar_welcome_pack")->findChild<LLMediaCtrl>("avatar_picker_contents");
if (avatar_welcome_pack)
{
avatar_picker->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
avatar_welcome_pack->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
avatar_picker_url = LLWeb::expandURLSubstitutions(avatar_picker_url, LLSD());
LL_DEBUGS("WebApi") << "AvatarPickerURL \"" << avatar_picker_url << "\"" << LL_ENDL;
avatar_picker->navigateTo(avatar_picker_url, HTTP_CONTENT_TEXT_HTML);
avatar_welcome_pack->navigateTo(avatar_picker_url, HTTP_CONTENT_TEXT_HTML);
}
}
// </FS:AW opensim destinations and avatar picker>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="Avatar Welcome Pack" title="Avatar-Willkommenspaket"/>

View File

@ -40,7 +40,7 @@
<menu_item_call label="Alles abnehmen" name="Detach All"/>
<menu_item_call label="Ausgewählte Anhänge abnehmen" name="Remove Selected Attachments"/>
</menu>
<menu_item_call label="Avatar auswählen" name="Avatar Picker"/>
<menu_item_call label="Avatar-Willkommenspaket..." name="Avatar Welcome Pack"/>
<menu_item_call label="Schwebehöhe" name="HoverHeight"/>
<menu label="Bewegung" name="Movement">
<menu_item_call label="Hinsetzen" name="Sit Down Here"/>

View File

@ -5895,7 +5895,7 @@ Setzen Sie den Editorpfad in Anführungszeichen
360° Foto
</string>
<string name="Command_Avatar_Label">
Avatar
Avatar-Willkommenspaket
</string>
<string name="Command_Build_Label">
Bauen

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater
positioning="cascading"
legacy_header_height="225"
can_minimize="true"
can_close="true"
can_resize="false"
min_height="438"
min_width="530"
height="438"
layout="topleft"
name="Avatar Welcome Pack"
single_instance="true"
save_rect="true"
save_visibility="true"
title="Avatar Welcome Pack"
width="530">
<web_browser
top="25"
height="438"
width="530"
follows="all"
name="avatar_picker_contents"
trusted_content="true"/>
</floater>

View File

@ -329,11 +329,11 @@
</menu_item_call>
<menu_item_separator/>
<menu_item_call
label="Choose an avatar"
name="Avatar Picker">
label="Avatar Welcome Pack..."
name="Avatar Welcome Pack">
<menu_item_call.on_click
function="Floater.Toggle"
parameter="avatar" />
parameter="avatar_welcome_pack" />
<menu_item_call.on_visible
function="GridFeatureCheck"
parameter="avatar_picker"/>

View File

@ -2710,7 +2710,7 @@ Try enclosing path to the editor with double quotes.
name="Command_360_Capture_Label">360° Snapshot</string>
<string name="Command_AboutLand_Label">About land</string>
<string name="Command_Appearance_Label">Appearance</string>
<string name="Command_Avatar_Label">Avatar</string>
<string name="Command_Avatar_Label">Avatar Welcome Pack</string>
<string name="Command_Build_Label">Build</string>
<string name="Command_Chat_Label">Conversations</string>
<string name="Command_Conversations_Label">Conversations</string>