Merge viewer-bear
commit
cb968152b0
|
|
@ -192,6 +192,9 @@ Ansariel Hiller
|
|||
MAINT-5756
|
||||
MAINT-4677
|
||||
MAINT-2199
|
||||
MAINT-6300
|
||||
MAINT-6397
|
||||
MAINT-6432
|
||||
Aralara Rajal
|
||||
Arare Chantilly
|
||||
CHUIBUG-191
|
||||
|
|
|
|||
|
|
@ -1673,6 +1673,7 @@ BOOL LLFloater::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
// <FS:Ansariel> FIRE-11724: Snooze group chat
|
||||
if(offerClickToButton(x, y, mask, BUTTON_SNOOZE)) return TRUE;
|
||||
|
||||
setFrontmost(TRUE, FALSE);
|
||||
// Otherwise pass to drag handle for movement
|
||||
return mDragHandle->handleMouseDown(x, y, mask);
|
||||
}
|
||||
|
|
@ -1747,7 +1748,7 @@ void LLFloater::setVisibleAndFrontmost(BOOL take_focus,const LLSD& key)
|
|||
}
|
||||
}
|
||||
|
||||
void LLFloater::setFrontmost(BOOL take_focus)
|
||||
void LLFloater::setFrontmost(BOOL take_focus, BOOL restore)
|
||||
{
|
||||
LLMultiFloater* hostp = getHost();
|
||||
if (hostp)
|
||||
|
|
@ -1763,7 +1764,7 @@ void LLFloater::setFrontmost(BOOL take_focus)
|
|||
LLFloaterView * parent = dynamic_cast<LLFloaterView*>( getParent() );
|
||||
if (parent)
|
||||
{
|
||||
parent->bringToFront(this, take_focus);
|
||||
parent->bringToFront(this, take_focus, restore);
|
||||
}
|
||||
|
||||
// Make sure to set the appropriate transparency type (STORM-732).
|
||||
|
|
@ -2563,7 +2564,7 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF
|
|||
}
|
||||
|
||||
|
||||
void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus)
|
||||
void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus, BOOL restore)
|
||||
{
|
||||
if (!child)
|
||||
return;
|
||||
|
|
@ -2647,7 +2648,12 @@ void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus)
|
|||
{
|
||||
sendChildToFront(child);
|
||||
}
|
||||
child->setMinimized(FALSE);
|
||||
|
||||
if(restore)
|
||||
{
|
||||
child->setMinimized(FALSE);
|
||||
}
|
||||
|
||||
if (give_focus && !gFocusMgr.childHasKeyboardFocus(child))
|
||||
{
|
||||
child->setFocus(TRUE);
|
||||
|
|
|
|||
|
|
@ -320,7 +320,7 @@ public:
|
|||
/*virtual*/ void setVisible(BOOL visible); // do not override
|
||||
/*virtual*/ void onVisibilityChange ( BOOL new_visibility ); // do not override
|
||||
|
||||
void setFrontmost(BOOL take_focus = TRUE);
|
||||
void setFrontmost(BOOL take_focus = TRUE, BOOL restore = TRUE);
|
||||
virtual void setVisibleAndFrontmost(BOOL take_focus=TRUE, const LLSD& key = LLSD());
|
||||
|
||||
// Defaults to false.
|
||||
|
|
@ -561,7 +561,7 @@ public:
|
|||
|
||||
void setCycleMode(BOOL mode) { mFocusCycleMode = mode; }
|
||||
BOOL getCycleMode() const { return mFocusCycleMode; }
|
||||
void bringToFront( LLFloater* child, BOOL give_focus = TRUE );
|
||||
void bringToFront( LLFloater* child, BOOL give_focus = TRUE, BOOL restore = TRUE );
|
||||
void highlightFocusedFloater();
|
||||
void unhighlightFocusedFloater();
|
||||
void focusFrontFloater();
|
||||
|
|
|
|||
|
|
@ -138,6 +138,8 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
|
|||
mIsSelected( FALSE ),
|
||||
mIsCurSelection( FALSE ),
|
||||
mSelectPending(FALSE),
|
||||
mIsItemCut(false),
|
||||
mCutGeneration(0),
|
||||
mLabelStyle( LLFontGL::NORMAL ),
|
||||
mHasVisibleChildren(FALSE),
|
||||
mIsFolderComplete(true),
|
||||
|
|
@ -761,6 +763,19 @@ void LLFolderViewItem::drawOpenFolderArrow(const Params& default_params, const L
|
|||
return mIsCurSelection;
|
||||
}
|
||||
|
||||
/*virtual*/ bool LLFolderViewItem::isFadeItem()
|
||||
{
|
||||
LLClipboard& clipboard = LLClipboard::instance();
|
||||
if (mCutGeneration != clipboard.getGeneration())
|
||||
{
|
||||
mCutGeneration = clipboard.getGeneration();
|
||||
mIsItemCut = clipboard.isCutMode()
|
||||
&& ((getParentFolder() && getParentFolder()->isFadeItem())
|
||||
|| getViewModelItem()->isCutToClipboard());
|
||||
}
|
||||
return mIsItemCut;
|
||||
}
|
||||
|
||||
void LLFolderViewItem::drawHighlight(const BOOL showContent, const BOOL hasKeyboardFocus, const LLUIColor &selectColor, const LLUIColor &flashColor,
|
||||
const LLUIColor &focusOutlineColor, const LLUIColor &mouseOverColor)
|
||||
{
|
||||
|
|
@ -942,6 +957,12 @@ void LLFolderViewItem::draw()
|
|||
}
|
||||
|
||||
LLColor4 color = (mIsSelected && filled) ? mFontHighlightColor : mFontColor;
|
||||
|
||||
if (isFadeItem())
|
||||
{
|
||||
// Fade out item color to indicate it's being cut
|
||||
color.mV[VALPHA] *= 0.5f;
|
||||
}
|
||||
drawLabel(font, text_left, y, color, right_x);
|
||||
|
||||
// <FS:Ansariel> Special for protected items
|
||||
|
|
@ -959,7 +980,7 @@ void LLFolderViewItem::draw()
|
|||
//
|
||||
if (!mLabelSuffix.empty())
|
||||
{
|
||||
font->renderUTF8( mLabelSuffix, 0, right_x, y, sSuffixColor,
|
||||
font->renderUTF8( mLabelSuffix, 0, right_x, y, isFadeItem() ? color : (LLColor4)sSuffixColor,
|
||||
LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
|
||||
S32_MAX, S32_MAX, &right_x, FALSE );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,8 +125,11 @@ protected:
|
|||
mIsMouseOverTitle,
|
||||
mAllowWear,
|
||||
mAllowDrop,
|
||||
mSelectPending;
|
||||
|
||||
mSelectPending,
|
||||
mIsItemCut;
|
||||
|
||||
S32 mCutGeneration;
|
||||
|
||||
LLUIColor mFontColor;
|
||||
LLUIColor mFontHighlightColor;
|
||||
|
||||
|
|
@ -154,6 +157,7 @@ protected:
|
|||
virtual void addFolder(LLFolderViewFolder*) { }
|
||||
virtual bool isHighlightAllowed();
|
||||
virtual bool isHighlightActive();
|
||||
virtual bool isFadeItem();
|
||||
virtual bool isFlashing() { return false; }
|
||||
virtual void setFlashState(bool) { }
|
||||
|
||||
|
|
|
|||
|
|
@ -189,6 +189,7 @@ public:
|
|||
virtual BOOL isItemCopyable() const = 0;
|
||||
virtual BOOL copyToClipboard() const = 0;
|
||||
virtual BOOL cutToClipboard() = 0;
|
||||
virtual bool isCutToClipboard() { return false; };
|
||||
|
||||
virtual BOOL isClipboardPasteable() const = 0;
|
||||
virtual void pasteFromClipboard() = 0;
|
||||
|
|
|
|||
|
|
@ -1589,13 +1589,10 @@ list(APPEND viewer_HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/fsversionvalues.h)
|
|||
|
||||
source_group("CMake Rules" FILES ViewerInstall.cmake)
|
||||
|
||||
#summary.json creation moved to viewer_manifest.py MAINT-6413
|
||||
# the viewer_version.txt file created here is for passing to viewer_manifest and autobuild
|
||||
# the summary.json file is created for the benefit of the TeamCity builds, where
|
||||
# it is used to provide descriptive information to the build results page
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt"
|
||||
"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\n")
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/summary.json"
|
||||
"{\"Type\":\"viewer\",\"Version\":\"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\"}\n")
|
||||
|
||||
set_source_files_properties(
|
||||
llversioninfo.cpp tests/llversioninfo_test.cpp
|
||||
|
|
|
|||
|
|
@ -16345,6 +16345,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<string>1</string>
|
||||
</map>
|
||||
<key>UpdaterShowReleaseNotes</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Enables displaying of the Release notes in a web floater after update.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>UploadBakedTexOld</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -852,11 +852,11 @@ void AISUpdate::parseEmbeddedCategories(const LLSD& categories)
|
|||
|
||||
void AISUpdate::doUpdate()
|
||||
{
|
||||
// Do version/descendent accounting.
|
||||
// Do version/descendant accounting.
|
||||
for (std::map<LLUUID,S32>::const_iterator catit = mCatDescendentDeltas.begin();
|
||||
catit != mCatDescendentDeltas.end(); ++catit)
|
||||
{
|
||||
LL_DEBUGS("Inventory") << "descendent accounting for " << catit->first << LL_ENDL;
|
||||
LL_DEBUGS("Inventory") << "descendant accounting for " << catit->first << LL_ENDL;
|
||||
|
||||
const LLUUID cat_id(catit->first);
|
||||
// Don't account for update if we just created this category.
|
||||
|
|
@ -873,13 +873,13 @@ void AISUpdate::doUpdate()
|
|||
continue;
|
||||
}
|
||||
|
||||
// If we have a known descendent count, set that now.
|
||||
// If we have a known descendant count, set that now.
|
||||
LLViewerInventoryCategory* cat = gInventory.getCategory(cat_id);
|
||||
if (cat)
|
||||
{
|
||||
S32 descendent_delta = catit->second;
|
||||
S32 old_count = cat->getDescendentCount();
|
||||
LL_DEBUGS("Inventory") << "Updating descendent count for "
|
||||
LL_DEBUGS("Inventory") << "Updating descendant count for "
|
||||
<< cat->getName() << " " << cat_id
|
||||
<< " with delta " << descendent_delta << " from "
|
||||
<< old_count << " to " << (old_count+descendent_delta) << LL_ENDL;
|
||||
|
|
@ -910,7 +910,7 @@ void AISUpdate::doUpdate()
|
|||
LLUUID category_id(update_it->first);
|
||||
LLPointer<LLViewerInventoryCategory> new_category = update_it->second;
|
||||
// Since this is a copy of the category *before* the accounting update, above,
|
||||
// we need to transfer back the updated version/descendent count.
|
||||
// we need to transfer back the updated version/descendant count.
|
||||
LLViewerInventoryCategory* curr_cat = gInventory.getCategory(new_category->getUUID());
|
||||
if (!curr_cat)
|
||||
{
|
||||
|
|
@ -975,7 +975,16 @@ void AISUpdate::doUpdate()
|
|||
{
|
||||
LL_WARNS() << "Possible version mismatch for category " << cat->getName()
|
||||
<< ", viewer version " << cat->getVersion()
|
||||
<< " server version " << version << LL_ENDL;
|
||||
<< " AIS version " << version << " !!!Adjusting local version!!!" << LL_ENDL;
|
||||
|
||||
// the AIS version should be considered the true version. Adjust
|
||||
// our local category model to reflect this version number. Otherwise
|
||||
// it becomes possible to get stuck with the viewer being out of
|
||||
// sync with the inventory system. Under normal circumstances
|
||||
// inventory COF is maintained on the viewer through calls to
|
||||
// LLInventoryModel::accountForUpdate when a changing operation
|
||||
// is performed. This occasionally gets out of sync however.
|
||||
cat->setVersion(version);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,8 @@
|
|||
#include "llcoros.h"
|
||||
#include "lleventcoro.h"
|
||||
|
||||
#include "llavatarpropertiesprocessor.h"
|
||||
|
||||
// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1)
|
||||
#include "rlvhandler.h"
|
||||
#include "rlvhelper.h"
|
||||
|
|
@ -3742,15 +3744,9 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()
|
|||
{
|
||||
if (!mOutstandingAppearanceBakeRequest)
|
||||
{
|
||||
#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
mRerequestAppearanceBake = false;
|
||||
LLCoprocedureManager::CoProcedure_t proc = boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this, _1);
|
||||
LLCoprocedureManager::instance().enqueueCoprocedure("AIS", "LLAppearanceMgr::serverAppearanceUpdateCoro", proc);
|
||||
#else
|
||||
LLCoros::instance().launch("serverAppearanceUpdateCoro",
|
||||
boost::bind(&LLAppearanceMgr::serverAppearanceUpdateCoro, this));
|
||||
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -3758,17 +3754,8 @@ void LLAppearanceMgr::requestServerAppearanceUpdate()
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter)
|
||||
#else
|
||||
void LLAppearanceMgr::serverAppearanceUpdateCoro()
|
||||
#endif
|
||||
{
|
||||
#ifndef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t httpAdapter(
|
||||
new LLCoreHttpUtil::HttpCoroutineAdapter("serverAppearanceUpdateCoro", LLCore::HttpRequest::DEFAULT_POLICY_ID));
|
||||
#endif
|
||||
|
||||
mRerequestAppearanceBake = false;
|
||||
if (!gAgent.getRegion())
|
||||
{
|
||||
|
|
@ -3876,10 +3863,15 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro()
|
|||
// on multiple machines.
|
||||
if (result.has("expected"))
|
||||
{
|
||||
|
||||
S32 expectedCofVersion = result["expected"].asInteger();
|
||||
LL_WARNS("Avatar") << "Server expected " << expectedCofVersion << " as COF version" << LL_ENDL;
|
||||
|
||||
// Force an update texture request for ourself. The message will return
|
||||
// through the UDP and be handled in LLVOAvatar::processAvatarAppearance
|
||||
// this should ensure that we receive a new canonical COF from the sim
|
||||
// host. Hopefully it will return before the timeout.
|
||||
LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(gAgent.getID());
|
||||
|
||||
bRetry = true;
|
||||
// Wait for a 1/2 second before trying again. Just to keep from asking too quickly.
|
||||
if (++retryCount > BAKE_RETRY_MAX_COUNT)
|
||||
|
|
@ -4001,6 +3993,7 @@ void LLAppearanceMgr::syncCofVersionAndRefreshCoro()
|
|||
LL_INFOS("Avatar") << "Slamming server COF version: was " << pCOF->getVersion() << " now " << cofVersion << LL_ENDL;
|
||||
pCOF->setVersion(cofVersion);
|
||||
llassert(gAgentAvatarp->mLastUpdateReceivedCOFVersion < cofVersion);
|
||||
gAgentAvatarp->mLastUpdateReceivedCOFVersion = cofVersion;
|
||||
}
|
||||
|
||||
// The viewer version tends to be ahead of the server version so make sure our new request doesn't appear to be stale
|
||||
|
|
|
|||
|
|
@ -249,11 +249,7 @@ public:
|
|||
|
||||
|
||||
private:
|
||||
#ifdef APPEARANCEBAKE_AS_IN_AIS_QUEUE
|
||||
void serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t &httpAdapter);
|
||||
#else
|
||||
void serverAppearanceUpdateCoro();
|
||||
#endif
|
||||
|
||||
// [SL:KB] - Patch: Appearance-Misc
|
||||
void syncCofVersionAndRefreshCoro();
|
||||
|
|
|
|||
|
|
@ -1418,6 +1418,8 @@ bool LLAppViewer::init()
|
|||
// <FS:Ansariel> Init debug rects
|
||||
LLView::sDebugRects = gSavedSettings.getBOOL("DebugViews");
|
||||
|
||||
showReleaseNotesIfRequired();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -6735,6 +6737,18 @@ void LLAppViewer::launchUpdater()
|
|||
// LLAppViewer::instance()->forceQuit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if user is running a new version of the viewer.
|
||||
* Display the Release Notes if it's not overriden by the "UpdaterShowReleaseNotes" setting.
|
||||
*/
|
||||
void LLAppViewer::showReleaseNotesIfRequired()
|
||||
{
|
||||
if (LLVersionInfo::getChannelAndVersion() != gLastRunVersion && gSavedSettings.getBOOL("UpdaterShowReleaseNotes"))
|
||||
{
|
||||
LLSD info(getViewerInfo());
|
||||
LLWeb::loadURLInternal(info["VIEWER_RELEASE_NOTES_URL"]);
|
||||
}
|
||||
}
|
||||
|
||||
//virtual
|
||||
void LLAppViewer::setMasterSystemAudioMute(bool mute)
|
||||
|
|
|
|||
|
|
@ -264,6 +264,8 @@ private:
|
|||
|
||||
void sendLogoutRequest();
|
||||
void disconnectViewer();
|
||||
|
||||
void showReleaseNotesIfRequired();
|
||||
|
||||
// *FIX: the app viewer class should be some sort of singleton, no?
|
||||
// Perhaps its child class is the singleton and this should be an abstract base.
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ mLatestAgentComplexity(0),
|
|||
mLatestOverLimitPct(0.0f),
|
||||
mShowOverLimitAgents(false),
|
||||
mNotifyOutfitLoading(false),
|
||||
mLastCofVersion(-1),
|
||||
mLastCofVersion(LLViewerInventoryCategory::VERSION_UNKNOWN),
|
||||
mLastOutfitRezStatus(-1),
|
||||
mLastSkeletonSerialNum(-1)
|
||||
{
|
||||
|
|
@ -207,8 +207,8 @@ void LLAvatarRenderNotifier::updateNotificationState()
|
|||
mLastSkeletonSerialNum = gAgentAvatarp->mLastSkeletonSerialNum;
|
||||
}
|
||||
else if (mLastCofVersion >= 0
|
||||
&& (mLastCofVersion != gAgentAvatarp->mLastUpdateRequestCOFVersion
|
||||
|| mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
|
||||
&& (mLastCofVersion != LLAppearanceMgr::instance().getCOFVersion()
|
||||
|| mLastSkeletonSerialNum != gAgentAvatarp->mLastSkeletonSerialNum))
|
||||
{
|
||||
// version mismatch in comparison to previous outfit - outfit changed
|
||||
mNotifyOutfitLoading = true;
|
||||
|
|
|
|||
|
|
@ -814,3 +814,62 @@ void LLFeatureManager::applyBaseMasks()
|
|||
maskFeatures("safe");
|
||||
}
|
||||
}
|
||||
|
||||
LLSD LLFeatureManager::getRecommendedSettingsMap()
|
||||
{
|
||||
// Create the map and fill it with the hardware recommended settings.
|
||||
// It's needed to create an initial Default graphics preset (MAINT-6435).
|
||||
// The process is similar to the one LLFeatureManager::applyRecommendedSettings() does.
|
||||
|
||||
LLSD map(LLSD::emptyMap());
|
||||
|
||||
loadGPUClass();
|
||||
U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5));
|
||||
LL_INFOS("RenderInit") << "Getting the map of recommended settings for level " << level << LL_ENDL;
|
||||
|
||||
applyBaseMasks();
|
||||
std::string features(isValidGraphicsLevel(level) ? getNameForGraphicsLevel(level) : "Low");
|
||||
|
||||
maskFeatures(features);
|
||||
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl("RenderQualityPerformance"); // include the quality value for correct preset loading
|
||||
map["RenderQualityPerformance"]["Value"] = (LLSD::Integer)level;
|
||||
map["RenderQualityPerformance"]["Comment"] = ctrl->getComment();;
|
||||
map["RenderQualityPerformance"]["Persist"] = 1;
|
||||
map["RenderQualityPerformance"]["Type"] = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
|
||||
|
||||
|
||||
for (feature_map_t::iterator mIt = mFeatures.begin(); mIt != mFeatures.end(); ++mIt)
|
||||
{
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first);
|
||||
if (ctrl == NULL)
|
||||
{
|
||||
LL_WARNS() << "AHHH! Control setting " << mIt->first << " does not exist!" << LL_ENDL;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ctrl->isType(TYPE_BOOLEAN))
|
||||
{
|
||||
map[mIt->first]["Value"] = (LLSD::Boolean)getRecommendedValue(mIt->first);
|
||||
}
|
||||
else if (ctrl->isType(TYPE_S32) || ctrl->isType(TYPE_U32))
|
||||
{
|
||||
map[mIt->first]["Value"] = (LLSD::Integer)getRecommendedValue(mIt->first);
|
||||
}
|
||||
else if (ctrl->isType(TYPE_F32))
|
||||
{
|
||||
map[mIt->first]["Value"] = (LLSD::Real)getRecommendedValue(mIt->first);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "AHHH! Control variable is not a numeric type!" << LL_ENDL;
|
||||
continue;
|
||||
}
|
||||
map[mIt->first]["Comment"] = ctrl->getComment();;
|
||||
map[mIt->first]["Persist"] = 1;
|
||||
map[mIt->first]["Type"] = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -157,7 +157,9 @@ public:
|
|||
|
||||
// load the dynamic GPU/feature table from a website
|
||||
void fetchHTTPTables();
|
||||
|
||||
|
||||
LLSD getRecommendedSettingsMap();
|
||||
|
||||
protected:
|
||||
bool loadGPUClass();
|
||||
|
||||
|
|
|
|||
|
|
@ -53,8 +53,6 @@ BOOL LLFloaterDeletePrefPreset::postBuild()
|
|||
getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this));
|
||||
LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this));
|
||||
|
||||
onPresetsListChange(); // ensure that delete button is disabled when the list is empty
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -309,6 +309,16 @@ BOOL LLInvFVBridge::cutToClipboard()
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
bool LLInvFVBridge::isCutToClipboard()
|
||||
{
|
||||
if (LLClipboard::instance().isCutMode())
|
||||
{
|
||||
return LLClipboard::instance().isOnClipboard(mUUID);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Callback for cutToClipboard if DAMA required...
|
||||
BOOL LLInvFVBridge::callback_cutToClipboard(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
|
|
@ -330,9 +340,7 @@ BOOL LLInvFVBridge::perform_cutToClipboard()
|
|||
if (obj && isItemMovable() && isItemRemovable())
|
||||
{
|
||||
LLClipboard::instance().setCutMode(true);
|
||||
BOOL added_to_clipboard = LLClipboard::instance().addToClipboard(mUUID);
|
||||
removeObject(&gInventory, mUUID); // Always perform the remove even if the object couldn't make it to the clipboard
|
||||
return added_to_clipboard;
|
||||
return LLClipboard::instance().addToClipboard(mUUID);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ public:
|
|||
// [/SL:KB]
|
||||
virtual BOOL copyToClipboard() const;
|
||||
virtual BOOL cutToClipboard();
|
||||
virtual bool isCutToClipboard();
|
||||
virtual BOOL isClipboardPasteable() const;
|
||||
virtual BOOL isClipboardPasteableAsLink() const;
|
||||
virtual void pasteFromClipboard() {}
|
||||
|
|
|
|||
|
|
@ -117,14 +117,12 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
|
|||
{
|
||||
const LLFolderViewModelItemInventory* listener = dynamic_cast<const LLFolderViewModelItemInventory*>(item);
|
||||
|
||||
// Clipboard cut items are *always* filtered so we need this value upfront
|
||||
const BOOL passed_clipboard = (listener ? checkAgainstClipboard(listener->getUUID()) : TRUE);
|
||||
|
||||
// If it's a folder and we're showing all folders, return automatically.
|
||||
const BOOL is_folder = listener->getInventoryType() == LLInventoryType::IT_CATEGORY;
|
||||
if (is_folder && (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS))
|
||||
{
|
||||
return passed_clipboard;
|
||||
return true;
|
||||
}
|
||||
|
||||
// <FS:Zi> Multi-substring inventory search
|
||||
|
|
@ -186,7 +184,6 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
|
|||
passed = passed && checkAgainstFilterType(listener);
|
||||
passed = passed && checkAgainstPermissions(listener);
|
||||
passed = passed && checkAgainstFilterLinks(listener);
|
||||
passed = passed && passed_clipboard;
|
||||
|
||||
return passed;
|
||||
}
|
||||
|
|
@ -196,9 +193,8 @@ bool LLInventoryFilter::check(const LLInventoryItem* item)
|
|||
const bool passed_string = (mFilterSubString.size() ? item->getName().find(mFilterSubString) != std::string::npos : true);
|
||||
const bool passed_filtertype = checkAgainstFilterType(item);
|
||||
const bool passed_permissions = checkAgainstPermissions(item);
|
||||
const bool passed_clipboard = checkAgainstClipboard(item->getUUID());
|
||||
|
||||
return passed_filtertype && passed_permissions && passed_clipboard && passed_string;
|
||||
return passed_filtertype && passed_permissions && passed_string;
|
||||
}
|
||||
|
||||
bool LLInventoryFilter::checkFolder(const LLFolderViewModelItem* item) const
|
||||
|
|
@ -217,13 +213,10 @@ bool LLInventoryFilter::checkFolder(const LLFolderViewModelItem* item) const
|
|||
|
||||
bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
|
||||
{
|
||||
// Always check against the clipboard
|
||||
const BOOL passed_clipboard = checkAgainstClipboard(folder_id);
|
||||
|
||||
// we're showing all folders, overriding filter
|
||||
if (mFilterOps.mShowFolderState == LLInventoryFilter::SHOW_ALL_FOLDERS)
|
||||
{
|
||||
return passed_clipboard;
|
||||
return true;
|
||||
}
|
||||
|
||||
// when applying a filter, matching folders get their contents downloaded first
|
||||
|
|
@ -289,7 +282,7 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
|
|||
LLViewerInventoryItem* item = gInventory.getItem(folder_id);
|
||||
if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER)
|
||||
{
|
||||
return passed_clipboard;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY)
|
||||
|
|
@ -304,7 +297,7 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const
|
|||
return false;
|
||||
}
|
||||
|
||||
return passed_clipboard;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInventory* listener) const
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "llfloaterpreference.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfeaturemanager.h"
|
||||
|
||||
LLPresetsManager::LLPresetsManager()
|
||||
{
|
||||
|
|
@ -60,7 +61,7 @@ void LLPresetsManager::createMissingDefault()
|
|||
LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;
|
||||
|
||||
// Write current graphic settings as the default
|
||||
savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT);
|
||||
savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -134,7 +135,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam
|
|||
presets = mPresetNames;
|
||||
}
|
||||
|
||||
bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name)
|
||||
bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)
|
||||
{
|
||||
if (LLTrans::getString(PRESETS_DEFAULT) == name)
|
||||
{
|
||||
|
|
@ -146,11 +147,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
|
|||
|
||||
if(PRESETS_GRAPHIC == subdirectory)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
|
||||
LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (instance)
|
||||
if (instance && !createDefault)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
instance->getControlNames(name_list);
|
||||
LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;
|
||||
name_list.push_back("PresetGraphicActive");
|
||||
|
|
@ -170,23 +170,36 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
|
|||
LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;
|
||||
}
|
||||
|
||||
if (name_list.size() > 1) // if the active preset name is the only thing in the list, don't save the list
|
||||
if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list
|
||||
|| (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings
|
||||
{
|
||||
// make an empty llsd
|
||||
LLSD paramsData(LLSD::emptyMap());
|
||||
|
||||
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
|
||||
if (createDefault)
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
|
||||
std::string comment = ctrl->getComment();
|
||||
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
LLSD value = ctrl->getValue();
|
||||
paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap();
|
||||
if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0)
|
||||
{
|
||||
// use the recommended setting as an initial one (MAINT-6435)
|
||||
gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it)
|
||||
{
|
||||
std::string ctrl_name = *it;
|
||||
LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get();
|
||||
std::string comment = ctrl->getComment();
|
||||
std::string type = LLControlGroup::typeEnumToString(ctrl->type());
|
||||
LLSD value = ctrl->getValue();
|
||||
|
||||
paramsData[ctrl_name]["Comment"] = comment;
|
||||
paramsData[ctrl_name]["Persist"] = 1;
|
||||
paramsData[ctrl_name]["Type"] = type;
|
||||
paramsData[ctrl_name]["Value"] = value;
|
||||
paramsData[ctrl_name]["Comment"] = comment;
|
||||
paramsData[ctrl_name]["Persist"] = 1;
|
||||
paramsData[ctrl_name]["Type"] = type;
|
||||
paramsData[ctrl_name]["Value"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml");
|
||||
|
|
@ -203,10 +216,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n
|
|||
|
||||
LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL;
|
||||
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
if (!createDefault)
|
||||
{
|
||||
gSavedSettings.setString("PresetGraphicActive", name);
|
||||
// signal interested parties
|
||||
triggerChangeSignal();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ public:
|
|||
static std::string getPresetsDir(const std::string& subdirectory);
|
||||
void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);
|
||||
void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option);
|
||||
bool savePreset(const std::string& subdirectory, std::string name);
|
||||
bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);
|
||||
void loadPreset(const std::string& subdirectory, std::string name);
|
||||
bool deletePreset(const std::string& subdirectory, std::string name);
|
||||
|
||||
|
|
|
|||
|
|
@ -8038,7 +8038,6 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
|
||||
{
|
||||
static S32 largestSelfCOFSeen(LLViewerInventoryCategory::VERSION_UNKNOWN);
|
||||
LL_DEBUGS("Avatar") << "starts" << LL_ENDL;
|
||||
|
||||
// <FS:CR> Use LLCachedControl
|
||||
|
|
@ -8069,63 +8068,48 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
|
|||
LL_WARNS() << "bad appearance version info, discarding" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
llassert(appearance_version > 0);
|
||||
//llassert(appearance_version > 0);
|
||||
if (appearance_version > 1)
|
||||
{
|
||||
LL_WARNS() << "unsupported appearance version " << appearance_version << ", discarding appearance message" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
S32 this_update_cof_version = contents.mCOFVersion;
|
||||
S32 last_update_request_cof_version = mLastUpdateRequestCOFVersion;
|
||||
S32 thisAppearanceVersion(contents.mCOFVersion);
|
||||
if (isSelf())
|
||||
{ // In the past this was considered to be the canonical COF version,
|
||||
// that is no longer the case. The canonical version is maintained
|
||||
// by the AIS code and should match the COF version there. Even so,
|
||||
// we must prevent rolling this one backwards backwards or processing
|
||||
// stale versions.
|
||||
|
||||
if( isSelf() )
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "this_update_cof_version " << this_update_cof_version
|
||||
<< " last_update_request_cof_version " << last_update_request_cof_version
|
||||
<< " my_cof_version " << LLAppearanceMgr::instance().getCOFVersion() << LL_ENDL;
|
||||
S32 aisCOFVersion(LLAppearanceMgr::instance().getCOFVersion());
|
||||
|
||||
if (largestSelfCOFSeen > this_update_cof_version)
|
||||
LL_DEBUGS("Avatar") << "handling self appearance message #" << thisAppearanceVersion <<
|
||||
" (highest seen #" << mLastUpdateReceivedCOFVersion <<
|
||||
") (AISCOF=#" << aisCOFVersion << ")" << LL_ENDL;
|
||||
|
||||
// <FS:Ansariel> [Legacy Bake]
|
||||
if (mFirstTEMessageReceived && (appearance_version == 0))
|
||||
{
|
||||
LL_WARNS("Avatar") << "Already processed appearance for COF version " <<
|
||||
largestSelfCOFSeen << ", discarding appearance with COF " << this_update_cof_version << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
largestSelfCOFSeen = this_update_cof_version;
|
||||
|
||||
// <FS:Ansariel> [Legacy Bake]
|
||||
if (getRegion() && (getRegion()->getCentralBakeVersion()==0))
|
||||
{
|
||||
LL_WARNS() << avString() << "Received AvatarAppearance message for self in non-server-bake region" << LL_ENDL;
|
||||
}
|
||||
if( mFirstTEMessageReceived && (appearance_version == 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
// </FS:Ansariel> [Legacy Bake]
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "appearance message received" << LL_ENDL;
|
||||
}
|
||||
// </FS:Ansariel> [Legacy Bake]
|
||||
|
||||
// Check for stale update.
|
||||
if (isSelf()
|
||||
// <FS:Ansariel> [Legacy Bake]
|
||||
&& (appearance_version>0)
|
||||
// </FS:Ansariel> [Legacy Bake]
|
||||
&& (this_update_cof_version < last_update_request_cof_version))
|
||||
{
|
||||
LL_WARNS() << "Stale appearance update, wanted version " << last_update_request_cof_version
|
||||
<< ", got " << this_update_cof_version << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
if (mLastUpdateReceivedCOFVersion >= thisAppearanceVersion)
|
||||
{
|
||||
LL_WARNS("Avatar") << "Stale appearance received #" << thisAppearanceVersion <<
|
||||
" attempt to roll back from #" << mLastUpdateReceivedCOFVersion <<
|
||||
"... dropping." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
if (isEditingAppearance())
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "Editing appearance. Dropping appearance update." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSelf() && isEditingAppearance())
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "ignoring appearance message while in appearance edit" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// SUNSHINE CLEANUP - is this case OK now?
|
||||
S32 num_params = contents.mParamWeights.size();
|
||||
|
|
@ -8140,23 +8124,21 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
|
|||
}
|
||||
|
||||
// No backsies zone - if we get here, the message should be valid and usable, will be processed.
|
||||
LL_INFOS("Avatar") << "Processing appearance message version " << this_update_cof_version << LL_ENDL;
|
||||
LL_INFOS("Avatar") << "Processing appearance message version " << thisAppearanceVersion << LL_ENDL;
|
||||
|
||||
// <FS:Ansariel> [Legacy Bake]
|
||||
if (appearance_version > 0)
|
||||
{
|
||||
// </FS:Ansariel> [Legacy Bake]
|
||||
// Note:
|
||||
// RequestAgentUpdateAppearanceResponder::onRequestRequested()
|
||||
// assumes that cof version is only updated with server-bake
|
||||
// appearance messages.
|
||||
mLastUpdateReceivedCOFVersion = this_update_cof_version;
|
||||
// <FS:Ansariel> [Legacy Bake]
|
||||
}
|
||||
if (isSelf())
|
||||
{
|
||||
// Note:
|
||||
// locally the COF is maintained via LLInventoryModel::accountForUpdate
|
||||
// which is called from various places. This should match the simhost's
|
||||
// idea of what the COF version is. AIS however maintains its own version
|
||||
// of the COF that should be considered canonical.
|
||||
mLastUpdateReceivedCOFVersion = thisAppearanceVersion;
|
||||
}
|
||||
|
||||
// <FS:Ansariel> [Legacy Bake]
|
||||
setIsUsingServerBakes(appearance_version > 0);
|
||||
|
||||
setIsUsingServerBakes(appearance_version > 0);
|
||||
// </FS:Ansariel> [Legacy Bake]
|
||||
|
||||
if (applyParsedTEMessage(contents.mTEContents) > 0 && isChanged(TEXTURE))
|
||||
{
|
||||
updateVisualComplexity();
|
||||
|
|
@ -8306,7 +8288,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
|
|||
// Got an update for some other avatar
|
||||
// Ignore updates for self, because we have a more authoritative value in the preferences.
|
||||
setHoverOffset(contents.mHoverOffset);
|
||||
LL_INFOS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;
|
||||
LL_DEBUGS("Avatar") << avString() << "setting hover to " << contents.mHoverOffset[2] << LL_ENDL;
|
||||
}
|
||||
|
||||
if (!contents.mHoverOffsetWasSet && !isSelf())
|
||||
|
|
@ -8947,6 +8929,7 @@ U32 LLVOAvatar::getPartitionType() const
|
|||
//static
|
||||
void LLVOAvatar::updateImpostors()
|
||||
{
|
||||
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
|
||||
LLCharacter::sAllowInstancesChange = FALSE;
|
||||
|
||||
for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
|
||||
|
|
|
|||
|
|
@ -10994,6 +10994,17 @@ Can't move object '[OBJECT_NAME]' to
|
|||
You don't have permission to modify that object
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="TooMuchObjectInventorySelected"
|
||||
type="alertmodal">
|
||||
<tag>fail</tag>
|
||||
Too many objects with large inventory are selected. Please select fewer objects and try again.
|
||||
<usetemplate
|
||||
name="okbutton"
|
||||
yestext="OK"/>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="CantEnablePhysObjContributesToNav"
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ import sys
|
|||
import os.path
|
||||
import shutil
|
||||
import errno
|
||||
import json
|
||||
import re
|
||||
import tarfile
|
||||
import time
|
||||
|
|
@ -243,9 +244,16 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
self.path("*.tga")
|
||||
self.end_prefix("local_assets")
|
||||
|
||||
# Files in the newview/ directory
|
||||
# File in the newview/ directory
|
||||
self.path("gpu_table.txt")
|
||||
# The summary.json file gets left in the build directory by newview/CMakeLists.txt.
|
||||
|
||||
#summary.json. Standard with exception handling is fine. If we can't open a new file for writing, we have worse problems
|
||||
summary_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),"Channel":self.channel_with_pkg_suffix()}
|
||||
with open(os.path.join(os.pardir,'summary.json'), 'w') as summary_handle:
|
||||
json.dump(summary_dict,summary_handle)
|
||||
|
||||
#we likely no longer need the test, since we will throw an exception above, but belt and suspenders and we get the
|
||||
#return code for free.
|
||||
if not self.path2basename(os.pardir, "summary.json"):
|
||||
print "No summary.json file"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue