summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorTofu Linden <tofu.linden@lindenlab.com>2010-01-29 17:12:57 -0800
committerTofu Linden <tofu.linden@lindenlab.com>2010-01-29 17:12:57 -0800
commit04bfd00a5d8ae7326211d867af7c3f577ff06763 (patch)
treeb0547199d04dc7ccec94b451f05b5ce7e24e3703 /indra
parentaaae230bb135b9e57edb12a7374c711fd7e4adb4 (diff)
parent7e0a3ce7359a01ffa7776d86f279409225c3c2a7 (diff)
merge.
Diffstat (limited to 'indra')
-rw-r--r--indra/cmake/Copy3rdPartyLibs.cmake6
-rw-r--r--indra/llcharacter/llbvhloader.h1
-rw-r--r--indra/llcharacter/lljoint.cpp1
-rw-r--r--indra/llcharacter/llkeyframewalkmotion.cpp12
-rw-r--r--indra/llcharacter/llstatemachine.cpp2
-rw-r--r--indra/llcommon/llchat.h2
-rw-r--r--indra/llinventory/llnotecard.cpp4
-rw-r--r--indra/llmath/llvolume.cpp59
-rw-r--r--indra/llmath/llvolume.h7
-rw-r--r--indra/llmessage/llares.cpp15
-rw-r--r--indra/llmessage/llcachename.cpp2
-rw-r--r--indra/llmessage/llhttpassetstorage.cpp3
-rw-r--r--indra/llmessage/llhttpnode.h2
-rw-r--r--indra/llmessage/llinstantmessage.cpp2
-rw-r--r--indra/llmessage/lliohttpserver.cpp11
-rw-r--r--indra/llmessage/llmessagetemplate.h4
-rw-r--r--indra/llmessage/llxfer.cpp1
-rw-r--r--indra/llmessage/message.cpp4
-rw-r--r--indra/llmessage/partsyspacket.cpp2
-rw-r--r--indra/llprimitive/llmaterialtable.cpp3
-rw-r--r--indra/llprimitive/llmaterialtable.h83
-rw-r--r--indra/llrender/llfontfreetype.cpp10
-rw-r--r--indra/llui/llconsole.cpp4
-rw-r--r--indra/llui/llconsole.h2
-rw-r--r--indra/llui/lldockcontrol.cpp6
-rw-r--r--indra/llui/llflatlistview.cpp35
-rw-r--r--indra/llui/llflatlistview.h2
-rw-r--r--indra/llui/llnotifications.cpp4
-rw-r--r--indra/llui/llnotifications.h4
-rw-r--r--indra/llui/llnotificationsutil.cpp5
-rw-r--r--indra/llui/llnotificationsutil.h2
-rw-r--r--indra/llui/lltextbase.cpp26
-rw-r--r--indra/llui/lltextbase.h7
-rw-r--r--indra/llui/llurlentry.cpp24
-rw-r--r--indra/llui/llurlentry.h14
-rw-r--r--indra/llui/llurlmatch.cpp8
-rw-r--r--indra/llui/llurlmatch.h6
-rw-r--r--indra/llui/llurlregistry.cpp14
-rw-r--r--indra/llui/tests/llurlentry_test.cpp10
-rw-r--r--indra/llui/tests/llurlmatch_test.cpp31
-rw-r--r--indra/llxuixml/llinitparam.cpp3
-rw-r--r--indra/llxuixml/llinitparam.h18
-rw-r--r--indra/newview/CMakeLists.txt14
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llagent.cpp2
-rw-r--r--indra/newview/llappearancemgr.h2
-rw-r--r--indra/newview/llappviewer.cpp11
-rw-r--r--indra/newview/llbottomtray.cpp173
-rw-r--r--indra/newview/llbottomtray.h18
-rw-r--r--indra/newview/llchathistory.cpp37
-rw-r--r--indra/newview/lldrawpoolavatar.h2
-rw-r--r--indra/newview/lldrawpoolsky.cpp8
-rw-r--r--indra/newview/lldrawpoolwater.h1
-rw-r--r--indra/newview/llfavoritesbar.cpp6
-rw-r--r--indra/newview/llfeaturemanager.h10
-rw-r--r--indra/newview/llfloaterabout.cpp6
-rw-r--r--indra/newview/llfloaterbulkpermission.cpp1
-rw-r--r--indra/newview/llfloaterbulkpermission.h2
-rw-r--r--indra/newview/llfloaterchatterbox.cpp4
-rw-r--r--indra/newview/llfloatergesture.cpp12
-rw-r--r--indra/newview/llfloaterpreference.cpp2
-rw-r--r--indra/newview/llfloaterreporter.cpp3
-rw-r--r--indra/newview/llfloatersnapshot.cpp1
-rw-r--r--indra/newview/llfolderviewitem.cpp1
-rw-r--r--indra/newview/llgroupactions.cpp3
-rw-r--r--indra/newview/llgroupiconctrl.cpp1
-rw-r--r--indra/newview/llimfloater.cpp19
-rw-r--r--indra/newview/llimfloater.h1
-rw-r--r--indra/newview/llimview.cpp260
-rw-r--r--indra/newview/llimview.h41
-rw-r--r--indra/newview/llinventorybridge.cpp2
-rw-r--r--indra/newview/llinventoryfilter.cpp1
-rw-r--r--indra/newview/llinventoryfunctions.cpp1
-rw-r--r--indra/newview/llinventorymodel.cpp134
-rw-r--r--indra/newview/llinventorypanel.cpp4
-rw-r--r--indra/newview/llmoveview.cpp3
-rw-r--r--indra/newview/llmutelist.cpp7
-rw-r--r--indra/newview/llnearbychatbar.cpp4
-rw-r--r--indra/newview/llnotificationhandler.h22
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp78
-rw-r--r--indra/newview/llnotificationofferhandler.cpp19
-rw-r--r--indra/newview/llpanelcontents.cpp2
-rw-r--r--indra/newview/llpanelgroupgeneral.cpp8
-rw-r--r--indra/newview/llpanelgroupnotices.cpp2
-rw-r--r--indra/newview/llpanellandmarkinfo.cpp1
-rw-r--r--indra/newview/llpanelpeoplemenus.cpp10
-rw-r--r--indra/newview/llpanelpeoplemenus.h1
-rw-r--r--indra/newview/llpanelteleporthistory.cpp1
-rw-r--r--indra/newview/llpreviewgesture.cpp10
-rw-r--r--indra/newview/llpreviewgesture.h1
-rw-r--r--indra/newview/llsidepanelinventorysubpanel.cpp1
-rw-r--r--indra/newview/lltoastgroupnotifypanel.cpp12
-rw-r--r--indra/newview/lltoastimpanel.cpp88
-rw-r--r--indra/newview/lltoastimpanel.h6
-rw-r--r--indra/newview/lltoastnotifypanel.cpp5
-rw-r--r--indra/newview/lltoolbar.cpp20
-rw-r--r--indra/newview/lltoolpie.cpp40
-rw-r--r--indra/newview/llviewercontrol.cpp31
-rw-r--r--indra/newview/llviewerfloaterreg.cpp9
-rw-r--r--indra/newview/llviewerinventory.cpp218
-rw-r--r--indra/newview/llviewerinventory.h5
-rw-r--r--indra/newview/llviewermenu.cpp2
-rw-r--r--indra/newview/llviewermessage.cpp31
-rw-r--r--indra/newview/llviewerparcelmgr.cpp3
-rw-r--r--indra/newview/llviewerwindow.cpp24
-rw-r--r--indra/newview/llvoicechannel.cpp6
-rw-r--r--indra/newview/llvoiceclient.cpp2
-rw-r--r--indra/newview/llvovolume.cpp7
-rw-r--r--indra/newview/llwearablelist.cpp1
-rw-r--r--indra/newview/skins/default/xui/en/floater_about.xml2
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml10
-rw-r--r--indra/newview/skins/default/xui/en/menu_gesture_gear.xml10
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml9
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml95
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_general.xml7
-rw-r--r--indra/newview/skins/default/xui/en/panel_instant_message.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_pick_info.xml1
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_privacy.xml3
-rw-r--r--indra/newview/tests/lllogininstance_test.cpp4
-rw-r--r--indra/newview/tests/llviewerhelputil_test.cpp2
-rwxr-xr-xindra/newview/viewer_manifest.py11
124 files changed, 1240 insertions, 878 deletions
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index faf9da8b14..c9dc301b8b 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -19,7 +19,7 @@ if(WINDOWS)
set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32")
set(vivox_files
SLVoice.exe
- libsndfile-1.dll
+ libsndfile-1.dll
vivoxplatform.dll
vivoxsdk.dll
ortp.dll
@@ -38,6 +38,8 @@ if(WINDOWS)
libapr-1.dll
libaprutil-1.dll
libapriconv-1.dll
+ libcollada14dom21.dll
+ glod.dll
)
# *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
@@ -48,6 +50,8 @@ if(WINDOWS)
libapr-1.dll
libaprutil-1.dll
libapriconv-1.dll
+ libcollada14dom21.dll
+ glod.dll
)
if(USE_GOOGLE_PERFTOOLS)
diff --git a/indra/llcharacter/llbvhloader.h b/indra/llcharacter/llbvhloader.h
index 85ab035e61..38617bd6d4 100644
--- a/indra/llcharacter/llbvhloader.h
+++ b/indra/llcharacter/llbvhloader.h
@@ -166,6 +166,7 @@ public:
Translation()
{
mIgnore = FALSE;
+ mIgnorePositions = FALSE;
mRelativePositionKey = FALSE;
mRelativeRotationKey = FALSE;
mPriorityModifier = 0;
diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp
index 37afcb7cda..5c49214051 100644
--- a/indra/llcharacter/lljoint.cpp
+++ b/indra/llcharacter/lljoint.cpp
@@ -70,6 +70,7 @@ LLJoint::LLJoint(const std::string &name, LLJoint *parent)
mXform.setScaleChildOffset(TRUE);
mXform.setScale(LLVector3(1.0f, 1.0f, 1.0f));
mDirtyFlags = MATRIX_DIRTY | ROTATION_DIRTY | POSITION_DIRTY;
+ mUpdateXform = FALSE;
mJointNum = 0;
setName(name);
diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp
index b5817e5bde..461309bee9 100644
--- a/indra/llcharacter/llkeyframewalkmotion.cpp
+++ b/indra/llcharacter/llkeyframewalkmotion.cpp
@@ -58,11 +58,15 @@ const F32 MAX_ROLL = 0.6f;
// LLKeyframeWalkMotion()
// Class Constructor
//-----------------------------------------------------------------------------
-LLKeyframeWalkMotion::LLKeyframeWalkMotion(const LLUUID &id) : LLKeyframeMotion(id)
+LLKeyframeWalkMotion::LLKeyframeWalkMotion(const LLUUID &id)
+ : LLKeyframeMotion(id),
+
+ mCharacter(NULL),
+ mCyclePhase(0.0f),
+ mRealTimeLast(0.0f),
+ mAdjTimeLast(0.0f),
+ mDownFoot(0)
{
- mRealTimeLast = 0.0f;
- mAdjTimeLast = 0.0f;
- mCharacter = NULL;
}
diff --git a/indra/llcharacter/llstatemachine.cpp b/indra/llcharacter/llstatemachine.cpp
index 73c6951211..e6fa4d7985 100644
--- a/indra/llcharacter/llstatemachine.cpp
+++ b/indra/llcharacter/llstatemachine.cpp
@@ -54,6 +54,7 @@ bool operator!=(const LLUniqueID &a, const LLUniqueID &b)
//-----------------------------------------------------------------------------
LLStateDiagram::LLStateDiagram()
{
+ mDefaultState = NULL;
mUseDefaultState = FALSE;
}
@@ -305,6 +306,7 @@ LLStateMachine::LLStateMachine()
// we haven't received a starting state yet
mCurrentState = NULL;
mLastState = NULL;
+ mLastTransition = NULL;
mStateDiagram = NULL;
}
diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h
index 46456882ba..a77bd211f3 100644
--- a/indra/llcommon/llchat.h
+++ b/indra/llcommon/llchat.h
@@ -79,6 +79,7 @@ public:
: mText(text),
mFromName(),
mFromID(),
+ mNotifId(),
mSourceType(CHAT_SOURCE_AGENT),
mChatType(CHAT_TYPE_NORMAL),
mAudible(CHAT_AUDIBLE_FULLY),
@@ -94,6 +95,7 @@ public:
std::string mText; // UTF-8 line of text
std::string mFromName; // agent or object name
LLUUID mFromID; // agent id or object id
+ LLUUID mNotifId;
EChatSourceType mSourceType;
EChatType mChatType;
EChatAudible mAudible;
diff --git a/indra/llinventory/llnotecard.cpp b/indra/llinventory/llnotecard.cpp
index 9e7e043761..f6e41eecb4 100644
--- a/indra/llinventory/llnotecard.cpp
+++ b/indra/llinventory/llnotecard.cpp
@@ -35,7 +35,9 @@
#include "llstreamtools.h"
LLNotecard::LLNotecard(S32 max_text)
-: mMaxText(max_text)
+ : mMaxText(max_text),
+ mVersion(0),
+ mEmbeddedVersion(0)
{
}
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index de32070da1..0328c09c9a 100644
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -1694,7 +1694,7 @@ LLVolume::LLVolume(const LLVolumeParams &params, const F32 detail, const BOOL ge
generate();
- if (mParams.getSculptID().isNull() && params.getSculptType() == LL_SCULPT_TYPE_NONE)
+ if (mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE)
{
createVolumeFaces();
}
@@ -2142,6 +2142,59 @@ BOOL LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
(F32) t[1] / 65535.f * tc_range.mV[1] + min_tc.mV[1]);
}
+
+ // modifier flags?
+ BOOL do_mirror = (mParams.getSculptType() & LL_SCULPT_FLAG_MIRROR);
+ BOOL do_invert = (mParams.getSculptType() &LL_SCULPT_FLAG_INVERT);
+
+
+ // translate to actions:
+ BOOL do_reflect_x = FALSE;
+ BOOL do_reverse_triangles = FALSE;
+ BOOL do_invert_normals = FALSE;
+
+ if (do_mirror)
+ {
+ do_reflect_x = TRUE;
+ do_reverse_triangles = !do_reverse_triangles;
+ }
+
+ if (do_invert)
+ {
+ do_invert_normals = TRUE;
+ do_reverse_triangles = !do_reverse_triangles;
+ }
+
+ // now do the work
+
+ if (do_reflect_x)
+ {
+ for (S32 i = 0; i < face.mVertices.size(); i++)
+ {
+ face.mVertices[i].mPosition.mV[VX] *= -1.0f;
+ face.mVertices[i].mNormal.mV[VX] *= -1.0f;
+ }
+ }
+
+ if (do_invert_normals)
+ {
+ for (S32 i = 0; i < face.mVertices.size(); i++)
+ {
+ face.mVertices[i].mNormal *= -1.0f;
+ }
+ }
+
+ if (do_reverse_triangles)
+ {
+ for (U32 j = 0; j < face.mIndices.size(); j += 3)
+ {
+ // swap the 2nd and 3rd index
+ S32 swap = face.mIndices[j+1];
+ face.mIndices[j+1] = face.mIndices[j+2];
+ face.mIndices[j+2] = swap;
+ }
+ }
+
}
}
@@ -3838,7 +3891,7 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
normals.clear();
segments.clear();
- if (mParams.getSculptType() == LL_SCULPT_TYPE_MESH)
+ if ((mParams.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH)
{
return;
}
@@ -5500,7 +5553,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
{
mIndices.resize(num_indices);
- if (volume->getParams().getSculptType() != LL_SCULPT_TYPE_MESH)
+ if ((volume->getParams().getSculptType() & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH)
{
mEdge.resize(num_indices);
}
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
index e3ab648fe3..0bc64f4487 100644
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -183,12 +183,11 @@ const U8 LL_SCULPT_TYPE_SPHERE = 1;
const U8 LL_SCULPT_TYPE_TORUS = 2;
const U8 LL_SCULPT_TYPE_PLANE = 3;
const U8 LL_SCULPT_TYPE_CYLINDER = 4;
-
-const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE | LL_SCULPT_TYPE_CYLINDER;
-
-// need to change this (these) names
const U8 LL_SCULPT_TYPE_MESH = 5;
+const U8 LL_SCULPT_TYPE_MASK = LL_SCULPT_TYPE_SPHERE | LL_SCULPT_TYPE_TORUS | LL_SCULPT_TYPE_PLANE |
+ LL_SCULPT_TYPE_CYLINDER | LL_SCULPT_TYPE_MESH;
+
const U8 LL_SCULPT_FLAG_INVERT = 64;
const U8 LL_SCULPT_FLAG_MIRROR = 128;
diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp
index 104629c157..00e77d20e9 100644
--- a/indra/llmessage/llares.cpp
+++ b/indra/llmessage/llares.cpp
@@ -175,7 +175,8 @@ void LLAres::rewriteURI(const std::string &uri, UriRewriteResponder *resp)
LLQueryResponder::LLQueryResponder()
: LLAres::QueryResponder(),
- mResult(ARES_ENODATA)
+ mResult(ARES_ENODATA),
+ mType(RES_INVALID)
{
}
@@ -641,8 +642,10 @@ LLPtrRecord::LLPtrRecord(const std::string &name, unsigned ttl)
}
LLAddrRecord::LLAddrRecord(LLResType type, const std::string &name,
- unsigned ttl)
- : LLDnsRecord(type, name, ttl)
+ unsigned ttl)
+ : LLDnsRecord(type, name, ttl),
+
+ mSize(0)
{
}
@@ -701,7 +704,11 @@ bail:
}
LLSrvRecord::LLSrvRecord(const std::string &name, unsigned ttl)
- : LLHostRecord(RES_SRV, name, ttl)
+ : LLHostRecord(RES_SRV, name, ttl),
+
+ mPriority(0),
+ mWeight(0),
+ mPort(0)
{
}
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp
index dbec2816c8..9363b3a8d5 100644
--- a/indra/llmessage/llcachename.cpp
+++ b/indra/llmessage/llcachename.cpp
@@ -81,6 +81,8 @@ public:
};
LLCacheNameEntry::LLCacheNameEntry()
+ : mIsGroup(false),
+ mCreateTime(0)
{
}
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
index 49dbdbd56d..1980735bbb 100644
--- a/indra/llmessage/llhttpassetstorage.cpp
+++ b/indra/llmessage/llhttpassetstorage.cpp
@@ -126,8 +126,9 @@ LLHTTPAssetRequest::LLHTTPAssetRequest(LLHTTPAssetStorage *asp,
const std::string& url,
CURLM *curl_multi)
: LLAssetRequest(uuid, type),
- mZInitialized(false)
+ mZInitialized(false)
{
+ memset(&mZStream, 0, sizeof(mZStream)); // we'll initialize this later, but for now zero the whole C-style struct to avoid debug/coverity noise
mAssetStoragep = asp;
mCurlHandle = NULL;
mCurlMultiHandle = curl_multi;
diff --git a/indra/llmessage/llhttpnode.h b/indra/llmessage/llhttpnode.h
index 915aacb7cc..8212f58653 100644
--- a/indra/llmessage/llhttpnode.h
+++ b/indra/llmessage/llhttpnode.h
@@ -305,7 +305,7 @@ protected:
~LLSimpleResponse();
private:
- LLSimpleResponse() {;} // Must be accessed through LLPointer.
+ LLSimpleResponse() : mCode(0) {} // Must be accessed through LLPointer.
};
std::ostream& operator<<(std::ostream& out, const LLSimpleResponse& resp);
diff --git a/indra/llmessage/llinstantmessage.cpp b/indra/llmessage/llinstantmessage.cpp
index 3da41939fa..a9e1ee77ef 100644
--- a/indra/llmessage/llinstantmessage.cpp
+++ b/indra/llmessage/llinstantmessage.cpp
@@ -68,9 +68,11 @@ const S32 IM_TTL = 1;
* LLIMInfo
*/
LLIMInfo::LLIMInfo() :
+ mFromGroup(FALSE),
mParentEstateID(0),
mOffline(0),
mViewerThinksToIsOnline(false),
+ mIMType(IM_NOTHING_SPECIAL),
mTimeStamp(0),
mSource(IM_FROM_SIM),
mTTL(IM_TTL)
diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp
index 97134bd336..27530fbfe1 100644
--- a/indra/llmessage/lliohttpserver.cpp
+++ b/indra/llmessage/lliohttpserver.cpp
@@ -74,7 +74,12 @@ class LLHTTPPipe : public LLIOPipe
{
public:
LLHTTPPipe(const LLHTTPNode& node)
- : mNode(node), mResponse(NULL), mState(STATE_INVOKE), mChainLock(0), mStatusCode(0)
+ : mNode(node),
+ mResponse(NULL),
+ mState(STATE_INVOKE),
+ mChainLock(0),
+ mLockedPump(NULL),
+ mStatusCode(0)
{ }
virtual ~LLHTTPPipe()
{
@@ -111,7 +116,7 @@ private:
void nullPipe();
private:
- Response() {;} // Must be accessed through LLPointer.
+ Response() : mPipe(NULL) {} // Must be accessed through LLPointer.
LLHTTPPipe* mPipe;
};
friend class Response;
@@ -403,7 +408,7 @@ void LLHTTPPipe::unlockChain()
class LLHTTPResponseHeader : public LLIOPipe
{
public:
- LLHTTPResponseHeader() {}
+ LLHTTPResponseHeader() : mCode(0) {}
virtual ~LLHTTPResponseHeader() {}
protected:
diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h
index d7f02ebd85..8abc0aaab2 100644
--- a/indra/llmessage/llmessagetemplate.h
+++ b/indra/llmessage/llmessagetemplate.h
@@ -82,7 +82,7 @@ protected:
class LLMsgBlkData
{
public:
- LLMsgBlkData(const char *name, S32 blocknum) : mOffset(-1), mBlockNumber(blocknum), mTotalSize(-1)
+ LLMsgBlkData(const char *name, S32 blocknum) : mBlockNumber(blocknum), mTotalSize(-1)
{
mName = (char *)name;
}
@@ -108,7 +108,6 @@ public:
temp->addData(data, size, type, data_size);
}
- S32 mOffset;
S32 mBlockNumber;
typedef LLDynamicArrayIndexed<LLMsgVarData, const char *, 8> msg_var_data_map_t;
msg_var_data_map_t mMemberVarData;
@@ -136,7 +135,6 @@ public:
void addDataFast(char *blockname, char *varname, const void *data, S32 size, EMsgVariableType type, S32 data_size = -1);
public:
- S32 mOffset;
typedef std::map<char*, LLMsgBlkData*> msg_blk_data_map_t;
msg_blk_data_map_t mMemberBlocks;
char *mName;
diff --git a/indra/llmessage/llxfer.cpp b/indra/llmessage/llxfer.cpp
index 8404f6519d..7aa833ee32 100644
--- a/indra/llmessage/llxfer.cpp
+++ b/indra/llmessage/llxfer.cpp
@@ -74,6 +74,7 @@ void LLXfer::init (S32 chunk_size)
mCallback = NULL;
mCallbackDataHandle = NULL;
+ mCallbackResult = 0;
mBufferContainsEOF = FALSE;
mBuffer = NULL;
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
index e56d818d65..916006bc2d 100644
--- a/indra/llmessage/message.cpp
+++ b/indra/llmessage/message.cpp
@@ -253,6 +253,8 @@ LLMessageSystem::LLMessageSystem(const std::string& filename, U32 port,
{
init();
+ mSendSize = 0;
+
mSystemVersionMajor = version_major;
mSystemVersionMinor = version_minor;
mSystemVersionPatch = version_patch;
@@ -323,6 +325,8 @@ LLMessageSystem::LLMessageSystem(const std::string& filename, U32 port,
mMaxMessageTime = 1.f;
mTrueReceiveSize = 0;
+
+ mReceiveTime = 0.f;
}
diff --git a/indra/llmessage/partsyspacket.cpp b/indra/llmessage/partsyspacket.cpp
index cfb3572d84..2f9e59accb 100644
--- a/indra/llmessage/partsyspacket.cpp
+++ b/indra/llmessage/partsyspacket.cpp
@@ -144,6 +144,8 @@ LLPartSysCompressedPacket::LLPartSysCompressedPacket()
mData[i] = '\0';
}
+ mNumBytes = 0;
+
gSetInitDataDefaults(&mDefaults);
}
diff --git a/indra/llprimitive/llmaterialtable.cpp b/indra/llprimitive/llmaterialtable.cpp
index 18787c47c5..774a58c8ac 100644
--- a/indra/llprimitive/llmaterialtable.cpp
+++ b/indra/llprimitive/llmaterialtable.cpp
@@ -92,6 +92,9 @@ F32 const LLMaterialTable::DEFAULT_FRICTION = 0.5f;
F32 const LLMaterialTable::DEFAULT_RESTITUTION = 0.4f;
LLMaterialTable::LLMaterialTable()
+ : mCollisionSoundMatrix(NULL),
+ mSlidingSoundMatrix(NULL),
+ mRollingSoundMatrix(NULL)
{
}
diff --git a/indra/llprimitive/llmaterialtable.h b/indra/llprimitive/llmaterialtable.h
index 2c0b046fa7..77f29a8e06 100644
--- a/indra/llprimitive/llmaterialtable.h
+++ b/indra/llprimitive/llmaterialtable.h
@@ -38,6 +38,8 @@
#include <list>
+class LLMaterialInfo;
+
const U32 LLMATERIAL_INFO_NAME_LENGTH = 256;
// We've moved toward more reasonable mass values for the Havok4 engine.
@@ -64,45 +66,6 @@ const F32 LEGACY_DEFAULT_OBJECT_DENSITY = 10.0f;
const F32 DEFAULT_AVATAR_DENSITY = 445.3f; // was 444.24f;
-class LLMaterialInfo
-{
-public:
- U8 mMCode;
- std::string mName;
- LLUUID mDefaultTextureID;
- LLUUID mShatterSoundID;
- F32 mDensity; // kg/m^3
- F32 mFriction;
- F32 mRestitution;
-
- // damage and energy constants
- F32 mHPModifier; // modifier on mass based HP total
- F32 mDamageModifier; // modifier on KE based damage
- F32 mEPModifier; // modifier on mass based EP total
-
- LLMaterialInfo(U8 mcode, const std::string& name, const LLUUID &uuid)
- {
- init(mcode,name,uuid);
- };
-
- void init(U8 mcode, const std::string& name, const LLUUID &uuid)
- {
- mDensity = 1000.f; // default to 1000.0 (water)
- mHPModifier = 1.f;
- mDamageModifier = 1.f;
- mEPModifier = 1.f;
-
- mMCode = mcode;
- mName = name;
- mDefaultTextureID = uuid;
- };
-
- ~LLMaterialInfo()
- {
- };
-
-};
-
class LLMaterialTable
{
public:
@@ -185,5 +148,47 @@ public:
static LLMaterialTable basic;
};
+
+class LLMaterialInfo
+{
+public:
+ U8 mMCode;
+ std::string mName;
+ LLUUID mDefaultTextureID;
+ LLUUID mShatterSoundID;
+ F32 mDensity; // kg/m^3
+ F32 mFriction;
+ F32 mRestitution;
+
+ // damage and energy constants
+ F32 mHPModifier; // modifier on mass based HP total
+ F32 mDamageModifier; // modifier on KE based damage
+ F32 mEPModifier; // modifier on mass based EP total
+
+ LLMaterialInfo(U8 mcode, const std::string& name, const LLUUID &uuid)
+ {
+ init(mcode,name,uuid);
+ };
+
+ void init(U8 mcode, const std::string& name, const LLUUID &uuid)
+ {
+ mDensity = 1000.f; // default to 1000.0 (water)
+ mFriction = LLMaterialTable::DEFAULT_FRICTION;
+ mRestitution = LLMaterialTable::DEFAULT_RESTITUTION;
+ mHPModifier = 1.f;
+ mDamageModifier = 1.f;
+ mEPModifier = 1.f;
+
+ mMCode = mcode;
+ mName = name;
+ mDefaultTextureID = uuid;
+ };
+
+ ~LLMaterialInfo()
+ {
+ };
+
+};
+
#endif
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index 786dc64452..59e7d890f4 100644
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -91,14 +91,15 @@ LLFontManager::~LLFontManager()
LLFontGlyphInfo::LLFontGlyphInfo(U32 index)
: mGlyphIndex(index),
+ mWidth(0), // In pixels
+ mHeight(0), // In pixels
+ mXAdvance(0.f), // In pixels
+ mYAdvance(0.f), // In pixels
mXBitmapOffset(0), // Offset to the origin in the bitmap
mYBitmapOffset(0), // Offset to the origin in the bitmap
mXBearing(0), // Distance from baseline to left in pixels
mYBearing(0), // Distance from baseline to top in pixels
- mWidth(0), // In pixels
- mHeight(0), // In pixels
- mXAdvance(0.f), // In pixels
- mYAdvance(0.f) // In pixels
+ mBitmapNum(0) // Which bitmap in the bitmap cache contains this glyph
{
}
@@ -112,6 +113,7 @@ LLFontFreetype::LLFontFreetype()
mFTFace(NULL),
mRenderGlyphCount(0),
mAddGlyphCount(0),
+ mStyle(0),
mPointSize(0)
{
}
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index 59499f987b..0237c80efa 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -66,7 +66,9 @@ LLConsole::LLConsole(const LLConsole::Params& p)
: LLUICtrl(p),
LLFixedBuffer(p.max_lines),
mLinePersistTime(p.persist_time), // seconds
- mFont(p.font)
+ mFont(p.font),
+ mConsoleWidth(0),
+ mConsoleHeight(0)
{
if (p.font_size_index.isProvided())
{
diff --git a/indra/llui/llconsole.h b/indra/llui/llconsole.h
index 5800a82922..4719950f28 100644
--- a/indra/llui/llconsole.h
+++ b/indra/llui/llconsole.h
@@ -150,8 +150,6 @@ private:
F32 mLinePersistTime; // Age at which to stop drawing.
F32 mFadeTime; // Age at which to start fading
const LLFontGL* mFont;
- S32 mLastBoxHeight;
- S32 mLastBoxWidth;
S32 mConsoleWidth;
S32 mConsoleHeight;
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index 0d8e54aa48..d836a5f4cd 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -37,7 +37,11 @@
LLDockControl::LLDockControl(LLView* dockWidget, LLFloater* dockableFloater,
const LLUIImagePtr& dockTongue, DocAt dockAt, get_allowed_rect_callback_t get_allowed_rect_callback) :
- mDockWidget(dockWidget), mDockableFloater(dockableFloater), mDockTongue(dockTongue)
+ mDockWidget(dockWidget),
+ mDockableFloater(dockableFloater),
+ mDockTongue(dockTongue),
+ mDockTongueX(0),
+ mDockTongueY(0)
{
mDockAt = dockAt;
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
index 3694ecd4f4..92993650a7 100644
--- a/indra/llui/llflatlistview.cpp
+++ b/indra/llui/llflatlistview.cpp
@@ -289,8 +289,8 @@ void LLFlatListView::resetSelection(bool no_commit_on_deselection /*= false*/)
onCommit();
}
- // Stretch selected items rect to ensure it won't be clipped
- mSelectedItemsBorder->setRect(getSelectedItemsRect().stretch(-1));
+ // Stretch selected item rect to ensure it won't be clipped
+ mSelectedItemsBorder->setRect(getLastSelectedItemRect().stretch(-1));
}
void LLFlatListView::setNoItemsCommentText(const std::string& comment_text)
@@ -393,7 +393,7 @@ LLFlatListView::LLFlatListView(const LLFlatListView::Params& p)
LLViewBorder::Params params;
params.name("scroll border");
- params.rect(getSelectedItemsRect());
+ params.rect(getLastSelectedItemRect());
params.visible(false);
params.bevel_style(LLViewBorder::BEVEL_IN);
mSelectedItemsBorder = LLUICtrlFactory::create<LLViewBorder> (params);
@@ -480,8 +480,8 @@ void LLFlatListView::rearrangeItems()
item_new_top -= (rc.getHeight() + mItemPad);
}
- // Stretch selected items rect to ensure it won't be clipped
- mSelectedItemsBorder->setRect(getSelectedItemsRect().stretch(-1));
+ // Stretch selected item rect to ensure it won't be clipped
+ mSelectedItemsBorder->setRect(getLastSelectedItemRect().stretch(-1));
}
void LLFlatListView::onItemMouseClick(item_pair_t* item_pair, MASK mask)
@@ -664,8 +664,8 @@ bool LLFlatListView::selectItemPair(item_pair_t* item_pair, bool select)
onCommit();
}
- // Stretch selected items rect to ensure it won't be clipped
- mSelectedItemsBorder->setRect(getSelectedItemsRect().stretch(-1));
+ // Stretch selected item rect to ensure it won't be clipped
+ mSelectedItemsBorder->setRect(getLastSelectedItemRect().stretch(-1));
return true;
}
@@ -680,23 +680,6 @@ LLRect LLFlatListView::getLastSelectedItemRect()
return mSelectedItemPairs.back()->first->getRect();
}
-LLRect LLFlatListView::getSelectedItemsRect()
-{
- if (!mSelectedItemPairs.size())
- {
- return LLRect::null;
- }
- LLRect rc = getLastSelectedItemRect();
- for ( pairs_const_iterator_t
- it = mSelectedItemPairs.begin(),
- it_end = mSelectedItemPairs.end();
- it != it_end; ++it )
- {
- rc.unionWith((*it)->first->getRect());
- }
- return rc;
-}
-
void LLFlatListView::selectFirstItem ()
{
selectItemPair(mItemPairs.front(), true);
@@ -819,8 +802,8 @@ bool LLFlatListView::selectAll()
onCommit();
}
- // Stretch selected items rect to ensure it won't be clipped
- mSelectedItemsBorder->setRect(getSelectedItemsRect().stretch(-1));
+ // Stretch selected item rect to ensure it won't be clipped
+ mSelectedItemsBorder->setRect(getLastSelectedItemRect().stretch(-1));
return true;
}
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
index 5999e79f61..949a731507 100644
--- a/indra/llui/llflatlistview.h
+++ b/indra/llui/llflatlistview.h
@@ -368,8 +368,6 @@ protected:
LLRect getLastSelectedItemRect();
- LLRect getSelectedItemsRect();
-
void ensureSelectedVisible();
private:
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index a67094b8ce..5816cef6af 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -283,6 +283,7 @@ LLNotificationForm::LLNotificationForm(const std::string& name, const LLXMLNodeP
}
LLNotificationForm::LLNotificationForm(const LLSD& sd)
+ : mIgnore(IGNORE_NO)
{
if (sd.isArray())
{
@@ -384,7 +385,8 @@ LLNotificationTemplate::LLNotificationTemplate() :
mExpireSeconds(0),
mExpireOption(-1),
mURLOption(-1),
- mURLOpenExternally(-1),
+ mURLOpenExternally(-1),
+ mPersist(false),
mUnique(false),
mPriority(NOTIFICATION_PRIORITY_NORMAL)
{
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index aeb4cebf1b..d55e0f4043 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -371,7 +371,7 @@ private:
// this is just for making it easy to look things up in a set organized by UUID -- DON'T USE IT
// for anything real!
- LLNotification(LLUUID uuid) : mId(uuid) {}
+ LLNotification(LLUUID uuid) : mId(uuid), mCancelled(false), mRespondedTo(false), mIgnored(false), mTemporaryResponder(false) {}
void cancel();
@@ -621,7 +621,7 @@ namespace LLNotificationComparators
struct orderBy
{
typedef boost::function<T (LLNotificationPtr)> field_t;
- orderBy(field_t field, EDirection = ORDER_INCREASING) : mField(field) {}
+ orderBy(field_t field, EDirection direction = ORDER_INCREASING) : mField(field), mDirection(direction) {}
bool operator()(LLNotificationPtr lhs, LLNotificationPtr rhs)
{
if (mDirection == ORDER_DECREASING)
diff --git a/indra/llui/llnotificationsutil.cpp b/indra/llui/llnotificationsutil.cpp
index f343d27cb4..54bdb4bd66 100644
--- a/indra/llui/llnotificationsutil.cpp
+++ b/indra/llui/llnotificationsutil.cpp
@@ -94,3 +94,8 @@ void LLNotificationsUtil::cancel(LLNotificationPtr pNotif)
{
LLNotifications::instance().cancel(pNotif);
}
+
+LLNotificationPtr LLNotificationsUtil::find(LLUUID uuid)
+{
+ return LLNotifications::instance().find(uuid);
+}
diff --git a/indra/llui/llnotificationsutil.h b/indra/llui/llnotificationsutil.h
index d552fa915b..338204924a 100644
--- a/indra/llui/llnotificationsutil.h
+++ b/indra/llui/llnotificationsutil.h
@@ -65,6 +65,8 @@ namespace LLNotificationsUtil
S32 getSelectedOption(const LLSD& notification, const LLSD& response);
void cancel(LLNotificationPtr pNotif);
+
+ LLNotificationPtr find(LLUUID uuid);
}
#endif
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 8abbc833e5..978bd317e2 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1512,25 +1512,6 @@ void LLTextBase::setText(const LLStringExplicit &utf8str, const LLStyle::Params&
onValueChange(0, getLength());
}
-void LLTextBase::addBlackListUrl(const std::string &url)
-{
- mBlackListUrls.push_back(url);
-}
-
-bool LLTextBase::isBlackListUrl(const std::string &url) const
-{
- std::vector<std::string>::const_iterator it;
- for (it = mBlackListUrls.begin(); it != mBlackListUrls.end(); ++it)
- {
- const std::string &blacklist_url = *it;
- if (url.find(blacklist_url) != std::string::npos)
- {
- return true;
- }
- }
- return false;
-}
-
//virtual
std::string LLTextBase::getText() const
{
@@ -1606,11 +1587,10 @@ void LLTextBase::appendText(const std::string &new_text, bool prepend_newline, c
}
}
- // output the styled Url (unless we've been asked to suppress it)
- if (isBlackListUrl(match.getUrl()))
+ // output the styled Url (unless we've been asked to suppress hyperlinking)
+ if (match.isLinkDisabled())
{
- std::string orig_url = text.substr(start, end-start);
- appendAndHighlightText(orig_url, prepend_newline, part, style_params);
+ appendAndHighlightText(match.getLabel(), prepend_newline, part, style_params);
}
else
{
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index e1c6cc36ab..dc3671eab1 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -187,9 +187,6 @@ public:
const LLFontGL* getDefaultFont() const { return mDefaultFont; }
LLStyle::Params getDefaultStyle();
- // tell the text object to suppress auto highlighting of a specific URL
- void addBlackListUrl(const std::string &url);
-
public:
// Fired when a URL link is clicked
commit_signal_t mURLClickSignal;
@@ -312,7 +309,6 @@ protected:
void updateRects();
void needsScroll() { mScrollNeeded = TRUE; }
void replaceUrlLabel(const std::string &url, const std::string &label);
- bool isBlackListUrl(const std::string &url) const;
protected:
// text segmentation and flow
@@ -364,9 +360,6 @@ protected:
LLView* mDocumentView;
class LLScrollContainer* mScroller;
- // list of URLs to suppress from automatic hyperlinking
- std::vector<std::string> mBlackListUrls;
-
// transient state
bool mReflowNeeded; // need to reflow text because of change to text contents or display region
bool mScrollNeeded; // need to change scroll region because of change to cursor position
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 4927e57a52..58148ad2aa 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -39,8 +39,9 @@
#include "lltrans.h"
#include "lluicolortable.h"
-LLUrlEntryBase::LLUrlEntryBase()
-: mColor(LLUIColorTable::instance().getColor("HTMLLinkColor"))
+LLUrlEntryBase::LLUrlEntryBase() :
+ mColor(LLUIColorTable::instance().getColor("HTMLLinkColor")),
+ mDisabledLink(false)
{
}
@@ -204,7 +205,7 @@ LLUrlEntryHTTPNoProtocol::LLUrlEntryHTTPNoProtocol()
mPattern = boost::regex("("
"\\bwww\\.\\S+\\.\\S+" // i.e. www.FOO.BAR
"|" // or
- "(?<!@)\\b[^[:space:]:@/]+\\.(?:com|net|edu|org)([/:]\\S*)?\\b" // i.e. FOO.net
+ "(?<!@)\\b[^[:space:]:@/>]+\\.(?:com|net|edu|org)([/:][^[:space:]<]*)?\\b" // i.e. FOO.net
")",
boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_http.xml";
@@ -641,3 +642,20 @@ std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const
// return the part of the Url after secondlife:///app/worldmap/ part
return ::getStringAfterToken(url, "app/worldmap/");
}
+
+//
+// LLUrlEntryNoLink lets us turn of URL detection with <nolink>...</nolink> tags
+//
+LLUrlEntryNoLink::LLUrlEntryNoLink()
+{
+ mPattern = boost::regex("<nolink>[^[:space:]<]+</nolink>",
+ boost::regex::perl|boost::regex::icase);
+ mDisabledLink = true;
+}
+
+std::string LLUrlEntryNoLink::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
+{
+ // return the text between the <nolink> and </nolink> tags
+ return url.substr(8, url.size()-8-9);
+}
+
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
index 4adffde99c..94455ac247 100644
--- a/indra/llui/llurlentry.h
+++ b/indra/llui/llurlentry.h
@@ -91,6 +91,9 @@ public:
/// Return the name of a SL location described by this Url, if any
virtual std::string getLocation(const std::string &url) const { return ""; }
+ /// is this a match for a URL that should not be hyperlinked?
+ bool isLinkDisabled() const { return mDisabledLink; }
+
protected:
std::string getIDStringFromUrl(const std::string &url) const;
std::string escapeUrl(const std::string &url) const;
@@ -111,6 +114,7 @@ protected:
std::string mTooltip;
LLUIColor mColor;
std::multimap<std::string, LLUrlEntryObserver> mObservers;
+ bool mDisabledLink;
};
///
@@ -267,4 +271,14 @@ public:
/*virtual*/ std::string getLocation(const std::string &url) const;
};
+///
+/// LLUrlEntryNoLink lets us turn of URL detection with <nolink>...</nolink> tags
+///
+class LLUrlEntryNoLink : public LLUrlEntryBase
+{
+public:
+ LLUrlEntryNoLink();
+ /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
+};
+
#endif
diff --git a/indra/llui/llurlmatch.cpp b/indra/llui/llurlmatch.cpp
index 3b47145a22..72a199c220 100644
--- a/indra/llui/llurlmatch.cpp
+++ b/indra/llui/llurlmatch.cpp
@@ -41,14 +41,17 @@ LLUrlMatch::LLUrlMatch() :
mLabel(""),
mTooltip(""),
mIcon(""),
- mMenuName("")
+ mMenuName(""),
+ mLocation(""),
+ mDisabledLink(false)
{
}
void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,
const std::string &label, const std::string &tooltip,
const std::string &icon, const LLUIColor& color,
- const std::string &menu, const std::string &location)
+ const std::string &menu, const std::string &location,
+ bool disabled_link)
{
mStart = start;
mEnd = end;
@@ -59,4 +62,5 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url,
mColor = color;
mMenuName = menu;
mLocation = location;
+ mDisabledLink = disabled_link;
}
diff --git a/indra/llui/llurlmatch.h b/indra/llui/llurlmatch.h
index 7f5767923a..e86762548b 100644
--- a/indra/llui/llurlmatch.h
+++ b/indra/llui/llurlmatch.h
@@ -83,11 +83,14 @@ public:
/// return the SL location that this Url describes, or "" if none.
std::string getLocation() const { return mLocation; }
+ /// is this a match for a URL that should not be hyperlinked?
+ bool isLinkDisabled() const { return mDisabledLink; }
+
/// Change the contents of this match object (used by LLUrlRegistry)
void setValues(U32 start, U32 end, const std::string &url, const std::string &label,
const std::string &tooltip, const std::string &icon,
const LLUIColor& color, const std::string &menu,
- const std::string &location);
+ const std::string &location, bool disabled_link);
private:
U32 mStart;
@@ -99,6 +102,7 @@ private:
std::string mMenuName;
std::string mLocation;
LLUIColor mColor;
+ bool mDisabledLink;
};
#endif
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
index ad5c0911f8..55eb8950e9 100644
--- a/indra/llui/llurlregistry.cpp
+++ b/indra/llui/llurlregistry.cpp
@@ -44,6 +44,7 @@ void LLUrlRegistryNullCallback(const std::string &url, const std::string &label)
LLUrlRegistry::LLUrlRegistry()
{
// Urls are matched in the order that they were registered
+ registerUrl(new LLUrlEntryNoLink());
registerUrl(new LLUrlEntrySLURL());
registerUrl(new LLUrlEntryHTTP());
registerUrl(new LLUrlEntryHTTPLabel());
@@ -176,7 +177,8 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
match_entry->getIcon(),
match_entry->getColor(),
match_entry->getMenuName(),
- match_entry->getLocation(url));
+ match_entry->getLocation(url),
+ match_entry->isLinkDisabled());
return true;
}
@@ -204,9 +206,13 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr
S32 end = start + wurl.size() - 1;
match.setValues(start, end, match.getUrl(),
- match.getLabel(), match.getTooltip(),
- match.getIcon(), match.getColor(),
- match.getMenuName(), match.getLocation());
+ match.getLabel(),
+ match.getTooltip(),
+ match.getIcon(),
+ match.getColor(),
+ match.getMenuName(),
+ match.getLocation(),
+ match.isLinkDisabled());
return true;
}
return false;
diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp
index 80be8fcbf7..bc97cf3df2 100644
--- a/indra/llui/tests/llurlentry_test.cpp
+++ b/indra/llui/tests/llurlentry_test.cpp
@@ -33,7 +33,7 @@ LLUIColor LLUIColorTable::getColor(const std::string& name, const LLColor4& defa
return LLUIColor();
}
-LLUIColor::LLUIColor() {}
+LLUIColor::LLUIColor() : mColorPtr(NULL) {}
namespace tut
{
@@ -610,5 +610,13 @@ namespace tut
testRegex("invalid .net URL", r,
"foo.netty",
"");
+
+ testRegex("XML tags around URL [1]", r,
+ "<foo>secondlife.com</foo>",
+ "secondlife.com");
+
+ testRegex("XML tags around URL [2]", r,
+ "<foo>secondlife.com/status?bar=1</foo>",
+ "secondlife.com/status?bar=1");
}
}
diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
index e8cf135346..24a32de268 100644
--- a/indra/llui/tests/llurlmatch_test.cpp
+++ b/indra/llui/tests/llurlmatch_test.cpp
@@ -25,6 +25,7 @@
// link seam
LLUIColor::LLUIColor()
+ : mColorPtr(NULL)
{}
namespace tut
@@ -53,7 +54,7 @@ namespace tut
LLUrlMatch match;
ensure("empty()", match.empty());
- match.setValues(0, 1, "http://secondlife.com", "Second Life", "", "", LLUIColor(), "", "");
+ match.setValues(0, 1, "http://secondlife.com", "Second Life", "", "", LLUIColor(), "", "", false);
ensure("! empty()", ! match.empty());
}
@@ -66,7 +67,7 @@ namespace tut
LLUrlMatch match;
ensure_equals("getStart() == 0", match.getStart(), 0);
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure_equals("getStart() == 10", match.getStart(), 10);
}
@@ -79,7 +80,7 @@ namespace tut
LLUrlMatch match;
ensure_equals("getEnd() == 0", match.getEnd(), 0);
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure_equals("getEnd() == 20", match.getEnd(), 20);
}
@@ -92,10 +93,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getUrl() == ''", match.getUrl(), "");
- match.setValues(10, 20, "http://slurl.com/", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "http://slurl.com/", "", "", "", LLUIColor(), "", "", false);
ensure_equals("getUrl() == 'http://slurl.com/'", match.getUrl(), "http://slurl.com/");
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure_equals("getUrl() == '' (2)", match.getUrl(), "");
}
@@ -108,10 +109,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getLabel() == ''", match.getLabel(), "");
- match.setValues(10, 20, "", "Label", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "Label", "", "", LLUIColor(), "", "", false);
ensure_equals("getLabel() == 'Label'", match.getLabel(), "Label");
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure_equals("getLabel() == '' (2)", match.getLabel(), "");
}
@@ -124,10 +125,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getTooltip() == ''", match.getTooltip(), "");
- match.setValues(10, 20, "", "", "Info", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "Info", "", LLUIColor(), "", "", false);
ensure_equals("getTooltip() == 'Info'", match.getTooltip(), "Info");
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure_equals("getTooltip() == '' (2)", match.getTooltip(), "");
}
@@ -140,10 +141,10 @@ namespace tut
LLUrlMatch match;
ensure_equals("getIcon() == ''", match.getIcon(), "");
- match.setValues(10, 20, "", "", "", "Icon", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "Icon", LLUIColor(), "", "", false);
ensure_equals("getIcon() == 'Icon'", match.getIcon(), "Icon");
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure_equals("getIcon() == '' (2)", match.getIcon(), "");
}
@@ -156,10 +157,10 @@ namespace tut
LLUrlMatch match;
ensure("getMenuName() empty", match.getMenuName().empty());
- match.setValues(10, 20, "", "", "", "Icon", LLUIColor(), "xui_file.xml", "");
+ match.setValues(10, 20, "", "", "", "Icon", LLUIColor(), "xui_file.xml", "", false);
ensure_equals("getMenuName() == \"xui_file.xml\"", match.getMenuName(), "xui_file.xml");
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure("getMenuName() empty (2)", match.getMenuName().empty());
}
@@ -172,10 +173,10 @@ namespace tut
LLUrlMatch match;
ensure("getLocation() empty", match.getLocation().empty());
- match.setValues(10, 20, "", "", "", "Icon", LLUIColor(), "xui_file.xml", "Paris");
+ match.setValues(10, 20, "", "", "", "Icon", LLUIColor(), "xui_file.xml", "Paris", false);
ensure_equals("getLocation() == \"Paris\"", match.getLocation(), "Paris");
- match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "");
+ match.setValues(10, 20, "", "", "", "", LLUIColor(), "", "", false);
ensure("getLocation() empty (2)", match.getLocation().empty());
}
}
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index 4c050844f8..d908c85da6 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -85,7 +85,8 @@ namespace LLInitParam
//
BaseBlock::BaseBlock()
: mLastChangedParam(0),
- mChangeVersion(0)
+ mChangeVersion(0),
+ mBlockDescriptor(NULL)
{}
BaseBlock::~BaseBlock()
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 7e1e4a3d21..a84e47f998 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -321,13 +321,13 @@ namespace LLInitParam
typedef bool(*validation_func_t)(const Param*);
ParamDescriptor(param_handle_t p,
- merge_func_t merge_func,
- deserialize_func_t deserialize_func,
- serialize_func_t serialize_func,
- validation_func_t validation_func,
- inspect_func_t inspect_func,
- S32 min_count,
- S32 max_count)
+ merge_func_t merge_func,
+ deserialize_func_t deserialize_func,
+ serialize_func_t serialize_func,
+ validation_func_t validation_func,
+ inspect_func_t inspect_func,
+ S32 min_count,
+ S32 max_count)
: mParamHandle(p),
mMergeFunc(merge_func),
mDeserializeFunc(deserialize_func),
@@ -336,6 +336,7 @@ namespace LLInitParam
mInspectFunc(inspect_func),
mMinCount(min_count),
mMaxCount(max_count),
+ mGeneration(0),
mNumRefs(0)
{}
@@ -371,7 +372,8 @@ namespace LLInitParam
public:
BlockDescriptor()
: mMaxParamOffset(0),
- mInitializationState(UNINITIALIZED)
+ mInitializationState(UNINITIALIZED),
+ mCurrentBlockPtr(NULL)
{}
typedef enum e_initialization_state
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 1a522c58c9..40c6b727a1 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -160,13 +160,11 @@ set(viewer_SOURCE_FILES
llfloaterbuycurrency.cpp
llfloaterbuyland.cpp
llfloatercamera.cpp
- llfloaterchatterbox.cpp
llfloatercolorpicker.cpp
llfloatercustomize.cpp
llfloaterdaycycle.cpp
llfloaterenvsettings.cpp
llfloaterfonttest.cpp
- llfloaterfriends.cpp
llfloatergesture.cpp
llfloatergodtools.cpp
llfloatergroupinvite.cpp
@@ -247,7 +245,6 @@ set(viewer_SOURCE_FILES
llimfloater.cpp
llimfloatercontainer.cpp
llimhandler.cpp
- llimpanel.cpp
llimview.cpp
llinspect.cpp
llinspectavatar.cpp
@@ -279,7 +276,6 @@ set(viewer_SOURCE_FILES
llmaniptranslate.cpp
llmediactrl.cpp
llmediadataclient.cpp
- llmediaremotectrl.cpp
llmemoryview.cpp
llmenucommands.cpp
llmeshrepository.cpp
@@ -305,7 +301,6 @@ set(viewer_SOURCE_FILES
llnotificationscripthandler.cpp
llnotificationtiphandler.cpp
lloutputmonitorctrl.cpp
- lloverlaybar.cpp
llpanelavatar.cpp
llpanelavatartag.cpp
llpanelblockedlist.cpp
@@ -426,7 +421,6 @@ set(viewer_SOURCE_FILES
lltoastnotifypanel.cpp
lltoastpanel.cpp
lltool.cpp
- lltoolbar.cpp
lltoolbrush.cpp
lltoolcomp.cpp
lltooldraganddrop.cpp
@@ -521,7 +515,6 @@ set(viewer_SOURCE_FILES
llvoground.cpp
llvoicechannel.cpp
llvoiceclient.cpp
- llvoiceremotectrl.cpp
llvoicevisualizer.cpp
llvoinventorylistener.cpp
llvopartgroup.cpp
@@ -671,13 +664,11 @@ set(viewer_HEADER_FILES
llfloaterbuycurrency.h
llfloaterbuyland.h
llfloatercamera.h
- llfloaterchatterbox.h
llfloatercolorpicker.h
llfloatercustomize.h
llfloaterdaycycle.h
llfloaterenvsettings.h
llfloaterfonttest.h
- llfloaterfriends.h
llfloatergesture.h
llfloatergodtools.h
llfloatergroupinvite.h
@@ -757,7 +748,6 @@ set(viewer_HEADER_FILES
llhudview.h
llimfloater.h
llimfloatercontainer.h
- llimpanel.h
llimview.h
llinspect.h
llinspectavatar.h
@@ -790,7 +780,6 @@ set(viewer_HEADER_FILES
llmaniptranslate.h
llmediactrl.h
llmediadataclient.h
- llmediaremotectrl.h
llmemoryview.h
llmenucommands.h
llmeshrepository.h
@@ -811,7 +800,6 @@ set(viewer_HEADER_FILES
llnotificationhandler.h
llnotificationmanager.h
lloutputmonitorctrl.h
- lloverlaybar.h
llpanelavatar.h
llpanelavatartag.h
llpanelblockedlist.h
@@ -935,7 +923,6 @@ set(viewer_HEADER_FILES
lltoastnotifypanel.h
lltoastpanel.h
lltool.h
- lltoolbar.h
lltoolbrush.h
lltoolcomp.h
lltooldraganddrop.h
@@ -1028,7 +1015,6 @@ set(viewer_HEADER_FILES
llvoground.h
llvoicechannel.h
llvoiceclient.h
- llvoiceremotectrl.h
llvoicevisualizer.h
llvoinventorylistener.h
llvopartgroup.h
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index fef3f62b20..326a8c3271 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2377,6 +2377,17 @@
<key>Value</key>
<integer>0</integer>
</map>
+ <key>DisableMouseWarp</key>
+ <map>
+ <key>Comment</key>
+ <string>Disable warping of the mouse to the center of the screen during alt-zoom and mouse look. Useful with certain input devices, mouse sharing programs like Synergy, or running under Parallels.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>0</integer>
+ </map>
<key>DisableRendering</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index da0e9238d6..2354323a66 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -2805,7 +2805,6 @@ void LLAgent::endAnimationUpdateUI()
LLNavigationBar::getInstance()->setVisible(TRUE);
gStatusBar->setVisibleForMouselook(true);
- LLBottomTray::getInstance()->setVisible(TRUE);
LLBottomTray::getInstance()->onMouselookModeOut();
LLSideTray::getInstance()->getButtonsPanel()->setVisible(TRUE);
@@ -2906,7 +2905,6 @@ void LLAgent::endAnimationUpdateUI()
gStatusBar->setVisibleForMouselook(false);
LLBottomTray::getInstance()->onMouselookModeIn();
- LLBottomTray::getInstance()->setVisible(FALSE);
LLSideTray::getInstance()->getButtonsPanel()->setVisible(FALSE);
LLSideTray::getInstance()->updateSidetrayVisibility();
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index dd50b482cf..38d1e01d08 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -35,11 +35,11 @@
#include "llsingleton.h"
#include "llinventorymodel.h"
-#include "llviewerinventory.h"
#include "llcallbacklist.h"
class LLWearable;
class LLWearableHoldingPattern;
+class LLInventoryCallback;
class LLAppearanceManager: public LLSingleton<LLAppearanceManager>
{
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index ed0df6e0ea..a0c722c539 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -164,7 +164,6 @@
#include "llvotree.h"
#include "llvoavatar.h"
#include "llfolderview.h"
-#include "lltoolbar.h"
#include "llagentpilot.h"
#include "llvovolume.h"
#include "llflexibleobject.h"
@@ -415,7 +414,6 @@ static void settings_to_globals()
LLVOAvatar::sVisibleInFirstPerson = gSavedSettings.getBOOL("FirstPersonAvatarVisible");
// clamp auto-open time to some minimum usable value
LLFolderView::sAutoOpenTime = llmax(0.25f, gSavedSettings.getF32("FolderAutoOpenDelay"));
- LLToolBar::sInventoryAutoOpenTime = gSavedSettings.getF32("InventoryAutoOpenDelay");
LLSelectMgr::sRectSelectInclusive = gSavedSettings.getBOOL("RectangleSelectInclusive");
LLSelectMgr::sRenderHiddenSelections = gSavedSettings.getBOOL("RenderHiddenSelections");
LLSelectMgr::sRenderLightRadius = gSavedSettings.getBOOL("RenderLightRadius");
@@ -2914,7 +2912,14 @@ static LLNotificationFunctorRegistration finish_quit_reg("ConfirmQuit", finish_q
void LLAppViewer::userQuit()
{
- LLNotificationsUtil::add("ConfirmQuit");
+ if (gDisconnected)
+ {
+ requestQuit();
+ }
+ else
+ {
+ LLNotificationsUtil::add("ConfirmQuit");
+ }
}
static bool finish_early_exit(const LLSD& notification, const LLSD& response)
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index bd68d52868..a2d594cfa2 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -62,6 +62,39 @@ namespace
const std::string& PANEL_GESTURE_NAME = "gesture_panel";
}
+class LLBottomTrayLite
+ : public LLPanel
+{
+public:
+ LLBottomTrayLite()
+ : mNearbyChatBar(NULL),
+ mGesturePanel(NULL)
+ {
+ mFactoryMap["chat_bar"] = LLCallbackMap(LLBottomTray::createNearbyChatBar, NULL);
+ LLUICtrlFactory::getInstance()->buildPanel(this, "panel_bottomtray_lite.xml");
+ // Necessary for focus movement among child controls
+ setFocusRoot(TRUE);
+ }
+
+ BOOL postBuild()
+ {
+ mNearbyChatBar = getChild<LLNearbyChatBar>("chat_bar");
+ mGesturePanel = getChild<LLPanel>("gesture_panel");
+ return TRUE;
+ }
+
+ void onFocusLost()
+ {
+ if (gAgent.cameraMouselook())
+ {
+ LLBottomTray::getInstance()->setVisible(FALSE);
+ }
+ }
+
+ LLNearbyChatBar* mNearbyChatBar;
+ LLPanel* mGesturePanel;
+};
+
LLBottomTray::LLBottomTray(const LLSD&)
: mChicletPanel(NULL),
mSpeakPanel(NULL),
@@ -76,6 +109,8 @@ LLBottomTray::LLBottomTray(const LLSD&)
, mSnapshotPanel(NULL)
, mGesturePanel(NULL)
, mCamButton(NULL)
+, mBottomTrayLite(NULL)
+, mIsInLiteMode(false)
{
// Firstly add ourself to IMSession observers, so we catch session events
// before chiclets do that.
@@ -100,6 +135,12 @@ LLBottomTray::LLBottomTray(const LLSD&)
// Necessary for focus movement among child controls
setFocusRoot(TRUE);
+
+ {
+ mBottomTrayLite = new LLBottomTrayLite();
+ mBottomTrayLite->setFollowsAll();
+ mBottomTrayLite->setVisible(FALSE);
+ }
}
LLBottomTray::~LLBottomTray()
@@ -134,6 +175,11 @@ void* LLBottomTray::createNearbyChatBar(void* userdata)
return new LLNearbyChatBar();
}
+LLNearbyChatBar* LLBottomTray::getNearbyChatBar()
+{
+ return mIsInLiteMode ? mBottomTrayLite->mNearbyChatBar : mNearbyChatBar;
+}
+
LLIMChiclet* LLBottomTray::createIMChiclet(const LLUUID& session_id)
{
LLIMChiclet::EType im_chiclet_type = LLIMChiclet::getIMSessionType(session_id);
@@ -237,68 +283,27 @@ void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, b
mSpeakBtn->setEnabled(enable);
}
-//virtual
-void LLBottomTray::onFocusLost()
+void LLBottomTray::onMouselookModeOut()
{
- if (gAgent.cameraMouselook())
- {
- setVisible(FALSE);
- }
+ mIsInLiteMode = false;
+ mBottomTrayLite->setVisible(FALSE);
+ mNearbyChatBar->getChatBox()->setText(mBottomTrayLite->mNearbyChatBar->getChatBox()->getText());
+ setVisible(TRUE);
}
-void LLBottomTray::savePanelsShape()
+void LLBottomTray::onMouselookModeIn()
{
- mSavedShapeList.clear();
- for (child_list_const_iter_t
- child_it = mToolbarStack->beginChild(),
- child_it_end = mToolbarStack->endChild();
- child_it != child_it_end; ++child_it)
- {
- mSavedShapeList.push_back( (*child_it)->getRect() );
- }
-}
+ setVisible(FALSE);
-void LLBottomTray::restorePanelsShape()
-{
- if (mSavedShapeList.size() != mToolbarStack->getChildCount())
- return;
- int i = 0;
- for (child_list_const_iter_t
- child_it = mToolbarStack->beginChild(),
- child_it_end = mToolbarStack->endChild();
- child_it != child_it_end; ++child_it)
- {
- (*child_it)->setShape(mSavedShapeList[i++]);
- }
-}
+ // Attach the lite bottom tray
+ if (getParent() && mBottomTrayLite->getParent() != getParent())
+ getParent()->addChild(mBottomTrayLite);
-void LLBottomTray::onMouselookModeOut()
-{
- // Apply the saved settings when we are not in mouselook mode, see EXT-3988.
- {
- setTrayButtonVisibleIfPossible (RS_BUTTON_GESTURES, gSavedSettings.getBOOL("ShowGestureButton"), false);
- setTrayButtonVisibleIfPossible (RS_BUTTON_MOVEMENT, gSavedSettings.getBOOL("ShowMoveButton"), false);
- setTrayButtonVisibleIfPossible (RS_BUTTON_CAMERA, gSavedSettings.getBOOL("ShowCameraButton"), false);
- setTrayButtonVisibleIfPossible (RS_BUTTON_SNAPSHOT, gSavedSettings.getBOOL("ShowSnapshotButton"),false);
- }
- // HACK: To avoid usage the LLLayoutStack logic of resizing, we force the updateLayout
- // and then restore children saved shapes. See EXT-4309.
- BOOL saved_anim = mToolbarStack->getAnimate();
- mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, FALSE);
- // Disable animation to prevent layout updating in several frames.
- mToolbarStack->setAnimate(FALSE);
- // Force the updating of layout to reset panels collapse factor.
- mToolbarStack->updateLayout();
- // Restore animate state.
- mToolbarStack->setAnimate(saved_anim);
- // Restore saved shapes.
- restorePanelsShape();
-}
+ mBottomTrayLite->setShape(getLocalRect());
+ mBottomTrayLite->mNearbyChatBar->getChatBox()->setText(mNearbyChatBar->getChatBox()->getText());
+ mBottomTrayLite->mGesturePanel->setVisible(gSavedSettings.getBOOL("ShowGestureButton"));
-void LLBottomTray::onMouselookModeIn()
-{
- savePanelsShape();
- mToolbarStack->updatePanelAutoResize(PANEL_CHATBAR_NAME, TRUE);
+ mIsInLiteMode = true;
}
//virtual
@@ -306,31 +311,14 @@ void LLBottomTray::onMouselookModeIn()
// If bottom tray is already visible in mouselook mode, then onVisibilityChange will not be called from setVisible(true),
void LLBottomTray::setVisible(BOOL visible)
{
- LLPanel::setVisible(visible);
-
- // *NOTE: we must check mToolbarStack against NULL because setVisible is called from the
- // LLPanel::initFromParams BEFORE postBuild is called and child controls are not exist yet
- if (NULL != mToolbarStack)
+ if (mIsInLiteMode)
{
- BOOL visibility = gAgent.cameraMouselook() ? false : true;
-
- for ( child_list_const_iter_t child_it = mToolbarStack->getChildList()->begin();
- child_it != mToolbarStack->getChildList()->end(); child_it++)
- {
- LLView* viewp = *child_it;
- std::string name = viewp->getName();
-
- // Chat bar and gesture button are shown even in mouselook mode.
- // But the move, camera and snapshot buttons shouldn't be displayed. See EXT-3988.
- if ("chat_bar" == name || "gesture_panel" == name || (visibility && ("movement_panel" == name || "cam_panel" == name || "snapshot_panel" == name)))
- continue;
- else
- {
- viewp->setVisible(visibility);
- }
- }
+ mBottomTrayLite->setVisible(visible);
+ }
+ else
+ {
+ LLPanel::setVisible(visible);
}
-
if(visible)
gFloaterView->setSnapOffsetBottom(getRect().getHeight());
else
@@ -535,7 +523,18 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
if (mChicletPanel && mToolbarStack && mNearbyChatBar)
{
- mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
+ // Firstly, update layout stack to ensure we deal with correct panel sizes.
+ {
+ BOOL saved_anim = mToolbarStack->getAnimate();
+ // Set chiclet panel to be autoresized by default.
+ mToolbarStack->updatePanelAutoResize(PANEL_CHICLET_NAME, TRUE);
+ // Disable animation to prevent layout updating in several frames.
+ mToolbarStack->setAnimate(FALSE);
+ // Force the updating of layout to reset panels collapse factor.
+ mToolbarStack->updateLayout();
+ // Restore animate state.
+ mToolbarStack->setAnimate(saved_anim);
+ }
// bottom tray is narrowed
if (delta_width < 0)
@@ -637,7 +636,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
mNearbyChatBar->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mNearbyChatBar->getRect().getHeight());
- log(mChicletPanel, "after processing panel decreasing via nearby chatbar panel");
+ log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel");
lldebugs << "RS_CHATBAR_INPUT"
<< ", delta_panel: " << delta_panel
@@ -1057,6 +1056,11 @@ void LLBottomTray::initStateProcessedObjectMap()
mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, mMovementPanel));
mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_CAMERA, mCamPanel));
mStateProcessedObjectMap.insert(std::make_pair(RS_BUTTON_SNAPSHOT, mSnapshotPanel));
+
+ mDummiesMap.insert(std::make_pair(RS_BUTTON_GESTURES, getChild<LLUICtrl>("after_gesture_panel")));
+ mDummiesMap.insert(std::make_pair(RS_BUTTON_MOVEMENT, getChild<LLUICtrl>("after_movement_panel")));
+ mDummiesMap.insert(std::make_pair(RS_BUTTON_CAMERA, getChild<LLUICtrl>("after_cam_panel")));
+ mDummiesMap.insert(std::make_pair(RS_BUTTON_SPEAK, getChild<LLUICtrl>("after_speak_panel")));
}
void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool visible)
@@ -1069,6 +1073,11 @@ void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool vis
}
panel->setVisible(visible);
+
+ if (mDummiesMap.count(shown_object_type))
+ {
+ mDummiesMap[shown_object_type]->setVisible(visible);
+ }
}
void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification)
@@ -1084,6 +1093,8 @@ void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type
return;
}
+ const S32 dummy_width = mDummiesMap.count(shown_object_type) ? mDummiesMap[shown_object_type]->getRect().getWidth() : 0;
+
const S32 chatbar_panel_width = mNearbyChatBar->getRect().getWidth();
const S32 chatbar_panel_min_width = mNearbyChatBar->getMinWidth();
@@ -1093,7 +1104,7 @@ void LLBottomTray::setTrayButtonVisibleIfPossible(EResizeState shown_object_type
const S32 available_width = (chatbar_panel_width - chatbar_panel_min_width)
+ (chiclet_panel_width - chiclet_panel_min_width);
- const S32 required_width = panel->getRect().getWidth();
+ const S32 required_width = panel->getRect().getWidth() + dummy_width;
can_be_set = available_width >= required_width;
}
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 562ee56912..ee0eb13218 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -46,6 +46,7 @@ class LLNotificationChiclet;
class LLSpeakButton;
class LLNearbyChatBar;
class LLIMChiclet;
+class LLBottomTrayLite;
// Build time optimization, generate once in .cpp file
#ifndef LLBOTTOMTRAY_CPP
@@ -60,13 +61,14 @@ class LLBottomTray
{
LOG_CLASS(LLBottomTray);
friend class LLSingleton<LLBottomTray>;
+ friend class LLBottomTrayLite;
public:
~LLBottomTray();
BOOL postBuild();
LLChicletPanel* getChicletPanel() {return mChicletPanel;}
- LLNearbyChatBar* getNearbyChatBar() {return mNearbyChatBar;}
+ LLNearbyChatBar* getNearbyChatBar();
void onCommitGesture(LLUICtrl* ctrl);
@@ -79,7 +81,6 @@ public:
virtual void reshape(S32 width, S32 height, BOOL called_from_parent);
- virtual void onFocusLost();
virtual void setVisible(BOOL visible);
// Implements LLVoiceClientStatusObserver::onChange() to enable the speak
@@ -172,13 +173,6 @@ private:
*/
void setTrayButtonVisibleIfPossible(EResizeState shown_object_type, bool visible, bool raise_notification = true);
- /**
- * Save and restore children shapes.
- * Used to avoid the LLLayoutStack resizing logic between mouse look mode switching.
- */
- void savePanelsShape();
- void restorePanelsShape();
-
MASK mResizeState;
typedef std::map<EResizeState, LLPanel*> state_object_map_t;
@@ -187,8 +181,8 @@ private:
typedef std::map<EResizeState, S32> state_object_width_map_t;
state_object_width_map_t mObjectDefaultWidthMap;
- typedef std::vector<LLRect> shape_list_t;
- shape_list_t mSavedShapeList;
+ typedef std::map<EResizeState, LLUICtrl*> dummies_map_t;
+ dummies_map_t mDummiesMap;
protected:
@@ -214,6 +208,8 @@ protected:
LLPanel* mGesturePanel;
LLButton* mCamButton;
LLButton* mMovementButton;
+ LLBottomTrayLite* mBottomTrayLite;
+ bool mIsInLiteMode;
};
#endif // LL_LLBOTTOMPANEL_H
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index f1e7e622b3..a570862675 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -51,9 +51,12 @@
#include "llslurl.h"
#include "lllayoutstack.h"
#include "llagent.h"
+#include "llnotificationsutil.h"
+#include "lltoastnotifypanel.h"
#include "llviewerregion.h"
#include "llworld.h"
+
#include "llsidetray.h"//for blocked objects panel
static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history");
@@ -310,7 +313,7 @@ protected:
showSystemContextMenu(x,y);
if(mSourceType == CHAT_SOURCE_AGENT)
showAvatarContextMenu(x,y);
- if(mSourceType == CHAT_SOURCE_OBJECT)
+ if(mSourceType == CHAT_SOURCE_OBJECT && SYSTEM_FROM != mFrom)
showObjectContextMenu(x,y);
}
@@ -654,8 +657,36 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
mLastMessageTimeStr = chat.mTimeStr;
}
- std::string message = irc_me ? chat.mText.substr(3) : chat.mText;
- mEditor->appendText(message, FALSE, style_params);
+ if (chat.mNotifId.notNull())
+ {
+ LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId);
+ if (notification != NULL)
+ {
+ LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(
+ notification);
+ notify_box->setFollowsLeft();
+ notify_box->setFollowsRight();
+ //Prepare the rect for the view
+ LLRect target_rect = mEditor->getDocumentView()->getRect();
+ // squeeze down the widget by subtracting padding off left and right
+ target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad();
+ target_rect.mRight -= mRightWidgetPad;
+ notify_box->reshape(target_rect.getWidth(),
+ notify_box->getRect().getHeight());
+ notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom);
+
+ LLInlineViewSegment::Params params;
+ params.view = notify_box;
+ params.left_pad = mLeftWidgetPad;
+ params.right_pad = mRightWidgetPad;
+ mEditor->appendWidget(params, "\n", false);
+ }
+ }
+ else
+ {
+ std::string message = irc_me ? chat.mText.substr(3) : chat.mText;
+ mEditor->appendText(message, FALSE, style_params);
+ }
mEditor->blockUndo();
// automatically scroll to end when receiving chat from myself
diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h
index 6a2b7fc218..b947943619 100644
--- a/indra/newview/lldrawpoolavatar.h
+++ b/indra/newview/lldrawpoolavatar.h
@@ -39,8 +39,6 @@ class LLVOAvatar;
class LLDrawPoolAvatar : public LLFacePool
{
-protected:
- S32 mNumFaces;
public:
enum
{
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
index 8428be194f..0f76165053 100644
--- a/indra/newview/lldrawpoolsky.cpp
+++ b/indra/newview/lldrawpoolsky.cpp
@@ -48,8 +48,11 @@
#include "pipeline.h"
#include "llviewershadermgr.h"
-LLDrawPoolSky::LLDrawPoolSky() :
- LLFacePool(POOL_SKY), mShader(NULL)
+LLDrawPoolSky::LLDrawPoolSky()
+: LLFacePool(POOL_SKY),
+
+ mSkyTex(NULL),
+ mShader(NULL)
{
}
@@ -132,6 +135,7 @@ void LLDrawPoolSky::renderSkyCubeFace(U8 side)
return;
}
+ llassert(mSkyTex);
mSkyTex[side].bindTexture(TRUE);
face.renderIndexed();
diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h
index 68a8172dd0..614f645243 100644
--- a/indra/newview/lldrawpoolwater.h
+++ b/indra/newview/lldrawpoolwater.h
@@ -47,7 +47,6 @@ protected:
LLPointer<LLViewerTexture> mWaterImagep;
LLPointer<LLViewerTexture> mWaterNormp;
- const LLWaterSurface *mWaterSurface;
public:
static BOOL sSkipScreenCopy;
static BOOL sNeedsReflectionUpdate;
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 0e42ff09d8..f5bb777419 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -685,7 +685,7 @@ void LLFavoritesBarCtrl::updateButtons()
{
// an child's order and mItems should be same
if (button->getLandmarkId() != item->getUUID() // sort order has been changed
- || button->getLabelSelected() != item->getDisplayName() // favorite's name has been changed
+ || button->getLabelSelected() != item->getName() // favorite's name has been changed
|| button->getRect().mRight < rightest_point) // favbar's width has been changed
{
break;
@@ -780,8 +780,8 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem
* Empty space (or ...) is displaying instead of last symbols, even though the width of the button is enough.
* Problem will gone, if we stretch out the button. For that reason I have to put additional 20 pixels.
*/
- int requred_width = mFont->getWidth(item->getDisplayName()) + 20;
- int width = requred_width > def_button_width? def_button_width : requred_width;
+ int required_width = mFont->getWidth(item->getName()) + 20;
+ int width = required_width > def_button_width? def_button_width : required_width;
LLFavoriteLandmarkButton* fav_btn = NULL;
// do we have a place for next button + double buttonHGap + mChevronButton ?
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index 383963a41d..dd218d428f 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -99,8 +99,14 @@ protected:
class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManager>
{
public:
- LLFeatureManager() :
- LLFeatureList("default"), mInited(FALSE), mTableVersion(0), mSafe(FALSE), mGPUClass(GPU_CLASS_UNKNOWN)
+ LLFeatureManager()
+ : LLFeatureList("default"),
+
+ mInited(FALSE),
+ mTableVersion(0),
+ mSafe(FALSE),
+ mGPUClass(GPU_CLASS_UNKNOWN),
+ mGPUSupported(FALSE)
{
}
~LLFeatureManager() {cleanupFeatureTables();}
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
index 04f4ddf996..ef69f39ad2 100644
--- a/indra/newview/llfloaterabout.cpp
+++ b/indra/newview/llfloaterabout.cpp
@@ -187,12 +187,6 @@ BOOL LLFloaterAbout::postBuild()
support << '\n' << getString("AboutTraffic", args);
}
- // don't make the sim hostname be a hyperlink
- if (info.has("HOSTNAME"))
- {
- support_widget->addBlackListUrl(info["HOSTNAME"].asString());
- }
-
support_widget->appendText(support.str(),
FALSE,
LLStyle::Params()
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
index 5c3a54e34b..b2f700069f 100644
--- a/indra/newview/llfloaterbulkpermission.cpp
+++ b/indra/newview/llfloaterbulkpermission.cpp
@@ -43,6 +43,7 @@
#include "llviewerregion.h"
#include "lscript_rt_interface.h"
#include "llviewercontrol.h"
+#include "llviewerinventory.h"
#include "llviewerobject.h"
#include "llviewerregion.h"
#include "llresmgr.h"
diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h
index 31f4f5c3e1..bffcff7059 100644
--- a/indra/newview/llfloaterbulkpermission.h
+++ b/indra/newview/llfloaterbulkpermission.h
@@ -44,8 +44,6 @@
#include "llfloater.h"
#include "llscrolllistctrl.h"
-#include "llviewerinventory.h"
-
class LLFloaterBulkPermission : public LLFloater, public LLVOInventoryListener
{
friend class LLFloaterReg;
diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp
index 84b423399e..774caaec90 100644
--- a/indra/newview/llfloaterchatterbox.cpp
+++ b/indra/newview/llfloaterchatterbox.cpp
@@ -216,11 +216,11 @@ void LLFloaterChatterBox::onOpen(const LLSD& key)
}
else if (key.isDefined())
{
- LLFloaterIMPanel* impanel = gIMMgr->findFloaterBySession(key.asUUID());
+ /*LLFloaterIMPanel* impanel = gIMMgr->findFloaterBySession(key.asUUID());
if (impanel)
{
impanel->openFloater();
- }
+ }*/
}
}
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
index de65c6f876..b684e1f985 100644
--- a/indra/newview/llfloatergesture.cpp
+++ b/indra/newview/llfloatergesture.cpp
@@ -367,7 +367,14 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur
element["columns"][3]["font"]["name"] = "SANSSERIF";
element["columns"][3]["font"]["style"] = font_style;
}
- list->addElement(element, ADD_BOTTOM);
+
+ LLScrollListItem* sl_item = list->addElement(element, ADD_BOTTOM);
+ if(sl_item)
+ {
+ LLFontGL::StyleFlags style = LLGestureManager::getInstance()->isGestureActive(item_id) ? LLFontGL::BOLD : LLFontGL::NORMAL;
+ // *TODO find out why ["font"]["style"] does not affect font style
+ ((LLScrollListText*)sl_item->getColumn(0))->setFontStyle(style);
+ }
}
void LLFloaterGesture::getSelectedIds(std::vector<LLUUID>& ids)
@@ -401,8 +408,7 @@ bool LLFloaterGesture::isActionEnabled(const LLSD& command)
}
return false;
}
- else if("copy_uuid" == command_name || "edit_gesture" == command_name
- || "inspect" == command_name)
+ else if("copy_uuid" == command_name || "edit_gesture" == command_name)
{
return mGestureList->getAllSelected().size() == 1;
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index e77c93b5f8..ef444c8ba4 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -1207,7 +1207,7 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
childEnable("log_nearby_chat");
childEnable("log_instant_messages");
childEnable("show_timestamps_check_im");
- childEnable("log_path_string");
+ childDisable("log_path_string");// LineEditor becomes readonly in this case.
childEnable("log_path_button");
std::string display_email(email);
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index 4a1eb51dbe..0f3c176cea 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -248,6 +248,7 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
if ( objectp->isAttachment() )
{
objectp = (LLViewerObject*)objectp->getRoot();
+ mObjectID = objectp->getID();
}
// correct the region and position information
@@ -278,7 +279,7 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
object_owner.append("Unknown");
}
- setFromAvatar(object_id, object_owner);
+ setFromAvatar(mObjectID, object_owner);
}
else
{
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 94c7ff6f94..a0031f0193 100644
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -378,6 +378,7 @@ void LLSnapshotLivePreview::setSnapshotQuality(S32 quality)
{
mSnapshotQuality = quality;
gSavedSettings.setS32("SnapshotQuality", quality);
+ mSnapshotUpToDate = FALSE;
}
}
diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp
index 4b48626b22..b05eb84e52 100644
--- a/indra/newview/llfolderviewitem.cpp
+++ b/indra/newview/llfolderviewitem.cpp
@@ -40,7 +40,6 @@
#include "llinventoryfilter.h"
#include "llpanel.h"
#include "llviewercontrol.h" // gSavedSettings
-#include "llviewerinventory.h"
#include "llviewerwindow.h" // Argh, only for setCursor()
// linden library includes
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index d6e2bb0445..3653371d76 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -75,11 +75,12 @@ public:
return false;
}
+ //*TODO by what to replace showing groups floater?
if (tokens[0].asString() == "list")
{
if (tokens[1].asString() == "show")
{
- LLFloaterReg::showInstance("contacts", "groups");
+ //LLFloaterReg::showInstance("contacts", "groups");
return true;
}
return false;
diff --git a/indra/newview/llgroupiconctrl.cpp b/indra/newview/llgroupiconctrl.cpp
index 0b03d49cbc..5760242bc8 100644
--- a/indra/newview/llgroupiconctrl.cpp
+++ b/indra/newview/llgroupiconctrl.cpp
@@ -94,6 +94,7 @@ void LLGroupIconCtrl::setValue(const LLSD& value)
if (mGroupId != value.asUUID())
{
mGroupId = value.asUUID();
+ mID = mGroupId; // set LLGroupMgrObserver::mID to make callbacks work
// Check if cache already contains image_id for that group
if (!updateFromCache())
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index c0f22fcea2..9e52d4c6c2 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -601,8 +601,18 @@ void LLIMFloater::updateMessages()
chat.mFromID = from_id;
chat.mSessionID = mSessionID;
chat.mFromName = from;
- chat.mText = message;
chat.mTimeStr = time;
+
+ // process offer notification
+ if (msg.has("notification_id"))
+ {
+ chat.mNotifId = msg["notification_id"].asUUID();
+ }
+ //process text message
+ else
+ {
+ chat.mText = message;
+ }
mChatHistory->appendMessage(chat, use_plain_text_chat_history);
mLastMessageIndex = msg["index"].asInteger();
@@ -610,6 +620,13 @@ void LLIMFloater::updateMessages()
}
}
+void LLIMFloater::reloadMessages()
+{
+ mChatHistory->clear();
+ mLastMessageIndex = -1;
+ updateMessages();
+}
+
// static
void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata )
{
diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h
index 0ca0325451..9552b30737 100644
--- a/indra/newview/llimfloater.h
+++ b/indra/newview/llimfloater.h
@@ -80,6 +80,7 @@ public:
// get new messages from LLIMModel
void updateMessages();
+ void reloadMessages();
static void onSendMsg( LLUICtrl*, void*);
void sendMsg();
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 1254664330..80d2778934 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -52,7 +52,6 @@
#include "llbottomtray.h"
#include "llcallingcard.h"
#include "llchat.h"
-#include "llfloaterchatterbox.h"
#include "llimfloater.h"
#include "llgroupiconctrl.h"
#include "llmd5.h"
@@ -64,6 +63,7 @@
#include "llnotificationsutil.h"
#include "llnearbychat.h"
#include "llspeakers.h" //for LLIMSpeakerMgr
+#include "lltextbox.h"
#include "lltextutil.h"
#include "llviewercontrol.h"
#include "llviewerparcelmgr.h"
@@ -538,13 +538,6 @@ void LLIMModel::processSessionInitializedReply(const LLUUID& old_session_id, con
gIMMgr->startCall(new_session_id);
}
}
-
- //*TODO remove this "floater" stuff when Communicate Floater is gone
- LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(old_session_id);
- if (floater)
- {
- floater->sessionInitReplyReceived(new_session_id);
- }
}
void LLIMModel::testMessages()
@@ -679,15 +672,6 @@ bool LLIMModel::proccessOnlineOfflineNotification(
const LLUUID& session_id,
const std::string& utf8_text)
{
- // Add message to old one floater
- LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id);
- if ( floater )
- {
- if ( !utf8_text.empty() )
- {
- floater->addHistoryLine(utf8_text, LLUIColorTable::instance().getColor("SystemChatColor"));
- }
- }
// Add system message to history
return addMessage(session_id, SYSTEM_FROM, LLUUID::null, utf8_text);
}
@@ -955,9 +939,6 @@ void LLIMModel::sendMessage(const std::string& utf8_text,
history_echo += ": " + utf8_text;
- LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(im_session_id);
- if (floater) floater->addHistoryLine(history_echo, LLUIColorTable::instance().getColor("IMChatColor"), true, gAgent.getID());
-
LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);
if (speaker_mgr)
{
@@ -1275,33 +1256,16 @@ LLUUID LLIMMgr::computeSessionID(
return session_id;
}
-inline LLFloater* getFloaterBySessionID(const LLUUID session_id)
-{
- LLFloater* floater = NULL;
- if ( gIMMgr )
- {
- floater = dynamic_cast < LLFloater* >
- ( gIMMgr->findFloaterBySession(session_id) );
- }
- if ( !floater )
- {
- floater = dynamic_cast < LLFloater* >
- ( LLIMFloater::findInstance(session_id) );
- }
- return floater;
-}
-
void
LLIMMgr::showSessionStartError(
const std::string& error_string,
const LLUUID session_id)
{
- const LLFloater* floater = getFloaterBySessionID (session_id);
- if (!floater) return;
+ if (!hasSession(session_id)) return;
LLSD args;
args["REASON"] = LLTrans::getString(error_string);
- args["RECIPIENT"] = floater->getTitle();
+ args["RECIPIENT"] = LLIMModel::getInstance()->getName(session_id);
LLSD payload;
payload["session_id"] = session_id;
@@ -1339,12 +1303,11 @@ LLIMMgr::showSessionForceClose(
const std::string& reason_string,
const LLUUID session_id)
{
- const LLFloater* floater = getFloaterBySessionID (session_id);
- if (!floater) return;
+ if (!hasSession(session_id)) return;
LLSD args;
- args["NAME"] = floater->getTitle();
+ args["NAME"] = LLIMModel::getInstance()->getName(session_id);
args["REASON"] = LLTrans::getString(reason_string);
LLSD payload;
@@ -1366,7 +1329,7 @@ LLIMMgr::onConfirmForceCloseError(
//only 1 option really
LLUUID session_id = notification["payload"]["session_id"];
- LLFloater* floater = getFloaterBySessionID (session_id);
+ LLFloater* floater = LLIMFloater::findInstance(session_id);
if ( floater )
{
floater->closeFloater(FALSE);
@@ -2114,8 +2077,7 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)
// Member Functions
//
-LLIMMgr::LLIMMgr() :
- mIMReceived(FALSE)
+LLIMMgr::LLIMMgr()
{
mPendingInvitations = LLSD::emptyMap();
mPendingAgentListUpdates = LLSD::emptyMap();
@@ -2146,7 +2108,6 @@ void LLIMMgr::addMessage(
return;
}
- LLFloaterIMPanel* floater;
LLUUID new_session_id = session_id;
if (new_session_id.isNull())
{
@@ -2165,32 +2126,7 @@ void LLIMMgr::addMessage(
if (new_session)
{
LLIMModel::getInstance()->newSession(new_session_id, fixed_session_name, dialog, other_participant_id);
- }
-
- floater = findFloaterBySession(new_session_id);
- if (!floater)
- {
- floater = findFloaterBySession(other_participant_id);
- if (floater)
- {
- llinfos << "found the IM session " << session_id
- << " by participant " << other_participant_id << llendl;
- }
- }
-
- // create IM window as necessary
- if(!floater)
- {
- floater = createFloater(
- new_session_id,
- other_participant_id,
- fixed_session_name,
- dialog,
- FALSE);
- }
- if (new_session)
- {
// When we get a new IM, and if you are a god, display a bit
// of information about the source. This is to help liaisons
// when answering questions.
@@ -2209,50 +2145,13 @@ void LLIMMgr::addMessage(
//<< "*** region_id: " << region_id << std::endl
//<< "*** position: " << position << std::endl;
- floater->addHistoryLine(bonus_info.str(), LLUIColorTable::instance().getColor("SystemChatColor"));
LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());
}
make_ui_sound("UISndNewIncomingIMSession");
}
- // now add message to floater
- bool is_from_system = target_id.isNull() || (from == SYSTEM_FROM);
- const LLColor4& color = ( is_from_system ?
- LLUIColorTable::instance().getColor("SystemChatColor") :
- LLUIColorTable::instance().getColor("IMChatColor"));
- if ( !link_name )
- {
- floater->addHistoryLine(msg,color); // No name to prepend, so just add the message normally
- }
- else
- {
- floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message
- }
-
LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg);
-
- if( !LLFloaterReg::instanceVisible("communicate") && !floater->getVisible())
- {
- LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance();
-
- //if the IM window is not open and the floater is not visible (i.e. not torn off)
- LLFloater* previouslyActiveFloater = chat_floater->getActiveFloater();
-
- // select the newly added floater (or the floater with the new line added to it).
- // it should be there.
- chat_floater->selectFloater(floater);
-
- //there was a previously unseen IM, make that old tab flashing
- //it is assumed that the most recently unseen IM tab is the one current selected/active
- if ( previouslyActiveFloater && getIMReceived() )
- {
- chat_floater->setFloaterFlashing(previouslyActiveFloater, TRUE);
- }
-
- //notify of a new IM
- notifyNewIM();
- }
}
void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& message_name, const LLSD& args)
@@ -2285,14 +2184,6 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess
}
}
-void LLIMMgr::notifyNewIM()
-{
- if(!LLFloaterReg::instanceVisible("communicate"))
- {
- mIMReceived = TRUE;
- }
-}
-
S32 LLIMMgr::getNumberOfUnreadIM()
{
std::map<LLUUID, LLIMModel::LLIMSession*>::iterator it;
@@ -2319,16 +2210,6 @@ S32 LLIMMgr::getNumberOfUnreadParticipantMessages()
return num;
}
-void LLIMMgr::clearNewIMNotification()
-{
- mIMReceived = FALSE;
-}
-
-BOOL LLIMMgr::getIMReceived() const
-{
- return mIMReceived;
-}
-
void LLIMMgr::autoStartCallOnStartup(const LLUUID& session_id)
{
LLIMModel::LLIMSession *session = LLIMModel::getInstance()->findIMSession(session_id);
@@ -2416,21 +2297,6 @@ LLUUID LLIMMgr::addSession(
LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids, voice);
}
- //*TODO remove this "floater" thing when Communicate Floater's gone
- LLFloaterIMPanel* floater = findFloaterBySession(session_id);
- if(!floater)
- {
- // On creation, use the first element of ids as the
- // "other_participant_id"
- floater = createFloater(
- session_id,
- other_participant_id,
- name,
- dialog,
- TRUE,
- ids);
- }
-
//we don't need to show notes about online/offline, mute/unmute users' statuses for existing sessions
if (!new_session) return session_id;
@@ -2441,7 +2307,7 @@ LLUUID LLIMMgr::addSession(
// Only warn for regular IMs - not group IMs
if( dialog == IM_NOTHING_SPECIAL )
{
- noteMutedUsers(session_id, floater, ids);
+ noteMutedUsers(session_id, ids);
}
return session_id;
@@ -2462,14 +2328,6 @@ void LLIMMgr::removeSession(const LLUUID& session_id)
{
llassert_always(hasSession(session_id));
- //*TODO remove this floater thing when Communicate Floater is being deleted (IB)
- LLFloaterIMPanel* floater = findFloaterBySession(session_id);
- if(floater)
- {
- mFloaters.erase(floater->getHandle());
- LLFloaterChatterBox::getInstance()->removeFloater(floater);
- }
-
clearPendingInvitation(session_id);
clearPendingAgentListUpdates(session_id);
@@ -2579,50 +2437,12 @@ void LLIMMgr::onInviteNameLookup(LLSD payload, const LLUUID& id, const std::stri
LLFloaterReg::showInstance("incoming_call", payload, TRUE);
}
+//*TODO disconnects all sessions
void LLIMMgr::disconnectAllSessions()
{
- LLFloaterIMPanel* floater = NULL;
- std::set<LLHandle<LLFloater> >::iterator handle_it;
- for(handle_it = mFloaters.begin();
- handle_it != mFloaters.end();
- )
- {
- floater = (LLFloaterIMPanel*)handle_it->get();
-
- // MUST do this BEFORE calling floater->onClose() because that may remove the item from the set, causing the subsequent increment to crash.
- ++handle_it;
-
- if (floater)
- {
- floater->setEnabled(FALSE);
- floater->closeFloater(TRUE);
- }
- }
-}
-
-
-// This method returns the im panel corresponding to the uuid
-// provided. The uuid can either be a session id or an agent
-// id. Returns NULL if there is no matching panel.
-LLFloaterIMPanel* LLIMMgr::findFloaterBySession(const LLUUID& session_id)
-{
- LLFloaterIMPanel* rv = NULL;
- std::set<LLHandle<LLFloater> >::iterator handle_it;
- for(handle_it = mFloaters.begin();
- handle_it != mFloaters.end();
- ++handle_it)
- {
- rv = (LLFloaterIMPanel*)handle_it->get();
- if(rv && session_id == rv->getSessionID())
- {
- break;
- }
- rv = NULL;
- }
- return rv;
+ //*TODO disconnects all IM sessions
}
-
BOOL LLIMMgr::hasSession(const LLUUID& session_id)
{
return LLIMModel::getInstance()->findIMSession(session_id) != NULL;
@@ -2806,49 +2626,14 @@ bool LLIMMgr::isVoiceCall(const LLUUID& session_id)
return im_session->mStartedAsIMCall;
}
-// create a floater and update internal representation for
-// consistency. Returns the pointer, caller (the class instance since
-// it is a private method) is not responsible for deleting the
-// pointer. Add the floater to this but do not select it.
-LLFloaterIMPanel* LLIMMgr::createFloater(
- const LLUUID& session_id,
- const LLUUID& other_participant_id,
- const std::string& session_label,
- EInstantMessage dialog,
- BOOL user_initiated,
- const LLDynamicArray<LLUUID>& ids)
-{
- if (session_id.isNull())
- {
- llwarns << "Creating LLFloaterIMPanel with null session ID" << llendl;
- }
-
- llinfos << "LLIMMgr::createFloater: from " << other_participant_id
- << " in session " << session_id << llendl;
- LLFloaterIMPanel* floater = new LLFloaterIMPanel(session_label,
- session_id,
- other_participant_id,
- ids,
- dialog);
- LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
- LLFloaterChatterBox::getInstance()->addFloater(floater, FALSE, i_pt);
- mFloaters.insert(floater->getHandle());
- return floater;
-}
-
void LLIMMgr::noteOfflineUsers(
const LLUUID& session_id,
- LLFloaterIMPanel* floater,
const LLDynamicArray<LLUUID>& ids)
{
S32 count = ids.count();
if(count == 0)
{
const std::string& only_user = LLTrans::getString("only_user_message");
- if (floater)
- {
- floater->addHistoryLine(only_user, LLUIColorTable::instance().getColor("SystemChatColor"));
- }
LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, only_user);
}
else
@@ -2872,7 +2657,7 @@ void LLIMMgr::noteOfflineUsers(
}
}
-void LLIMMgr::noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* floater,
+void LLIMMgr::noteMutedUsers(const LLUUID& session_id,
const LLDynamicArray<LLUUID>& ids)
{
// Don't do this if we don't have a mute list.
@@ -2893,9 +2678,6 @@ void LLIMMgr::noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* floater
{
LLUIString muted = LLTrans::getString("muted_message");
- //*TODO remove this "floater" thing when Communicate Floater's gone
- floater->addHistoryLine(muted);
-
im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, muted);
break;
}
@@ -2916,12 +2698,6 @@ void LLIMMgr::processIMTypingStop(const LLIMInfo* im_info)
void LLIMMgr::processIMTypingCore(const LLIMInfo* im_info, BOOL typing)
{
LLUUID session_id = computeSessionID(im_info->mIMType, im_info->mFromID);
- LLFloaterIMPanel* floater = findFloaterBySession(session_id);
- if (floater)
- {
- floater->processIMTyping(im_info, typing);
- }
-
LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
if ( im_floater )
{
@@ -2967,15 +2743,6 @@ public:
speaker_mgr->updateSpeakers(gIMMgr->getPendingAgentListUpdates(session_id));
}
- LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession(session_id);
- if (floaterp)
- {
- if ( body.has("session_info") )
- {
- floaterp->processSessionUpdate(body["session_info"]);
- }
- }
-
LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
if ( im_floater )
{
@@ -3070,11 +2837,6 @@ public:
const LLSD& input) const
{
LLUUID session_id = input["body"]["session_id"].asUUID();
- LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession(session_id);
- if (floaterp)
- {
- floaterp->processSessionUpdate(input["body"]["info"]);
- }
LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);
if ( im_floater )
{
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 0386ff234d..b573490fa3 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -39,9 +39,8 @@
#include "lllogchat.h"
#include "llvoicechannel.h"
-class LLFloaterChatterBox;
-class LLUUID;
-class LLFloaterIMPanel;
+
+
class LLFriendObserver;
class LLCallDialogManager;
class LLIMSpeakerMgr;
@@ -361,15 +360,9 @@ public:
void processIMTypingStart(const LLIMInfo* im_info);
void processIMTypingStop(const LLIMInfo* im_info);
- void notifyNewIM();
- void clearNewIMNotification();
-
// automatically start a call once the session has initialized
void autoStartCallOnStartup(const LLUUID& session_id);
- // IM received that you haven't seen yet
- BOOL getIMReceived() const;
-
// Calc number of all unread IMs
S32 getNumberOfUnreadIM();
@@ -386,11 +379,6 @@ public:
BOOL hasSession(const LLUUID& session_id);
- // This method returns the im panel corresponding to the uuid
- // provided. The uuid must be a session id. Returns NULL if there
- // is no matching panel.
- LLFloaterIMPanel* findFloaterBySession(const LLUUID& session_id);
-
static LLUUID computeSessionID(EInstantMessage dialog, const LLUUID& other_participant_id);
void clearPendingInvitation(const LLUUID& session_id);
@@ -402,10 +390,6 @@ public:
const LLSD& updates);
void clearPendingAgentListUpdates(const LLUUID& session_id);
- //HACK: need a better way of enumerating existing session, or listening to session create/destroy events
- //@deprecated, is used only by LLToolBox, which is not used anywhere, right? (IB)
- const std::set<LLHandle<LLFloater> >& getIMFloaterHandles() { return mFloaters; }
-
void addSessionObserver(LLIMSessionObserver *);
void removeSessionObserver(LLIMSessionObserver *);
@@ -436,23 +420,12 @@ private:
*/
void removeSession(const LLUUID& session_id);
- // create a panel and update internal representation for
- // consistency. Returns the pointer, caller (the class instance
- // since it is a private method) is not responsible for deleting
- // the pointer.
- LLFloaterIMPanel* createFloater(const LLUUID& session_id,
- const LLUUID& target_id,
- const std::string& name,
- EInstantMessage dialog,
- BOOL user_initiated = FALSE,
- const LLDynamicArray<LLUUID>& ids = LLDynamicArray<LLUUID>());
-
// This simple method just iterates through all of the ids, and
// prints a simple message if they are not online. Used to help
// reduce 'hello' messages to the linden employees unlucky enough
// to have their calling card in the default inventory.
- void noteOfflineUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
- void noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
+ void noteOfflineUsers(const LLUUID& session_id, const LLDynamicArray<LLUUID>& ids);
+ void noteMutedUsers(const LLUUID& session_id, const LLDynamicArray<LLUUID>& ids);
void processIMTypingCore(const LLIMInfo* im_info, BOOL typing);
@@ -464,15 +437,9 @@ private:
private:
- //*TODO should be deleted when Communicate Floater is being deleted
- std::set<LLHandle<LLFloater> > mFloaters;
-
typedef std::list <LLIMSessionObserver *> session_observers_list_t;
session_observers_list_t mSessionObservers;
- // An IM has been received that you haven't seen yet.
- BOOL mIMReceived;
-
LLSD mPendingInvitations;
LLSD mPendingAgentListUpdates;
};
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 42bb62ad47..5d3142459a 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -5159,7 +5159,7 @@ void LLLandmarkBridgeAction::doIt()
payload["asset_id"] = item->getAssetUUID();
LLSD args;
- args["LOCATION"] = item->getDisplayName();
+ args["LOCATION"] = item->getName();
LLNotificationsUtil::add("TeleportFromLandmark", args, payload);
}
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index b4dcb566e4..cd20d64ca8 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -39,7 +39,6 @@
#include "llfolderviewitem.h"
#include "llinventorymodel.h" // gInventory.backgroundFetchActive()
#include "llviewercontrol.h"
-#include "llviewerinventory.h"
#include "llfolderview.h"
// linden library includes
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index b2b3e4f1a3..90c611cb76 100644
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -76,7 +76,6 @@
#include "lltabcontainer.h"
#include "lltooldraganddrop.h"
#include "lluictrlfactory.h"
-#include "llviewerinventory.h"
#include "llviewermessage.h"
#include "llviewerobjectlist.h"
#include "llviewerregion.h"
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 961f7adc0a..bdf1ebddac 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -142,6 +142,105 @@ bool LLCanCache::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
return rv;
}
+/*
+This namespace contains a functionality to remove LM prefixes were used to store sort order of
+Favorite Landmarks in landmarks' names.
+Once being in Favorites folder LM inventory Item has such prefix.
+Due to another solution is implemented in EXT-3985 these prefixes should be removed.
+
+*NOTE: It will be unnecessary after the first successful session in viewer 2.0.
+Can be removed before public release.
+
+Implementation details:
+At the first run with this patch it patches all cached landmarks: removes LM sort prefixes and
+updates them on the viewer and server sides.
+Also it calls fetching agent's inventory to process not yet loaded landmarks too.
+If fetching is successfully done it will store special per-agent empty file-marker
+in the user temporary folder (where cached inventory is loaded) while caching agent's inventory.
+After that in will not affect the viewer until cached marker is removed.
+*/
+namespace LMSortPrefix
+{
+ bool cleanup_done = false;
+ const std::string getMarkerPath()
+ {
+ std::string path(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, gAgentID.asString()));
+ std::string marker_filename = llformat("%s-lm_prefix_marker", path.c_str());
+
+ return marker_filename;
+ }
+ bool wasClean()
+ {
+ static bool was_clean = false;
+ static bool already_init = false;
+ if (already_init) return was_clean;
+
+ already_init = true;
+ std::string path_to_marker = getMarkerPath();
+ was_clean = LLFile::isfile(path_to_marker);
+
+ return was_clean;
+ }
+
+ void setLandmarksWereCleaned()
+ {
+ if (cleanup_done)
+ {
+ std::string path_to_marker = getMarkerPath();
+ LLFILE* file = LLFile::fopen(path_to_marker, "w");
+ if(!file)
+ {
+ llwarns << "unable to save marker that LM prefixes were removed: " << path_to_marker << llendl;
+ return;
+ }
+
+ fclose(file);
+ }
+ }
+
+ void removePrefix(LLPointer<LLViewerInventoryItem> inv_item)
+ {
+ if (wasClean())
+ {
+ LL_INFOS_ONCE("") << "Inventory was cleaned for this avatar. Patch can be removed." << LL_ENDL;
+ return;
+ }
+
+ if (LLInventoryType::IT_LANDMARK != inv_item->getInventoryType()) return;
+
+ std::string old_name = inv_item->getName();
+
+ S32 sort_field = -1;
+ std::string display_name;
+ BOOL exists = LLViewerInventoryItem::extractSortFieldAndDisplayName(old_name, &sort_field, &display_name);
+ if (exists && sort_field != -1)
+ {
+ llinfos << "Removing Landmark sort field and separator for: " << old_name << " | " << inv_item->getUUID() << llendl;
+ LLUUID parent_uuid = inv_item->getParentUUID();
+ if (gInventory.getCategory(parent_uuid))
+ {
+ llinfos << "parent folder is: " << gInventory.getCategory(parent_uuid)->getName() << llendl;
+ }
+
+
+ // mark item completed to avoid error while copying and updating server
+ inv_item->setComplete(TRUE);
+ LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(inv_item.get());
+ new_item->rename(display_name);
+ gInventory.updateItem(new_item);
+ new_item->updateServer(FALSE);
+
+ gInventory.notifyObservers();
+ }
+ }
+
+ void completeCleanup()
+ {
+ // background fetch is completed. can save marker
+ cleanup_done = true;
+ }
+}
+
///----------------------------------------------------------------------------
/// Class LLInventoryModel
///----------------------------------------------------------------------------
@@ -1736,6 +1835,8 @@ void LLInventoryModel::stopBackgroundFetch()
gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL);
sBulkFetchCount=0;
sMinTimeBetweenFetches=0.0f;
+
+ LMSortPrefix::completeCleanup();
}
}
@@ -1882,6 +1983,13 @@ void LLInventoryModel::cache(
const LLUUID& parent_folder_id,
const LLUUID& agent_id)
{
+ if (getRootFolderID() == parent_folder_id)
+ {
+ // *TODO: mantipov: can be removed before public release, EXT-3985
+ //save marker to avoid fetching inventory on future sessions
+ LMSortPrefix::setLandmarksWereCleaned();
+ }
+
lldebugs << "Caching " << parent_folder_id << " for " << agent_id
<< llendl;
LLViewerInventoryCategory* root_cat = getCategory(parent_folder_id);
@@ -2692,6 +2800,28 @@ void LLInventoryModel::buildParentChildMap()
// The inv tree is built.
mIsAgentInvUsable = true;
+ {// *TODO: mantipov: can be removed before public release, EXT-3985
+ /*
+ *HACK: mantipov: to cleanup landmarks were marked with sort index prefix in name.
+ Is necessary to be called once per account after EXT-3985 is implemented.
+ So, let fetch agent's inventory, processing will be done in processInventoryDescendents()
+ Should be removed before public release.
+ */
+ if (!LMSortPrefix::wasClean())
+ {
+ cat_array_t cats;
+ item_array_t items;
+ collectDescendents(agent_inv_root_id, cats, items, INCLUDE_TRASH);
+
+ for (item_array_t::const_iterator it= items.begin(); it != items.end(); ++it)
+ {
+ LMSortPrefix::removePrefix(*it);
+ }
+
+ gInventory.startBackgroundFetch(agent_inv_root_id);
+ }
+ }
+
llinfos << "Inventory initialized, notifying observers" << llendl;
addChangedMask(LLInventoryObserver::ALL, LLUUID::null);
notifyObservers();
@@ -3457,6 +3587,10 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)
continue;
}
gInventory.updateItem(titem);
+
+ {// *TODO: mantipov: can be removed before public release, EXT-3985
+ LMSortPrefix::removePrefix(titem);
+ }
}
// set version and descendentcount according to message.
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 7e71ac90b4..12a2c370d2 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -759,7 +759,9 @@ bool LLInventoryPanel::beginIMSession()
S32 count = item_array.count();
if(count > 0)
{
- LLFloaterReg::showInstance("communicate");
+ //*TODO by what to replace that?
+ //LLFloaterReg::showInstance("communicate");
+
// create the session
LLAvatarTracker& at = LLAvatarTracker::instance();
LLUUID id;
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 5981baab60..4bf2bac649 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -651,6 +651,9 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view)
// Detach from movement controls.
parent->removeChild(this);
mOriginalParent.get()->addChild(this);
+ // update parent with self visibility (it is changed in setVisible()). EXT-4743
+ mOriginalParent.get()->setVisible(getVisible());
+
mAttached = false;
updatePosition(); // don't defer until next draw() to avoid flicker
}
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index c1666f5666..2d3c4b187e 100644
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -58,7 +58,6 @@
#include "llagent.h"
#include "llviewergenericmessage.h" // for gGenericDispatcher
#include "llworld.h" //for particle system banning
-#include "llimpanel.h"
#include "llimview.h"
#include "llnotifications.h"
#include "llviewerobjectlist.h"
@@ -472,12 +471,6 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n
if (reason == LLMuteList::AR_IM)
{
- LLFloaterIMPanel *timp = gIMMgr->findFloaterBySession(agent_id);
- if (timp)
- {
- timp->addHistoryLine(message);
- }
-
LLIMModel::getInstance()->addMessage(agent_id, SYSTEM_FROM, LLUUID::null, message);
}
}
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 6cf8bcb417..ad98a29fb2 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -97,9 +97,9 @@ LLGestureComboList::LLGestureComboList(const LLGestureComboList::Params& p)
mList = LLUICtrlFactory::create<LLScrollListCtrl>(params);
- // *HACK: adding list as a child to NonSideTrayView to make it fully visible without
+ // *HACK: adding list as a child to FloaterViewHolder to make it fully visible without
// making it top control (because it would cause problems).
- gViewerWindow->getNonSideTrayView()->addChild(mList);
+ gViewerWindow->getFloaterViewHolder()->addChild(mList);
mList->setVisible(FALSE);
//****************************Gesture Part********************************/
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index e57674d31c..5f4768e321 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -277,6 +277,11 @@ public:
static bool canSpawnIMSession(const LLNotificationPtr& notification);
/**
+ * Checks sufficient conditions to add notification toast panel IM floater.
+ */
+ static bool canAddNotifPanelToIM(const LLNotificationPtr& notification);
+
+ /**
* Checks if passed notification can create IM session and be written into it.
*
* This method uses canLogToIM() & canSpawnIMSession().
@@ -297,6 +302,11 @@ public:
static void logToIMP2P(const LLNotificationPtr& notification);
/**
+ * Writes notification message to IM p2p session.
+ */
+ static void logToIMP2P(const LLNotificationPtr& notification, bool to_file_only);
+
+ /**
* Writes group notice notification message to IM group session.
*/
static void logGroupNoticeToIMGroup(const LLNotificationPtr& notification);
@@ -309,7 +319,7 @@ public:
/**
* Spawns IM session.
*/
- static void spawnIMSession(const std::string& name, const LLUUID& from_id);
+ static LLUUID spawnIMSession(const std::string& name, const LLUUID& from_id);
/**
* Returns name from the notification's substitution.
@@ -319,6 +329,16 @@ public:
* @param notification - Notification which substitution's name will be returned.
*/
static std::string getSubstitutionName(const LLNotificationPtr& notification);
+
+ /**
+ * Adds notification panel to the IM floater.
+ */
+ static void addNotifPanelToIM(const LLNotificationPtr& notification);
+
+ /**
+ * Reloads IM floater messages.
+ */
+ static void reloadIMFloaterMessages(const LLNotificationPtr& notification);
};
}
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 02f948eca9..16218f6d53 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -39,6 +39,7 @@
#include "llagent.h"
#include "llfloaterreg.h"
#include "llnearbychat.h"
+#include "llimfloater.h"
using namespace LLNotificationsUI;
@@ -91,6 +92,13 @@ bool LLHandlerUtil::canSpawnIMSession(const LLNotificationPtr& notification)
}
// static
+bool LLHandlerUtil::canAddNotifPanelToIM(const LLNotificationPtr& notification)
+{
+ return OFFER_FRIENDSHIP == notification->getName();
+}
+
+
+// static
bool LLHandlerUtil::canSpawnSessionAndLogToIM(const LLNotificationPtr& notification)
{
return canLogToIM(notification) && canSpawnIMSession(notification);
@@ -137,6 +145,12 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type,
// static
void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)
{
+ logToIMP2P(notification, false);
+}
+
+// static
+void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_file_only)
+{
const std::string name = LLHandlerUtil::getSubstitutionName(notification);
const std::string session_name = notification->getPayload().has(
@@ -148,8 +162,16 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)
{
LLUUID from_id = notification->getPayload()["from_id"];
- logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(),
- from_id, from_id);
+ if(to_file_only)
+ {
+ logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(),
+ LLUUID(), LLUUID());
+ }
+ else
+ {
+ logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(),
+ from_id, from_id);
+ }
}
}
@@ -191,7 +213,7 @@ void LLHandlerUtil::logToNearbyChat(const LLNotificationPtr& notification, EChat
}
// static
-void LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from_id)
+LLUUID LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from_id)
{
LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, from_id);
@@ -199,8 +221,10 @@ void LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from_i
session_id);
if (session == NULL)
{
- LLIMMgr::instance().addSession(name, IM_NOTHING_SPECIAL, from_id);
+ session_id = LLIMMgr::instance().addSession(name, IM_NOTHING_SPECIAL, from_id);
}
+
+ return session_id;
}
// static
@@ -210,3 +234,49 @@ std::string LLHandlerUtil::getSubstitutionName(const LLNotificationPtr& notifica
? notification->getSubstitutions()["NAME"]
: notification->getSubstitutions()["[NAME]"];
}
+
+// static
+void LLHandlerUtil::addNotifPanelToIM(const LLNotificationPtr& notification)
+{
+ const std::string name = LLHandlerUtil::getSubstitutionName(notification);
+ LLUUID from_id = notification->getPayload()["from_id"];
+
+ LLUUID session_id = spawnIMSession(name, from_id);
+ // add offer to session
+ LLIMModel::LLIMSession * session = LLIMModel::getInstance()->findIMSession(
+ session_id);
+ llassert_always(session != NULL);
+
+ LLSD offer;
+ offer["notification_id"] = notification->getID();
+ offer["from_id"] = notification->getPayload()["from_id"];
+ offer["from"] = name;
+ offer["time"] = LLLogChat::timestamp(true);
+ session->mMsgs.push_front(offer);
+
+ LLIMFloater::show(session_id);
+}
+
+// static
+void LLHandlerUtil::reloadIMFloaterMessages(
+ const LLNotificationPtr& notification)
+{
+ LLUUID from_id = notification->getPayload()["from_id"];
+ LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, from_id);
+ LLIMFloater* im_floater = LLFloaterReg::findTypedInstance<LLIMFloater>(
+ "impanel", session_id);
+ if (im_floater != NULL)
+ {
+ LLIMModel::LLIMSession * session = LLIMModel::getInstance()->findIMSession(
+ session_id);
+ if(session != NULL)
+ {
+ session->mMsgs.clear();
+ std::list<LLSD> chat_history;
+ LLLogChat::loadAllHistory(session->mHistoryFileName, chat_history);
+ session->addMessagesFromHistory(chat_history);
+ }
+
+ im_floater->reloadMessages();
+ }
+}
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index fad0c6a91e..8c13b0fafa 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -93,7 +93,7 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
{
- LLHandlerUtil::logToIMP2P(notification);
+
if( notification->getPayload().has("give_inventory_notification")
&& !notification->getPayload()["give_inventory_notification"] )
@@ -103,18 +103,25 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
}
else
{
+ LLUUID session_id;
if (LLHandlerUtil::canSpawnIMSession(notification))
{
const std::string name = LLHandlerUtil::getSubstitutionName(notification);
LLUUID from_id = notification->getPayload()["from_id"];
- LLHandlerUtil::spawnIMSession(name, from_id);
+ session_id = LLHandlerUtil::spawnIMSession(name, from_id);
}
- if (notification->getPayload().has("SUPPRESS_TOAST")
+ if (LLHandlerUtil::canAddNotifPanelToIM(notification))
+ {
+ LLHandlerUtil::addNotifPanelToIM(notification);
+ LLHandlerUtil::logToIMP2P(notification, true);
+ }
+ else if (notification->getPayload().has("SUPPRESS_TOAST")
&& notification->getPayload()["SUPPRESS_TOAST"])
{
+ LLHandlerUtil::logToIMP2P(notification);
LLNotificationsUtil::cancel(notification);
}
else
@@ -131,6 +138,8 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
if(channel)
channel->addToast(p);
+ LLHandlerUtil::logToIMP2P(notification);
+
// send a signal to the counter manager
mNewNotificationSignal();
}
@@ -146,6 +155,10 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
}
else
{
+ if (LLHandlerUtil::canAddNotifPanelToIM(notification))
+ {
+ LLHandlerUtil::reloadIMFloaterMessages(notification);
+ }
mChannel->killToastByNotificationID(notification->getID());
}
}
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index 9d591ef43d..2a7d097f94 100644
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -50,7 +50,6 @@
// project includes
#include "llagent.h"
-#include "llfloaterbulkpermission.h"
#include "llpanelobjectinventory.h"
#include "llpreviewscript.h"
#include "llresmgr.h"
@@ -60,6 +59,7 @@
#include "lltoolmgr.h"
#include "lltrans.h"
#include "llviewerassettype.h"
+#include "llviewerinventory.h"
#include "llviewerobject.h"
#include "llviewerregion.h"
#include "llviewerwindow.h"
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 21b253223f..51fc670d87 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -679,6 +679,7 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
LLSD row;
row["columns"][0]["value"] = pending.str();
+ row["columns"][0]["column"] = "name";
mListVisibleMembers->setEnabled(FALSE);
mListVisibleMembers->addElement(row);
@@ -731,9 +732,11 @@ void LLPanelGroupGeneral::updateMembers()
row["columns"][1]["value"] = member->getTitle();
row["columns"][1]["font"]["name"] = "SANSSERIF_SMALL";
row["columns"][1]["font"]["style"] = style;
+
+ std::string status = member->getOnlineStatus();
- row["columns"][2]["column"] = "online";
- row["columns"][2]["value"] = member->getOnlineStatus();
+ row["columns"][2]["column"] = "status";
+ row["columns"][2]["value"] = status;
row["columns"][2]["font"]["name"] = "SANSSERIF_SMALL";
row["columns"][2]["font"]["style"] = style;
@@ -846,6 +849,7 @@ void LLPanelGroupGeneral::reset()
{
LLSD row;
row["columns"][0]["value"] = "no members yet";
+ row["columns"][0]["column"] = "name";
mListVisibleMembers->deleteAllItems();
mListVisibleMembers->setEnabled(FALSE);
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
index 775f6f154b..516020797d 100644
--- a/indra/newview/llpanelgroupnotices.cpp
+++ b/indra/newview/llpanelgroupnotices.cpp
@@ -615,7 +615,7 @@ void LLPanelGroupNotices::showNotice(const std::string& subject,
mViewInventoryIcon->setVisible(TRUE);
std::stringstream ss;
- ss << " " << LLViewerInventoryItem::getDisplayName(inventory_name);
+ ss << " " << inventory_name;
mViewInventoryName->setText(ss.str());
mBtnOpenAttachment->setEnabled(TRUE);
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
index 7a17d4a1f0..36a542cfa0 100644
--- a/indra/newview/llpanellandmarkinfo.cpp
+++ b/indra/newview/llpanellandmarkinfo.cpp
@@ -367,7 +367,6 @@ void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id)
}
LLStringUtil::replaceChar(desc, '\n', ' ');
- LLViewerInventoryItem::insertDefaultSortField(name);
// If no folder chosen use the "Landmarks" folder.
LLLandmarkActions::createLandmarkHere(name, desc,
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index 501dac5dff..470cfca8fe 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -61,7 +61,14 @@ ContextMenu::~ContextMenu()
// It can have registered Enable callbacks which are called from the LLMenuHolderGL::draw()
// via selected item (menu_item_call) by calling LLMenuItemCallGL::buildDrawLabel.
// we can have a crash via using callbacks of deleted instance of ContextMenu. EXT-4725
- if (mMenu) mMenu->die();
+
+ // menu holder deletes its menus on viewer exit, so we have no way to determine if instance
+ // of mMenu has already been deleted except of using LLHandle. EXT-4762.
+ if (!mMenuHandle.isDead())
+ {
+ mMenu->die();
+ mMenu = NULL;
+ }
}
void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y)
@@ -86,6 +93,7 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids,
std::copy(uuids.begin(), uuids.end(), mUUIDs.begin());
mMenu = createMenu();
+ mMenuHandle = mMenu->getHandle();
mMenu->show(x, y);
LLMenuGL::showPopup(spawning_view, mMenu, x, y);
}
diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h
index 7251f6dbbd..913638d8c8 100644
--- a/indra/newview/llpanelpeoplemenus.h
+++ b/indra/newview/llpanelpeoplemenus.h
@@ -62,6 +62,7 @@ protected:
std::vector<LLUUID> mUUIDs;
LLContextMenu* mMenu;
+ LLHandle<LLView> mMenuHandle;
};
/**
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 6005881148..43e0f9a88c 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -46,7 +46,6 @@
#include "llnotificationsutil.h"
#include "lltextbox.h"
#include "llviewermenu.h"
-#include "llviewerinventory.h"
#include "lllandmarkactions.h"
#include "llclipboard.h"
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
index 84bdaafacf..53e351e66e 100644
--- a/indra/newview/llpreviewgesture.cpp
+++ b/indra/newview/llpreviewgesture.cpp
@@ -155,6 +155,12 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob
return preview;
}
+void LLPreviewGesture::draw()
+{
+ // Skip LLPreview::draw() to avoid description update
+ LLFloater::draw();
+}
+
// virtual
BOOL LLPreviewGesture::handleKeyHere(KEY key, MASK mask)
{
@@ -497,11 +503,9 @@ BOOL LLPreviewGesture::postBuild()
if (item)
{
- childSetCommitCallback("desc", LLPreview::onText, this);
childSetText("desc", item->getDescription());
childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe);
- childSetCommitCallback("name", LLPreview::onText, this);
childSetText("name", item->getName());
childSetPrevalidate("name", &LLLineEditor::prevalidateASCIIPrintableNoPipe);
}
@@ -1077,6 +1081,8 @@ void LLPreviewGesture::saveIfNeeded()
}
else
{
+ LLPreview::onCommit();
+
// Every save gets a new UUID. Yup.
LLTransactionID tid;
LLAssetID asset_id;
diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h
index 19fa1dcc37..5968e936ef 100644
--- a/indra/newview/llpreviewgesture.h
+++ b/indra/newview/llpreviewgesture.h
@@ -60,6 +60,7 @@ public:
virtual ~LLPreviewGesture();
// LLView
+ /*virtual*/ void draw();
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);
/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
index 56e342c3ce..f51462dcce 100644
--- a/indra/newview/llsidepanelinventorysubpanel.cpp
+++ b/indra/newview/llsidepanelinventorysubpanel.cpp
@@ -44,7 +44,6 @@
#include "lllineeditor.h"
#include "llradiogroup.h"
#include "llviewercontrol.h"
-#include "llviewerinventory.h"
#include "llviewerobjectlist.h"
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index e49044cdca..add61c00cf 100644
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -127,17 +127,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification
pAttachLink->setVisible(hasInventory);
pAttachIcon->setVisible(hasInventory);
if (hasInventory) {
- std::string dis_name;
- std::string inv_name = payload["inventory_name"];
-
- if (LLViewerInventoryItem::extractSortFieldAndDisplayName(inv_name, NULL, &dis_name))
- {
- pAttachLink->setValue(dis_name);
- }
- else
- {
- pAttachLink->setValue(inv_name);
- }
+ pAttachLink->setValue(payload["inventory_name"]);
mInventoryOffer = new LLOfferInfo(payload["inventory_offer"]);
childSetActionTextbox("attachment", boost::bind(
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index 89a58cd736..a436dc0546 100644
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -33,7 +33,10 @@
#include "llviewerprecompiledheaders.h"
#include "lltoastimpanel.h"
+#include "llagent.h"
#include "llfloaterreg.h"
+#include "llgroupactions.h"
+#include "llgroupiconctrl.h"
#include "llnotifications.h"
#include "llinstantmessage.h"
#include "lltooltip.h"
@@ -45,11 +48,12 @@ const S32 LLToastIMPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT = 6;
//--------------------------------------------------------------------------
LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notification),
mAvatarIcon(NULL), mAvatarName(NULL),
- mTime(NULL), mMessage(NULL)
+ mTime(NULL), mMessage(NULL), mGroupIcon(NULL)
{
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml");
LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon");
+ mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");
mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon");
mAvatarName = getChild<LLTextBox>("user_name");
mTime = getChild<LLTextBox>("time_box");
@@ -86,17 +90,26 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif
mAvatarID = p.avatar_id;
mNotification = p.notification;
+ mAvatarIcon->setVisible(FALSE);
+ mGroupIcon->setVisible(FALSE);
+ sys_msg_icon->setVisible(FALSE);
+
if(p.from == SYSTEM_FROM)
{
- mAvatarIcon->setVisible(FALSE);
sys_msg_icon->setVisible(TRUE);
}
else
{
- mAvatarIcon->setVisible(TRUE);
- sys_msg_icon->setVisible(FALSE);
-
- mAvatarIcon->setValue(p.avatar_id);
+ if(LLGroupActions::isInGroup(mSessionID))
+ {
+ mGroupIcon->setVisible(TRUE);
+ mGroupIcon->setValue(p.session_id);
+ }
+ else
+ {
+ mAvatarIcon->setVisible(TRUE);
+ mAvatarIcon->setValue(p.avatar_id);
+ }
}
S32 maxLinesCount;
@@ -128,11 +141,39 @@ BOOL LLToastIMPanel::handleMouseDown(S32 x, S32 y, MASK mask)
BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask)
{
// It's not our direct child, so parentPointInView() doesn't work.
- LLRect name_rect;
- mAvatarName->localRectToOtherView(mAvatarName->getLocalRect(), &name_rect, this);
- if (!name_rect.pointInRect(x, y))
- return LLToastPanel::handleToolTip(x, y, mask);
+ LLRect ctrl_rect;
+
+ mAvatarName->localRectToOtherView(mAvatarName->getLocalRect(), &ctrl_rect, this);
+ if (ctrl_rect.pointInRect(x, y))
+ {
+ spawnNameToolTip();
+ return TRUE;
+ }
+
+ mGroupIcon->localRectToOtherView(mGroupIcon->getLocalRect(), &ctrl_rect, this);
+ if(mGroupIcon->getVisible() && ctrl_rect.pointInRect(x, y))
+ {
+ spawnGroupIconToolTip();
+ return TRUE;
+ }
+
+ return LLToastPanel::handleToolTip(x, y, mask);
+}
+
+void LLToastIMPanel::showInspector()
+{
+ if(LLGroupActions::isInGroup(mSessionID))
+ {
+ LLFloaterReg::showInstance("inspect_group", LLSD().with("group_id", mSessionID));
+ }
+ else
+ {
+ LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID));
+ }
+}
+void LLToastIMPanel::spawnNameToolTip()
+{
// Spawn at right side of the name textbox.
LLRect sticky_rect = mAvatarName->calcScreenRect();
S32 icon_x = llmin(sticky_rect.mLeft + mAvatarName->getTextPixelWidth() + 3, sticky_rect.mRight - 16);
@@ -149,10 +190,31 @@ BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask)
params.sticky_rect(sticky_rect);
LLToolTipMgr::getInstance()->show(params);
- return TRUE;
}
-void LLToastIMPanel::showInspector()
+void LLToastIMPanel::spawnGroupIconToolTip()
{
- LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID));
+ // Spawn at right bottom side of group icon.
+ LLRect sticky_rect = mGroupIcon->calcScreenRect();
+ LLCoordGL pos(sticky_rect.mRight, sticky_rect.mBottom);
+
+ LLGroupData g_data;
+ if(!gAgent.getGroupData(mSessionID, g_data))
+ {
+ llwarns << "Error getting group data" << llendl;
+ }
+
+ LLInspector::Params params;
+ params.fillFrom(LLUICtrlFactory::instance().getDefaultParams<LLInspector>());
+ params.click_callback(boost::bind(&LLToastIMPanel::showInspector, this));
+ params.delay_time(0.100f);
+ params.image(LLUI::getUIImage("Info_Small"));
+ params.message(g_data.mName);
+ params.padding(3);
+ params.pos(pos);
+ params.max_width(300);
+
+ LLToolTipMgr::getInstance()->show(params);
}
+
+// EOF
diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h
index 154e6dae16..444c0af144 100644
--- a/indra/newview/lltoastimpanel.h
+++ b/indra/newview/lltoastimpanel.h
@@ -39,6 +39,7 @@
#include "llbutton.h"
#include "llavatariconctrl.h"
+class LLGroupIconCtrl;
class LLToastIMPanel: public LLToastPanel
{
@@ -61,12 +62,17 @@ public:
/*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask);
private:
void showInspector();
+
+ void spawnNameToolTip();
+ void spawnGroupIconToolTip();
+
static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;
LLNotificationPtr mNotification;
LLUUID mSessionID;
LLUUID mAvatarID;
LLAvatarIconCtrl* mAvatarIcon;
+ LLGroupIconCtrl* mGroupIcon;
LLTextBox* mAvatarName;
LLTextBox* mTime;
LLTextBox* mMessage;
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 94acb2ae8c..4d741456c4 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -43,6 +43,7 @@
#include "lluiconstants.h"
#include "llrect.h"
#include "lltrans.h"
+#include "llnotificationsutil.h"
const S32 BOTTOM_PAD = VPAD * 3;
S32 BUTTON_WIDTH = 90;
@@ -235,6 +236,10 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt
LLToastNotifyPanel::~LLToastNotifyPanel()
{
std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer());
+ if (LLNotificationsUtil::find(mNotification->getID()) != NULL)
+ {
+ LLNotifications::getInstance()->cancel(mNotification);
+ }
}
void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 left_pad, S32 top)
{
diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp
index e7dc7ae522..404eab9249 100644
--- a/indra/newview/lltoolbar.cpp
+++ b/indra/newview/lltoolbar.cpp
@@ -54,7 +54,6 @@
#include "lltooldraganddrop.h"
#include "llfloaterinventory.h"
#include "llfloaterchatterbox.h"
-#include "llfloaterfriends.h"
#include "llfloatersnapshot.h"
#include "llinventorypanel.h"
#include "lltoolmgr.h"
@@ -70,7 +69,6 @@
#include "llviewerwindow.h"
#include "lltoolgrab.h"
#include "llcombobox.h"
-#include "llimpanel.h"
#include "lllayoutstack.h"
#if LL_DARWIN
@@ -265,12 +263,12 @@ void LLToolBar::updateCommunicateList()
communicate_button->removeall();
- LLFloater* frontmost_floater = LLFloaterChatterBox::getInstance()->getActiveFloater();
+ //LLFloater* frontmost_floater = LLFloaterChatterBox::getInstance()->getActiveFloater();
LLScrollListItem* itemp = NULL;
LLSD contact_sd;
contact_sd["value"] = "contacts";
- contact_sd["columns"][0]["value"] = LLFloaterMyFriends::getInstance()->getShortTitle();
+ /*contact_sd["columns"][0]["value"] = LLFloaterMyFriends::getInstance()->getShortTitle();
if (LLFloaterMyFriends::getInstance() == frontmost_floater)
{
contact_sd["columns"][0]["font"]["name"] = "SANSSERIF_SMALL";
@@ -280,7 +278,7 @@ void LLToolBar::updateCommunicateList()
{
selected = "contacts";
}
- }
+ }*/
itemp = communicate_button->addElement(contact_sd, ADD_TOP);
communicate_button->addSeparator(ADD_TOP);
@@ -290,7 +288,7 @@ void LLToolBar::updateCommunicateList()
std::set<LLHandle<LLFloater> >::const_iterator floater_handle_it;
- if (gIMMgr->getIMFloaterHandles().size() > 0)
+ /*if (gIMMgr->getIMFloaterHandles().size() > 0)
{
communicate_button->addSeparator(ADD_TOP);
}
@@ -316,7 +314,7 @@ void LLToolBar::updateCommunicateList()
}
itemp = communicate_button->addElement(im_sd, ADD_TOP);
}
- }
+ }*/
communicate_button->setValue(selected);
}
@@ -340,7 +338,7 @@ void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data)
}
else if (selected_option.asString() == "redock")
{
- LLFloaterChatterBox* chatterbox_instance = LLFloaterChatterBox::getInstance();
+ /*LLFloaterChatterBox* chatterbox_instance = LLFloaterChatterBox::getInstance();
if(chatterbox_instance)
{
chatterbox_instance->addFloater(LLFloaterMyFriends::getInstance(), FALSE);
@@ -361,7 +359,7 @@ void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data)
}
}
LLFloaterReg::showInstance("communicate", session_to_show);
- }
+ }*/
}
else if (selected_option.asString() == "mute list")
{
@@ -369,11 +367,11 @@ void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data)
}
else if (selected_option.isUndefined()) // user just clicked the communicate button, treat as toggle
{
- LLFloaterReg::toggleInstance("communicate");
+ /*LLFloaterReg::toggleInstance("communicate");*/
}
else // otherwise selection_option is undifined or a specific IM session id
{
- LLFloaterReg::showInstance("communicate", selected_option);
+ /*LLFloaterReg::showInstance("communicate", selected_option);*/
}
}
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 39e71974fd..bf1e307d71 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -910,16 +910,19 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
tooltip_msg.append( nodep->mName );
}
+ bool has_media = false;
bool is_time_based_media = false;
bool is_web_based_media = false;
bool is_media_playing = false;
+ bool is_media_displaying = false;
// Does this face have media?
const LLTextureEntry* tep = hover_object->getTE(mHoverPick.mObjectFace);
if(tep)
{
- const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;
+ has_media = tep->hasMedia();
+ const LLMediaEntry* mep = has_media ? tep->getMediaData() : NULL;
if (mep)
{
viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());
@@ -927,33 +930,38 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
if (media_impl.notNull() && (media_impl->hasMedia()))
{
+ is_media_displaying = true;
LLStringUtil::format_map_t args;
media_plugin = media_impl->getMediaPlugin();
if(media_plugin)
- { if(media_plugin->pluginSupportsMediaTime())
- {
- is_time_based_media = true;
- is_web_based_media = false;
- //args["[CurrentURL]"] = media_impl->getMediaURL();
- is_media_playing = media_impl->isMediaPlaying();
- }
- else
- {
- is_time_based_media = false;
- is_web_based_media = true;
- //args["[CurrentURL]"] = media_plugin->getLocation();
- }
+ {
+ if(media_plugin->pluginSupportsMediaTime())
+ {
+ is_time_based_media = true;
+ is_web_based_media = false;
+ //args["[CurrentURL]"] = media_impl->getMediaURL();
+ is_media_playing = media_impl->isMediaPlaying();
+ }
+ else
+ {
+ is_time_based_media = false;
+ is_web_based_media = true;
+ //args["[CurrentURL]"] = media_plugin->getLocation();
+ }
//tooltip_msg.append(LLTrans::getString("CurrentURL", args));
}
}
}
}
+ // Avoid showing tip over media that's displaying
// also check the primary node since sometimes it can have an action even though
// the root node doesn't
- bool needs_tip = needs_tooltip(nodep) ||
- needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode());
+ bool needs_tip = !is_media_displaying &&
+ (has_media ||
+ needs_tooltip(nodep) ||
+ needs_tooltip(LLSelectMgr::getInstance()->getPrimaryHoverNode()));
if (show_all_object_tips || needs_tip)
{
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 57434bd1e4..64eabe65cf 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -63,7 +63,6 @@
#include "llviewerjoystick.h"
#include "llviewerparcelmgr.h"
#include "llparcel.h"
-#include "lloverlaybar.h"
#include "llkeyboard.h"
#include "llerrorcontrol.h"
#include "llappviewer.h"
@@ -257,35 +256,6 @@ static bool handleJoystickChanged(const LLSD& newvalue)
return true;
}
-static bool handleAudioStreamMusicChanged(const LLSD& newvalue)
-{
- if (gAudiop)
- {
- if ( newvalue.asBoolean() )
- {
- if (LLViewerParcelMgr::getInstance()->getAgentParcel()
- && !LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL().empty())
- {
- // if music isn't playing, start it
- if (gOverlayBar && !gOverlayBar->musicPlaying())
- {
- LLOverlayBar::toggleMusicPlay(NULL);
- }
- }
- }
- else
- {
- // if music is playing, stop it.
- if (gOverlayBar && gOverlayBar->musicPlaying())
- {
- LLOverlayBar::toggleMusicPlay(NULL);
- }
-
- }
- }
- return true;
-}
-
static bool handleUseOcclusionChanged(const LLSD& newvalue)
{
LLPipeline::sUseOcclusion = (newvalue.asBoolean() && gGLManager.mHasOcclusionQuery
@@ -592,7 +562,6 @@ void settings_setup_listeners()
gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
- gSavedSettings.getControl("AudioStreamingMusic")->getSignal()->connect(boost::bind(&handleAudioStreamMusicChanged, _2));
gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index 2d9e2ef7c9..f78ca6b190 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -54,7 +54,6 @@
#include "llfloaterbulkpermission.h"
#include "llfloaterbump.h"
#include "llfloatercamera.h"
-#include "llfloaterchatterbox.h"
#include "llfloaterdaycycle.h"
#include "llfloatersearch.h"
#include "llfloaterenvsettings.h"
@@ -69,7 +68,6 @@
#include "llfloaterhud.h"
#include "llfloaterimagepreview.h"
#include "llimfloater.h"
-#include "llimpanel.h"
#include "llfloaterinspect.h"
#include "llfloaterinventory.h"
#include "llfloaterimportcollada.h"
@@ -117,7 +115,6 @@
#include "llinspectobject.h"
#include "llinspectremoteobject.h"
#include "llinspecttoast.h"
-#include "llmediaremotectrl.h"
#include "llmoveview.h"
#include "llnearbychat.h"
#include "llpanelblockedlist.h"
@@ -158,9 +155,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);
//LLFloaterReg::add("chat", "floater_chat_history.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChat>);
LLFloaterReg::add("nearby_chat", "floater_nearby_chat.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNearbyChat>);
- LLFloaterReg::add("communicate", "floater_chatterbox.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChatterBox>);
+
LLFloaterReg::add("compile_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCompileQueue>);
- LLFloaterReg::add("contacts", "floater_my_friends.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMyFriends>);
LLFloaterReg::add("env_day_cycle", "floater_day_cycle_options.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDayCycle>);
LLFloaterReg::add("env_post_process", "floater_post_process.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostProcess>);
@@ -270,8 +266,5 @@ void LLViewerFloaterReg::registerFloaters()
// *NOTE: Please keep these alphabetized for easier merges
- // debug use only
- LLFloaterReg::add("media_remote_ctrl", "floater_media_remote.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMediaRemoteCtrl>);
-
LLFloaterReg::registerControlVariables(); // Make sure visibility and rect controls get preserved when saving
}
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index b330c1ba83..3001992630 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -34,6 +34,7 @@
#include "llviewerinventory.h"
#include "llnotificationsutil.h"
+#include "llsdserialize.h"
#include "message.h"
#include "indra_constants.h"
@@ -1171,81 +1172,196 @@ const std::string& LLViewerInventoryItem::getName() const
return linked_category->getName();
}
- return getDisplayName();
+ return LLInventoryItem::getName();
}
-const std::string& LLViewerInventoryItem::getDisplayName() const
+/**
+ * Class to store sorting order of favorites landmarks in a local file. EXT-3985.
+ * It replaced previously implemented solution to store sort index in landmark's name as a "<N>@" prefix.
+ * Data are stored in user home directory.
+ */
+class LLFavoritesOrderStorage : public LLSingleton<LLFavoritesOrderStorage>
+ , public LLDestroyClass<LLFavoritesOrderStorage>
{
- std::string result;
- BOOL hasSortField = extractSortFieldAndDisplayName(0, &result);
+public:
+ /**
+ * Sets sort index for specified with LLUUID favorite landmark
+ */
+ void setSortIndex(const LLUUID& inv_item_id, S32 sort_index);
+
+ /**
+ * Gets sort index for specified with LLUUID favorite landmark
+ */
+ S32 getSortIndex(const LLUUID& inv_item_id);
+ void removeSortIndex(const LLUUID& inv_item_id);
+
+ /**
+ * Implementation of LLDestroyClass. Calls cleanup() instance method.
+ *
+ * It is important this callback is called before gInventory is cleaned.
+ * For now it is called from LLAppViewer::cleanup() -> LLAppViewer::disconnectViewer(),
+ * Inventory is cleaned later from LLAppViewer::cleanup() after LLAppViewer::disconnectViewer() is called.
+ * @see cleanup()
+ */
+ static void destroyClass();
+
+ const static S32 NO_INDEX;
+private:
+ friend class LLSingleton<LLFavoritesOrderStorage>;
+ LLFavoritesOrderStorage() : mIsDirty(false) { load(); }
+ ~LLFavoritesOrderStorage() { save(); }
+
+ /**
+ * Removes sort indexes for items which are not in Favorites bar for now.
+ */
+ void cleanup();
+
+ const static std::string SORTING_DATA_FILE_NAME;
+
+ void load();
+ void save();
+
+ typedef std::map<LLUUID, S32> sort_index_map_t;
+ sort_index_map_t mSortIndexes;
+
+ bool mIsDirty;
+
+ struct IsNotInFavorites
+ {
+ IsNotInFavorites(const LLInventoryModel::item_array_t& items)
+ : mFavoriteItems(items)
+ {
- return mDisplayName = hasSortField ? result : LLInventoryItem::getName();
-}
+ }
-// static
-std::string LLViewerInventoryItem::getDisplayName(const std::string& name)
-{
- std::string result;
- BOOL hasSortField = extractSortFieldAndDisplayName(name, 0, &result);
+ /**
+ * Returns true if specified item is not found among inventory items
+ */
+ bool operator()(const sort_index_map_t::value_type& id_index_pair) const
+ {
+ LLPointer<LLViewerInventoryItem> item = gInventory.getItem(id_index_pair.first);
+ if (item.isNull()) return true;
- return hasSortField ? result : name;
-}
+ LLInventoryModel::item_array_t::const_iterator found_it =
+ std::find(mFavoriteItems.begin(), mFavoriteItems.end(), item);
-S32 LLViewerInventoryItem::getSortField() const
-{
- S32 result;
- BOOL hasSortField = extractSortFieldAndDisplayName(&result, 0);
+ return found_it == mFavoriteItems.end();
+ }
+ private:
+ LLInventoryModel::item_array_t mFavoriteItems;
+ };
+
+};
+
+const std::string LLFavoritesOrderStorage::SORTING_DATA_FILE_NAME = "landmarks_sorting.xml";
+const S32 LLFavoritesOrderStorage::NO_INDEX = -1;
- return hasSortField ? result : -1;
+void LLFavoritesOrderStorage::setSortIndex(const LLUUID& inv_item_id, S32 sort_index)
+{
+ mSortIndexes[inv_item_id] = sort_index;
+ mIsDirty = true;
}
-void LLViewerInventoryItem::setSortField(S32 sortField)
+S32 LLFavoritesOrderStorage::getSortIndex(const LLUUID& inv_item_id)
{
- using std::string;
+ sort_index_map_t::const_iterator it = mSortIndexes.find(inv_item_id);
+ if (it != mSortIndexes.end())
+ {
+ return it->second;
+ }
+ return NO_INDEX;
+}
- std::stringstream ss;
- ss << sortField;
+void LLFavoritesOrderStorage::removeSortIndex(const LLUUID& inv_item_id)
+{
+ mSortIndexes.erase(inv_item_id);
+ mIsDirty = true;
+}
- string newSortField = ss.str();
+// static
+void LLFavoritesOrderStorage::destroyClass()
+{
+ LLFavoritesOrderStorage::instance().cleanup();
+}
- const char separator = getSeparator();
- const string::size_type separatorPos = mName.find(separator, 0);
+void LLFavoritesOrderStorage::load()
+{
+ // load per-resident sorting information
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME);
- if (separatorPos < string::npos)
+ LLSD settings_llsd;
+ llifstream file;
+ file.open(filename);
+ if (file.is_open())
{
- // the name of the LLViewerInventoryItem already consists of sort field and display name.
- mName = newSortField + separator + mName.substr(separatorPos + 1, string::npos);
+ LLSDSerialize::fromXML(settings_llsd, file);
}
- else
+
+ for (LLSD::map_const_iterator iter = settings_llsd.beginMap();
+ iter != settings_llsd.endMap(); ++iter)
{
- // there is no sort field in the name of LLViewerInventoryItem, we should add it
- mName = newSortField + separator + mName;
+ mSortIndexes.insert(std::make_pair(LLUUID(iter->first), (S32)iter->second.asInteger()));
}
}
-void LLViewerInventoryItem::rename(const std::string& n)
+void LLFavoritesOrderStorage::save()
{
- using std::string;
+ // nothing to save if clean
+ if (!mIsDirty) return;
- string new_name(n);
- LLStringUtil::replaceNonstandardASCII(new_name, ' ');
- LLStringUtil::replaceChar(new_name, '|', ' ');
- LLStringUtil::trim(new_name);
- LLStringUtil::truncate(new_name, DB_INV_ITEM_NAME_STR_LEN);
+ // If we quit from the login screen we will not have an SL account
+ // name. Don't try to save, otherwise we'll dump a file in
+ // C:\Program Files\SecondLife\ or similar. JC
+ std::string user_dir = gDirUtilp->getLindenUserDir();
+ if (!user_dir.empty())
+ {
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME);
+ LLSD settings_llsd;
- const char separator = getSeparator();
- const string::size_type separatorPos = mName.find(separator, 0);
+ for(sort_index_map_t::const_iterator iter = mSortIndexes.begin(); iter != mSortIndexes.end(); ++iter)
+ {
+ settings_llsd[iter->first.asString()] = iter->second;
+ }
- if (separatorPos < string::npos)
- {
- mName.replace(separatorPos + 1, string::npos, new_name);
- }
- else
- {
- mName = new_name;
+ llofstream file;
+ file.open(filename);
+ LLSDSerialize::toPrettyXML(settings_llsd, file);
}
}
+void LLFavoritesOrderStorage::cleanup()
+{
+ // nothing to clean
+ if (!mIsDirty) return;
+
+ const LLUUID fav_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ gInventory.collectDescendents(fav_id, cats, items, LLInventoryModel::EXCLUDE_TRASH);
+
+ IsNotInFavorites is_not_in_fav(items);
+
+ sort_index_map_t aTempMap;
+ //copy unremoved values from mSortIndexes to aTempMap
+ std::remove_copy_if(mSortIndexes.begin(), mSortIndexes.end(),
+ inserter(aTempMap, aTempMap.begin()),
+ is_not_in_fav);
+
+ //Swap the contents of mSortIndexes and aTempMap
+ mSortIndexes.swap(aTempMap);
+}
+
+
+S32 LLViewerInventoryItem::getSortField() const
+{
+ return LLFavoritesOrderStorage::instance().getSortIndex(mUUID);
+}
+
+void LLViewerInventoryItem::setSortField(S32 sortField)
+{
+ LLFavoritesOrderStorage::instance().setSortIndex(mUUID, sortField);
+}
+
const LLPermissions& LLViewerInventoryItem::getPermissions() const
{
// Use the actual permissions of the symlink, not its parent.
@@ -1334,6 +1450,8 @@ U32 LLViewerInventoryItem::getCRC32() const
return LLInventoryItem::getCRC32();
}
+// *TODO: mantipov: should be removed with LMSortPrefix patch in llinventorymodel.cpp, EXT-3985
+static char getSeparator() { return '@'; }
BOOL LLViewerInventoryItem::extractSortFieldAndDisplayName(const std::string& name, S32* sortField, std::string* displayName)
{
using std::string;
@@ -1369,12 +1487,6 @@ BOOL LLViewerInventoryItem::extractSortFieldAndDisplayName(const std::string& na
return result;
}
-void LLViewerInventoryItem::insertDefaultSortField(std::string& name)
-{
- name.insert(0, std::string("1") + getSeparator());
-}
-
-
// This returns true if the item that this item points to
// doesn't exist in memory (i.e. LLInventoryModel). The baseitem
// might still be in the database but just not loaded yet.
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
index 7f3f019b07..c24f76c87a 100644
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -64,12 +64,8 @@ public:
virtual LLAssetType::EType getType() const;
virtual const LLUUID& getAssetUUID() const;
virtual const std::string& getName() const;
- virtual const std::string& getDisplayName() const;
- static std::string getDisplayName(const std::string& name);
- static char getSeparator() { return '@'; }
virtual S32 getSortField() const;
virtual void setSortField(S32 sortField);
- virtual void rename(const std::string& new_name);
virtual const LLPermissions& getPermissions() const;
virtual const LLUUID& getCreatorUUID() const;
virtual const std::string& getDescription() const;
@@ -82,7 +78,6 @@ public:
virtual U32 getCRC32() const; // really more of a checksum.
static BOOL extractSortFieldAndDisplayName(const std::string& name, S32* sortField, std::string* displayName);
- static void insertDefaultSortField(std::string& name);
// construct a complete viewer inventory item
LLViewerInventoryItem(const LLUUID& uuid, const LLUUID& parent_uuid,
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 0801e53fbf..7f665a7d98 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -53,7 +53,6 @@
#include "llfloaterbuycontents.h"
#include "llfloaterbuycurrency.h"
#include "llfloatercustomize.h"
-#include "llfloaterchatterbox.h"
#include "llfloatergodtools.h"
#include "llfloaterinventory.h"
#include "llfloaterland.h"
@@ -82,7 +81,6 @@
#include "llsidetray.h"
#include "llstatusbar.h"
#include "lltextureview.h"
-#include "lltoolbar.h"
#include "lltoolcomp.h"
#include "lltoolmgr.h"
#include "lltoolpie.h"
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index bb729913a7..d0964450e8 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -630,7 +630,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
delete_context_data = FALSE;
LLSD args;
args["NAME"] = name;
- args["INVITE"] = message;
LLNotificationsUtil::add("JoinedTooManyGroupsMember", args, notification["payload"]);
}
}
@@ -1435,31 +1434,6 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
return false;
}
-std::string get_display_name(const std::string& name)
-{
- // We receive landmark name as \'<n>@name\' where <n> is a number
- // LLViewerInventoryItem::getDisplayName will remove \'<n>@ though we need the \'
- // Lets save all chars preceding @ and insert them back after <n>@ was removed
-
- std::string saved;
-
- if(std::string::npos != name.find(LLViewerInventoryItem::getSeparator()))
- {
- int n = 0;
- while(!isdigit(name[n]) && LLViewerInventoryItem::getSeparator() != name[n])
- {
- ++n;
- }
- saved = name.substr(0, n);
- }
-
- std::string d_name = LLViewerInventoryItem::getDisplayName(name);
- d_name.insert(0, saved);
- LLStringUtil::trim(d_name);
-
- return d_name;
-}
-
void inventory_offer_handler(LLOfferInfo* info)
{
//Until throttling is implmented, busy mode should reject inventory instead of silently
@@ -1497,11 +1471,6 @@ void inventory_offer_handler(LLOfferInfo* info)
LLStringUtil::truncate(msg, indx);
}
- if(LLAssetType::AT_LANDMARK == info->mType)
- {
- msg = get_display_name(msg);
- }
-
LLSD args;
args["[OBJECTNAME]"] = msg;
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index b3450a8f36..9d7ccd99c6 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -69,7 +69,6 @@
#include "llviewerparceloverlay.h"
#include "llviewerregion.h"
#include "llworld.h"
-#include "lloverlaybar.h"
#include "roles_constants.h"
#include "llweb.h"
@@ -1815,7 +1814,7 @@ void LLViewerParcelMgr::processParcelAccessListReply(LLMessageSystem *msg, void
if (parcel_id != parcel->getLocalID())
{
- llwarns << "processParcelAccessListReply for parcel " << parcel_id
+ LL_WARNS_ONCE("") << "processParcelAccessListReply for parcel " << parcel_id
<< " which isn't the selected parcel " << parcel->getLocalID()<< llendl;
return;
}
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index afc4fed3f0..b4484ac736 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -101,7 +101,6 @@
#include "llfloaterbuildoptions.h"
#include "llfloaterbuyland.h"
#include "llfloatercamera.h"
-#include "llfloaterchatterbox.h"
#include "llfloatercustomize.h"
#include "llfloaterland.h"
#include "llfloaterinspect.h"
@@ -128,7 +127,6 @@
#include "llmorphview.h"
#include "llmoveview.h"
#include "llnavigationbar.h"
-#include "lloverlaybar.h"
#include "llpreviewtexture.h"
#include "llprogressview.h"
#include "llresmgr.h"
@@ -147,7 +145,6 @@
#include "lltexturefetch.h"
#include "lltextureview.h"
#include "lltool.h"
-#include "lltoolbar.h"
#include "lltoolcomp.h"
#include "lltooldraganddrop.h"
#include "lltoolface.h"
@@ -1463,10 +1460,6 @@ void LLViewerWindow::initWorldUI()
bottom_tray_container->addChild(bottom_tray);
bottom_tray_container->setVisible(TRUE);
- // Pre initialize instance communicate instance;
- // currently needs to happen before initializing chat or IM
- LLFloaterReg::getInstance("communicate");
-
LLRect morph_view_rect = full_window;
morph_view_rect.stretch( -STATUS_BAR_HEIGHT );
morph_view_rect.mTop = full_window.mTop - 32;
@@ -2269,15 +2262,18 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)
void LLViewerWindow::moveCursorToCenter()
{
- S32 x = getWorldViewWidthScaled() / 2;
- S32 y = getWorldViewHeightScaled() / 2;
+ if (! gSavedSettings.getBOOL("DisableMouseWarp"))
+ {
+ S32 x = getWorldViewWidthScaled() / 2;
+ S32 y = getWorldViewHeightScaled() / 2;
- //on a forced move, all deltas get zeroed out to prevent jumping
- mCurrentMousePoint.set(x,y);
- mLastMousePoint.set(x,y);
- mCurrentMouseDelta.set(0,0);
+ //on a forced move, all deltas get zeroed out to prevent jumping
+ mCurrentMousePoint.set(x,y);
+ mLastMousePoint.set(x,y);
+ mCurrentMouseDelta.set(0,0);
- LLUI::setMousePositionScreen(x, y);
+ LLUI::setMousePositionScreen(x, y);
+ }
}
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 589999c026..9d49fb69d6 100644
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -698,7 +698,11 @@ void LLVoiceChannelProximal::handleStatusChange(EStatusType status)
// do not notify user when leaving proximal channel
return;
case STATUS_VOICE_DISABLED:
- LLCallInfoDialog::show("unavailable", mNotifyArgs);
+ //skip showing "Voice not available at your current location" when agent voice is disabled (EXT-4749)
+ if(LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking())
+ {
+ LLCallInfoDialog::show("unavailable", mNotifyArgs);
+ }
return;
default:
break;
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index a0d42d9b5f..560c2ab469 100644
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -72,8 +72,6 @@
#include "llvoavatarself.h"
#include "llvoicechannel.h"
-#include "llfloaterfriends.h" //VIVOX, inorder to refresh communicate panel
-
// for base64 decoding
#include "apr_base64.h"
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 4acf3cb6fb..3f1ddc0ee7 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -905,14 +905,13 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &params, const S32 detail, bool
// if it's a mesh
if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH)
{ //meshes might not have all LODs, get the force detail to best existing LOD
+
LLUUID mesh_id = params.getSculptID();
//profile and path params don't matter for meshes
- volume_params = LLVolumeParams();
volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE);
- volume_params.setSculptID(mesh_id, LL_SCULPT_TYPE_MESH);
- lod = gMeshRepo.getActualMeshLOD(mesh_id, lod);
+ lod = gMeshRepo.getActualMeshLOD(volume_params, lod);
}
}
@@ -963,7 +962,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &params, const S32 detail, bool
{
//load request not yet issued, request pipeline load this mesh
LLUUID asset_id = volume_params.getSculptID();
- S32 available_lod = gMeshRepo.loadMesh(this, asset_id, lod);
+ S32 available_lod = gMeshRepo.loadMesh(this, volume_params, lod);
if (available_lod != lod)
{
LLPrimitive::setVolume(volume_params, available_lod);
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
index 5636256856..d6a9837b86 100644
--- a/indra/newview/llwearablelist.cpp
+++ b/indra/newview/llwearablelist.cpp
@@ -38,7 +38,6 @@
#include "llassetstorage.h"
#include "llagent.h"
#include "llvoavatar.h"
-#include "llviewerinventory.h"
#include "llviewerstats.h"
#include "llnotificationsutil.h"
#include "llinventorymodel.h"
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
index 9806f45bc4..c6bba3f077 100644
--- a/indra/newview/skins/default/xui/en/floater_about.xml
+++ b/indra/newview/skins/default/xui/en/floater_about.xml
@@ -21,7 +21,7 @@ Built with [COMPILER] version [COMPILER_VERSION]
</floater.string>
<floater.string
name="AboutPosition">
-You are at [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] in [REGION] located at [HOSTNAME] ([HOSTIP])
+You are at [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1] in [REGION] located at &lt;nolink&gt;[HOSTNAME]&lt;/nolink&gt; ([HOSTIP])
[SERVER_VERSION]
[[SERVER_RELEASE_NOTES_URL] [ReleaseNotes]]
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index d2e5473157..9aaa660574 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -12,7 +12,7 @@
can_minimize="true"
can_close="true"
visible="false"
- width="360"
+ width="440"
can_resize="true"
min_width="250"
min_height="190">
@@ -20,7 +20,7 @@
animate="false"
follows="all"
height="320"
- width="360"
+ width="440"
layout="topleft"
orientation="horizontal"
name="im_panels"
@@ -38,7 +38,7 @@
left="0"
top="0"
height="200"
- width="245"
+ width="325"
user_resize="true">
<button
height="20"
@@ -65,7 +65,7 @@
parse_highlights="true"
allow_html="true"
left="1"
- width="240">
+ width="320">
</chat_history>
<line_editor
bottom="0"
@@ -75,7 +75,7 @@
label="To"
layout="bottomleft"
name="chat_editor"
- width="240">
+ width="320">
</line_editor>
</layout_panel>
</layout_stack>
diff --git a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
index d96f3c5494..649f0edff7 100644
--- a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
@@ -62,14 +62,4 @@
function="Gesture.EnableAction"
parameter="edit_gesture" />
</menu_item_call>
- <menu_item_call
- label="Inspect"
- layout="topleft"
- name="inspect">
- <on_click
- function="Gesture.Action.ShowPreview" />
- <on_enable
- function="Gesture.EnableAction"
- parameter="inspect" />
- </menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 0fe4e19bf1..f46ab44f29 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -2941,7 +2941,6 @@ Chat and instant messages will be hidden. Instant messages will get your Busy mo
type="alert">
You have reached your maximum number of groups. Please leave another group before joining this one, or decline the offer.
[NAME] has invited you to join a group as a member.
-[INVITE]
<usetemplate
name="okcancelbuttons"
notext="Decline"
@@ -3088,7 +3087,7 @@ Join me in [REGION]
icon="alertmodal.tga"
name="TeleportFromLandmark"
type="alertmodal">
-Are you sure you want to teleport to [LOCATION]?
+Are you sure you want to teleport to &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
<usetemplate
ignoretext="Confirm that I want to teleport to a landmark"
name="okcancelignore"
@@ -3851,7 +3850,7 @@ Are you sure you want to quit?
type="alertmodal">
Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards].
-All reported abuses are investigated and resolved. You can view the resolution by reading the [http://secondlife.com/support/incidentreport.php Incident Report].
+All reported abuses are investigated and resolved.
<unique/>
</notification>
@@ -5157,7 +5156,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th
<notification
icon="notify.tga"
name="OfferFriendship"
- type="alertmodal">
+ type="offer">
[NAME] is offering friendship.
[MESSAGE]
@@ -5172,10 +5171,6 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th
index="1"
name="Decline"
text="Decline"/>
- <button
- index="2"
- name="Send IM"
- text="Send IM"/>
</form>
</notification>
diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
index 39170b90ca..072ea882e6 100644
--- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
@@ -29,7 +29,7 @@
text_color="white"
top="5"
width="250">
- Blocked List
+ Block List
</text>
<scroll_list
follows="all"
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 09ec2137b7..aad55685d2 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -87,7 +87,7 @@
image_name="spacer24.tga"
layout="topleft"
left="0"
- name="DUMMY"
+ name="after_speak_panel"
min_width="3"
top="0"
width="3"/>
@@ -127,7 +127,7 @@
layout="topleft"
left="0"
min_width="3"
- name="DUMMY"
+ name="after_gesture_panel"
top="0"
width="3"/>
<layout_panel
@@ -169,7 +169,7 @@
layout="topleft"
left="0"
min_width="3"
- name="DUMMY"
+ name="after_movement_panel"
top="0"
width="3"/>
<layout_panel
@@ -212,7 +212,7 @@
layout="topleft"
left="0"
min_width="3"
- name="DUMMY"
+ name="after_cam_panel"
top="0"
width="3"/>
<layout_panel
@@ -317,6 +317,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
layout="topleft"
left="0"
min_width="4"
+ name="DUMMY"
top="0"
width="5"/>
<layout_panel
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
new file mode 100644
index 0000000000..6e9476f814
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ default_tab_group="2"
+ mouse_opaque="true"
+ background_visible="true"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
+ follows="left|bottom|right"
+ height="33"
+ layout="topleft"
+ left="0"
+ name="bottom_tray_lite"
+ tab_stop="true"
+ top="28"
+ chrome="true"
+ border_visible="false"
+ visible="false"
+ width="1000">
+ <layout_stack
+ mouse_opaque="false"
+ border_size="0"
+ clip="false"
+ follows="all"
+ height="28"
+ layout="topleft"
+ left="0"
+ name="toolbar_stack_lite"
+ orientation="horizontal"
+ top="0"
+ width="1000">
+ <icon
+ auto_resize="false"
+ follows="left|right"
+ height="10"
+ image_name="spacer24.tga"
+ layout="topleft"
+ min_width="2"
+ left="0"
+ top="0"
+ width="2" />
+ <layout_panel
+ mouse_opaque="false"
+ auto_resize="true"
+ follows="left|right"
+ height="28"
+ layout="topleft"
+ left="0"
+ min_height="23"
+ width="310"
+ top="4"
+ min_width="188"
+ name="chat_bar"
+ user_resize="false"
+ filename="panel_nearby_chat_bar.xml" />
+ <layout_panel
+ mouse_opaque="false"
+ auto_resize="false"
+ follows="right"
+ height="28"
+ layout="topleft"
+ min_height="28"
+ width="82"
+ top_delta="0"
+ min_width="52"
+ name="gesture_panel"
+ user_resize="false">
+ <gesture_combo_list
+ follows="left|right"
+ height="23"
+ label="Gesture"
+ layout="topleft"
+ name="Gesture"
+ left="0"
+ top="5"
+ width="82"
+ tool_tip="Shows/hides gestures">
+ <gesture_combo_list.combo_button
+ pad_right="10"
+ use_ellipses="true" />
+ </gesture_combo_list>
+ </layout_panel>
+ <icon
+ auto_resize="false"
+ color="0 0 0 0"
+ follows="left|right"
+ height="10"
+ image_name="spacer24.tga"
+ layout="topleft"
+ left="0"
+ min_width="3"
+ name="after_gesture_panel"
+ top="0"
+ width="3"/>
+ </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
index af73faf9a1..b903032ed5 100644
--- a/indra/newview/skins/default/xui/en/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_general.xml
@@ -42,17 +42,20 @@ Hover your mouse over the options for more help.
height="156"
layout="topleft"
left="0"
- right="-1"
name="visible_members"
top_pad="2">
<name_list.columns
label="Member"
name="name"
- relative_width="0.6" />
+ relative_width="0.4" />
<name_list.columns
label="Title"
name="title"
relative_width="0.4" />
+ <name_list.columns
+ label="Status"
+ name="status"
+ relative_width="0.2" />
</name_list>
<text
follows="left|top|right"
diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml
index 7204e57479..5a1bc32db0 100644
--- a/indra/newview/skins/default/xui/en/panel_instant_message.xml
+++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml
@@ -35,6 +35,16 @@
name="avatar_icon"
top="3"
width="18" />
+ <group_icon
+ follows="right"
+ height="18"
+ default_icon_name="Generic_Group"
+ layout="topleft"
+ left="3"
+ mouse_opaque="false"
+ name="group_icon"
+ top="3"
+ width="18" />
<!--<icon
follows="right"
height="20"
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
index 65ccd10cf0..7489988722 100644
--- a/indra/newview/skins/default/xui/en/panel_pick_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml
@@ -88,6 +88,7 @@
follows="all"
height="100"
width="280"
+ allow_html="true"
hide_scrollbar="false"
layout="topleft"
left="10"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index a0fcf59fc8..82821a1dfe 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -707,7 +707,8 @@
top_delta="16"
width="315" />
</radio_group>
- </panel>
+ </panel>
+
<button
follows="left|bottom"
height="23"
@@ -717,7 +718,8 @@
left="10"
name="Apply"
top="383"
- width="115">
+ width="115"
+ >
<button.commit_callback
function="Pref.Apply" />
</button>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index 0aaeb6114e..f7e3ede93c 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -174,8 +174,7 @@
</text>
<line_editor
bottom="366"
- control_name="InstantMessageLogFolder"
- enabled="false"
+ control_name="InstantMessageLogPath"
follows="top|left|right"
halign="right"
height="23"
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
index 7b28a3b72c..f7ac5361c5 100644
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -56,9 +56,9 @@ void LLLogin::disconnect()
//-----------------------------------------------------------------------------
#include "../llviewernetwork.h"
-unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {'1','2','3','4','5','6'}; /* Flawfinder: ignore */
+unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {'1','2','3','4','5','6'};
-LLViewerLogin::LLViewerLogin() {}
+LLViewerLogin::LLViewerLogin() : mGridChoice(GRID_INFO_NONE) {}
LLViewerLogin::~LLViewerLogin() {}
void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const
{
diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp
index 297d98ad8d..dd61ac6ae5 100644
--- a/indra/newview/tests/llviewerhelputil_test.cpp
+++ b/indra/newview/tests/llviewerhelputil_test.cpp
@@ -87,8 +87,6 @@ public:
__attribute__ ((noinline))
#endif
BOOL isGodlike() const { return FALSE; }
-private:
- int dummy;
};
LLAgent gAgent;
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 37c2102e8f..595afd86e0 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -268,12 +268,17 @@ class WindowsManifest(ViewerManifest):
self.path('libapr-1.dll')
self.path('libaprutil-1.dll')
self.path('libapriconv-1.dll')
+
except RuntimeError, err:
print err.message
print "Skipping llcommon.dll (assuming llcommon was linked statically)"
self.disable_manifest_check()
+ # Mesh 3rd party libs needed for auto LOD and collada reading
+ self.path("libcollada14dom21.dll")
+ self.path("glod.dll")
+
# For textures
if self.args['configuration'].lower() == 'debug':
self.path("openjpegd.dll")
@@ -320,12 +325,6 @@ class WindowsManifest(ViewerManifest):
# For using FMOD for sound... DJS
self.path("fmod.dll")
- # For automatic level of detail generation in mesh importer
- self.path("glod.dll")
-
- # For reading collada files
- self.path("libcollada14dom21.dll")
-
self.enable_no_crt_manifest_check()
# Media plugins - QuickTime