Merge branch 'release/2025.07' into project/mac_universal

master
Jonathan "Geenz" Goodman 2025-09-10 13:29:51 -04:00 committed by GitHub
commit dd1113ba2b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 69 additions and 16 deletions

View File

@ -42,7 +42,7 @@ jobs:
needs: setup needs: setup
strategy: strategy:
matrix: matrix:
runner: ${{ fromJson((github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/Second_Life')) && '["windows-large","macos-15-xlarge"]' || '["windows-latest","macos-15"]') }} runner: ${{ fromJson((github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/Second_Life')) && '["windows-large","macos-15-xlarge"]' || '["windows-2022","macos-15"]') }}
configuration: ${{ fromJson(needs.setup.outputs.configurations) }} configuration: ${{ fromJson(needs.setup.outputs.configurations) }}
runs-on: ${{ matrix.runner }} runs-on: ${{ matrix.runner }}
outputs: outputs:
@ -306,7 +306,7 @@ jobs:
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
needs: build needs: build
runs-on: windows-latest runs-on: windows-2022
steps: steps:
- name: Sign and package Windows viewer - name: Sign and package Windows viewer
if: env.AZURE_KEY_VAULT_URI && env.AZURE_CERT_NAME && env.AZURE_CLIENT_ID && env.AZURE_CLIENT_SECRET && env.AZURE_TENANT_ID if: env.AZURE_KEY_VAULT_URI && env.AZURE_CERT_NAME && env.AZURE_CLIENT_ID && env.AZURE_CLIENT_SECRET && env.AZURE_TENANT_ID

View File

