Merge branch 'master' of https://vcs.firestormviewer.org/phoenix-firestorm
commit
4bbdafb17e
|
|
@ -21,10 +21,8 @@ indra/.distcc
|
|||
build-vc80/
|
||||
build-vc100/
|
||||
build-vc120/
|
||||
build-vc120-32/
|
||||
build-vc120-64/
|
||||
build-vc150-32/
|
||||
build-vc150-64/
|
||||
build-vc[0-9]*-32/
|
||||
build-vc[0-9]*-64/
|
||||
indra/CMakeFiles
|
||||
indra/build-vc[0-9]*
|
||||
indra/lib/mono/1.0/*.dll
|
||||
|
|
|
|||
|
|
@ -292,9 +292,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>d670d00aa732b97d105d287b62582762</string>
|
||||
<string>9b8bcc3be6dbe40a04c9c81c313f70dc</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55065/512118/apr_suite-1.4.5.539073-darwin64-539073.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/68333/658209/apr_suite-1.4.5.548882-darwin64-548882.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -328,9 +328,9 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>83b4a047db5f7ee462753d91e6277cba</string>
|
||||
<string>6bdf460c18ee004b41a46afc80041a92</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55143/512317/apr_suite-1.4.5.539073-windows-539073.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/68334/658225/apr_suite-1.4.5.548882-windows-548882.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
|
|
@ -340,16 +340,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>b3bbf168b39e25c08cc1febddeb33332</string>
|
||||
<string>83104bfa4dabb77cd70d185e38a95b49</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55139/512304/apr_suite-1.4.5.539073-windows64-539073.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/68332/658215/apr_suite-1.4.5.548882-windows64-548882.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>1.4.5.539073</string>
|
||||
<string>1.4.5.548882</string>
|
||||
</map>
|
||||
<key>boost</key>
|
||||
<map>
|
||||
|
|
@ -964,11 +964,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6963689ea12131c0ff80b07a08cbe667</string>
|
||||
<string>2c7c5fb28c34d4833b14d49d4abb101a</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<key>url</key>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.01.03-darwin-202272255.tar.bz2</string>
|
||||
<string>file:///opt/firestorm/fmodstudio-2.01.04-darwin-202612342.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin</string>
|
||||
|
|
@ -2375,16 +2375,16 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8501cbaa7e0f254614694da784a9c61c</string>
|
||||
<string>b677ee43822212f0a27c838dc8bf3623</string>
|
||||
<key>url</key>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/64944/606925/llca-202008010216.546021-common-546021.tar.bz2</string>
|
||||
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/67622/646614/llca-202009010215.548269-common-548269.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<string>202008010216.546021</string>
|
||||
<string>202009010215.548269</string>
|
||||
</map>
|
||||
<key>llphysicsextensions_source</key>
|
||||
<map>
|
||||
|
|
@ -4520,9 +4520,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<array>
|
||||
<string>-G</string>
|
||||
<string>${AUTOBUILD_WIN_CMAKE_GEN|NOTWIN}</string>
|
||||
<string>-DUNATTENDED:BOOL=ON</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
<string>-DUSE_KDU=FALSE</string>
|
||||
<string>-DOPENAL:BOOL=ON</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>name</key>
|
||||
|
|
@ -4593,6 +4593,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<string>-DUNATTENDED:BOOL=ON</string>
|
||||
<string>-DINSTALL_PROPRIETARY=FALSE</string>
|
||||
<string>-DUSE_KDU=FALSE</string>
|
||||
<string>-DOPENAL:BOOL=ON</string>
|
||||
</array>
|
||||
</map>
|
||||
<key>name</key>
|
||||
|
|
|
|||
|
|
@ -260,6 +260,8 @@ Beansy Twine
|
|||
Benja Kepler
|
||||
VWR-746
|
||||
Benjamin Bigdipper
|
||||
Beq Janus
|
||||
BUG-227094
|
||||
Beth Walcher
|
||||
Beq Janus
|
||||
SL-10288
|
||||
|
|
@ -837,6 +839,7 @@ Khyota Wulluf
|
|||
Kimar Coba
|
||||
Kithrak Kirkorian
|
||||
Kitty Barnett
|
||||
BUG-228665
|
||||
VWR-19699
|
||||
STORM-288
|
||||
STORM-799
|
||||
|
|
@ -1309,6 +1312,7 @@ Shyotl Kuhr
|
|||
MAINT-2334
|
||||
MAINT-6913
|
||||
STORM-2143
|
||||
SL-11625
|
||||
Siana Gearz
|
||||
STORM-960
|
||||
STORM-1088
|
||||
|
|
@ -1348,6 +1352,7 @@ Sovereign Engineer
|
|||
MAINT-7343
|
||||
SL-11079
|
||||
OPEN-343
|
||||
SL-11625
|
||||
SpacedOut Frye
|
||||
VWR-34
|
||||
VWR-45
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ if(WINDOWS)
|
|||
endif (FMODSTUDIO)
|
||||
|
||||
if (OPENAL)
|
||||
set(release_files ${release_files} OpenAL32.dll alut.dll)
|
||||
list(APPEND release_files openal32.dll alut.dll)
|
||||
endif (OPENAL)
|
||||
|
||||
#*******************************
|
||||
|
|
|
|||
|
|
@ -1024,11 +1024,20 @@ CURLcode HttpOpRequest::curlSslCtxCallback(CURL *curl, void *sslctx, void *userd
|
|||
{
|
||||
HttpOpRequest::ptr_t op(HttpOpRequest::fromHandle<HttpOpRequest>(userdata));
|
||||
|
||||
if (op->mCallbackSSLVerify)
|
||||
{
|
||||
SSL_CTX * ctx = (SSL_CTX *)sslctx;
|
||||
// disable any default verification for server certs
|
||||
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);
|
||||
if (op->mCallbackSSLVerify)
|
||||
{
|
||||
SSL_CTX * ctx = (SSL_CTX *)sslctx;
|
||||
if (op->mReqOptions && op->mReqOptions->getSSLVerifyPeer())
|
||||
{
|
||||
// verification for ssl certs
|
||||
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
// disable any default verification for server certs
|
||||
// Ex: setting urls (assume non-SL) for parcel media in LLFloaterURLEntry
|
||||
SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);
|
||||
}
|
||||
// set the verification callback.
|
||||
SSL_CTX_set_cert_verify_callback(ctx, sslCertVerifyCallback, userdata);
|
||||
// the calls are void
|
||||
|
|
|
|||
|
|
@ -46,10 +46,10 @@ class LLRotation;
|
|||
// of this writing, July 08, 2010) about getting it implemented before you resort to
|
||||
// LLVector3/LLVector4.
|
||||
/////////////////////////////////
|
||||
class LLVector4a;
|
||||
struct LLVector4a;
|
||||
|
||||
LL_ALIGN_PREFIX(16)
|
||||
class LLVector4a
|
||||
struct LLVector4a
|
||||
{
|
||||
public:
|
||||
|
||||
|
|
@ -92,6 +92,7 @@ public:
|
|||
// CONSTRUCTORS
|
||||
////////////////////////////////////
|
||||
|
||||
//LLVector4a is plain data which should never have a default constructor or destructor(malloc&free won't trigger it)
|
||||
LLVector4a()
|
||||
{ //DO NOT INITIALIZE -- The overhead is completely unnecessary
|
||||
ll_assert_aligned(this,16);
|
||||
|
|
|
|||
|
|
@ -77,12 +77,12 @@ public:
|
|||
///
|
||||
inline size_t countActive() const
|
||||
{
|
||||
return mActiveCoprocs.size();
|
||||
return mActiveCoprocsCount;
|
||||
}
|
||||
|
||||
/// Returns the total number of coprocedures either queued or in active processing.
|
||||
///
|
||||
inline size_t count() const
|
||||
inline S32 count() const
|
||||
{
|
||||
return countPending() + countActive();
|
||||
}
|
||||
|
|
@ -113,12 +113,10 @@ private:
|
|||
// because the consuming coroutine might outlive this LLCoprocedurePool
|
||||
// instance.
|
||||
typedef boost::shared_ptr<CoprocQueue_t> CoprocQueuePtr;
|
||||
typedef std::map<LLUUID, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t> ActiveCoproc_t;
|
||||
|
||||
std::string mPoolName;
|
||||
size_t mPoolSize, mPending{0};
|
||||
size_t mPoolSize, mActiveCoprocsCount, mPending;
|
||||
CoprocQueuePtr mPendingCoprocs;
|
||||
ActiveCoproc_t mActiveCoprocs;
|
||||
LLTempBoundListener mStatusListener;
|
||||
|
||||
typedef std::map<std::string, LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t> CoroAdapterMap_t;
|
||||
|
|
@ -191,8 +189,13 @@ LLUUID LLCoprocedureManager::enqueueCoprocedure(const std::string &pool, const s
|
|||
|
||||
void LLCoprocedureManager::setPropertyMethods(SettingQuery_t queryfn, SettingUpdate_t updatefn)
|
||||
{
|
||||
// functions to discover and store the pool sizes
|
||||
mPropertyQueryFn = queryfn;
|
||||
mPropertyDefineFn = updatefn;
|
||||
|
||||
// workaround until we get mutex into initializePool
|
||||
initializePool("VAssetStorage");
|
||||
initializePool("Upload");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -272,21 +275,12 @@ void LLCoprocedureManager::close(const std::string &pool)
|
|||
}
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Explicitly create the VAAssetStorage pool
|
||||
void LLCoprocedureManager::createPool(const std::string& poolName)
|
||||
{
|
||||
poolMap_t::iterator it = mPoolMap.find(poolName);
|
||||
if (it == mPoolMap.end())
|
||||
{
|
||||
initializePool(poolName);
|
||||
}
|
||||
}
|
||||
// </FS:Ansariel> Explicitly create the VAAssetStorage pool
|
||||
|
||||
//=========================================================================
|
||||
LLCoprocedurePool::LLCoprocedurePool(const std::string &poolName, size_t size):
|
||||
mPoolName(poolName),
|
||||
mPoolSize(size),
|
||||
mActiveCoprocsCount(0),
|
||||
mPending(0),
|
||||
mPendingCoprocs(boost::make_shared<CoprocQueue_t>(DEFAULT_QUEUE_SIZE)),
|
||||
mHTTPPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID),
|
||||
mCoroMapping()
|
||||
|
|
@ -412,8 +406,7 @@ void LLCoprocedurePool::coprocedureInvokerCoro(
|
|||
}
|
||||
// we actually popped an item
|
||||
--mPending;
|
||||
|
||||
ActiveCoproc_t::iterator itActive = mActiveCoprocs.insert(ActiveCoproc_t::value_type(coproc->mId, httpAdapter)).first;
|
||||
mActiveCoprocsCount++;
|
||||
|
||||
LL_DEBUGS("CoProcMgr") << "Dequeued and invoking coprocedure(" << coproc->mName << ") with id=" << coproc->mId.asString() << " in pool \"" << mPoolName << "\" (" << mPending << " left)" << LL_ENDL;
|
||||
|
||||
|
|
@ -421,12 +414,10 @@ void LLCoprocedurePool::coprocedureInvokerCoro(
|
|||
{
|
||||
coproc->mProc(httpAdapter, coproc->mId);
|
||||
}
|
||||
catch (const LLCoros::Stop &)
|
||||
catch (const LLCoros::Stop &e)
|
||||
{
|
||||
LL_INFOS("CoProcMgr") << "Viewer is shutting Down. Stopping coprocedure('" << coproc->mName
|
||||
<< "', id=" << coproc->mId.asString()
|
||||
<< ") in pool '" << mPoolName << "'" << LL_ENDL;
|
||||
mActiveCoprocs.erase(itActive);
|
||||
LL_INFOS("LLCoros") << "coprocedureInvokerCoro terminating because "
|
||||
<< e.what() << LL_ENDL;
|
||||
throw; // let toplevel handle this as LLContinueError
|
||||
}
|
||||
catch (...)
|
||||
|
|
@ -435,14 +426,14 @@ void LLCoprocedurePool::coprocedureInvokerCoro(
|
|||
<< "', id=" << coproc->mId.asString()
|
||||
<< ") in pool '" << mPoolName << "'"));
|
||||
// must NOT omit this or we deplete the pool
|
||||
mActiveCoprocs.erase(itActive);
|
||||
mActiveCoprocsCount--;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Nicky: This is super spammy. Consider using LL_DEBUGS here?
|
||||
LL_DEBUGS("CoProcMgr") << "Finished coprocedure(" << coproc->mName << ")" << " in pool \"" << mPoolName << "\"" << LL_ENDL;
|
||||
|
||||
mActiveCoprocs.erase(itActive);
|
||||
mActiveCoprocsCount--;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -79,8 +79,6 @@ public:
|
|||
|
||||
void close();
|
||||
void close(const std::string &pool);
|
||||
|
||||
void createPool(const std::string& poolName); // <FS:Ansariel> Explicitly create the VAAssetStorage pool
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -86,15 +86,15 @@ const F64 LLExperienceCache::DEFAULT_EXPIRATION = 600.0;
|
|||
const S32 LLExperienceCache::DEFAULT_QUOTA = 128; // this is megabytes
|
||||
const int LLExperienceCache::SEARCH_PAGE_SIZE = 30;
|
||||
|
||||
bool LLExperienceCache::sShutdown = false;
|
||||
|
||||
//=========================================================================
|
||||
LLExperienceCache::LLExperienceCache():
|
||||
mShutdown(false)
|
||||
LLExperienceCache::LLExperienceCache()
|
||||
{
|
||||
}
|
||||
|
||||
LLExperienceCache::~LLExperienceCache()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void LLExperienceCache::initSingleton()
|
||||
|
|
@ -128,7 +128,7 @@ void LLExperienceCache::cleanup()
|
|||
{
|
||||
cache_stream << (*this);
|
||||
}
|
||||
mShutdown = true;
|
||||
sShutdown = true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
|
@ -350,7 +350,7 @@ void LLExperienceCache::requestExperiences()
|
|||
ostr << urlBase << "?page_size=" << PAGE_SIZE1;
|
||||
RequestQueue_t requests;
|
||||
|
||||
while (!mRequestQueue.empty())
|
||||
while (!mRequestQueue.empty() && !sShutdown)
|
||||
{
|
||||
RequestQueue_t::iterator it = mRequestQueue.begin();
|
||||
LLUUID key = (*it);
|
||||
|
|
@ -404,8 +404,6 @@ void LLExperienceCache::idleCoro()
|
|||
LL_INFOS("ExperienceCache") << "Launching Experience cache idle coro." << LL_ENDL;
|
||||
do
|
||||
{
|
||||
llcoro::suspendUntilTimeout(SECS_BETWEEN_REQUESTS);
|
||||
|
||||
if (mEraseExpiredTimer.checkExpirationAndReset(ERASE_EXPIRED_TIMEOUT))
|
||||
{
|
||||
eraseExpired();
|
||||
|
|
@ -416,7 +414,9 @@ void LLExperienceCache::idleCoro()
|
|||
requestExperiences();
|
||||
}
|
||||
|
||||
} while (!mShutdown);
|
||||
llcoro::suspendUntilTimeout(SECS_BETWEEN_REQUESTS);
|
||||
|
||||
} while (!sShutdown);
|
||||
|
||||
// The coroutine system will likely be shut down by the time we get to this point
|
||||
// (or at least no further cycling will occur on it since the user has decided to quit.)
|
||||
|
|
|
|||
|
|
@ -142,7 +142,7 @@ private:
|
|||
LLFrameTimer mEraseExpiredTimer; // Periodically clean out expired entries from the cache
|
||||
CapabilityQuery_t mCapability;
|
||||
std::string mCacheFileName;
|
||||
bool mShutdown;
|
||||
static bool sShutdown; // control for coroutines, they exist out of LLExperienceCache's scope, so they need a static control
|
||||
|
||||
void idleCoro();
|
||||
void eraseExpired();
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@ const U32 TELEPORT_FLAGS_VIA_REGION_ID = 1 << 12;
|
|||
const U32 TELEPORT_FLAGS_IS_FLYING = 1 << 13;
|
||||
const U32 TELEPORT_FLAGS_SHOW_RESET_HOME = 1 << 14;
|
||||
const U32 TELEPORT_FLAGS_FORCE_REDIRECT = 1 << 15; // used to force a redirect to some random location - used when kicking someone from land.
|
||||
const U32 TELEPORT_FLAGS_VIA_GLOBAL_COORDS = 1 << 16;
|
||||
const U32 TELEPORT_FLAGS_WITHIN_REGION = 1 << 17;
|
||||
|
||||
const U32 TELEPORT_FLAGS_MASK_VIA = TELEPORT_FLAGS_VIA_LURE
|
||||
| TELEPORT_FLAGS_VIA_LANDMARK
|
||||
|
|
|
|||
|
|
@ -666,6 +666,37 @@ void LLAccordionCtrl::onScrollPosChangeCallback(S32, LLScrollbar*)
|
|||
{
|
||||
updateLayout(getRect().getWidth(),getRect().getHeight());
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLAccordionCtrl::onUpdateScrollToChild(const LLUICtrl *cntrl)
|
||||
{
|
||||
if (mScrollbar && mScrollbar->getVisible())
|
||||
{
|
||||
// same as scrollToShowRect
|
||||
LLRect rect;
|
||||
cntrl->localRectToOtherView(cntrl->getLocalRect(), &rect, this);
|
||||
|
||||
// Translate to parent coordinatess to check if we are in visible rectangle
|
||||
rect.translate(getRect().mLeft, getRect().mBottom);
|
||||
|
||||
if (!getRect().contains(rect))
|
||||
{
|
||||
// for accordition's scroll, height is in pixels
|
||||
// Back to local coords and calculate position for scroller
|
||||
S32 bottom = mScrollbar->getDocPos() - rect.mBottom + getRect().mBottom;
|
||||
S32 top = mScrollbar->getDocPos() - rect.mTop + getRect().mTop;
|
||||
|
||||
S32 scroll_pos = llclamp(mScrollbar->getDocPos(),
|
||||
bottom, // min vertical scroll
|
||||
top); // max vertical scroll
|
||||
|
||||
mScrollbar->setDocPos(scroll_pos);
|
||||
}
|
||||
}
|
||||
|
||||
LLUICtrl::onUpdateScrollToChild(cntrl);
|
||||
}
|
||||
|
||||
void LLAccordionCtrl::onOpen (const LLSD& key)
|
||||
{
|
||||
for(size_t i=0;i<mAccordionTabs.size();++i)
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ public:
|
|||
void draw();
|
||||
|
||||
void onScrollPosChangeCallback(S32, LLScrollbar*);
|
||||
virtual void onUpdateScrollToChild(const LLUICtrl * cntrl);
|
||||
|
||||
void onOpen (const LLSD& key);
|
||||
S32 notifyParent(const LLSD& info);
|
||||
|
|
|
|||
|
|
@ -452,6 +452,35 @@ void LLAccordionCtrlTab::onVisibilityChange(BOOL new_visibility)
|
|||
notifyParent(LLSD().with("child_visibility_change", new_visibility));
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLAccordionCtrlTab::onUpdateScrollToChild(const LLUICtrl *cntrl)
|
||||
{
|
||||
if (mScrollbar && mScrollbar->getVisible())
|
||||
{
|
||||
LLRect rect;
|
||||
cntrl->localRectToOtherView(cntrl->getLocalRect(), &rect, this);
|
||||
|
||||
// Translate to parent coordinatess to check if we are in visible rectangle
|
||||
rect.translate(getRect().mLeft, getRect().mBottom);
|
||||
|
||||
if (!getRect().contains(rect))
|
||||
{
|
||||
// for accordition's scroll, height is in pixels
|
||||
// Back to local coords and calculate position for scroller
|
||||
S32 bottom = mScrollbar->getDocPos() - rect.mBottom + getRect().mBottom;
|
||||
S32 top = mScrollbar->getDocPos() - rect.mTop + getRect().mTop;
|
||||
|
||||
S32 scroll_pos = llclamp(mScrollbar->getDocPos(),
|
||||
bottom, // min vertical scroll
|
||||
top); // max vertical scroll
|
||||
|
||||
mScrollbar->setDocPos(scroll_pos);
|
||||
}
|
||||
}
|
||||
|
||||
LLUICtrl::onUpdateScrollToChild(cntrl);
|
||||
}
|
||||
|
||||
BOOL LLAccordionCtrlTab::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if(mCollapsible && mHeaderVisible && mCanOpenClose)
|
||||
|
|
|
|||
|
|
@ -159,6 +159,7 @@ public:
|
|||
* Raises notifyParent event with "child_visibility_change" = new_visibility
|
||||
*/
|
||||
void onVisibilityChange(BOOL new_visibility);
|
||||
virtual void onUpdateScrollToChild(const LLUICtrl * cntrl);
|
||||
|
||||
// Changes expand/collapse state and triggers expand/collapse callbacks
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
|
|
|
|||
|
|
@ -56,6 +56,14 @@ void LLBadgeOwner::initBadgeParams(const LLBadge::Params& p)
|
|||
}
|
||||
}
|
||||
|
||||
void LLBadgeOwner::reshapeBadge(const LLRect& new_rect)
|
||||
{
|
||||
if (mBadge)
|
||||
{
|
||||
mBadge->setShape(new_rect);
|
||||
}
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Re-add setBadgeLabel
|
||||
void LLBadgeOwner::setBadgeLabel(const LLStringExplicit& label)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ public:
|
|||
// </FS:Ansariel>
|
||||
void setBadgeVisibility(bool visible);
|
||||
void setDrawBadgeAtTop(bool draw_at_top);
|
||||
void reshapeBadge(const LLRect& new_rect);
|
||||
|
||||
private:
|
||||
|
||||
|
|
|
|||
|
|
@ -517,6 +517,14 @@ S32 LLComboBox::getCurrentIndex() const
|
|||
return -1;
|
||||
}
|
||||
|
||||
void LLComboBox::setEnabledByValue(const LLSD& value, BOOL enabled)
|
||||
{
|
||||
LLScrollListItem *found = mList->getItem(value);
|
||||
if (found)
|
||||
{
|
||||
found->setEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
||||
void LLComboBox::createLineEditor(const LLComboBox::Params& p)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -159,6 +159,8 @@ public:
|
|||
BOOL setCurrentByIndex( S32 index );
|
||||
S32 getCurrentIndex() const;
|
||||
|
||||
void setEnabledByValue(const LLSD& value, BOOL enabled);
|
||||
|
||||
void createLineEditor(const Params&);
|
||||
|
||||
// <FS:Ansariel> For setting the focus to the LLLineEditor
|
||||
|
|
|
|||
|
|
@ -2247,6 +2247,7 @@ void LLLineEditor::clear()
|
|||
void LLLineEditor::onTabInto()
|
||||
{
|
||||
selectAll();
|
||||
LLUICtrl::onTabInto();
|
||||
}
|
||||
|
||||
//virtual
|
||||
|
|
|
|||
|
|
@ -509,6 +509,7 @@ void LLMultiSliderCtrl::onTabInto()
|
|||
{
|
||||
mEditor->onTabInto();
|
||||
}
|
||||
LLF32UICtrl::onTabInto();
|
||||
}
|
||||
|
||||
void LLMultiSliderCtrl::reportInvalidData()
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ LLNotificationForm::LLNotificationForm(const LLSD& sd)
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Invalid form data " << sd << LL_ENDL;
|
||||
LL_WARNS("Notifications") << "Invalid form data " << sd << LL_ENDL;
|
||||
mFormData = LLSD::emptyArray();
|
||||
}
|
||||
}
|
||||
|
|
@ -449,11 +449,11 @@ LLNotificationTemplate::LLNotificationTemplate(const LLNotificationTemplate::Par
|
|||
mUniqueContext.push_back(context.value);
|
||||
}
|
||||
|
||||
LL_DEBUGS() << "notification \"" << mName << "\": tag count is " << p.tags.size() << LL_ENDL;
|
||||
LL_DEBUGS("Notifications") << "notification \"" << mName << "\": tag count is " << p.tags.size() << LL_ENDL;
|
||||
|
||||
BOOST_FOREACH(const LLNotificationTemplate::Tag& tag, p.tags)
|
||||
{
|
||||
LL_DEBUGS() << " tag \"" << std::string(tag.value) << "\"" << LL_ENDL;
|
||||
LL_DEBUGS("Notifications") << " tag \"" << std::string(tag.value) << "\"" << LL_ENDL;
|
||||
mTags.push_back(tag.value);
|
||||
}
|
||||
|
||||
|
|
@ -1407,8 +1407,14 @@ void LLNotifications::initSingleton()
|
|||
createDefaultChannels();
|
||||
}
|
||||
|
||||
void LLNotifications::cleanupSingleton()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void LLNotifications::createDefaultChannels()
|
||||
{
|
||||
LL_INFOS("Notifications") << "Generating default notification channels" << LL_ENDL;
|
||||
// now construct the various channels AFTER loading the notifications,
|
||||
// because the history channel is going to rewrite the stored notifications file
|
||||
mDefaultChannels.push_back(new LLNotificationChannel("Enabled", "",
|
||||
|
|
@ -1464,7 +1470,7 @@ void LLNotifications::forceResponse(const LLNotification::Params& params, S32 op
|
|||
|
||||
if (selected_item.isUndefined())
|
||||
{
|
||||
LL_WARNS() << "Invalid option" << option << " for notification " << (std::string)params.name << LL_ENDL;
|
||||
LL_WARNS("Notifications") << "Invalid option" << option << " for notification " << (std::string)params.name << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
response[selected_item["name"].asString()] = true;
|
||||
|
|
@ -1498,12 +1504,12 @@ void replaceSubstitutionStrings(LLXMLNodePtr node, StringMap& replacements)
|
|||
if (found != replacements.end())
|
||||
{
|
||||
replacement = found->second;
|
||||
LL_DEBUGS() << "replaceSubstitutionStrings: value: \"" << value << "\" repl: \"" << replacement << "\"." << LL_ENDL;
|
||||
LL_DEBUGS("Notifications") << "replaceSubstitutionStrings: value: \"" << value << "\" repl: \"" << replacement << "\"." << LL_ENDL;
|
||||
it->second->setValue(replacement);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "replaceSubstitutionStrings FAILURE: could not find replacement \"" << value << "\"." << LL_ENDL;
|
||||
LL_WARNS("Notifications") << "replaceSubstitutionStrings FAILURE: could not find replacement \"" << value << "\"." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1542,7 +1548,7 @@ void addPathIfExists(const std::string& new_path, std::vector<std::string>& path
|
|||
|
||||
bool LLNotifications::loadTemplates()
|
||||
{
|
||||
LL_INFOS() << "Reading notifications template" << LL_ENDL;
|
||||
LL_INFOS("Notifications") << "Reading notifications template" << LL_ENDL;
|
||||
// Passing findSkinnedFilenames(constraint=LLDir::ALL_SKINS) makes it
|
||||
// output all relevant pathnames instead of just the ones from the most
|
||||
// specific skin.
|
||||
|
|
@ -1613,7 +1619,7 @@ bool LLNotifications::loadTemplates()
|
|||
mTemplates[notification.name] = LLNotificationTemplatePtr(new LLNotificationTemplate(notification));
|
||||
}
|
||||
|
||||
LL_INFOS() << "...done" << LL_ENDL;
|
||||
LL_INFOS("Notifications") << "...done" << LL_ENDL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1841,7 +1847,7 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)
|
|||
for(it = mVisibilityRules.begin(); it != mVisibilityRules.end(); it++)
|
||||
{
|
||||
// An empty type/tag/name string will match any notification, so only do the comparison when the string is non-empty in the rule.
|
||||
LL_DEBUGS()
|
||||
LL_DEBUGS("Notifications")
|
||||
<< "notification \"" << n->getName() << "\" "
|
||||
<< "testing against " << ((*it)->mVisible?"show":"hide") << " rule, "
|
||||
<< "name = \"" << (*it)->mName << "\" "
|
||||
|
|
@ -1886,7 +1892,7 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)
|
|||
if((*it)->mResponse.empty())
|
||||
{
|
||||
// Response property is empty. Cancel this notification.
|
||||
LL_DEBUGS() << "cancelling notification " << n->getName() << LL_ENDL;
|
||||
LL_DEBUGS("Notifications") << "cancelling notification " << n->getName() << LL_ENDL;
|
||||
|
||||
cancel(n);
|
||||
}
|
||||
|
|
@ -1897,7 +1903,7 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)
|
|||
// TODO: verify that the response template has an item with the correct name
|
||||
response[(*it)->mResponse] = true;
|
||||
|
||||
LL_DEBUGS() << "responding to notification " << n->getName() << " with response = " << response << LL_ENDL;
|
||||
LL_DEBUGS("Notifications") << "responding to notification " << n->getName() << " with response = " << response << LL_ENDL;
|
||||
|
||||
n->respond(response);
|
||||
}
|
||||
|
|
@ -1909,7 +1915,7 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)
|
|||
break;
|
||||
}
|
||||
|
||||
LL_DEBUGS() << "allowing notification " << n->getName() << LL_ENDL;
|
||||
LL_DEBUGS("Notifications") << "allowing notification " << n->getName() << LL_ENDL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1971,7 +1977,7 @@ void LLPostponedNotification::onAvatarNameCache(const LLUUID& agent_id,
|
|||
// from PE merge - we should figure out if this is the right thing to do
|
||||
if (name.empty())
|
||||
{
|
||||
LL_WARNS() << "Empty name received for Id: " << agent_id << LL_ENDL;
|
||||
LL_WARNS("Notifications") << "Empty name received for Id: " << agent_id << LL_ENDL;
|
||||
name = SYSTEM_FROM;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -963,6 +963,7 @@ public:
|
|||
|
||||
private:
|
||||
/*virtual*/ void initSingleton();
|
||||
/*virtual*/ void cleanupSingleton();
|
||||
|
||||
void loadPersistentNotifications();
|
||||
|
||||
|
|
@ -1078,6 +1079,7 @@ public:
|
|||
LLPersistentNotificationChannel()
|
||||
: LLNotificationChannel("Persistent", "Visible", ¬ificationFilter)
|
||||
{}
|
||||
virtual ~LLPersistentNotificationChannel() {}
|
||||
|
||||
typedef std::vector<LLNotificationPtr> history_list_t;
|
||||
history_list_t::iterator beginHistory() { sortHistory(); return mHistory.begin(); }
|
||||
|
|
|
|||
|
|
@ -479,6 +479,7 @@ void LLSliderCtrl::onTabInto()
|
|||
{
|
||||
mEditor->onTabInto();
|
||||
}
|
||||
LLF32UICtrl::onTabInto();
|
||||
}
|
||||
|
||||
void LLSliderCtrl::reportInvalidData()
|
||||
|
|
|
|||
|
|
@ -496,7 +496,8 @@ void LLSpinCtrl::setAllowEdit(BOOL allow_edit)
|
|||
|
||||
void LLSpinCtrl::onTabInto()
|
||||
{
|
||||
mEditor->onTabInto();
|
||||
mEditor->onTabInto();
|
||||
LLF32UICtrl::onTabInto();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1112,8 +1112,6 @@ BOOL LLTextBase::handleMouseDown(S32 x, S32 y, MASK mask)
|
|||
line_start = it->mDocIndexStart;
|
||||
}
|
||||
line_end = it->mDocIndexEnd;
|
||||
|
||||
// <FS:Ansariel> FIRE-29545: Backspace not working after triple-click selecting last line
|
||||
line_end = llclamp(line_end, 0, getLength());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -751,8 +751,9 @@ void LLUICtrl::resetDirty()
|
|||
}
|
||||
|
||||
// virtual
|
||||
void LLUICtrl::onTabInto()
|
||||
void LLUICtrl::onTabInto()
|
||||
{
|
||||
onUpdateScrollToChild(this);
|
||||
}
|
||||
|
||||
// virtual
|
||||
|
|
|
|||
|
|
@ -690,6 +690,16 @@ void LLView::onVisibilityChange ( BOOL new_visibility )
|
|||
}
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLView::onUpdateScrollToChild(const LLUICtrl * cntrl)
|
||||
{
|
||||
LLView* parent_view = getParent();
|
||||
if (parent_view)
|
||||
{
|
||||
parent_view->onUpdateScrollToChild(cntrl);
|
||||
}
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLView::translate(S32 x, S32 y)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -307,6 +307,7 @@ public:
|
|||
virtual BOOL setLabelArg( const std::string& key, const LLStringExplicit& text );
|
||||
|
||||
virtual void onVisibilityChange ( BOOL new_visibility );
|
||||
virtual void onUpdateScrollToChild(const LLUICtrl * cntrl);
|
||||
|
||||
void pushVisible(BOOL visible) { mLastVisible = mVisible; setVisible(visible); }
|
||||
void popVisible() { setVisible(mLastVisible); }
|
||||
|
|
|
|||
|
|
@ -369,10 +369,10 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
callRightMouseDown(mMousePos, [theEvent modifierFlags]);
|
||||
mSimulatedRightClick = true;
|
||||
} else {
|
||||
if ([theEvent clickCount] >= 2)
|
||||
if ([theEvent clickCount] == 2)
|
||||
{
|
||||
callDoubleClick(mMousePos, [theEvent modifierFlags]);
|
||||
} else if ([theEvent clickCount] == 1) {
|
||||
} else if ([theEvent clickCount] >= 1) {
|
||||
callLeftMouseDown(mMousePos, [theEvent modifierFlags]);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2122,6 +2122,12 @@ endif (FMODSTUDIO)
|
|||
# set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
|
||||
set_source_files_properties(llstartup.cpp llfloaterpreference.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
|
||||
# </FS:Ansariel>
|
||||
|
||||
if (HAVOK OR HAVOK_TPV)
|
||||
set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_HAVOK")
|
||||
endif (HAVOK OR HAVOK_TPV)
|
||||
|
||||
# progress view disables/enables icons based on available packages
|
||||
set_source_files_properties(llprogressview.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
|
||||
|
||||
list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})
|
||||
|
|
@ -2250,10 +2256,10 @@ if (WINDOWS)
|
|||
endif (FMODSTUDIO)
|
||||
|
||||
if (OPENAL)
|
||||
list(APPEND COPY_INPUT_DEPENDENCIES
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/OpenAL32.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/alut.dll
|
||||
)
|
||||
list(APPEND COPY_INPUT_DEPENDENCIES
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/OpenAL32.dll
|
||||
${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/alut.dll
|
||||
)
|
||||
endif (OPENAL)
|
||||
|
||||
add_custom_command(
|
||||
|
|
@ -2266,6 +2272,7 @@ if (WINDOWS)
|
|||
--artwork=${ARTWORK_DIR}
|
||||
"--bugsplat=${BUGSPLAT_DB}"
|
||||
"--fmodstudio=${FMODSTUDIO}"
|
||||
"--openal=${OPENAL}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2276,7 +2283,6 @@ if (WINDOWS)
|
|||
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
|
||||
--versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
|
||||
--viewer_flavor=${ND_VIEWER_FLAVOR}
|
||||
--openal=${OPENAL}
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
stage_third_party_libs
|
||||
|
|
@ -2330,6 +2336,7 @@ if (WINDOWS)
|
|||
--artwork=${ARTWORK_DIR}
|
||||
"--bugsplat=${BUGSPLAT_DB}"
|
||||
"--fmodstudio=${FMODSTUDIO}"
|
||||
"--openal=${OPENAL}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2340,7 +2347,6 @@ if (WINDOWS)
|
|||
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
|
||||
--versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
|
||||
--viewer_flavor=${ND_VIEWER_FLAVOR}
|
||||
--openal=${OPENAL}
|
||||
DEPENDS
|
||||
${VIEWER_BINARY_NAME}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
|
|
@ -2511,6 +2517,7 @@ endif (NOT ENABLE_MEDIA_PLUGINS)
|
|||
--artwork=${ARTWORK_DIR}
|
||||
"--bugsplat=${BUGSPLAT_DB}"
|
||||
"--fmodstudio=${FMODSTUDIO}"
|
||||
"--openal=${OPENAL}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2521,7 +2528,6 @@ endif (NOT ENABLE_MEDIA_PLUGINS)
|
|||
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
|
||||
--versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
|
||||
--viewer_flavor=${ND_VIEWER_FLAVOR}
|
||||
--openal=${OPENAL}
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
${COPY_INPUT_DEPENDENCIES}
|
||||
|
|
@ -2538,6 +2544,7 @@ endif (NOT ENABLE_MEDIA_PLUGINS)
|
|||
--artwork=${ARTWORK_DIR}
|
||||
"--bugsplat=${BUGSPLAT_DB}"
|
||||
"--fmodstudio=${FMODSTUDIO}"
|
||||
"--openal=${OPENAL}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2547,7 +2554,6 @@ endif (NOT ENABLE_MEDIA_PLUGINS)
|
|||
--source=${CMAKE_CURRENT_SOURCE_DIR}
|
||||
--versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
|
||||
--viewer_flavor=${ND_VIEWER_FLAVOR}
|
||||
--openal=${OPENAL}
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
${COPY_INPUT_DEPENDENCIES}
|
||||
|
|
@ -2622,6 +2628,7 @@ if (DARWIN)
|
|||
--artwork=${ARTWORK_DIR}
|
||||
"--bugsplat=${BUGSPLAT_DB}"
|
||||
"--fmodstudio=${FMODSTUDIO}"
|
||||
"--openal=${OPENAL}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
--bundleid=${MACOSX_BUNDLE_GUI_IDENTIFIER}
|
||||
|
|
@ -2632,7 +2639,6 @@ if (DARWIN)
|
|||
--source=${CMAKE_CURRENT_SOURCE_DIR}
|
||||
--versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
|
||||
--viewer_flavor=${ND_VIEWER_FLAVOR}
|
||||
--openal=${OPENAL}
|
||||
DEPENDS
|
||||
${VIEWER_BINARY_NAME}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
|
|
@ -2659,6 +2665,7 @@ if (DARWIN)
|
|||
--artwork=${ARTWORK_DIR}
|
||||
"--bugsplat=${BUGSPLAT_DB}"
|
||||
"--fmodstudio=${FMODSTUDIO}"
|
||||
"--openal=${OPENAL}"
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
"--channel=${VIEWER_CHANNEL}"
|
||||
|
|
@ -2669,7 +2676,6 @@ if (DARWIN)
|
|||
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
|
||||
--versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
|
||||
--viewer_flavor=${ND_VIEWER_FLAVOR}
|
||||
--openal=${OPENAL}
|
||||
${SIGNING_SETTING}
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
6.4.8
|
||||
6.4.9
|
||||
|
|
|
|||
|
|
@ -1,16 +1,5 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>AppearanceCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AvatarSitRotation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -90,17 +79,6 @@
|
|||
<key>Value</key>
|
||||
<real>0.90322577953338623</real>
|
||||
</map>
|
||||
<key>EditCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering build mode, camera moves up above avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FocusOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,5 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>AppearanceCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AvatarSitRotation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -90,17 +79,6 @@
|
|||
<key>Value</key>
|
||||
<real>0.90322577953338623</real>
|
||||
</map>
|
||||
<key>EditCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering build mode, camera moves up above avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FocusOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -1,16 +1,5 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>AppearanceCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>AvatarSitRotation</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -90,17 +79,6 @@
|
|||
<key>Value</key>
|
||||
<real>0.90322577953338623</real>
|
||||
</map>
|
||||
<key>EditCameraMovement</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When entering build mode, camera moves up above avatar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FocusOffsetRearView</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -1407,10 +1407,21 @@
|
|||
<key>Backup</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>RLVaShowRedirectChatTyping</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Sends typing start messages (and optionally plays the typing animation) when @redirchat restricted</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<boolean>0</boolean>
|
||||
</map>
|
||||
<key>RLVaSplitRedirectChat</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Splits long nearby chat lines across multiple messages when @redir* restricted.</string>
|
||||
<string>Splits long nearby chat lines across multiple messages when @redir* restricted</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -17963,17 +17974,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Backup</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>VoiceCallsFriendsOnly</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Only accept voice calls from residents on your friends list</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>VoiceCallsRejectGroup</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -477,6 +477,17 @@
|
|||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>VoiceCallsFriendsOnly</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Only accept voice calls and receive IMs from residents on your friends list</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>VoiceEffectDefault</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
<file>nirmala.ttf</file>
|
||||
<file>tahoma.ttf</file>
|
||||
<file load_collection="true">Cambria.ttc</file>
|
||||
<file>micross.ttf</file>
|
||||
<file>malgun.ttf</file>
|
||||
</os>
|
||||
<os name="Mac">
|
||||
|
|
@ -29,6 +30,7 @@
|
|||
<file>华文细黑.ttf</file>
|
||||
<file>PingFang.ttc</file>
|
||||
<file>STIXGeneral.otf</file>
|
||||
<file>Thonburi.ttc</file>
|
||||
</os>
|
||||
</font>
|
||||
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@
|
|||
#include "llfocusmgr.h"
|
||||
#include "llkeyboard.h"
|
||||
#include "llpanelblockedlist.h"
|
||||
#include "rlvactions.h"
|
||||
#include "rlvcommon.h"
|
||||
#include "rlvhandler.h"
|
||||
|
||||
|
|
@ -508,6 +509,12 @@ public:
|
|||
{
|
||||
return canModerate(userdata);
|
||||
}
|
||||
// [RLVa:KB] - @pay
|
||||
else if (param == "can_pay")
|
||||
{
|
||||
return RlvActions::canPayAvatar(getAvatarId());
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
else if (param == "can_ban_member")
|
||||
{
|
||||
return canBanGroupMember(getAvatarId());
|
||||
|
|
|
|||
|
|
@ -49,6 +49,9 @@
|
|||
#include "lltooldraganddrop.h"
|
||||
#include "llviewermenu.h"
|
||||
#include "llvoiceclient.h"
|
||||
// [RLVa:KB] - @pay
|
||||
#include "rlvactions.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
//Maximum number of people you can select to do an operation on at once.
|
||||
const U32 MAX_FRIEND_SELECT = 20;
|
||||
|
|
@ -796,7 +799,7 @@ void FSFloaterContacts::refreshRightsChangeList()
|
|||
else
|
||||
{
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC) &&
|
||||
!gRlvHandler.isException(RLV_BHVR_TPLURE, *itr, RLV_CHECK_PERMISSIVE) &&
|
||||
!gRlvHandler.isException(RLV_BHVR_TPLURE, *itr, ERlvExceptionCheck::Permissive) &&
|
||||
!friend_status->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION))
|
||||
{
|
||||
can_offer_teleport = false;
|
||||
|
|
@ -840,7 +843,6 @@ void FSFloaterContacts::refreshUI()
|
|||
|
||||
//Options that can only be performed with one friend selected
|
||||
childSetEnabled("profile_btn", single_selected && !multiple_selected);
|
||||
childSetEnabled("pay_btn", single_selected && !multiple_selected);
|
||||
|
||||
//Options that can be performed with up to MAX_FRIEND_SELECT friends selected
|
||||
//(single_selected will always be true in this situations)
|
||||
|
|
@ -849,12 +851,15 @@ void FSFloaterContacts::refreshUI()
|
|||
|
||||
LLScrollListItem* selected_item = mFriendsList->getFirstSelected();
|
||||
bool mappable = false;
|
||||
bool payable = false;
|
||||
if (selected_item)
|
||||
{
|
||||
LLUUID av_id = selected_item->getUUID();
|
||||
mappable = (single_selected && !multiple_selected && av_id.notNull() && is_agent_mappable(av_id));
|
||||
payable = (single_selected && !multiple_selected && av_id.notNull() && RlvActions::canPayAvatar(av_id));
|
||||
}
|
||||
childSetEnabled("map_btn", mappable && !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWWORLDMAP));
|
||||
childSetEnabled("pay_btn", payable);
|
||||
|
||||
// Set friend count
|
||||
mFriendsTab->getChild<LLTextBox>("friend_count")->setTextArg("COUNT", llformat("%d", mFriendsList->getItemCount()));
|
||||
|
|
@ -1088,7 +1093,8 @@ void FSFloaterContacts::childShowTab(const std::string& id, const std::string& t
|
|||
void FSFloaterContacts::updateRlvRestrictions(ERlvBehaviour behavior)
|
||||
{
|
||||
if (behavior == RLV_BHVR_SHOWLOC ||
|
||||
behavior == RLV_BHVR_SHOWWORLDMAP)
|
||||
behavior == RLV_BHVR_SHOWWORLDMAP ||
|
||||
behavior == RLV_BHVR_PAY)
|
||||
{
|
||||
refreshUI();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -545,7 +545,7 @@ void FSFloaterIM::sendMsg(const std::string& msg)
|
|||
|
||||
if (fRlvFilter)
|
||||
{
|
||||
utf8_text = RlvStrings::getString(RLV_STRING_BLOCKED_SENDIM);
|
||||
utf8_text = RlvStrings::getString(RlvStringKeys::Blocked::SendIm);
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -613,8 +613,7 @@ void FSNearbyChat::handleChatBarKeystroke(LLUICtrl* source, S32 channel /* = 0 *
|
|||
static LLCachedControl<bool> allow_mu_pose(gSavedSettings, "AllowMUpose");
|
||||
if (length > 0 &&
|
||||
((raw_text[0] != '/' || (type_during_emote && length > 3 && prefix == utf8string_to_wstring("/me") && (raw_text[3] == ' ' || raw_text[3] == '\'')))
|
||||
&& (raw_text[0] != ':' || !allow_mu_pose || type_during_emote)) &&
|
||||
!gRlvHandler.hasBehaviour(RLV_BHVR_REDIRCHAT))
|
||||
&& (raw_text[0] != ':' || !allow_mu_pose || type_during_emote)))
|
||||
{
|
||||
// only start typing animation if we are chatting without / on channel 0 -Zi
|
||||
if (channel == 0)
|
||||
|
|
|
|||
|
|
@ -718,7 +718,7 @@ void FSPanelProfileSecondLife::updateButtons()
|
|||
{
|
||||
const LLRelationship* friend_status = LLAvatarTracker::instance().getBuddyInfo(av_id);
|
||||
bool can_offer_tp = (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC) ||
|
||||
(gRlvHandler.isException(RLV_BHVR_TPLURE, av_id, RLV_CHECK_PERMISSIVE) ||
|
||||
(gRlvHandler.isException(RLV_BHVR_TPLURE, av_id, ERlvExceptionCheck::Permissive) ||
|
||||
friend_status->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION)));
|
||||
|
||||
mTeleportButton->setEnabled(is_buddy_online && can_offer_tp);
|
||||
|
|
@ -728,7 +728,7 @@ void FSPanelProfileSecondLife::updateButtons()
|
|||
else
|
||||
{
|
||||
bool can_offer_tp = (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC) ||
|
||||
gRlvHandler.isException(RLV_BHVR_TPLURE, av_id, RLV_CHECK_PERMISSIVE));
|
||||
gRlvHandler.isException(RLV_BHVR_TPLURE, av_id, ERlvExceptionCheck::Permissive));
|
||||
mTeleportButton->setEnabled(can_offer_tp);
|
||||
mAddFriendButton->setEnabled(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "llcallingcard.h" // for LLAvatarTracker
|
||||
#include "llnetmap.h"
|
||||
#include "llviewermenu.h" // for gMenuHolder
|
||||
#include "rlvactions.h"
|
||||
#include "rlvhandler.h"
|
||||
|
||||
namespace FSFloaterRadarMenu
|
||||
|
|
@ -228,6 +229,11 @@ bool FSRadarMenu::enableContextMenuItem(const LLSD& userdata)
|
|||
{
|
||||
return (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWINV));
|
||||
}
|
||||
else if (item == std::string("can_pay"))
|
||||
{
|
||||
const LLUUID& id = mUUIDs.front();
|
||||
return RlvActions::canPayAvatar(id);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -605,7 +605,7 @@ std::string LLSLURL::getSLURLString() const
|
|||
// [RLVa:KB] - Checked: 2010-04-05 (RLVa-1.2.0d) | Added: RLVa-1.2.0d
|
||||
ret.append( ( ((!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) || (!RlvUtil::isNearbyRegion(mRegion)))
|
||||
? (LLURI::escape(mRegion) + llformat("/%d/%d/%d",x,y,z))
|
||||
: RlvStrings::getString(RLV_STRING_HIDDEN_REGION) ));
|
||||
: RlvStrings::getString(RlvStringKeys::Hidden::Region) ));
|
||||
// [/RLVa:KB]
|
||||
LL_DEBUGS("SLURL") << "Location: " << ret << LL_ENDL;
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -1019,9 +1019,7 @@ void LLAgent::setRegion(LLViewerRegion *regionp)
|
|||
if (mRegionp != regionp)
|
||||
{
|
||||
|
||||
std::string ip = regionp->getHost().getString();
|
||||
LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName()
|
||||
<< " located at " << ip << LL_ENDL;
|
||||
LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName() << LL_ENDL;
|
||||
if (mRegionp)
|
||||
{
|
||||
// NaCl - Antispam Registry clear anti-spam queues when changing regions
|
||||
|
|
@ -2381,6 +2379,13 @@ BOOL LLAgent::needsRenderHead()
|
|||
//-----------------------------------------------------------------------------
|
||||
void LLAgent::startTyping()
|
||||
{
|
||||
// [RLVa:KB] - @redirchat
|
||||
if (!RlvActions::canSendTypingStart())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
mTypingTimer.reset();
|
||||
|
||||
if (getRenderState() & AGENT_STATE_TYPING)
|
||||
|
|
@ -4800,7 +4805,7 @@ void LLAgent::teleportViaLandmark(const LLUUID& landmark_asset_id)
|
|||
: gRlvHandler.hasBehaviour(RLV_BHVR_TPLM) && gRlvHandler.hasBehaviour(RLV_BHVR_TPLOC) ) ||
|
||||
((gRlvHandler.hasBehaviour(RLV_BHVR_UNSIT)) && (isAgentAvatarValid()) && (gAgentAvatarp->isSitting())) ))
|
||||
{
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_TELEPORT);
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Teleport);
|
||||
return;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -4915,7 +4920,7 @@ void LLAgent::teleportViaLocation(const LLVector3d& pos_global)
|
|||
|
||||
if ( (RlvActions::isLocalTp(pos_global)) ? !RlvActions::canTeleportToLocal(pos_global) : !RlvActions::canTeleportToLocation() )
|
||||
{
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_TELEPORT);
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Teleport);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -5000,7 +5005,7 @@ void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global, const LLVe
|
|||
|
||||
if ( (RlvActions::isLocalTp(pos_global)) ? !RlvActions::canTeleportToLocal(pos_global) : !RlvActions::canTeleportToLocation() )
|
||||
{
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_TELEPORT);
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::Teleport);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -388,6 +388,18 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera, BOOL moveme
|
|||
// <FS:CR> FIRE-8798: Option to prevent camera reset on movement
|
||||
}
|
||||
// </FS:CR>
|
||||
|
||||
if (LLSelectMgr::getInstance()->mAllowSelectAvatar)
|
||||
{
|
||||
// resetting camera also resets position overrides in debug mode 'AllowSelectAvatar'
|
||||
LLObjectSelectionHandle selected_handle = LLSelectMgr::getInstance()->getSelection();
|
||||
if (selected_handle->getObjectCount() == 1
|
||||
&& selected_handle->getFirstObject() != NULL
|
||||
&& selected_handle->getFirstObject()->isAvatar())
|
||||
{
|
||||
LLSelectMgr::getInstance()->resetObjectOverrides(selected_handle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Allow camera to be moved somewhere other than behind avatar.
|
||||
|
|
|
|||
|
|
@ -136,8 +136,8 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const
|
|||
// RELEASE-RLVa: [SL-2.0.0] Check ELocationFormat to make sure our switch still makes sense
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
||||
{
|
||||
parcel_name = RlvStrings::getString(RLV_STRING_HIDDEN_PARCEL);
|
||||
region_name = RlvStrings::getString(RLV_STRING_HIDDEN_REGION);
|
||||
parcel_name = RlvStrings::getString(RlvStringKeys::Hidden::Parcel);
|
||||
region_name = RlvStrings::getString(RlvStringKeys::Hidden::Region);
|
||||
if (LOCATION_FORMAT_NO_MATURITY == fmt)
|
||||
fmt = LOCATION_FORMAT_LANDMARK;
|
||||
else if (LOCATION_FORMAT_FULL == fmt || LOCATION_FORMAT_V1 == fmt || LOCATION_FORMAT_V1_NO_COORDS == fmt)
|
||||
|
|
|
|||
|
|
@ -533,20 +533,20 @@ void LLAppCoreHttp::refreshSettings(bool initial)
|
|||
LLCore::HttpStatus LLAppCoreHttp::sslVerify(const std::string &url,
|
||||
const LLCore::HttpHandler::ptr_t &handler, void *appdata)
|
||||
{
|
||||
X509_STORE_CTX *ctx = static_cast<X509_STORE_CTX *>(appdata);
|
||||
LLCore::HttpStatus result;
|
||||
LLPointer<LLCertificateStore> store = gSecAPIHandler->getCertificateStore("");
|
||||
LLPointer<LLCertificateChain> chain = gSecAPIHandler->getCertificateChain(ctx);
|
||||
LLSD validation_params = LLSD::emptyMap();
|
||||
LLURI uri(url);
|
||||
LLCore::HttpStatus result;
|
||||
try
|
||||
{
|
||||
X509_STORE_CTX *ctx = static_cast<X509_STORE_CTX *>(appdata);
|
||||
LLPointer<LLCertificateStore> store = gSecAPIHandler->getCertificateStore("");
|
||||
LLPointer<LLCertificateChain> chain = gSecAPIHandler->getCertificateChain(ctx);
|
||||
LLSD validation_params = LLSD::emptyMap();
|
||||
LLURI uri(url);
|
||||
|
||||
validation_params[CERT_HOSTNAME] = uri.hostName();
|
||||
validation_params[CERT_HOSTNAME] = uri.hostName();
|
||||
|
||||
// *TODO: In the case of an exception while validating the cert, we need a way
|
||||
// to pass the offending(?) cert back out. *Rider*
|
||||
// *TODO: In the case of an exception while validating the cert, we need a way
|
||||
// to pass the offending(?) cert back out. *Rider*
|
||||
|
||||
try
|
||||
{
|
||||
// don't validate hostname. Let libcurl do it instead. That way, it'll handle redirects
|
||||
store->validate(VALIDATION_POLICY_SSL & (~VALIDATION_POLICY_HOSTNAME), chain, validation_params);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ struct AttachmentInfo
|
|||
std::vector<AttachmentInfo> info{
|
||||
AttachmentInfo(metadata.logFilePathname, "text/plain"),
|
||||
AttachmentInfo(metadata.userSettingsPathname, "text/xml"),
|
||||
AttachmentInfo(metadata.accountSettingsPathname, "text/xml"),
|
||||
AttachmentInfo(metadata.staticDebugPathname, "text/xml")
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -3973,6 +3973,10 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
|
|||
}
|
||||
|
||||
llcoro::suspend();
|
||||
if (LLApp::isQuitting())
|
||||
{
|
||||
return;
|
||||
}
|
||||
S32 retryCount(0);
|
||||
bool bRetry;
|
||||
do
|
||||
|
|
@ -4036,6 +4040,11 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
|
|||
|
||||
LLSD result = httpAdapter->postAndSuspend(httpRequest, url, postData);
|
||||
|
||||
if (LLApp::isQuitting())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
|
||||
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
|
||||
|
||||
|
|
@ -4071,6 +4080,10 @@ void LLAppearanceMgr::serverAppearanceUpdateCoro(LLCoreHttpUtil::HttpCoroutineAd
|
|||
LL_WARNS("Avatar") << "Bake retry #" << retryCount << " in " << timeout << " seconds." << LL_ENDL;
|
||||
|
||||
llcoro::suspendUntilTimeout(timeout);
|
||||
if (LLApp::isQuitting())
|
||||
{
|
||||
return;
|
||||
}
|
||||
bRetry = true;
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -426,7 +426,10 @@ const std::string ERROR_MARKER_FILE_NAME(SAFE_FILE_NAME_PREFIX + ".error_marker"
|
|||
const std::string LLERROR_MARKER_FILE_NAME(SAFE_FILE_NAME_PREFIX + ".llerror_marker"); //FS orig modified LL
|
||||
const std::string LOGOUT_MARKER_FILE_NAME(SAFE_FILE_NAME_PREFIX + ".logout_marker"); //FS orig modified LL
|
||||
|
||||
static BOOL gDoDisconnect = FALSE;
|
||||
//static BOOL gDoDisconnect = FALSE;
|
||||
// [RLVa:KB] - Checked: RLVa-2.3
|
||||
BOOL gDoDisconnect = FALSE;
|
||||
// [/RLVa:KB]
|
||||
static std::string gLaunchFileOnQuit;
|
||||
|
||||
// Used on Win32 for other apps to identify our window (eg, win_setup)
|
||||
|
|
@ -3402,7 +3405,7 @@ bool LLAppViewer::initConfiguration()
|
|||
}
|
||||
|
||||
// [RLVa:KB] - Patch: RLVa-2.1.0
|
||||
if (LLControlVariable* pControl = gSavedSettings.getControl(RLV_SETTING_MAIN))
|
||||
if (LLControlVariable* pControl = gSavedSettings.getControl(RlvSettingNames::Main))
|
||||
{
|
||||
if ( (pControl->getValue().asBoolean()) && (pControl->hasUnsavedValue()) )
|
||||
{
|
||||
|
|
@ -3753,9 +3756,8 @@ LLSD LLAppViewer::getViewerInfo() const
|
|||
info["POSITION"] = ll_sd_from_vector3d(pos);
|
||||
info["POSITION_LOCAL"] = ll_sd_from_vector3(gAgent.getPosAgentFromGlobal(pos));
|
||||
info["REGION"] = gAgent.getRegion()->getName();
|
||||
info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName();
|
||||
info["HOSTIP"] = gAgent.getRegion()->getHost().getString();
|
||||
// info["SERVER_VERSION"] = gLastVersionChannel;
|
||||
boost::regex regex("\\.(secondlife|lindenlab)\\..*");
|
||||
info["HOSTNAME"] = boost::regex_replace(gAgent.getRegion()->getHost().getHostName(), regex, "");
|
||||
LLSLURL slurl;
|
||||
LLAgentUI::buildSLURL(slurl);
|
||||
info["SLURL"] = slurl.getSLURLString();
|
||||
|
|
@ -3763,7 +3765,7 @@ LLSD LLAppViewer::getViewerInfo() const
|
|||
}
|
||||
else
|
||||
{
|
||||
info["REGION"] = RlvStrings::getString(RLV_STRING_HIDDEN_REGION);
|
||||
info["REGION"] = RlvStrings::getString(RlvStringKeys::Hidden::Region);
|
||||
}
|
||||
info["SERVER_VERSION"] = gLastVersionChannel;
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -5696,13 +5698,14 @@ void LLAppViewer::idle()
|
|||
// </FS:CR>
|
||||
return;
|
||||
}
|
||||
|
||||
gViewerWindow->updateUI();
|
||||
|
||||
if (gTeleportDisplay)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gViewerWindow->updateUI();
|
||||
|
||||
///////////////////////////////////////
|
||||
// Agent and camera movement
|
||||
//
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ struct CrashMetadata
|
|||
{
|
||||
std::string logFilePathname;
|
||||
std::string userSettingsPathname;
|
||||
std::string accountSettingsPathname;
|
||||
std::string staticDebugPathname;
|
||||
std::string OSInfo;
|
||||
std::string agentFullname;
|
||||
|
|
|
|||
|
|
@ -199,10 +199,11 @@ CrashMetadataSingleton::CrashMetadataSingleton()
|
|||
else
|
||||
{
|
||||
LL_INFOS() << "Metadata from '" << staticDebugPathname << "':" << LL_ENDL;
|
||||
logFilePathname = get_metadata(info, "SLLog");
|
||||
userSettingsPathname = get_metadata(info, "SettingsFilename");
|
||||
OSInfo = get_metadata(info, "OSInfo");
|
||||
agentFullname = get_metadata(info, "LoginName");
|
||||
logFilePathname = get_metadata(info, "SLLog");
|
||||
userSettingsPathname = get_metadata(info, "SettingsFilename");
|
||||
accountSettingsPathname = get_metadata(info, "PerAccountSettingsFilename");
|
||||
OSInfo = get_metadata(info, "OSInfo");
|
||||
agentFullname = get_metadata(info, "LoginName");
|
||||
// Translate underscores back to spaces
|
||||
LLStringUtil::replaceChar(agentFullname, '_', ' ');
|
||||
regionName = get_metadata(info, "CurrentRegion");
|
||||
|
|
|
|||
|
|
@ -177,19 +177,29 @@ namespace
|
|||
// name and on the other hand a Linden will not likely ever crash on Firestom.
|
||||
sBugSplatSender->setDefaultUserName( WCSTR("Crash.Linden") );
|
||||
|
||||
// <FS:ND> Only send avatar name if enabled via prefs
|
||||
if (gCrashSettings.getBOOL("CrashSubmitName"))
|
||||
if (gAgentAvatarp)
|
||||
{
|
||||
// </FS:ND>
|
||||
if (gAgentAvatarp)
|
||||
// <FS:ND> Only send avatar name if enabled via prefs
|
||||
if (gCrashSettings.getBOOL("CrashSubmitName"))
|
||||
// </FS:ND>
|
||||
{
|
||||
// user name, when we have it
|
||||
sBugSplatSender->setDefaultUserName(WCSTR(gAgentAvatarp->getFullname()));
|
||||
// <FS:ND> Only send avatar name if enabled via prefs
|
||||
}
|
||||
// <FS:ND> Only send avatar name if enabled via prefs
|
||||
// </FS:ND>
|
||||
|
||||
//<FS:Ansariel> Only include if sending settings file
|
||||
//sBugSplatSender->sendAdditionalFile(
|
||||
// WCSTR(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "settings_per_account.xml")));
|
||||
if (gCrashSettings.getBOOL("CrashSubmitSettings"))
|
||||
{
|
||||
sBugSplatSender->sendAdditionalFile(
|
||||
WCSTR(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "settings_per_account.xml")));
|
||||
}
|
||||
// <FS:Ansariel>
|
||||
}
|
||||
// </FS:ND>
|
||||
|
||||
|
||||
// LL_ERRS message, when there is one
|
||||
sBugSplatSender->setDefaultUserDescription(WCSTR(LLError::getFatalMessage()));
|
||||
|
||||
|
|
|
|||
|
|
@ -248,7 +248,7 @@ void LLAvatarActions::startIM(const LLUUID& id)
|
|||
if (!RlvActions::canStartIM(id))
|
||||
{
|
||||
make_ui_sound("UISndInvalidOp");
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("agent", id, "completename").getSLURLString()));
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::StartIm, LLSD().with("RECIPIENT", LLSLURL("agent", id, "completename").getSLURLString()));
|
||||
return;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -293,7 +293,7 @@ void LLAvatarActions::startCall(const LLUUID& id)
|
|||
if (!RlvActions::canStartIM(id))
|
||||
{
|
||||
make_ui_sound("UISndInvalidOp");
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("agent", id, "completename").getSLURLString()));
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::StartIm, LLSD().with("RECIPIENT", LLSLURL("agent", id, "completename").getSLURLString()));
|
||||
return;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -325,7 +325,7 @@ const LLUUID LLAvatarActions::startAdhocCall(const uuid_vec_t& ids, const LLUUID
|
|||
if (!RlvActions::canStartIM(idAgent))
|
||||
{
|
||||
make_ui_sound("UISndInvalidOp");
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTCONF);
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::StartConference);
|
||||
return LLUUID::null;
|
||||
}
|
||||
id_array.push_back(idAgent);
|
||||
|
|
@ -391,7 +391,7 @@ const LLUUID LLAvatarActions::startConference(const uuid_vec_t& ids, const LLUUI
|
|||
if (!RlvActions::canStartIM(idAgent))
|
||||
{
|
||||
make_ui_sound("UISndInvalidOp");
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTCONF);
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::StartConference);
|
||||
return LLUUID::null;
|
||||
}
|
||||
id_array.push_back(idAgent);
|
||||
|
|
@ -565,7 +565,7 @@ void LLAvatarActions::teleport_request_callback(const LLSD& notification, const
|
|||
// Filter the request message if the recipients is IM-blocked
|
||||
if ( (RlvActions::isRlvEnabled()) && ((!RlvActions::canStartIM(idRecipient)) || (!RlvActions::canSendIM(idRecipient))) )
|
||||
{
|
||||
strMessage = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
strMessage = RlvStrings::getString(RlvStringKeys::Hidden::Generic);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
|
@ -1246,7 +1246,7 @@ bool LLAvatarActions::canOfferTeleport(const LLUUID& id)
|
|||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
||||
{
|
||||
const LLRelationship* pBuddyInfo = LLAvatarTracker::instance().getBuddyInfo(id);
|
||||
if (gRlvHandler.isException(RLV_BHVR_TPLURE, id, RLV_CHECK_PERMISSIVE) ||
|
||||
if (gRlvHandler.isException(RLV_BHVR_TPLURE, id, ERlvExceptionCheck::Permissive) ||
|
||||
(pBuddyInfo && pBuddyInfo->isOnline() && pBuddyInfo->isRightGrantedTo(LLRelationship::GRANT_MAP_LOCATION)))
|
||||
{
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@
|
|||
#include "llviewercontrol.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
// [RLVa:KB] - Checked: 2010-04-22 (RLVa-1.2.0f)
|
||||
#include "rlvactions.h"
|
||||
#include "rlvcommon.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
|
@ -488,6 +489,12 @@ public:
|
|||
{
|
||||
return canModerate(userdata);
|
||||
}
|
||||
// [RLVa:KB] - @pay
|
||||
else if (level == "can_pay")
|
||||
{
|
||||
return RlvActions::canPayAvatar(getAvatarId());
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
else if (level == "can_ban_member")
|
||||
{
|
||||
return canBanGroupMember(getAvatarId());
|
||||
|
|
|
|||
|
|
@ -1995,6 +1995,10 @@ void LLScriptChiclet::onMenuItemClicked(const LLSD& user_data)
|
|||
{
|
||||
LLScriptFloaterManager::instance().removeNotification(getSessionId());
|
||||
}
|
||||
else if ("close all" == action)
|
||||
{
|
||||
LLIMWellWindow::getInstance()->closeAll();
|
||||
}
|
||||
}
|
||||
|
||||
void LLScriptChiclet::createPopupMenu()
|
||||
|
|
|
|||
|
|
@ -449,6 +449,13 @@ void LLFloaterCompileQueue::processExperienceIdResults(LLSD result, LLUUID paren
|
|||
bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloater,
|
||||
const LLPointer<LLViewerObject> &object, LLInventoryObject* inventory, LLEventPump &pump)
|
||||
{
|
||||
if (LLApp::isQuitting())
|
||||
{
|
||||
// Reply from coroutine came on shutdown
|
||||
// We are quiting, don't start any more coroutines!
|
||||
return true;
|
||||
}
|
||||
|
||||
LLSD result;
|
||||
LLCheckedHandle<LLFloaterCompileQueue> floater(hfloater);
|
||||
// Dereferencing floater may fail. If they do they throw LLExeceptionStaleHandle.
|
||||
|
|
@ -502,6 +509,8 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
|
|||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
floater.check();
|
||||
|
||||
if (result.has("timeout"))
|
||||
{ // A timeout filed in the result will always be true if present.
|
||||
LLStringUtil::format_map_t args;
|
||||
|
|
@ -525,6 +534,12 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
|
|||
|
||||
}
|
||||
|
||||
if (!gAssetStorage)
|
||||
{
|
||||
// viewer likely is shutting down
|
||||
return true;
|
||||
}
|
||||
|
||||
{
|
||||
// <FS:Ansariel> [LSL PreProc]
|
||||
//HandleScriptUserData userData(pump.getName());
|
||||
|
|
@ -609,6 +624,8 @@ bool LLFloaterCompileQueue::processScript(LLHandle<LLFloaterCompileQueue> hfloat
|
|||
|
||||
result = llcoro::suspendUntilEventOnWithTimeout(pump, fetch_timeout, LLSDMap("timeout", LLSD::Boolean(true)));
|
||||
|
||||
floater.check();
|
||||
|
||||
if (result.has("timeout"))
|
||||
{ // A timeout filed in the result will always be true if present.
|
||||
LLStringUtil::format_map_t args;
|
||||
|
|
@ -1012,6 +1029,7 @@ void LLFloaterScriptQueue::objectScriptProcessingQueueCoro(std::string action, L
|
|||
// but offers no guarantee of doing so.
|
||||
llcoro::suspend();
|
||||
}
|
||||
floater.check();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Translation fixes
|
||||
|
|
|
|||
|
|
@ -37,6 +37,9 @@
|
|||
#include "llviewercontrol.h" // <FS:CR>
|
||||
#include "llviewerwindow.h"
|
||||
#include "llwindow.h"
|
||||
// [RLVa:KB] - @pay
|
||||
#include "rlvactions.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
static LLDefaultChildRegistry::Register<LLConversationLogList> r("conversation_log_list");
|
||||
|
||||
|
|
@ -397,6 +400,12 @@ bool LLConversationLogList::isActionEnabled(const LLSD& userdata)
|
|||
{
|
||||
return (is_p2p || is_group_member) && LLAvatarActions::canCall();
|
||||
}
|
||||
// [RLVa:KB] - @pay
|
||||
else if ("can_pay" == command_name)
|
||||
{
|
||||
return is_p2p && RlvActions::canPayAvatar(selected_id);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
else if ("add_rem_friend" == command_name ||
|
||||
"can_invite_to_group" == command_name ||
|
||||
"can_share" == command_name ||
|
||||
|
|
|
|||
|
|
@ -138,24 +138,24 @@ public:
|
|||
PASS_POST_BUMP,
|
||||
PASS_MATERIAL,
|
||||
PASS_MATERIAL_ALPHA,
|
||||
PASS_MATERIAL_ALPHA_MASK,
|
||||
PASS_MATERIAL_ALPHA_MASK, // Diffuse texture used as alpha mask
|
||||
PASS_MATERIAL_ALPHA_EMISSIVE,
|
||||
PASS_SPECMAP,
|
||||
PASS_SPECMAP_BLEND,
|
||||
PASS_SPECMAP_MASK,
|
||||
PASS_SPECMAP_MASK, // Diffuse texture used as alpha mask and specular texture(map)
|
||||
PASS_SPECMAP_EMISSIVE,
|
||||
PASS_NORMMAP,
|
||||
PASS_NORMMAP_BLEND,
|
||||
PASS_NORMMAP_MASK,
|
||||
PASS_NORMMAP_MASK, // Diffuse texture used as alpha mask and normal map
|
||||
PASS_NORMMAP_EMISSIVE,
|
||||
PASS_NORMSPEC,
|
||||
PASS_NORMSPEC_BLEND,
|
||||
PASS_NORMSPEC_MASK,
|
||||
PASS_NORMSPEC_MASK, // Diffuse texture used as alpha mask with normal and specular map
|
||||
PASS_NORMSPEC_EMISSIVE,
|
||||
PASS_GLOW,
|
||||
PASS_ALPHA,
|
||||
PASS_ALPHA_MASK,
|
||||
PASS_FULLBRIGHT_ALPHA_MASK,
|
||||
PASS_FULLBRIGHT_ALPHA_MASK, // Diffuse texture used as alpha mask and fullbright
|
||||
PASS_ALPHA_INVISIBLE,
|
||||
NUM_RENDER_TYPES,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -319,11 +319,15 @@ void LLDrawPoolAlpha::render(S32 pass)
|
|||
LLVertexBuffer::MAP_TEXCOORD0);
|
||||
|
||||
pushBatches(LLRenderPass::PASS_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
pushBatches(LLRenderPass::PASS_ALPHA_INVISIBLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
|
||||
// Material alpha mask
|
||||
gGL.diffuseColor4f(0, 0, 1, 1);
|
||||
pushBatches(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
pushBatches(LLRenderPass::PASS_NORMMAP_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
pushBatches(LLRenderPass::PASS_SPECMAP_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
pushBatches(LLRenderPass::PASS_NORMSPEC_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
|
||||
gGL.diffuseColor4f(0, 1, 0, 1);
|
||||
pushBatches(LLRenderPass::PASS_INVISIBLE, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, FALSE);
|
||||
|
|
|
|||
|
|
@ -1871,15 +1871,14 @@ bool LLDrawPoolAvatar::getRiggedGeometry(
|
|||
|
||||
face->setGeomIndex(0);
|
||||
face->setIndicesIndex(0);
|
||||
|
||||
//rigged faces do not batch textures
|
||||
|
||||
// <FS:ND> if needed reset drawinfo as the face was set up for texture for batching
|
||||
if (face->getTextureIndex() != 0xFF )
|
||||
face->setDrawInfo(nullptr);
|
||||
// <FS:ND>
|
||||
if (face->getTextureIndex() != FACE_DO_NOT_BATCH_TEXTURES)
|
||||
{
|
||||
face->setDrawInfo(NULL);
|
||||
}
|
||||
|
||||
face->setTextureIndex(255);
|
||||
//rigged faces do not batch textures
|
||||
face->setTextureIndex(FACE_DO_NOT_BATCH_TEXTURES);
|
||||
|
||||
if (buffer.isNull() || buffer->getTypeMask() != data_mask || !buffer->isWriteable())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -156,7 +156,7 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
|
|||
}
|
||||
|
||||
mTEOffset = -1;
|
||||
mTextureIndex = 255;
|
||||
mTextureIndex = FACE_DO_NOT_BATCH_TEXTURES;
|
||||
|
||||
setDrawable(drawablep);
|
||||
mVObjp = objp;
|
||||
|
|
@ -191,6 +191,7 @@ void LLFace::destroy()
|
|||
if(mTexture[i].notNull())
|
||||
{
|
||||
mTexture[i]->removeFace(i, this) ;
|
||||
mTexture[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -210,7 +211,6 @@ void LLFace::destroy()
|
|||
{
|
||||
mDrawPoolp->removeFace(this);
|
||||
}
|
||||
|
||||
mDrawPoolp = NULL;
|
||||
}
|
||||
|
||||
|
|
@ -219,7 +219,7 @@ void LLFace::destroy()
|
|||
delete mTextureMatrix;
|
||||
mTextureMatrix = NULL;
|
||||
|
||||
if (mDrawablep.notNull())
|
||||
if (mDrawablep)
|
||||
{
|
||||
LLSpatialGroup* group = mDrawablep->getSpatialGroup();
|
||||
if (group)
|
||||
|
|
@ -231,7 +231,7 @@ void LLFace::destroy()
|
|||
}
|
||||
|
||||
setDrawInfo(NULL);
|
||||
|
||||
|
||||
mDrawablep = NULL;
|
||||
mVObjp = NULL;
|
||||
}
|
||||
|
|
@ -476,13 +476,13 @@ void LLFace::setTextureIndex(U8 index)
|
|||
{
|
||||
mTextureIndex = index;
|
||||
|
||||
if (mTextureIndex != 255)
|
||||
if (mTextureIndex != FACE_DO_NOT_BATCH_TEXTURES)
|
||||
{
|
||||
mDrawablep->setState(LLDrawable::REBUILD_POSITION);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mDrawInfo && mDrawInfo->mTextureList.size() <= 1)
|
||||
if (mDrawInfo && !mDrawInfo->mTextureList.empty())
|
||||
{
|
||||
LL_ERRS() << "Face with no texture index references indexed texture draw info." << LL_ENDL;
|
||||
}
|
||||
|
|
@ -558,7 +558,7 @@ void LLFace::updateCenterAgent()
|
|||
|
||||
void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
|
||||
{
|
||||
if (mDrawablep->getSpatialGroup() == NULL)
|
||||
if (mDrawablep == NULL || mDrawablep->getSpatialGroup() == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -566,7 +566,7 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
|
|||
mDrawablep->getSpatialGroup()->rebuildGeom();
|
||||
mDrawablep->getSpatialGroup()->rebuildMesh();
|
||||
|
||||
if(mDrawablep.isNull() || mVertexBuffer.isNull())
|
||||
if(mVertexBuffer.isNull())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -1639,7 +1639,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
|
||||
mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_VERTEX, mGeomIndex, mGeomCount);
|
||||
|
||||
U8 index = mTextureIndex < 255 ? mTextureIndex : 0;
|
||||
U8 index = mTextureIndex < FACE_DO_NOT_BATCH_TEXTURES ? mTextureIndex : 0;
|
||||
|
||||
S32 val = 0;
|
||||
U8* vp = (U8*) &val;
|
||||
|
|
@ -2188,7 +2188,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
|
|||
|
||||
LLVector4a texIdx;
|
||||
|
||||
S32 index = mTextureIndex < 255 ? mTextureIndex : 0;
|
||||
S32 index = mTextureIndex < FACE_DO_NOT_BATCH_TEXTURES ? mTextureIndex : 0;
|
||||
|
||||
F32 val = 0.f;
|
||||
S32* vp = (S32*) &val;
|
||||
|
|
@ -2798,7 +2798,7 @@ S32 LLFace::renderElements(const U16 *index_array) const
|
|||
|
||||
S32 LLFace::renderIndexed()
|
||||
{
|
||||
if(mDrawablep.isNull() || mDrawPoolp == NULL)
|
||||
if(mDrawablep == NULL || mDrawPoolp == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -2908,7 +2908,7 @@ void LLFace::setDefaultTexture(U32 nChannel, bool fShowDefault) const
|
|||
if ((fUpdated) && (mDrawablep))
|
||||
{
|
||||
gPipeline.markTextured(mDrawablep);
|
||||
const_cast<LLDrawable*>(mDrawablep.get())->updateTexture();
|
||||
mDrawablep->updateTexture();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ class LLDrawInfo;
|
|||
|
||||
const F32 MIN_ALPHA_SIZE = 1024.f;
|
||||
const F32 MIN_TEX_ANIM_SIZE = 512.f;
|
||||
const U8 FACE_DO_NOT_BATCH_TEXTURES = 255;
|
||||
|
||||
class LLFace : public LLTrace::MemTrackableNonVirtual<LLFace, 16>
|
||||
{
|
||||
|
|
@ -286,8 +287,13 @@ private:
|
|||
LLXformMatrix* mXform;
|
||||
|
||||
LLPointer<LLViewerTexture> mTexture[LLRender::NUM_TEXTURE_CHANNELS];
|
||||
|
||||
LLPointer<LLDrawable> mDrawablep;
|
||||
|
||||
// mDrawablep is not supposed to be null, don't use LLPointer because
|
||||
// mDrawablep owns LLFace and LLPointer is a good way to either cause a
|
||||
// memory leak or a 'delete each other' situation if something deletes
|
||||
// drawable wrongly.
|
||||
LLDrawable* mDrawablep;
|
||||
// LLViewerObject technically owns drawable, but also it should be strictly managed
|
||||
LLPointer<LLViewerObject> mVObjp;
|
||||
S32 mTEOffset;
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,6 @@ public:
|
|||
|
||||
void onClickBuy();
|
||||
void onClickCancel();
|
||||
void onClickErrorWeb();
|
||||
};
|
||||
|
||||
LLFloater* LLFloaterBuyCurrency::buildFloater(const LLSD& key)
|
||||
|
|
@ -132,7 +131,6 @@ BOOL LLFloaterBuyCurrencyUI::postBuild()
|
|||
|
||||
getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyCurrencyUI::onClickBuy, this));
|
||||
getChild<LLUICtrl>("cancel_btn")->setCommitCallback( boost::bind(&LLFloaterBuyCurrencyUI::onClickCancel, this));
|
||||
getChild<LLUICtrl>("error_web")->setCommitCallback( boost::bind(&LLFloaterBuyCurrencyUI::onClickErrorWeb, this));
|
||||
|
||||
center();
|
||||
|
||||
|
|
@ -173,7 +171,6 @@ void LLFloaterBuyCurrencyUI::updateUI()
|
|||
|
||||
// hide most widgets - we'll turn them on as needed next
|
||||
getChildView("info_buying")->setVisible(FALSE);
|
||||
getChildView("info_cannot_buy")->setVisible(FALSE);
|
||||
getChildView("info_need_more")->setVisible(FALSE);
|
||||
getChildView("purchase_warning_repurchase")->setVisible(FALSE);
|
||||
getChildView("purchase_warning_notenough")->setVisible(FALSE);
|
||||
|
|
@ -183,32 +180,16 @@ void LLFloaterBuyCurrencyUI::updateUI()
|
|||
if (hasError)
|
||||
{
|
||||
// display an error from the server
|
||||
getChildView("normal_background")->setVisible(FALSE);
|
||||
getChildView("error_background")->setVisible(TRUE);
|
||||
getChildView("info_cannot_buy")->setVisible(TRUE);
|
||||
getChildView("cannot_buy_message")->setVisible(TRUE);
|
||||
getChildView("balance_label")->setVisible(FALSE);
|
||||
getChildView("balance_amount")->setVisible(FALSE);
|
||||
getChildView("buying_label")->setVisible(FALSE);
|
||||
getChildView("buying_amount")->setVisible(FALSE);
|
||||
getChildView("total_label")->setVisible(FALSE);
|
||||
getChildView("total_amount")->setVisible(FALSE);
|
||||
|
||||
LLTextBox* message = getChild<LLTextBox>("cannot_buy_message");
|
||||
if (message)
|
||||
{
|
||||
message->setText(mManager.errorMessage());
|
||||
}
|
||||
|
||||
getChildView("error_web")->setVisible( !mManager.errorURI().empty());
|
||||
LLSD args;
|
||||
args["TITLE"] = getString("info_cannot_buy");
|
||||
args["MESSAGE"] = mManager.errorMessage();
|
||||
LLNotificationsUtil::add("CouldNotBuyCurrency", args);
|
||||
closeFloater();
|
||||
}
|
||||
else
|
||||
{
|
||||
// display the main Buy L$ interface
|
||||
getChildView("normal_background")->setVisible(TRUE);
|
||||
getChildView("error_background")->setVisible(FALSE);
|
||||
getChildView("cannot_buy_message")->setVisible(FALSE);
|
||||
getChildView("error_web")->setVisible(FALSE);
|
||||
|
||||
if (mHasTarget)
|
||||
{
|
||||
|
|
@ -283,14 +264,6 @@ void LLFloaterBuyCurrencyUI::onClickCancel()
|
|||
LLStatusBar::sendMoneyBalanceRequest();
|
||||
}
|
||||
|
||||
void LLFloaterBuyCurrencyUI::onClickErrorWeb()
|
||||
{
|
||||
LLWeb::loadURL(mManager.errorURI());
|
||||
closeFloater();
|
||||
// Update L$ balance
|
||||
LLStatusBar::sendMoneyBalanceRequest();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterBuyCurrency::buyCurrency()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -102,13 +102,7 @@ BOOL LLFloaterConversationPreview::postBuild()
|
|||
file = "chat";
|
||||
}
|
||||
mChatHistoryFileName = file;
|
||||
// <FS:Ansariel> FIRE-30045: Group chat logfile gets appended duplicate suffix if opened in conversation log
|
||||
//if (mIsGroup)
|
||||
if (mIsGroup && !LLStringUtil::endsWith(mChatHistoryFileName, GROUP_CHAT_SUFFIX))
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
mChatHistoryFileName += GROUP_CHAT_SUFFIX;
|
||||
}
|
||||
|
||||
LLStringUtil::format_map_t args;
|
||||
args["[NAME]"] = name;
|
||||
std::string title = getString("Title", args);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
|
||||
#include "llagent.h"
|
||||
#include "llbutton.h"
|
||||
#include "llcheckboxctrl.h"
|
||||
#include "llcombobox.h"
|
||||
#include "lldrawable.h"
|
||||
#include "lldrawpoolavatar.h"
|
||||
|
|
@ -120,17 +121,26 @@ BOOL LLFloaterImagePreview::postBuild()
|
|||
mSculptedPreview->setPreviewTarget(mRawImagep, 2.0f);
|
||||
|
||||
// <FS:Beq> BUG-228331 - lossless_check is misleading don't show it if it won't be used.
|
||||
// if (mRawImagep->getWidth() * mRawImagep->getHeight () <= LL_IMAGE_REZ_LOSSLESS_CUTOFF * LL_IMAGE_REZ_LOSSLESS_CUTOFF)
|
||||
// getChildView("lossless_check")->setEnabled(TRUE);
|
||||
//if (mRawImagep->getWidth() * mRawImagep->getHeight() <= LL_IMAGE_REZ_LOSSLESS_CUTOFF * LL_IMAGE_REZ_LOSSLESS_CUTOFF)
|
||||
//{
|
||||
// // We want "lossless_check" to be unchecked when it is disabled, regardless of
|
||||
// // LosslessJ2CUpload state, so only assign control when enabling checkbox
|
||||
// LLCheckBoxCtrl* check_box = getChild<LLCheckBoxCtrl>("lossless_check");
|
||||
// check_box->setEnabled(TRUE);
|
||||
// check_box->setControlVariable(gSavedSettings.getControl("LosslessJ2CUpload"));
|
||||
//}
|
||||
if (mRawImagep->getWidth() * mRawImagep->getHeight () <= LL_IMAGE_REZ_LOSSLESS_CUTOFF * LL_IMAGE_REZ_LOSSLESS_CUTOFF)
|
||||
{
|
||||
getChildView("lossless_check")->setEnabled(TRUE);
|
||||
getChildView("lossless_check")->setVisible(TRUE);
|
||||
LLCheckBoxCtrl* check_box = getChild<LLCheckBoxCtrl>("lossless_check");
|
||||
check_box->setEnabled(TRUE);
|
||||
check_box->setVisible(TRUE);
|
||||
check_box->setControlVariable(gSavedSettings.getControl("LosslessJ2CUpload"));
|
||||
}
|
||||
else
|
||||
{
|
||||
getChildView("lossless_check")->setEnabled(FALSE);
|
||||
getChildView("lossless_check")->setVisible(FALSE);
|
||||
LLCheckBoxCtrl* check_box = getChild<LLCheckBoxCtrl>("lossless_check");
|
||||
check_box->setEnabled(FALSE);
|
||||
check_box->setVisible(FALSE);
|
||||
}
|
||||
//</FS:Beq>
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,9 @@
|
|||
#include "llworld.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "llviewerobjectlist.h"
|
||||
// [RLVa:KB] - @pay
|
||||
#include "rlvactions.h"
|
||||
// [/RLVa:KB]
|
||||
#include "boost/foreach.hpp"
|
||||
|
||||
|
||||
|
|
@ -462,7 +465,7 @@ void LLFloaterIMContainer::idleUpdate()
|
|||
while (current_participant_model != end_participant_model)
|
||||
{
|
||||
LLConversationItemParticipant* participant_model = dynamic_cast<LLConversationItemParticipant*>(*current_participant_model);
|
||||
participant_model->setModeratorOptionsVisible(is_moderator && participant_model->getUUID() != gAgentID);
|
||||
participant_model->setModeratorOptionsVisible(is_moderator);
|
||||
participant_model->setGroupBanVisible(can_ban && participant_model->getUUID() != gAgentID);
|
||||
|
||||
current_participant_model++;
|
||||
|
|
@ -1426,12 +1429,21 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v
|
|||
{
|
||||
return is_single_select;
|
||||
}
|
||||
|
||||
// Beyond that point, if only the user agent is selected, everything is disabled
|
||||
if (is_single_select && (single_id == gAgentID))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool is_moderator_option = ("can_moderate_voice" == item) || ("can_allow_text_chat" == item) || ("can_mute" == item) || ("can_unmute" == item);
|
||||
|
||||
// Beyond that point, if only the user agent is selected, everything is disabled
|
||||
if (is_single_select && (single_id == gAgentID))
|
||||
{
|
||||
if (is_moderator_option)
|
||||
{
|
||||
return enableModerateContextMenuItem(item, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// If the user agent is selected with others, everything is disabled
|
||||
for (uuid_vec_t::const_iterator id = uuids.begin(); id != uuids.end(); ++id)
|
||||
|
|
@ -1443,11 +1455,20 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v
|
|||
}
|
||||
|
||||
// Handle all other options
|
||||
if (("can_invite" == item) || ("can_chat_history" == item) || ("can_share" == item) || ("can_pay" == item))
|
||||
// if (("can_invite" == item) || ("can_chat_history" == item) || ("can_share" == item) || ("can_pay" == item))
|
||||
// [RLVa:KB] - @pay
|
||||
if (("can_invite" == item) || ("can_chat_history" == item) || ("can_share" == item))
|
||||
// [/RLVa:KB]
|
||||
{
|
||||
// Those menu items are enable only if a single avatar is selected
|
||||
return is_single_select;
|
||||
}
|
||||
// [RLVa:KB] - @pay
|
||||
else if ("can_pay" == item)
|
||||
{
|
||||
return is_single_select && RlvActions::canPayAvatar(single_id);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
else if ("can_block" == item)
|
||||
{
|
||||
return (is_single_select ? LLAvatarActions::canBlock(single_id) : false);
|
||||
|
|
@ -1497,11 +1518,11 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v
|
|||
{
|
||||
return canBanSelectedMember(single_id);
|
||||
}
|
||||
else if (("can_moderate_voice" == item) || ("can_allow_text_chat" == item) || ("can_mute" == item) || ("can_unmute" == item))
|
||||
{
|
||||
// *TODO : get that out of here...
|
||||
return enableModerateContextMenuItem(item);
|
||||
}
|
||||
else if (is_moderator_option)
|
||||
{
|
||||
// *TODO : get that out of here...
|
||||
return enableModerateContextMenuItem(item);
|
||||
}
|
||||
|
||||
// By default, options that not explicitely disabled are enabled
|
||||
return true;
|
||||
|
|
@ -1871,7 +1892,7 @@ LLConversationViewParticipant* LLFloaterIMContainer::createConversationViewParti
|
|||
return LLUICtrlFactory::create<LLConversationViewParticipant>(params);
|
||||
}
|
||||
|
||||
bool LLFloaterIMContainer::enableModerateContextMenuItem(const std::string& userdata)
|
||||
bool LLFloaterIMContainer::enableModerateContextMenuItem(const std::string& userdata, bool is_self)
|
||||
{
|
||||
// only group moderators can perform actions related to this "enable callback"
|
||||
if (!isGroupModerator())
|
||||
|
|
@ -1891,7 +1912,7 @@ bool LLFloaterIMContainer::enableModerateContextMenuItem(const std::string& user
|
|||
{
|
||||
return voice_channel;
|
||||
}
|
||||
else if ("can_mute" == userdata)
|
||||
else if (("can_mute" == userdata) && !is_self)
|
||||
{
|
||||
return voice_channel && !isMuted(getCurSelectedViewModelItem()->getUUID());
|
||||
}
|
||||
|
|
@ -1901,7 +1922,7 @@ bool LLFloaterIMContainer::enableModerateContextMenuItem(const std::string& user
|
|||
}
|
||||
|
||||
// The last invoke is used to check whether the "can_allow_text_chat" will enabled
|
||||
return LLVoiceClient::getInstance()->isParticipantAvatar(getCurSelectedViewModelItem()->getUUID());
|
||||
return LLVoiceClient::getInstance()->isParticipantAvatar(getCurSelectedViewModelItem()->getUUID()) && !is_self;
|
||||
}
|
||||
|
||||
bool LLFloaterIMContainer::isGroupModerator()
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ private:
|
|||
void doToSelectedGroup(const LLSD& userdata);
|
||||
|
||||
static void confirmMuteAllCallback(const LLSD& notification, const LLSD& response);
|
||||
bool enableModerateContextMenuItem(const std::string& userdata);
|
||||
bool enableModerateContextMenuItem(const std::string& userdata, bool is_self = false);
|
||||
LLSpeaker * getSpeakerOfSelectedParticipant(LLSpeakerMgr * speaker_managerp);
|
||||
LLSpeakerMgr * getSpeakerMgrForSelectedParticipant();
|
||||
bool isGroupModerator();
|
||||
|
|
|
|||
|
|
@ -478,10 +478,7 @@ void LLFloaterIMNearbyChat::onChatBoxKeystroke()
|
|||
|
||||
S32 length = raw_text.length();
|
||||
|
||||
// if( (length > 0) && (raw_text[0] != '/') ) // forward slash is used for escape (eg. emote) sequences
|
||||
// [RLVa:KB] - Checked: 2010-03-26 (RLVa-1.2.0b) | Modified: RLVa-1.0.0d
|
||||
if ( (length > 0) && (raw_text[0] != '/') && (!RlvActions::hasBehaviour(RLV_BHVR_REDIRCHAT)) )
|
||||
// [/RLVa:KB]
|
||||
if( (length > 0) && (raw_text[0] != '/') ) // forward slash is used for escape (eg. emote) sequences
|
||||
{
|
||||
gAgent.startTyping();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -322,7 +322,7 @@ void LLFloaterIMSession::sendMsg(const std::string& msg)
|
|||
|
||||
if (fRlvFilter)
|
||||
{
|
||||
utf8_text = RlvStrings::getString(RLV_STRING_BLOCKED_SENDIM);
|
||||
utf8_text = RlvStrings::getString(RlvStringKeys::Blocked::SendIm);
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -184,8 +184,6 @@ void LLFloaterPermsDefault::sendInitialPerms()
|
|||
// </FS:Ansariel>
|
||||
{
|
||||
updateCap();
|
||||
// <FS:Ansariel> Set cap sent = true only on success to allow re-transmit on region change
|
||||
//setCapSent(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -247,7 +245,10 @@ void LLFloaterPermsDefault::updateCapCoro(std::string url)
|
|||
{
|
||||
const std::string& reason = status.toString();
|
||||
// Do not display the same error more than once in a row
|
||||
if (reason != previousReason)
|
||||
// <FS:Ansariel> Getter for CapSent
|
||||
//if ((reason != previousReason) && mCapSent)
|
||||
if ((reason != previousReason) && sCapSent)
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
previousReason = reason;
|
||||
LLSD args;
|
||||
|
|
|
|||
|
|
@ -1632,6 +1632,7 @@ void LLFloaterPreference::onBtnCancel(const LLSD& userdata)
|
|||
if (userdata.asString() == "closeadvanced")
|
||||
{
|
||||
LLFloaterReg::hideInstance("prefs_graphics_advanced");
|
||||
updateMaxComplexity();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -3118,6 +3119,9 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
|
|||
|
||||
// <FS:Ansariel> Clear Cache button actually clears per-account cache items
|
||||
getChildView("clear_webcache")->setEnabled(TRUE);
|
||||
|
||||
getChild<LLUICtrl>("voice_call_friends_only_check")->setEnabled(TRUE);
|
||||
getChild<LLUICtrl>("voice_call_friends_only_check")->setValue(gSavedPerAccountSettings.getBOOL("VoiceCallsFriendsOnly"));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -3308,6 +3312,14 @@ void LLFloaterPreference::updateMaxComplexity()
|
|||
LLAvatarComplexityControls::updateMax(
|
||||
getChild<LLSliderCtrl>("IndirectMaxComplexity"),
|
||||
getChild<LLTextBox>("IndirectMaxComplexityText"));
|
||||
|
||||
LLFloaterPreferenceGraphicsAdvanced* floater_graphics_advanced = LLFloaterReg::findTypedInstance<LLFloaterPreferenceGraphicsAdvanced>("prefs_graphics_advanced");
|
||||
if (floater_graphics_advanced)
|
||||
{
|
||||
LLAvatarComplexityControls::updateMax(
|
||||
floater_graphics_advanced->getChild<LLSliderCtrl>("IndirectMaxComplexity"),
|
||||
floater_graphics_advanced->getChild<LLTextBox>("IndirectMaxComplexityText"));
|
||||
}
|
||||
}
|
||||
|
||||
bool LLFloaterPreference::loadFromFilename(const std::string& filename, std::map<std::string, std::string> &label_map)
|
||||
|
|
@ -3355,6 +3367,14 @@ void LLFloaterPreferenceGraphicsAdvanced::updateMaxComplexity()
|
|||
LLAvatarComplexityControls::updateMax(
|
||||
getChild<LLSliderCtrl>("IndirectMaxComplexity"),
|
||||
getChild<LLTextBox>("IndirectMaxComplexityText"));
|
||||
|
||||
LLFloaterPreference* floater_preferences = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences");
|
||||
if (floater_preferences)
|
||||
{
|
||||
LLAvatarComplexityControls::updateMax(
|
||||
floater_preferences->getChild<LLSliderCtrl>("IndirectMaxComplexity"),
|
||||
floater_preferences->getChild<LLTextBox>("IndirectMaxComplexityText"));
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterPreference::onChangeMaturity()
|
||||
|
|
@ -3976,9 +3996,13 @@ void LLPanelPreference::showMultipleViewersWarning(LLUICtrl* checkbox, const LLS
|
|||
|
||||
void LLPanelPreference::showFriendsOnlyWarning(LLUICtrl* checkbox, const LLSD& value)
|
||||
{
|
||||
if (checkbox && checkbox->getValue())
|
||||
if (checkbox)
|
||||
{
|
||||
LLNotificationsUtil::add("FriendsAndGroupsOnly");
|
||||
gSavedPerAccountSettings.setBOOL("VoiceCallsFriendsOnly", checkbox->getValue().asBoolean());
|
||||
if (checkbox->getValue())
|
||||
{
|
||||
LLNotificationsUtil::add("FriendsAndGroupsOnly");
|
||||
}
|
||||
}
|
||||
}
|
||||
// Manage the custom port alert, fixes Cant Close bug. -WoLf
|
||||
|
|
@ -4149,7 +4173,6 @@ class LLPanelPreferencePrivacy : public LLPanelPreference
|
|||
public:
|
||||
LLPanelPreferencePrivacy()
|
||||
{
|
||||
mAccountIndependentSettings.push_back("VoiceCallsFriendsOnly");
|
||||
mAccountIndependentSettings.push_back("AutoDisengageMic");
|
||||
|
||||
mAutoresponseItem = gSavedPerAccountSettings.getString("FSAutoresponseItemUUID");
|
||||
|
|
@ -4547,6 +4570,7 @@ void LLFloaterPreferenceGraphicsAdvanced::onClickCloseBtn(bool app_quitting)
|
|||
{
|
||||
instance->cancel();
|
||||
}
|
||||
updateMaxComplexity();
|
||||
}
|
||||
|
||||
LLFloaterPreferenceProxy::~LLFloaterPreferenceProxy()
|
||||
|
|
|
|||
|
|
@ -948,7 +948,7 @@ void LLFloaterReporter::takeNewSnapshot(bool refresh)
|
|||
|
||||
// Take a screenshot, but don't draw this floater.
|
||||
setVisible(FALSE);
|
||||
if (!gViewerWindow->rawSnapshot(mImageRaw, IMAGE_WIDTH, IMAGE_HEIGHT, TRUE, FALSE, gSavedSettings.getBOOL("RenderHUDInSnapshot"), TRUE, FALSE))
|
||||
if (!gViewerWindow->rawSnapshot(mImageRaw,IMAGE_WIDTH, IMAGE_HEIGHT, TRUE, FALSE, TRUE /*UI*/, TRUE, FALSE))
|
||||
{
|
||||
LL_WARNS() << "Unable to take screenshot" << LL_ENDL;
|
||||
setVisible(TRUE);
|
||||
|
|
|
|||
|
|
@ -880,7 +880,7 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
|
|||
std::string tooltip("");
|
||||
mTrackedStatus = LLTracker::TRACKING_LOCATION;
|
||||
// [RLVa:KB] - Checked: 2012-02-08 (RLVa-1.4.5) | Added: RLVa-1.4.5
|
||||
LLTracker::trackLocation(pos_global, (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? full_name : RlvStrings::getString(RLV_STRING_HIDDEN).c_str(), tooltip);
|
||||
LLTracker::trackLocation(pos_global, (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) ? full_name : RlvStrings::getString(RlvStringKeys::Hidden::Generic).c_str(), tooltip);
|
||||
// [/RLVa:KB]
|
||||
// LLTracker::trackLocation(pos_global, full_name, tooltip);
|
||||
LLWorldMap::getInstance()->cancelTracking(); // The floater is taking over the tracking
|
||||
|
|
@ -983,7 +983,7 @@ void LLFloaterWorldMap::updateLocation()
|
|||
mSetToUserPosition = FALSE;
|
||||
|
||||
// Fill out the location field
|
||||
getChild<LLUICtrl>("location")->setValue(RlvStrings::getString(RLV_STRING_HIDDEN_REGION));
|
||||
getChild<LLUICtrl>("location")->setValue(RlvStrings::getString(RlvStringKeys::Hidden::Region));
|
||||
|
||||
// update the coordinate display with location of avatar in region
|
||||
updateTeleportCoordsDisplay( agentPos );
|
||||
|
|
@ -1045,7 +1045,7 @@ void LLFloaterWorldMap::updateLocation()
|
|||
{
|
||||
mSLURL = LLSLURL();
|
||||
|
||||
childSetValue("location", RlvStrings::getString(RLV_STRING_HIDDEN_REGION));
|
||||
childSetValue("location", RlvStrings::getString(RlvStringKeys::Hidden::Region));
|
||||
}
|
||||
else if (gotSimName)
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ void LLGroupActions::startCall(const LLUUID& group_id)
|
|||
if (!RlvActions::canStartIM(group_id))
|
||||
{
|
||||
make_ui_sound("UISndInvalidOp");
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString()));
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::StartIm, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString()));
|
||||
return;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -626,7 +626,7 @@ LLUUID LLGroupActions::startIM(const LLUUID& group_id)
|
|||
if (!RlvActions::canStartIM(group_id))
|
||||
{
|
||||
make_ui_sound("UISndInvalidOp");
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTIM, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString()));
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::StartIm, LLSD().with("RECIPIENT", LLSLURL("group", group_id, "about").getSLURLString()));
|
||||
return LLUUID::null;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -969,7 +969,7 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_MEMBERS_REPLY);
|
||||
|
||||
LL_DEBUGS() << "LLGroupMgr::processGroupMembersReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupMembersReply" << LL_ENDL;
|
||||
LLUUID agent_id;
|
||||
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
|
||||
if (gAgent.getID() != agent_id)
|
||||
|
|
@ -1079,7 +1079,7 @@ void LLGroupMgr::processGroupPropertiesReply(LLMessageSystem* msg, void** data)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_PROPERTIES_REPLY);
|
||||
|
||||
LL_DEBUGS() << "LLGroupMgr::processGroupPropertiesReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupPropertiesReply" << LL_ENDL;
|
||||
if (!msg)
|
||||
{
|
||||
LL_ERRS() << "Can't access the messaging system" << LL_ENDL;
|
||||
|
|
@ -1144,17 +1144,16 @@ void LLGroupMgr::processGroupPropertiesReply(LLMessageSystem* msg, void** data)
|
|||
|
||||
group_datap->mGroupPropertiesDataComplete = true;
|
||||
group_datap->mChanged = TRUE;
|
||||
// <FS:Beq> FIRE-19734/BUG-227094 stop persistent notification recovery spam
|
||||
auto request = LLGroupMgr::getInstance()->mPropRequests.find(group_id);
|
||||
if (request != LLGroupMgr::getInstance()->mPropRequests.end())
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests.erase(request);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS() << "GroupPropertyResponse received with no pending request. Response was slow." << LL_ENDL;
|
||||
}
|
||||
//</FS:Beq>
|
||||
|
||||
properties_request_map_t::iterator request = LLGroupMgr::getInstance()->mPropRequests.find(group_id);
|
||||
if (request != LLGroupMgr::getInstance()->mPropRequests.end())
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests.erase(request);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("GrpMgr") << "GroupPropertyResponse received with no pending request. Response was slow." << LL_ENDL;
|
||||
}
|
||||
LLGroupMgr::getInstance()->notifyObservers(GC_PROPERTIES);
|
||||
}
|
||||
|
||||
|
|
@ -1164,7 +1163,7 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_ROLE_DATA_REPLY);
|
||||
|
||||
LL_DEBUGS() << "LLGroupMgr::processGroupRoleDataReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupRoleDataReply" << LL_ENDL;
|
||||
LLUUID agent_id;
|
||||
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
|
||||
if (gAgent.getID() != agent_id)
|
||||
|
|
@ -1225,7 +1224,7 @@ void LLGroupMgr::processGroupRoleDataReply(LLMessageSystem* msg, void** data)
|
|||
|
||||
|
||||
|
||||
LL_DEBUGS() << "Adding role data: " << name << " {" << role_id << "}" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "Adding role data: " << name << " {" << role_id << "}" << LL_ENDL;
|
||||
LLGroupRoleData* rd = new LLGroupRoleData(role_id,name,title,desc,powers,member_count);
|
||||
group_datap->mRoles[role_id] = rd;
|
||||
}
|
||||
|
|
@ -1252,7 +1251,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
|
|||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_PROCESS_GROUP_ROLE_MEMBERS_REPLY);
|
||||
|
||||
LL_DEBUGS() << "LLGroupMgr::processGroupRoleMembersReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupRoleMembersReply" << LL_ENDL;
|
||||
LLUUID agent_id;
|
||||
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
|
||||
if (gAgent.getID() != agent_id)
|
||||
|
|
@ -1313,7 +1312,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
|
|||
|
||||
if (rd && md)
|
||||
{
|
||||
LL_DEBUGS() << "Adding role-member pair: " << role_id << ", " << member_id << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "Adding role-member pair: " << role_id << ", " << member_id << LL_ENDL;
|
||||
rd->addMember(member_id);
|
||||
md->addRole(role_id,rd);
|
||||
}
|
||||
|
|
@ -1365,7 +1364,7 @@ void LLGroupMgr::processGroupRoleMembersReply(LLMessageSystem* msg, void** data)
|
|||
// static
|
||||
void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::processGroupTitlesReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::processGroupTitlesReply" << LL_ENDL;
|
||||
LLUUID agent_id;
|
||||
msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id );
|
||||
if (gAgent.getID() != agent_id)
|
||||
|
|
@ -1398,7 +1397,7 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
|
|||
|
||||
if (!title.mTitle.empty())
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr adding title: " << title.mTitle << ", " << title.mRoleID << ", " << (title.mSelected ? 'Y' : 'N') << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr adding title: " << title.mTitle << ", " << title.mRoleID << ", " << (title.mSelected ? 'Y' : 'N') << LL_ENDL;
|
||||
group_datap->mTitles.push_back(title);
|
||||
}
|
||||
}
|
||||
|
|
@ -1410,7 +1409,7 @@ void LLGroupMgr::processGroupTitlesReply(LLMessageSystem* msg, void** data)
|
|||
// static
|
||||
void LLGroupMgr::processEjectGroupMemberReply(LLMessageSystem* msg, void ** data)
|
||||
{
|
||||
LL_DEBUGS() << "processEjectGroupMemberReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "processEjectGroupMemberReply" << LL_ENDL;
|
||||
LLUUID group_id;
|
||||
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_GroupID, group_id);
|
||||
BOOL success;
|
||||
|
|
@ -1426,7 +1425,7 @@ void LLGroupMgr::processEjectGroupMemberReply(LLMessageSystem* msg, void ** data
|
|||
// static
|
||||
void LLGroupMgr::processJoinGroupReply(LLMessageSystem* msg, void ** data)
|
||||
{
|
||||
LL_DEBUGS() << "processJoinGroupReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "processJoinGroupReply" << LL_ENDL;
|
||||
LLUUID group_id;
|
||||
BOOL success;
|
||||
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_GroupID, group_id);
|
||||
|
|
@ -1446,7 +1445,7 @@ void LLGroupMgr::processJoinGroupReply(LLMessageSystem* msg, void ** data)
|
|||
// static
|
||||
void LLGroupMgr::processLeaveGroupReply(LLMessageSystem* msg, void ** data)
|
||||
{
|
||||
LL_DEBUGS() << "processLeaveGroupReply" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "processLeaveGroupReply" << LL_ENDL;
|
||||
LLUUID group_id;
|
||||
BOOL success;
|
||||
msg->getUUIDFast(_PREHASH_GroupData, _PREHASH_GroupID, group_id);
|
||||
|
|
@ -1530,29 +1529,27 @@ LLGroupMgrGroupData* LLGroupMgr::createGroupData(const LLUUID& id)
|
|||
return group_datap;
|
||||
}
|
||||
|
||||
// <FS:Beq> FIRE-19734/BUG-227094 stop persistent notification recovery spam
|
||||
bool LLGroupMgr::hasPendingPropertyRequest(const LLUUID & id)
|
||||
{
|
||||
auto existing_req = LLGroupMgr::getInstance()->mPropRequests.find(id);
|
||||
if (existing_req != LLGroupMgr::getInstance()->mPropRequests.end())
|
||||
{
|
||||
if (gFrameTime - existing_req->second < MIN_GROUP_PROPERTY_REQUEST_FREQ)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests.erase(existing_req);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
properties_request_map_t::iterator existing_req = LLGroupMgr::getInstance()->mPropRequests.find(id);
|
||||
if (existing_req != LLGroupMgr::getInstance()->mPropRequests.end())
|
||||
{
|
||||
if (gFrameTime - existing_req->second < MIN_GROUP_PROPERTY_REQUEST_FREQ)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests.erase(existing_req);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLGroupMgr::addPendingPropertyRequest(const LLUUID& id)
|
||||
{
|
||||
LLGroupMgr::getInstance()->mPropRequests[id] = gFrameTime;
|
||||
LLGroupMgr::getInstance()->mPropRequests[id] = gFrameTime;
|
||||
}
|
||||
//</FS:Beq>
|
||||
|
||||
void LLGroupMgr::notifyObservers(LLGroupChange gc)
|
||||
{
|
||||
|
|
@ -1636,16 +1633,17 @@ void LLGroupMgr::addGroup(LLGroupMgrGroupData* group_datap)
|
|||
|
||||
void LLGroupMgr::sendGroupPropertiesRequest(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupPropertiesRequest" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupPropertiesRequest" << LL_ENDL;
|
||||
// This will happen when we get the reply
|
||||
//LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
// <FS:Beq> FIRE-19734/BUG-227094 stop persistent notification recovery spam
|
||||
if (LLGroupMgr::getInstance()->hasPendingPropertyRequest(group_id))
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupPropertiesRequest suppressed repeat for " << group_id << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
if (LLGroupMgr::getInstance()->hasPendingPropertyRequest(group_id))
|
||||
{
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupPropertiesRequest suppressed repeat for " << group_id << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
LLGroupMgr::getInstance()->addPendingPropertyRequest(group_id);
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessage("GroupProfileRequest");
|
||||
msg->nextBlock("AgentData");
|
||||
|
|
@ -1654,14 +1652,11 @@ void LLGroupMgr::sendGroupPropertiesRequest(const LLUUID& group_id)
|
|||
msg->nextBlock("GroupData");
|
||||
msg->addUUID("GroupID",group_id);
|
||||
gAgent.sendReliableMessage();
|
||||
// <FS:Beq> FIRE-19734/BUG-227094 stop persistent notification recovery spam
|
||||
LLGroupMgr::getInstance()->addPendingPropertyRequest(group_id);
|
||||
// </FS:Beq>
|
||||
}
|
||||
|
||||
void LLGroupMgr::sendGroupMembersRequest(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupMembersRequest" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupMembersRequest" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
if (group_datap->mMemberRequestID.isNull())
|
||||
{
|
||||
|
|
@ -1683,7 +1678,7 @@ void LLGroupMgr::sendGroupMembersRequest(const LLUUID& group_id)
|
|||
|
||||
void LLGroupMgr::sendGroupRoleDataRequest(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupRoleDataRequest" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupRoleDataRequest" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
if (group_datap->mRoleDataRequestID.isNull())
|
||||
{
|
||||
|
|
@ -1704,7 +1699,7 @@ void LLGroupMgr::sendGroupRoleDataRequest(const LLUUID& group_id)
|
|||
|
||||
void LLGroupMgr::sendGroupRoleMembersRequest(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupRoleMembersRequest" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupRoleMembersRequest" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
|
||||
if (group_datap->mRoleMembersRequestID.isNull())
|
||||
|
|
@ -1714,7 +1709,7 @@ void LLGroupMgr::sendGroupRoleMembersRequest(const LLUUID& group_id)
|
|||
|| !group_datap->isRoleDataComplete())
|
||||
{
|
||||
// *TODO: KLW FIXME: Should we start a member or role data request?
|
||||
LL_INFOS() << " Pending: " << (group_datap->mPendingRoleMemberRequest ? "Y" : "N")
|
||||
LL_INFOS("GrpMgr") << " Pending: " << (group_datap->mPendingRoleMemberRequest ? "Y" : "N")
|
||||
<< " MemberDataComplete: " << (group_datap->mMemberDataComplete ? "Y" : "N")
|
||||
<< " RoleDataComplete: " << (group_datap->mRoleDataComplete ? "Y" : "N") << LL_ENDL;
|
||||
group_datap->mPendingRoleMemberRequest = true;
|
||||
|
|
@ -1738,7 +1733,7 @@ void LLGroupMgr::sendGroupRoleMembersRequest(const LLUUID& group_id)
|
|||
|
||||
void LLGroupMgr::sendGroupTitlesRequest(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupTitlesRequest" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupTitlesRequest" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
|
||||
group_datap->mTitles.clear();
|
||||
|
|
@ -1757,7 +1752,7 @@ void LLGroupMgr::sendGroupTitlesRequest(const LLUUID& group_id)
|
|||
|
||||
void LLGroupMgr::sendGroupTitleUpdate(const LLUUID& group_id, const LLUUID& title_role_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupTitleUpdate" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupTitleUpdate" << LL_ENDL;
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
msg->newMessage("GroupTitleUpdate");
|
||||
|
|
@ -1816,7 +1811,7 @@ void LLGroupMgr::sendCreateGroupRequest(const std::string& name,
|
|||
|
||||
void LLGroupMgr::sendUpdateGroupInfo(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendUpdateGroupInfo" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendUpdateGroupInfo" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
|
||||
LLMessageSystem* msg = gMessageSystem;
|
||||
|
|
@ -1845,7 +1840,7 @@ void LLGroupMgr::sendUpdateGroupInfo(const LLUUID& group_id)
|
|||
|
||||
void LLGroupMgr::sendGroupRoleMemberChanges(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupRoleMemberChanges" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupRoleMemberChanges" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = createGroupData(group_id);
|
||||
|
||||
if (group_datap->mRoleMemberChanges.empty()) return;
|
||||
|
|
@ -2413,7 +2408,7 @@ void LLGroupMgr::processCapGroupMembersRequest(const LLSD& content)
|
|||
|
||||
void LLGroupMgr::sendGroupRoleChanges(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::sendGroupRoleChanges" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::sendGroupRoleChanges" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = getGroupData(group_id);
|
||||
|
||||
if (group_datap && group_datap->pendingRoleChanges())
|
||||
|
|
@ -2428,7 +2423,7 @@ void LLGroupMgr::sendGroupRoleChanges(const LLUUID& group_id)
|
|||
|
||||
void LLGroupMgr::cancelGroupRoleChanges(const LLUUID& group_id)
|
||||
{
|
||||
LL_DEBUGS() << "LLGroupMgr::cancelGroupRoleChanges" << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "LLGroupMgr::cancelGroupRoleChanges" << LL_ENDL;
|
||||
LLGroupMgrGroupData* group_datap = getGroupData(group_id);
|
||||
|
||||
if (group_datap) group_datap->cancelRoleChanges();
|
||||
|
|
@ -2462,7 +2457,7 @@ bool LLGroupMgr::parseRoleActions(const std::string& xml_filename)
|
|||
std::string action_set_name;
|
||||
if (action_set->getAttributeString("name", action_set_name))
|
||||
{
|
||||
LL_DEBUGS() << "Loading action set " << action_set_name << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "Loading action set " << action_set_name << LL_ENDL;
|
||||
role_action_data->mName = action_set_name;
|
||||
}
|
||||
else
|
||||
|
|
@ -2503,7 +2498,7 @@ bool LLGroupMgr::parseRoleActions(const std::string& xml_filename)
|
|||
std::string action_name;
|
||||
if (action->getAttributeString("name", action_name))
|
||||
{
|
||||
LL_DEBUGS() << "Loading action " << action_name << LL_ENDL;
|
||||
LL_DEBUGS("GrpMgr") << "Loading action " << action_name << LL_ENDL;
|
||||
role_action->mName = action_name;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -458,20 +458,19 @@ private:
|
|||
void notifyObserver(const LLUUID& group_id, LLGroupChange gc);
|
||||
void addGroup(LLGroupMgrGroupData* group_datap);
|
||||
LLGroupMgrGroupData* createGroupData(const LLUUID &id);
|
||||
// <FS:Beq> FIRE-19734/BUG-227094 stop persistent notification recovery spam
|
||||
bool hasPendingPropertyRequest(const LLUUID& id);
|
||||
void addPendingPropertyRequest(const LLUUID& id);
|
||||
// </FS:Beq>
|
||||
|
||||
typedef std::multimap<LLUUID,LLGroupMgrObserver*> observer_multimap_t;
|
||||
observer_multimap_t mObservers;
|
||||
|
||||
typedef std::map<LLUUID, LLGroupMgrGroupData*> group_map_t;
|
||||
group_map_t mGroups;
|
||||
// <FS:Beq> FIRE-19734/BUG-227094 stop persistent notification recovery spam
|
||||
|
||||
const U64MicrosecondsImplicit MIN_GROUP_PROPERTY_REQUEST_FREQ = 100000;//100ms between requests should be enough to avoid spamming.
|
||||
typedef std::map<LLUUID, U64MicrosecondsImplicit> properties_request_map_t;
|
||||
properties_request_map_t mPropRequests;
|
||||
// </FS:Beq>
|
||||
|
||||
typedef std::set<LLParticularGroupObserver*> observer_set_t;
|
||||
typedef std::map<LLUUID,observer_set_t> observer_map_t;
|
||||
observer_map_t mParticularObservers;
|
||||
|
|
|
|||
|
|
@ -438,7 +438,8 @@ void LLHUDNameTag::clearString()
|
|||
void LLHUDNameTag::addLine(const std::string &text_utf8,
|
||||
const LLColor4& color,
|
||||
const LLFontGL::StyleFlags style,
|
||||
const LLFontGL* font)
|
||||
const LLFontGL* font,
|
||||
const bool use_ellipses)
|
||||
{
|
||||
LLWString wline = utf8str_to_wstring(text_utf8);
|
||||
if (!wline.empty())
|
||||
|
|
@ -455,18 +456,52 @@ void LLHUDNameTag::addLine(const std::string &text_utf8,
|
|||
tokenizer tokens(wline, sep);
|
||||
tokenizer::iterator iter = tokens.begin();
|
||||
|
||||
while (iter != tokens.end())
|
||||
{
|
||||
U32 line_length = 0;
|
||||
do
|
||||
{
|
||||
F32 max_pixels = HUD_TEXT_MAX_WIDTH;
|
||||
S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
|
||||
LLHUDTextSegment segment(iter->substr(line_length, segment_length), style, color, font);
|
||||
mTextSegments.push_back(segment);
|
||||
line_length += segment_length;
|
||||
}
|
||||
while (line_length != iter->size());
|
||||
const F32 max_pixels = HUD_TEXT_MAX_WIDTH;
|
||||
while (iter != tokens.end())
|
||||
{
|
||||
U32 line_length = 0;
|
||||
if (use_ellipses)
|
||||
{
|
||||
// "QualityAssuranceAssuresQuality1" will end up like "QualityAssuranceAssuresQual..."
|
||||
// "QualityAssuranceAssuresQuality QualityAssuranceAssuresQuality" will end up like "QualityAssuranceAssuresQual..."
|
||||
// "QualityAssurance AssuresQuality1" will end up as "QualityAssurance AssuresQua..." because we are enforcing single line
|
||||
do
|
||||
{
|
||||
S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::ANYWHERE);
|
||||
if (segment_length + line_length < wline.length()) // since we only draw one string, line_length should be 0
|
||||
{
|
||||
// token does does not fit into signle line, need to draw "...".
|
||||
// Use four dots for ellipsis width to generate padding
|
||||
const LLWString dots_pad(utf8str_to_wstring(std::string("....")));
|
||||
S32 elipses_width = font->getWidthF32(dots_pad.c_str());
|
||||
// truncated string length
|
||||
segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels - elipses_width, wline.length(), LLFontGL::ANYWHERE);
|
||||
const LLWString dots(utf8str_to_wstring(std::string("...")));
|
||||
LLHUDTextSegment segment(iter->substr(line_length, segment_length) + dots, style, color, font);
|
||||
mTextSegments.push_back(segment);
|
||||
break; // consider it to be complete
|
||||
}
|
||||
else
|
||||
{
|
||||
// token fits fully into string
|
||||
LLHUDTextSegment segment(iter->substr(line_length, segment_length), style, color, font);
|
||||
mTextSegments.push_back(segment);
|
||||
line_length += segment_length;
|
||||
}
|
||||
} while (line_length != iter->size());
|
||||
}
|
||||
else
|
||||
{
|
||||
// "QualityAssuranceAssuresQuality 1" will be split into two lines "QualityAssuranceAssuresQualit" and "y 1"
|
||||
// "QualityAssurance AssuresQuality 1" will be split into two lines "QualityAssurance" and "AssuresQuality"
|
||||
do
|
||||
{
|
||||
S32 segment_length = font->maxDrawableChars(iter->substr(line_length).c_str(), max_pixels, wline.length(), LLFontGL::WORD_BOUNDARY_IF_POSSIBLE);
|
||||
LLHUDTextSegment segment(iter->substr(line_length, segment_length), style, color, font);
|
||||
mTextSegments.push_back(segment);
|
||||
line_length += segment_length;
|
||||
} while (line_length != iter->size());
|
||||
}
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ public:
|
|||
void clearString();
|
||||
|
||||
// Add text a line at a time, allowing custom formatting
|
||||
void addLine(const std::string &text_utf8, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL);
|
||||
void addLine(const std::string &text_utf8, const LLColor4& color, const LLFontGL::StyleFlags style = LLFontGL::NORMAL, const LLFontGL* font = NULL, const bool use_ellipses = false);
|
||||
|
||||
// For bubble chat, set the part above the chat text
|
||||
void setLabel(const std::string& label_utf8);
|
||||
|
|
|
|||
|
|
@ -522,7 +522,7 @@ static void teleport_region_info_cb(const std::string& slurl, LLSD args, const L
|
|||
{
|
||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
||||
{
|
||||
args["POS_SLURL"] = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
args["POS_SLURL"] = RlvStrings::getString(RlvStringKeys::Hidden::Generic);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -690,7 +690,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
|
|||
|| (dialog == IM_FROM_TASK && LLMuteList::getInstance()->isMuted(session_id));
|
||||
BOOL is_owned_by_me = FALSE;
|
||||
BOOL is_friend = (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL) ? false : true;
|
||||
static LLCachedControl<bool> accept_im_from_only_friend(gSavedSettings, "VoiceCallsFriendsOnly");
|
||||
static LLCachedControl<bool> accept_im_from_only_friend(gSavedPerAccountSettings, "VoiceCallsFriendsOnly");
|
||||
//BOOL is_linden = chat.mSourceType != CHAT_SOURCE_OBJECT &&
|
||||
// LLMuteList::getInstance()->isLinden(name); <:FS:TM> Bear compie fix - is_linden not referenced
|
||||
|
||||
|
|
@ -984,8 +984,8 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
|
|||
if ( (rlv_handler_t::isEnabled()) && (offline != IM_OFFLINE) && (!RlvActions::canReceiveIM(from_id)) && (!LLMuteList::getInstance()->isLinden(original_name) ))
|
||||
{
|
||||
if (!mute_im)
|
||||
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM_REMOTE), session_id);
|
||||
message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM);
|
||||
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RlvStringKeys::Blocked::RecvImRemote), session_id);
|
||||
message = RlvStrings::getString(RlvStringKeys::Blocked::RecvIm);
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
||||
|
|
@ -1550,7 +1550,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
|
|||
{
|
||||
std::string::size_type idxPos = location.find('/');
|
||||
if ( (std::string::npos != idxPos) && (RlvUtil::isNearbyRegion(location.substr(0, idxPos))) )
|
||||
location = RlvStrings::getString(RLV_STRING_HIDDEN_REGION);
|
||||
location = RlvStrings::getString(RlvStringKeys::Hidden::Region);
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -1761,7 +1761,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
|
|||
}
|
||||
|
||||
// <FS:PP> FIRE-1245: Option to block/reject teleport offers
|
||||
//else if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL))
|
||||
//else if (gSavedPerAccountSettings.getBOOL("VoiceCallsFriendsOnly") && (LLAvatarTracker::instance().getBuddyInfo(from_id) == NULL))
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
|
|
@ -1839,7 +1839,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
|
|||
if ( ((IM_LURE_USER == dialog) && (!RlvActions::canAcceptTpOffer(from_id))) ||
|
||||
((IM_TELEPORT_REQUEST == dialog) && (!RlvActions::canAcceptTpRequest(from_id))) )
|
||||
{
|
||||
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RLV_STRING_BLOCKED_TPLUREREQ_REMOTE));
|
||||
RlvUtil::sendBusyMessage(from_id, RlvStrings::getString(RlvStringKeys::Blocked::TpLureRequestRemote));
|
||||
if (is_do_not_disturb)
|
||||
send_do_not_disturb_message(gMessageSystem, from_id);
|
||||
return;
|
||||
|
|
@ -1849,7 +1849,7 @@ void LLIMProcessing::processNewMessage(LLUUID from_id,
|
|||
if ( (!RlvActions::canReceiveIM(from_id)) ||
|
||||
((gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) && (IM_LURE_USER == dialog || IM_TELEPORT_REQUEST == dialog)) )
|
||||
{
|
||||
message = RlvStrings::getString(RLV_STRING_HIDDEN);
|
||||
message = RlvStrings::getString(RlvStringKeys::Hidden::Generic);
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -652,7 +652,7 @@ LLIMModel::LLIMModel()
|
|||
addNewMsgCallback(boost::bind(&FSFloaterIM::newIMCallback, _1));
|
||||
// </FS:Ansariel> [FS communication UI]
|
||||
addNewMsgCallback(boost::bind(&on_new_message, _1));
|
||||
|
||||
LLCallDialogManager::instance();
|
||||
}
|
||||
|
||||
LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const uuid_vec_t& ids, bool voice, bool has_offline_msg)
|
||||
|
|
@ -2975,8 +2975,8 @@ void LLIMMgr::addMessage(
|
|||
bool skip_message = false;
|
||||
bool from_linden = LLMuteList::getInstance()->isLinden(from);
|
||||
// <FS:Ansariel> FIRE-14564: VoiceCallFriendsOnly prevents receiving of
|
||||
//if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && !from_linden)
|
||||
if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && !from_linden &&
|
||||
//if (gSavedPerAccountSettings.getBOOL("VoiceCallsFriendsOnly") && !from_linden)
|
||||
if (gSavedPerAccountSettings.getBOOL("VoiceCallsFriendsOnly") && !from_linden &&
|
||||
(dialog == IM_NOTHING_SPECIAL || (dialog == IM_SESSION_INVITE && !gAgent.isInGroup(new_session_id))) )
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
|
|
@ -3090,7 +3090,7 @@ void LLIMMgr::addMessage(
|
|||
|
||||
// <FS:PP> Configurable IM sounds
|
||||
// //Play sound for new conversations
|
||||
// if (!gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation") == TRUE))
|
||||
// if (!skip_message & !gAgent.isDoNotDisturb() && (gSavedSettings.getBOOL("PlaySoundNewConversation") == TRUE))
|
||||
|
||||
// <FS:PP> Option to automatically ignore and leave all conference (ad-hoc) chats
|
||||
static LLCachedControl<bool> ignoreAdHocSessions(gSavedSettings, "FSIgnoreAdHocSessions");
|
||||
|
|
@ -3563,7 +3563,7 @@ void LLIMMgr::inviteToSession(
|
|||
if (voice_invite)
|
||||
{
|
||||
bool isRejectGroupCall = (gSavedSettings.getBOOL("VoiceCallsRejectGroup") && (notify_box_type == "VoiceInviteGroup"));
|
||||
bool isRejectNonFriendCall = (gSavedSettings.getBOOL("VoiceCallsFriendsOnly") && (LLAvatarTracker::instance().getBuddyInfo(caller_id) == NULL));
|
||||
bool isRejectNonFriendCall = (gSavedPerAccountSettings.getBOOL("VoiceCallsFriendsOnly") && (LLAvatarTracker::instance().getBuddyInfo(caller_id) == NULL));
|
||||
// <FS:PP> FIRE-6522: Options to automatically decline all group and personal voice chat requests
|
||||
// if (isRejectGroupCall || isRejectNonFriendCall || gAgent.isDoNotDisturb())
|
||||
bool isRejectAdHocCall = (gSavedSettings.getBOOL("VoiceCallsRejectAdHoc") && (notify_box_type == "VoiceInviteAdHoc"));
|
||||
|
|
@ -4023,7 +4023,7 @@ void typingNameCallback(const LLUUID& av_id, const LLAvatarName& av_name, const
|
|||
|
||||
BOOL is_muted = LLMuteList::getInstance()->isMuted(av_id, av_name.getCompleteName(), LLMute::flagTextChat);
|
||||
bool is_friend = (LLAvatarTracker::instance().getBuddyInfo(av_id) == NULL) ? false : true;
|
||||
static LLCachedControl<bool> VoiceCallsFriendsOnly(gSavedSettings, "VoiceCallsFriendsOnly");
|
||||
static LLCachedControl<bool> VoiceCallsFriendsOnly(gSavedPerAccountSettings, "VoiceCallsFriendsOnly");
|
||||
|
||||
if (!is_muted && ( (VoiceCallsFriendsOnly && is_friend) || !VoiceCallsFriendsOnly ))
|
||||
{
|
||||
|
|
@ -4365,7 +4365,7 @@ public:
|
|||
}
|
||||
else if (!RlvActions::canReceiveIM(from_id)) // Conference chat: don't block; censor if not an exception
|
||||
{
|
||||
message = RlvStrings::getString(RLV_STRING_BLOCKED_RECVIM);
|
||||
message = RlvStrings::getString(RlvStringKeys::Blocked::RecvIm);
|
||||
}
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@
|
|||
#include "lltoggleablemenu.h"
|
||||
#include "lluictrl.h"
|
||||
#include "llviewerregion.h"
|
||||
#include "rlvactions.h"
|
||||
// </FS:Ansariel>
|
||||
|
||||
class LLFetchAvatarData;
|
||||
|
|
@ -152,6 +153,7 @@ private:
|
|||
bool enableUnmute();
|
||||
bool enableTeleportOffer();
|
||||
bool enableTeleportRequest();
|
||||
bool enablePay();
|
||||
bool godModeEnabled();
|
||||
|
||||
// Is used to determine if "Add friend" option should be enabled in gear menu
|
||||
|
|
@ -257,6 +259,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)
|
|||
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableCall", boost::bind(&LLAvatarActions::canCall));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableTeleportOffer", boost::bind(&LLInspectAvatar::enableTeleportOffer, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnableTeleportRequest", boost::bind(&LLInspectAvatar::enableTeleportRequest, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.Gear.EnablePay", boost::bind(&LLInspectAvatar::enablePay, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.EnableMute", boost::bind(&LLInspectAvatar::enableMute, this));
|
||||
mEnableCallbackRegistrar.add("InspectAvatar.EnableUnmute", boost::bind(&LLInspectAvatar::enableUnmute, this));
|
||||
// </FS:Ansariel>
|
||||
|
|
@ -859,6 +862,11 @@ bool LLInspectAvatar::enableTeleportRequest()
|
|||
return LLAvatarActions::canRequestTeleport(mAvatarID);
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::enablePay()
|
||||
{
|
||||
return RlvActions::canPayAvatar(mAvatarID);
|
||||
}
|
||||
|
||||
bool LLInspectAvatar::godModeEnabled()
|
||||
{
|
||||
return gAgent.isGodlike();
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ void LLInspectRemoteObject::update()
|
|||
getChild<LLUICtrl>("block_btn")->setEnabled(!mObjectID.isNull() && !LLMuteList::getInstance()->isMuted(mObjectID));
|
||||
|
||||
// [RLVa:KB] - Checked: 2010-04-22 (RLVa-1.2.0f) | Added: RLVa-1.2.0f
|
||||
if ( (rlv_handler_t::isEnabled()) && (RlvStrings::getString(RLV_STRING_HIDDEN_REGION) == mSLurl) )
|
||||
if ( (rlv_handler_t::isEnabled()) && (RlvStrings::getString(RlvStringKeys::Hidden::Region) == mSLurl) )
|
||||
{
|
||||
getChild<LLUICtrl>("object_slurl")->setValue(mSLurl);
|
||||
getChild<LLUICtrl>("map_btn")->setEnabled(false);
|
||||
|
|
|
|||
|
|
@ -4105,7 +4105,7 @@ void LLFolderBridge::perform_pasteFromClipboard()
|
|||
// [RLVa:KB] - Checked: RLVa-2.1.0
|
||||
if ( ((item) && (!RlvActions::canPasteInventory(item, dest_folder))) || ((cat) && (!RlvActions::canPasteInventory(cat, dest_folder))) )
|
||||
{
|
||||
RlvActions::notifyBlocked(RLV_STRING_BLOCKED_INVFOLDER);
|
||||
RlvActions::notifyBlocked(RlvStringKeys::Blocked::InvFolder);
|
||||
return;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -4515,12 +4515,6 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
|
|||
items.push_back(std::string("New Body Parts"));
|
||||
items.push_back(std::string("New Settings"));
|
||||
items.push_back(std::string("upload_def"));
|
||||
|
||||
if (!LLEnvironment::instance().isInventoryEnabled())
|
||||
{
|
||||
disabled_items.push_back("New Settings");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
getClipboardEntries(false, items, disabled_items, flags);
|
||||
|
|
|
|||
|
|
@ -1755,7 +1755,10 @@ void LLInventoryModel::idleNotifyObservers()
|
|||
}
|
||||
|
||||
// Call this method when it's time to update everyone on a new state.
|
||||
void LLInventoryModel::notifyObservers()
|
||||
//void LLInventoryModel::notifyObservers()
|
||||
// [SL:KB] - Patch: UI-Notifications | Checked: Catznip-6.5
|
||||
void LLInventoryModel::notifyObservers(const LLUUID& transaction_id)
|
||||
// [/SL:KB]
|
||||
{
|
||||
if (mIsNotifyObservers)
|
||||
{
|
||||
|
|
@ -1767,6 +1770,9 @@ void LLInventoryModel::notifyObservers()
|
|||
}
|
||||
|
||||
mIsNotifyObservers = TRUE;
|
||||
// [SL:KB] - Patch: UI-Notifications | Checked: Catznip-6.5
|
||||
mTransactionId = transaction_id;
|
||||
// [/SL:KB]
|
||||
for (observer_list_t::iterator iter = mObservers.begin();
|
||||
iter != mObservers.end(); )
|
||||
{
|
||||
|
|
@ -1780,6 +1786,9 @@ void LLInventoryModel::notifyObservers()
|
|||
mModifyMask = LLInventoryObserver::NONE;
|
||||
mChangedItemIDs.clear();
|
||||
mAddedItemIDs.clear();
|
||||
// [SL:KB] - Patch: UI-Notifications | Checked: Catznip-6.5
|
||||
mTransactionId.setNull();
|
||||
// [/SL:KB]
|
||||
mIsNotifyObservers = FALSE;
|
||||
}
|
||||
|
||||
|
|
@ -3493,7 +3502,10 @@ void LLInventoryModel::processBulkUpdateInventory(LLMessageSystem* msg, void**)
|
|||
{
|
||||
gInventory.updateItem(*iit);
|
||||
}
|
||||
gInventory.notifyObservers();
|
||||
// [SL:KB] - Patch: UI-Notifications | Checked: Catznip-6.5
|
||||
gInventory.notifyObservers(tid);
|
||||
// [/SL:KB]
|
||||
// gInventory.notifyObservers();
|
||||
|
||||
// The incoming inventory could span more than one BulkInventoryUpdate packet,
|
||||
// so record the transaction ID for this purchase, then wear all clothing
|
||||
|
|
|
|||
|
|
@ -564,7 +564,10 @@ public:
|
|||
void idleNotifyObservers();
|
||||
|
||||
// Call to explicitly update everyone on a new state.
|
||||
void notifyObservers();
|
||||
// [SL:KB] - Patch: UI-Notifications | Checked: Catznip-6.5
|
||||
void notifyObservers(const LLUUID& transaction_id = LLUUID::null);
|
||||
// [/SL:KB]
|
||||
// void notifyObservers();
|
||||
|
||||
// Allows outsiders to tell the inventory if something has
|
||||
// been changed 'under the hood', but outside the control of the
|
||||
|
|
@ -573,6 +576,9 @@ public:
|
|||
|
||||
const changed_items_t& getChangedIDs() const { return mChangedItemIDs; }
|
||||
const changed_items_t& getAddedIDs() const { return mAddedItemIDs; }
|
||||
// [SL:KB] - Patch: UI-Notifications | Checked: Catznip-6.5
|
||||
const LLUUID& getTransactionId() const { return mTransactionId; }
|
||||
// [/SL:KB]
|
||||
protected:
|
||||
// Updates all linked items pointing to this id.
|
||||
void addChangedMaskForLinks(const LLUUID& object_id, U32 mask);
|
||||
|
|
@ -584,6 +590,9 @@ private:
|
|||
U32 mModifyMask;
|
||||
changed_items_t mChangedItemIDs;
|
||||
changed_items_t mAddedItemIDs;
|
||||
// [SL:KB] - Patch: UI-Notifications | Checked: Catznip-6.5
|
||||
LLUUID mTransactionId;
|
||||
// [/SL:KB]
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -1461,7 +1461,7 @@ bool LLInventoryPanel::beginIMSession()
|
|||
if (!fRlvCanStartIM)
|
||||
{
|
||||
make_ui_sound("UISndInvalidOp");
|
||||
RlvUtil::notifyBlocked(RLV_STRING_BLOCKED_STARTCONF);
|
||||
RlvUtil::notifyBlocked(RlvStringKeys::Blocked::StartConference);
|
||||
return true;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
|
|
@ -1966,41 +1966,7 @@ LLInventoryRecentItemsPanel::LLInventoryRecentItemsPanel( const Params& params)
|
|||
|
||||
/************************************************************************/
|
||||
/* Asset Pre-Filtered Inventory Panel related class */
|
||||
/* Exchanges filter's flexibility for speed of generation and */
|
||||
/* improved performance */
|
||||
/************************************************************************/
|
||||
class LLAssetFilteredInventoryPanel : public LLInventoryPanel
|
||||
{
|
||||
public:
|
||||
struct Params
|
||||
: public LLInitParam::Block<Params, LLInventoryPanel::Params>
|
||||
{
|
||||
Mandatory<std::string> filter_asset_type;
|
||||
|
||||
Params() : filter_asset_type("filter_asset_type") {}
|
||||
};
|
||||
|
||||
void initFromParams(const Params& p);
|
||||
protected:
|
||||
LLAssetFilteredInventoryPanel(const Params& p) : LLInventoryPanel(p) {}
|
||||
friend class LLUICtrlFactory;
|
||||
public:
|
||||
~LLAssetFilteredInventoryPanel() {}
|
||||
|
||||
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
||||
EDragAndDropType cargo_type,
|
||||
void* cargo_data,
|
||||
EAcceptance* accept,
|
||||
std::string& tooltip_msg) override;
|
||||
|
||||
protected:
|
||||
/*virtual*/ LLFolderViewItem* buildNewViews(const LLUUID& id) override;
|
||||
/*virtual*/ void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item) override;
|
||||
|
||||
private:
|
||||
LLAssetType::EType mAssetType;
|
||||
};
|
||||
|
||||
|
||||
void LLAssetFilteredInventoryPanel::initFromParams(const Params& p)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -348,4 +348,42 @@ private:
|
|||
bool mViewsInitialized; // Views have been generated
|
||||
};
|
||||
|
||||
/************************************************************************/
|
||||
/* Asset Pre-Filtered Inventory Panel related class */
|
||||
/* Exchanges filter's flexibility for speed of generation and */
|
||||
/* improved performance */
|
||||
/************************************************************************/
|
||||
|
||||
class LLAssetFilteredInventoryPanel : public LLInventoryPanel
|
||||
{
|
||||
public:
|
||||
struct Params
|
||||
: public LLInitParam::Block<Params, LLInventoryPanel::Params>
|
||||
{
|
||||
Mandatory<std::string> filter_asset_type;
|
||||
|
||||
Params() : filter_asset_type("filter_asset_type") {}
|
||||
};
|
||||
|
||||
void initFromParams(const Params& p);
|
||||
protected:
|
||||
LLAssetFilteredInventoryPanel(const Params& p) : LLInventoryPanel(p) {}
|
||||
friend class LLUICtrlFactory;
|
||||
public:
|
||||
~LLAssetFilteredInventoryPanel() {}
|
||||
|
||||
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
||||
EDragAndDropType cargo_type,
|
||||
void* cargo_data,
|
||||
EAcceptance* accept,
|
||||
std::string& tooltip_msg) override;
|
||||
|
||||
protected:
|
||||
/*virtual*/ LLFolderViewItem* buildNewViews(const LLUUID& id) override;
|
||||
/*virtual*/ void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item) override;
|
||||
|
||||
private:
|
||||
LLAssetType::EType mAssetType;
|
||||
};
|
||||
|
||||
#endif // LL_LLINVENTORYPANEL_H
|
||||
|
|
|
|||
|
|
@ -39,6 +39,11 @@
|
|||
// Globals
|
||||
LLLandmarkList gLandmarkList;
|
||||
|
||||
// number is mostly arbitrary, but it should be below DEFAULT_QUEUE_SIZE pool size,
|
||||
// which is 4096, to not overfill the pool if user has more than 4K of landmarks,
|
||||
// and low number helps with not flooding server with requests
|
||||
const S32 MAX_SIMULTANEOUS_REQUESTS = 512;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// LLLandmarkList
|
||||
|
|
@ -69,6 +74,11 @@ LLLandmark* LLLandmarkList::getAsset(const LLUUID& asset_uuid, loaded_callback_t
|
|||
{
|
||||
return NULL;
|
||||
}
|
||||
if ( mWaitList.find(asset_uuid) != mWaitList.end() )
|
||||
{
|
||||
// Landmark is sheduled for download, but not requested yet
|
||||
return NULL;
|
||||
}
|
||||
|
||||
landmark_requested_list_t::iterator iter = mRequestedList.find(asset_uuid);
|
||||
if (iter != mRequestedList.end())
|
||||
|
|
@ -86,6 +96,13 @@ LLLandmark* LLLandmarkList::getAsset(const LLUUID& asset_uuid, loaded_callback_t
|
|||
mLoadedCallbackMap.insert(vt);
|
||||
}
|
||||
|
||||
if (mRequestedList.size() > MAX_SIMULTANEOUS_REQUESTS)
|
||||
{
|
||||
// Postpone download till queu is emptier
|
||||
mWaitList.insert(asset_uuid);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
gAssetStorage->getAssetData(asset_uuid,
|
||||
LLAssetType::AT_LANDMARK,
|
||||
LLLandmarkList::processGetAssetReply,
|
||||
|
|
@ -155,8 +172,22 @@ void LLLandmarkList::processGetAssetReply(
|
|||
}
|
||||
|
||||
gLandmarkList.mBadList.insert(uuid);
|
||||
gLandmarkList.mRequestedList.erase(uuid); //mBadList effectively blocks any load, so no point keeping id in requests
|
||||
// todo: this should clean mLoadedCallbackMap!
|
||||
}
|
||||
|
||||
if (!gLandmarkList.mWaitList.empty())
|
||||
{
|
||||
// start new download from wait list
|
||||
landmark_uuid_list_t::iterator iter = gLandmarkList.mWaitList.begin();
|
||||
LLUUID asset_uuid = *iter;
|
||||
gLandmarkList.mWaitList.erase(iter);
|
||||
gAssetStorage->getAssetData(asset_uuid,
|
||||
LLAssetType::AT_LANDMARK,
|
||||
LLLandmarkList::processGetAssetReply,
|
||||
NULL);
|
||||
gLandmarkList.mRequestedList[asset_uuid] = gFrameTimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLLandmarkList::isAssetInLoadedCallbackMap(const LLUUID& asset_uuid)
|
||||
|
|
|
|||
|
|
@ -70,9 +70,10 @@ protected:
|
|||
typedef std::map<LLUUID, LLLandmark*> landmark_list_t;
|
||||
landmark_list_t mList;
|
||||
|
||||
typedef std::set<LLUUID> landmark_bad_list_t;
|
||||
landmark_bad_list_t mBadList;
|
||||
|
||||
typedef std::set<LLUUID> landmark_uuid_list_t;
|
||||
landmark_uuid_list_t mBadList;
|
||||
landmark_uuid_list_t mWaitList;
|
||||
|
||||
typedef std::map<LLUUID,F32> landmark_requested_list_t;
|
||||
landmark_requested_list_t mRequestedList;
|
||||
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue