Merge Firestorm LGPL

master
Ansariel 2016-11-11 16:04:29 +01:00
commit 3fed6c743a
36 changed files with 327 additions and 177 deletions

View File

@ -84,87 +84,76 @@ if(WINDOWS)
# Copy MS C runtime dlls, required for packaging.
# *TODO - Adapt this to support VC9
if (MSVC80)
list(APPEND LMSVC_VER 80)
list(APPEND LMSVC_VERDOT 8.0)
set(MSVC_VER 80)
set(MSVC_VERDOT 8.0)
elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
MESSAGE(STATUS "MSVC_VERSION ${MSVC_VERSION}")
set(MSVC_VER 100)
set(MSVC_VERDOT 10.0)
elseif (MSVC_VERSION EQUAL 1800) # VisualStudio 2013, which is (sigh) VS 12
list(APPEND LMSVC_VER 120)
list(APPEND LMSVC_VERDOT 12.0)
set(MSVC_VER 120)
set(MSVC_VERDOT 12.0)
else (MSVC80)
MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake")
endif (MSVC80)
# try to copy VS2010 redist independently of system version
list(APPEND LMSVC_VER 100)
list(APPEND LMSVC_VERDOT 10.0)
list(LENGTH LMSVC_VER count)
math(EXPR count "${count}-1")
foreach(i RANGE ${count})
list(GET LMSVC_VER ${i} MSVC_VER)
list(GET LMSVC_VERDOT ${i} MSVC_VERDOT)
MESSAGE(STATUS "Copying redist libs for VC ${MSVC_VERDOT}")
FIND_PATH(debug_msvc_redist_path NAME msvcr${MSVC_VER}d.dll
PATHS
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC${MSVC_VER}.DebugCRT
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
${MSVC_DEBUG_REDIST_PATH}
NO_DEFAULT_PATH
FIND_PATH(debug_msvc_redist_path msvcr${MSVC_VER}d.dll
PATHS
${MSVC_DEBUG_REDIST_PATH}
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC${MSVC_VER}.DebugCRT
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
NO_DEFAULT_PATH
)
if(EXISTS ${debug_msvc_redist_path})
set(debug_msvc_files
msvcr${MSVC_VER}d.dll
msvcp${MSVC_VER}d.dll
)
if(EXISTS ${debug_msvc_redist_path})
set(debug_msvc_files
msvcr${MSVC_VER}d.dll
msvcp${MSVC_VER}d.dll
)
copy_if_different(
${debug_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_DEBUG}"
out_targets
${debug_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
copy_if_different(
${debug_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_DEBUG}"
out_targets
${debug_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
endif ()
unset(debug_msvc_redist_path CACHE)
endif()
FIND_PATH(release_msvc_redist_path msvcr${MSVC_VER}.dll
PATHS
${MSVC_REDIST_PATH}
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC${MSVC_VER}.CRT
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
NO_DEFAULT_PATH
)
FIND_PATH(release_msvc_redist_path NAME msvcr${MSVC_VER}.dll
PATHS
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${MSVC_VERDOT}\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC${MSVC_VER}.CRT
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32
${MSVC_REDIST_PATH}
NO_DEFAULT_PATH
if(EXISTS ${release_msvc_redist_path})
set(release_msvc_files
msvcr${MSVC_VER}.dll
msvcp${MSVC_VER}.dll
)
if(EXISTS ${release_msvc_redist_path})
set(release_msvc_files
msvcr${MSVC_VER}.dll
msvcp${MSVC_VER}.dll
)
copy_if_different(
${release_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_RELEASE}"
out_targets
${release_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
copy_if_different(
${release_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_RELEASE}"
out_targets
${release_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
copy_if_different(
${release_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
out_targets
${release_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
endif ()
copy_if_different(
${release_msvc_redist_path}
"${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
out_targets
${release_msvc_files}
)
set(third_party_targets ${third_party_targets} ${out_targets})
unset(release_msvc_redist_path CACHE)
endif()
endforeach()
elseif(DARWIN)
set(SHARED_LIB_STAGING_DIR_DEBUG "${SHARED_LIB_STAGING_DIR}/Debug/Resources")

View File

@ -1200,6 +1200,7 @@ bool LLSDBinaryParser::parseString(
read(istr, (char*)&value_nbo, sizeof(U32)); /*Flawfinder: ignore*/
S32 size = (S32)ntohl(value_nbo);
if(mCheckLimits && (size > mMaxBytesLeft)) return false;
if(size < 0) return false;
std::vector<char> buf;
if(size)
{

View File

@ -265,6 +265,18 @@ void LLAvatarNameCache::handleAvNameCacheSuccess(const LLSD &data, const LLSD &h
LLUUID agent_id = row["id"].asUUID();
LLAvatarName av_name;
// <FS> Contact sets alias
if (LGGContactSets::getInstance()->hasPseudonym(agent_id))
{
LLSD info(row);
info["is_display_name_default"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id);
info["display_name"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id)
? (info["legacy_first_name"].asString() + " " + info["legacy_last_name"].asString())
: LGGContactSets::getInstance()->getPseudonym(agent_id);
av_name.fromLLSD(info);
}
else
// </FS> Contact sets alias
av_name.fromLLSD(row);
// Use expiration time from header
@ -668,7 +680,8 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
if (it != sCache.end())
{
*av_name = it->second;
if(LGGContactSets::getInstance()->hasPseudonym(agent_id))
// <FS> Contact sets alias
if (LGGContactSets::getInstance()->hasPseudonym(agent_id))
{
LLSD info = av_name->asLLSD();
info["is_display_name_default"] = LGGContactSets::getInstance()->hasDisplayNameRemoved(agent_id);
@ -677,6 +690,7 @@ bool LLAvatarNameCache::get(const LLUUID& agent_id, LLAvatarName *av_name)
: LGGContactSets::getInstance()->getPseudonym(agent_id);
av_name->fromLLSD(info);
}
// <FS/> Contact sets alias
// re-request name if entry is expired
if (av_name->mExpires < LLFrameTimer::getTotalSeconds())
@ -723,8 +737,9 @@ LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& ag
{
LLAvatarName& av_name = it->second;
LLSD test = av_name.asLLSD();
if(LGGContactSets::getInstance()->hasPseudonym(agent_id))
// <FS> Contact sets alias
if (LGGContactSets::getInstance()->hasPseudonym(agent_id))
{
LL_DEBUGS("AvNameCache") << "DN cache hit via alias " << agent_id << LL_ENDL;
LLSD info = av_name.asLLSD();
@ -734,7 +749,8 @@ LLAvatarNameCache::callback_connection_t LLAvatarNameCache::get(const LLUUID& ag
: LGGContactSets::getInstance()->getPseudonym(agent_id);
av_name.fromLLSD(info);
}
// </FS> Contact sets alias
if (av_name.mExpires > LLFrameTimer::getTotalSeconds())
{
// ...name already exists in cache, fire callback now

View File

@ -202,6 +202,7 @@ LLMessageSystem::LLMessageSystem(const std::string& filename, U32 port,
const F32 circuit_heartbeat_interval, const F32 circuit_timeout) :
mCircuitInfo(F32Seconds(circuit_heartbeat_interval), F32Seconds(circuit_timeout)),
mLastMessageFromTrustedMessageService(false)
,mIsInSecondLife(true) // <FS:Ansariel> Restore original LLMessageSystem HTTP options for OpenSim
{
init();
@ -4024,6 +4025,14 @@ void LLMessageSystem::sendUntrustedSimulatorMessageCoro(std::string url, std::st
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
LLCore::HttpOptions::ptr_t httpOpts = LLCore::HttpOptions::ptr_t(new LLCore::HttpOptions);
// <FS:Ansariel> Restore original LLMessageSystem HTTP options for OpenSim
if (!mIsInSecondLife)
{
httpOpts->setRetries(0);
httpOpts->setTimeout(60);
httpOpts->setTransferTimeout(60);
}
// </FS:Ansariel>
if (url.empty())
{

View File

@ -737,6 +737,9 @@ public:
// This will cause all trust queries to return true until the next message
// is read: use with caution!
void receivedMessageFromTrustedSender();
// <FS:Ansariel> Restore original LLMessageSystem HTTP options for OpenSim
void setIsInSecondLife(bool in_second_life) { mIsInSecondLife = in_second_life; }
private:
typedef boost::function<void(S32)> UntrustedCallback_t;
@ -828,6 +831,9 @@ private:
/** Find, create or revive circuit for host as needed */
LLCircuitData* findCircuit(const LLHost& host, bool resetPacketId);
// <FS:Ansariel> Restore original LLMessageSystem HTTP options for OpenSim
bool mIsInSecondLife;
};

View File

@ -352,6 +352,7 @@ void LLLineEditor::reshape(S32 width, S32 height, BOOL called_from_parent)
void LLLineEditor::setEnabled(BOOL enabled)
{
LLUICtrl::setEnabled(enabled); // <FS:Ansariel> Enabling LLLineEditor via XUI breaks enabled-state
mReadOnly = !enabled;
setTabStop(!mReadOnly);
updateAllowingLanguageInput();

View File

@ -1521,7 +1521,7 @@ std::string LLUrlEntryJira::getUrl(const std::string &string) const
string.find("SLS") != std::string::npos ||
string.find("SUP") != std::string::npos )
{
return llformat("http://jira.phoenixviewer.com/browse/%s", string.c_str());
return llformat("https://jira.phoenixviewer.com/browse/%s", string.c_str());
}
else
{

View File

@ -12970,7 +12970,7 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://jira.phoenixviewer.com/secure/CreateIssueDetails!init.jspa?pid=10005&amp;issuetype=1&amp;priority=3&amp;environment=[ENVIRONMENT]</string>
<string>https://jira.phoenixviewer.com/secure/CreateIssueDetails!init.jspa?pid=10005&amp;issuetype=1&amp;priority=3&amp;environment=[ENVIRONMENT]</string>
</map>
<key>RevokePermsOnStopAnimation</key>
<map>

View File

@ -333,7 +333,6 @@ bool FSFloaterIMContainer::hasFloater(LLFloater* floaterp)
void FSFloaterIMContainer::onCloseFloater(LLUUID& id)
{
mSessions.erase(id);
setFocus(TRUE);
}
void FSFloaterIMContainer::onNewMessageReceived(const LLSD& data)

View File

@ -223,14 +223,15 @@ void FSFloaterLinkReplace::linkCreatedCallback(const LLUUID& old_item_id,
// *after* the original link has been removed. LLAppearanceMgr abuses the actual link
// description to store the clothing ordering information it. We will have to update
// the clothing ordering information or the outfit will be in dirty state when worn.
remove_inventory_object(old_item_id, new LLBoostFuncInventoryCallback(boost::bind(&LLAppearanceMgr::updateClothingOrderingInfo,
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(&LLAppearanceMgr::updateClothingOrderingInfo,
LLAppearanceMgr::getInstance(),
outfit_folder_id,
LLPointer<LLInventoryCallback>(NULL))));
LLPointer<LLInventoryCallback>(NULL)));
remove_inventory_object(old_item_id, cb);
}
else
{
remove_inventory_object(old_item_id, NULL);
remove_inventory_object(old_item_id, LLPointer<LLInventoryCallback>(NULL));
}
if (mInstance)
@ -306,15 +307,14 @@ void FSFloaterLinkReplace::processBatch(LLInventoryModel::item_array_t items)
LLInventoryObject::const_object_list_t obj_array;
obj_array.push_back(LLConstPointer<LLInventoryObject>(target_item));
link_inventory_array(source_item->getParentUUID(),
obj_array,
new LLBoostFuncInventoryCallback(boost::bind(&FSFloaterLinkReplace::linkCreatedCallback,
LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(&FSFloaterLinkReplace::linkCreatedCallback,
this,
source_item->getUUID(),
target_item->getUUID(),
needs_wearable_ordering_update,
needs_description_update,
(is_outfit_folder ? source_item->getParentUUID() : LLUUID::null) )));
(is_outfit_folder ? source_item->getParentUUID() : LLUUID::null) ));
link_inventory_array(source_item->getParentUUID(), obj_array, cb);
}
else
{

View File

@ -1501,10 +1501,12 @@ void LLAppearanceMgr::wearItemsOnAvatar(const uuid_vec_t& item_ids_to_wear,
}
// [RLVa:KB] - Checked: 2013-02-12 (RLVa-1.4.8)
if ( (rlv_handler_t::isEnabled()) && (!rlvPredCanWearItem(item_to_wear, (replace) ? RLV_WEAR_REPLACE : RLV_WEAR_ADD)) )
{
continue;
}
if ( (rlv_handler_t::isEnabled()) && (!rlvPredCanWearItem(item_to_wear, (item_to_wear->getType() == LLAssetType::AT_BODYPART || replace) ? RLV_WEAR_REPLACE : RLV_WEAR_ADD)) )
{
LL_DEBUGS("Avatar") << "inventory item cannot be worn because of RLV restriction, skipping "
<< item_to_wear->getName() << " id " << item_id_to_wear << LL_ENDL;
continue;
}
// [/RLVa:KB]
switch (item_to_wear->getType())
@ -1524,9 +1526,9 @@ void LLAppearanceMgr::wearItemsOnAvatar(const uuid_vec_t& item_ids_to_wear,
LLUUID item_id = gAgentWearables.getWearableItemID(item_to_wear->getWearableType(),
wearable_count-1);
// [SL:KB] - Patch: Appearance-AISFilter | Checked: 2015-05-02 (Catznip-3.7)
removeCOFItemLinks(item_id, NULL, true);
removeCOFItemLinks(item_id, NULL, true);
// [/SL:KB]
// removeCOFItemLinks(item_id, cb);
// removeCOFItemLinks(item_id, cb);
}
items_to_link.push_back(item_to_wear);

View File

@ -1393,7 +1393,10 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector<LLDrawable*>*
LLVOAvatar* avatarp = (LLVOAvatar*) objparent;
if (avatarp->isVisible())
{
impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor();
// <FS:Ansariel> Fix LL impostor hacking
//impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor();
impostor = objparent->isAvatar() && avatarp->isImpostor() && !avatarp->needsImpostorUpdate();
// </FS:Ansariel>
loaded = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isFullyLoaded();
}
else
@ -1483,7 +1486,10 @@ void LLSpatialBridge::updateDistance(LLCamera& camera_in, bool force_update)
if (parent && parent->getVObj())
{
LLVOAvatar* av = parent->getVObj()->asAvatar();
if (av && av->isImpostor())
// <FS:Ansariel> Fix LL impostor hacking
//if (av && av->isImpostor())
if (av && av->isImpostor() && !av->needsImpostorUpdate())
// </FS:Ansariel>
{
return;
}

View File

@ -489,8 +489,11 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)
BOOL impostor = avatarp->isImpostor();
if (impostor
&& LLVOAvatar::AV_DO_NOT_RENDER != avatarp->getVisualMuteSettings()
&& LLVOAvatar::AV_ALWAYS_RENDER != avatarp->getVisualMuteSettings())
// <FS:Ansariel> Fix LL impostor hacking; No shadow for impostors
//&& LLVOAvatar::AV_DO_NOT_RENDER != avatarp->getVisualMuteSettings()
//&& LLVOAvatar::AV_ALWAYS_RENDER != avatarp->getVisualMuteSettings())
)
// </FS:Ansariel>
{
return;
}
@ -1370,9 +1373,12 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
BOOL impostor = avatarp->isImpostor() && !single_avatar;
if (( /*avatarp->isInMuteList() // <FS:Ansariel> Partially undo MAINT-5700: Draw imposter for muted avatars
||*/ impostor
|| (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()) ) && pass != 0)
// <FS:Ansariel> Fix LL impostor hacking; Don't render impostored avatars unless it needs an update
//if (( avatarp->isInMuteList()
// || impostor
// || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()) ) && pass != 0)
if (impostor && !avatarp->needsImpostorUpdate() && pass != 0)
// </FS:Ansariel>
{ //don't draw anything but the impostor for impostored avatars
return;
}
@ -1389,7 +1395,10 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
LLVOAvatar::sNumVisibleAvatars++;
}
if (impostor || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()))
// <FS:Ansariel> Fix LL impostor hacking
//if (impostor || (LLVOAvatar::AV_DO_NOT_RENDER == avatarp->getVisualMuteSettings() && !avatarp->needsImpostorUpdate()))
if (impostor && !avatarp->needsImpostorUpdate())
// </FS:Ansariel>
{
if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && avatarp->mImpostor.isComplete())
{

View File

@ -243,7 +243,7 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask)
{
return TRUE;
}
else if (mHoverBarIndex == -1)
else if (mHoverBarIndex < 0)
{
mHoverBarIndex = 0;
}
@ -283,7 +283,7 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask)
{
hover_bar = &bar;
if (bar.mTimeBlock->getTreeNode().mCollapsed)
{
{
// stop on first collapsed BlockTimerStatHandle, since we can't select any children
break;
}

View File

@ -80,6 +80,7 @@ void LLFloaterModelUploadBase::requestAgentUploadPermissionsCoro(std::string url
if (!observer)
{
LL_WARNS("MeshUploadFlag") << "Unable to get observer after call to '" << url << "' aborting." << LL_ENDL;
return;
}
if (!status)

View File

@ -576,10 +576,6 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
// <FS:Ansariel> FIRE-2912: Reset voice button
mCommitCallbackRegistrar.add("Pref.ResetVoice", boost::bind(&LLFloaterPreference::onClickResetVoice, this));
// <FS: KC> FIRE-18250: Option to disable default eye movement
mCommitCallbackRegistrar.add("Pref.StaticEyes", boost::bind(&LLFloaterPreference::onClickStaticEyes, this));
// </Firestorm callbacks>
mCommitCallbackRegistrar.add("UpdateFilter", boost::bind(&LLFloaterPreference::onUpdateFilterTerm, this, false)); // <FS:ND/> Hook up for filtering
}
@ -5367,7 +5363,7 @@ void LLFloaterPreference::loadFontPresetsFromDir(const std::string& dir, LLCombo
void LLFloaterPreference::populateFontSelectionCombo()
{
LLComboBox* font_selection_combo = getChild<LLComboBox>("Fontsettingsfile");
if(font_selection_combo)
if (font_selection_combo)
{
const std::string fontDir(gDirUtilp->getExpandedFilename(LL_PATH_FONTS, "", ""));
const std::string userfontDir(gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS , "fonts", ""));
@ -5375,29 +5371,12 @@ void LLFloaterPreference::populateFontSelectionCombo()
// Load fonts.xmls from the install dir first then user_settings
loadFontPresetsFromDir(fontDir, font_selection_combo);
loadFontPresetsFromDir(userfontDir, font_selection_combo);
font_selection_combo->setValue(gSavedSettings.getString("FSFontSettingsFile"));
}
}
// </FS:Kadah>
// <FS:KC> FIRE-18250: Option to disable default eye movement
void LLFloaterPreference::onClickStaticEyes()
{
LLUUID anim_id(gSavedSettings.getString("FSStaticEyesUUID"));
if (gSavedPerAccountSettings.getBOOL("FSStaticEyes"))
{
gAgentAvatarp->startMotion(anim_id);
gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_START);
}
else
{
gAgentAvatarp->stopMotion(anim_id);
gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_STOP);
}
}
// </FS:KC>
// <FS:AW optional opensim support>
#ifdef OPENSIM
static LLPanelInjector<LLPanelPreferenceOpensim> t_pref_opensim("panel_preference_opensim");

View File

@ -180,9 +180,6 @@ public:
// <FS:Ansariel> FIRE-2912: Reset voice button
void onClickResetVoice();
// <FS:KC> FIRE-18250: Option to disable default eye movement
void onClickStaticEyes();
void onClickSetCache();
void onClickBrowseCache();
void onClickBrowseCrashLogs();

View File

@ -883,7 +883,8 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
// hide old preview as the aspect ratio could be wrong
checkAutoSnapshot(previewp, FALSE);
LL_DEBUGS() << "updating thumbnail" << LL_ENDL;
getPreviewView()->updateSnapshot(TRUE);
// Don't update immediately, give window chance to redraw
getPreviewView()->updateSnapshot(TRUE, FALSE, 1.f);
if(do_update)
{
LL_DEBUGS() << "Will update controls" << LL_ENDL;

View File

@ -690,7 +690,7 @@ void LLInventoryCategoriesObserver::changed(U32 mask)
}
}
bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t cb)
bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t cb, bool init_name_hash)
{
S32 version = LLViewerInventoryCategory::VERSION_UNKNOWN;
S32 current_num_known_descendents = LLViewerInventoryCategory::DESCENDENT_COUNT_UNKNOWN;
@ -728,8 +728,15 @@ bool LLInventoryCategoriesObserver::addCategory(const LLUUID& cat_id, callback_t
if (can_be_added)
{
mCategoryMap.insert(category_map_value_t(
cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents)));
if(init_name_hash)
{
LLMD5 item_name_hash = gInventory.hashDirectDescendentNames(cat_id);
mCategoryMap.insert(category_map_value_t(cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents,item_name_hash)));
}
else
{
mCategoryMap.insert(category_map_value_t(cat_id,LLCategoryData(cat_id, cb, version, current_num_known_descendents)));
}
}
return can_be_added;
@ -752,6 +759,18 @@ LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData(
mItemNameHash.finalize();
}
LLInventoryCategoriesObserver::LLCategoryData::LLCategoryData(
const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash)
: mCatID(cat_id)
, mCallback(cb)
, mVersion(version)
, mDescendentsCount(num_descendents)
, mIsNameHashInitialized(true)
, mItemNameHash(name_hash)
{
}
void LLScrollOnRenameObserver::changed(U32 mask)
{
if (mask & LLInventoryObserver::LABEL)

View File

@ -267,14 +267,14 @@ public:
* @return "true" if category was added, "false" if it could
* not be found.
*/
bool addCategory(const LLUUID& cat_id, callback_t cb);
bool addCategory(const LLUUID& cat_id, callback_t cb, bool init_name_hash = false);
void removeCategory(const LLUUID& cat_id);
protected:
struct LLCategoryData
{
LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents);
LLCategoryData(const LLUUID& cat_id, callback_t cb, S32 version, S32 num_descendents, LLMD5 name_hash);
callback_t mCallback;
S32 mVersion;
S32 mDescendentsCount;

View File

@ -241,6 +241,7 @@ void LLOutfitGallery::removeLastRow()
{
mRowCount--;
mGalleryPanel->removeChild(mLastRowPanel);
mUnusedRowPanels.push_back(mLastRowPanel);
mRowPanels.pop_back();
mLastRowPanel = mRowPanels.back();
}
@ -342,6 +343,7 @@ void LLOutfitGallery::removeFromLastRow(LLOutfitGalleryItem* item)
{
mItemPanels.back()->removeChild(item);
mLastRowPanel->removeChild(mItemPanels.back());
mUnusedItemPanels.push_back(mItemPanels.back());
mItemPanels.pop_back();
}
@ -381,7 +383,16 @@ LLPanel* LLOutfitGallery::buildItemPanel(int left)
{
LLPanel::Params lpparams;
int top = 0;
LLPanel* lpanel = LLUICtrlFactory::create<LLPanel>(lpparams);
LLPanel* lpanel = NULL;
if(mUnusedItemPanels.empty())
{
lpanel = LLUICtrlFactory::create<LLPanel>(lpparams);
}
else
{
lpanel = mUnusedItemPanels.back();
mUnusedItemPanels.pop_back();
}
LLRect rect = LLRect(left, top + mItemHeight, left + mItemWidth + mItemHorizontalGap, top);
lpanel->setRect(rect);
lpanel->reshape(mItemWidth + mItemHorizontalGap, mItemHeight);
@ -394,7 +405,16 @@ LLPanel* LLOutfitGallery::buildItemPanel(int left)
LLPanel* LLOutfitGallery::buildRowPanel(int left, int bottom)
{
LLPanel::Params sparams;
LLPanel* stack = LLUICtrlFactory::create<LLPanel>(sparams);
LLPanel* stack = NULL;
if(mUnusedRowPanels.empty())
{
stack = LLUICtrlFactory::create<LLPanel>(sparams);
}
else
{
stack = mUnusedRowPanels.back();
mUnusedRowPanels.pop_back();
}
moveRowPanel(stack, left, bottom);
return stack;
}
@ -424,6 +444,19 @@ LLOutfitGallery::~LLOutfitGallery()
gInventory.removeObserver(mOutfitsObserver);
}
delete mOutfitsObserver;
while (!mUnusedRowPanels.empty())
{
LLPanel* panelp = mUnusedRowPanels.back();
mUnusedRowPanels.pop_back();
panelp->die();
}
while (!mUnusedItemPanels.empty())
{
LLPanel* panelp = mUnusedItemPanels.back();
mUnusedItemPanels.pop_back();
panelp->die();
}
}
void LLOutfitGallery::setFilterSubString(const std::string& string)
@ -504,7 +537,7 @@ void LLOutfitGallery::updateAddedCategory(LLUUID cat_id)
// Start observing changes in "My Outfits" category.
mOutfitsObserver->addCategory(cat_id,
boost::bind(&LLOutfitGallery::refreshOutfit, this, cat_id));
boost::bind(&LLOutfitGallery::refreshOutfit, this, cat_id), true);
outfit_category->fetch();
refreshOutfit(cat_id);

View File

@ -158,6 +158,8 @@ private:
void moveRowPanel(LLPanel* stack, int left, int bottom);
std::vector<LLPanel*> mRowPanels;
std::vector<LLPanel*> mItemPanels;
std::vector<LLPanel*> mUnusedRowPanels;
std::vector<LLPanel*> mUnusedItemPanels;
std::vector<LLOutfitGalleryItem*> mItems;
std::vector<LLOutfitGalleryItem*> mHiddenItems;
LLScrollContainer* mScrollPanel;

View File

@ -520,10 +520,6 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
if(!parcel->getGroupID().isNull())
{
// FIXME: Using parcel group as region group.
gCacheName->getGroup(parcel->getGroupID(),
boost::bind(&LLPanelPlaceInfo::onNameCache, mRegionGroupText, _2));
std::string owner =
LLSLURL("group", parcel->getGroupID(), "inspect").getSLURLString();
mParcelOwner->setText(owner);
@ -542,12 +538,20 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,
LLSLURL("agent", parcel->getOwnerID(), "inspect").getSLURLString();
mParcelOwner->setText(parcel_owner);
LLAvatarNameCache::get(region->getOwner(), boost::bind(&LLPanelPlaceInfo::onAvatarNameCache, _1, _2, mRegionOwnerText));
mRegionGroupText->setText( getString("none_text"));
}
if(LLParcel::OS_LEASE_PENDING == parcel->getOwnershipStatus())
{
mRegionOwnerText->setText(mRegionOwnerText->getText() + getString("sale_pending_text"));
}
if(!parcel->getGroupID().isNull())
{
// FIXME: Using parcel group as region group.
gCacheName->getGroup(parcel->getGroupID(),
boost::bind(&LLPanelPlaceInfo::onNameCache, mRegionGroupText, _2));
}
}
mEstateRatingText->setText(region->getSimAccessString());

View File

@ -469,7 +469,11 @@ void LLSnapshotLivePreview::reshape(S32 width, S32 height, BOOL called_from_pare
LL_DEBUGS() << "window reshaped, updating thumbnail" << LL_ENDL;
if (mViewContainer && mViewContainer->isInVisibleChain())
{
updateSnapshot(TRUE);
// We usually resize only on window reshape, so give it a chance to redraw, assign delay
updateSnapshot(
TRUE, // new snapshot is needed
FALSE, // thumbnail will be updated either way.
AUTO_SNAPSHOT_TIME_DELAY); // shutter delay.
}
}
}

View File

@ -1711,6 +1711,9 @@ bool idle_startup()
}
// </FS:Ansariel>
// <FS:Ansariel> Restore original LLMessageSystem HTTP options for OpenSim
gMessageSystem->setIsInSecondLife(LLGridManager::getInstance()->isInSecondLife());
// Finish agent initialization. (Requires gSavedSettings, builds camera)
gAgent.init();
display_startup();
@ -1966,9 +1969,9 @@ bool idle_startup()
display_startup();
// </FS:Ansariel> [FS communication UI]
// <FS:KC> FIRE-18250: Option to disable default eye movement
gAgent.addRegionChangedCallback(boost::bind(&update_static_eyes));
update_static_eyes();
// <FS:KC> FIRE-18250: Option to disable default eye movement
gAgent.addRegionChangedCallback(boost::bind(&update_static_eyes));
update_static_eyes();
// </FS:KC>
// *Note: this is where gWorldMap used to be initialized.
@ -4505,11 +4508,12 @@ void transition_back_to_login_panel(const std::string& emsg)
// <FS:KC> FIRE-18250: Option to disable default eye movement
//static
void update_static_eyes() {
if (gSavedPerAccountSettings.getBOOL("FSStaticEyes"))
{
LLUUID anim_id(gSavedSettings.getString("FSStaticEyesUUID"));
gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_START);
}
void update_static_eyes()
{
if (gSavedPerAccountSettings.getBOOL("FSStaticEyes"))
{
LLUUID anim_id(gSavedSettings.getString("FSStaticEyesUUID"));
gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_START);
}
}
// </FS:KC>

View File

@ -903,6 +903,28 @@ void handleLogThrottleChanged(const LLSD& newvalue)
}
// </FS:Ansariel>
// <FS:Ansariel> FIRE-18250: Option to disable default eye movement
void handleStaticEyesChanged()
{
if (!isAgentAvatarValid())
{
return;
}
LLUUID anim_id(gSavedSettings.getString("FSStaticEyesUUID"));
if (gSavedPerAccountSettings.getBOOL("FSStaticEyes"))
{
gAgentAvatarp->startMotion(anim_id);
gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_START);
}
else
{
gAgentAvatarp->stopMotion(anim_id);
gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_STOP);
}
}
// </FS:Ansariel>
////////////////////////////////////////////////////////////////////////////
void settings_setup_listeners()
@ -1120,6 +1142,11 @@ void settings_setup_listeners()
// <FS:Ansariel> Debug setting to disable log throttle
gSavedSettings.getControl("FSEnableLogThrottle")->getSignal()->connect(boost::bind(&handleLogThrottleChanged, _2));
// <FS:Ansariel> FIRE-18250: Option to disable default eye movement
gSavedSettings.getControl("FSStaticEyesUUID")->getSignal()->connect(boost::bind(&handleStaticEyesChanged));
gSavedPerAccountSettings.getControl("FSStaticEyes")->getSignal()->connect(boost::bind(&handleStaticEyesChanged));
// </FS:Ansariel>
}
#if TEST_CACHED_CONTROL

View File

@ -1441,12 +1441,24 @@ void update_inventory_item(
if (updates.has("asset_id"))
{
updates.erase("asset_id");
updates["hash_id"] = update_item->getTransactionID();
// <FS:Ansariel> Check for non-null UUID as in LLViewerInventoryItem::updateServer
//updates["hash_id"] = update_item->getTransactionID();
if(update_item->getTransactionID().notNull())
{
updates["hash_id"] = update_item->getTransactionID();
}
// </FS:Ansariel>
}
if (updates.has("shadow_id"))
{
updates.erase("shadow_id");
updates["hash_id"] = update_item->getTransactionID();
// <FS:Ansariel> Check for non-null UUID as in LLViewerInventoryItem::updateServer
//updates["hash_id"] = update_item->getTransactionID();
if(update_item->getTransactionID().notNull())
{
updates["hash_id"] = update_item->getTransactionID();
}
// </FS:Ansariel>
}
AISAPI::completion_t cr = boost::bind(&doInventoryCb, cb, _1);
AISAPI::UpdateItem(item_id, updates, cr);

View File

@ -9725,6 +9725,12 @@ void process_covenant_reply(LLMessageSystem* msg, void**)
{
panel->updateCovenantText(covenant_text);
}
// <FS:Ansariel> Standalone location profile floater
if (fs_floater)
{
fs_floater->updateCovenantText(covenant_text);
}
// </FS:Ansariel>
}
}

View File

@ -643,9 +643,9 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
}
#endif
if (FSAssetBlacklist::getInstance()->isBlacklisted(fullid, LLAssetType::AT_OBJECT))
if (FSAssetBlacklist::getInstance()->isBlacklisted(fullid, (pcode == LL_PCODE_LEGACY_AVATAR ? LLAssetType::AT_PERSON : LLAssetType::AT_OBJECT)))
{
LL_INFOS() << "Blacklisted object blocked." << LL_ENDL;
LL_INFOS() << "Blacklisted " << (pcode == LL_PCODE_LEGACY_AVATAR ? "avatar" : "object") << " blocked." << LL_ENDL;
continue;
}

View File

@ -465,7 +465,7 @@ LLViewerOctreeGroup::LLViewerOctreeGroup(OctreeNode* node)
{
LLVector4a tmp;
tmp.splat(0.f);
mExtents[0] = mExtents[1] = mObjectBounds[0] = mObjectBounds[1] =
mExtents[0] = mExtents[1] = mObjectBounds[0] = mObjectBounds[0] = mObjectBounds[1] =
mObjectExtents[0] = mObjectExtents[1] = tmp;
mBounds[0] = node->getCenter();

View File

@ -709,12 +709,10 @@ void LLViewerPartSim::updateSimulation()
BOOL upd = TRUE;
LLViewerObject* vobj = mViewerPartSources[i]->mSourceObjectp;
// <FS:Ansariel> Partially undo MAINT-5700: Draw imposter for muted avatars
//if (vobj && vobj->isAvatar() && ((LLVOAvatar*)vobj)->isInMuteList())
//{
// upd = FALSE;
//}
// </FS:Ansariel>
if (vobj && vobj->isAvatar() && ((LLVOAvatar*)vobj)->isInMuteList())
{
upd = FALSE;
}
if (upd && vobj && (vobj->getPCode() == LL_PCODE_VOLUME))
{

View File

@ -2596,7 +2596,10 @@ void LLVOAvatar::idleUpdateMisc(bool detailed_update)
BOOL visible = isVisible() || mNeedsAnimUpdate;
// update attachments positions
if (detailed_update || !sUseImpostors)
// <FS:Ansariel> Fix LL impostor hacking; No detailed updates if muted when using no impostors
//if (detailed_update || !sUseImpostors)
if (detailed_update || (!sUseImpostors && !isInMuteList()))
// </FS:Ansariel>
{
LL_RECORD_BLOCK_TIME(FTM_ATTACHMENT_UPDATE);
for (attachment_map_t::iterator iter = mAttachmentPoints.begin();
@ -3998,7 +4001,10 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
//--------------------------------------------------------------------
bool visually_muted = isVisuallyMuted();
if (visible && (!isSelf() || visually_muted) && !mIsDummy && sUseImpostors && !mNeedsAnimUpdate && !sFreezeCounter)
// <FS:Ansariel> Fix LL impostor hacking; Adjust update period for muted avatars if using no impostors
//if (visible && (!isSelf() || visually_muted) && !mIsDummy && sUseImpostors && !mNeedsAnimUpdate && !sFreezeCounter)
if (visible && (!isSelf() || visually_muted) && !mIsDummy && (sUseImpostors || isInMuteList()) && !mNeedsAnimUpdate && !sFreezeCounter)
// </FS:Ansariel>
{
const LLVector4a* ext = mDrawable->getSpatialExtents();
LLVector4a size;
@ -9638,7 +9644,10 @@ void LLVOAvatar::updateFreezeCounter(S32 counter)
BOOL LLVOAvatar::updateLOD()
{
if (isImpostor() && 0 != mDrawable->getNumFaces() && mDrawable->getFace(0)->hasGeometry())
// <FS:Ansariel> Fix LL impostor hacking
//if (isImpostor() && 0 != mDrawable->getNumFaces() && mDrawable->getFace(0)->hasGeometry())
if (isImpostor() && !needsImpostorUpdate() && 0 != mDrawable->getNumFaces() && mDrawable->getFace(0)->hasGeometry())
// </FS:Ansariel>
{
return TRUE;
}
@ -9686,7 +9695,10 @@ void LLVOAvatar::updateImpostors()
LLVOAvatar* avatar = (LLVOAvatar*) *iter;
if (!avatar->isDead() && avatar->isVisible()
&& (
(avatar->isImpostor() || LLVOAvatar::AV_DO_NOT_RENDER == avatar->getVisualMuteSettings()) && avatar->needsImpostorUpdate())
// <FS:Ansariel> Fix LL impostor hacking; Generate new impostor if update is needed
//(avatar->isImpostor() || LLVOAvatar::AV_DO_NOT_RENDER == avatar->getVisualMuteSettings()) && avatar->needsImpostorUpdate())
avatar->isImpostor() && avatar->needsImpostorUpdate())
// </FS:Ansariel>
)
{
avatar->calcMutedAVColor();
@ -9699,7 +9711,24 @@ void LLVOAvatar::updateImpostors()
BOOL LLVOAvatar::isImpostor()
{
return sUseImpostors && (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD)) ? TRUE : FALSE;
// <FS:Ansariel> Fix LL impostor hacking
// IMPORTANT: LLPipeline::generateImpostor() will set sUseImporstors = FALSE when generating
// an impostor. If checking for isImpostor() somewhere else to skip parts in the
// rendering process, an additional check for needsImpostorUpdate() needs to be
// done to determine if the particular part can really be skipped
// (mNeedsImpostorUpdate = FALSE) or is currently needed to generate the
// impostor (mNeedsImpostorUpdate = TRUE).
//return sUseImpostors && (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD)) ? TRUE : FALSE;
if (sUseImpostors)
{
return (isVisuallyMuted() || (mUpdatePeriod >= IMPOSTOR_PERIOD));
}
else
{
return (LLVOAvatar::AV_DO_NOT_RENDER == getVisualMuteSettings() || isInMuteList());
}
// </FS:Ansariel>
}
BOOL LLVOAvatar::shouldImpostor(const U32 rank_factor) const

View File

@ -1820,10 +1820,7 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable)
dirtySpatialGroup(drawable->isState(LLDrawable::IN_REBUILD_Q1));
compiled = TRUE;
lodOrSculptChanged(drawable, compiled);
if (!mLODChanged)
{
genBBoxes(FALSE);
}
genBBoxes(FALSE);
}
// it has its own drawable (it's moved) or it has changed UVs or it has changed xforms from global<->local
else

View File

@ -3194,9 +3194,12 @@ void LLPipeline::markVisible(LLDrawable *drawablep, LLCamera& camera)
if (vobj) // this test may not be needed, see above
{
LLVOAvatar* av = vobj->asAvatar();
if (av && (av->isImpostor()
//|| av->isInMuteList() // <FS:Ansariel> Partially undo MAINT-5700: Draw imposter for muted avatars
|| (LLVOAvatar::AV_DO_NOT_RENDER == av->getVisualMuteSettings() && !av->needsImpostorUpdate()) ))
// <FS:Ansariel> Fix LL impostor hacking; Don't render impostored avatars unless it needs an update
//if (av && (av->isImpostor()
// || av->isInMuteList()
// || (LLVOAvatar::AV_DO_NOT_RENDER == av->getVisualMuteSettings() && !av->needsImpostorUpdate()) ))
if (av && av->isImpostor() && !av->needsImpostorUpdate())
// </FS:Ansariel>
{
return;
}
@ -11728,7 +11731,10 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
avatar->setImpostorDim(tdim);
LLVOAvatar::sUseImpostors = true; // @TODO ???
// <FS:Ansariel> FIRE-20333: Set back to correct value depending on sMaxNonImpostors
//LLVOAvatar::sUseImpostors = true; // @TODO ???
LLVOAvatar::sUseImpostors = (0 != LLVOAvatar::sMaxNonImpostors);
// </FS:Ansariel>
sUseOcclusion = occlusion;
sReflectionRender = FALSE;
sImpostorRender = FALSE;

View File

@ -556,10 +556,7 @@
left="15"
name="FSStaticEyes"
width="250"
control_name="FSStaticEyes">
<check_box.commit_callback
function="Pref.StaticEyes" />
</check_box>
control_name="FSStaticEyes"/>
<!-- LGG Color Beams -->
<text

View File

@ -486,13 +486,9 @@ class Windows_i686_Manifest(ViewerManifest):
if self.args['configuration'].lower() == 'debug':
self.path("msvcr120d.dll")
self.path("msvcp120d.dll")
self.path("msvcr100d.dll")
self.path("msvcp100d.dll")
else:
self.path("msvcr120.dll")
self.path("msvcp120.dll")
self.path("msvcr100.dll")
self.path("msvcp100.dll")
# Vivox runtimes
self.path("SLVoice.exe")