Merge branch 'DRTVWR-587-maint-V' of https://github.com/secondlife/viewer

# Conflicts:
#	indra/cmake/Python.cmake
#	indra/newview/llvovolume.cpp
master
Ansariel 2023-09-09 11:40:54 +02:00
commit ff5645511e
14 changed files with 127 additions and 91 deletions

View File

@ -3195,11 +3195,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>6ba629ff34c4b14a1f851de707bc35041df8b6a9</string>
<string>6db9317ed29ccb00c2f75758f4aa2d4cd8784f46</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://github.com/secondlife/viewer-manager/releases/download/v3.0-bd3aec2/viewer_manager-3.0-bd3aec2-darwin64-bd3aec2.tar.zst</string>
<string>https://github.com/secondlife/viewer-manager/releases/download/v3.0-83fb46a/viewer_manager-3.0-83fb46a-darwin64-83fb46a.tar.zst</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -3209,11 +3209,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>7e086a28db17b0c086a5460e9d62f0c6584560b3</string>
<string>426d3b30681b747056027ca21136ae56b188cd47</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://github.com/secondlife/viewer-manager/releases/download/v3.0-bd3aec2/viewer_manager-3.0-bd3aec2-linux64-bd3aec2.tar.zst</string>
<string>https://github.com/secondlife/viewer-manager/releases/download/v3.0-83fb46a/viewer_manager-3.0-83fb46a-linux64-83fb46a.tar.zst</string>
</map>
<key>name</key>
<string>linux64</string>
@ -3223,11 +3223,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>1eab994c0c1df5b2c057878a4071a88320cec978</string>
<string>fe8e9ee00f53f11a7417a7bcf1db069e25dace5d</string>
<key>hash_algorithm</key>
<string>sha1</string>
<key>url</key>
<string>https://github.com/secondlife/viewer-manager/releases/download/v3.0-bd3aec2/viewer_manager-3.0-bd3aec2-windows64-bd3aec2.tar.zst</string>
<string>https://github.com/secondlife/viewer-manager/releases/download/v3.0-83fb46a/viewer_manager-3.0-83fb46a-windows64-83fb46a.tar.zst</string>
</map>
<key>name</key>
<string>windows64</string>
@ -3238,7 +3238,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>source_type</key>
<string>hg</string>
<key>version</key>
<string>3.0-bd3aec2</string>
<string>3.0-83fb46a</string>
</map>
<key>vlc-bin</key>
<map>

View File

@ -240,6 +240,7 @@ Ansariel Hiller
SL-15398
SL-18432
SL-4126
SL-20224
Aralara Rajal
Arare Chantilly
CHUIBUG-191

View File

@ -7,61 +7,20 @@ if (DEFINED ENV{PYTHON})
set(python "$ENV{PYTHON}")
set(PYTHONINTERP_FOUND ON)
elseif (WINDOWS)
# On Windows, explicitly avoid Cygwin Python.
if (DEFINED ENV{VIRTUAL_ENV})
find_program(PYTHON_EXECUTABLE
NAMES python.exe
PATHS
"$ENV{VIRTUAL_ENV}\\scripts"
NO_DEFAULT_PATH
)
else()
# if the user has their own version of Python installed, prefer that
foreach(hive HKEY_CURRENT_USER HKEY_LOCAL_MACHINE)
# prefer more recent Python versions to older ones, if multiple versions
# are installed
foreach(pyver 3.11 3.10 3.9)
list(APPEND regpaths "[${hive}\\SOFTWARE\\Python\\PythonCore\\${pyver}\\InstallPath]")
endforeach()
endforeach()
# TODO: This logic has the disadvantage that if you have multiple versions
# of Python installed, the selected path won't necessarily be the newest -
# e.g. this GLOB will prefer Python310 to Python311. But since pymaybe is
# checked AFTER the registry entries, this will only surface as a problem if
# no installed Python appears in the registry.
file(GLOB pymaybe
"$ENV{PROGRAMFILES}/Python*"
## "$ENV{PROGRAMFILES(X86)}/Python*"
# The Windows environment variable is in fact as shown above, but CMake
# disallows querying an environment variable containing parentheses -
# thanks, Windows. Fudge by just appending " (x86)" to $PROGRAMFILES and
# hoping for the best.
"$ENV{PROGRAMFILES} (x86)/Python*"
"c:/Python*")
set(Python3_FIND_REGISTRY "LAST")
find_program(python
NAMES python3.exe python.exe
NO_DEFAULT_PATH # added so that cmake does not find cygwin python
PATHS
${regpaths}
${pymaybe}
)
set(Python3_FIND_VIRTUALENV "ONLY")
endif()
find_package(Python3 COMPONENTS Interpreter)
set(python ${Python3_EXECUTABLE})
else()
find_program(python python3)
if (python)
set(PYTHONINTERP_FOUND ON)
endif (python)
endif (DEFINED ENV{PYTHON})
if (NOT python)
if (python)
set(PYTHONINTERP_FOUND ON)
else()
message(FATAL_ERROR "No Python interpreter found")
endif (NOT python)
endif (python)
set(PYTHON_EXECUTABLE "${python}" CACHE FILEPATH "Python interpreter for builds")
mark_as_advanced(PYTHON_EXECUTABLE)