@ -3765,7 +3765,7 @@ bool LLNormalTextSegment::getDimensionsF32(S32 first_char, S32 num_chars, F32& w
{ {
height = 0; height = 0;
width = 0; width = 0;
if (num_chars > 0) if (num_chars > 0 && (mStart + first_char >= 0))
{ {
height = mFontHeight; height = mFontHeight;
const LLWString &text = getWText(); const LLWString &text = getWText();

View File

@ -57,6 +57,7 @@
#include "lllocationhistory.h" #include "lllocationhistory.h"
#include "llgltfmateriallist.h" #include "llgltfmateriallist.h"
#include "llimageworker.h" #include "llimageworker.h"
#include "llregex.h"
#include "llloginflags.h" #include "llloginflags.h"
#include "llmd5.h" #include "llmd5.h"
@ -2558,6 +2559,27 @@ void release_notes_coro(const std::string url)
LLWeb::loadURLInternal(url); LLWeb::loadURLInternal(url);
} }
void validate_release_notes_coro(const std::string url)
{
LLVersionInfo& versionInfo(LLVersionInfo::instance());
const boost::regex version_regex(R"(\b\d+\.\d+\.\d+\.\d+\b)");
if (url.find(versionInfo.getVersion()) == std::string::npos // has no our build version
&& ll_regex_search(url, version_regex)) // has any version
{
LL_INFOS() << "Received release notes url \"" << url << "\" wwith mismatching build, falling back to locally generated url" << LL_ENDL;
// Updater only provides notes for a most recent version, if it is not
// the current one, fall back to the hardcoded URL.
LLSD info(LLAppViewer::instance()->getViewerInfo());
std::string alt_url = info["VIEWER_RELEASE_NOTES_URL"].asString();
release_notes_coro(alt_url);
}
else
{
release_notes_coro(url);
}
}
/** /**
* Check if user is running a new version of the viewer. * Check if user is running a new version of the viewer.
* Display the Release Notes if it's not overriden by the "UpdaterShowReleaseNotes" setting. * Display the Release Notes if it's not overriden by the "UpdaterShowReleaseNotes" setting.
@ -2591,7 +2613,7 @@ void show_release_notes_if_required()
"showrelnotes", "showrelnotes",
[](const LLSD& url) { [](const LLSD& url) {
LLCoros::instance().launch("releaseNotesCoro", LLCoros::instance().launch("releaseNotesCoro",
boost::bind(&release_notes_coro, url.asString())); boost::bind(&validate_release_notes_coro, url.asString()));
return false; return false;
}); });
} }

View File

@ -186,6 +186,7 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
mOnUpdateImageStatsCallback(NULL), mOnUpdateImageStatsCallback(NULL),
mBakeTextureEnabled(false), mBakeTextureEnabled(false),
mLocalTextureEnabled(false), mLocalTextureEnabled(false),
mNoCopyTextureSelected(false),
mInventoryPickType(pick_type) mInventoryPickType(pick_type)
{ {
setTentative(tentative); setTentative(tentative);
@ -263,6 +264,7 @@ void LLFloaterTexturePicker::setImageID(const LLUUID& image_id, bool set_selecti
if (set_selection) if (set_selection)
{ {
// This is going to cause a callback
mInventoryPanel->setSelection(item_id, TAKE_FOCUS_NO); mInventoryPanel->setSelection(item_id, TAKE_FOCUS_NO);
} }
} }
@ -597,7 +599,6 @@ bool LLFloaterTexturePicker::postBuild()
refreshInventoryFilter(); refreshInventoryFilter();
mInventoryPanel->setFilterPermMask(mImmediateFilterPermMask); mInventoryPanel->setFilterPermMask(mImmediateFilterPermMask);
mInventoryPanel->setSelectCallback(boost::bind(&LLFloaterTexturePicker::onSelectionChange, this, _1, _2));
mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS); mInventoryPanel->setShowFolderState(LLInventoryFilter::SHOW_NON_EMPTY_FOLDERS);
// Disable auto selecting first filtered item because it takes away // Disable auto selecting first filtered item because it takes away
@ -616,8 +617,25 @@ bool LLFloaterTexturePicker::postBuild()
if(!mImageAssetID.isNull() || mInventoryPickType == PICK_MATERIAL) if(!mImageAssetID.isNull() || mInventoryPickType == PICK_MATERIAL)
{ {
mInventoryPanel->setSelection(findItemID(mImageAssetID, false), TAKE_FOCUS_NO); LLViewerInventoryItem* itemp = findInvItem(mImageAssetID, false);
LLUUID item_id;
if (itemp)
{
item_id = itemp->getUUID();
}
mInventoryPanel->setSelection(item_id, TAKE_FOCUS_NO);
if (item_id.notNull() && itemp)
{
if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
{
mNoCopyTextureSelected = true;
}
}
} }
// Don't call before setSelection, setSelection will mark view as dirty
mInventoryPanel->setSelectCallback(boost::bind(&LLFloaterTexturePicker::onSelectionChange, this, _1, _2));
} }
childSetAction("l_add_btn", LLFloaterTexturePicker::onBtnAdd, this); childSetAction("l_add_btn", LLFloaterTexturePicker::onBtnAdd, this);
@ -809,12 +827,12 @@ void LLFloaterTexturePicker::draw()
} }
} }
const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, bool copyable_only, bool ignore_library) LLViewerInventoryItem* LLFloaterTexturePicker::findInvItem(const LLUUID& asset_id, bool copyable_only, bool ignore_library) const
{ {
if (asset_id.isNull()) if (asset_id.isNull())
{ {
// null asset id means, no material or texture assigned // null asset id means, no material or texture assigned
return LLUUID::null; return nullptr;
} }
LLUUID loockup_id = asset_id; LLUUID loockup_id = asset_id;
@ -854,30 +872,41 @@ const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, bool co
// search for copyable version first // search for copyable version first
for (S32 i = 0; i < items.size(); i++) for (S32 i = 0; i < items.size(); i++)
{ {
LLInventoryItem* itemp = items[i]; LLViewerInventoryItem* itemp = items[i];
LLPermissions item_permissions = itemp->getPermissions(); LLPermissions item_permissions = itemp->getPermissions();
if (item_permissions.allowCopyBy(gAgent.getID(), gAgent.getGroupID())) if (item_permissions.allowCopyBy(gAgent.getID(), gAgent.getGroupID()))
{ {
if(!ignore_library || !gInventory.isObjectDescendentOf(itemp->getUUID(),gInventory.getLibraryRootFolderID())) if (!ignore_library || !gInventory.isObjectDescendentOf(itemp->getUUID(), gInventory.getLibraryRootFolderID()))
{ {
return itemp->getUUID(); return itemp;
} }
} }
} }
// otherwise just return first instance, unless copyable requested // otherwise just return first instance, unless copyable requested
if (copyable_only) if (copyable_only)
{ {
return LLUUID::null; return nullptr;
} }
else else
{ {
if(!ignore_library || !gInventory.isObjectDescendentOf(items[0]->getUUID(),gInventory.getLibraryRootFolderID())) if (!ignore_library || !gInventory.isObjectDescendentOf(items[0]->getUUID(), gInventory.getLibraryRootFolderID()))
{ {
return items[0]->getUUID(); return items[0];
} }
} }
} }
return nullptr;
}
const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, bool copyable_only, bool ignore_library) const
{
LLViewerInventoryItem* itemp = findInvItem(asset_id, copyable_only, ignore_library);
if (itemp)
{
return itemp->getUUID();
}
return LLUUID::null; return LLUUID::null;
} }

View File

@ -340,7 +340,7 @@ public:
void setImageID(const LLUUID& image_asset_id, bool set_selection = true); void setImageID(const LLUUID& image_asset_id, bool set_selection = true);
bool updateImageStats(); // true if within limits bool updateImageStats(); // true if within limits
const LLUUID& getAssetID() { return mImageAssetID; } const LLUUID& getAssetID() { return mImageAssetID; }
const LLUUID& findItemID(const LLUUID& asset_id, bool copyable_only, bool ignore_library = false); const LLUUID& findItemID(const LLUUID& asset_id, bool copyable_only, bool ignore_library = false) const;
void setCanApplyImmediately(bool b); void setCanApplyImmediately(bool b);
void setActive(bool active); void setActive(bool active);
@ -397,6 +397,7 @@ protected:
void refreshLocalList(); void refreshLocalList();
void refreshInventoryFilter(); void refreshInventoryFilter();
void setImageIDFromItem(const LLInventoryItem* itemp, bool set_selection = true); void setImageIDFromItem(const LLInventoryItem* itemp, bool set_selection = true);
LLViewerInventoryItem* findInvItem(const LLUUID& asset_id, bool copyable_only, bool ignore_library = false) const;
LLPointer<LLViewerTexture> mTexturep; LLPointer<LLViewerTexture> mTexturep;
LLPointer<LLFetchedGLTFMaterial> mGLTFMaterial; LLPointer<LLFetchedGLTFMaterial> mGLTFMaterial;

View File

@ -157,9 +157,9 @@ bool LLViewerCamera::updateCameraLocation(const LLVector3 &center, const LLVecto
// update pixel meter ratio using default fov, not modified one // update pixel meter ratio using default fov, not modified one
mPixelMeterRatio = (F32)(getViewHeightInPixels()/ (2.f*tanf(mCameraFOVDefault*0.5f))); mPixelMeterRatio = (F32)(getViewHeightInPixels()/ (2.f*tanf(mCameraFOVDefault*0.5f)));
// update screen pixel area // update screen pixel area
mScreenPixelArea =(S32)((F32)getViewHeightInPixels() * ((F32)getViewHeightInPixels() * getAspect()));
return true; return true;
mScreenPixelArea =(S32)((F32)getViewHeightInPixels() * ((F32)getViewHeightInPixels() * getAspect()));
} }
const LLMatrix4 &LLViewerCamera::getProjection() const const LLMatrix4 &LLViewerCamera::getProjection() const

View File

@ -66,6 +66,7 @@
visible="false" visible="false"
name="comment_text" name="comment_text"
follows="left|top" follows="left|top"
max_length="1024"
width="240" width="240"
top_delta="20" top_delta="20"
word_wrap="true" /> word_wrap="true" />