View File

@ -1723,7 +1723,13 @@ S32 LLTextBase::getLeftOffset(S32 width)
case LLFontGL::HCENTER:
return mHPad + llmax(0, (mVisibleTextRect.getWidth() - width - mHPad) / 2);
case LLFontGL::RIGHT:
return mVisibleTextRect.getWidth() - width;
{
// Font's rendering rounds string size, if value gets rounded
// down last symbol might not have enough space to render,
// compensate by adding an extra pixel as padding
const S32 right_padding = 1;
return llmax(mHPad, mVisibleTextRect.getWidth() - width - right_padding);
}
default:
return mHPad;
}

View File

@ -2140,15 +2140,21 @@ LLVector3d LLAgentCamera::calcCameraPositionTargetGlobal(BOOL *hit_limit)
// Don't let camera go underground
F32 camera_min_off_ground = getCameraMinOffGround();
camera_land_height = LLWorld::getInstance()->resolveLandHeightGlobal(camera_position_global);
if (camera_position_global.mdV[VZ] < camera_land_height + camera_min_off_ground)
F32 minZ = llmax(F_ALMOST_ZERO, camera_land_height + camera_min_off_ground);
if (camera_position_global.mdV[VZ] < minZ)
{
camera_position_global.mdV[VZ] = camera_land_height + camera_min_off_ground;
camera_position_global.mdV[VZ] = minZ;
isConstrained = TRUE;
}
// Don't let camera go abovesky
F32 maxZ = LLWorld::getInstance()->getRegionMaxHeight() * 0.25 - F_ALMOST_ZERO;
if (camera_position_global.mdV[VZ] > maxZ)
{
camera_position_global.mdV[VZ] = maxZ;
isConstrained = TRUE;
}
if (hit_limit)
{

View File

@ -129,10 +129,27 @@ static const F32 ZOOM_MAX = 128.f;
class LLWorldMapHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_CLICK_ONLY ) { }
LLWorldMapHandler() : LLCommandHandler("worldmap", UNTRUSTED_THROTTLE)
{
}
bool handle(const LLSD& params,
virtual bool canHandleUntrusted(
const LLSD& params,
const LLSD& query_map,
LLMediaCtrl* web,
const std::string& nav_type)
{
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
// NAV_TYPE_EXTERNAL will be throttled
return true;
}
return false;
}
bool handle(const LLSD& params,
const LLSD& query_map,
const std::string& grid,
LLMediaCtrl* web)
@ -175,12 +192,32 @@ LLWorldMapHandler gWorldMapHandler;
class LLMapTrackAvatarHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
LLMapTrackAvatarHandler() : LLCommandHandler("maptrackavatar", UNTRUSTED_CLICK_ONLY)
LLMapTrackAvatarHandler() : LLCommandHandler("maptrackavatar", UNTRUSTED_THROTTLE)
{
}
bool handle(const LLSD& params,
virtual bool canHandleUntrusted(
const LLSD& params,
const LLSD& query_map,
LLMediaCtrl* web,
const std::string& nav_type)
{
if (params.size() < 1)
{
return true; // don't block, will fail later
}
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
// NAV_TYPE_EXTERNAL will be throttled
return true;
}
return false;
}
bool handle(const LLSD& params,
const LLSD& query_map,
const std::string& grid,
LLMediaCtrl* web)

View File

@ -81,7 +81,8 @@ public:
return true; // don't block, will fail later
}
if (nav_type == NAV_TYPE_CLICKED)
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
return true;
}

View File

@ -524,7 +524,8 @@ public:
return true; // don't block, will fail later
}
if (nav_type == NAV_TYPE_CLICKED)
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
return true;
}

View File

@ -95,7 +95,8 @@ public:
return true; // don't block, will fail later
}
if (nav_type == NAV_TYPE_CLICKED)
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
return true;
}

View File

@ -76,7 +76,8 @@ public:
return true; // don't block, will fail later
}
if (nav_type == NAV_TYPE_CLICKED)
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
return true;
}

View File

@ -246,7 +246,11 @@ public:
std::string fl_name = params[0].asString();
if (nav_type == NAV_TYPE_CLICKED)
// External browsers explicitly ask user about opening links
// so treat "external" same as "clicked" in this case,
// despite it being treated as untrusted.
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
const std::list<std::string> blacklist_clicked = {
"camera_presets",

View File

@ -234,8 +234,28 @@ LLLocalizedInventoryItemsDictionary::LLLocalizedInventoryItemsDictionary()
class LLInventoryHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
LLInventoryHandler() : LLCommandHandler("inventory", UNTRUSTED_CLICK_ONLY) { }
LLInventoryHandler() : LLCommandHandler("inventory", UNTRUSTED_THROTTLE) { }
virtual bool canHandleUntrusted(
const LLSD& params,
const LLSD& query_map,
LLMediaCtrl* web,
const std::string& nav_type)
{
if (params.size() < 1)
{
return true; // don't block, will fail later
}
if (nav_type == NAV_TYPE_CLICKED
|| nav_type == NAV_TYPE_EXTERNAL)
{
// NAV_TYPE_EXTERNAL will be throttled
return true;
}
return false;
}
bool handle(const LLSD& params,
const LLSD& query_map,

View File

@ -5373,8 +5373,6 @@ void LLControlAVBridge::updateSpatialExtents()
{
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWABLE
LLControlAvatar* controlAvatar = getVObj()->getControlAvatar();
LLSpatialGroup* root = (LLSpatialGroup*)mOctree->getListener(0);
bool rootWasDirty = root->isDirty();
@ -5385,10 +5383,11 @@ void LLControlAVBridge::updateSpatialExtents()
// disappear when root goes off-screen"
//
// Expand extents to include Control Avatar placed outside of the bounds
// <FS:Beq> mDrawable crash reported by Aleric Inglewood
// if (controlAvatar && (rootWasDirty || controlAvatar->mPlaying))
if (controlAvatar && controlAvatar->mDrawable.notNull() && (rootWasDirty || controlAvatar->mPlaying))
// </FS:Beq>
LLControlAvatar* controlAvatar = getVObj() ? getVObj()->getControlAvatar() : NULL;
if (controlAvatar
&& controlAvatar->mDrawable
&& controlAvatar->mDrawable->getEntry()
&& (rootWasDirty || controlAvatar->mPlaying))
{
root->expandExtents(controlAvatar->mDrawable->getSpatialExtents(), *mDrawable->getXform());
}

View File

@ -267,7 +267,7 @@
follows="left|top"
layout="topleft"
height="24"
width="52"
width="53"
left_delta="2"
top_pad="1"
halign="right"
@ -279,7 +279,7 @@
follows="left|top"
enabled="false"
top_delta="3"
left_pad="21"
left_pad="20"
height="20"
layout="topleft"
name="edt_invname_alt1"
@ -313,7 +313,7 @@
follows="left|top"
layout="topleft"
height="24"
width="52"
width="53"
left_delta="2"
top_pad="1"
halign="right"
@ -325,7 +325,7 @@
follows="left|top"
enabled="false"
top_delta="3"
left_pad="21"
left_pad="20"
height="20"
layout="topleft"
name="edt_invname_alt2"
@ -359,7 +359,7 @@
follows="left|top"
layout="topleft"
height="25"
width="52"
width="53"
left_delta="2"
top_pad="1"
halign="right"
@ -371,7 +371,7 @@
follows="left|top"
enabled="false"
top_delta="3"
left_pad="21"
left_pad="20"
height="20"
layout="topleft"
name="edt_invname_alt3"
@ -469,7 +469,7 @@
follows="left|top"
layout="topleft"
height="12"
width="52"
width="53"
left_delta="2"
top_pad="2"
halign="right"
@ -486,7 +486,7 @@
mouse_opaque="false"
visible="true"
top_delta="-3"
left_pad="2"/>
left_pad="1"/>
<line_editor
follows="left|top"
enabled="false"
@ -525,7 +525,7 @@
follows="left|top"
layout="topleft"
height="12"
width="52"
width="53"
left_delta="2"
top_pad="2"
halign="right"
@ -542,7 +542,7 @@
mouse_opaque="false"
visible="true"
top_delta="-3"
left_pad="2"/>
left_pad="1"/>
<line_editor
follows="left|top"
enabled="false"